OSDN Git Service

* function.h (struct function) <x_tail_recursion_reentry>:
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Mar 2006 21:22:55 +0000 (21:22 +0000)
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Mar 2006 21:22:55 +0000 (21:22 +0000)
Rename to x_stack_check_probe_note.
(tail_recursion_reentry): Rename to stack_check_probe_note.
* function.c: Replace tail_recursion_reentry with
stack_check_probe_note everywhere.
(expand_function_start): Only emit a note for
stack_check_probe_note with -fstack-protect.
* stmt.c (expand_case): Don't emit NOTE_INSN_DELETED notes.

* emit-rtl.c (remove_unnecessary_notes): Remove.
(pass_remove_unnecessary_notes): Remove.
* rtl.h (remove_unnecessary_notes): Remove prototype.
* final.c (final_start_function): Don't call remove_unnecessary_notes.
* tree-pass.h (pass_remove_unnecessary_notes): Remove.
* passes.c (pass_remove_unnecessary_notes): Don't run it.

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

gcc/ChangeLog
gcc/emit-rtl.c
gcc/final.c
gcc/function.c
gcc/function.h
gcc/passes.c
gcc/rtl.h
gcc/stmt.c
gcc/tree-pass.h

index 157a550..613fb84 100644 (file)
@@ -1,3 +1,21 @@
+2006-03-20  Steven Bosscher  <stevenb.gcc@gmail.com>
+
+       * function.h (struct function) <x_tail_recursion_reentry>:
+       Rename to x_stack_check_probe_note.
+       (tail_recursion_reentry): Rename to stack_check_probe_note.
+       * function.c: Replace tail_recursion_reentry with
+       stack_check_probe_note everywhere.
+       (expand_function_start): Only emit a note for
+       stack_check_probe_note with -fstack-protect.
+       * stmt.c (expand_case): Don't emit NOTE_INSN_DELETED notes.
+
+       * emit-rtl.c (remove_unnecessary_notes): Remove.
+       (pass_remove_unnecessary_notes): Remove.
+       * rtl.h (remove_unnecessary_notes): Remove prototype.
+       * final.c (final_start_function): Don't call remove_unnecessary_notes.
+       * tree-pass.h (pass_remove_unnecessary_notes): Remove.
+       * passes.c (pass_remove_unnecessary_notes): Don't run it.
+
 2006-03-20  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR tree-opt/26629
index 06721c6..eabf88f 100644 (file)
@@ -3677,80 +3677,6 @@ find_line_note (rtx insn)
   return insn;
 }
 
-/* Remove unnecessary notes from the instruction stream.  */
-
-unsigned int
-remove_unnecessary_notes (void)
-{
-  rtx eh_stack = NULL_RTX;
-  rtx insn;
-  rtx next;
-  rtx tmp;
-
-  /* We must not remove the first instruction in the function because
-     the compiler depends on the first instruction being a note.  */
-  for (insn = NEXT_INSN (get_insns ()); insn; insn = next)
-    {
-      /* Remember what's next.  */
-      next = NEXT_INSN (insn);
-
-      /* We're only interested in notes.  */
-      if (!NOTE_P (insn))
-       continue;
-
-      switch (NOTE_LINE_NUMBER (insn))
-       {
-       case NOTE_INSN_DELETED:
-         remove_insn (insn);
-         break;
-
-       case NOTE_INSN_EH_REGION_BEG:
-         eh_stack = alloc_INSN_LIST (insn, eh_stack);
-         break;
-
-       case NOTE_INSN_EH_REGION_END:
-         /* Too many end notes.  */
-         gcc_assert (eh_stack);
-         /* Mismatched nesting.  */
-         gcc_assert (NOTE_EH_HANDLER (XEXP (eh_stack, 0))
-                     == NOTE_EH_HANDLER (insn));
-         tmp = eh_stack;
-         eh_stack = XEXP (eh_stack, 1);
-         free_INSN_LIST_node (tmp);
-         break;
-
-       case NOTE_INSN_BLOCK_BEG:
-       case NOTE_INSN_BLOCK_END:
-          /* BLOCK_END and BLOCK_BEG notes only exist in the `final' pass.  */
-          gcc_unreachable ();
-
-       default:
-         break;
-       }
-    }
-
-  /* Too many EH_REGION_BEG notes.  */
-  gcc_assert (!eh_stack);
-  return 0;
-}
-
-struct tree_opt_pass pass_remove_unnecessary_notes =
-{
-  "eunotes",                            /* name */ 
-  NULL,                                        /* gate */
-  remove_unnecessary_notes,             /* execute */
-  NULL,                                 /* sub */
-  NULL,                                 /* next */
-  0,                                    /* static_pass_number */
-  0,                                   /* tv_id */ 
-  0,                                   /* properties_required */
-  0,                                    /* properties_provided */
-  0,                                   /* properties_destroyed */
-  0,                                    /* todo_flags_start */
-  TODO_dump_func,                      /* todo_flags_finish */
-  0                                     /* letter */ 
-};
-
 \f
 /* Emit insn(s) of given code and pattern
    at a specified place within the doubly-linked list.
index f233f12..4a5fd18 100644 (file)
@@ -1417,7 +1417,6 @@ final_start_function (rtx first ATTRIBUTE_UNUSED, FILE *file,
      function.  */
   if (write_symbols)
     {
-      remove_unnecessary_notes ();
       reemit_insn_block_notes ();
       number_blocks (current_function_decl);
       /* We never actually put out begin/end notes for the top-level
index 988d613..2e9aec0 100644 (file)
@@ -331,7 +331,7 @@ free_after_compilation (struct function *f)
   f->x_return_label = NULL;
   f->x_naked_return_label = NULL;
   f->x_stack_slot_list = NULL;
-  f->x_tail_recursion_reentry = NULL;
+  f->x_stack_check_probe_note = NULL;
   f->x_arg_pointer_save_area = NULL;
   f->x_parm_birth_insn = NULL;
   f->original_arg_vector = NULL;
@@ -4224,8 +4224,8 @@ expand_function_start (tree subr)
      as opposed to parm setup.  */
   emit_note (NOTE_INSN_FUNCTION_BEG);
 
-  if (!NOTE_P (get_last_insn ()))
-    emit_note (NOTE_INSN_DELETED);
+  gcc_assert (NOTE_P (get_last_insn ()));
+
   parm_birth_insn = get_last_insn ();
 
   if (current_function_profile)
@@ -4235,10 +4235,10 @@ expand_function_start (tree subr)
 #endif
     }
 
