| 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
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
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)),