https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80181

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, so we have

dl_7 = vp_2 ^ _1;
dl_8 = dl_7 ^ vp_2;

where in the first iteration dl_7 is optimistically _1 (vp_2 is 0) and
thus this gets simplified to dl_7 (CONSTANT).  While
in the 2nd iteration it is VARYING, then this gets simplified to _1
(CONSTANT) which has already been fully propagated and thus gets its
lattice value used (UNDEFINED).  So we get a bogus lattice transition
CONSTANT -> UNDEFINED.

There's a missed optimization that we do not treat XOR as UNDEFINED if
one operand is undefined.  That fixes the testcase.

Reply via email to