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

            Bug ID: 127628
           Summary: wrong code at -O{2,3} with "-fno-tree-ccp -fno-inline
                    -fno-tree-pre -fno-tree-vrp" 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/83Ghr7bYW

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

[639] % 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 20260926 (experimental) [master r17-1628-gd1c12591336] (GCC) 
[640] % 
[640] % gcctk -O3 small.c; ./a.out
[641] % 
[641] % gcctk -O3 -fno-tree-ccp -fno-inline -fno-tree-pre -fno-tree-vrp small.c
[642] % timeout -s 9 5 ./a.out
Killed
[643] % 
[643] % cat small.c
int d[256], e, f, n, m, s, aa, g, o, q, t;
long l, p, r, u, ab;
char z, ac;
int ad(int ae, int af) {
  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 = ae;
  int k = af;
  for (int b = 0; b < 4; ++b) {
    char a = k;
    k >>= 8;
    j = j >> 8 ^ d[(j ^ a) & 255];
  }
  return j;
}
int ag(short ae) {
  int v, w, *x, **ah = &x, y = -245;
  long *am;
  o = -88;
  ac = o - -o;
  if (~l)
    goto ai;
aj:
  x = &v;
  if (q)
    *am = -1074740803;
  if (!g)
    goto ak;
  y = 0;
  goto al;
  do {
    *ah = &v;
    q = 9;
  al:
    *x = 8 * q;
    o = 128 + p;
    x = &w;
    if (l != 6)
      goto aj;
  ai:
    z = 10 - o;
    am = &r;
    w = 0;
  } while (y);
ak:
  v = -8177;
  n = ad(0, (long)((unsigned long)o << 56) >> 56);
  n = ad(n, p);
  n = ad(n, 0);
  n = ad(n, r);
  n = ad(n, 15);
  n = ad(n, w);
  n = ad(n, ac);
  n = ad(n, z);
  n = ad(n, -8691296369941413888 >> 56);
  n = ad(n, y);
  n = ad(n, ae);
  n = ad(n, 0);
  n = ad(n, 0);
  n = ad(n, 0);
  n = ad(n, 0);
  t = *x;
  n = ad(n, t);
  u = *am;
  n = ad(n, u);
  return n;
}
int an(int ae, long af, int ao, long ap) {
  s = 49635029 - 220198545 / ae + ~ao;
  m = 953477111 - ap - af;
  aa = ad(0, m);
  aa = ad(aa, s);
  aa = ad(aa, 0);
  aa = ad(aa, ab);
  aa = ad(aa, 73);
  aa = ad(aa, af);
  aa = ad(aa, *d);
  return aa;
}
int main() {
  while (1) {
    if ((-436207456 & e) == -973078400)
      break;
    f = an(341, -32769, 29, -309366788) + 1035634439;
    e = ag(1) + f;
  }
}

Reply via email to