如果没有mem2reg,为什么优化传递不起作用?

Nic*_*ola 1 optimization bytecode llvm

为什么我必须在字节码优化中执行此mem2reg传递以获得另一个优化传递结果?mem2reg有什么用?

opt -dce myfile.bc
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我没有改变输出代码

opt -mem2reg -dce myfile.bc
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,我对输出代码进行了更改

编辑:LLVR IR仍然是SSa形式,不是吗?使用mem2reg我应该有一个"修剪"的SSA表格,是吗?

Ant*_*kov 8

mem2reg传递将非SSA形式的LLVM IR转换为SSA形式,将堆栈分配值的加载和存储提升到"寄存器"(SSA值).许多LLVM优化通道以SSA形式运行代码,因此很可能是非SSA形式的无操作IR.

更多信息在这里:http://llvm.org/docs/Passes.html#mem2reg-promote-memory-to-register

  • @Nicola - LLVM IR 可能是 SSA 形式,现在也可能是(因为内存在 LLVM 世界中不是 SSA)。因此,您可以轻松拥有非 SSA LLVM IR - 以及 alloca 的加载和存储。 (2认同)