https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125873
Bug ID: 125873
Summary: wrong code at -O{2,3} with
"-fno-aggressive-loop-optimizations" on
x86_64-linux-gnu
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: zhendong.su at inf dot ethz.ch
Target Milestone: ---
Compiler Explorer: https://godbolt.org/z/MrnsW934f
Note:
- fails: trunk
- works: 16.1 and earlier
[544] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/home/suz/suz-local/software/local/gcc-trunk/bin/../libexec/gcc/x86_64-pc-linux-gnu/17.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk
--enable-sanitizers --enable-languages=c,c++ --disable-werror --enable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 17.0.0 20260617 (experimental) (GCC)
[545] %
[545] % gcctk -O3 small.c; ./a.out
[546] % gcctk -O3 -fno-aggressive-loop-optimizations small.c
[547] % ./a.out
Aborted
[548] % cat small.c
int (*bg)[1], d[256], e, g, m, aa, ad, ae, af, ag, al, ao, *as, bd[1], **bf,
bj, *bk;
double n, o, v, *t, *u;
short p, q, ap , aq, at, *be;
long r, ak, am = 1, au, aw, ax, *ar;
float s, an;
int f(int w, int x) {
for (int h = 0; h < 256; ++h) {
unsigned c = h;
for (int i = 0; i < 8; ++i)
c = c & 1 ? c >> 1 ^ 3988292384 : c >> 1;
d[h] = c;
}
unsigned j = w;
int k = x;
for (int b = 0; b < 4; ++b) {
char ab = k;
k >>= 8;
j = j >> 8 ^ d[(j ^ ab) & 255];
}
return j;
}
int l(short, int, short, signed char);
int ac(int w, long x, short y, double z) {
t = u = &n;
*t = 33554432 + 0.5 * z;
g = 1115684881 + 2;
goto ah;
ai:
s = 1;
*t = 33554431 + n;
q = -16444 + y;
ah:
e = g - 1107288138;
g = 1124081691 - e;
p = y - 24577 + 32767;
if (-687865928 > (s <= 0 ? 8396780 : e) + 938452413 - 1634715120)
goto aj;
r = -424148993;
goto ai;
aj:
m = f(0, e);
m = f(m, n);
m = f(m, g);
m = f(m, (long)((unsigned long)q << 48) >> 48);
m = f(m, p);
m = f(m, 1);
m = f(m, 1);
m = f(m, 1346895871);
m = f(m, r);
m = f(m, 1);
m = f(m, 1);
m = f(m, 1);
m = f(m, 1);
m = f(m, s);
m = f(m, 0);
m = f(m, w);
m = f(m, x);
m = f(m, y);
m = f(m, z);
m = f(m, 0);
o = *t;
m = f(m, o);
v = *u;
m = f(m, v);
return m;
}
int av(double w, char x, char y, long z, char bh, double bi) {
aa = l(277, -339221, -139, -1) - 2106012624;
ar = &am;
if (aa > 0)
aa = 36 + am;
ad = 2 * aa;
*ar = 4085 + z;
as = ⁡
ay:
af = -1757186252 + aa;
if (-62922765 >= -385094381 + (334762732 | am))
goto az;
goto ba;
az:
ak = 1679818691 - (-1612709885 - 134217777 * am);
an = aa;
goto bb;
ba:
am = -4198400 + *ar - 1;
ae = x - 2 * aa;
if (bh <= -x)
goto bc;
goto ay;
bc:
l(0, 0, 0, 0);
bb:
aa = 1421641676 + z;
*ar = z + x - 1008053616 * am;
ag = f(0, ak);
ag = f(ag, 1);
ag = f(ag, 1);
ag = f(ag, 0);
ag = f(ag, aa);
ag = f(ag, am);
ag = f(ag, an);
ag = f(ag, ad);
ag = f(ag, 1);
ag = f(ag, af);
ag = f(ag, ae);
ag = f(ag, w);
ag = f(ag, x);
ag = f(ag, (long)((unsigned long)y << 56) >> 56);
ag = f(ag, z);
ag = f(ag, (long)((unsigned long)bh << 56) >> 56);
ag = f(ag, bi);
au = *ar;
ag = f(ag, au);
ag = f(ag, *as);
return ag;
}
int l(short w, int x, short y, signed char z) {
al = ac(1, -9223372033633550340, 1, -2147483584.0) + 1289304968;
be = &aq;
bg = &bd;
bk = *bg;
goto bl;
bm:
*bf = &bj;
*be = y - -301 + 1246 * aq;
ax = 1441800 + 535724087 + al;
goto bb;
bl:
bj = -2081964028 * al;
bf = &bk;
al = 1900540 - 1966061 ;
bd[0] = 474110709 - 106505 - x;
bb:
*be = y + aq;
*bk = 1275010899 + *bk - -129696170;
ap = -31161 + aq;
if (509 + (short)bj >= y )
goto aj;
goto bm;
aj:
ao = f(0, bd[0]);
ao = f(ao, ap);
ao = f(ao, ax);
ao = f(ao, aw);
ao = f(ao, (long)((unsigned long)128 << 56) >> 56);
ao = f(ao, bj);
ao = f(ao, w);
ao = f(ao, z);
ao = f(ao, 0);
ao = f(ao, *bk);
at = *be;
ao = f(ao, (unsigned long)at << 48 >> 48);
return ao;
}
int main() {
int bn = av(-61.999999761581421, 93, -2, 12, -35, -1.9999999925494194);
if (2032191282 != bn)
__builtin_abort();
return 0;
}