basic-block.h (life_analysis, [...]): Update prototypes.
authorSteven Bosscher <steven@gcc.gnu.org>
Sat, 15 May 2004 09:39:30 +0000 (09:39 +0000)
committerSteven Bosscher <steven@gcc.gnu.org>
Sat, 15 May 2004 09:39:30 +0000 (09:39 +0000)
* basic-block.h (life_analysis, delete_noop_moves):
Update prototypes.
* bt-load.c (branch_target_load_optimize): Don't take the
insns stream as an argument.  Update the life_analysis calls.
* combine.c (combine_instructions): Update delete_noop_moves
calls.
* flow.c (notice_stack_pointer_modification): Don't take the
insns stream as an argument.  Work on the flow graph.
(life_analysis): Likewise.
(delete_noop_moves): Likewise.
* passes.c (rest_of_handle_stack_regs): Update reg_to_stack call.
(rest_of_handle_life): Update life_analysis call.
(rest_of_compilation): Likewise, and also update
branch_target_load_optimize call.
* ra.c (reg_alloc): Update life_analysis call.
* reg-stack.c (reg_to_stack): Likewise.  Also, don't take
the insns stream as an argument.
* regrename.c (copyprop_hardreg_forward): Update delete_noop_moves
call.
* rtl.c (branch_target_load_optimize, reg_to_stack): Update
prototypes.
* value-profile.c (branch_prob): Update life_analysis call.
* web.c (web_main): Work on the CFG, not on the insns stream.

* config/ip2k/ip2k.c (ip2k_reorg): Update life_analysis calls.
* config/m68hc11/m68hc11.c (m68hc11_reorg): Likewise.
* config/sh/sh.c (sh_output_mi_thunk): Likewise.

From-SVN: r81873

16 files changed:
gcc/ChangeLog
gcc/basic-block.h
gcc/bt-load.c
gcc/combine.c
gcc/config/ip2k/ip2k.c
gcc/config/m68hc11/m68hc11.c
gcc/config/sh/sh.c
gcc/flow.c
gcc/passes.c
gcc/ra.c
gcc/reg-stack.c
gcc/regrename.c
gcc/rtl.h
gcc/tree-tailcall.c
gcc/value-prof.c
gcc/web.c

index 0365e82ade30c390d614263b0d34c15f461d8a96..b16217904c435d4045daee5344dd85e9e7d8ed17 100644 (file)
@@ -1,3 +1,33 @@
+2004-05-15  Steven Bosscher  <stevenb@suse.de>
+
+       * basic-block.h (life_analysis, delete_noop_moves):
+       Update prototypes.
+       * bt-load.c (branch_target_load_optimize): Don't take the
+       insns stream as an argument.  Update the life_analysis calls.
+       * combine.c (combine_instructions): Update delete_noop_moves
+       calls.
+       * flow.c (notice_stack_pointer_modification): Don't take the
+       insns stream as an argument.  Work on the flow graph.
+       (life_analysis): Likewise.
+       (delete_noop_moves): Likewise.
+       * passes.c (rest_of_handle_stack_regs): Update reg_to_stack call.
+       (rest_of_handle_life): Update life_analysis call.
+       (rest_of_compilation): Likewise, and also update
+       branch_target_load_optimize call.
+       * ra.c (reg_alloc): Update life_analysis call.
+       * reg-stack.c (reg_to_stack): Likewise.  Also, don't take
+       the insns stream as an argument.
+       * regrename.c (copyprop_hardreg_forward): Update delete_noop_moves
+       call.
+       * rtl.c (branch_target_load_optimize, reg_to_stack): Update
+       prototypes.
+       * value-profile.c (branch_prob): Update life_analysis call.
+       * web.c (web_main): Work on the CFG, not on the insns stream.
+
+       * config/ip2k/ip2k.c (ip2k_reorg): Update life_analysis calls.
+       * config/m68hc11/m68hc11.c (m68hc11_reorg): Likewise.
+       * config/sh/sh.c (sh_output_mi_thunk): Likewise.
+
 2004-05-15  Joseph S. Myers  <jsm@polyomino.org.uk>
 
        PR c/15444
@@ -21,7 +51,7 @@
 
        * tree-ssa-dom.c (redirect_edges_and_update_ssa_graph): Don't even
        bother marking bypassed virtuals for out-of-ssa.  Instead merge
-        bypassed virtuals into vars_to_rename just before into-ssa pass.
+       bypassed virtuals into vars_to_rename just before into-ssa pass.
 
        * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize
        so that it picks up more opportunities to eliminate ABS expressions
 
 2004-03-24  David Edelsohn  <edelsohn@gnu.org>
 
