https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67239
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to H.J. Lu from comment #6) > Does this patch > > diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c > index 2ac3828..8b57875 100644 > --- a/gcc/tree-ssa-sccvn.c > +++ b/gcc/tree-ssa-sccvn.c > @@ -4372,17 +4372,16 @@ sccvn_dom_walker::before_dom_children (basic_block > bb) > { > gimple *stmt = last_stmt (e->src); > if (stmt > - && gimple_code (stmt) == GIMPLE_COND) > + && gimple_code (stmt) == GIMPLE_COND > + && (e->flags & EDGE_TRUE_VALUE) != 0) > { > enum tree_code code = gimple_cond_code (stmt); > tree lhs = gimple_cond_lhs (stmt); > tree rhs = gimple_cond_rhs (stmt); > - record_conds (bb, code, lhs, rhs, > - (e->flags & EDGE_TRUE_VALUE) != 0); > + record_conds (bb, code, lhs, rhs, true); > code = invert_tree_comparison (code, HONOR_NANS (lhs)); > if (code != ERROR_MARK) > - record_conds (bb, code, lhs, rhs, > - (e->flags & EDGE_TRUE_VALUE) == 0); > + record_conds (bb, code, lhs, rhs, false); > } > } > } > > make any senses? Do we need to check EDGE_FALSE_VALUE? No, even for the false edge we can record proper expressions, see record_conds and how it handles the cases if the condition was true or false. Can you please attach -details dumps of the pass instance that does this? Note that the large number '5368709811' (0x1fffffff) might point to a different issue elsewhere. Did you double-check that makes sense? Sorry for not investigating myself but I lack a x32 runtime environment. It would help if you attach preprocessed source with a pointer to the function that you believe is miscompiled.