[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