diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2013-11-27 23:54:26 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2013-11-27 15:54:26 -0800 |
commit | 362805fc2f46706042786be9a63e2d2d36f590a3 (patch) | |
tree | 77d7a4f446e9f317eb11fc4f5638a5c567ba3561 /gcc | |
parent | e7bd1de1d4067c6ea533060c04af8a137472f1e5 (diff) | |
download | gcc-362805fc2f46706042786be9a63e2d2d36f590a3.zip gcc-362805fc2f46706042786be9a63e2d2d36f590a3.tar.gz gcc-362805fc2f46706042786be9a63e2d2d36f590a3.tar.bz2 |
Also handle REG_XXX notes in spill_pseudos
PR rtl-optimization/59311
* dwarf2cfi.c (dwf_regno): Assert reg isn't pseudo register.
* lra-spills.c (spill_pseudos): Handle REG_XXX notes.
From-SVN: r205468
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2cfi.c | 1 | ||||
-rw-r--r-- | gcc/lra-spills.c | 21 |
3 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f13ae78..037335e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-11-27 H.J. Lu <hongjiu.lu@intel.com> + + PR rtl-optimization/59311 + * dwarf2cfi.c (dwf_regno): Assert reg isn't pseudo register. + * lra-spills.c (spill_pseudos): Handle REG_XXX notes. + 2013-11-27 Eric Botcazou <ebotcazou@adacore.com> * var-tracking.c (track_expr_p): Do not track declarations for parts diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c index 19276e2..b8e25bc 100644 --- a/gcc/dwarf2cfi.c +++ b/gcc/dwarf2cfi.c @@ -906,6 +906,7 @@ notice_eh_throw (rtx insn) static inline unsigned dwf_regno (const_rtx reg) { + gcc_assert (REGNO (reg) < FIRST_PSEUDO_REGISTER); return DWARF_FRAME_REGNUM (REGNO (reg)); } diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c index 4ab10c2..0dd341a 100644 --- a/gcc/lra-spills.c +++ b/gcc/lra-spills.c @@ -477,9 +477,30 @@ spill_pseudos (void) FOR_BB_INSNS (bb, insn) if (bitmap_bit_p (&changed_insns, INSN_UID (insn))) { + rtx *link_loc, link; remove_pseudos (&PATTERN (insn), insn); if (CALL_P (insn)) remove_pseudos (&CALL_INSN_FUNCTION_USAGE (insn), insn); + for (link_loc = ®_NOTES (insn); + (link = *link_loc) != NULL_RTX; + link_loc = &XEXP (link, 1)) + { + switch (REG_NOTE_KIND (link)) + { + case REG_FRAME_RELATED_EXPR: + case REG_CFA_DEF_CFA: + case REG_CFA_ADJUST_CFA: + case REG_CFA_OFFSET: + case REG_CFA_REGISTER: + case REG_CFA_EXPRESSION: + case REG_CFA_RESTORE: + case REG_CFA_SET_VDRAP: + remove_pseudos (&XEXP (link, 0), insn); + break; + default: + break; + } + } if (lra_dump_file != NULL) fprintf (lra_dump_file, "Changing spilled pseudos to memory in insn #%u\n", |