-       * doc/invoke.texi (-frename-registers: Add enabled at -O3.
+       * doc/invoke.texi (-frename-registers): Add enabled at -O3.
        (-fprofile-values): Add enabled with profile-{generate,use}.
        (-fvpt): Same.
        (-ftracer): Add enabled with profile-use.
index c64b7b0d556844f59be3881419f1adf6d7241e95..f45129b591f431235e7efc41968042b74e0771ca 100644 (file)
@@ -564,7 +564,7 @@ enum update_life_extent
                                           insns.  */
 #define CLEANUP_CFGLAYOUT      256     /* Do cleanup in cfglayout mode.  */
 #define CLEANUP_LOG_LINKS      512     /* Update log links.  */
-extern void life_analysis (rtx, FILE *, int);
+extern void life_analysis (FILE *, int);
 extern int update_life_info (sbitmap, enum update_life_extent, int);
 extern int update_life_info_in_dirty_blocks (enum update_life_extent, int);
 extern int count_or_remove_death_notes (sbitmap, int);
@@ -618,7 +618,7 @@ extern void unlink_block (basic_block);
 extern void compact_blocks (void);
 extern basic_block alloc_block (void);
 extern void find_unreachable_blocks (void);
-extern int delete_noop_moves (rtx);
+extern int delete_noop_moves (void);
 extern basic_block force_nonfallthru (edge);
 extern rtx block_label (basic_block);
 extern bool forwarder_block_p (basic_block);
index 0008f3c7fe839078d3ab89015c630f96adde265e..7ab8c18642ebbccedd3965247ebf001c49a2ed7a 100644 (file)
@@ -1411,7 +1411,7 @@ migrate_btr_defs (enum reg_class btr_class, int allow_callee_save)
 }
 
 void
-branch_target_load_optimize (rtx insns, bool after_prologue_epilogue_gen)
+branch_target_load_optimize (bool after_prologue_epilogue_gen)
 {
   enum reg_class class = targetm.branch_target_register_class ();
   if (class != NO_REGS)
@@ -1429,7 +1429,7 @@ branch_target_load_optimize (rtx insns, bool after_prologue_epilogue_gen)
       cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
 #endif
 
-      life_analysis (insns, NULL, 0);
+      life_analysis (NULL, 0);
 
       /* Dominator info is also needed for migrate_btr_def.  */
       calculate_dominance_info (CDI_DOMINATORS);
index 2abd3d86c5c380709f2b0e2343bcf0ba7a5bd32f..5a1f89bd83da7b53d3d62ab503a4582073032555 100644 (file)
@@ -750,7 +750,7 @@ combine_instructions (rtx f, unsigned int nregs)
   EXECUTE_IF_SET_IN_SBITMAP (refresh_blocks, 0, i,
                             BASIC_BLOCK (i)->flags |= BB_DIRTY);
   new_direct_jump_p |= purge_all_dead_edges (0);
-  delete_noop_moves (f);
+  delete_noop_moves ();
 
   update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
                                    PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE
index 05ccb614c4fbeabd1c08a308e1b3f7310140909d..452737ec009703d7ce1cfc91467b5a1e6c2316d7 100644 (file)
@@ -5315,7 +5315,7 @@ ip2k_reorg (void)
      things in such a way that another go will win.  Do so now!  */
   reload_cse_regs (first_insn);
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_REG_INFO | PROP_DEATH_NOTES);
+  life_analysis (0, PROP_REG_INFO | PROP_DEATH_NOTES);
   
   /* Look for where absurd things are happening with DP.  */
   mdr_try_dp_reload_elim (first_insn);
@@ -5327,7 +5327,7 @@ ip2k_reorg (void)
 
   reload_cse_regs (first_insn);
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_REG_INFO | PROP_DEATH_NOTES);
+  life_analysis (0, PROP_REG_INFO | PROP_DEATH_NOTES);
   if (flag_peephole2)
     peephole2_optimize (NULL);
 
