--- Comment #1 from matz at gcc dot gnu dot org 2007-02-08 17:35 ---
I can't currently attach anything, somehow bugzilla is broken.
Anyway, perhaps the description of what happens is clear enough to see the
error. Btw: this patch will solve the problem on trunk per my proposal:
Index: config/rs6000/rs6000.c
===
--- config/rs6000/rs6000.c (revision 121710)
+++ config/rs6000/rs6000.c (working copy)
@@ -14112,6 +14112,7 @@ rs6000_emit_stack_tie (void)
rtx mem = gen_frame_mem (BLKmode,
gen_rtx_REG (Pmode, STACK_POINTER_REGNUM));
+ set_mem_alias_set (mem, 0);
emit_insn (gen_stack_tie (mem));
}
@@ -14561,9 +14562,8 @@ rs6000_emit_prologue (void)
|| info-first_fp_reg_save 64
|| info-first_gp_reg_save 32
)));
- if (frame_reg_rtx != sp_reg_rtx)
- rs6000_emit_stack_tie ();
}
+ rs6000_emit_stack_tie ();
/* Handle world saves specially here. */
if (WORLD_SAVE_P (info))
@@ -15501,11 +15501,11 @@ rs6000_emit_epilogue (int sibcall)
/* If this is V.4, unwind the stack pointer after all of the loads
have been done. */
+ rs6000_emit_stack_tie ();
if (frame_reg_rtx != sp_reg_rtx)
{
/* This blockage is needed so that sched doesn't decide to move
the sp change before the register restores. */
- rs6000_emit_stack_tie ();
emit_move_insn (sp_reg_rtx, frame_reg_rtx);
}
else if (sp_offset != 0)
---
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30736