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).