aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2013-02-28 13:43:33 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2013-02-28 13:43:33 +0100
commitb48b3fc483125f0f6311cdedc874079574264359 (patch)
tree13e0fcd3e049b6f0358c2afe7c33b7b41479c033 /gcc/tree-sra.c
parent4f3ff9c1db786d8b1b64dc7c8168224412bd7df0 (diff)
downloadgcc-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.c41
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