https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123645
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The problem is here:
```
/* Canonicalize. */
if ((e2->flags & EDGE_TRUE_VALUE
&& gimple_cond_code (cond) == NE_EXPR)
|| (e1->flags & EDGE_TRUE_VALUE
&& gimple_cond_code (cond) == EQ_EXPR))
{
std::swap (arg0, arg1);
std::swap (e1, e2);
}
```
e0/e1 corresponds to edges comming into the join block and not the edges from
the conditional block. So EDGE_TRUE_VALUE will not be on the edge here ...