【发布时间】:2013-01-25 15:25:06
【问题描述】:
查看 C++ 程序的反汇编,我看到类似 _Z41__static_initialization_and_destruction_0ii.constprop.221 的函数。在这种情况下,constprop 是什么意思?它在外观上似乎与isra 后缀相似(有时会组合在一起,例如.isra.124.constprop.226),但它的含义不同。
【问题讨论】:
标签: gcc name-mangling
查看 C++ 程序的反汇编,我看到类似 _Z41__static_initialization_and_destruction_0ii.constprop.221 的函数。在这种情况下,constprop 是什么意思?它在外观上似乎与isra 后缀相似(有时会组合在一起,例如.isra.124.constprop.226),但它的含义不同。
【问题讨论】:
标签: gcc name-mangling
从我读过的源代码 cmets - 它们表示在优化期间已克隆的函数。
编辑:这可能是答案,也可能不是。
简单的常量传播
这个文件实现了常量传播和合并。它查找仅涉及常量操作数的指令,并将它们替换为常量值而不是指令。例如:
add i32 1, 2变成
i32 3注意:这个 pass 习惯于使定义失效。运行此通道后的某个时间运行 DIE(死指令消除)通道是个好主意。
【讨论】:
always_inline 函数没有内联,而是 call-ed。
flatten 函数属性的原因。如果你用这个属性定义了 calling 函数,它应该强制内联(它可以的一切)。我认为它不这样做的原因是因为编译器认为常量传播版本更好。前段时间我和一个 gcc 开发人员讨论过这个问题,但我记不起所有的细微差别。