@@ -5354,7 +5354,7 @@ ip2k_reorg (void)
   mdr_try_move_pushes (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
 
   mdr_try_propagate_move (first_insn);
   mdr_resequence_xy_yx (first_insn);
@@ -5368,14 +5368,14 @@ ip2k_reorg (void)
 
   reload_cse_regs (first_insn);
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
   if (flag_peephole2)
     peephole2_optimize (NULL);
 
   mdr_try_propagate_move (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
 
   ip2k_reorg_split_simode = 1;
   split_all_insns (0);
@@ -5386,14 +5386,14 @@ ip2k_reorg (void)
 
   reload_cse_regs (first_insn);
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
   if (flag_peephole2)
     peephole2_optimize (NULL);
 
   mdr_try_propagate_move (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
 
   ip2k_reorg_split_himode = 1;
   ip2k_reorg_merge_qimode = 1;
@@ -5411,21 +5411,21 @@ ip2k_reorg (void)
   /* Call to  jump_optimize (...) was here, but now I removed it.  */
   
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
   if (flag_peephole2)
     peephole2_optimize (NULL);
 
   mdr_try_propagate_move (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
   mdr_try_remove_redundant_insns (first_insn);
 
   mdr_try_propagate_clr (first_insn);
   mdr_try_propagate_move (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
 
   ip2k_reorg_split_qimode = 1;
   split_all_insns (0);
@@ -5434,7 +5434,7 @@ ip2k_reorg (void)
   mdr_try_propagate_move (first_insn);
 
   find_basic_blocks (first_insn, max_reg_num (), 0);
-  life_analysis (first_insn, 0, PROP_FINAL);
+  life_analysis (0, PROP_FINAL);
 #endif
 }
 
index 45ef1bcd3b060bbfc6f8e2ffc02fa4d48029e012..dadbd9a08fd2be24cf3e0580f83035f9d3b9ebbf 100644 (file)
@@ -5272,7 +5272,7 @@ m68hc11_reorg (void)
             }
         }
 
-      life_analysis (first, 0, PROP_REG_INFO | PROP_DEATH_NOTES);
+      life_analysis (0, PROP_REG_INFO | PROP_DEATH_NOTES);
     }
 
   z_replacement_completed = 2;
index 30526c2e69455cf41c4f6bf96973715ad1a6af7a..128954316cac777924294907478bac130aa529ac 100644 (file)
@@ -9526,7 +9526,7 @@ sh_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
   if (optimize > 0 && flag_schedule_insns_after_reload)
     {
       find_basic_blocks (insns, max_reg_num (), dump_file);
-      life_analysis (insns, dump_file, PROP_FINAL);
+      life_analysis (dump_file, PROP_FINAL);
 
       split_all_insns (1);
 
index fa47f2d24a03c55f9c4229514b87acfa948f014f..818f8eb0043947eba63bb3347e5c8ae816a58223 100644 (file)
@@ -291,7 +291,7 @@ static int verify_wide_reg_1 (rtx *, void *);
 static void verify_wide_reg (int, basic_block);
 static void verify_local_live_at_start (regset, basic_block);
 static void notice_stack_pointer_modification_1 (rtx, rtx, void *);
-static void notice_stack_pointer_modification (rtx);
+static void notice_stack_pointer_modification (void);
 static void mark_reg (rtx, void *);
 static void mark_regs_live_at_end (regset);
 static void calculate_global_regs_live (sbitmap, sbitmap, int);
@@ -351,12 +351,11 @@ first_insn_after_basic_block_note (basic_block block)
   return NEXT_INSN (insn);
 }
 \f
-/* Perform data flow analysis.
-   F is the first insn of the function; FLAGS is a set of PROP_* flags
-   to be used in accumulating flow info.  */
+/* Perform data flow analysis for the whole control flow graph.
+   FLAGS is a set of PROP_* flags to be used in accumulating flow info.  */
 
 void
-life_analysis (rtx f, FILE *file, int flags)
+life_analysis (FILE *file, int flags)
 {
 #ifdef ELIMINABLE_REGS
   int i;
@@ -403,13 +402,13 @@ life_analysis (rtx f, FILE *file, int flags)
 
   /* Always remove no-op moves.  Do this before other processing so
      that we don't have to keep re-scanning them.  */
-  delete_noop_moves (f);
+  delete_noop_moves ();
 
   /* Some targets can emit simpler epilogues if they know that sp was
      not ever modified during the function.  After reload, of course,
      we've already emitted the epilogue so there's no sense searching.  */
   if (! reload_completed)
-    notice_stack_pointer_modification (f);
+    notice_stack_pointer_modification ();
 
   /* Allocate and zero out data structures that will record the
      data from lifetime analysis.  */
@@ -782,7 +781,7 @@ free_basic_block_vars (void)
 /* Delete any insns that copy a register to itself.  */
 
 int
-delete_noop_moves (rtx f ATTRIBUTE_UNUSED)
+delete_noop_moves (void)
 {
   rtx insn, next;
   basic_block bb;
@@ -866,8 +865,9 @@ notice_stack_pointer_modification_1 (rtx x, rtx pat ATTRIBUTE_UNUSED,
 }
 
 static void
-notice_stack_pointer_modification (rtx f)
+notice_stack_pointer_modification (void)
 {
+  basic_block bb;
   rtx insn;
 
   /* Assume that the stack pointer is unchanging if alloca hasn't
@@ -876,17 +876,19 @@ notice_stack_pointer_modification (rtx f)
   if (! current_function_sp_is_unchanging)
     return;
 
-  for (insn = f; insn; insn = NEXT_INSN (insn))
-    {
-      if (INSN_P (insn))
-       {
-         /* Check if insn modifies the stack pointer.  */
-         note_stores (PATTERN (insn), notice_stack_pointer_modification_1,
-                      NULL);
-         if (! current_function_sp_is_unchanging)
-           return;
-       }
-    }
+  FOR_EACH_BB (bb)
+    FOR_BB_INSNS (bb, insn)
+      {
+       if (INSN_P (insn))
+         {
+           /* Check if insn modifies the stack pointer.  */
+           note_stores (PATTERN (insn),
+                        notice_stack_pointer_modification_1,
+                        NULL);
+           if (! current_function_sp_is_unchanging)
+             return;
+         }
+      }
 }
 
 /* Mark a register in SET.  Hard registers in large modes get all
index 5c8e5a6fd0f13e773fdd9de70bc4e520a2519799..379df57415f8b9a8cf4f57a20d731fea5d93392c 100644 (file)
@@ -519,7 +519,7 @@ rest_of_handle_stack_regs (tree decl, rtx insns)
   timevar_push (TV_REG_STACK);
   open_dump_file (DFI_stack, decl);
 
-  if (reg_to_stack (insns, dump_file) && optimize)
+  if (reg_to_stack (dump_file) && optimize)
     {
       if (cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK
                       | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0))
@@ -1044,7 +1044,7 @@ rest_of_handle_life (tree decl, rtx insns)
 #ifdef ENABLE_CHECKING
   verify_flow_info ();
 #endif
-  life_analysis (insns, dump_file, PROP_FINAL);
+  life_analysis (dump_file, PROP_FINAL);
   if (optimize)
     cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0) | CLEANUP_UPDATE_LIFE
                 | CLEANUP_LOG_LINKS
@@ -1696,7 +1696,7 @@ rest_of_compilation (tree decl)
       {
        open_dump_file (DFI_branch_target_load, decl);
 
-       branch_target_load_optimize (insns, false);
+       branch_target_load_optimize (/*after_prologue_epilogue_gen=*/false);
 
        close_dump_file (DFI_branch_target_load, print_rtl_with_bb, insns);
 
