Clang优化:&& vs &:优化与非优化(对于某些值)

hsgswve4  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(111)

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

怎么解释呢?

js81xvg6

js81xvg61#

为什么?
Inefficient code generation(由于"缺少逐位逻辑的收缩转换")。

相关问题