summaryrefslogtreecommitdiff
path: root/gcc/lra-spills.c
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2013-11-27 23:54:26 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2013-11-27 15:54:26 -0800
commit362805fc2f46706042786be9a63e2d2d36f590a3 (patch)
tree77d7a4f446e9f317eb11fc4f5638a5c567ba3561 /gcc/lra-spills.c
parente7bd1de1d4067c6ea533060c04af8a137472f1e5 (diff)
downloadgcc-362805fc2f46706042786be9a63e2d2d36f590a3.tar.gz
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/lra-spills.c')
-rw-r--r--gcc/lra-spills.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c
index 4ab10c25b98..0dd341a9794 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 = &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",