如何将生成的llvm :: Module的LLVM-IR代码存储到字符串中?

时间:2015-11-27 15:11:01

标签: llvm

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";

2 个答案:

答案 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;。