On 12/15/2017 01:10 AM, Richard Biener wrote: > On Thu, 14 Dec 2017, Richard Biener wrote: > >> On December 14, 2017 4:43:42 PM GMT+01:00, Jeff Law <l...@redhat.com> wrote: >>> On 12/14/2017 01:54 AM, Richard Biener wrote: >>>> >>>> IVOPTs (at least) leaves unfolded stmts in the IL and VRP >>> overzealously >>>> asserts they cannot happen. >>>> >>>> Bootstrap and regtest running on x86_64-unknown-linux-gnu. >>>> >>>> Richard. >>>> >>>> 2017-12-14 Richard Biener <rguent...@suse.de> >>>> >>>> PR tree-optimization/83418 >>>> * vr-values.c >>> (vr_values::extract_range_for_var_from_comparison_expr): >>>> Instead of asserting we don't get unfolded comparisons deal with >>>> them. >>>> >>>> * gcc.dg/torture/pr83418.c: New testcase. >>> I think this also potentially affects dumping. I've seen the dumper >>> crash trying to access a INTEGER_CST where we expected to find an >>> SSA_NAME while iterating over a statement's operands. >>> >>> I haven't submitted the workaround because I hadn't tracked down the >>> root cause to verify something deeper isn't wrong. >> >> Yes, I've seen this as well, see my comment in the PR. The issue is that DOM >> calls VRP analyze (and dump) routines with not up to date operands during >> optimize_stmt. > > I had the following in my tree to allow dumping. > > Richard. > > Index: gcc/tree-ssa-dom.c > =================================================================== > --- gcc/tree-ssa-dom.c (revision 255640) > +++ gcc/tree-ssa-dom.c (working copy) > @@ -2017,6 +2017,7 @@ dom_opt_dom_walker::optimize_stmt (basic > undefined behavior that get diagnosed if they're left in > the > IL because we've attached range information to new > SSA_NAMES. */ > + update_stmt_if_modified (stmt); > edge taken_edge = NULL; > evrp_range_analyzer.vrp_visit_cond_stmt (as_a <gcond *> > (stmt), > &taken_edge); > I think this implies something earlier changed a statement without updating it.
jeff