OSDN Git Service

* basic-block.h (life_analysis): Declare here ...
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Apr 2000 04:42:09 +0000 (04:42 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 27 Apr 2000 04:42:09 +0000 (04:42 +0000)
        * output.h: ... not here.
        * flow.c (life_analysis): Remove nregs parameter; replace
        remove_dead_code with flags.  Remove ssa dead code check.
        Only init alias analysis if we'll use it.
        * reg-stack.c (reg_to_stack): Update life_analysis arguments.
        * ssa.c (convert_to_ssa): Likewise.
        (convert_from_ssa): Likewise.
        * toplev.c (rest_of_compilation): Likewise.

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

gcc/ChangeLog
gcc/basic-block.h
gcc/flow.c
gcc/output.h
gcc/reg-stack.c
gcc/ssa.c
gcc/toplev.c

index 1ca5505..d7d2fd5 100644 (file)
@@ -1,5 +1,17 @@
 2000-04-26  Richard Henderson  <rth@cygnus.com>
 
+       * basic-block.h (life_analysis): Declare here ...
+       * output.h: ... not here.
+       * flow.c (life_analysis): Remove nregs parameter; replace
+       remove_dead_code with flags.  Remove ssa dead code check.
+       Only init alias analysis if we'll use it.
+       * reg-stack.c (reg_to_stack): Update life_analysis arguments.
+       * ssa.c (convert_to_ssa): Likewise.
+       (convert_from_ssa): Likewise.
+       * toplev.c (rest_of_compilation): Likewise.
+
+2000-04-26  Richard Henderson  <rth@cygnus.com>
+
        * flow.c (flow_delete_block): Rename from delete_block.  Export.
        * basic-block.h (flow_delete_block): Declare.
 
index ad1cc0d..f8da181 100644 (file)
@@ -427,6 +427,7 @@ enum update_life_extent
 #define PROP_AUTOINC           32      /* Create autoinc mem references.  */
 #define PROP_FINAL             63      /* All of the above.  */
 
+extern void life_analysis      PARAMS ((rtx, FILE *, int));
 extern void update_life_info   PARAMS ((sbitmap, enum update_life_extent,
                                         int));
 extern int count_or_remove_death_notes PARAMS ((sbitmap, int));
index 2fb6326..16537e2 100644 (file)
@@ -2491,32 +2491,21 @@ calculate_loop_depth (dump)
 }
 \f
 /* Perform data flow analysis.
-   F is the first insn of the function and NREGS the number of register numbers
-   in use.  */
+   F is the first insn of the function; FLAGS is a set of PROP_* flags
+   to be used in accumulating flow info.  */
 
 void
-life_analysis (f, nregs, file, remove_dead_code)
+life_analysis (f, file, flags)
      rtx f;
-     int nregs;
      FILE *file;
