From: rth Date: Thu, 27 Apr 2000 04:42:09 +0000 (+0000) Subject: * basic-block.h (life_analysis): Declare here ... X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=dafa7856e7b894a472e5b317ad15b364e28a8c18 * 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 --- 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 + * 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 + * 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