diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2014-05-17 14:37:58 +0200 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2014-05-17 12:37:58 +0000 |
commit | 87a34442667d0ecd397e141e26a64419fb71850c (patch) | |
tree | 9c6585b0e1d0714051cd59a6525632df8fb094bd /gcc/tree-ssa-phiopt.c | |
parent | 6ca74b5cf0e747981fed0a8e8e71cba37c03bd8b (diff) | |
download | gcc-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.c | 4 |
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. */ |