Patchwork regrename creates invalid insn

login
register
mail settings
Submitter Bernd Schmidt
Date July 11, 2012, 9:31 p.m.
Message ID <4FFDF09B.9040104@codesourcery.com>
Download mbox | patch
Permalink /patch/170518/
State New
Headers show

Comments

Bernd Schmidt - July 11, 2012, 9:31 p.m.
On 03/26/2012 06:03 PM, Andreas Schwab wrote:
> Bernd Schmidt <bernds@codesourcery.com> writes:
> 
>> Does 4.7 still have the failure at all?
> 
> Yes, see PR52573.

Well, I still think having both REG_DEAD and REG_UNUSED for the same reg
is bogus, but fixing that causes trouble in reg-stack. It seems the path
of least resistance is to just cope with the situation in regrename.

The following seems to cure the problem with a 4.7 m68k cross. Also
bootstrapped and tested with -frename-registers enabled at -O2 on
x86_64-linux. Ok everywhere?


Bernd
Steven Bosscher - July 11, 2012, 10:10 p.m.
On Wed, Jul 11, 2012 at 11:31 PM, Bernd Schmidt <bernds@codesourcery.com> wrote:
> On 03/26/2012 06:03 PM, Andreas Schwab wrote:
>> Bernd Schmidt <bernds@codesourcery.com> writes:
>>
>>> Does 4.7 still have the failure at all?
>>
>> Yes, see PR52573.
>
> Well, I still think having both REG_DEAD and REG_UNUSED for the same reg
> is bogus, but fixing that causes trouble in reg-stack.

Oh? Before, during, or after reg-stack? IIRC reg-stack re-creates the
notes from scratch for the stack registers.

Is it possible to "filter" one of the notes (REG_DEAD or REG_UNUSED)
out in add_reg_note? IMHO you're right that having both is bogus...

Ciao!
Steven
Bernd Schmidt - July 11, 2012, 10:38 p.m.
On 07/12/2012 12:10 AM, Steven Bosscher wrote:
> On Wed, Jul 11, 2012 at 11:31 PM, Bernd Schmidt <bernds@codesourcery.com> wrote:
>> On 03/26/2012 06:03 PM, Andreas Schwab wrote:
>>> Bernd Schmidt <bernds@codesourcery.com> writes:
>>>
>>>> Does 4.7 still have the failure at all?
>>>
>>> Yes, see PR52573.
>>
>> Well, I still think having both REG_DEAD and REG_UNUSED for the same reg
>> is bogus, but fixing that causes trouble in reg-stack.
> 
> Oh? Before, during, or after reg-stack? IIRC reg-stack re-creates the
> notes from scratch for the stack registers.

During - it relies on the ones it finds. Search for a comment mentioning
fix_truncdi in a CLOBBER case.

> Is it possible to "filter" one of the notes (REG_DEAD or REG_UNUSED)
> out in add_reg_note? IMHO you're right that having both is bogus...

Not even necessary, there's already code in df-problems to avoid adding
REG_DEAD when it's already made a REG_UNUSED - but that code is
explicitly disabled for CLOBBERs. Go figure.


Bernd

Patch

	PR rtl-optimization/52573
	* regrename.c (build_def_use): Ignore REG_DEAD notes if there is a
	REG_UNUSED for the same register.

Index: regrename.c
===================================================================
--- regrename.c	(revision 189425)
+++ regrename.c	(working copy)
@@ -1718,7 +1718,8 @@  build_def_use (basic_block bb)
 
 	  /* Step 4: Close chains for registers that die here.  */
 	  for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
-	    if (REG_NOTE_KIND (note) == REG_DEAD)
+	    if (REG_NOTE_KIND (note) == REG_DEAD
+		&& !find_regno_note (insn, REG_UNUSED, REGNO (XEXP (note, 0))))
 	      {
 		remove_from_hard_reg_set (&live_hard_regs,
 					  GET_MODE (XEXP (note, 0)),