MLIR:新建一个Dialect(一)
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 7 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.
转载请注明出处!
MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalg
,tosa
,affine
这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。
本文开始介绍如何新建一个 Dialect。 更多 DefiningDialects
准备
首先,把包含了 MLIR 的 LLVM 项目 clone 下来,得到 llvm-project
文件夹,
1 | git clone https://github.com/llvm/llvm-project |
接下来的目标目录将以 llvm/mlir
为主。
Dialect 文件结构
对于 dialect 而言,假设 Foo 为一个 dialect,与 Foo dialect 相关的文件主要分布于以下目录,
llvm/mlir/include/mlir/Dialect/Foo
- 相关的 include 文件,包含
- 公共头文件
- ODS 格式的 TableGen 文件,用以生成 Foo operation 的声明(
FooOps.h.inc
)、定义(FooOps.cpp.inc
)、接口声明(FooOpsInterfaces.h.inc
)、接口定义(FooOpsInterfaces.cpp.inc
)
- 相关的 include 文件,包含
llvm/mlir/lib/Dialect/Foo
- 相关的 source 文件
llvm/mlir/lib/Dialect/Foo/IR
- ODS 不能自动化生成的函数实现。它们通常在
FooDialect.cpp
,FooOps.cpp.inc
、FooOpsInterfaces.h.inc
中被定义。
- ODS 不能自动化生成的函数实现。它们通常在
llvm/mlir/lib/Dialect/Foo/Transforms
- 定义相关的 rewrite 规则,通常为 DDR 格式的 TableGen 文件
llvm/mlir/test/Dialect/Foo
- 相关的 tests
实践
创建一个项目,感受一个 Dialect 被创建的过程。后续文章将以 mlir-hello 为例。
其项目结构为,
1 | ❯ tree -L 3 |
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:新建一个Dialect(一)