diff options
author | Diego Novillo <dnovillo@redhat.com> | 2004-12-20 18:18:37 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@gcc.gnu.org> | 2004-12-20 13:18:37 -0500 |
commit | 90e34bd6374760bfdd0a8807e8323eaa50a749f1 (patch) | |
tree | 4f20301c6201fe9b132e07d84f5911f4816afa44 /gcc/tree-ssa-alias.c | |
parent | c20a99d0c57237b78ceb267b6f42d20278b7b7ea (diff) | |
download | gcc-90e34bd6374760bfdd0a8807e8323eaa50a749f1.zip gcc-90e34bd6374760bfdd0a8807e8323eaa50a749f1.tar.gz gcc-90e34bd6374760bfdd0a8807e8323eaa50a749f1.tar.bz2 |
re PR tree-optimization/19080 (ICE while compiling linux kernel)
PR tree-optimization/19080
Merge from tree-cleanup-branch
* tree-flow-inline.h (clear_call_clobbered): New function.
* tree-ssa-alias.c (init_alias_info): Call it.
testsuite/ChangeLog
PR tree-optimization/19080
* gcc.c-torture/compile/pr19080.c: New test.
From-SVN: r92423
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index ecdd7f4..92a203c 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -437,7 +437,6 @@ init_alias_info (void) if (aliases_computed_p) { unsigned i; - bitmap_iterator bi; basic_block bb; /* Make sure that every statement has a valid set of operands. @@ -453,19 +452,6 @@ init_alias_info (void) get_stmt_operands (bsi_stmt (si)); } - /* Clear the call-clobbered set. We are going to re-discover - call-clobbered variables. */ - EXECUTE_IF_SET_IN_BITMAP (call_clobbered_vars, 0, i, bi) - { - tree var = referenced_var (i); - - /* Variables that are intrinsically call-clobbered (globals, - local statics, etc) will not be marked by the aliasing - code, so we can't remove them from CALL_CLOBBERED_VARS. */ - if (!is_call_clobbered (var)) - bitmap_clear_bit (call_clobbered_vars, var_ann (var)->uid); - } - /* Similarly, clear the set of addressable variables. In this case, we can just clear the set because addressability is only computed here. */ @@ -474,9 +460,19 @@ init_alias_info (void) /* Clear flow-insensitive alias information from each symbol. */ for (i = 0; i < num_referenced_vars; i++) { - var_ann_t ann = var_ann (referenced_var (i)); + tree var = referenced_var (i); + var_ann_t ann = var_ann (var); + ann->is_alias_tag = 0; ann->may_aliases = NULL; + + /* Since we are about to re-discover call-clobbered + variables, clear the call-clobbered flag. Variables that + are intrinsically call-clobbered (globals, local statics, + etc) will not be marked by the aliasing code, so we can't + remove them from CALL_CLOBBERED_VARS. */ + if (ann->mem_tag_kind != NOT_A_TAG || !is_global_var (var)) + clear_call_clobbered (var); } /* Clear flow-sensitive points-to information from each SSA name. */ |