从模块 obejct 获取 LLVM IR 的文本表示

问题描述

我目前正在为类似 C/C++ 的语言开发一个编译器。我已经到了代码生成的编译阶段。我正在使用 LLVM C++ api 从输入文件创建一个 LLVM IR。

据我所知,我的模块对象(我只使用一个模块)应该包含获取 LLVM IR 作为字符串的文本表示所需的所有信息。

但我真的不知道该怎么做。

解决方法

如果您希望获得 llvm::Module 的 LLVM IR,您可以使用 llvm::Module::print 函数。将此与 LLVM 标准流结合使用,如下所示:

llvm::Module module = ...
module.print(llvm::errs()); // for stderr,llvm::outs() for stdout
,

另见dump()

module.dump();  // print to stderr

或者使用raw_ostream

llvm::outs() << module;
// or
llvm::errs() << module;
// or
llvm::dbgs() << module;