This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rtl] Fix PR84878: Segmentation fault in add_cross_iteration_register_deps


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]