![24ca9dfdde05527f33ca26d2798c0734.png](https://img-blog.csdnimg.cn/img_convert/24ca9dfdde05527f33ca26d2798c0734.png)
上一篇文章组建了MLIR的整个生产线,将MLIRGen模块看作是生产线的履带、将Dialect模块看作是生产线的机械臂、将TableGen模块看作是生产线的零件提供者。TableGen模块实际上是使用Operation Definition Specification (ODS)框架进行自动化生成代码,整个框架是基于TableGen规则来完成相应功能。
我们在组装完生产线之后发现,我们距离生产出MLIR只差“零件”了,那么“零件”从哪来呢?当然有一种方法就是手工打磨“零件”,也就是为每一个Dialect Operation手写类。但是这都2020年了,手工打磨的方式太过低效了,我们要使用自动化的“数控机床”--TableGen,定义一系列的TableGen规则,从而自动化地生产“零件”。
什么是TableGen
我们把TableGen看作是为Dialect提供零件的“数控机床”,那么它在MLIR体系中是如何发挥作用的呢?TableGen本身是一种声明性编程语言,在此处它用于描述MLIR中Operation的类的定义,在源代码中它以.td
文件的形式存在,在编译时会自动生成C++的相应文件,给Dialect模块文件提供支持。
如果我们使用手动编写的方式,在针对不同编译目标时,我们需要在一系列不同文件中编写一些相同的代码,这就造成了冗余的开发。而使用