https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108482
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- What is interesting is if we look at the IR: _41 = .LOOP_DIST_ALIAS (3, _40); if (_41 != 0) goto <bb 3>; [90.00%] else goto <bb 4>; [10.00%] <bb 3> [local count: 430033601]: _29 = *_4; _30 = (char) _29; _31 = _7 & _30; goto <bb 5>; [100.00%] <bb 4> [local count: 47781512]: _47 = *_4; _48 = (char) _47; _49 = _7 & _48; <bb 5> [local count: 118111600]: # _46 = PHI <_49(4), _31(3)> That code is the same on both edges even though not noticed being the same.