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

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #2)
> It works with -fno-tree-loop-optimize but the difference from loop opts is
> just

So changing it to what -ftree-loop-optimize, it still passes with
-fno-tree-loop-optimize (which is even odder):
```
int a, b;
int main() {
  char c = a = 0;
  unsigned char t = 253;
  for (; t != 0; t --){
    int d = 2;
    d ^= 2 && a;
    b = a == 0 ? d : d / a;
    a = b;
  }
  for (; (1 + 95 << 24) + b + 1 + 686658714L + b - 2297271457;)
    ;
}
```

The difference in this case is:
+  unsigned charD.20 ivtmp_32;
+  unsigned charD.20 ivtmp_33;
...
-  # RANGE [irange] unsigned char [1, 253]
-  # t_19 = PHI <t_16(5), 253(2)>
   # .MEM_20 = PHI <.MEM_20(5), .MEM_11(D)(2)>
   # a_lsm.11_2 = PHI <iftmp.1_9(5), 0(2)>
+  # ivtmp_33 = PHI <ivtmp_32(5), 253(2)>

...
-  # RANGE [irange] unsigned char [0, 252]
-  t_16 = t_19 + 255;
-  if (t_16 != 0)
+  ivtmp_32 = ivtmp_33 - 1;
+  if (ivtmp_32 != 0)
```
The only thing I can of which might be causing the issue is +255 vs -1 here.

Reply via email to