https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103079
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- =========== BB 2 ============ Imports: b.0_1 t_4(D) Exports: b.0_1 t_4(D) _6 _6 : b.0_1(I) t_4(D)(I) t_4(D) UNDEFINED <bb 2> [local count: 176285970]: b.0_1 = b; _6 = b.0_1 | t_4(D); if (_6 != 0) goto <bb 3>; [34.00%] else goto <bb 7>; [66.00%] 2->3 (T) b.0_1 : UNDEFINED 2->3 (T) t_4(D) : UNDEFINED 2->3 (T) _6 : int [-INF, -1][1, +INF] I think 2->3 (T) b.0_1 : UNDEFINED is wrong. if b.0_1 is 1 then 1 | UNDEF is still 1 and there's nothing "undefined" in evaluating if (1 | UNDEF !+ 0).