2

以前、私はIRをファイルに書き込んだり、ファイルから読み戻したりする方法を尋ねていました。読み取ったコードは次のようになりました。

LLVMContext ctx;
SMDiagnostic diag;
Module *m = ParseIRFile( "my_file", diag, ctx );

ただし、LLVM IRを後付けしようとしているコードは、私に合格しますstd::istream&。どうすればIRを読み取ることができstd::istreamますか?

モジュールを書くためにaをraw_os_ostreamに適応させる方法を理解しましたが、コードを読み取りに適応させる明確な方法はありません。たとえば、(見逃した場合を除いて)適応する方法はありません。std::ostreamraw_ostreamMemoryBufferstd::istream

4

1 に答える 1

2

ParseIR()の代わりに使用する必要がありParseIRFile()ます。MemoryBufferファイル名の代わりに、パラメータとして取得します。ファクトリメソッドを介してMemoryBufferからを作成できます。StringRefgetMemBuffer()

/// getMemBuffer - Open the specified memory range as a MemoryBuffer.  Note
/// that InputData must be null terminated if RequiresNullTerminator is true.
static MemoryBuffer *getMemBuffer(StringRef InputData,
                                  StringRef BufferName = "",
                                  bool RequiresNullTerminator = true);

また、aStringRefは(暗黙的にも)から構築できるためstd::string、必要なのはをに変換するstd::istreamことstd::stringだけです。

于 2012-11-27T08:08:56.987 に答える