[range-ops] Remove special case for handling bitmasks in casts.
Now that we can generically handle bitmasks for unary operators, there's no need to special case them. gcc/ChangeLog: * range-op-mixed.h (class operator_cast): Add update_bitmask. * range-op.cc (operator_cast::update_bitmask): New. (operator_cast::fold_range): Call update_bitmask.
This commit is contained in:
parent
adbac207e9
commit
8605bd9321
2 changed files with 10 additions and 15 deletions
|
@ -346,6 +346,8 @@ public:
|
|||
relation_kind lhs_op1_relation (const irange &lhs,
|
||||
const irange &op1, const irange &op2,
|
||||
relation_kind) const final override;
|
||||
void update_bitmask (irange &r, const irange &lh,
|
||||
const irange &rh) const final override;
|
||||
private:
|
||||
bool truncating_cast_p (const irange &inner, const irange &outer) const;
|
||||
bool inside_domain_p (const wide_int &min, const wide_int &max,
|
||||
|
|
|
@ -2881,24 +2881,17 @@ operator_cast::fold_range (irange &r, tree type ATTRIBUTE_UNUSED,
|
|||
return true;
|
||||
}
|
||||
|
||||
// Update the bitmask. Truncating casts are problematic unless
|
||||
// the conversion fits in the resulting outer type.
|
||||
irange_bitmask bm = inner.get_bitmask ();
|
||||
if (truncating_cast_p (inner, outer)
|
||||
&& wi::rshift (bm.mask (),
|
||||
wi::uhwi (TYPE_PRECISION (outer.type ()),
|
||||
TYPE_PRECISION (inner.type ())),
|
||||
TYPE_SIGN (inner.type ())) != 0)
|
||||
return true;
|
||||
unsigned prec = TYPE_PRECISION (type);
|
||||
signop sign = TYPE_SIGN (inner.type ());
|
||||
bm = irange_bitmask (wide_int::from (bm.value (), prec, sign),
|
||||
wide_int::from (bm.mask (), prec, sign));
|
||||
r.update_bitmask (bm);
|
||||
|
||||
update_bitmask (r, inner, outer);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
operator_cast::update_bitmask (irange &r, const irange &lh,
|
||||
const irange &rh) const
|
||||
{
|
||||
update_known_bitmask (r, CONVERT_EXPR, lh, rh);
|
||||
}
|
||||
|
||||
bool
|
||||
operator_cast::op1_range (irange &r, tree type,
|
||||
const irange &lhs,
|
||||
|
|
Loading…
Add table
Reference in a new issue