mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 09:00:37 +08:00
re PR tree-optimization/20913 (copy-prop does not fold conditionals)
gcc/ PR tree-optimization/20913 * tree-ssa-copy.c (copy_prop_visit_cond_stmt): Fold COND_EXPR. testsuite/ PR tree-optimization/20913 * gcc.dg/tree-ssa/pr20913.c: New. From-SVN: r98090
This commit is contained in:
parent
e22a7bcf26
commit
9fb6cbd90e
@ -1,3 +1,8 @@
|
||||
2005-04-13 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
PR tree-optimization/20913
|
||||
* tree-ssa-copy.c (copy_prop_visit_cond_stmt): Fold COND_EXPR.
|
||||
|
||||
2005-04-13 Julian Brown <julian@codesourcery.com>
|
||||
|
||||
* config/elfos.h (MAKE_DECL_ONE_ONLY): Redefined to stop DECL_WEAK from
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-04-13 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
PR tree-optimization/20913
|
||||
* gcc.dg/tree-ssa/pr20913.c: New.
|
||||
|
||||
2005-04-13 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
|
||||
|
||||
PR c++/13744
|
||||
|
25
gcc/testsuite/gcc.dg/tree-ssa/pr20913.c
Normal file
25
gcc/testsuite/gcc.dg/tree-ssa/pr20913.c
Normal file
@ -0,0 +1,25 @@
|
||||
/* PR tree-optimization/20913
|
||||
COPY-PROP did not fold COND_EXPR, blocking some copy propagation
|
||||
opportunities. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-copyprop1-details" } */
|
||||
|
||||
int
|
||||
foo (int a, int b, int c, int d)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
b = a;
|
||||
if (a == b)
|
||||
x = c;
|
||||
else
|
||||
x = d;
|
||||
|
||||
if (x == c)
|
||||
return a;
|
||||
else
|
||||
return b;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "with if \\(1\\)" 2 "copyprop1"} } */
|
@ -626,9 +626,16 @@ copy_prop_visit_cond_stmt (tree stmt, edge *taken_edge_p)
|
||||
print_generic_stmt (dump_file, cond, 0);
|
||||
}
|
||||
|
||||
*taken_edge_p = find_taken_edge (bb_for_stmt (stmt), cond);
|
||||
if (*taken_edge_p)
|
||||
retval = SSA_PROP_INTERESTING;
|
||||
/* We can fold COND only and get a useful result only when we
|
||||
have the same SSA_NAME on both sides of a comparison
|
||||
operator. */
|
||||
if (TREE_CODE (TREE_OPERAND (cond, 0)) == SSA_NAME
|
||||
&& TREE_OPERAND (cond, 0) == TREE_OPERAND (cond, 1))
|
||||
{
|
||||
*taken_edge_p = find_taken_edge (bb_for_stmt (stmt), fold (cond));
|
||||
if (*taken_edge_p)
|
||||
retval = SSA_PROP_INTERESTING;
|
||||
}
|
||||
|
||||
/* Restore the original operands. */
|
||||
for (i = 0; i < NUM_USES (uses); i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user