This is the promised 3/2 - it removes simplifying the compare in
COND_EXPRs through fold_binary in fold_gimple_assign.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress
(testing with an assert in place in progress still as well).

Richard.

2015-07-31  Richard Biener  <rguent...@suse.de>

        * gimple-fold.c (fold_gimple_assign): Remove folding of
        the comparison in COND_EXPRs.

Index: gcc/gimple-fold.c
===================================================================
--- gcc/gimple-fold.c   (revision 226433)
+++ gcc/gimple-fold.c   (working copy)
@@ -416,49 +416,11 @@ fold_gimple_assign (gimple_stmt_iterator
       break;
 
     case GIMPLE_TERNARY_RHS:
-      /* Try to fold a conditional expression.  */
-      if (gimple_assign_rhs_code (stmt) == COND_EXPR)
-       {
-         tree op0 = gimple_assign_rhs1 (stmt);
-         tree tem;
-         bool set = false;
-         location_t cond_loc = gimple_location (stmt);
-
-         if (COMPARISON_CLASS_P (op0))
-           {
-             fold_defer_overflow_warnings ();
-             tem = fold_binary_loc (cond_loc,
-                                    TREE_CODE (op0), TREE_TYPE (op0),
-                                    TREE_OPERAND (op0, 0),
-                                    TREE_OPERAND (op0, 1));
-             /* This is actually a conditional expression, not a GIMPLE
-                conditional statement, however, the valid_gimple_rhs_p
-                test still applies.  */
-             set = (tem && is_gimple_condexpr (tem)
-                    && valid_gimple_rhs_p (tem));
-             fold_undefer_overflow_warnings (set, stmt, 0);
-           }
-         else if (is_gimple_min_invariant (op0))
-           {
-             tem = op0;
-             set = true;
-           }
-         else
-           return NULL_TREE;
-
-         if (set)
-           result = fold_build3_loc (cond_loc, COND_EXPR,
-                                     TREE_TYPE (gimple_assign_lhs (stmt)), tem,
-                                     gimple_assign_rhs2 (stmt),
-                                     gimple_assign_rhs3 (stmt));
-       }
-
-      if (!result)
-       result = fold_ternary_loc (loc, subcode,
-                                  TREE_TYPE (gimple_assign_lhs (stmt)),
-                                  gimple_assign_rhs1 (stmt),
-                                  gimple_assign_rhs2 (stmt),
-                                  gimple_assign_rhs3 (stmt));
+      result = fold_ternary_loc (loc, subcode,
+                                TREE_TYPE (gimple_assign_lhs (stmt)),
+                                gimple_assign_rhs1 (stmt),
+                                gimple_assign_rhs2 (stmt),
+                                gimple_assign_rhs3 (stmt));
 
       if (result)
         {

Reply via email to