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

            Bug ID: 127689
           Summary: wrong code at -O{s,2,3} with "-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/ah8P73ndx

Note:
- fails: trunk
- works: 16.2 and earlier


[521] % 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 20261001 (experimental) [master r17-1628-gd1c12591336] (GCC) 
[522] % 
[522] % gcctk -O3 small.c; ./a.out
[523] % gcctk -O3 -fno-tree-forwprop small.c
[524] % timeout -s 9 5 ./a.out
Killed
[525] % cat small.c
int a[256], e, p, an, ao, aq, ar, at, au, av, aw, ax, *q, **r;
char d = -38, ag, *as;
short s, t, u, v, ac, ad, ae, af, ah, ai, ap = -83;
long aj, ak, al, am, ay = -76, az = -69, ba = -137455710142865;
float bb = -1.5f;
int abs(int);
int aa(int w, int x) {
  for (int f = 0; f < 256; ++f) {
    unsigned c = f;
    for (int g = 0; g < 8; ++g)
      c = c & 1 ? c >> 1 ^ 3988292384 : c >> 1;
    a[f] = c;
  }
  unsigned h = w;
  int i = x;
  for (int b = 0; b < 4; ++b) {
    char ab = i;
    i >>= 8;
    h = h >> 8 ^ a[(h ^ ab) & 255];
  }
  return h;
}
int j(int w) {
  int k = abs(w);
  return k;
}
void l(short);
void m(short, short);
void n(long, int);
int o(int w, int x, long z) {
  int bc = ax = -691633775;
  aw = -32768;
  bc = aa(0, 244);
  bc = aa(bc, 32670);
  bc = aa(bc, ay);
  bc = aa(bc, az);
  bc = aa(bc, bb);
  bc = aa(bc, (long)((unsigned long)aw << 40) >> 40);
  bc = aa(bc, ax);
  bc = aa(bc, ba);
  bc = aa(bc, 1879048192);
  bc = aa(bc, w);
  bc = aa(bc, 0);
  bc = aa(bc, 0);
  bc = aa(bc, x);
  bc = aa(bc, z);
  bc = aa(bc, 0);
  bc = aa(bc, 0);
  bc = aa(bc, ay);
  bc = aa(bc, bb);
  return bc;
}
void y(short w) {
  r = &q;
  *r = &e;
  *q = j((long)((unsigned long)w << 48) >> 48);
  p = *q;
  s = p;
  t = s % 181;
  v = 14 * t;
  u = v * d % 181 + v;
  l(u - 40);
}
void l(short w) {
  af = w | 39;
  ac = (long)((unsigned long)af << 52) >> 52;
  ad = ac ^ 103;
  ae = -104 ^ ad;
  m(2 ^ ae, 234 + 38);
}
void m(short w, short x) {
  ai = x - 5 * x;
  if (w - 544 * w == w + ((long)((unsigned long)ai << 52) >> 52))
    ai = -16283;
  ah = -32254 - ai;
  aj = (long)((unsigned long)((long)((unsigned long)ah << 48) >> 48) << 24) >>
       24;
  ak = aj + 741431;
  am = 532256 * ak;
  al = am + 599176;
  al = al % 741431;
  n(al - 549756257880, -1066);
}
void n(long w, int x) {
  as = &ag;
  while (1) {
    *as = ag - 3;
    ao = w;
    aq = (long)((unsigned long)ap << 48) >> 48;
    ar = aq + 46337;
    au = 35957 * ar % 46337;
    at = 24060 * ao % 46337 + au;
    av = o(at - 536906819, -1073741824, 4294967295) + 591865099;
    an = 1070168857 - av;
    if (-3573913 + ~an == ag - ~x)
      break;
  }
}
int main() { y(32768); }

Reply via email to