【问题标题】:Can Clang use LLVM TableGen produced headers?Clang 可以使用 LLVM TableGen 生成的标头吗?
【发布时间】:2014-12-23 08:00:33
【问题描述】:

我正在为 AVR 开发 Clang fork: https://github.com/4ntoine/clang/tree/avr-support

AVR 子目标在 AVR AVR.td 的 LLVM 后端分支中描述,LLVM TableGen 在 lib/Target/AVR/ 中生成 AVRSubtarget.h

我想从生成的AVRGenSubtargetInfo.inc 中使用AVRSubTypeKV in AVRTargetInfo.hasFeature() in Targets.cpp 来检查CPU(MCU)是否支持该功能:

// Sorted (by key) array of values for CPU subtype.
extern const llvm::SubtargetFeatureKV AVRSubTypeKV[] = {
  { "at43usb320", "Select the at43usb320 processor", AVR::FeatureAVR31, 0ULL },
  { "at43usb355", "Select the at43usb355 processor", AVR::FeatureAVR3, 0ULL },
  { "at76c711", "Select the at76c711 processor", AVR::FeatureAVR3, 0ULL },
  { "at86rf401", "Select the at86rf401 processor", AVR::FeatureRF401, 0ULL },
  { "at90c8534", "Select the at90c8534 processor", AVR::FeatureAVR2, 0ULL },
  { "at90can128", "Select the at90can128 processor", AVR::FeatureAVR51, 0ULL },
  { "at90can32", "Select the at90can32 processor", AVR::FeatureAVR5, 0ULL },
  ...

我尝试在Targets.cpp 中从LLVM#include <AVRSubtarget.h>,但找不到。

那么我如何在 Clang 中使用 LLVM TableGen 生成的文件?

【问题讨论】:

    标签: c++ clang llvm


    【解决方案1】:

    LLVM 构建结构需要 include/llvm/Target 中的头文件,然后您可以将生成的头文件包含在 #include "llvm/Target/AVRSubtarget.h" 中。如何在 clang 中使用 llvm-tblgen 文件的最佳示例是 include/llvm/IR/ 中的 Intrinsics.h 标头。

    【讨论】:

    • 我不确定 Transforms 是正确的目录,因为它与 Targets 而不是 Transforms 相关。
    • @4ntoine 抱歉,我写答案时很着急。你完全正确。标头应位于与其用途相关的子目录中。我编辑了我的答案。
    【解决方案2】:

    您不应该以这种方式使用后端 tablegen 生成的标头。看看 clang 中的其他目标(Targets.cpp 和其他类似的文件)如何抽象出标头/内在用法。

    这样做的基本原理是前端的各个方面都可以在不包括后端的情况下使用。 (好吧,因为我们使用后端来解析 MS 样式的内联汇编,所以这有点下降,但在这里和我一起工作)

    此外,没有特定的方法可以将子目标的特定值传递给 TargetMachine 的创建。您需要传入创建 TargetMachine 的目标、cpu 和功能字符串,这将完全初始化后端。特定的前端选项可用于打开将要打开的各种功能。

    【讨论】:

    • 我倾向于认为这个答案是正确的。我找不到任何使用后端 tablegen 结果作为功能的目标。我想做它的唯一原因是因为有很多特性-mcus 关系,我不明白为什么不最初这样做。在建议的方法中,我必须在hasFeature() 中以编程方式描述这种关系。
    • 您打算如何从前端启用这些功能? IE。如果您要从命令行启用它们,那么无论如何您都需要添加命令行选项支持。那时启用特征字符串的元素非常小。查看大多数其他目标如何处理 -march 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多