https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80842
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Hmm, goes CONSTANT -> UNDEFINED. We've been here before I think. Visiting statement: _7 = (int) f.7_6; which is likely UNDEFINED Lattice value changed to UNDEFINED. Adding SSA edges to worklist. marking stmt to be not simulated again Visiting statement: _5 = (char) _4; which is likely CONSTANT Lattice value changed to CONSTANT 0x0 (0x3). Adding SSA edges to worklist. Visiting statement: _8 = (int) _5; which is likely CONSTANT Lattice value changed to CONSTANT 0x0 (0x3). Adding SSA edges to worklist. Visiting statement: _14 = _7 * _8; which is likely CONSTANT Lattice value changed to VARYING. Adding SSA edges to worklist. Visiting statement: _15 = _14 / _8; which is likely CONSTANT Lattice value changed to CONSTANT 0x0 (0xff). Adding SSA edges to worklist. Visiting statement: _5 = (char) _4; which is likely CONSTANT Lattice value changed to VARYING. Adding SSA edges to worklist. ssa_edge_worklist: adding SSA use in _8 = (int) _5; Simulating statement: _8 = (int) _5; Visiting statement: _8 = (int) _5; which is likely CONSTANT Lattice value changed to VARYING. Adding SSA edges to worklist. ssa_edge_worklist: adding SSA use in _15 = _14 / _8; ssa_edge_worklist: adding SSA use in _18 = _8 & _17; Simulating statement: _15 = _14 / _8; Visiting statement: _15 = _14 / _8; which is likely CONSTANT Applying pattern match.pd:397, gimple-match.c:9897 Match-and-simplified _14 / _8 to _7