Unify operator_cst range operator
Move the declaration of the class to the range-op-mixed header, add the floating point prototypes as well, and use it in the new unified table. * range-op-float.cc (operator_cst::fold_range): New. * range-op-mixed.h (class operator_cst): Move from integer file. * range-op.cc (op_cst): New object. (unified_table::unified_table): Add op_cst. Also use for REAL_CST. (class operator_cst): Move to range-op-mixed.h. (integral_table::integral_table): Remove op_cst. (pointer_table::pointer_table): Remove op_cst.
This commit is contained in:
parent
b073d8af94
commit
4f0ac5a526
3 changed files with 22 additions and 13 deletions
|
@ -557,6 +557,13 @@ operator_identity::op1_range (frange &r, tree, const frange &lhs,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
operator_cst::fold_range (frange &r, tree, const frange &op1,
|
||||
const frange &, relation_trio) const
|
||||
{
|
||||
r = op1;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
operator_equal::op2_range (frange &r, tree type,
|
||||
|
|
|
@ -292,4 +292,16 @@ public:
|
|||
relation_kind rel) const final override;
|
||||
};
|
||||
|
||||
class operator_cst : public range_operator
|
||||
{
|
||||
public:
|
||||
using range_operator::fold_range;
|
||||
bool fold_range (irange &r, tree type,
|
||||
const irange &op1, const irange &op2,
|
||||
relation_trio rel = TRIO_VARYING) const final override;
|
||||
bool fold_range (frange &r, tree type,
|
||||
const frange &op1, const frange &op2,
|
||||
relation_trio = TRIO_VARYING) const final override;
|
||||
};
|
||||
|
||||
#endif // GCC_RANGE_OP_MIXED_H
|
||||
|
|
|
@ -69,6 +69,7 @@ operator_le op_le;
|
|||
operator_gt op_gt;
|
||||
operator_ge op_ge;
|
||||
operator_identity op_ident;
|
||||
operator_cst op_cst;
|
||||
|
||||
// Invoke the initialization routines for each class of range.
|
||||
|
||||
|
@ -87,7 +88,8 @@ unified_table::unified_table ()
|
|||
set (SSA_NAME, op_ident);
|
||||
set (PAREN_EXPR, op_ident);
|
||||
set (OBJ_TYPE_REF, op_ident);
|
||||
set (REAL_CST, op_ident);
|
||||
set (REAL_CST, op_cst);
|
||||
set (INTEGER_CST, op_cst);
|
||||
}
|
||||
|
||||
// The tables are hidden and accessed via a simple extern function.
|
||||
|
@ -4224,16 +4226,6 @@ operator_bitwise_not::op1_range (irange &r, tree type,
|
|||
}
|
||||
|
||||
|
||||
class operator_cst : public range_operator
|
||||
{
|
||||
using range_operator::fold_range;
|
||||
public:
|
||||
virtual bool fold_range (irange &r, tree type,
|
||||
const irange &op1,
|
||||
const irange &op2,
|
||||
relation_trio rel = TRIO_VARYING) const;
|
||||
} op_integer_cst;
|
||||
|
||||
bool
|
||||
operator_cst::fold_range (irange &r, tree type ATTRIBUTE_UNUSED,
|
||||
const irange &lh,
|
||||
|
@ -4758,7 +4750,6 @@ integral_table::integral_table ()
|
|||
set (BIT_IOR_EXPR, op_bitwise_or);
|
||||
set (BIT_XOR_EXPR, op_bitwise_xor);
|
||||
set (BIT_NOT_EXPR, op_bitwise_not);
|
||||
set (INTEGER_CST, op_integer_cst);
|
||||
set (ABS_EXPR, op_abs);
|
||||
set (NEGATE_EXPR, op_negate);
|
||||
set (ADDR_EXPR, op_addr);
|
||||
|
@ -4792,7 +4783,6 @@ pointer_table::pointer_table ()
|
|||
set (MIN_EXPR, op_ptr_min_max);
|
||||
set (MAX_EXPR, op_ptr_min_max);
|
||||
|
||||
set (INTEGER_CST, op_integer_cst);
|
||||
set (ADDR_EXPR, op_addr);
|
||||
set (NOP_EXPR, op_cast);
|
||||
set (CONVERT_EXPR, op_cast);
|
||||
|
|
Loading…
Add table
Reference in a new issue