summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-27 04:42:09 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-27 04:42:09 +0000
commitdafa7856e7b894a472e5b317ad15b364e28a8c18 (patch)
treec6db78e17bf4c4317d841efb20887069cba63452
parent44c85df1c0e1b39e5b322f5feaca4a7ae45941cb (diff)
downloadgcc-dafa7856e7b894a472e5b317ad15b364e28a8c18.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33459 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/basic-block.h1
-rw-r--r--gcc/flow.c40
-rw-r--r--gcc/output.h1
-rw-r--r--gcc/reg-stack.c2
-rw-r--r--gcc/ssa.c4
-rw-r--r--gcc/toplev.c4
7 files changed, 31 insertions, 33 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1ca550587e6..d7d2fd589fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index ad1cc0d8da9..f8da181b76c 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -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));
diff --git a/gcc/flow.c b/gcc/flow.c
index 2fb6326280f..16537e2bcca 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -2491,32 +2491,21 @@ calculate_loop_depth (dump)
}
/* 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);
diff --git a/gcc/output.h b/gcc/output.h
index 97c6f2e71ae..e54bc3571a6 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -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. */
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 75725610dfa..5750e754f68 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -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));
diff --git a/gcc/ssa.c b/gcc/ssa.c
index 8ebb3c22883..5ce108a36cc 100644
--- 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. */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 8e021788903..dd8ea2a8e8a 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -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