clang -O3
优化此代码:
_Bool f1(char x)
{
_Bool b1 = x == 4;
_Bool b2 = x & 3;
return b1 & b2;
}
致:
f1:
xor eax, eax
ret
但是,clang -O3
没有优化此代码:
一个二个一个一个
为什么?
注意:&
b1 & b2
是有意使用的,如果使用&&
,则clang -O3
将其优化为:
f1:
xor eax, eax
ret
怎么解释呢?
1条答案
按热度按时间js81xvg61#
为什么?
Inefficient code generation(由于"缺少逐位逻辑的收缩转换")。