aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-07-01 15:26:12 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-07-01 15:26:12 -0700
commit78cc4167bcd0392c21b3db4682415245bfead558 (patch)
tree8642a57541f237700abdd68abbb181a33c0c08c6 /gcc
parent2eac577f17210ba9b9e3780cee6c6dbefa0298e6 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/tree-sra.c16
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... */