影响gcc中的功能克隆/复制/恒定传播

时间:2013-03-15 18:41:19

标签: c optimization gcc compiler-flags

当运行带有优化的gcc时,它会在认为函数处于热路径或传播到函数参数的常量时克隆(复制)C函数。

更具体地说,这似乎是由fipa-cp-clone选项控制的。

有没有办法影响这个?例如,使用某个属性标记一个参数,作为编译时常量(就像你可以在带有模板参数的C ++中那样),这将导致函数被克隆?

1 个答案:

答案 0 :(得分:4)

重要的是是否使用常量参数调用函数(实际的常量表达式,或者编译器通过常量传播确定为常量的东西)。在这种情况下,GCC将克隆该功能,除非它确定这样做太昂贵或者利益太少;我不知道影响该指标的方法。请注意,常量传播仅在单个转换单元(源文件)中发生,除非您一次编译整个程序或使用链接时优化,并且我不确定克隆是否仍然可以在该点发生。

我最好的猜测,如果您希望克隆没有发生,那么GCC永远不会看到调用该函数的常量参数。即使您知道它将是常量,编译器也可能无法证明它是。