DeadStoreElimination

LLVM 中端的 DSE(Dead Store Elimination)Pass 是一种优化技术,目的是删除那些对程序最终行为没有影响的 冗余存储指令(store instructions)。这些指令通常写入了一个内存地址,但这个值从未被读取(load)就被新的值覆盖或者被其他写操作无效化。
DSE 的目标是提升程序性能和减少不必要的内存写操作,从而:

  • 降低写入带宽使用
  • 提升缓存命中率
  • 降低功耗
  • 精简生成的机器代码
    直观理解就是,int x=1; 然后 x=2,那么 x=1 就没必要再保留了。

in LLVM

在 LLVM 中,该 Pass 的行数约为 2000 行+。主函数为 eliminateDeadStores
核心逻辑为:

  • 使用 MemorySSA 追踪这个 MemoryDef 后续是否会被其他 store 覆盖
  • 使用 AliasAnalysis 判断是否有 overlap(覆盖或部分覆盖)
  • 检查中间是否存在可能读取此地址的 load,或者 volatile store(这些会阻止优化)
  • 如果发现此 store 后续完全被覆盖,且值未被读取,加入 ToRemove