https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80198
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
So this is another case where the conditional propagation happens so that
if (a == b)
{
... = deref a;
... = deref b;
}
turns into
if (a == b)
{
... = deref b;
... = deref a;
}
which is of course not sensible. Having both a = b and b = a recorded
as copies breaks the lattices canonical value.
The original bug would need to have been fixed by recording equivalency
sets or by doing more expensive lookups and knowing a backmapping,
SSA value -> SSA name list.