re PR middle-end/36594 (multiple regressions on powerpc at rev.136976)
authorAndrew Pinski <andrew_pinski@playstation.sony.com>
Tue, 24 Jun 2008 22:42:10 +0000 (22:42 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 24 Jun 2008 22:42:10 +0000 (15:42 -0700)
2008-06-24  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR middle-end/36594
        * builtins.c (expand_builtin_nonlocal_goto): Stabilize the address of
        the memory instead of the memory itself for the save area.

From-SVN: r137089

gcc/ChangeLog
gcc/builtins.c

index 1ee4650db49ec689f4dc22711795f3bf17dc4d09..c68706eeb9b350aa58c62dc8f087f2730df2affc 100644 (file)
@@ -1,3 +1,9 @@
+2008-06-24  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR middle-end/36594
+       * builtins.c (expand_builtin_nonlocal_goto): Stabilize the address of
+       the memory instead of the memory itself for the save area.
+
 2008-06-24  Olivier Hainque  <hainque@adacore.com>
             Nicolas Roche  <roche@adacore.com>
 
index cdc5ab3137526bd1bfdccc1fe4d269b103d7f5d4..06ae07adaa97104fd4392e6ee21ce61f5cc1a408 100644 (file)
@@ -873,6 +873,9 @@ expand_builtin_nonlocal_goto (tree exp)
   r_label = convert_memory_address (Pmode, r_label);
   r_save_area = expand_normal (t_save_area);
   r_save_area = convert_memory_address (Pmode, r_save_area);
+  /* Copy the address of the save location to a register just in case it was based
+    on the frame pointer.   */
+  r_save_area = copy_to_reg (r_save_area);
   r_fp = gen_rtx_MEM (Pmode, r_save_area);
   r_sp = gen_rtx_MEM (STACK_SAVEAREA_MODE (SAVE_NONLOCAL),
                      plus_constant (r_save_area, GET_MODE_SIZE (Pmode)));
@@ -887,7 +890,6 @@ expand_builtin_nonlocal_goto (tree exp)
 #endif
     {
       r_label = copy_to_reg (r_label);
-      r_sp = copy_to_reg (r_sp);
 
       emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
       emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));