diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-12-30 12:02:09 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-12-30 12:02:09 +0000 |
commit | 58c50d3ffedc70844cc2d28a75c369eb9e95e35b (patch) | |
tree | a1ec2dcdcfc29c5e53fc7abed01106497d065f6b /gcc/tree-ssa-alias.c | |
parent | 3631101ef276e2da01f4f6e12e38d568cc24e9a9 (diff) | |
download | gcc-58c50d3ffedc70844cc2d28a75c369eb9e95e35b.tar.gz |
* tree-ssa-alias.c (create_structure_vars): When in SSA, update operand
caches.
* tree-ssa-operands.c (build_ssa_operands): Recompute addresses_taken
bitmap.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120284 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index 939ac0f8fec..2ef529707cd 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -3188,6 +3188,58 @@ create_structure_vars (void) } htab_delete (used_portions); VEC_free (tree, heap, varvec); + + /* Update SSA operands of statememnts mentioning varibales we split. */ + if (gimple_in_ssa_p (cfun)) + FOR_EACH_BB (bb) + { + block_stmt_iterator bsi; + for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) + { + tree stmt = bsi_stmt (bsi); + bool update = false; + unsigned int i; + bitmap_iterator bi; + + if (STORED_SYMS (stmt)) + EXECUTE_IF_SET_IN_BITMAP (STORED_SYMS (stmt), 0, i, bi) + { + tree sym = referenced_var_lookup (i); + if (get_subvars_for_var (sym)) + { + update=true; + break; + } + } + + if (LOADED_SYMS (stmt) && !update) + EXECUTE_IF_SET_IN_BITMAP (LOADED_SYMS (stmt), 0, i, bi) + { + tree sym = referenced_var_lookup (i); + if (get_subvars_for_var (sym)) + { + update=true; + break; + } + } + + if (stmt_ann (stmt)->addresses_taken && !update) + EXECUTE_IF_SET_IN_BITMAP (stmt_ann (stmt)->addresses_taken, + 0, i, bi) + { + tree sym = referenced_var_lookup (i); + if (get_subvars_for_var (sym)) + { + update=true; + break; + } + } + + if (update) + update_stmt (stmt); + } + } + return 0; } |