@@ -140,7 +140,7 @@ class operator_equal : public range_operator
140140 const irange &rh) const final override ;
141141 // Check op1 and op2 for compatibility.
142142 bool operand_check_p (tree, tree t1, tree t2) const final override
143- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
143+ { return range_compatible_p (t1, t2); }
144144};
145145
146146class operator_not_equal : public range_operator
@@ -179,7 +179,7 @@ class operator_not_equal : public range_operator
179179 const irange &rh) const final override ;
180180 // Check op1 and op2 for compatibility.
181181 bool operand_check_p (tree, tree t1, tree t2) const final override
182- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
182+ { return range_compatible_p (t1, t2); }
183183};
184184
185185class operator_lt : public range_operator
@@ -215,7 +215,7 @@ class operator_lt : public range_operator
215215 const irange &rh) const final override ;
216216 // Check op1 and op2 for compatibility.
217217 bool operand_check_p (tree, tree t1, tree t2) const final override
218- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
218+ { return range_compatible_p (t1, t2); }
219219};
220220
221221class operator_le : public range_operator
@@ -254,7 +254,7 @@ class operator_le : public range_operator
254254 const irange &rh) const final override ;
255255 // Check op1 and op2 for compatibility.
256256 bool operand_check_p (tree, tree t1, tree t2) const final override
257- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
257+ { return range_compatible_p (t1, t2); }
258258};
259259
260260class operator_gt : public range_operator
@@ -292,7 +292,7 @@ class operator_gt : public range_operator
292292 const irange &rh) const final override ;
293293 // Check op1 and op2 for compatibility.
294294 bool operand_check_p (tree, tree t1, tree t2) const final override
295- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
295+ { return range_compatible_p (t1, t2); }
296296};
297297
298298class operator_ge : public range_operator
@@ -331,7 +331,7 @@ class operator_ge : public range_operator
331331 const irange &rh) const final override ;
332332 // Check op1 and op2 for compatibility.
333333 bool operand_check_p (tree, tree t1, tree t2) const final override
334- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
334+ { return range_compatible_p (t1, t2); }
335335};
336336
337337class operator_identity : public range_operator
@@ -429,8 +429,7 @@ class operator_plus : public range_operator
429429 relation_trio = TRIO_VARYING) const ;
430430 // Check compatibility of all operands.
431431 bool operand_check_p (tree t1, tree t2, tree t3) const final override
432- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
433- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
432+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
434433private:
435434 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
436435 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -459,7 +458,7 @@ class operator_abs : public range_operator
459458 const irange &rh) const final override ;
460459 // Check compatibility of LHS and op1.
461460 bool operand_check_p (tree t1, tree t2, tree) const final override
462- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
461+ { return range_compatible_p (t1, t2); }
463462private:
464463 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
465464 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -503,8 +502,7 @@ class operator_minus : public range_operator
503502 relation_trio = TRIO_VARYING) const ;
504503 // Check compatibility of all operands.
505504 bool operand_check_p (tree t1, tree t2, tree t3) const final override
506- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
507- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
505+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
508506private:
509507 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
510508 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -535,7 +533,7 @@ class operator_negate : public range_operator
535533 relation_trio rel = TRIO_VARYING) const final override ;
536534 // Check compatibility of LHS and op1.
537535 bool operand_check_p (tree t1, tree t2, tree) const final override
538- { return TYPE_PRECISION (t1) == TYPE_PRECISION ( t2); }
536+ { return range_compatible_p (t1, t2); }
539537};
540538
541539
@@ -589,8 +587,7 @@ class operator_mult : public cross_product_operator
589587 relation_trio = TRIO_VARYING) const ;
590588 // Check compatibility of all operands.
591589 bool operand_check_p (tree t1, tree t2, tree t3) const final override
592- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
593- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
590+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
594591};
595592
596593class operator_addr_expr : public range_operator
@@ -621,8 +618,7 @@ class operator_bitwise_not : public range_operator
621618 const irange &rh) const final override ;
622619 // Check compatibility of all operands.
623620 bool operand_check_p (tree t1, tree t2, tree t3) const final override
624- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
625- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
621+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
626622};
627623
628624class operator_bitwise_xor : public range_operator
@@ -645,8 +641,7 @@ class operator_bitwise_xor : public range_operator
645641 const irange &rh) const final override ;
646642 // Check compatibility of all operands.
647643 bool operand_check_p (tree t1, tree t2, tree t3) const final override
648- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
649- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
644+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
650645private:
651646 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
652647 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -672,8 +667,7 @@ class operator_bitwise_and : public range_operator
672667 const irange &rh) const override ;
673668 // Check compatibility of all operands.
674669 bool operand_check_p (tree t1, tree t2, tree t3) const final override
675- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
676- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
670+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
677671protected:
678672 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
679673 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -698,8 +692,7 @@ class operator_bitwise_or : public range_operator
698692 const irange &rh) const override ;
699693 // Check compatibility of all operands.
700694 bool operand_check_p (tree t1, tree t2, tree t3) const final override
701- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
702- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
695+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
703696protected:
704697 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
705698 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -713,8 +706,7 @@ class operator_min : public range_operator
713706 const irange &rh) const override ;
714707 // Check compatibility of all operands.
715708 bool operand_check_p (tree t1, tree t2, tree t3) const final override
716- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
717- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
709+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
718710protected:
719711 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
720712 const wide_int &lh_ub, const wide_int &rh_lb,
@@ -728,8 +720,7 @@ class operator_max : public range_operator
728720 const irange &rh) const override ;
729721 // Check compatibility of all operands.
730722 bool operand_check_p (tree t1, tree t2, tree t3) const final override
731- { return (TYPE_PRECISION (t1) == TYPE_PRECISION (t2)
732- && TYPE_PRECISION (t1) == TYPE_PRECISION (t3)); }
723+ { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
733724protected:
734725 void wi_fold (irange &r, tree type, const wide_int &lh_lb,
735726 const wide_int &lh_ub, const wide_int &rh_lb,
0 commit comments