从包含一些IR的LLVM模块*Mod
开始:如何使用特定的后端从中生成特定于目标的汇编程序?不幸的是,Kaleidoscope教程没有详细说明。它只使用执行引擎来编译程序(在构建,目标体系结构上),但实际上并没有选择特定的后端来生成特定于目标的汇编程序。我认为,任何LLVM教程都没有,因为他们没有详细说明构建静态编译器。因此,这个问题可以提供这一缺失的信息。
由于我们要构建静态编译器,因此我们不希望使用llc
等命令行工具来完成这项工作。我们想使用LLVM API。
为了使这个更具体,让我们从这段代码开始:
LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);
文件名(由第一个参数给出)已成功解析为IR。现在让我们跳过优化过程并创建一些具有特定后端的汇编程序,例如PTX后端(自3.2版开始提供)。
答案 0 :(得分:8)
只需查看tools/llc/llc.cpp
的源代码即可。它做到了这一切,它很短,不难理解。如果您对某些事情有特定的疑问,请不要理解,请随时提出。