22#ifndef GCC_RANGE_OP_MIXED_H
23#define GCC_RANGE_OP_MIXED_H
146 const irange &)
const final override;
148 const prange &)
const final override;
150 const frange &)
const final override;
152 const irange &rh)
const final override;
197 const irange &)
const final override;
199 const prange &)
const final override;
201 const frange &)
const final override;
203 const irange &rh)
const final override;
245 const irange &)
const final override;
247 const prange &)
const final override;
249 const frange &)
const final override;
251 const irange &rh)
const final override;
296 const irange &)
const final override;
298 const prange &)
const final override;
300 const frange &)
const final override;
302 const irange &rh)
const final override;
346 const irange &)
const final override;
348 const prange &)
const final override;
350 const frange &)
const final override;
352 const irange &rh)
const final override;
397 const irange &)
const final override;
399 const prange &)
const final override;
401 const frange &)
const final override;
403 const irange &rh)
const final override;
501 const irange &rh)
const final override;
505 const irange &outer)
const;
507 const irange &outer)
const;
539 const irange &rh)
const final override;
549 const wide_int &rh_ub)
const final override;
572 const irange &rh)
const final override;
579 const wide_int &rh_ub)
const final override;
615 const irange &rh)
const final override;
625 const wide_int &rh_ub)
const final override;
691 const irange &rh)
const final override;
695 const wide_int &rh_ub)
const final override;
697 const wide_int &w1)
const final override;
739 const irange &rh)
const final override;
764 const irange &rh)
const final override;
771 const wide_int &rh_ub)
const final override;
796 const irange &rh)
const override;
803 const wide_int &rh_ub)
const override;
828 const irange &rh)
const override;
835 const wide_int &rh_ub)
const override;
848 const irange &rh)
const override;
855 const wide_int &rh_ub)
const override;
868 const irange &rh)
const override;
875 const wide_int &rh_ub)
const override;
Definition range-op-mixed.h:657
void wi_cross_product(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const
Definition range-op.cc:2162
virtual bool wi_op_overflows(wide_int &r, tree type, const wide_int &, const wide_int &) const =0
Definition value-range.h:526
Definition value-range.h:272
Definition range-op-mixed.h:557
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:4423
bool fold_range(frange &r, tree type, const frange &op1, const frange &, relation_trio=TRIO_VARYING) const final override
Definition range-op-float.cc:1525
bool operand_check_p(tree t1, tree t2, tree) const final override
Definition range-op-mixed.h:574
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio) const final override
Definition range-op.cc:4391
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override
Definition range-op.cc:4317
Definition range-op-mixed.h:711
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4510
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4529
Definition range-op-mixed.h:775
void update_bitmask(irange &r, const irange &lh, const irange &rh) const override
Definition range-op.cc:3281
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio rel=TRIO_VARYING) const override
Definition range-op.cc:3693
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const override
Definition range-op.cc:3650
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:798
bool fold_range(prange &r, tree type, const prange &op1, const prange &op2, relation_trio) const final override
Definition range-op-ptr.cc:844
relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind) const override
Definition range-op.cc:3313
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const override
Definition range-op.cc:3466
void simple_op1_range_solver(irange &r, tree type, const irange &lhs, const irange &op2) const
Definition range-op.cc:3571
Definition range-op-mixed.h:727
bool fold_range(irange &r, tree type, const irange &lh, const irange &rh, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4209
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:741
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4227
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:4242
Definition range-op-mixed.h:810
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio rel=TRIO_VARYING) const override
Definition range-op.cc:3869
bool fold_range(prange &r, tree type, const prange &op1, const prange &op2, relation_trio) const final override
Definition range-op-ptr.cc:442
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const override
Definition range-op.cc:3835
void update_bitmask(irange &r, const irange &lh, const irange &rh) const override
Definition range-op.cc:3772
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:830
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const override
Definition range-op.cc:3779
Definition range-op-mixed.h:746
bool op1_op2_relation_effect(irange &lhs_range, tree type, const irange &op1_range, const irange &op2_range, relation_kind rel) const final override
Definition range-op.cc:3931
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:3878
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:3959
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:766
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override
Definition range-op.cc:3885
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:3997
Definition range-op-mixed.h:458
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:3089
bool inside_domain_p(const wide_int &min, const wide_int &max, const irange &outer) const
Definition range-op.cc:2998
void fold_pair(irange &r, unsigned index, const irange &inner, const irange &outer) const
Definition range-op.cc:3015
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:3053
bool truncating_cast_p(const irange &inner, const irange &outer) const
Definition range-op.cc:2989
relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind) const final override
Definition range-op.cc:2960
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:3082
Definition range-op-mixed.h:442
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4250
Definition range-op-mixed.h:108
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:154
bool op2_range(irange &r, tree type, const irange &lhs, const irange &val, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1106
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1018
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1009
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1035
bool op1_range(irange &r, tree type, const irange &lhs, const irange &val, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1074
Definition range-op-mixed.h:359
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1626
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:405
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1605
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1588
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1651
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1579
Definition range-op-mixed.h:309
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1492
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1483
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1509
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:354
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1553
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1529
Definition range-op-mixed.h:410
relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind rel) const final override
Definition range-op.cc:4263
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4275
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4285
Definition range-op-mixed.h:258
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1457
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1385
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1411
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1432
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:304
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1394
Definition range-op-mixed.h:210
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:253
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1334
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1359
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1284
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1310
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1293
Definition range-op-mixed.h:859
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:870
void update_bitmask(irange &r, const irange &lh, const irange &rh) const override
Definition range-op.cc:2130
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const override
Definition range-op.cc:2137
bool fold_range(prange &r, tree type, const prange &op1, const prange &op2, relation_trio) const final override
Definition range-op-ptr.cc:801
Definition range-op-mixed.h:839
bool fold_range(prange &r, tree type, const prange &op1, const prange &op2, relation_trio) const final override
Definition range-op-ptr.cc:779
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:850
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const override
Definition range-op.cc:2118
void update_bitmask(irange &r, const irange &lh, const irange &rh) const override
Definition range-op.cc:2111
Definition range-op-mixed.h:584
virtual bool overflow_free_p(const irange &lh, const irange &rh, relation_trio=TRIO_VARYING) const
Definition range-op.cc:4605
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:620
relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind rel) const final override
Definition range-op.cc:1984
bool op1_op2_relation_effect(irange &lhs_range, tree type, const irange &op1_range, const irange &op2_range, relation_kind rel) const final override
Definition range-op.cc:2070
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override
Definition range-op.cc:1968
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio) const final override
Definition range-op.cc:2080
void rv_fold(frange &r, tree type, const REAL_VALUE_TYPE &lh_lb, const REAL_VALUE_TYPE &lh_ub, const REAL_VALUE_TYPE &rh_lb, const REAL_VALUE_TYPE &rh_ub, relation_kind) const final override
Definition range-op-float.cc:2510
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1961
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio) const final override
Definition range-op.cc:2100
Definition range-op-mixed.h:671
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio) const final override
Definition range-op.cc:2238
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:2204
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:706
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override
Definition range-op.cc:2266
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio) const final override
Definition range-op.cc:2211
virtual bool overflow_free_p(const irange &lh, const irange &rh, relation_trio=TRIO_VARYING) const
Definition range-op.cc:4636
void rv_fold(frange &r, tree type, const REAL_VALUE_TYPE &lh_lb, const REAL_VALUE_TYPE &lh_ub, const REAL_VALUE_TYPE &rh_lb, const REAL_VALUE_TYPE &rh_ub, relation_kind kind) const final override
Definition range-op-float.cc:2618
bool wi_op_overflows(wide_int &res, tree type, const wide_int &w0, const wide_int &w1) const final override
Definition range-op.cc:2246
Definition range-op-mixed.h:633
bool operand_check_p(tree t1, tree t2, tree) const final override
Definition range-op-mixed.h:651
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4484
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override
Definition range-op.cc:4499
Definition range-op-mixed.h:159
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1182
bool operand_check_p(tree t0, tree t1, tree t2) const final override
Definition range-op-mixed.h:205
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1117
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1215
bool fold_range(irange &r, tree type, const irange &op1, const irange &op2, relation_trio=TRIO_VARYING) const final override
Definition range-op.cc:1143
relation_kind op1_op2_relation(const irange &lhs, const irange &, const irange &) const final override
Definition range-op.cc:1126
Definition range-op-mixed.h:511
bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio) const final override
Definition range-op.cc:1886
bool operand_check_p(tree t1, tree t2, tree t3) const final override
Definition range-op-mixed.h:544
void rv_fold(frange &r, tree type, const REAL_VALUE_TYPE &lh_lb, const REAL_VALUE_TYPE &lh_ub, const REAL_VALUE_TYPE &rh_lb, const REAL_VALUE_TYPE &rh_ub, relation_kind) const final override
Definition range-op-float.cc:2447
relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind rel) const final override
Definition range-op.cc:1687
bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio) const final override
Definition range-op.cc:1866
void wi_fold(irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override
Definition range-op.cc:1761
relation_kind lhs_op2_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind rel) const final override
Definition range-op.cc:1754
virtual bool overflow_free_p(const irange &lh, const irange &rh, relation_trio=TRIO_VARYING) const
Definition range-op.cc:4574
void update_bitmask(irange &r, const irange &lh, const irange &rh) const final override
Definition range-op.cc:1677
Definition value-range.h:383
virtual bool op1_range(irange &r, tree type, const irange &lhs, const irange &op2, relation_trio=TRIO_VARYING) const
Definition range-op.cc:767
virtual bool op2_range(irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const
Definition range-op.cc:779
virtual bool fold_range(irange &r, tree type, const irange &lh, const irange &rh, relation_trio=TRIO_VARYING) const
Definition range-op.cc:694
virtual void update_bitmask(irange &, const irange &, const irange &) const
Definition range-op.cc:838
virtual relation_kind lhs_op2_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind=VREL_VARYING) const
Definition range-op.cc:800
virtual relation_kind lhs_op1_relation(const irange &lhs, const irange &op1, const irange &op2, relation_kind=VREL_VARYING) const
Definition range-op.cc:791
virtual relation_kind op1_op2_relation(const irange &lhs, const irange &op1, const irange &op2) const
Definition range-op.cc:809
virtual bool op1_op2_relation_effect(irange &lhs_range, tree type, const irange &op1_range, const irange &op2_range, relation_kind rel) const
Definition range-op.cc:819
Definition value-relation.h:336
relation_kind op1_op2()
Definition value-relation.h:410
Definition value-range.h:78
bool undefined_p() const
Definition value-range.h:1015
union tree_node * tree
Definition coretypes.h:97
tree_code
Definition genmatch.cc:1002
BINARY_PREDICATE le_p(const T1 &, const T2 &, signop)
hwi_with_prec zero(unsigned int)
Definition wide-int.h:2018
BINARY_PREDICATE ge_p(const T1 &, const T2 &, signop)
BINARY_PREDICATE eq_p(const T1 &, const T2 &)
poly_int< N, C > r
Definition poly-int.h:774
bool wi_includes_zero_p(tree type, const wide_int &wmin, const wide_int &wmax)
Definition range-op-mixed.h:34
bool empty_range_varying(vrange &r, tree type, const vrange &op1, const vrange &op2)
Definition range-op-mixed.h:59
bool wi_zero_p(tree type, const wide_int &wmin, const wide_int &wmax)
Definition range-op-mixed.h:43
bool_range_state get_bool_state(vrange &r, const vrange &lhs, tree val_type)
Definition range-op.cc:983
void update_known_bitmask(vrange &, tree_code, const vrange &, const vrange &)
Definition range-op.cc:502
bool relop_early_resolve(irange &r, tree type, const vrange &op1, const vrange &op2, relation_trio trio, relation_kind my_rel)
Definition range-op-mixed.h:77
bool minus_op1_op2_relation_effect(irange &lhs_range, tree type, const irange &, const irange &, relation_kind rel)
Definition range-op.cc:2004
bool_range_state
Definition range-op-mixed.h:50
@ BRS_FALSE
Definition range-op-mixed.h:50
@ BRS_EMPTY
Definition range-op-mixed.h:50
@ BRS_FULL
Definition range-op-mixed.h:50
@ BRS_TRUE
Definition range-op-mixed.h:50
int_range< 1 > range_false(tree type=boolean_type_node)
Definition range.h:39
int_range< 1 > range_true(tree type=boolean_type_node)
Definition range.h:30
#define REAL_VALUE_TYPE
Definition real.h:68
signop
Definition signop.h:28
Definition gengtype.h:252
#define TYPE_PRECISION(NODE)
Definition tree.h:2306
#define TYPE_SIGN(NODE)
Definition tree.h:952
#define INTEGRAL_TYPE_P(TYPE)
Definition tree.h:613
bool range_compatible_p(tree type1, tree type2)
Definition value-range.h:1790
relation_kind relation_intersect(relation_kind r1, relation_kind r2)
Definition value-relation.cc:105
relation_kind relation_union(relation_kind r1, relation_kind r2)
Definition value-relation.cc:142
enum relation_kind_t relation_kind
@ VREL_UNDEFINED
Definition value-relation.h:66
#define TRIO_VARYING
Definition value-relation.h:355
generic_wide_int< wide_int_storage > wide_int
Definition wide-int.h:343