tree-vrp.c (extract_range_from_multiplicative_op): Add type parameter and use it...
authorRichard Biener <rguenther@suse.de>
Thu, 25 Jul 2019 12:05:19 +0000 (12:05 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 25 Jul 2019 12:05:19 +0000 (12:05 +0000)
2019-07-25  Richard Biener  <rguenther@suse.de>

* tree-vrp.c (extract_range_from_multiplicative_op): Add
type parameter and use it instead of guessing expression
type from the first operand.
(extract_range_from_binary_expr): Pass expr_type down.

From-SVN: r273797

gcc/ChangeLog
gcc/tree-vrp.c

index 05c8263630688c15ce01322403d087fda9fbb355..87a4ecd1d22d1d4dae84583894336a5c9949bdbf 100644 (file)
@@ -1,3 +1,10 @@
+2019-07-25  Richard Biener  <rguenther@suse.de>
+
+       * tree-vrp.c (extract_range_from_multiplicative_op): Add
+       type parameter and use it instead of guessing expression
+       type from the first operand.
+       (extract_range_from_binary_expr): Pass expr_type down.
+
 2019-07-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm.md (SATrev): Change to code attribute.
index add6ad54bc8e035d056acb713d1b7ad9afc8ef26..9ba6f80b626731f4b8d06b89311f2789ae036f9b 100644 (file)
@@ -1238,7 +1238,7 @@ extract_range_into_wide_ints (const value_range_base *vr,
 
 static void
 extract_range_from_multiplicative_op (value_range_base *vr,
-                                     enum tree_code code,
+                                     enum tree_code code, tree type,
                                      const value_range_base *vr0,
                                      const value_range_base *vr1)
 {
@@ -1253,7 +1253,6 @@ extract_range_from_multiplicative_op (value_range_base *vr,
   gcc_assert (vr0->kind () == VR_RANGE
              && vr0->kind () == vr1->kind ());
 
-  tree type = vr0->type ();
   wide_int res_lb, res_ub;
   wide_int vr0_lb = wi::to_wide (vr0->min ());
   wide_int vr0_ub = wi::to_wide (vr0->max ());
@@ -1785,7 +1784,7 @@ extract_range_from_binary_expr (value_range_base *vr,
          vr->set_varying ();
          return;
        }
-      extract_range_from_multiplicative_op (vr, code, &vr0, &vr1);
+      extract_range_from_multiplicative_op (vr, code, expr_type, &vr0, &vr1);
       return;
     }
   else if (code == RSHIFT_EXPR
@@ -1806,7 +1805,8 @@ extract_range_from_binary_expr (value_range_base *vr,
              if (vr0.kind () != VR_RANGE || vr0.symbolic_p ())
                vr0.set (VR_RANGE, vrp_val_min (expr_type),
                         vrp_val_max (expr_type));
-             extract_range_from_multiplicative_op (vr, code, &vr0, &vr1);
+             extract_range_from_multiplicative_op (vr, code, expr_type,
+                                                   &vr0, &vr1);
              return;
            }
          else if (code == LSHIFT_EXPR