https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121517
Bug ID: 121517
Summary: [16 Regression] __builtin_bswap32 is not recognized
anymore
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ubizjak at gmail dot com
Target Milestone: ---
This issue shows as following failures on x86_64:
FAIL: gcc.target/i386/pr115102.c scan-assembler bswaphisi2_lowpart
FAIL: gcc.target/i386/xchg-4.c scan-assembler rolw
FAIL: gcc.target/i386/xchg-4.c scan-assembler-not mov
where tree optimizers don't recognize __builtin_bswap32 anymore.
With gcc-15, pr115102.c compiles (-Os -march=x86-64) with:
_.optimized:
unsigned int bswap8 (unsigned int val)
{
unsigned int _1;
unsigned int bswapdst_4;
unsigned int _8;
unsigned int _10;
unsigned int bswapmaskdst_11;
<bb 2> [local count: 1073741824]:
_1 = val_7(D) & 4294901760;
bswapdst_4 = __builtin_bswap32 (val_7(D));
bswapmaskdst_11 = bswapdst_4 & 4294901760;
_10 = bswapmaskdst_11 r>> 16;
_8 = _1 | _10;
return _8;
}
while gcc-16 compiles the same testcase with:
unsigned int bswap8 (unsigned int val)
{
unsigned int _1;
unsigned int _2;
unsigned int _3;
unsigned int _5;
unsigned int _6;
unsigned int _8;
unsigned int _10;
<bb 2> [local count: 1073741824]:
_1 = val_7(D) & 4294901760;
_2 = val_7(D) >> 8;
_3 = _2 & 255;
_5 = val_7(D) << 8;
_6 = _5 & 65535;
_10 = _3 | _6;
_8 = _1 | _10;
return _8;
}