From 6b25c196c2e88a852fe93f6445977adb39dec229 Mon Sep 17 00:00:00 2001 From: rguenth Date: Fri, 1 Jan 2010 20:22:17 +0000 Subject: [PATCH] 2010-01-01 Richard Guenther PR debug/42455 * tree-sra.c (analyze_all_variable_accesses): Work in DECL_UID order. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155559 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 +++++ gcc/tree-sra.c | 73 +++++++++++++++++++++++++++++++--------------------------- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7db96755ad3..81f5e2bef37 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2010-01-01 Richard Guenther + PR debug/42455 + * tree-sra.c (analyze_all_variable_accesses): Work in DECL_UID + order. + +2010-01-01 Richard Guenther + 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 8fdbb727607..65d270ff2d1 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 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) { -- 2.11.0