LLVM(三):Tablegen简介

上一篇介绍实现llvm后端需要做的一些工作,有很大一部分工作是描述目标体系结构的特征,包括指令集,寄存器等信息。Tablegen就是用于记录这些信息的描述性语言。目标体系结构目录下的*.td文件都是用tablegen语言来描述的。经过tablegen工具批量生成C++源文件,它的好处就是我们描述的是大量信息的共同点,然后由工具批量生成,减少我们描述的工作量,使用tablegen语言也十分简单灵活。

在utils/vim目录下有vi的配置文件,拷贝到vi的syntax文件夹下可以对tablegen语法高亮。

下面介绍tablegen,在官方文档中介绍得非常详细,这里只做思路上的简单介绍。具体语法请参照文档。

官方文档地址:http://llvm.org/docs/TableGenFundamentals.html


Tablegen主要由Class(类)和Definition(定义)组成。其中Class是用于描述构建其它记录的抽象记录,可以理解成模板。描述目标的共同特点以便批量生成记录。Definition是具体的描述实例,不包含任何未定义的变量。 

例如:所有算术指令就可以定义为一个arithmatic class,有指令编码等一些属性。加减法指令可以分别定义为def add、def sub,这个两个definition都可以继承于arithmatic实现。因为加减法的指令编码格式都是很相似的,在某些体系结构下可能只有opcode不同,所以可以继承于一个模板实现,这样编码相似行为相似的指令有很多,定义class来批量实现可以减少很多工作量。

 

我们先从指令描述部分看。在目标体系结构目录下XXXInstrFormat.td文件中,定义了指令的多种格式。在ARMInstrFormats.td文件中,继承Instruction类定义了指令模板。


Instruction类的实现在include/llvm/Target目录下的Target.td公共代码中,这个类详细描述了指令的属性,如果要做后端移植的话,这是需要了解的。内容比较多,在下一篇中讨论。



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值