aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-phiopt.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2014-05-17 14:37:58 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2014-05-17 12:37:58 +0000
commit87a34442667d0ecd397e141e26a64419fb71850c (patch)
tree9c6585b0e1d0714051cd59a6525632df8fb094bd /gcc/tree-ssa-phiopt.c
parent6ca74b5cf0e747981fed0a8e8e71cba37c03bd8b (diff)
downloadgcc-87a34442667d0ecd397e141e26a64419fb71850c.zip
gcc-87a34442667d0ecd397e141e26a64419fb71850c.tar.gz
gcc-87a34442667d0ecd397e141e26a64419fb71850c.tar.bz2
re PR tree-optimization/61140 (wrong code at -O1 and above on x86_64-linux-gnu)
2014-05-17 Marc Glisse <marc.glisse@inria.fr> PR tree-optimization/61140 PR tree-optimization/61150 PR tree-optimization/61197 gcc/ * tree-ssa-phiopt.c (value_replacement): Punt on multiple phis. gcc/testsuite/ * gcc.dg/tree-ssa/pr61140.c: New file. * gcc.dg/tree-ssa/pr61150.c: New file. * gcc.dg/tree-ssa/pr61197.c: New file. From-SVN: r210554
Diffstat (limited to 'gcc/tree-ssa-phiopt.c')
-rw-r--r--gcc/tree-ssa-phiopt.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c
index d4aaf42..e3b6f1d 100644
--- a/gcc/tree-ssa-phiopt.c
+++ b/gcc/tree-ssa-phiopt.c
@@ -849,6 +849,10 @@ value_replacement (basic_block cond_bb, basic_block middle_bb,
&& !POINTER_TYPE_P (TREE_TYPE (arg0))))
return 0;
+ /* Only transform if it removes the condition. */
+ if (!single_non_singleton_phi_for_edges (phi_nodes (gimple_bb (phi)), e0, e1))
+ return 0;
+
/* Size-wise, this is always profitable. */
if (optimize_bb_for_speed_p (cond_bb)
/* The special case is useless if it has a low probability. */