aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-01-01 20:22:17 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-01-01 20:22:17 +0000
commitaecd4d81802ea1a0ba80e44eb39549f2c41db166 (patch)
treeb60d26c70152305eb69b0659a14fa41534340bde
parentdadab4fd220ff852e68afdd855a5702d3eb22447 (diff)
downloadgcc-aecd4d81802ea1a0ba80e44eb39549f2c41db166.zip
gcc-aecd4d81802ea1a0ba80e44eb39549f2c41db166.tar.gz
gcc-aecd4d81802ea1a0ba80e44eb39549f2c41db166.tar.bz2
re PR debug/42455 ("-fcompare-debug failure" at -O2 in 'recent' builds)
2010-01-01 Richard Guenther <rguenther@suse.de> PR debug/42455 * tree-sra.c (analyze_all_variable_accesses): Work in DECL_UID order. From-SVN: r155559
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-sra.c73
2 files changed, 45 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7db9675..81f5e2b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2010-01-01 Richard Guenther <rguenther@suse.de>
+ PR debug/42455
+ * tree-sra.c (analyze_all_variable_accesses): Work in DECL_UID
+ order.
+
+2010-01-01 Richard Guenther <rguenther@suse.de>
+
PR c/42570
* c-decl.c (grokdeclarator): For zero-size arrays force
structural equality checks as layout_type does.
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 8fdbb72..65d270f 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1,7 +1,7 @@
/* Scalar Replacement of Aggregates (SRA) converts some structure
references into scalar references, exposing them to the scalar
optimizers.
- Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
Contributed by Martin Jambor <mjambor@suse.cz>
This file is part of GCC.
@@ -1885,45 +1885,50 @@ propagate_all_subaccesses (void)
static bool
analyze_all_variable_accesses (void)
{
- tree var;
- referenced_var_iterator rvi;
int res = 0;
+ bitmap tmp = BITMAP_ALLOC (NULL);
+ bitmap_iterator bi;
+ unsigned i;
- FOR_EACH_REFERENCED_VAR (var, rvi)
- if (bitmap_bit_p (candidate_bitmap, DECL_UID (var)))
- {
- struct access *access;
-
- access = sort_and_splice_var_accesses (var);
- if (access)
- build_access_trees (access);
- else
- disqualify_candidate (var,
- "No or inhibitingly overlapping accesses.");
- }
+ bitmap_copy (tmp, candidate_bitmap);
+ EXECUTE_IF_SET_IN_BITMAP (tmp, 0, i, bi)
+ {
+ tree var = referenced_var (i);
+ struct access *access;
+
+ access = sort_and_splice_var_accesses (var);
+ if (access)
+ build_access_trees (access);
+ else
+ disqualify_candidate (var,
+ "No or inhibitingly overlapping accesses.");
+ }
propagate_all_subaccesses ();
- FOR_EACH_REFERENCED_VAR (var, rvi)
- if (bitmap_bit_p (candidate_bitmap, DECL_UID (var)))
- {
- struct access *access = get_first_repr_for_decl (var);
+ bitmap_copy (tmp, candidate_bitmap);
+ EXECUTE_IF_SET_IN_BITMAP (tmp, 0, i, bi)
+ {
+ tree var = referenced_var (i);
+ struct access *access = get_first_repr_for_decl (var);
- if (analyze_access_trees (access))
- {
- res++;
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "\nAccess trees for ");
- print_generic_expr (dump_file, var, 0);
- fprintf (dump_file, " (UID: %u): \n", DECL_UID (var));
- dump_access_tree (dump_file, access);
- fprintf (dump_file, "\n");
- }
- }
- else
- disqualify_candidate (var, "No scalar replacements to be created.");
- }
+ if (analyze_access_trees (access))
+ {
+ res++;
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "\nAccess trees for ");
+ print_generic_expr (dump_file, var, 0);
+ fprintf (dump_file, " (UID: %u): \n", DECL_UID (var));
+ dump_access_tree (dump_file, access);
+ fprintf (dump_file, "\n");
+ }
+ }
+ else
+ disqualify_candidate (var, "No scalar replacements to be created.");
+ }
+
+ BITMAP_FREE (tmp);
if (res)
{