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;
}

Reply via email to