https://gcc.gnu.org/bugzilla/show_bug.cgi?id=128597

            Bug ID: 128597
           Summary: wrong code at -O3 on x86_64-linux-gnu
           Product: gcc
           Version: 17.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/8rj6P4bK1

Note:
- fails: 15.1 till trunk
- works: 14.4 and earlier

[528] % 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 20261109 (experimental) [master r17-1628-gd1c12591336] (GCC) 
[529] % 
[529] % gcctk -O2 small.c; ./a.out
[530] % 
[530] % gcctk -O3 small.c
[531] % timeout -s 9 5 ./a.out
Killed
[532] % cat small.c
typedef int a;
typedef a d[];
struct {
  a e[3];
} af = {{252}}, ag;
a f[256], g = -349228, h, k, ac, ae, ah = -85, ai, aj, ak = 939575033, al, am,
          an, aq, bb, bh, bj, bn = -312436, bo, br = -1382610661, bs, bt = 95,
          bu, bz, *r, *cc, **ce;
long l, o, p = -187, q = -249, ad, at, bl, bp, bq, by, ca, cb, *ab;
char ao, ap = -69, ar;
short as, au, av = -147, aw, ax = -147, bc, bd, s, t, u, be, bf, bg, bm,
              bx = -1, cd = -1, *ay, *az, **ba;
float bk;
a v(a w, a x) {
  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;
    f[i] = c;
  }
  unsigned m = w;
  int n = x;
  for (int b = 0; b < 4; ++b) {
    char aa = n;
    n >>= 8;
    m = m >> 8 ^ f[(m ^ aa) & 255];
  }
  return m;
}
a y(a w, a x, short z, long cf, long cg, long ch) {
  r = &k;
  ab = &o;
  h = x - z;
  l = 654690961 - ~ch;
  o = -16496128 + ch;
  k = (-7456084 * w - -2656427 * x) ^ 789400172;
  ae = ~k;
  k = 789400172 & ae;
  ac = v(0, 238);
  ac = v(ac, 155);
  ac = v(ac, (long)((unsigned long)g << 44) >> 44);
  ac = v(ac, l);
  ac = v(ac, o);
  ac = v(ac, h);
  ac = v(ac, k);
  ac = v(ac, p);
  ac = v(ac, q);
  ac = v(ac, w);
  ac = v(ac, x);
  ac = v(ac, z);
  ac = v(ac, cf);
  ac = v(ac, cg);
  ac = v(ac, ch);
  ac = v(ac, *r);
  ad = *ab;
  ac = v(ac, ad);
  return ac;
}
a ci(short, a, short);
a cj(long w, long x, a z, short cf, long cg) {
  ao = -19;
  short bi = -183;
  ba = &ay;
  au = bi + 32767;
  bi = cf - au;
  az = &as;
  *az = bi + 19112;
  ar = 127 - 32;
  at = 2147467017 + (long)au - 75497147;
  az = &ax;
  ai = ~z;
  *ba = &aw;
  au = ((cf - 144) & bi) ^ 605;
  bg = au & 605;
  u = ~bg;
  be = au | 605;
  s = ~u;
  t = ~be;
  bf = t | s;
  au = ~bf;
  *ay = 32768 - au;
  aj = v(0, ah);
  aj = v(aj, 250);
  aj = v(aj, 899262387);
  aj = v(aj, 60);
  aj = v(aj, (long)((unsigned long)ap << 56) >> 56);
  aj = v(aj, (long)((unsigned long)ao << 56) >> 56);
  aj = v(aj, ai);
  aj = v(aj, 77);
  aj = v(aj, 36);
  aj = v(aj, 247);
  aj = v(aj, (long)((unsigned long)bi << 48) >> 48);
  aj = v(aj, ar);
  aj = v(aj, (long)((unsigned long)as << 48) >> 48);
  aj = v(aj, 1406);
  aj = v(aj, 228);
  aj = v(aj, at);
  aj = v(aj, (long)((unsigned long)au << 48) >> 48);
  aj = v(aj, (long)((unsigned long)av << 48) >> 48);
  aj = v(aj, (long)((unsigned long)aw << 48) >> 48);
  aj = v(aj, (long)((unsigned long)ax << 48) >> 48);
  aj = v(aj, w);
  aj = v(aj, x);
  aj = v(aj, z);
  aj = v(aj, cf);
  aj = v(aj, cg);
  aj = v(aj, 0);
  bc = *ay;
  aj = v(aj, (long)((unsigned long)bc << 48) >> 48);
  bd = *az;
  aj = v(aj, (long)((unsigned long)bd << 48) >> 48);
  return aj;
}
void ck(a w) {
  bk = 43262 + 3.75f;
  do {
    bl = (long)1073741825 + 1073741824 - -2147483646;
    bm = aq = ak;
    bb = 939575033 ^ ak;
    aq = aq & bb;
    bh = ci(0, aq, 0) + 1801156138;
    am = 39069 * bl;
    al = am;
    am = bh * w;
    al = al + am % 46337;
    bq = bp = 2486624264;
    bq = bq * w % 3037000493;
    bp = bp + bq;
    an = y(al, 62, 6155, bp, bk - 43263, 9223372032895333888) - 1298608474;
    ak = an;
  } while (-bm > 0);
}
a ci(short w, a x, short z) {
  short bi = 9076;
  d *cl;
  a cm;
  do {
    ce = &cc;
    ag = af;
    bs = -2147483647 + bi;
    *ce = &bu;
    bj = (9076 - (unsigned long)bs) << 44 >> 44;
    cl = &ag.e;
    bz = cj(3627062303, 2955858147, 1436121834, 1, 9223372031595634702) -
         175482970;
    bi = x;
    bo = bz - bs;
    bu = **cl;
    by = -7648;
  } while (21497 - (short)bs - ~w <= 13305 + z);
  cb = by;
  by = -24 >> 24;
  ca = 388104191 + 536870912 - by;
  by = 268435457 - -1611472242;
  if (bu + (bi == 0 ? x : -814992270) < bu)
    bt = *cc;
  *ce = &bo;
  cm = v(0, bx);
  cm = v(cm, (long)((unsigned long)32768 << 48) >> 48);
  cm = v(cm, by);
  cm = v(cm, 0);
  cm = v(cm, (long)((unsigned long)524288 << 44) >> 44);
  cm = v(cm, bj);
  cm = v(cm, 1);
  cm = v(cm, (long)((unsigned long)bn << 44) >> 44);
  cm = v(cm, 252);
  cm = v(cm, br);
  cm = v(cm, 726034444);
  cm = v(cm, 2683);
  cm = v(cm, bo);
  cm = v(cm, bs);
  cm = v(cm, cb);
  cm = v(cm, ca);
  cm = v(cm, 254);
  cm = v(cm, bt);
  cm = v(cm, cd);
  cm = v(cm, 32767);
  cm = v(cm, 0);
  cm = v(cm, 0);
  cm = v(cm, 0);
  cm = v(cm, 0);
  cm = v(cm, 0);
  cm = v(cm, 0);
  cm = v(cm, *cc);
  cm = v(cm, bu);
  return cm;
}
a main() { ck(30); }

Reply via email to