mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/51692 (ICE on several valgrind tests)
2012-01-03 Richard Guenther <rguenther@suse.de> PR tree-optimization/51692 * tree-ssa-dce.c (eliminate_unnecessary_stmts): Do not remove the LHS of allocation stmts. * gcc.dg/torture/pr51692.c: New testcase. From-SVN: r182838
This commit is contained in:
parent
75291c57b9
commit
f1749ec1b1
|
|
@ -1,3 +1,9 @@
|
||||||
|
2012-01-03 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/51692
|
||||||
|
* tree-ssa-dce.c (eliminate_unnecessary_stmts): Do not remove
|
||||||
|
the LHS of allocation stmts.
|
||||||
|
|
||||||
2012-01-03 Olivier Hainque <hainque@adacore.com>
|
2012-01-03 Olivier Hainque <hainque@adacore.com>
|
||||||
|
|
||||||
* system.h: Prior to #define, #undef fopen and freopen unconditionally.
|
* system.h: Prior to #define, #undef fopen and freopen unconditionally.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-01-03 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/51692
|
||||||
|
* gcc.dg/torture/pr51692.c: New testcase.
|
||||||
|
|
||||||
2012-01-03 Richard Guenther <rguenther@suse.de>
|
2012-01-03 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR debug/51650
|
PR debug/51650
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
volatile double d = 0.0;
|
||||||
|
double *p = __builtin_calloc (1, sizeof (double));
|
||||||
|
d += 1.0;
|
||||||
|
*p += 2.0;
|
||||||
|
__builtin_free (p);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1329,31 +1329,38 @@ eliminate_unnecessary_stmts (void)
|
||||||
}
|
}
|
||||||
else if (is_gimple_call (stmt))
|
else if (is_gimple_call (stmt))
|
||||||
{
|
{
|
||||||
call = gimple_call_fndecl (stmt);
|
tree name = gimple_call_lhs (stmt);
|
||||||
if (call)
|
|
||||||
|
notice_special_calls (stmt);
|
||||||
|
|
||||||
|
/* When LHS of var = call (); is dead, simplify it into
|
||||||
|
call (); saving one operand. */
|
||||||
|
if (name
|
||||||
|
&& TREE_CODE (name) == SSA_NAME
|
||||||
|
&& !TEST_BIT (processed, SSA_NAME_VERSION (name))
|
||||||
|
/* Avoid doing so for allocation calls which we
|
||||||
|
did not mark as necessary, it will confuse the
|
||||||
|
special logic we apply to malloc/free pair removal. */
|
||||||
|
&& (!(call = gimple_call_fndecl (stmt))
|
||||||
|
|| DECL_BUILT_IN_CLASS (call) != BUILT_IN_NORMAL
|
||||||
|
|| (DECL_FUNCTION_CODE (call) != BUILT_IN_MALLOC
|
||||||
|
&& DECL_FUNCTION_CODE (call) != BUILT_IN_CALLOC
|
||||||
|
&& DECL_FUNCTION_CODE (call) != BUILT_IN_ALLOCA
|
||||||
|
&& (DECL_FUNCTION_CODE (call)
|
||||||
|
!= BUILT_IN_ALLOCA_WITH_ALIGN))))
|
||||||
{
|
{
|
||||||
tree name;
|
something_changed = true;
|
||||||
|
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||||
/* When LHS of var = call (); is dead, simplify it into
|
|
||||||
call (); saving one operand. */
|
|
||||||
name = gimple_call_lhs (stmt);
|
|
||||||
if (name && TREE_CODE (name) == SSA_NAME
|
|
||||||
&& !TEST_BIT (processed, SSA_NAME_VERSION (name)))
|
|
||||||
{
|
{
|
||||||
something_changed = true;
|
fprintf (dump_file, "Deleting LHS of call: ");
|
||||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
|
||||||
{
|
fprintf (dump_file, "\n");
|
||||||
fprintf (dump_file, "Deleting LHS of call: ");
|
|
||||||
print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
|
|
||||||
fprintf (dump_file, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
gimple_call_set_lhs (stmt, NULL_TREE);
|
|
||||||
maybe_clean_or_replace_eh_stmt (stmt, stmt);
|
|
||||||
update_stmt (stmt);
|
|
||||||
release_ssa_name (name);
|
|
||||||
}
|
}
|
||||||
notice_special_calls (stmt);
|
|
||||||
|
gimple_call_set_lhs (stmt, NULL_TREE);
|
||||||
|
maybe_clean_or_replace_eh_stmt (stmt, stmt);
|
||||||
|
update_stmt (stmt);
|
||||||
|
release_ssa_name (name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue