从std :: istream中读取LLVM IR

时间:2012-10-22 14:12:05

标签: c++ llvm llvm-ir

以前我曾问过如何写入然后从文件读回IR。读取代码看起来像:

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

但是,我试图改进LLVM IR的代码只传递了std::istream&。如何从std::istream

中读取IR

我想出了如何使用raw_os_ostream来使std::ostream适应raw_ostream来编写模块,但是没有明显的方法来调整代码以进行阅读,例如,没有{ {1}}适应MemoryBuffer(除非我错过了它)。

1 个答案:

答案 0 :(得分:2)

您应该使用ParseIR()代替ParseIRFile()。它获取MemoryBuffer作为参数,而不是文件名。您可以通过MemoryBuffer工厂方法从StringRef创建getMemBuffer()

/// 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);

由于StringRef可以(甚至隐式)从std::string构建,因此您需要做的就是convert your std::istream to std::string