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
This commit is contained in:
parent
4b73962b7e
commit
d586d6d1f6
3 changed files with 64 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2006-12-30 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* tree-ssa-alias.c (create_structure_vars): When in SSA, update operand
|
||||
caches.
|
||||
* tree-ssa-operands.c (build_ssa_operands): Recompute addresses_taken
|
||||
bitmap.
|
||||
|
||||
2006-12-30 Jan Hubicka <jh@suse.cz>
|
||||
Vladimir Yanovsky <volodyan@gmail.com>
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -2337,6 +2337,9 @@ build_ssa_operands (tree stmt)
|
|||
makes no memory references. */
|
||||
ann->has_volatile_ops = false;
|
||||
ann->references_memory = false;
|
||||
/* Just clear the bitmap so we don't end up reallocating it over and over. */
|
||||
if (ann->addresses_taken)
|
||||
bitmap_clear (ann->addresses_taken);
|
||||
|
||||
start_ssa_stmt_operands ();
|
||||
parse_ssa_operands (stmt);
|
||||
|
@ -2344,6 +2347,8 @@ build_ssa_operands (tree stmt)
|
|||
operand_build_sort_virtual (build_vdefs);
|
||||
finalize_ssa_stmt_operands (stmt);
|
||||
|
||||
if (ann->addresses_taken && bitmap_empty_p (ann->addresses_taken))
|
||||
ann->addresses_taken = NULL;
|
||||
/* For added safety, assume that statements with volatile operands
|
||||
also reference memory. */
|
||||
if (ann->has_volatile_ops)
|
||||
|
|
Loading…
Add table
Reference in a new issue