re PR tree-optimization/26135 (store copyprop not effective)
2006-04-07 Richard Guenther <rguenther@suse.de> PR tree-optimization/26135 * tree-ssa-copy.c (stmt_may_generate_copy): Handle memory loads for store copy-prop. (copy_prop_visit_stmt): Likewise. * gcc.dg/tree-ssa/ssa-copyprop-1.c: New testcase. From-SVN: r112749
This commit is contained in:
parent
b8cf62e42f
commit
fcfa143ae5
4 changed files with 57 additions and 2 deletions
|
@ -1,4 +1,11 @@
|
|||
2006-03-05 Robert Millan <robertmh@gnu.org>
|
||||
2006-04-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/26135
|
||||
* tree-ssa-copy.c (stmt_may_generate_copy): Handle memory
|
||||
loads for store copy-prop.
|
||||
(copy_prop_visit_stmt): Likewise.
|
||||
|
||||
2006-04-05 Robert Millan <robertmh@gnu.org>
|
||||
|
||||
* gcc/config/i386/linux.h: Add a comment to mark macros that are
|
||||
being overriden in config/k*bsd-gnu.h.
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-04-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/26135
|
||||
* gcc.dg/tree-ssa/ssa-copyprop-1.c: New testcase.
|
||||
|
||||
2006-04-06 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR profile/26399
|
||||
|
|
12
gcc/testsuite/gcc.dg/tree-ssa/ssa-copyprop-1.c
Normal file
12
gcc/testsuite/gcc.dg/tree-ssa/ssa-copyprop-1.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-store_copyprop-details" } */
|
||||
|
||||
typedef struct { int i; int j; } A;
|
||||
int foo(A *a, int i)
|
||||
{
|
||||
a->i = i;
|
||||
return a->i;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "return i" "store_copyprop" } } */
|
||||
/* { dg-final { cleanup-tree-dump "store_copyprop" } } */
|
|
@ -376,7 +376,10 @@ stmt_may_generate_copy (tree stmt)
|
|||
/* Otherwise, the only statements that generate useful copies are
|
||||
assignments whose RHS is just an SSA name that doesn't flow
|
||||
through abnormal edges. */
|
||||
return TREE_CODE (rhs) == SSA_NAME && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs);
|
||||
return (do_store_copy_prop
|
||||
&& TREE_CODE (lhs) == SSA_NAME)
|
||||
|| (TREE_CODE (rhs) == SSA_NAME
|
||||
&& !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs));
|
||||
}
|
||||
|
||||
|
||||
|
@ -681,6 +684,34 @@ copy_prop_visit_stmt (tree stmt, edge *taken_edge_p, tree *result_p)
|
|||
see if the lattice value of its output has changed. */
|
||||
retval = copy_prop_visit_assignment (stmt, result_p);
|
||||
}
|
||||
else if (TREE_CODE (stmt) == MODIFY_EXPR
|
||||
&& TREE_CODE (TREE_OPERAND (stmt, 0)) == SSA_NAME
|
||||
&& do_store_copy_prop
|
||||
&& stmt_makes_single_load (stmt))
|
||||
{
|
||||
/* If the statement is a copy assignment with a memory load
|
||||
on the RHS, see if we know the value of this load and
|
||||
update the lattice accordingly. */
|
||||
prop_value_t *val = get_value_loaded_by (stmt, copy_of);
|
||||
if (val
|
||||
&& val->mem_ref
|
||||
&& is_gimple_reg (val->value)
|
||||
&& operand_equal_p (val->mem_ref, TREE_OPERAND (stmt, 1), 0))
|
||||
{
|
||||
bool changed;
|
||||
changed = set_copy_of_val (TREE_OPERAND (stmt, 0),
|
||||
val->value, val->mem_ref);
|
||||
if (changed)
|
||||
{
|
||||
*result_p = TREE_OPERAND (stmt, 0);
|
||||
retval = SSA_PROP_INTERESTING;
|
||||
}
|
||||
else
|
||||
retval = SSA_PROP_NOT_INTERESTING;
|
||||
}
|
||||
else
|
||||
retval = SSA_PROP_VARYING;
|
||||
}
|
||||
else if (TREE_CODE (stmt) == COND_EXPR)
|
||||
{
|
||||
/* See if we can determine which edge goes out of a conditional
|
||||
|
|
Loading…
Add table
Reference in a new issue