https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116753
--- Comment #3 from dcci <dccitaliano at gmail dot com> ---
Slightly easier example that still fails (no nested loop):
```
long patatino() {
long x = 0;
while (x < 10) {
if (x % 2 == 0) {
x += 2;
} else {
x += 1;
}
// Dead
if ((x > 20) && (x % 5 == 0)) {
x -= 5;
}
// Dead
if ((x < -5) && (x % 3 == 0)) {
x += 3;
}
}
return x;
}
```
I am not an expert of GCC implementation but I would imagine some sort of range
analysis being able to find that the two conditions are dead and remove them
before unrolling. FWIW, LLVM seems to get this case right.