以前我曾问过如何写入然后从文件读回IR。读取代码看起来像:
LLVMContext ctx;
SMDiagnostic diag;
Module *m = ParseIRFile( "my_file", diag, ctx );
但是,我试图改进LLVM IR的代码只传递了std::istream&
。如何从std::istream
?
我想出了如何使用raw_os_ostream
来使std::ostream
适应raw_ostream
来编写模块,但是没有明显的方法来调整代码以进行阅读,例如,没有{ {1}}适应MemoryBuffer
(除非我错过了它)。
答案 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
。