-  /* After the display initializations is where the tail-recursion label
-     should go, if we end up needing one.   Ensure we have a NOTE here
-     since some things (like trampolines) get placed before this.  */
-  tail_recursion_reentry = emit_note (NOTE_INSN_DELETED);
+  /* After the display initializations is where the stack checking
+     probe should go.  */
+  if(flag_stack_check)
+    stack_check_probe_note = emit_note (NOTE_INSN_DELETED);
 
   /* Make sure there is a line number after the function entry setup code.  */
   force_next_line_note ();
@@ -4364,7 +4364,7 @@ expand_function_end (void)
                               GEN_INT (STACK_CHECK_MAX_FRAME_SIZE));
            seq = get_insns ();
            end_sequence ();
-           emit_insn_before (seq, tail_recursion_reentry);
+           emit_insn_before (seq, stack_check_probe_note);
            break;
          }
     }
index 1b2484e..4a60eb2 100644 (file)
@@ -239,7 +239,7 @@ struct function GTY(())
   rtx x_stack_slot_list;
 
   /* Place after which to insert the tail_recursion_label if we need one.  */
-  rtx x_tail_recursion_reentry;
+  rtx x_stack_check_probe_note;
 
   /* Location at which to save the argument pointer if it will need to be
      referenced.  There are two cases where this is done: if nonlocal gotos
@@ -503,7 +503,7 @@ extern int trampolines_created;
 #define stack_slot_list (cfun->x_stack_slot_list)
 #define parm_birth_insn (cfun->x_parm_birth_insn)
 #define frame_offset (cfun->x_frame_offset)
-#define tail_recursion_reentry (cfun->x_tail_recursion_reentry)
+#define stack_check_probe_note (cfun->x_stack_check_probe_note)
 #define arg_pointer_save_area (cfun->x_arg_pointer_save_area)
 #define used_temp_slots (cfun->x_used_temp_slots)
 #define avail_temp_slots (cfun->x_avail_temp_slots)
index 85bfefa..4dd4ac8 100644 (file)
@@ -622,7 +622,6 @@ init_optimization_passes (void)
   *p = NULL;
   
   p = &pass_rest_of_compilation.sub;
-  NEXT_PASS (pass_remove_unnecessary_notes);
   NEXT_PASS (pass_init_function);
   NEXT_PASS (pass_jump);
   NEXT_PASS (pass_insn_locators_initialize);
index cad48cb..989bea8 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2065,7 +2065,6 @@ extern void remove_insn (rtx);
 extern void emit_insn_after_with_line_notes (rtx, rtx, rtx);
 extern rtx emit (rtx);
 extern void renumber_insns (void);
-extern unsigned int remove_unnecessary_notes (void);
 extern rtx delete_insn (rtx);
 extern rtx entry_of_function (void);
 extern void delete_insn_chain (rtx, rtx);
index a3e3db3..be3e876 100644 (file)
@@ -2364,19 +2364,9 @@ expand_case (tree exp)
        }
 
 
-      /* Make sure start points to something that won't need any
-        transformation before the end of this function.  */
-      start = get_last_insn ();
-      if (! NOTE_P (start))
-       {
-         emit_note (NOTE_INSN_DELETED);
-         start = get_last_insn ();
-       }
-
+      before_case = start = get_last_insn ();
       default_label = label_rtx (default_label_decl);
 
-      before_case = get_last_insn ();
-
       /* Get upper and lower bounds of case values.  */
 
       uniq = 0;
index 7f05d3c..5e0b923 100644 (file)
@@ -322,7 +322,6 @@ extern struct tree_opt_pass pass_free_datastructures;
 extern struct tree_opt_pass pass_init_datastructures;
 extern struct tree_opt_pass pass_fixup_cfg;
 
-extern struct tree_opt_pass pass_remove_unnecessary_notes;
 extern struct tree_opt_pass pass_init_function;
 extern struct tree_opt_pass pass_jump;
 extern struct tree_opt_pass pass_insn_locators_initialize;