re PR tree-optimization/51683 (__builtin_memcpy etc. with constant first argument optimized away by ccp)
PR tree-optimization/51683 * tree-ssa-propagate.c (substitute_and_fold): Don't optimize away calls with side-effects. * tree-ssa-ccp.c (ccp_fold_stmt): Likewise. * gcc.dg/pr51683.c: New test. From-SVN: r182761
This commit is contained in:
parent
6f2ffb4b99
commit
45a5b21a77
@ -1,3 +1,10 @@
|
||||
2012-01-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51683
|
||||
* tree-ssa-propagate.c (substitute_and_fold): Don't optimize away
|
||||
calls with side-effects.
|
||||
* tree-ssa-ccp.c (ccp_fold_stmt): Likewise.
|
||||
|
||||
2011-12-31 Alexandre Oliva <aoliva@redhat.com>
|
||||
|
||||
* cselib.h (cselib_add_permanent_equiv): Declare.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-01-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/51683
|
||||
* gcc.dg/pr51683.c: New test.
|
||||
|
||||
2011-12-31 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/51397
|
||||
|
18
gcc/testsuite/gcc.dg/pr51683.c
Normal file
18
gcc/testsuite/gcc.dg/pr51683.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* PR tree-optimization/51683 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized" } */
|
||||
|
||||
static inline void *
|
||||
bar (void *p, void *q, int r)
|
||||
{
|
||||
return __builtin_memcpy (p, q, r);
|
||||
}
|
||||
|
||||
void *
|
||||
foo (void *p)
|
||||
{
|
||||
return bar ((void *) 0x12345000, p, 256);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "memcpy" "optimized" } } */
|
||||
/* { dg-final { cleanup-tree-dump "optimized" } } */
|
@ -1,6 +1,6 @@
|
||||
/* Conditional constant propagation pass for the GNU compiler.
|
||||
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
2010, 2011 Free Software Foundation, Inc.
|
||||
2010, 2011, 2012 Free Software Foundation, Inc.
|
||||
Adapted from original RTL SSA-CCP by Daniel Berlin <dberlin@dberlin.org>
|
||||
Adapted to GIMPLE trees by Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
@ -1878,6 +1878,7 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
|
||||
case GIMPLE_CALL:
|
||||
{
|
||||
tree lhs = gimple_call_lhs (stmt);
|
||||
int flags = gimple_call_flags (stmt);
|
||||
tree val;
|
||||
tree argt;
|
||||
bool changed = false;
|
||||
@ -1888,7 +1889,10 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
|
||||
type issues. */
|
||||
if (lhs
|
||||
&& TREE_CODE (lhs) == SSA_NAME
|
||||
&& (val = get_constant_value (lhs)))
|
||||
&& (val = get_constant_value (lhs))
|
||||
/* Don't optimize away calls that have side-effects. */
|
||||
&& (flags & (ECF_CONST|ECF_PURE)) != 0
|
||||
&& (flags & ECF_LOOPING_CONST_OR_PURE) == 0)
|
||||
{
|
||||
tree new_rhs = unshare_expr (val);
|
||||
bool res;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Generic SSA value propagation engine.
|
||||
Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Diego Novillo <dnovillo@redhat.com>
|
||||
|
||||
@ -1056,6 +1056,12 @@ substitute_and_fold (ssa_prop_get_value_fn get_value_fn,
|
||||
}
|
||||
else if (is_gimple_call (def_stmt))
|
||||
{
|
||||
int flags = gimple_call_flags (def_stmt);
|
||||
|
||||
/* Don't optimize away calls that have side-effects. */
|
||||
if ((flags & (ECF_CONST|ECF_PURE)) == 0
|
||||
|| (flags & ECF_LOOPING_CONST_OR_PURE))
|
||||
continue;
|
||||
if (update_call_from_tree (&gsi, val)
|
||||
&& maybe_clean_or_replace_eh_stmt (def_stmt, gsi_stmt (gsi)))
|
||||
gimple_purge_dead_eh_edges (gimple_bb (gsi_stmt (gsi)));
|
||||
|
Loading…
Reference in New Issue
Block a user