LLVM(三):Tablegen简介
来源:互联网 发布:8080端口的作用 编辑:程序博客网 时间:2024/05/22 15:45
上一篇介绍实现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公共代码中,这个类详细描述了指令的属性,如果要做后端移植的话,这是需要了解的。内容比较多,在下一篇中讨论。
- LLVM(三):Tablegen简介
- LLVM TableGen介绍
- LLVM中TableGen工具的使用
- LLVM教程(一)-- LLVM的简介
- LLVM教程( 三)-- LLVM IR
- (转)LLVM IR 简介
- LLVM Cookbook读书笔记(本书的缺点是直接展示大量Sample代码,对SSA/phi并没有怎么解释,TableGen部分也没讲清楚)
- LLVM Essentials-Packt 2016(读书笔记):TableGen讲解并不透彻,另外我还想知道后端优化步算法到底怎么编写?
- LLVM简介
- LLVM IR 语法简介(一)
- LLVM 源码分析(三)ImmutablePass
- LLVM 和Clang简介
- 《深入理解LLVM》第一章 LLVM简介
- LLVM 三本书
- (LLVM)中间语言(IR)基本语法简介
- LLVM每日谈之十 LLVM Test简介
- LLVM (4) 11.3 LLVM的代码表示:LLVM IR
- LLVM Makefile 指南(LLVM Makefile Guide)
- Linux Shell编程入门
- strtok和strtok_r
- 使用 Interface Builder 兼容 iOS6 和iOS7
- 博客2013年度数据统计和排行
- android源码里那些常用的Utils工具类
- LLVM(三):Tablegen简介
- 求出栈序列,二叉树,二叉搜索树的计数问题
- 杭电OJ 1355:The Peanuts
- Oracle 同义词
- 2014年3月4号CSDN博客签到帖
- C++矩阵运算库推荐
- oauth对接淘宝订单
- #ifndef#define#endif的用法(整理)
- 在Servlet中设置参数小实验