diff options
author | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-09-22 08:48:17 +0000 |
---|---|---|
committer | jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-09-22 08:48:17 +0000 |
commit | 426626ceef34482025360453aa0b690f4ac1a2f3 (patch) | |
tree | f17511091276bf526ef6e36424ed3b5c8cf4399a /gcc/tree-sra.c | |
parent | d62bbb24921efecd9ec369a4897f397a9b50fda3 (diff) | |
download | gcc-426626ceef34482025360453aa0b690f4ac1a2f3.tar.gz |
2010-09-22 Martin Jambor <mjambor@suse.cz>
* tree-sra.c (struct access): New field grp_no_warning.
(create_access_replacement): Set TREE_NO_WARNING according to
grp_no_warning.
(create_artificial_child_access): Use build_ref_for_model and set
grp_no_warning if build_user_friendly_ref_for_offset fails.
(propagate_subaccesses_across_link): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164515 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r-- | gcc/tree-sra.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 0127b82c568..4364713ca57 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -216,6 +216,9 @@ struct access cannot be called from within FOR_EACH_REFERENCED_VAR. */ unsigned grp_to_be_replaced : 1; + /* Should TREE_NO_WARNING of a replacement be set? */ + unsigned grp_no_warning : 1; + /* Is it possible that the group refers to data which might be (directly or otherwise) modified? */ unsigned grp_maybe_modified : 1; @@ -1714,7 +1717,10 @@ create_access_replacement (struct access *access, bool rename) } SET_DECL_DEBUG_EXPR (repl, debug_expr); DECL_DEBUG_EXPR_IS_FROM (repl) = 1; - TREE_NO_WARNING (repl) = TREE_NO_WARNING (access->base); + if (access->grp_no_warning) + TREE_NO_WARNING (repl) = 1; + else + TREE_NO_WARNING (repl) = TREE_NO_WARNING (access->base); } else TREE_NO_WARNING (repl) = 1; @@ -1970,12 +1976,17 @@ create_artificial_child_access (struct access *parent, struct access *model, tree expr = parent->base; gcc_assert (!model->grp_unscalarizable_region); - if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset, - model->type)) - return NULL; access = (struct access *) pool_alloc (access_pool); memset (access, 0, sizeof (struct access)); + if (!build_user_friendly_ref_for_offset (&expr, TREE_TYPE (expr), new_offset, + model->type)) + { + access->grp_no_warning = true; + expr = build_ref_for_model (EXPR_LOCATION (parent->base), parent->base, + new_offset, model, NULL, false); + } + access->base = parent->base; access->expr = expr; access->offset = new_offset; @@ -2016,11 +2027,16 @@ propagate_subaccesses_across_link (struct access *lacc, struct access *racc) { tree t = lacc->base; + lacc->type = racc->type; if (build_user_friendly_ref_for_offset (&t, TREE_TYPE (t), lacc->offset, racc->type)) + lacc->expr = t; + else { - lacc->expr = t; - lacc->type = racc->type; + lacc->expr = build_ref_for_model (EXPR_LOCATION (lacc->base), + lacc->base, lacc->offset, + racc, NULL, false); + lacc->grp_no_warning = true; } return false; } |