Can Clang可以使用LLVM TableGen生成的头文件吗?

时间:2014-12-23 08:00:34

标签: c++ clang llvm

我正在研究AVR的Clang fork: https://github.com/4ntoine/clang/tree/avr-support

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

我想在生成AVRSubTypeKV的{​​{3}} AVRTargetInfo.hasFeature()中使用AVRGenSubtargetInfo.inc来检查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 Targets.cpp #include <AVRSubtarget.h>但无法找到。{/ p>

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

这背后的基本原理是可以使用前端的各个方面而不包括后端。 (好吧,由于我们使用后端解析MS样式的内联汇编,这有点下降,但在这里与我合作)

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