2008-06-24 Andrew Pinski <andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jun 2008 22:42:10 +0000 (22:42 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Jun 2008 22:42:10 +0000 (22:42 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@137089 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c

index 1ee4650..c68706e 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 cdc5ab3..06ae07a 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));