用途:围绕 LLVM 优化基础设施、优化 pass 开发与性能调优,帮助实现自定义优化、理解优化管线并排查优化问题。
主要能力:覆盖优化管线(Source→前端→LLVM IR→优化 Pass→CodeGen→机器码)与优化级别;介绍标量优化(常量传播、死代码消除 DCE、公共子表达式消除 CSE、指令合并、SROA)、循环优化(LICM、展开、向量化、融合/分裂、归纳变量化简)、过程间优化(内联、死参数消除、跨函数常量传播、LTO)。
使用方式:用 clang -O0/-O1/-O2/-O3/-Os/-Oz 控制优化级别;基于 New Pass Manager(LLVM 13+)编写 PassInfoMixin 类型的自定义 pass 并注册插件;在 pass 中通过 FunctionAnalysisManager 获取 DominatorTree、LoopInfo、AAManager 等分析结果;用循环元数据或 #pragma clang loop vectorize(enable)、vectorize_width(8)、#pragma unroll 4 控制展开与向量化;用 opt -debug-pass-manager、-print-after-all、-print-after=instcombine、-stats 调试;用 clang -Rpass=.* 查看优化备注;用 clang -flto 或 -flto=thin 启用 LTO。
验证与限制:可用 Alive2 的 alive-tv 校验变换正确性,例如 alive-tv before.ll after.ll。资料未给出优化效果数据、适用平台限制或 Pass 插件加载的完整运行命令,相关细节暂未提供。