OSDN Git Service

PR middle-end/50006
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Aug 2011 17:44:11 +0000 (17:44 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 15 Aug 2011 17:44:11 +0000 (17:44 +0000)
        * explow.c (allocate_dynamic_stack_space): Move suppress_reg_args_size
        setting out to include allocate_stack named pattern as well.
        * builtins.c (expand_builtin_apply): Add ARG_SIZE 0 note.
        * stmt.c (expand_stack_restore): Likewise.

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

gcc/ChangeLog
gcc/builtins.c
gcc/explow.c
gcc/stmt.c

index 9523107..811c089 100644 (file)
@@ -1,3 +1,11 @@
+2011-08-15  Richard Henderson  <rth@redhat.com>
+
+       PR middle-end/50006
+       * explow.c (allocate_dynamic_stack_space): Move suppress_reg_args_size
+       setting out to include allocate_stack named pattern as well.
+       * builtins.c (expand_builtin_apply): Add ARG_SIZE 0 note.
+       * stmt.c (expand_stack_restore): Likewise.
+
 2011-08-15  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/50082
index e0afc90..da86b8c 100644 (file)
@@ -1680,6 +1680,7 @@ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
   else
 #endif
     emit_stack_restore (SAVE_BLOCK, old_stack_level);
+  fixup_args_size_notes (call_insn, get_last_insn(), 0);
 
   OK_DEFER_POP;
 
index f8262db..beeab44 100644 (file)
@@ -1375,6 +1375,9 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
   else if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK)
     probe_stack_range (STACK_CHECK_PROTECT, size);
 
+  /* Don't let anti_adjust_stack emit notes.  */
+  suppress_reg_args_size = true;
+
   /* Perform the required allocation from the stack.  Some systems do
      this differently than simply incrementing/decrementing from the
      stack pointer, such as acquiring the space by calling malloc().  */
@@ -1425,7 +1428,6 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
        }
 
       saved_stack_pointer_delta = stack_pointer_delta;
-      suppress_reg_args_size = true;
 
       if (flag_stack_check && STACK_CHECK_MOVING_SP)
        anti_adjust_stack_and_probe (size, false);
@@ -1436,13 +1438,14 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
         The constant size alloca should preserve
         crtl->preferred_stack_boundary alignment.  */
       stack_pointer_delta = saved_stack_pointer_delta;
-      suppress_reg_args_size = false;
 
 #ifdef STACK_GROWS_DOWNWARD
       emit_move_insn (target, virtual_stack_dynamic_rtx);
 #endif
     }
 
+  suppress_reg_args_size = false;
+
   /* Finish up the split stack handling.  */
   if (final_label != NULL_RTX)
     {
index 2fb4b18..be21a57 100644 (file)
@@ -2016,10 +2016,13 @@ expand_stack_save (void)
 void
 expand_stack_restore (tree var)
 {
-  rtx sa = expand_normal (var);
+  rtx prev, sa = expand_normal (var);
 
   sa = convert_memory_address (Pmode, sa);
+
+  prev = get_last_insn ();
   emit_stack_restore (SAVE_BLOCK, sa);
+  fixup_args_size_notes (prev, get_last_insn (), 0);
 }
 \f
 /* Do the insertion of a case label into case_list.  The labels are