tree-ssa-operands.c (add_call_clobber_ops): Use SFT_PARENT_VAR to try to avoid clobbering pieces of structures when...

2006-01-11  Daniel Berlin  <dberlin@dberlin.org>

	* tree-ssa-operands.c (add_call_clobber_ops): Use SFT_PARENT_VAR
	to try to avoid clobbering pieces of structures when we know
	something about the whole structure.
	* tree-ssa-alias.c (create_sft): Set SFT_PARENT_VAR

From-SVN: r109651
This commit is contained in:
Daniel Berlin 2006-01-12 23:07:53 +00:00 committed by Daniel Berlin
parent 1cd99a2317
commit dff852300d
3 changed files with 23 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2006-01-11 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-operands.c (add_call_clobber_ops): Use SFT_PARENT_VAR
to try to avoid clobbering pieces of structures when we know
something about the whole structure.
* tree-ssa-alias.c (create_sft): Set SFT_PARENT_VAR
2006-01-13 Ben Elliston <bje@au.ibm.com>
* doc/rtl.texi (Insns): Remove statement that libcalls cannot

View File

@ -2536,6 +2536,7 @@ create_sft (tree var, tree field)
ann = get_var_ann (subvar);
ann->type_mem_tag = NULL;
add_referenced_tmp_var (subvar);
SFT_PARENT_VAR (subvar) = var;
return subvar;
}

View File

@ -1778,14 +1778,25 @@ add_call_clobber_ops (tree stmt, tree callee)
EXECUTE_IF_SET_IN_BITMAP (call_clobbered_vars, 0, u, bi)
{
tree var = referenced_var (u);
unsigned int uid = u;
if (unmodifiable_var_p (var))
add_stmt_operand (&var, &empty_ann, opf_none);
else
{
bool not_read
= not_read_b ? bitmap_bit_p (not_read_b, u) : false;
bool not_written
= not_written_b ? bitmap_bit_p (not_written_b, u) : false;
bool not_read;
bool not_written;
/* Not read and not written are computed on regular vars, not
subvars, so look at the parent var if this is an SFT. */
if (TREE_CODE (var) == STRUCT_FIELD_TAG)
uid = DECL_UID (SFT_PARENT_VAR (var));
not_read =
not_read_b ? bitmap_bit_p (not_read_b, uid) : false;
not_written =
not_written_b ? bitmap_bit_p (not_written_b, uid) : false;
if (not_written)
{