gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove dispatching to fold_binary...
authorRichard Biener <rguenther@suse.de>
Tue, 4 Aug 2015 09:40:54 +0000 (09:40 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 4 Aug 2015 09:40:54 +0000 (09:40 +0000)
2015-08-04  Richard Biener  <rguenther@suse.de>

* gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove
dispatching to fold_binary for GIMPLE_BINARY_RHS and for
comparisons embedded in [VEC_]COND_EXPRs.

From-SVN: r226551

gcc/ChangeLog
gcc/gimple-fold.c

index fdc4a7e4e1223d83aee9ec13941d42ee7a54b9fe..10f4ff1975bf07a81aabdec8d5b286bfbcc41892 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-04  Richard Biener  <rguenther@suse.de>
+
+       * gimple-fold.c (gimple_fold_stmt_to_constant_1): Remove
+       dispatching to fold_binary for GIMPLE_BINARY_RHS and for
+       comparisons embedded in [VEC_]COND_EXPRs.
+
 2015-08-03  Abe Skolnik  <a.skolnik@samsung.com>
 
        * tree-if-conv.c: Fix various typos in comments.
index c624689e7265d54110b80950bcbf0f01ecb54707..6c53bac027b82fb7752f1d747fab46b45faceab6 100644 (file)
@@ -5008,28 +5008,26 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree),
            return NULL_TREE;
 
           case GIMPLE_BINARY_RHS:
-            {
-              /* Handle binary operators that can appear in GIMPLE form.  */
-              tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
-              tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
-
-             /* Translate &x + CST into an invariant form suitable for
-                further propagation.  */
-             if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR
-                 && TREE_CODE (op0) == ADDR_EXPR
-                 && TREE_CODE (op1) == INTEGER_CST)
-               {
-                 tree off = fold_convert (ptr_type_node, op1);
-                 return build_fold_addr_expr_loc
-                          (loc,
-                           fold_build2 (MEM_REF,
-                                        TREE_TYPE (TREE_TYPE (op0)),
-                                        unshare_expr (op0), off));
-               }
+           /* Translate &x + CST into an invariant form suitable for
+              further propagation.  */
+           if (subcode == POINTER_PLUS_EXPR)
+             {
+               /* Handle binary operators that can appear in GIMPLE form.  */
+               tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
+               tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
 
-              return fold_binary_loc (loc, subcode,
-                                     gimple_expr_type (stmt), op0, op1);
-            }
+               if (TREE_CODE (op0) == ADDR_EXPR
+                   && TREE_CODE (op1) == INTEGER_CST)
+                 {
+                   tree off = fold_convert (ptr_type_node, op1);
+                   return build_fold_addr_expr_loc
+                       (loc,
+                        fold_build2 (MEM_REF,
+                                     TREE_TYPE (TREE_TYPE (op0)),
+                                     unshare_expr (op0), off));
+                 }
+             }
+           return NULL_TREE;
 
           case GIMPLE_TERNARY_RHS:
             {
@@ -5037,20 +5035,6 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree),
               tree op0 = (*valueize) (gimple_assign_rhs1 (stmt));
               tree op1 = (*valueize) (gimple_assign_rhs2 (stmt));
               tree op2 = (*valueize) (gimple_assign_rhs3 (stmt));
-
-             /* Fold embedded expressions in ternary codes.  */
-             if ((subcode == COND_EXPR
-                  || subcode == VEC_COND_EXPR)
-                 && COMPARISON_CLASS_P (op0))
-               {
-                 tree op00 = (*valueize) (TREE_OPERAND (op0, 0));
-                 tree op01 = (*valueize) (TREE_OPERAND (op0, 1));
-                 tree tem = fold_binary_loc (loc, TREE_CODE (op0),
-                                             TREE_TYPE (op0), op00, op01);
-                 if (tem)
-                   op0 = tem;
-               }
-
               return fold_ternary_loc (loc, subcode,
                                       gimple_expr_type (stmt), op0, op1, op2);
             }