------- 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

Reply via email to