2

以前我曾问过如何在文件中写入然后读回 IR。读取的代码如下所示:

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

但是,我试图将 LLVM IR 改造成的代码只传递给我一个std::istream&. 如何从 IR 中读取 IR std::istream

我想出了如何使用raw_os_ostreama 来适应 astd::ostreamraw_ostream编写模块,但是没有明显的方法来适应代码以供阅读,例如,没有MemoryBuffer适应 a std::istream(除非我错过了)。

4

1 回答 1

2

您应该使用ParseIR()而不是ParseIRFile(). 它得到一个MemoryBufferas 参数,而不是文件名。您可以通过其工厂方法MemoryBuffer从 a创建一个: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可以(甚至隐式地)从 a 构造std::string,所以您需要做的就是将您的转换std::istreamstd::string.

于 2012-11-27T08:08:56.987 回答