LLVM、MLIR的编译
先行编译基础的工具,后期用到别的工具再进行编译
1 | git clone https://github.com/llvm/llvm-project.git |
等待编译完成后,检查一下install目录下都生成了哪些工具,依次来学习一下。
以下内容都需要在后续学习中用到后,再次进行更新,确认当前查询到的信息是正确的。
一、MLIR核心工具
mlir-opt
用途:MLIR优化与转换的核心工具
功能:
- 执行自定义Pass管道(如
--pass-pipeline="builtin.module(my-pass)"
) - 验证IR合法性(
-verify
) - 调试方言降级(如从
tensor
到memref
的转换)
- 执行自定义Pass管道(如
示例:
bash
1
mlir-opt input.mlir --convert-linalg-to-loops -o output.mlir
mlir-translate
用途:MLIR与其他中间表示(LLVM IR/SPIR-V)的互转
常用选项:
--mlir-to-llvmir
:将MLIR转换为LLVM IR--export-llvmir
:导出为LLVM可读格式
示例:
bash
1
mlir-translate --mlir-to-llvmir input.mlir -o output.ll
mlir-tblgen
- 用途:生成MLIR方言(Dialect)的C++代码
- 场景:定义新方言时自动生成ODS(Operation Definition Specification)代码。
mlir-cpu-runner
用途:在CPU上直接运行MLIR代码(支持JIT编译)
示例:
bash
1
mlir-cpu-runner --entry-point-result=void input.mlir
二、LLVM核心工具
llc
用途:将LLVM IR编译为特定目标(如CPU/GPU)的汇编代码
关键选项:
-mtriple=amdgcn-amd-amdhsa
:指定AMD GPU目标-O3
:启用优化级别3
示例:
bash
1
llc -O3 input.ll -o output.s
opt
用途:LLVM IR优化器,用于调试自定义Pass
示例:
bash
1
opt -passes='loop-unroll' input.ll -o output.ll
llvm-dis
/llvm-as
用途:LLVM IR二进制格式(bitcode)与文本格式互转
示例:
bash
1
2llvm-dis input.bc -o output.ll # 反汇编
llvm-as input.ll -o output.bc # 汇编
三、调试与分析工具
llvm-objdump
用途:反汇编目标文件(如检查生成的GPU二进制)
示例:
bash
1
llvm-objdump -d output.o
llvm-dwarfdump
用途:调试信息分析(DWARF格式),用于检查符号表与源码映射
示例:
bash
1
llvm-dwarfdump output.o
FileCheck
用途:LLVM测试框架核心工具,用于验证输出是否符合预期模式
示例:
bash
1
mlir-opt input.mlir | FileCheck check.txt
四、硬件相关工具
amdgpu-arch
/nvptx-arch
用途:检测当前系统的AMD/NVIDIA GPU架构
示例:
bash
1
nvptx-arch # 输出如 "sm_80"(对应NVIDIA A100)
llvm-mca
用途:静态分析机器代码的流水线吞吐量(用于性能调优)
示例:
bash
1
llc -O3 input.ll -o output.s && llvm-mca output.s
五、辅助开发工具
clang-format
用途:格式化C++/MLIR代码(维护代码风格一致性)
示例:
bash
1
clang-format -i my_pass.cpp
mlir-reduce
用途:自动缩小触发错误的MLIR测试用例(类似Delta Debugging)
示例:
bash
1
mlir-reduce crash.mlir --bugpoint=mlir-opt -o reduced.mlir
mlir-lsp-server
- 用途:MLIR语言服务器,支持IDE语法高亮与自动补全(如VSCode插件)。