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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-08-14
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So the difference here is basically doing the following manually:
```
#if 0
static char i(int k) {
  if (k)
    bar173_();
  c <= 0 >= b;
  if (k)
    return c;
  return c;
}
#else
static char i(int k) {
  if (k)
    bar173_();
  c <= 0 >= b;
  int t;
  if (k)
    t = c;
  else
    t = c;
  return t;
}
#endif
```
and we used to do some jump threading previously such that the load of the c
would be in the `if (k)` branch after the call to `bar173_()`. The only pass
which moves it like that is pre which happens maybe later but too late for jump
threading to happen for the optimizations.

I have not looked into why this makes a difference either. maybe because there
is another jump threading where we know c is 0 ...

Confirmed.

Reply via email to