Remove range_intersect, range_invert, and range_union.
From-SVN: r278258
This commit is contained in:
parent
270082a7e1
commit
fae08a0507
4 changed files with 34 additions and 72 deletions
|
@ -1,3 +1,16 @@
|
|||
2019-11-14 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* range-op.cc (*operator*::*range): Remove calls to
|
||||
range_intersect, range_invert, and range_union in favor of calling
|
||||
the in-place API methods.
|
||||
(range_tests): Same.
|
||||
* range.cc (range_intersect): Remove.
|
||||
(range_union): Remove.
|
||||
(range_invert): Remove.
|
||||
* range.h (range_intersect): Remove.
|
||||
(range_union): Remove.
|
||||
(range_intersect): Remove.
|
||||
|
||||
2019-11-14 Ilya Leoshkevich <iii@linux.ibm.com>
|
||||
|
||||
PR rtl-optimization/92430
|
||||
|
|
|
@ -396,7 +396,8 @@ operator_equal::fold_range (value_range &r, tree type,
|
|||
{
|
||||
// If ranges do not intersect, we know the range is not equal,
|
||||
// otherwise we don't know anything for sure.
|
||||
r = range_intersect (op1, op2);
|
||||
r = op1;
|
||||
r.intersect (op2);
|
||||
if (r.undefined_p ())
|
||||
r = range_false (type);
|
||||
else
|
||||
|
@ -415,7 +416,10 @@ operator_equal::op1_range (value_range &r, tree type,
|
|||
// If the result is false, the only time we know anything is
|
||||
// if OP2 is a constant.
|
||||
if (wi::eq_p (op2.lower_bound(), op2.upper_bound()))
|
||||
r = range_invert (op2);
|
||||
{
|
||||
r = op2;
|
||||
r.invert ();
|
||||
}
|
||||
else
|
||||
r.set_varying (type);
|
||||
break;
|
||||
|
@ -476,7 +480,8 @@ operator_not_equal::fold_range (value_range &r, tree type,
|
|||
{
|
||||
// If ranges do not intersect, we know the range is not equal,
|
||||
// otherwise we don't know anything for sure.
|
||||
r = range_intersect (op1, op2);
|
||||
r = op1;
|
||||
r.intersect (op2);
|
||||
if (r.undefined_p ())
|
||||
r = range_true (type);
|
||||
else
|
||||
|
@ -495,7 +500,10 @@ operator_not_equal::op1_range (value_range &r, tree type,
|
|||
// If the result is true, the only time we know anything is if
|
||||
// OP2 is a constant.
|
||||
if (wi::eq_p (op2.lower_bound(), op2.upper_bound()))
|
||||
r = range_invert (op2);
|
||||
{
|
||||
r = op2;
|
||||
r.invert ();
|
||||
}
|
||||
else
|
||||
r.set_varying (type);
|
||||
break;
|
||||
|
@ -1974,7 +1982,8 @@ operator_logical_or::fold_range (value_range &r, tree type ATTRIBUTE_UNUSED,
|
|||
if (empty_range_check (r, lh, rh))
|
||||
return;
|
||||
|
||||
r = range_union (lh, rh);
|
||||
r = lh;
|
||||
r.union_ (rh);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -2221,7 +2230,10 @@ operator_logical_not::fold_range (value_range &r, tree type,
|
|||
if (lh.varying_p () || lh.undefined_p ())
|
||||
r = lh;
|
||||
else
|
||||
r = range_invert (lh);
|
||||
{
|
||||
r = lh;
|
||||
r.invert ();
|
||||
}
|
||||
gcc_checking_assert (lh.type() == type);
|
||||
return;
|
||||
}
|
||||
|
@ -2232,10 +2244,9 @@ operator_logical_not::op1_range (value_range &r,
|
|||
const value_range &lhs,
|
||||
const value_range &op2 ATTRIBUTE_UNUSED) const
|
||||
{
|
||||
if (lhs.varying_p () || lhs.undefined_p ())
|
||||
r = lhs;
|
||||
else
|
||||
r = range_invert (lhs);
|
||||
r = lhs;
|
||||
if (!lhs.varying_p () && !lhs.undefined_p ())
|
||||
r.invert ();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -3033,13 +3044,6 @@ range_tests ()
|
|||
r1.union_ (r2);
|
||||
ASSERT_TRUE (r0 == r1);
|
||||
|
||||
// [10,20] U [30,40] ==> [10,20][30,40].
|
||||
r0 = value_range (INT (10), INT (20));
|
||||
r1 = value_range (INT (30), INT (40));
|
||||
r0.union_ (r1);
|
||||
ASSERT_TRUE (r0 == range_union (value_range (INT (10), INT (20)),
|
||||
value_range (INT (30), INT (40))));
|
||||
|
||||
// Make sure NULL and non-NULL of pointer types work, and that
|
||||
// inverses of them are consistent.
|
||||
tree voidp = build_pointer_type (void_type_node);
|
||||
|
@ -3049,27 +3053,12 @@ range_tests ()
|
|||
r0.invert ();
|
||||
ASSERT_TRUE (r0 == r1);
|
||||
|
||||
// [10,20][30,40] U [25,70] => [10,70].
|
||||
r0 = range_union (value_range (INT (10), INT (20)),
|
||||
value_range (INT (30), INT (40)));
|
||||
r1 = value_range (INT (25), INT (70));
|
||||
r0.union_ (r1);
|
||||
ASSERT_TRUE (r0 == range_union (value_range (INT (10), INT (20)),
|
||||
value_range (INT (25), INT (70))));
|
||||
|
||||
// [10,20] U [15, 30] => [10, 30].
|
||||
r0 = value_range (INT (10), INT (20));
|
||||
r1 = value_range (INT (15), INT (30));
|
||||
r0.union_ (r1);
|
||||
ASSERT_TRUE (r0 == value_range (INT (10), INT (30)));
|
||||
|
||||
// [10,20] U [25,25] => [10,20][25,25].
|
||||
r0 = value_range (INT (10), INT (20));
|
||||
r1 = value_range (INT (25), INT (25));
|
||||
r0.union_ (r1);
|
||||
ASSERT_TRUE (r0 == range_union (value_range (INT (10), INT (20)),
|
||||
value_range (INT (25), INT (25))));
|
||||
|
||||
// [15,40] U [] => [15,40].
|
||||
r0 = value_range (INT (15), INT (40));
|
||||
r1.set_undefined ();
|
||||
|
@ -3094,19 +3083,6 @@ range_tests ()
|
|||
r0.intersect (r1);
|
||||
ASSERT_TRUE (r0 == value_range (INT (15), INT (20)));
|
||||
|
||||
// [10,20][30,40] ^ [40,50] => [40,40].
|
||||
r0 = range_union (value_range (INT (10), INT (20)),
|
||||
value_range (INT (30), INT (40)));
|
||||
r1 = value_range (INT (40), INT (50));
|
||||
r0.intersect (r1);
|
||||
ASSERT_TRUE (r0 == value_range (INT (40), INT (40)));
|
||||
|
||||
// Test non-destructive intersection.
|
||||
r0 = rold = value_range (INT (10), INT (20));
|
||||
ASSERT_FALSE (range_intersect (r0, value_range (INT (15),
|
||||
INT (30))).undefined_p ());
|
||||
ASSERT_TRUE (r0 == rold);
|
||||
|
||||
// Test the internal sanity of wide_int's wrt HWIs.
|
||||
ASSERT_TRUE (wi::max_value (TYPE_PRECISION (boolean_type_node),
|
||||
TYPE_SIGN (boolean_type_node))
|
||||
|
|
24
gcc/range.cc
24
gcc/range.cc
|
@ -29,30 +29,6 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "ssa.h"
|
||||
#include "range.h"
|
||||
|
||||
value_range
|
||||
range_intersect (const value_range &r1, const value_range &r2)
|
||||
{
|
||||
value_range tmp (r1);
|
||||
tmp.intersect (r2);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
value_range
|
||||
range_invert (const value_range &r1)
|
||||
{
|
||||
value_range tmp (r1);
|
||||
tmp.invert ();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
value_range
|
||||
range_union (const value_range &r1, const value_range &r2)
|
||||
{
|
||||
value_range tmp (r1);
|
||||
tmp.union_ (r2);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
value_range
|
||||
range_zero (tree type)
|
||||
{
|
||||
|
|
|
@ -23,9 +23,6 @@ along with GCC; see the file COPYING3. If not see
|
|||
|
||||
value_range range_zero (tree type);
|
||||
value_range range_nonzero (tree type);
|
||||
value_range range_intersect (const value_range &, const value_range &);
|
||||
value_range range_union (const value_range &, const value_range &);
|
||||
value_range range_invert (const value_range &);
|
||||
value_range range_positives (tree type);
|
||||
value_range range_negatives (tree type);
|
||||
#endif // GCC_RANGE_H
|
||||
|
|
Loading…
Add table
Reference in a new issue