【问题标题】:Static code generation using the LLVM API使用 LLVM API 生成静态代码
【发布时间】:2013-05-09 13:56:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ llvm


    【解决方案1】:

    看看tools/llc/llc.cpp的源码就知道了。它完成了所有这些,而且非常简短且不难理解。如果您对某些您不理解的事情有具体问题,请随时提问。

    【讨论】:

    • 好吧,我自己也想过这个,但因为我刚开始使用 LLVM,所以我退缩了。但是,您的回答听起来令人鼓舞。附言我喜欢指令的生活!
    • 知道目标架构(即 nvptx64),是否必须使用 Triple 类来创建目标架构?
    • @Frank:这是一个简单的方法。 llc 在compileModule 中执行此操作,在模块上调用setTargetTrople
    猜你喜欢
    • 2013-01-22
    • 2015-08-25
    • 2012-04-07
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多