Pass简介——dse
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。
评论
