https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64853
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the problem is that: Visiting statement: _15 = _56 & 1; Applying pattern match.pd:312, gimple-match.c:13772 Applying pattern match.pd:235, gimple-match.c:13525 Match-and-simplified _56 & 1 to 0 Intersecting [0, 0] and [0, 1] to [0, 0] Found new range for _15: [0, 0] might be reasonable during iteration, when not yet considering the backedge as executable, but we actually never visit this statement again, perhaps due to match-and-simplify looking at earlier statements. Richard, can you please have a look?