c++ - 使用 LLVM API 生成静态代码

标签 c++ llvm

从包含一些 IR 的 LLVM 模块 *Mod 开始:如何使用特定的后端从中生成目标特定的汇编程序?不幸的是,Kaleidoscope 教程没有对此进行详细说明。它仅使用执行引擎对程序进行 JIT 编译(在构建、目标体系结构上),但实际上并不选择特定的后端来生成特定于目标的汇编程序。任何 LLVM 教程也没有,因为我认为它们没有详细说明如何构建静态编译器。因此,这个问题可以提供这条缺失的信息。

由于我们要构建一个静态编译器,所以我们不想使用llc 等命令行工具来完成这项工作。我们想使用 LLVM API。

为了使这个更具体,让我们从这段代码开始:

LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);

文件名(由第一个参数给出)已成功解析为 IR。现在让我们跳过优化过程并创建一些具有特定后端的汇编程序,例如PTX 后端(自版本 3.2 起可用)。

最佳答案

只需查看tools/llc/llc.cpp 的源代码。它做到了所有这些,而且它很短而且不难理解。如果您对某些您不理解的事情有具体问题,请随时提出。

关于c++ - 使用 LLVM API 生成静态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16463486/

相关文章:

f# - 是否有任何工具可以帮助将 F# 移植到 OCaml?

c++ - 如何防止另一个线程修改状态标志?

c++ - 无法从 getsockname 获取本地主机 IP 地址?

c++ - 获取 LLVM 模块中的所有值

c++ - 在 LLVM 模块上运行标准优化传递

用于解析 LLVM IR 的 Haskell 包?

LLVM 提供的 main() 返回类型无效

c++ - CMake 在更改时不会重新编译源文件?

c++ - 使用 libcurl 编写 HTTPS SOAP 客户端

c++ - 快速排序 3 个值