从包含一些 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/