diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-02-28 13:43:33 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2013-02-28 13:43:33 +0100 |
commit | b48b3fc483125f0f6311cdedc874079574264359 (patch) | |
tree | 13e0fcd3e049b6f0358c2afe7c33b7b41479c033 /gcc/tree-sra.c | |
parent | 4f3ff9c1db786d8b1b64dc7c8168224412bd7df0 (diff) | |
download | gcc-b48b3fc483125f0f6311cdedc874079574264359.zip gcc-b48b3fc483125f0f6311cdedc874079574264359.tar.gz gcc-b48b3fc483125f0f6311cdedc874079574264359.tar.bz2 |
re PR tree-optimization/56294 (BOOT_CFLAGS='-O2 -g -fno-ipa-sra' leads to bootstrap comparison failure)
2013-02-28 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/56294
* tree-sra.c (analyze_access_subtree): Create replacement declarations.
Adjust dumping.
(get_access_replacement): Do not call create_access_replacement.
Assert a replacement exists.
(get_repl_default_def_ssa_name): Create the replacement declaration
itself.
testsuite/
* g++.dg/debug/pr56294.C: New test.
From-SVN: r196340
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r-- | gcc/tree-sra.c | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 234dde2..5d55d73 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2000,8 +2000,7 @@ create_access_replacement (struct access *access) static inline tree get_access_replacement (struct access *access) { - if (!access->replacement_decl) - access->replacement_decl = create_access_replacement (access); + gcc_checking_assert (access->replacement_decl); return access->replacement_decl; } @@ -2157,7 +2156,6 @@ analyze_access_subtree (struct access *root, struct access *parent, || ((root->grp_scalar_read || root->grp_assignment_read) && (root->grp_scalar_write || root->grp_assignment_write)))) { - bool new_integer_type; /* Always create access replacements that cover the whole access. For integral types this means the precision has to match. Avoid assumptions based on the integral type kind, too. */ @@ -2176,22 +2174,19 @@ analyze_access_subtree (struct access *root, struct access *parent, root->expr = build_ref_for_offset (UNKNOWN_LOCATION, root->base, root->offset, root->type, NULL, false); - new_integer_type = true; - } - else - new_integer_type = false; - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Marking "); - print_generic_expr (dump_file, root->base, 0); - fprintf (dump_file, " offset: %u, size: %u ", - (unsigned) root->offset, (unsigned) root->size); - fprintf (dump_file, " to be replaced%s.\n", - new_integer_type ? " with an integer": ""); + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Changing the type of a replacement for "); + print_generic_expr (dump_file, root->base, 0); + fprintf (dump_file, " offset: %u, size: %u ", + (unsigned) root->offset, (unsigned) root->size); + fprintf (dump_file, " to an integer.\n"); + } } root->grp_to_be_replaced = 1; + root->replacement_decl = create_access_replacement (root); sth_created = true; hole = false; } @@ -2209,15 +2204,7 @@ analyze_access_subtree (struct access *root, struct access *parent, if (MAY_HAVE_DEBUG_STMTS) { root->grp_to_be_debug_replaced = 1; - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "Marking "); - print_generic_expr (dump_file, root->base, 0); - fprintf (dump_file, " offset: %u, size: %u ", - (unsigned) root->offset, (unsigned) root->size); - fprintf (dump_file, " to be replaced with debug " - "statements.\n"); - } + root->replacement_decl = create_access_replacement (root); } } @@ -2973,7 +2960,11 @@ sra_modify_constructor_assign (gimple *stmt, gimple_stmt_iterator *gsi) static tree get_repl_default_def_ssa_name (struct access *racc) { - return get_or_create_ssa_default_def (cfun, get_access_replacement (racc)); + gcc_checking_assert (!racc->grp_to_be_replaced && + !racc->grp_to_be_debug_replaced); + if (!racc->replacement_decl) + racc->replacement_decl = create_access_replacement (racc); + return get_or_create_ssa_default_def (cfun, racc->replacement_decl); } /* Return true if REF has a COMPONENT_REF with a bit-field field declaration |