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: [df] RFA: artifical defs of global registers for EH, etc.


I have to add one set of meta questions on top of all of this. i do not
see why the confluence code for rd is any different than the code for
live (except of course the fact that the vectors are laid out differently.)

I am sure that some of this is just rot. but it seems like the rd code
should have the out for the fake edge and the live code should have the
special case for invalidated by call if that is justified as per
richard's mail.


Richard Sandiford wrote:
> ""Seongbae Park (박성배, 朴成培)"" <seongbae.park@gmail.com> writes:
>   
>> On Jan 8, 2008 2:44 AM, Richard Sandiford <rsandifo@nildram.co.uk> wrote:
>>     
>>> The LR confluence function is:
>>>
>>>   /* Call-clobbered registers die across exception and call edges.  */
>>>   /* ??? Abnormal call edges ignored for the moment, as this gets
>>>      confused by sibling call edges, which crashes reg-stack.  */
>>>   if (e->flags & EDGE_EH)
>>>     bitmap_ior_and_compl_into (op1, op2, df_invalidated_by_call);
>>>   else
>>>     bitmap_ior_into (op1, op2);
>>>
>>>   bitmap_ior_into (op1, df->hardware_regs_used);
>>>
>>> But global registers are df_invalidated_by_call, so this means
>>> that there are no reaching definitions for a global register before
>>> the first definition in the exception handler itself.
>>>       
>> Really? All calls are supposed to have both USE and DEF for global_regs[],
>> so calls themselves should be treated as the definition for global_regs.
>>     
>
> Sorry, I quoted the wrong thing.  It isn't the LR confluence function
> that matters, it's the reaching definitions function.  My point was
> supposed to be that we don't propagate global definitions from the
> source of an EH edge to the destination because all such registers
> are invalidated_by_call.
>
>   
>> The only thing I see missing is global_regs[] missing from entry_block_defs,
>> which we probably should add to.
>>     
>
> Yes, that probably is missing too but...
>
>   
>> So, would it be sufficient to add global_regs to entry_block_defs ?
>>     
>
> ...it isn't enough on its own.
>
> Anyway, I'm wondering about doing the MIPS thing a different way,
> so if there's doubt, we might as well drop this patch.
>
> Richard
>   


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