Commit 4267a4a6 by Martin Jambor Committed by Martin Jambor

re PR debug/55579 (SRA doesn't create debug stmts when they would be useful)

2013-01-08  Martin Jambor  <mjambor@suse.cz>

	PR debug/55579
	* tree-sra.c (analyze_access_subtree): Return true also after
	potentially creating a debug-only replacement.

testsuite/
	* gcc.dg/tree-ssa/pr55579.c: New test.

From-SVN: r195015
parent 80a8d521
2013-01-08 Martin Jambor <mjambor@suse.cz>
PR debug/55579
* tree-sra.c (analyze_access_subtree): Return true also after
potentially creating a debug-only replacement.
2013-01-08 Jakub Jelinek <jakub@redhat.com> 2013-01-08 Jakub Jelinek <jakub@redhat.com>
PR middle-end/55890 PR middle-end/55890
......
2013-01-08 Martin Jambor <mjambor@suse.cz>
PR debug/55579
* gcc.dg/tree-ssa/pr55579.c: New test.
2013-01-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2013-01-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* g++.dg/debug/dwarf2/pr54508.C: Allow for more whitespace after * g++.dg/debug/dwarf2/pr54508.C: Allow for more whitespace after
......
/* { dg-do compile } */
/* { dg-options "-O2 -g -fdump-tree-esra" } */
struct S { int a; char b; char c; short d; };
int
foo (int x)
{
struct S s = { x + 1, x + 2, x + 3, x + 4 };
char *p = &s.c;
return x;
}
/* { dg-final { scan-tree-dump "Created a debug-only replacement for s" "esra" } } */
...@@ -2197,20 +2197,25 @@ analyze_access_subtree (struct access *root, struct access *parent, ...@@ -2197,20 +2197,25 @@ analyze_access_subtree (struct access *root, struct access *parent,
} }
else else
{ {
if (MAY_HAVE_DEBUG_STMTS && allow_replacements if (allow_replacements
&& scalar && !root->first_child && scalar && !root->first_child
&& (root->grp_scalar_write || root->grp_assignment_write)) && (root->grp_scalar_write || root->grp_assignment_write))
{ {
gcc_checking_assert (!root->grp_scalar_read gcc_checking_assert (!root->grp_scalar_read
&& !root->grp_assignment_read); && !root->grp_assignment_read);
root->grp_to_be_debug_replaced = 1; sth_created = true;
if (dump_file && (dump_flags & TDF_DETAILS)) if (MAY_HAVE_DEBUG_STMTS)
{ {
fprintf (dump_file, "Marking "); root->grp_to_be_debug_replaced = 1;
print_generic_expr (dump_file, root->base, 0); if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " offset: %u, size: %u ", {
(unsigned) root->offset, (unsigned) root->size); fprintf (dump_file, "Marking ");
fprintf (dump_file, " to be replaced with debug statements.\n"); 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");
}
} }
} }
...@@ -2220,17 +2225,11 @@ analyze_access_subtree (struct access *root, struct access *parent, ...@@ -2220,17 +2225,11 @@ analyze_access_subtree (struct access *root, struct access *parent,
root->grp_total_scalarization = 0; root->grp_total_scalarization = 0;
} }
if (sth_created if (!hole || root->grp_total_scalarization)
&& (!hole || root->grp_total_scalarization)) root->grp_covered = 1;
{ else if (root->grp_write || TREE_CODE (root->base) == PARM_DECL)
root->grp_covered = 1;
return true;
}
if (root->grp_write || TREE_CODE (root->base) == PARM_DECL)
root->grp_unscalarized_data = 1; /* not covered and written to */ root->grp_unscalarized_data = 1; /* not covered and written to */
if (sth_created) return sth_created;
return true;
return false;
} }
/* Analyze all access trees linked by next_grp by the means of /* Analyze all access trees linked by next_grp by the means of
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment