https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99987
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail| |7.5.0
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So this is bascially the missed optimization:
```
void foo(void);
int main()
{
unsigned h = 123+5;
for(unsigned g = 123; g != 0; g--)
{
h--;
if(h == 0)
foo();
}
}
```
The relationship between h and g is `h = g + 5` so you can never get `h == 0`
in the loop as the range of g is [123,0].
Note In the original testcase, only GCC 8-11 dom3 (on x86_64; but not on
aarch64 due to IVOPTS differences) could optimize away the call to foo.
Also note LLVM can optimize it away both the above testcase and the original
one.