https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88788
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Look e.g. at -O2: void bar (int); void foo (int x) { int i = 0; if (x == 8) { x = 16; goto lab; } for (; i < 100; i++) { lab: bar (x); } } but pretty much any time you have a loop where some var doesn't really change, but there is some other edge to the loop header with a different value for that var.