【HPC 08】如何用LLVM 插件调试 Pass
2025-12-18
用llvm插件调试loopVectorize pass
1. 概述
- 1. llvm pass 调试需要重编,用插件调试节约编译时间
- 2. llvm codegen 也会用到 passes 可以 load plugin
- 3. 熟悉loop Vectorize 流程 alias PHI 分析
- 4. 为开发LLVM后端适配自定义硬件做准备
- 5. PASS 也可以用来实现自定义runtime库
2. 相关工作
3. 实验设计
3.1 提取 llvm loopVectorize 插件中遇到的实际问题
版本 llvm 22.0
- 1. RTTI 选项问题
- 2. .ll中 attribute 设置问题
3.2 Debug loopVectorize 插件中遇到的世纪问题
- 1. cl 和 pass 类名不能重复
- 2. 上下游的插件依赖
4. 实验结果
4.1 一些GCC中遇到过的能手工向量化却不能自动向量化的问题,LLVM中是如何处理的?
- 1. Alias 分析深度限制:循环中是否有数据是相互依赖的
- 2. Control in loop: 循环中有判断
- 3. Gather in loop: 循环中数据访问不连续
5. 总结和展望
编译器的一些严格却又合理的行为
一些思考
- 为什么要有IR和方言,我把所有信息保存下来不行吗?
答:不行,内容太多不分层会难以维护,例如:向量化阶段不做指令选择 - 为什么要有虚拟机存在
答:对硬件资源和数学过程的建模 - 编译器如何与硬件协同设计
后续计划
- 1. 开发自定义LLVM后端支持新硬件
- 2. JIT 虚拟机 和 浏览器
- 3. 如何跟上LLVM 的 roadMap ?
6. 参考资料
- 1. 如何实现一个llvm前端 LLVM kaleidoscope
- 2. LLVM CPU0 Backend
- 3. GCC internal GIMPLE auto-vectorize
- 4. 一生一芯 集成电路前后端
- 5. PLCT 实验室的 V8 引擎流程解释 torque ignite ...
- 6. ROCm / qemu / Linuv divice driver / Stm32 driver / tcp ip illustrate
编译器