[PATCH] Re: REG_DEAD/REG_EQUIV problem.
Jeffrey A Law
law@redhat.com
Sat Feb 17 23:12:00 GMT 2001
In message < Pine.LNX.4.21.0102012037050.19209-100000@front.linuxcare.com.au >y
ou write:
> On Thu, 1 Feb 2001, Alan Modra wrote:
>
> > (insn 17 15 21 (set (reg/v:DI 69)
> > (mem/u:DI (lo_sum:DI (reg:DI 70)
> > (unspec:DI[
> > (symbol_ref/v/f:DI ("*L$C0001"))
> > ] 0)) 0)) 83 {*pa.md:2368} (insn_list 15 (nil))
> > (expr_list:REG_EQUIV (mem/u:DI (lo_sum:DI (reg:DI 70)
> > (unspec:DI[
> > (symbol_ref/v/f:DI ("*L$C0001"))
> > ] 0)) 0)
> > (expr_list:REG_DEAD (reg:DI 70)
> > (nil))))
>
> Whee, maybe I'll be a gcc hacker one day.
>
> This fixes the problem for me. I've no idea whether it's the ideal
> solution - it may well be possible and desirable to prevent these
> conflicting notes being issued.
>
> gcc/ChangeLog
> * rtlanal.c (reg_death_note_p): New function.
> (reg_mentioned_dies): New function.
> * rtl.h (reg_mentioned_dies): Declare.
> * reload1.c (reload): Don't set reg_equiv_memory_loc for an insn
> that references memory via a reg that dies.
This is fundamentally going down the wrong path.
The REG_EQUIV is valid and it's valid for it to be used to create an
equivalence in reg_equiv_memory_loc.
The problem is elsewhere. This just fixes the symptom.
jeff
More information about the Gcc-bugs
mailing list