@@ -1715,7 +1715,7 @@ rest_of_compilation (tree decl)
 
   if (optimize)
     {
-      life_analysis (insns, dump_file, PROP_POSTRELOAD);
+      life_analysis (dump_file, PROP_POSTRELOAD);
       cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE
                   | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0));
 
@@ -1785,7 +1785,7 @@ rest_of_compilation (tree decl)
 
       open_dump_file (DFI_branch_target_load, decl);
 
-      branch_target_load_optimize (insns, true);
+      branch_target_load_optimize (/*after_prologue_epilogue_gen=*/true);
 
       close_dump_file (DFI_branch_target_load, print_rtl_with_bb, insns);
 
index 773d79a6a7f2a4448e0498093708d9541ee81bd3..782d8a5df7570e5e8243b6730ea6bbb88dfb0a54 100644 (file)
--- a/gcc/ra.c
+++ b/gcc/ra.c
@@ -856,7 +856,7 @@ reg_alloc (void)
   /* Cleanup the flow graph.  */
   if ((debug_new_regalloc & DUMP_LAST_FLOW) == 0)
     dump_file = NULL;
-  life_analysis (get_insns (), dump_file,
+  life_analysis (dump_file,
                 PROP_DEATH_NOTES | PROP_LOG_LINKS  | PROP_REG_INFO);
   cleanup_cfg (CLEANUP_EXPENSIVE);
   recompute_reg_usage (get_insns (), TRUE);
index 8314b21ce3570814091e38d6e4a6b4d34246e288..add718351746857cdb3330d96826b992edba3872 100644 (file)
@@ -399,8 +399,7 @@ pop_stack (stack regstack, int regno)
 }
 \f
 /* Convert register usage from "flat" register file usage to a "stack
-   register file.  FIRST is the first insn in the function, FILE is the
-   dump file, if used.
+   register file.  FILE is the dump file, if used.
 
    Construct a CFG and run life analysis.  Then convert each insn one
    by one.  Run a last cleanup_cfg pass, if optimizing, to eliminate
@@ -408,7 +407,7 @@ pop_stack (stack regstack, int regno)
    the edges.  */
 
 bool
