https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127037
Bug ID: 127037
Summary: wrong code at -O1 and above with "-fno-tree-vrp
-fno-tree-fre -fno-tree-forwprop" 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/6KbfE3Gns
Note:
- fails: 15.1 to trunk
- works: 14.4 and earlier
[856] % 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++,lto --disable-werror
--disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 17.0.0 20260823 (experimental) [master r17-1628-gd1c12591336] (GCC)
[857] %
[857] % gcctk -O1 small.c; ./a.out
[858] %
[858] % gcctk -O1 -fno-tree-vrp -fno-tree-fre -fno-tree-forwprop small.c
[859] % ./a.out
Aborted
[860] %
[860] % cat small.c
typedef int g __attribute__((vector_size(16)));
int h[256];
char l = -106, m, be = -29, ah, av = -63, aw, ax = 127, ay, ct, bg, bu, bz, ca;
double t = -1.75, u = -1.125, v = -2.5, ac, bk, bq;
short ab = -3489, w, aj, ar, at, bc = -147, bd, bf = -63, bh;
__attribute__((__vector_size__(2 * sizeof(short)))) short ad;
int ae = -101, af, ai, as, bl, bp, bs, bw = -252, bx = 58, by, cd, cg, cl, cm;
long x, ak, al = -333568613205, am = -226, an = -45, ao = -123, ap = -171, bm,
br,
cc, cn, co, cp = -162, cq;
short *aq;
g bi, cb;
__attribute__((__vector_size__(2))) char bj;
double *bn;
long *bo;
__attribute__((__vector_size__(2 * sizeof(long)))) long ce;
__attribute__((__vector_size__(2 * sizeof(int)))) int cf;
int *ch;
char *ci, *cr, *cw;
int **cj;
char **ck;
__attribute__((__vector_size__(4 * sizeof(long)))) long cs;
int k(int y, int z) {
for (int i = 0; i < 256; ++i) {
unsigned c = i;
for (int j = 0; j < 8; ++j)
c = c & 1 ? c >> 1 ^ 3988292384 : c >> 1;
h[i] = c;
}
unsigned n = y;
int o = z;
for (int b = 0; b < 4; ++b) {
char aa = o;
o >>= 8;
n = n >> 8 ^ h[(n ^ aa) & 255];
}
return n;
}
long p(long y, long z) {
long q = y * z;
return q;
}
int r(short, float, long, double, short, int, long);
int s(long, long, char);
int ag(char y) {
ad[1] = 247;
w = -~0;
ac = -2.0;
af = k(0, (long)((unsigned long)l << 56) >> 56);
af = k(af, 98);
af = k(af, 51);
af = k(af, 116);
af = k(af, v);
af = k(af, 0);
af = k(af, 0);
af = k(af, 0);
af = k(af, 0);
af = k(af, u);
af = k(af, 8.0);
af = k(af, t);
af = k(af, 0);
af = k(af, 0);
af = k(af, 59);
af = k(af, 126);
af = k(af, (long)((unsigned long)ab << 48) >> 48);
af = k(af, 248);
af = k(af, w);
af = k(af, ac);
af = k(af, 0);
af = k(af, 0);
af = k(af, ad[1]);
af = k(af, ae);
af = k(af, 0);
af = k(af, 0);
af = k(af, y);
af = k(af, 0);
af = k(af, 0);
af = k(af, 0);
af = k(af, 0);
af = k(af, 0);
af = k(af, ae);
return af;
}
int au(char y, char z, int cu, char cv, short p5) {
aq = &aj;
ai = -2147483647 + 1073741824 + 1073741825;
if (p5 - (p5 >= 0 ? 7 : -32768) == p5 - (-32767 & p5))
az:
ak = -134215672 + ai;
ai = -2022375879 % cu + ak;
if (134215663 - 1 + z == -ak) {
ai = 2096434210 - 5 * cu;
goto az;
}
x = 1213365886 - (0 >= 0 ? 3799685452567960647 : 5) - 725091211 * ak;
m = -100 + 10 * z;
aj = (675 - 1374 + (unsigned long)ai) << 52 >> 52;
ar = *aq;
ak = (long)1333788618 - -2147482496 - p(452982779 - z, 846589627 - ai);
as = k(0, ai);
as = k(as, aj);
as = k(as, 0);
as = k(as, x);
as = k(as, (long)((unsigned long)m << 56) >> 56);
as = k(as, ak);
as = k(as, 154);
as = k(as, ap);
as = k(as, 79);
as = k(as, ao);
as = k(as, an);
as = k(as, 22);
as = k(as, 103);
as = k(as, am);
as = k(as, al);
as = k(as, y);
as = k(as, z);
as = k(as, cu);
as = k(as, cv);
as = k(as, (long)((unsigned long)p5 << 48) >> 48);
at = *aq;
as = k(as, at);
as = k(as, ar);
return as;
}
int bt(char y, int z, char cu) {
bi[0] = 1013386015;
bi[2] = 262750787;
bi[3] = -234;
int bv = ag(cu - 117) - 1799588744;
bn = &bk;
bo = &bm;
bl = -134283280 + bv;
*bo = 2147483644;
bd = 2090 - bm + 32768;
bj[0] = -45 - 4;
bk = z;
*bo = -1613234241;
bh = -32704;
bi[1] = 1988400936 - 1653789968;
bj[1] = 2 + 9;
ah = y - 2;
bs = r(-67, 545357824.0f, -2074099801, 14942208.001953125, bc + 146,
272629792, bm - 555970032) -
820242052;
bp = bs;
bp = k(bp, (long)((unsigned long)bc << 48) >> 48);
bp = k(bp, (long)((unsigned long)bd << 48) >> 48);
bp = k(bp, 65);
bp = k(bp, (long)((unsigned long)2048 << 52) >> 52);
bp = k(bp, (long)((unsigned long)bh << 48) >> 48);
bp = k(bp, (long)((unsigned long)bf << 48) >> 48);
bp = k(bp, (long)((unsigned long)be << 56) >> 56);
bp = k(bp, ah);
bp = k(bp, bi[0]);
bp = k(bp, bi[1]);
bp = k(bp, bi[2]);
bp = k(bp, bi[3]);
bp = k(bp, (long)((unsigned long)bj[0] << 56) >> 56);
bp = k(bp, bj[1]);
bp = k(bp, z);
bp = k(bp, bl);
bp = k(bp, bm);
bp = k(bp, 0);
bp = k(bp, 0);
bp = k(bp, 0);
bp = k(bp, y);
bp = k(bp, z);
bp = k(bp, cu);
bq = *bn;
bp = k(bp, bq);
br = *bo;
bp = k(bp, br);
return bp;
}
int r(short y, float z, long cu, double cv, short p5, int cx, long cy) {
cb[0] = 236220372;
cb[1] = -182;
cb[2] = -1881662566;
cb[3] = 1387244075;
cf[0] = -2147483647;
cf[1] = -80;
ci = &ax;
cj = &ch;
ck = &ci;
cc = 2140078080 - 9379857 - 1073741825 * cy;
*ci = 128 + ax;
cd = s(2147483752, -9223372035781033984, 1) - 183647633;
*cj = &bx;
*ck = &aw;
ce[1] = 618603775 - -1006631933;
ce[0] = 762265104 - cc;
*ci = -59 + ax;
by = 1060352 - cd;
cg = k(0, 58);
cg = k(cg, bw);
cg = k(cg, (long)((unsigned long)by << 40) >> 40);
cg = k(cg, 58);
cg = k(cg, (long)((unsigned long)aw << 56) >> 56);
cg = k(cg, (long)((unsigned long)av << 56) >> 56);
cg = k(cg, cb[0]);
cg = k(cg, cb[1]);
cg = k(cg, cb[2]);
cg = k(cg, cb[3]);
cg = k(cg, cc);
cg = k(cg, ax);
cg = k(cg, ce[0]);
cg = k(cg, ce[1]);
cg = k(cg, cf[0]);
cg = k(cg, cf[1]);
cg = k(cg, cd);
cg = k(cg, (long)((unsigned long)y << 48) >> 48);
cg = k(cg, z);
cg = k(cg, cu);
cg = k(cg, cv);
cg = k(cg, p5);
cg = k(cg, cx);
cg = k(cg, cy);
cg = k(cg, *ch);
ay = *ci;
cg = k(cg, (long)((unsigned long)ay << 56) >> 56);
return cg;
}
int s(long y, long z, char cu) {
cs[0] = 261821335126730274;
cs[1] = -295652937432221388;
cs[2] = 4014865778677508409;
cr = &bg;
cw = &ct;
cs[3] = cn + 479041856 - -2147483585;
bg = cu + 62;
*cw = bg;
co = -827852781;
cq = -z;
bg = ct - -1;
ca = *cr;
cm = au(ca - 52, 8, -5856651, ct - 39, -2) - 1322197572;
cl = k(0, co);
cl = k(cl, 0);
cl = k(cl, cq);
cl = k(cl, cp);
cl = k(cl, cs[0]);
cl = k(cl, cs[1]);
cl = k(cl, cs[2]);
cl = k(cl, cs[3]);
cl = k(cl, 0);
cl = k(cl, ct);
cl = k(cl, bg);
cl = k(cl, 3);
cl = k(cl, 3.0);
cl = k(cl, 2047);
cl = k(cl, 0);
cl = k(cl, 1668439336);
cl = k(cl, 57);
cl = k(cl, 178);
cl = k(cl, y);
cl = k(cl, z);
cl = k(cl, cm);
cl = k(cl, 0);
cl = k(cl, 0);
cl = k(cl, cu);
cl = k(cl, 0);
bu = *cr;
cl = k(cl, bu);
bz = *cw;
cl = k(cl, bz);
return cl;
}
int main() {
if (bt(1, 16, 118) != 2085902385)
__builtin_abort();
return 0;
}