diff options
author | Richard Henderson <rth@redhat.com> | 2004-07-01 15:26:12 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-07-01 15:26:12 -0700 |
commit | 78cc4167bcd0392c21b3db4682415245bfead558 (patch) | |
tree | 8642a57541f237700abdd68abbb181a33c0c08c6 /gcc | |
parent | 2eac577f17210ba9b9e3780cee6c6dbefa0298e6 (diff) | |
download | gcc-78cc4167bcd0392c21b3db4682415245bfead558.zip gcc-78cc4167bcd0392c21b3db4682415245bfead558.tar.gz gcc-78cc4167bcd0392c21b3db4682415245bfead558.tar.bz2 |
tree-sra.c (sra_walk_expr): Don't maybe_lookup_element_for_expr in order to disable scalarization.
* tree-sra.c (sra_walk_expr): Don't maybe_lookup_element_for_expr
in order to disable scalarization. Instead set a flag and wait
for a candidate decl.
From-SVN: r84001
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-sra.c | 16 |
2 files changed, 13 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f8351e5..c251288 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-07-01 Richard Henderson <rth@redhat.com> + + * tree-sra.c (sra_walk_expr): Don't maybe_lookup_element_for_expr + in order to disable scalarization. Instead set a flag and wait + for a candidate decl. + 2004-07-01 Joseph S. Myers <jsm@polyomino.org.uk> * doc/cppinternals.texi, doc/install.texi, doc/invoke.texi, diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 022da7d..2642dfe 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -615,6 +615,7 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output, { tree expr = *expr_p; tree inner = expr; + bool disable_scalarization = false; /* We're looking to collect a reference expression between EXPR and INNER, such that INNER is a scalarizable decl and all other nodes through EXPR @@ -632,7 +633,10 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output, if (is_sra_candidate_decl (inner)) { struct sra_elt *elt = maybe_lookup_element_for_expr (expr); - fns->use (elt, expr_p, bsi, is_output); + if (disable_scalarization) + elt->cannot_scalarize = true; + else + fns->use (elt, expr_p, bsi, is_output); } return; @@ -649,14 +653,8 @@ sra_walk_expr (tree *expr_p, block_stmt_iterator *bsi, bool is_output, without duplicating too much code. */ if (!is_valid_const_index (inner)) { - if (fns->initial_scan) - { - struct sra_elt *elt - = maybe_lookup_element_for_expr (TREE_OPERAND (inner, 0)); - if (elt) - elt->cannot_scalarize = true; - } - return; + disable_scalarization = true; + goto use_all; } /* ??? Are we assured that non-constant bounds and stride will have the same value everywhere? I don't think Fortran will... */ |