-reg_to_stack (rtx first, FILE *file)
+reg_to_stack (FILE *file)
 {
   basic_block bb;
   int i;
@@ -434,7 +433,7 @@ reg_to_stack (rtx first, FILE *file)
          && flag_schedule_insns_after_reload))
     {
       count_or_remove_death_notes (NULL, 1);
-      life_analysis (first, file, PROP_DEATH_NOTES);
+      life_analysis (file, PROP_DEATH_NOTES);
     }
   mark_dfs_back_edges ();
 
index 0b682886f4fb9f96ed34082494ef1cb2fdf64096..c4c4e709bb6ea67185f4f0c4012b41bf35862657 100644 (file)
@@ -1763,7 +1763,7 @@ copyprop_hardreg_forward (void)
       /* ??? Irritatingly, delete_noop_moves does not take a set of blocks
         to scan, so we have to do a life update with no initial set of
         blocks Just In Case.  */
-      delete_noop_moves (get_insns ());
+      delete_noop_moves ();
       update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES,
                        PROP_DEATH_NOTES
                        | PROP_SCAN_DEAD_CODE
index 1041d020e1ab1d589a832546d3866ea231095d40..89f66836773d14a78c10d05e57a82835ca06beae 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2238,7 +2238,7 @@ extern void init_loop (void);
 #ifdef BUFSIZ
 extern void loop_optimize (rtx, FILE *, int);
 #endif
-extern void branch_target_load_optimize (rtx, bool);
+extern void branch_target_load_optimize (bool);
 
 /* In function.c */
 extern void reposition_prologue_and_epilogue_notes (rtx);
@@ -2339,7 +2339,7 @@ extern int local_alloc (void);
 
 /* In reg-stack.c */
 #ifdef BUFSIZ
-extern bool reg_to_stack (rtx, FILE *);
+extern bool reg_to_stack (FILE *);
 #endif
 
 /* In calls.c */
index 9321c93a5415db17e5b0dc563b04ab170113c356..a140d41e651d067974e25ac1ed5dbb4791b9e6a4 100644 (file)
@@ -72,7 +72,7 @@ Boston, MA 02111-1307, USA.  */
    omit the accumulator.
 
    There are three cases how the function may exit.  The first one is
-   handled in adjust_return_value, the other two in adjust_accumulator_values
+   handled in adjust_return_value, the later two in adjust_accumulator_values
    (the second case is actually a special case of the third one and we
    present it separately just for clarity):
 
index 66b5c6589bd62ac4880d54b295ade22698e7c4a7..514b98f5190cf613a6ac617f22dfc983449e67e1 100644 (file)
@@ -182,7 +182,7 @@ rtl_find_values_to_profile (unsigned *n_values, struct histogram_value **values)
   rtx insn;
   unsigned i;
 
-  life_analysis (get_insns (), NULL, PROP_DEATH_NOTES);
+  life_analysis (NULL, PROP_DEATH_NOTES);
 
   *n_values = 0;
   *values = NULL;
index af006bfaf5053cadeb4572b383e22076bddfd505..11f2caa6cd2e4983e57c4495fff06b8d334fc428 100644 (file)
--- a/gcc/web.c
+++ b/gcc/web.c
@@ -262,6 +262,7 @@ web_main (void)
   int max = max_reg_num ();
   char *used;
   char *use_addressof;
+  basic_block bb;
   rtx insn;
 
   df = df_init ();
@@ -280,9 +281,12 @@ web_main (void)
     union_defs (df, df->uses[i], def_entry, use_entry);
 
   /* We can not safely rename registers whose address is taken.  */
-  for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
-    if (INSN_P (insn))
-      for_each_rtx (&PATTERN (insn), mark_addressof, use_addressof);
+  FOR_EACH_BB (bb)
+    FOR_BB_INSNS (bb, insn)
+      {
+       if (INSN_P (insn))
+         for_each_rtx (&PATTERN (insn), mark_addressof, use_addressof);
+      }
 
   /* Update the instruction stream, allocating new registers for split pseudos
      in progress.  */