From 001003c265ed1f7d8ce6847a340e3141b64d72a7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 1 Oct 2008 12:22:17 +0000 Subject: [PATCH] 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 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 --- gcc/ChangeLog | 7 +++++++ gcc/tree-ssa-ccp.c | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba26097f14b4..b6f16013f849 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-09-30 Paolo Bonzini + + 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 PR tree-optimization/37662 diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 22626a53840b..383367e9fb1c 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; -- 2.47.3