编译器错误 - 究竟应该使用什么命令行来从 RegisterInfo.td 文件生成所有记录<Target>?



背景:到目前为止,我已经阅读了llvm教程,其中包括:Table Gen命令指南

TableGen的一般文档,尤其是运行TableGen部分

我目前正在为llvm的一个新目标编写代码,不允许在这里发布。我使用X86 Target作为问题的上下文,因为它仍然适用于该目标

我想做的事情:我正在尝试使用tablegen从X86RegisterInfo.td生成记录我使用的命令行是:

llvm-tblgen X86RegisterInfo.td -class=Register -I/home/des_fw/fler_llvm/llvm/include

返回这个错误

X86RegisterInfo.td:16:43: error: Couldn't find class 'Register'
class X86Reg<string n, bits<16> Enc, list<Register> subregs = []> : Register<n> {
                                      ^

我能够运行上面运行TableGen参考中给出的X86.td的示例命令,所以我非常确信include路径-I/…/。。。是正确的,因为如果没有以这种方式编写,该命令就无法运行。我还在同一目录中运行我的命令/Target/X86,作为工作的示例命令。

要使TableGen工具为X86RegisterInfo.td文件(或者通常为XXXRegisterInfo.tt,其中XXX是目标名称)生成记录,要使用的正确命令是什么

我对LLVM和自定义或编写编译器都很陌生,所以我祈祷只是我不了解如何使用命令行,但如果这也是一个完全不同的问题,任何能给我指明正确方向的提示都将不胜感激。

非常感谢!

我相信我已经找到了自己问题的答案。命令行应该是

llvm-tblgen X86.td -gen-register-info -I/home/des_fw/fler_llvm/llvm/include

因为

在所有LLVM后端,LLVM tblgen二进制文件将在根TableGen文件.td上执行,该文件应包括所有其他文件。这保证了所有需要的信息都可以访问,并且TbleGen文件中不需要重复(http://llvm.org/docs/TableGen/BackEnds.html#llvm-后端)

我用了

-gen-register-info

在我的问题中提到的网站上找到的选项:http://llvm.org/docs/CommandGuide/tblgen.html

所以整个命令行一般都是

llvm-tblgen TargetNameHere.td -back-end-opt-for-specific-record-set -I/path/to/file/include/

最新更新