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). :-) Peter