如果我有一些依赖于输入的数学方程,这些输入可以是零或非零(模板参数,在编译时已知),优化器是否会评估这些方程并优化它知道将评估为0或1的表达式。
例如:
double x = y * Eval<type>::value;
如果Eval<type>::value
是0
,则x
将始终是0
。
double x = exp(y * Eval<type>::value);
如果Eval<type>::value
是0
,则x
将始终是1
。
优化器能否解决这个问题,并在代码中的其他地方用0
或1
替换x
,或者这些计算将在运行时执行?
我正在使用gcc 4.7和-O3
1条答案
按热度按时间kpbwa7wx1#
编辑:我错了,编译器在使用浮点数时会按预期工作。
好吧,
-O3
中的gcc 4.6.3似乎确实做到了这一点,只要表达式是整数相关的。示例代码:
生成的程序集