MLIR:新建一个Dialect(四),通过.td定义新Dialect
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 10 期,介绍如果通过
.td
定义一个 HelloDialect.
转载请注明出处!
MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalg
,tosa
,affine
这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。
接上回,本文继续新建一个 Dialect的内容。本文开始解析项目的各个实现部分之一——通过.td
定义新 Dialect “Hello”。
复习
工具链、总览等等知识请自行翻看历史 MLIR 标签的相关文章
前文介绍了mlir-hello 项目的目标就是使用自建的 Dialect 通过 MLIR 生态实现一个 hello world,具体做法为:
- 创建
hello-opt
将原始print.mlir
(可以理解成 hello world 的main.cpp
)转换为print.ll
文件 - 使用 LLVM 的 lli 解释器直接运行
print.ll
文件
HelloDialect.td
hello.print
作为一个 Op,显而易见,hello Dialect、print Op 都需要被定义。
本文来看看如何定义一个新的 Dialect
以及一个 Op
。
通过声明式的 .td
文件以及 TableGen 工具可以便捷的生成相应的 C++ 代码。
代码来自 [mlir-hello]/include/Hello/HelloDialect.td
,
1 |
|
TableGen
来看看这个 .td
能生成什么样子的代码?
$MLIR_TBLGEN -gen-dialect-decls HelloDialect.td -I$LOCAL_MLIR/include >> HelloDialect.h
1 | /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |
本期结语
本文对 mlir-hello 项目的源代码文件 HelloDialect.td
进行了学习,通过自定义的 .td
文件声明式的语法可以便捷的定义一个新的 Dialect。我们下期继续讲如何去定义新 Dialect 的 Op。
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:新建一个Dialect(四),通过.td定义新Dialect