Also handle REG_XXX notes in spill_pseudos
authorH.J. Lu <hongjiu.lu@intel.com>
Wed, 27 Nov 2013 23:54:26 +0000 (23:54 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Wed, 27 Nov 2013 23:54:26 +0000 (15:54 -0800)
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

gcc/ChangeLog
gcc/dwarf2cfi.c
gcc/lra-spills.c

index f13ae78f0de7e181257cc48a5ac557432485b185..037335e661cd7b1cd811a7071aa60dd6dcce50df 100644 (file)
@@ -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
index 19276e23a2073b47e779442e1dda381ff3da357f..b8e25bc99647df718f0e1606c0539ceb91f4ac8e 100644 (file)
@@ -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));
 }
 
index 4ab10c25b98ed3d7f74604a215bc162d90526603..0dd341a979471adba1853c0b1ef4f83ddd0af32b 100644 (file)
@@ -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 = &REG_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",