summaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2002-05-27 12:15:57 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2002-05-27 10:15:57 +0000
commit5149f0701c126f74f3cccf53b14175374fe3a7e9 (patch)
treeda9f1e46251a76c45311b1d2ca5dc31b4bb913a9 /gcc/flow.c
parentc9715013ff4d33a50893e10339c32cb88185edea (diff)
downloadgcc-5149f0701c126f74f3cccf53b14175374fe3a7e9.tar.gz
basic-block.h (PEOP_SCAN_DEAD_STORES): New.
* basic-block.h (PEOP_SCAN_DEAD_STORES): New. (PROP_FINAL): Include. * flow.c (life_analysis, update_life_info, init_propagate_block_info, mark_set_1, mark_used_rgs): Support SCAN_DEAD_STORE. From-SVN: r53920
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 1fb5a16eabb..4719dcce418 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -447,7 +447,7 @@ life_analysis (f, file, flags)
flags &= ~(PROP_REG_INFO | PROP_AUTOINC);
/* We want alias analysis information for local dead store elimination. */
- if (optimize && (flags & PROP_SCAN_DEAD_CODE))
+ if (optimize && (flags & PROP_SCAN_DEAD_STORES))
init_alias_analysis ();
/* Always remove no-op moves. Do this before other processing so
@@ -477,7 +477,7 @@ life_analysis (f, file, flags)
update_life_info (NULL, UPDATE_LIFE_GLOBAL, flags);
/* Clean up. */
- if (optimize && (flags & PROP_SCAN_DEAD_CODE))
+ if (optimize && (flags & PROP_SCAN_DEAD_STORES))
end_alias_analysis ();
if (file)
@@ -646,6 +646,7 @@ update_life_info (blocks, extent, prop_flags)
calculate_global_regs_live (blocks, blocks,
prop_flags & (PROP_SCAN_DEAD_CODE
+ | PROP_SCAN_DEAD_STORES
| PROP_ALLOW_CFG_CHANGES));
if ((prop_flags & (PROP_KILL_DEAD_CODE | PROP_ALLOW_CFG_CHANGES))
@@ -659,6 +660,7 @@ update_life_info (blocks, extent, prop_flags)
COPY_REG_SET (tmp, bb->global_live_at_end);
changed |= propagate_block (bb, tmp, NULL, NULL,
prop_flags & (PROP_SCAN_DEAD_CODE
+ | PROP_SCAN_DEAD_STORES
| PROP_KILL_DEAD_CODE));
}
@@ -667,7 +669,8 @@ update_life_info (blocks, extent, prop_flags)
removing dead code can affect global register liveness, which
is supposed to be finalized for this call after this loop. */
stabilized_prop_flags
- &= ~(PROP_SCAN_DEAD_CODE | PROP_KILL_DEAD_CODE);
+ &= ~(PROP_SCAN_DEAD_CODE | PROP_SCAN_DEAD_STORES
+ | PROP_KILL_DEAD_CODE);
if (! changed)
break;
@@ -1922,7 +1925,7 @@ init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
&& ! (TREE_CODE (TREE_TYPE (current_function_decl)) == FUNCTION_TYPE
&& (TYPE_RETURNS_STACK_DEPRESSED
(TREE_TYPE (current_function_decl))))
- && (flags & PROP_SCAN_DEAD_CODE)
+ && (flags & PROP_SCAN_DEAD_STORES)
&& (bb->succ == NULL
|| (bb->succ->succ_next == NULL
&& bb->succ->dest == EXIT_BLOCK_PTR
@@ -2609,7 +2612,7 @@ mark_set_1 (pbi, code, reg, cond, insn, flags)
/* If this set is a MEM, then it kills any aliased writes.
If this set is a REG, then it kills any MEMs which use the reg. */
- if (optimize && (flags & PROP_SCAN_DEAD_CODE))
+ if (optimize && (flags & PROP_SCAN_DEAD_STORES))
{
if (GET_CODE (reg) == REG)
invalidate_mems_from_set (pbi, reg);
@@ -3712,7 +3715,7 @@ mark_used_regs (pbi, x, cond, insn)
case MEM:
/* Don't bother watching stores to mems if this is not the
final pass. We'll not be deleting dead stores this round. */
- if (optimize && (flags & PROP_SCAN_DEAD_CODE))
+ if (optimize && (flags & PROP_SCAN_DEAD_STORES))
{
/* Invalidate the data for the last MEM stored, but only if MEM is
something that can be stored into. */