aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-alias.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2006-12-30 13:02:09 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2006-12-30 12:02:09 +0000
commitd586d6d1f6afb26b105aca56336217594549bf80 (patch)
treea1ec2dcdcfc29c5e53fc7abed01106497d065f6b /gcc/tree-ssa-alias.c
parent4b73962b7e164ed118806f9c70bc75a4799df467 (diff)
downloadgcc-d586d6d1f6afb26b105aca56336217594549bf80.zip
gcc-d586d6d1f6afb26b105aca56336217594549bf80.tar.gz
gcc-d586d6d1f6afb26b105aca56336217594549bf80.tar.bz2
tree-ssa-alias.c (create_structure_vars): When in SSA, update operand caches.
* tree-ssa-alias.c (create_structure_vars): When in SSA, update operand caches. * tree-ssa-operands.c (build_ssa_operands): Recompute addresses_taken bitmap. From-SVN: r120284
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r--gcc/tree-ssa-alias.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 939ac0f..2ef5297 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;
}