This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, rtl] Fix PR84878: Segmentation fault in add_cross_iteration_register_deps
On Tue, 27 Mar 2018, Peter Bergner wrote:
> On 3/27/18 3:18 AM, Richard Biener wrote:
> > On Mon, 26 Mar 2018, Peter Bergner wrote:
> >> /* Create inter-loop true dependences and anti dependences. */
> >> for (r_use = DF_REF_CHAIN (last_def); r_use != NULL; r_use = r_use->next)
> >> {
> >> + /* PR84878: Some definitions of global hard registers may not have
> >> + any following uses or they may be artificial, so skip them. */
> >> + if (DF_REF_INSN_INFO (r_use->ref) == NULL)
> >> + continue;
> >> +
> >
> > To me a better check would be DF_REF_IS_ARTIFICIAL (r_use->ref). But
> > I'm not sure simply ignoring those will be correct?
>
> I see now I made a massive mistake in nomenclature in calling these
> "artificial" uses. :-( What I meant was the forcing of liveness
> for global registers at the exit block similar to what you mentioned
> in your reply. Sorry about that.
>
>
>
> > In fact artifical refs do have a basic-block, so
> >
> >> rtx_insn *use_insn = DF_REF_INSN (r_use->ref);
> >>
> >> if (BLOCK_FOR_INSN (use_insn) != g->bb)
> >
> > should use DF_REF_BB (r_use->ref) instead of indirection through
> > DF_REF_INSN. Still use_insn is used later but then if the
> > artificial ref is in side g->bb we should better give up here?
> > We don't seem to have use_nodes for these "non-insns".
>
> Maybe the problem is that we have a r_use->ref at all for these
> non-insns?
>
>
> > Somebody with more insight on DF should chime in here and tell
> > me what those "artificial" refs are about ... there's
> >
> > /* If this flag is set for an artificial use or def, that ref
> > logically happens at the top of the block. If it is not set
> > for an artificial use or def, that ref logically happens at the
> > bottom of the block. This is never set for regular refs. */
> > DF_REF_AT_TOP = 1 << 1,
> >
> > so this is kind-of global regs being live across all BBs? This sounds
> > a bit stupid to me, but well ... IMHO those refs should be at
> > specific insns like calls.
> >
> > So maybe, with a big fat comment, it is OK to ignore artificial
> > refs in this loop...
>
> Yeah, I'd like someone else's opinion too, as I know even less about
> real artificial uses (as opposed to my incorrect mention in my first
> post). :-)
If they only appear in the exit/entry block ignoring them should be safe.
But who knows...
Richard.