GCC函数后缀.constprop是什么意思? P>查看C++程序的拆卸,我看到函数如:< >代码,Z41Y.STATICORIGALIALIZATION和ApDebug,0II. COSTPROP. 221 。在这种情况下,constprop是什么意思?它在外观上似乎与后缀相似(有时是组合的,例如,.isra.124.constprop.226),但它的含义不同。

GCC函数后缀.constprop是什么意思? P>查看C++程序的拆卸,我看到函数如:< >代码,Z41Y.STATICORIGALIALIZATION和ApDebug,0II. COSTPROP. 221 。在这种情况下,constprop是什么意思?它在外观上似乎与后缀相似(有时是组合的,例如,.isra.124.constprop.226),但它的含义不同。,gcc,name-mangling,Gcc,Name Mangling,从我读到的源代码注释中,它们表示在优化过程中克隆的函数 编辑:这可能是答案,也可能不是 简单常数传播 该文件实现了不断的传播和合并。它查找只涉及常量操作数的指令,并将它们替换为常量值而不是指令。例如: add i32 1, 2 变成 i32 3 注:此通行证有一个习惯,即定义无效。在运行这个过程之后的某个时间运行一个DIE(死指令消除)过程是一个好主意 您知道正在执行什么优化吗?很酷。它看起来可能是过程间的常量传播,因为它创建了函数的多个版本。虽然该文档是针对LLVM的,但我想GCC也必须适

从我读到的源代码注释中,它们表示在优化过程中克隆的函数

编辑:这可能是答案,也可能不是

简单常数传播

该文件实现了不断的传播和合并。它查找只涉及常量操作数的指令,并将它们替换为常量值而不是指令。例如:

add i32 1, 2
变成

i32 3
注:此通行证有一个习惯,即定义无效。在运行这个过程之后的某个时间运行一个DIE(死指令消除)过程是一个好主意


您知道正在执行什么优化吗?很酷。它看起来可能是过程间的常量传播,因为它创建了函数的多个版本。虽然该文档是针对LLVM的,但我想GCC也必须适用类似的情况。恢复旧线程总是很有趣的。:)我不是一个gcc开发人员,但我将在此基础上添加一些内容。如果您有一个静态函数,并且碰巧为其一个或一些参数调用了某个常量(或多个常量),那么gcc可以为该参数值组合创建一个优化版本。这一现象可以以非常有趣的方式加以利用。@DanielSantos,谢谢,这帮助我弄清楚为什么我的
总是内联
函数不是内联的,而是
调用
-ed.@YoYoYonnY根据您试图做的事情,这可能是一个问题,也是添加
展平
函数属性的原因。如果您使用这个属性定义了调用函数,它应该强制内联(尽可能地)。我认为它不这样做的原因是编译器认为常数传播版本更好。不久前,我与一位gcc开发人员进行了讨论,但我记不清所有的细微差别。