diff options
author | Richard Guenther <rguenther@suse.de> | 2005-12-15 10:34:44 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2005-12-15 10:34:44 +0000 |
commit | 6bec9271941b9b72ad47b3b357a243ed0690baa7 (patch) | |
tree | 37e6c4df71824b584a70181905ff6a757f809b5f /gcc/tree-ssa-operands.c | |
parent | cd6dba21ac4803bde1b149365d543dd81500ded5 (diff) | |
download | gcc-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.c | 11 |
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); } |