c语言 - Clang 优化:&&&vs &:优化与非优化(对于某些值)



clang -O3优化此代码:

_Bool f1(char x)
{
_Bool b1 = x == 4;
_Bool b2 = x & 3;
return b1 & b2;
}

:

f1:
xor     eax, eax
ret

然而,clang -O3并没有优化这段代码:

_Bool f1(char x)
{
_Bool b1 = x == 2;
_Bool b2 = x & 1;
return b1 & b2;
}
f1:
cmp     dil, 2
sete    al
and     al, dil
ret

为什么?

注:&b1 & b2是有意使用的。如果使用&&,则clang -O3将其优化为:

f1:
xor     eax, eax
ret

如何解释?

为什么?

低效的代码生成(由于"缺少按位逻辑的窄化转换")。

最新更新