MLIR:新建一个Dialect(一)

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 7 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 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
  • llvm/mlir/lib/Dialect/Foo
    • 相关的 source 文件
  • llvm/mlir/lib/Dialect/Foo/IR
    • ODS 不能自动化生成的函数实现。它们通常在 FooDialect.cppFooOps.cpp.incFooOpsInterfaces.h.inc 中被定义。
  • llvm/mlir/lib/Dialect/Foo/Transforms
    • 定义相关的 rewrite 规则,通常为 DDR 格式的 TableGen 文件
  • llvm/mlir/test/Dialect/Foo
    • 相关的 tests

实践

创建一个项目,感受一个 Dialect 被创建的过程。后续文章将以 mlir-hello 为例。

其项目结构为,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
❯ tree -L 3
.
├── build_and_run.sh
├── CMakeLists.txt
├── hello-opt
│ ├── CMakeLists.txt
│ └── hello-opt.cpp
├── include
│ ├── CMakeLists.txt
│ └── Hello
│ ├── CMakeLists.txt
│ ├── HelloDialect.h
│ ├── HelloDialect.td
│ ├── HelloOps.h
│ ├── HelloOps.td
│ └── HelloPasses.h
├── lib
│ ├── CMakeLists.txt
│ └── Hello
│ ├── CMakeLists.txt
│ ├── HelloDialect.cpp
│ ├── HelloOps.cpp
│ ├── LowerToAffine.cpp
│ └── LowerToLLVM.cpp
├── print.ll
├── README.md
├── test
│ ├── CMakeLists.txt
│ ├── Hello
│ │ ├── affine.mlir
│ │ ├── loop-tiling.mlir
│ │ ├── main.mlir
│ │ ├── print.mlir
│ │ ├── sample-opt.mlir
│ │ ├── single-loop.mlir
│ │ └── single-loop-with-affine-map.mlir
│ ├── lit.cfg.py
│ └── lit.site.cfg.py.in
└── thirdparty
└── llvm-project
├── bolt
├── clang
├── clang-tools-extra
├── ...
└── utils

都看到这儿了,不如关注每日推送的“科文路”、互动起来~

至少点个赞再走吧~

MLIR:新建一个Dialect(一)

https://xlindo.com/kewenlu2022/posts/1e304740/

Author

xlindo

Posted on

2022-10-20

Updated on

2023-05-10

Licensed under

Comments