以前,我问过如何将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,但没有明显的方法来适配代码以供阅读,例如,没有适配std::istream的MemoryBuffer (除非我错过了)。
发布于 2012-11-27 16:08:57
您应该使用ParseIR()而不是ParseIRFile()。它获取一个MemoryBuffer作为参数,而不是一个文件名。您可以通过StringRef的getMemBuffer()工厂方法从其创建MemoryBuffer:
/// 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。
https://stackoverflow.com/questions/13013270
复制相似问题