aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2007-10-20 13:11:14 +0000
committerAlan Modra <amodra@gcc.gnu.org>2007-10-20 22:41:14 +0930
commit554c2941e0c1f3e3b312b19c42bf0eb57d9033c8 (patch)
tree7d355bcb1a828747f54336005dd7f4ef853e76d1 /gcc
parent70365b5c3d02f224299cd40fb48959eec8d9e020 (diff)
downloadgcc-554c2941e0c1f3e3b312b19c42bf0eb57d9033c8.zip
gcc-554c2941e0c1f3e3b312b19c42bf0eb57d9033c8.tar.gz
gcc-554c2941e0c1f3e3b312b19c42bf0eb57d9033c8.tar.bz2
re PR target/33812 (ICE from epilogue vrsave code)
PR target/33812 * config/rs6000/rs6000.c (rs6000_emit_epilogue): Revert 2007-05-16 change for vrsave, ie restore after frame pop. From-SVN: r129511
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c30
2 files changed, 21 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b16d94..0c7b102 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-20 Alan Modra <amodra@bigpond.net.au>
+
+ PR target/33812
+ * config/rs6000/rs6000.c (rs6000_emit_epilogue): Revert 2007-05-16
+ change for vrsave, ie restore after frame pop.
+
2007-10-19 David S. Miller <davem@davemloft.net>
* config/sparc/niagara2.md: Fix copyright notice.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 0415e44..024eda7 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -16082,21 +16082,6 @@ rs6000_emit_epilogue (int sibcall)
}
}
- /* Restore VRSAVE if needed. */
- if (TARGET_ALTIVEC && TARGET_ALTIVEC_VRSAVE
- && info->vrsave_mask != 0)
- {
- rtx addr, mem, reg;
-
- addr = gen_rtx_PLUS (Pmode, frame_reg_rtx,
- GEN_INT (info->vrsave_save_offset + sp_offset));
- mem = gen_frame_mem (SImode, addr);
- reg = gen_rtx_REG (SImode, 12);
- emit_move_insn (reg, mem);
-
- emit_insn (generate_set_vrsave (reg, info, 1));
- }
-
/* If we have a frame pointer, a call to alloca, or a large stack
frame, restore the old stack pointer using the backchain. Otherwise,
we know what size to update it with. */
@@ -16123,6 +16108,21 @@ rs6000_emit_epilogue (int sibcall)
sp_offset = 0;
}
+ /* Restore VRSAVE if needed. */
+ if (TARGET_ALTIVEC && TARGET_ALTIVEC_VRSAVE
+ && info->vrsave_mask != 0)
+ {
+ rtx addr, mem, reg;
+
+ addr = gen_rtx_PLUS (Pmode, frame_reg_rtx,
+ GEN_INT (info->vrsave_save_offset + sp_offset));
+ mem = gen_frame_mem (SImode, addr);
+ reg = gen_rtx_REG (SImode, 12);
+ emit_move_insn (reg, mem);
+
+ emit_insn (generate_set_vrsave (reg, info, 1));
+ }
+
/* Get the old lr if we saved it. */
if (info->lr_save_p)
{