aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-operands.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2005-12-15 10:34:44 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2005-12-15 10:34:44 +0000
commit6bec9271941b9b72ad47b3b357a243ed0690baa7 (patch)
tree37e6c4df71824b584a70181905ff6a757f809b5f /gcc/tree-ssa-operands.c
parentcd6dba21ac4803bde1b149365d543dd81500ded5 (diff)
downloadgcc-6bec9271941b9b72ad47b3b357a243ed0690baa7.zip
gcc-6bec9271941b9b72ad47b3b357a243ed0690baa7.tar.gz
gcc-6bec9271941b9b72ad47b3b357a243ed0690baa7.tar.bz2
tree-flow.h (okay_component_ref_for_subvars): Remove.
2005-12-15 Richard Guenther <rguenther@suse.de> * tree-flow.h (okay_component_ref_for_subvars): Remove. (get_ref_base_and_extent): Declare. * tree-dfa.c (okay_component_ref_for_subvars): Remove. (get_ref_base_and_extent): New function. * tree-ssa-alias.c (find_used_portions): Use it. * tree-ssa-structalias.c (get_constraint_for_component_ref): Likewise. * tree-ssa-operands.c (get_expr_operands): Likewise. From-SVN: r108568
Diffstat (limited to 'gcc/tree-ssa-operands.c')
-rw-r--r--gcc/tree-ssa-operands.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index c75f30c..0e0f365 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -1133,25 +1133,26 @@ get_expr_operands (tree stmt, tree *expr_p, int flags)
case IMAGPART_EXPR:
{
tree ref;
- unsigned HOST_WIDE_INT offset, size;
+ HOST_WIDE_INT offset, size, maxsize;
/* This component ref becomes an access to all of the subvariables
it can touch, if we can determine that, but *NOT* the real one.
If we can't determine which fields we could touch, the recursion
will eventually get to a variable and add *all* of its subvars, or
whatever is the minimum correct subset. */
- ref = okay_component_ref_for_subvars (expr, &offset, &size);
- if (ref)
+ ref = get_ref_base_and_extent (expr, &offset, &size, &maxsize);
+ if (SSA_VAR_P (ref) && get_subvars_for_var (ref))
{
subvar_t svars = get_subvars_for_var (ref);
subvar_t sv;
for (sv = svars; sv; sv = sv->next)
{
bool exact;
- if (overlap_subvar (offset, size, sv, &exact))
+ if (overlap_subvar (offset, maxsize, sv, &exact))
{
int subvar_flags = flags;
- if (!exact)
+ if (!exact
+ || size != maxsize)
subvar_flags &= ~opf_kill_def;
add_stmt_operand (&sv->var, s_ann, subvar_flags);
}