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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
      /* (A CMP B) != 0 is the same as (A CMP B).
         (A CMP B) == 0 is just (A CMP B) with the edges swapped.  */
      if (is_gimple_assign (def_stmt)
          && TREE_CODE_CLASS (gimple_assign_rhs_code (def_stmt)) ==
tcc_comparison)
          {
            tree_code nc = gimple_assign_rhs_code (def_stmt);
            tree nlhs = vn_valueize (gimple_assign_rhs1 (def_stmt));
            tree nrhs = vn_valueize (gimple_assign_rhs2 (def_stmt));
            edge nt = true_e;
            edge nf = false_e;
            if (code == EQ_EXPR)
              std::swap (nt, nf);
            insert_predicates_for_cond (nc, nlhs, nrhs, nt, nf);
          }


Looks like nrhs could return back to rhs.

Will fix this tomorrow.

Reply via email to