-     int remove_dead_code;
+     int flags;
 {
 #ifdef ELIMINABLE_REGS
   register int i;
   static struct {int from, to; } eliminables[] = ELIMINABLE_REGS;
 #endif
-  int flags;
   sbitmap all_blocks;
 
-  /* Dead code elimination changes basic block structure and therefore
-     breaks the SSA phi representation.  Particularly, a phi node
-     can have an alternative value for each incoming block, referenced
-     by the block number.  Removing dead code can bump entire blocks
-     and therefore cause blocks to be renumbered, invalidating the
-     numbering of phi alternatives.  */
-  if (remove_dead_code && in_ssa_form)
-    abort ();
   /* Record which registers will be eliminated.  We use this in
      mark_used_regs.  */
 
@@ -2529,17 +2518,8 @@ life_analysis (f, nregs, file, remove_dead_code)
   SET_HARD_REG_BIT (elim_reg_set, FRAME_POINTER_REGNUM);
 #endif
 
-  /* We want alias analysis information for local dead store elimination.  */
-  init_alias_analysis ();
-
   if (! optimize)
-    flags = PROP_DEATH_NOTES | PROP_REG_INFO;
-  else
-    {
-      flags = PROP_FINAL;
-      if (! remove_dead_code)
-       flags &= ~(PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE);
-    }
+    flags &= PROP_DEATH_NOTES | PROP_REG_INFO;
 
   /* The post-reload life analysis have (on a global basis) the same
      registers live as was computed by reload itself.  elimination
@@ -2550,7 +2530,11 @@ life_analysis (f, nregs, file, remove_dead_code)
   if (reload_completed)
     flags &= ~PROP_REG_INFO;
 
-  max_regno = nregs;
+  /* We want alias analysis information for local dead store elimination.  */
+  if (flags & PROP_SCAN_DEAD_CODE)
+    init_alias_analysis ();
+
+  max_regno = max_reg_num ();
 
   /* Always remove no-op moves.  Do this before other processing so
      that we don't have to keep re-scanning them.  */
@@ -2582,7 +2566,9 @@ life_analysis (f, nregs, file, remove_dead_code)
 
   /* Clean up.  */
   sbitmap_free (all_blocks);
-  end_alias_analysis ();
+
+  if (flags & PROP_SCAN_DEAD_CODE)
+    end_alias_analysis ();
 
   if (file)
     dump_flow_info (file);
index 97c6f2e..e54bc35 100644 (file)
@@ -137,7 +137,6 @@ extern void cleanup_cfg                     PARAMS ((rtx));
 extern void calculate_loop_depth      PARAMS ((FILE *));
 extern void free_basic_block_vars     PARAMS ((int));
 extern void set_block_num             PARAMS ((rtx, int));
-extern void life_analysis             PARAMS ((rtx, int, FILE *, int));
 #endif
 
 /* Functions in varasm.c.  */
index 7572561..5750e75 100644 (file)
@@ -435,7 +435,7 @@ reg_to_stack (first, file)
      build the CFG and run life analysis.  */
   find_basic_blocks (first, max_reg_num (), file);
   count_or_remove_death_notes (NULL, 1);
-  life_analysis (first, max_reg_num (), file, 0);
+  life_analysis (first, file, PROP_DEATH_NOTES);
 
   /* Set up block info for each basic block.  */
   bi = (block_info) xcalloc ((n_basic_blocks + 1), sizeof (*bi));
index 8ebb3c2..5ce108a 100644 (file)
--- a/gcc/ssa.c
+++ b/gcc/ssa.c
@@ -855,7 +855,7 @@ convert_to_ssa()
   if (in_ssa_form)
     abort ();
 
-  life_analysis (get_insns (), max_reg_num (), NULL, 1);
+  life_analysis (get_insns (), NULL, PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE);
 
   /* Compute dominators.  */
   dominators = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
@@ -1812,7 +1812,7 @@ convert_from_ssa()
     
   /* We need up-to-date life information.  */
   compute_bb_for_insn (get_max_uid ());
-  life_analysis (insns, max_reg_num (), NULL, 0);
+  life_analysis (insns, NULL, PROP_KILL_DEAD_CODE | PROP_SCAN_DEAD_CODE);
 
   /* Figure out which regs in copies and phi nodes don't conflict and
      therefore can be coalesced.  */
index 8e02178..dd8ea2a 100644 (file)
@@ -3247,7 +3247,7 @@ rest_of_compilation (decl)
        cleanup_cfg (insns);
        if (optimize)
         calculate_loop_depth (rtl_dump_file);
-       life_analysis (insns, max_reg_num (), rtl_dump_file, 1);
+       life_analysis (insns, rtl_dump_file, PROP_FINAL);
        mark_constant_function ();
      });
 
@@ -3434,7 +3434,7 @@ rest_of_compilation (decl)
       TIMEVAR (flow2_time,
               {
                 cleanup_cfg (insns);
-                life_analysis (insns, max_reg_num (), rtl_dump_file, 1);
+                life_analysis (insns, rtl_dump_file, PROP_FINAL);
               });
 
       /* This is kind of heruistics.  We need to run combine_stack_adjustments