re PR tree-optimization/65774 (FAIL: gcc.dg/builtin-arith-overflow-1.c (internal...
authorRichard Biener <rguenther@suse.de>
Thu, 16 Apr 2015 12:10:34 +0000 (12:10 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 16 Apr 2015 12:10:34 +0000 (12:10 +0000)
2015-04-16  Richard Biener  <rguenther@suse.de>

PR tree-optimization/65774
* tree-ssa-ccp.c (evaluate_stmt): Constrain types we invoke
bit-value tracking on.

From-SVN: r222147

gcc/ChangeLog
gcc/tree-ssa-ccp.c

index c4d0c150736d038353433d0f0b2f02f77e459431..39a73a0e8724e065f60c120a59feeadeff0a2443 100644 (file)
@@ -1,3 +1,9 @@
+2015-04-16  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/65774
+       * tree-ssa-ccp.c (evaluate_stmt): Constrain types we invoke
+       bit-value tracking on.
+
 2015-04-16  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/64277
index 996296b4e366f8fdf1cd2830762395f6f287db63..79f6afbed9820b090a625bbc8201bfc861e92759 100644 (file)
@@ -1772,35 +1772,28 @@ evaluate_stmt (gimple stmt)
        {
          enum tree_code subcode = gimple_assign_rhs_code (stmt);
          tree rhs1 = gimple_assign_rhs1 (stmt);
-         switch (get_gimple_rhs_class (subcode))
-           {
-           case GIMPLE_SINGLE_RHS:
-             if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
-                 || POINTER_TYPE_P (TREE_TYPE (rhs1)))
-               val = get_value_for_expr (rhs1, true);
-             break;
+         tree lhs = gimple_assign_lhs (stmt);
+         if ((INTEGRAL_TYPE_P (TREE_TYPE (lhs))
+              || POINTER_TYPE_P (TREE_TYPE (lhs)))
+             && (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
+                 || POINTER_TYPE_P (TREE_TYPE (rhs1))))
+           switch (get_gimple_rhs_class (subcode))
+             {
+             case GIMPLE_SINGLE_RHS:
+               val = get_value_for_expr (rhs1, true);
+               break;
 
-           case GIMPLE_UNARY_RHS:
-             if ((INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
-                  || POINTER_TYPE_P (TREE_TYPE (rhs1)))
-                 && (INTEGRAL_TYPE_P (gimple_expr_type (stmt))
-                     || POINTER_TYPE_P (gimple_expr_type (stmt))))
-               val = bit_value_unop (subcode, gimple_expr_type (stmt), rhs1);
-             break;
+             case GIMPLE_UNARY_RHS:
+               val = bit_value_unop (subcode, TREE_TYPE (lhs), rhs1);
+               break;
 
-           case GIMPLE_BINARY_RHS:
-             if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
-                 || POINTER_TYPE_P (TREE_TYPE (rhs1)))
-               {
-                 tree lhs = gimple_assign_lhs (stmt);
-                 tree rhs2 = gimple_assign_rhs2 (stmt);
-                 val = bit_value_binop (subcode,
-                                        TREE_TYPE (lhs), rhs1, rhs2);
-               }
-             break;
+             case GIMPLE_BINARY_RHS:
+               val = bit_value_binop (subcode, TREE_TYPE (lhs), rhs1,
+                                      gimple_assign_rhs2 (stmt));
+               break;
 
-           default:;
-           }
+             default:;
+             }
        }
       else if (code == GIMPLE_COND)
        {