MLIR:新建一个Dialect(二)
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 8 期,继续介绍一个简单的 MLIR Dialect.
转载请注明出处!
MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalg
,tosa
,affine
这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。
接上回,本文继续新建一个 Dialect的内容。
准备
首先,将示例项目 clone 下来,
1 | git clone https://github.com/Lewuathe/mlir-hello |
根据前文MLIR:Getting_started内容,将 MLIR 相关工具链编译好。注意,要保留 build
目录(注意不是安装目录)内容,这里记为${LLVM_BUILD}
构建
准备好环境后,进入 mlir-hello
,开始构建这个项目,
1 | mkdir build && cd build |
我使用了之前编译好的 LLVM/Clang (${LLVM_BUILD}
) 作为编译器。
下一步编译之前,先删掉 mlir-hello/include/Hello/HelloOps.td
中的 NoSideEffect
字样。不然会报错。该参数本意是指示删除生成时的无效代码残留。
有三个目标可以生成,
1 | # 主要目标程序 |
第一个尝试
使用生成的 hello-opt
进行一次 lower 操作,保存输出的 .ll
文件保存。这个文件是 LLVM 字节码的文本形式,可以被 lli
直接解释执行。
1 | # 还是在 build 目录下 |
使用之前编译好的 lli
执行,
1 | ❯ ${LLVM_BIN}/lli print.ll |
本期结语
可以看到,mlir 文件同样可以作为编译器的输入,完成一个端到端的 lowering 和执行。我们下期继续。
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:新建一个Dialect(二)