[Bug tree-optimization/69155] [6 Regression] ICE (segfault in gimple_stmt_nonnegative_warnv_p)

rguenther at suse dot de gcc-bugzilla@gcc.gnu.org
Tue Jan 12 09:06:00 GMT 2016


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

--- Comment #8 from rguenther at suse dot de <rguenther at suse dot de> ---
On Mon, 11 Jan 2016, rsandifo at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69155
> 
> --- Comment #7 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> ---
> (In reply to Richard Biener from comment #6)
> > (In reply to Jakub Jelinek from comment #4)
> > > (In reply to Richard Biener from comment #2)
> > > > I think we have a dup/related bug where we run into the issue that
> > > > tree-complex.c
> > > > wrecks SSA form during its rewrite.
> > > 
> > > That is indeed what happens, but what solution do you see other than
> > > avoiding all the simplifications/optimizations that follow ssa edges?
> > 
> > In the other bug we discussed to do the processing in proper (dominator)
> > order.  Richard, any progress on that?
> 
> Sorry for dropping the ball on this.  I'd hit exactly the problem that
> Jakub described and wasn't sure how to proceed.  Walking in dominator
> order or reserve postorder doesn't help because we still need to create
> scalar SSA_NAME replacements for complex phis.  You then have the same
> problem for the definitions of the phi in cases where an argument comes
> from a backedge.

Ok, I thought that doing dominator order would at least improve
things a bit here.

>  It seemed like we'd need to do one of:
> 
> - initially make the scalar definition a GIMPLE_NOP and replace it
>   with a phi later once we've decomposed all arguments

I think we visit the PHI always first, only its backedge arguments may
have unvisited defs (if we do proper dominator order walks).

> - initially make the scalar definition an empty phi and fill in its
>   arguments later
> 
> - initially make the scalar definition an empty phi and fill in
>   arguments as soon as their value is known.
> 
> None of them seemed very appealing.  Like Jakub says, I'm worried
> that any incomplete definitions are going to cause problems with
> code making invalid assumptions.
> 
> In some ways having a null DEF_STMT seems like the clearest
> indication of what's going on.

Well, there is another choice...

- do not keep SSA form for PHI args on backedges

that is, when we call get_component_ssa_name for a USE and do not have
it registered yet instead of creating a stray SSA name create
a decl and mark it for SSA renaming (and call update_ssa in the pass 
TODO).

Needs to do dominator walks to avoid too many renamings and adding
an arg to get_component_ssa_name to indicate whether we are asking
for a DEF or USE.

I think that's the cleanest approach (even if it might not be the
"fastest" given SSA renaming costs).

Richard.


More information about the Gcc-bugs mailing list