LLVM的Fibonacci
示例使用errs() << *theModule
打印出LLVM IR。
是否有任何函数能够将生成的LLVM IR存储到(矢量)字符串或任何其他变量而不是仅将其打印出来? (例如,std::string llvm_IR = theModule->getIR()
)
我一直在搜索llvm::Module Class Reference并且没有得到任何帮助。
Fibonacci.cpp
的一部分:
// CreateFibFunction
以生成fibonacci
函数。
LLVMContext Context;
// Create some module to put our function into it.
std::unique_ptr<Module> Owner(new Module("test", Context));
Module *theModule = Owner.get();
// We are about to create the "fib" function:
Function *FibF = CreateFibFunction(M, Context);
errs() << "OK\n";
errs() << "We just constructed this LLVM module:\n\n---------\n";
errs() << *theModule;
errs() << "---------\nstarting fibonacci(" << n << ") with JIT...\n";
答案 0 :(得分:6)
您可以采用相同的方式 - 而不是使用errs()
raw_ostream
,而不是raw_string_ostream
,您可以使用std::string Str;
raw_string_ostream OS(Str);
OS << *theModule;
OS.flush()
// Str now contains the module text
,如下所示:
{{1}}
答案 1 :(得分:0)
将模块文本打印到流类似于Module类的外部。 PrintModulePass或类似的取决于您的版本
我找到了一个打印模块的工具,看看他们是如何做到的,也许是&#39; opt&#39;。