MLIR:Getting-started-2
文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 5 期,接上期,使用 Polygeist 完成一个 C 代码的 MLIR 编译执行流程。
接上周文,现在我们已经有了几个重要的 MLIR 工具:
mlir-opt
- MLIR 机器无关优化
mlir-translate
- 不同 MLIR 间转换
llc
- LLVM 编译器
clang
/clang++
- LLVM C/C++前端
cgeist
- MLIR C/C++前端
上文介绍了如何使用 Polygeist 完成 C 代码的 MLIR 转换。同时,polygeist-opt
工具可以在该过程的基础上完成更多的事情。更多细节请查看手册,本文不再赘述。
本文讲接下来这个转换的到的 mlir 文件的后续可能的处理之一:编译、链接、执行。
主程序
编写一个 main.cpp
用以调用之前编写的函数。
1 | /** |
编译
1 | $MLIR_OPT matmul.affine.mlir -lower-affine -convert-scf-to-cf -convert-vector-to-llvm -convert-memref-to-llvm -llvm-request-c-wrappers -convert-func-to-llvm -reconcile-unrealized-casts | $MLIR_TRANSLATE --mlir-to-llvmir | $MLIR_BIN/llc --filetype=obj -o matmul.o |
可以看出该过程分为了三步:
- 优化、转换原始 mlir 到 LLVM mlir
- 转换 LLVM mlir 到 LLVM IR
- 编译 LLVM IR 为
.o
于是,就得到了通用的 LLVM IR,也就回到了经典的编译流程。
链接
1 | $LLVM_RV/bin/clang++ -o matmul_mlir matmul.o main_mlir.cpp |
利用已经得到的 matmul.o
和 main.cpp
可以编译、链接出最终的程序。
执行
1 | ./matmul_mlir |
结语
OK,本期内容就到此为止。本期粗略的介绍了如何使用 MLIR 系列工具完成编译过程,很多细节没有展开讲。下周咱们再继续。
都看到这儿了,不如关注每日推送的“科文路”、互动起来~
至少点个赞再走吧~
MLIR:Getting-started-2