乐趣区

关于llvm:C-打印生成的-LLVM-IR-以及-写入文件

如果你的指标是运行 LLVM IR, 则不倡议写入文件, 因为 LLVM 提供了 JIT 的形式间接从 C++ 运行. 后续会有相干文章链接放在此处.

首先, 咱们必须有一个 LLVM Module 作为根底, 也就是生成 LLVM IR 的时候应用的 Module, 此处应用 theModule 作为例子.

查找 llvm/IR/Module.h 文件, 理解到 print 函数承受如下参数:

应用如下参数, 能够将后果输入到命令行, 即 stdout 或者 stderr.

/* llvm ir -> stdout */
theModule->print(llvm::outs(), nullptr);
/* llvm ir -> stderr */
// llvm_module -> print(llvm::errs(), nullptr);

应用如下代码, 能够将后果输入到文件 output.ll 中:

std::error_code EC;
llvm::raw_fd_ostream output_stream(
  "output.ll", /* file name */
  EC,
  llvm::sys::fs::OpenFlags::OF_None
);
if (EC) {std::cerr << "Can't open file output.ll; " << EC.message() << std::endl;
}

/* write to current_work_directory/output.ll */
theModule->print(output_stream, nullptr);

输入的文件关上后为人类可读代码, 能够应用 lli 工具执行, 在此咱们应用 C++ 的 system 函数:

int lli_result = std::system("lli output.ll");

执行后果 0 代表 胜利运行, 1 代表 运行谬误.

退出移动版