OSDN Git Service

* tree-vrp.c (extract_range_from_binary_expr_1): Remove duplicated
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Jan 2012 20:43:43 +0000 (20:43 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Jan 2012 20:43:43 +0000 (20:43 +0000)
condition.
(extract_range_from_unary_expr_1): Avoid useless computations.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182923 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-vrp.c

index 1bd3bb2..7991f1a 100644 (file)
@@ -1,3 +1,9 @@
+2012-01-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-vrp.c (extract_range_from_binary_expr_1): Remove duplicated
+       condition.
+       (extract_range_from_unary_expr_1): Avoid useless computations.
+
 2012-01-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/51767
index 494cdd3..4a018f7 100644 (file)
@@ -2579,17 +2579,13 @@ extract_range_from_binary_expr_1 (value_range_t *vr,
         behavior from the shift operation.  We cannot even trust
         SHIFT_COUNT_TRUNCATED at this stage, because that applies to rtl
         shifts, and the operation at the tree level may be widened.  */
-      if (code == RSHIFT_EXPR)
+      if (vr1.type != VR_RANGE
+         || !value_range_nonnegative_p (&vr1)
+         || TREE_CODE (vr1.max) != INTEGER_CST
+         || compare_tree_int (vr1.max, TYPE_PRECISION (expr_type) - 1) == 1)
        {
-         if (vr1.type != VR_RANGE
-             || !value_range_nonnegative_p (&vr1)
-             || TREE_CODE (vr1.max) != INTEGER_CST
-             || compare_tree_int (vr1.max,
-                                  TYPE_PRECISION (expr_type) - 1) == 1)
-           {
-             set_value_range_to_varying (vr);
-             return;
-           }
+         set_value_range_to_varying (vr);
+         return;
        }
 
       extract_range_from_multiplicative_op_1 (vr, code, &vr0, &vr1);
@@ -2990,16 +2986,18 @@ extract_range_from_unary_expr_1 (value_range_t *vr,
                         size_int (TYPE_PRECISION (outer_type)))))))
        {
          tree new_min, new_max;
-         new_min = force_fit_type_double (outer_type,
-                                          tree_to_double_int (vr0.min),
-                                          0, false);
-         new_max = force_fit_type_double (outer_type,
-                                          tree_to_double_int (vr0.max),
-                                          0, false);
          if (is_overflow_infinity (vr0.min))
            new_min = negative_overflow_infinity (outer_type);
+         else
+           new_min = force_fit_type_double (outer_type,
+                                            tree_to_double_int (vr0.min),
+                                            0, false);
          if (is_overflow_infinity (vr0.max))
            new_max = positive_overflow_infinity (outer_type);
+         else
+           new_max = force_fit_type_double (outer_type,
+                                            tree_to_double_int (vr0.max),
+                                            0, false);
          set_and_canonicalize_value_range (vr, vr0.type,
                                            new_min, new_max, NULL);
          return;