编译器优化 pass 速查表:30 个名字背后的概念 编译器优化 pass 的名字一大堆——DCE、GVN、LICM、SCCP、SROA……每个都是一个独立的算法 + 一段术语。本文按'本地 / 函数级 / 循环 / 跨函数 / 后端 / 特殊'六类组织,每个 pass 给出英文全称、中文意思、做什么、为什么有用——读 LLVM 源码或自己写 pass 时当词典查。 zTgx 1 0 0 专题compileroptimization
mem2reg 为什么有效:从'看得见所有读写'说起 mem2reg 把'栈上变量 + load/store'提升成 SSA 寄存器值——这是打开后续一切优化的钥匙。但它能这么做,靠的是一个非常脆弱的前提:'编译器看得见这块内存的所有读写'。一旦 alloca 的地址逃逸到 load/store 之外的地方,这个前提就崩了,promote 就会产生错误的程序。本文用三个具体场景把'地址逃逸'讲透。 zTgx 1 0 0 专题compilerssa
mem2reg:从 alloca-load-store 回到 SSA 几乎所有编译器前端都用 alloca-load-store 模型生成中间 IR——简单但冗余。mem2reg(memory-to-register,把'内存槽'升级回'寄存器值')是把这些冗余消掉、恢复 SSA 形式的经典优化。本文讲清楚 promotable alloca 的判定、phi 节点(φ,SSA 里的汇合节点)的插入、它在 cuda-oxide pipeline 里的位置,以及为什么它从'可选'变成了'必需'。 zTgx 1 0 0 专题compilerssa