aboutsummaryrefslogtreecommitdiff
path: root/gcc/range-op-float.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2022-10-13 18:03:58 -0400
committerAndrew MacLeod <amacleod@redhat.com>2022-10-17 09:20:39 -0400
commitb565ac19264a5827162d28537bccc8531c25e817 (patch)
tree52a1122cf961dd409f02c3eb5c34811ed5e1f3e7 /gcc/range-op-float.cc
parent04874fedae8074b252abbd70fea68bf3dd0a605b (diff)
downloadgcc-b565ac19264a5827162d28537bccc8531c25e817.zip
gcc-b565ac19264a5827162d28537bccc8531c25e817.tar.gz
gcc-b565ac19264a5827162d28537bccc8531c25e817.tar.bz2
Add relation_trio class for range-ops.
There are 3 possible relations range-ops might care about, but only the one most likely to be needed is supplied. This patch provides a new class relation_trio which allows 3 relations to be passed in a single word. fold_range (), op1_range (), and op2_range () are adjusted to take a relation_trio class instead of a relation_kind, then the routine can extract which relation it wants to work with. * gimple-range-fold.cc (fold_using_range::range_of_range_op): Provide relation_trio class. * gimple-range-gori.cc (gori_compute::refine_using_relation): Provide relation_trio class. (gori_compute::refine_using_relation): Ditto. (gori_compute::compute_operand1_range): Provide lhs_op2 and op1_op2 relations via relation_trio class. (gori_compute::compute_operand2_range): Ditto. * gimple-range-op.cc (gimple_range_op_handler::calc_op1): Use relation_trio instead of relation_kind. (gimple_range_op_handler::calc_op2): Ditto. (*::fold_range): Ditto. * gimple-range-op.h (gimple_range_op::calc_op1): Adjust prototypes. (gimple_range_op::calc_op2): Adjust prototypes. * range-op-float.cc (*::fold_range): Use relation_trio instead of relation_kind. (*::op1_range): Ditto. (*::op2_range): Ditto. * range-op.cc (*::fold_range): Use relation_trio instead of relation_kind. (*::op1_range): Ditto. (*::op2_range): Ditto. * range-op.h (class range_operator): Adjust prototypes. (class range_operator_float): Ditto. (class range_op_handler): Adjust prototypes. (relop_early_resolve): Pickup op1_op2 relation from relation_trio. * value-relation.cc (VREL_LAST): Adjust use to be one past the end of the enum. (relation_oracle::validate_relation): Use relation_trio in call to fold_range. * value-relation.h (enum relation_kind_t): Add VREL_LAST as final element. (class relation_trio): New. (TRIO_VARYING, TRIO_SHIFT, TRIO_MASK): New.
Diffstat (limited to 'gcc/range-op-float.cc')
-rw-r--r--gcc/range-op-float.cc170
1 files changed, 87 insertions, 83 deletions
diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index 6cf2180..e733479 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -53,7 +53,7 @@ range_operator_float::fold_range (frange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const frange &lh ATTRIBUTE_UNUSED,
const frange &rh ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -63,7 +63,7 @@ range_operator_float::fold_range (irange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const frange &lh ATTRIBUTE_UNUSED,
const irange &rh ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -73,7 +73,7 @@ range_operator_float::fold_range (irange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const frange &lh ATTRIBUTE_UNUSED,
const frange &rh ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -83,7 +83,7 @@ range_operator_float::op1_range (frange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const frange &lhs ATTRIBUTE_UNUSED,
const frange &op2 ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -93,7 +93,7 @@ range_operator_float::op1_range (frange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const irange &lhs ATTRIBUTE_UNUSED,
const frange &op2 ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -103,7 +103,7 @@ range_operator_float::op2_range (frange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const frange &lhs ATTRIBUTE_UNUSED,
const frange &op1 ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -113,7 +113,7 @@ range_operator_float::op2_range (frange &r ATTRIBUTE_UNUSED,
tree type ATTRIBUTE_UNUSED,
const irange &lhs ATTRIBUTE_UNUSED,
const frange &op1 ATTRIBUTE_UNUSED,
- relation_kind rel ATTRIBUTE_UNUSED) const
+ relation_trio) const
{
return false;
}
@@ -188,7 +188,7 @@ finite_operands_p (const frange &op1, const frange &op2)
inline bool
frelop_early_resolve (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel, relation_kind my_rel)
+ relation_trio rel, relation_kind my_rel)
{
// If either operand is undefined, return VARYING.
if (empty_range_varying (r, type, op1, op2))
@@ -324,14 +324,14 @@ class foperator_identity : public range_operator_float
public:
bool fold_range (frange &r, tree type ATTRIBUTE_UNUSED,
const frange &op1, const frange &op2 ATTRIBUTE_UNUSED,
- relation_kind = VREL_VARYING) const final override
+ relation_trio = TRIO_VARYING) const final override
{
r = op1;
return true;
}
bool op1_range (frange &r, tree type ATTRIBUTE_UNUSED,
const frange &lhs, const frange &op2 ATTRIBUTE_UNUSED,
- relation_kind = VREL_VARYING) const final override
+ relation_trio = TRIO_VARYING) const final override
{
r = lhs;
return true;
@@ -348,26 +348,26 @@ class foperator_equal : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return equal_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
- return op1_range (r, type, lhs, op1, rel);
+ return op1_range (r, type, lhs, op1, rel.swap_op1_op2 ());
}
} fop_equal;
bool
foperator_equal::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_EQ))
return true;
@@ -403,8 +403,9 @@ bool
foperator_equal::op1_range (frange &r, tree type,
const irange &lhs,
const frange &op2,
- relation_kind rel) const
+ relation_trio trio) const
{
+ relation_kind rel = trio.op1_op2 ();
switch (get_bool_state (r, lhs, type))
{
case BRS_TRUE:
@@ -455,20 +456,20 @@ class foperator_not_equal : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override;
+ relation_trio rel = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return not_equal_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_not_equal;
bool
foperator_not_equal::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_NE))
return true;
@@ -505,8 +506,9 @@ bool
foperator_not_equal::op1_range (frange &r, tree type,
const irange &lhs,
const frange &op2,
- relation_kind rel) const
+ relation_trio trio) const
{
+ relation_kind rel = trio.op1_op2 ();
switch (get_bool_state (r, lhs, type))
{
case BRS_TRUE:
@@ -557,23 +559,23 @@ class foperator_lt : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return lt_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_lt;
bool
foperator_lt::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_LT))
return true;
@@ -599,7 +601,7 @@ foperator_lt::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -634,7 +636,7 @@ foperator_lt::op2_range (frange &r,
tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -673,23 +675,23 @@ class foperator_le : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override;
+ relation_trio rel = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return le_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override;
+ relation_trio rel = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind rel = VREL_VARYING) const final override;
+ relation_trio rel = TRIO_VARYING) const final override;
} fop_le;
bool
foperator_le::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_LE))
return true;
@@ -715,7 +717,7 @@ foperator_le::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -746,7 +748,7 @@ foperator_le::op2_range (frange &r,
tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -781,23 +783,23 @@ class foperator_gt : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return gt_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_gt;
bool
foperator_gt::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_GT))
return true;
@@ -823,7 +825,7 @@ foperator_gt::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -858,7 +860,7 @@ foperator_gt::op2_range (frange &r,
tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -897,23 +899,23 @@ class foperator_ge : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
relation_kind op1_op2_relation (const irange &lhs) const final override
{
return ge_op1_op2_relation (lhs);
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_ge;
bool
foperator_ge::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel) const
+ relation_trio rel) const
{
if (frelop_early_resolve (r, type, op1, op2, rel, VREL_GE))
return true;
@@ -939,7 +941,7 @@ foperator_ge::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -969,7 +971,7 @@ bool
foperator_ge::op2_range (frange &r, tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1008,22 +1010,22 @@ class foperator_unordered : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
- return op1_range (r, type, lhs, op1, rel);
+ return op1_range (r, type, lhs, op1, rel.swap_op1_op2 ());
}
} fop_unordered;
bool
foperator_unordered::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind) const
+ relation_trio) const
{
// UNORDERED is TRUE if either operand is a NAN.
if (op1.known_isnan () || op2.known_isnan ())
@@ -1040,8 +1042,9 @@ bool
foperator_unordered::op1_range (frange &r, tree type,
const irange &lhs,
const frange &op2,
- relation_kind rel) const
+ relation_trio trio) const
{
+ relation_kind rel = trio.op1_op2 ();
switch (get_bool_state (r, lhs, type))
{
case BRS_TRUE:
@@ -1081,22 +1084,22 @@ class foperator_ordered : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
- return op1_range (r, type, lhs, op1, rel);
+ return op1_range (r, type, lhs, op1, rel.swap_op1_op2 ());
}
} fop_ordered;
bool
foperator_ordered::fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind) const
+ relation_trio) const
{
if (op1.known_isnan () || op2.known_isnan ())
r = range_false (type);
@@ -1111,8 +1114,9 @@ bool
foperator_ordered::op1_range (frange &r, tree type,
const irange &lhs,
const frange &op2,
- relation_kind rel) const
+ relation_trio trio) const
{
+ relation_kind rel = trio.op1_op2 ();
switch (get_bool_state (r, lhs, type))
{
case BRS_TRUE:
@@ -1148,7 +1152,7 @@ class foperator_negate : public range_operator_float
public:
bool fold_range (frange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind = VREL_VARYING) const final override
+ relation_trio = TRIO_VARYING) const final override
{
if (empty_range_varying (r, type, op1, op2))
return true;
@@ -1181,7 +1185,7 @@ public:
}
bool op1_range (frange &r, tree type,
const frange &lhs, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
return fold_range (r, type, lhs, op2, rel);
}
@@ -1194,16 +1198,16 @@ class foperator_abs : public range_operator_float
public:
bool fold_range (frange &r, tree type,
const frange &op1, const frange &,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op1_range (frange &r, tree type,
const frange &lhs, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override;
+ relation_trio rel = TRIO_VARYING) const final override;
} fop_abs;
bool
foperator_abs::fold_range (frange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind) const
+ relation_trio) const
{
if (empty_range_varying (r, type, op1, op2))
return true;
@@ -1253,7 +1257,7 @@ foperator_abs::fold_range (frange &r, tree type,
bool
foperator_abs::op1_range (frange &r, tree type,
const frange &lhs, const frange &op2,
- relation_kind) const
+ relation_trio) const
{
if (empty_range_varying (r, type, lhs, op2))
return true;
@@ -1282,7 +1286,7 @@ class foperator_unordered_lt : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
if (op1.known_isnan () || op2.known_isnan ())
{
@@ -1311,7 +1315,7 @@ class foperator_unordered_le : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
if (op1.known_isnan () || op2.known_isnan ())
{
@@ -1332,16 +1336,16 @@ public:
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_unordered_le;
bool
foperator_unordered_le::op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1365,7 +1369,7 @@ foperator_unordered_le::op2_range (frange &r,
tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1392,7 +1396,7 @@ class foperator_unordered_gt : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
if (op1.known_isnan () || op2.known_isnan ())
{
@@ -1413,10 +1417,10 @@ public:
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_unordered_gt;
bool
@@ -1424,7 +1428,7 @@ foperator_unordered_gt::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1448,7 +1452,7 @@ foperator_unordered_gt::op2_range (frange &r,
tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1475,7 +1479,7 @@ class foperator_unordered_ge : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
if (op1.known_isnan () || op2.known_isnan ())
{
@@ -1496,10 +1500,10 @@ public:
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
} fop_unordered_ge;
bool
@@ -1507,7 +1511,7 @@ foperator_unordered_ge::op1_range (frange &r,
tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1530,7 +1534,7 @@ bool
foperator_unordered_ge::op2_range (frange &r, tree type,
const irange &lhs,
const frange &op1,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{
@@ -1557,7 +1561,7 @@ class foperator_unordered_equal : public range_operator_float
public:
bool fold_range (irange &r, tree type,
const frange &op1, const frange &op2,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
if (op1.known_isnan () || op2.known_isnan ())
{
@@ -1578,12 +1582,12 @@ public:
}
bool op1_range (frange &r, tree type,
const irange &lhs, const frange &op2,
- relation_kind = VREL_VARYING) const final override;
+ relation_trio = TRIO_VARYING) const final override;
bool op2_range (frange &r, tree type,
const irange &lhs, const frange &op1,
- relation_kind rel = VREL_VARYING) const final override
+ relation_trio rel = TRIO_VARYING) const final override
{
- return op1_range (r, type, lhs, op1, rel);
+ return op1_range (r, type, lhs, op1, rel.swap_op1_op2 ());
}
} fop_unordered_equal;
@@ -1591,7 +1595,7 @@ bool
foperator_unordered_equal::op1_range (frange &r, tree type,
const irange &lhs,
const frange &op2,
- relation_kind) const
+ relation_trio) const
{
switch (get_bool_state (r, lhs, type))
{