2013-05-09 141 views
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版开始可用)。

回答

8

请查看tools/llc/llc.cpp的源代码。它可以做到这一点,而且很短,不难理解。如果你对某些你不了解的东西有特定的问题,请随时询问。

+0

好吧,我自己想到了这件事,但是因为我刚刚开始使用LLVM而离开了。然而你的回答听起来令人鼓舞附:我喜欢指示的生活! – ritter 2013-05-09 15:02:54

+0

了解目标体系结构(即nvptx64),是否必须使用Triple类来创建目标体系结构? – ritter 2013-05-09 15:36:59

+1

@Frank:这是一个简单的方法来做到这一点。 llc在'compileModule'中执行此操作,在模块上调用'setTargetTrople' – 2013-05-09 16:18:25