aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2008-10-01 12:22:17 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2008-10-01 12:22:17 +0000
commit001003c265ed1f7d8ce6847a340e3141b64d72a7 (patch)
treeaddc07606e7868c2c10e5917c7b181b4897efeab
parent9e81dbc753bb36f496b3566ad5d80ccced070fc5 (diff)
downloadgcc-001003c265ed1f7d8ce6847a340e3141b64d72a7.zip
gcc-001003c265ed1f7d8ce6847a340e3141b64d72a7.tar.gz
gcc-001003c265ed1f7d8ce6847a340e3141b64d72a7.tar.bz2
re PR tree-optimization/37662 (ice: tree check: expected ssa_name, have integer_cst in get_value_range, at tree-vrp.c:612)
2008-09-30 Paolo Bonzini <bonzini@gnu.org> PR tree-optimization/37662 * tree-ssa-ccp.c (fold_gimple_assign): Invert the operands of a commutative binary operation if they are in the wrong order and fold_build2 produces non-GIMPLE. From-SVN: r140809
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/tree-ssa-ccp.c11
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ba26097..b6f1601 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-09-30 Paolo Bonzini <bonzini@gnu.org>
+
+ PR tree-optimization/37662
+ * tree-ssa-ccp.c (fold_gimple_assign): Invert the operands of a
+ commutative binary operation if they are in the wrong order and
+ fold_build2 produces non-GIMPLE.
+
2008-09-30 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/37662
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index 22626a5..383367e 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -2711,6 +2711,17 @@ fold_gimple_assign (gimple_stmt_iterator *si)
STRIP_USELESS_TYPE_CONVERSION (result);
if (valid_gimple_rhs_p (result))
return result;
+
+ /* Fold might have produced non-GIMPLE, so if we trust it blindly
+ we lose canonicalization opportunities. Do not go again
+ through fold here though, or the same non-GIMPLE will be
+ produced. */
+ if (commutative_tree_code (subcode)
+ && tree_swap_operands_p (gimple_assign_rhs1 (stmt),
+ gimple_assign_rhs2 (stmt), false))
+ return build2 (subcode, TREE_TYPE (gimple_assign_lhs (stmt)),
+ gimple_assign_rhs2 (stmt),
+ gimple_assign_rhs1 (stmt));
}
break;