5
从包含一些IR的LLVM模块*Mod
开始:如何使用特定的后端从其生成目标特定的汇编程序?不幸的是,万花筒教程没有详细介绍。它仅使用执行引擎来JIT编译程序(在构建目标体系结构上),但实际上并未选择特定的后端来生成特定于目标的汇编程序。我想,LLVM教程也没有,因为它们没有详细说明如何构建静态编译器。因此,这个问题可以提供这些缺失的信息。使用LLVM API生成静态代码
由于我们想构建一个静态编译器,因此我们不想使用命令行工具如llc
等来完成这项工作。我们想要使用LLVM API。
为了使这更具体,让我们开始使用此代码:
LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);
的文件名(由第一个参数给出)被成功解析到IR。现在让我们跳过优化过程并创建一些带有特定后端的汇编程序,例如PTX后端(从3.2版开始可用)。
好吧,我自己想到了这件事,但是因为我刚刚开始使用LLVM而离开了。然而你的回答听起来令人鼓舞附:我喜欢指示的生活! – ritter 2013-05-09 15:02:54
了解目标体系结构(即nvptx64),是否必须使用Triple类来创建目标体系结构? – ritter 2013-05-09 15:36:59
@Frank:这是一个简单的方法来做到这一点。 llc在'compileModule'中执行此操作,在模块上调用'setTargetTrople' – 2013-05-09 16:18:25