diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2008-10-01 12:22:17 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2008-10-01 12:22:17 +0000 |
commit | 001003c265ed1f7d8ce6847a340e3141b64d72a7 (patch) | |
tree | addc07606e7868c2c10e5917c7b181b4897efeab /gcc | |
parent | 9e81dbc753bb36f496b3566ad5d80ccced070fc5 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 11 |
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; |