Message ID | 20221005122236.1579762-1-aldyh@redhat.com |
---|---|
State | New |
Headers | show |
Series | [COMMITTED,PR,tree-optimization/107052] range-ops: Pass nonzero masks through cast. | expand |
diff --git a/gcc/range-op.cc b/gcc/range-op.cc index 4f647abd91c..6fa27a8904e 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -2515,6 +2515,14 @@ operator_cast::fold_range (irange &r, tree type ATTRIBUTE_UNUSED, if (r.varying_p ()) return true; } + + // Pass nonzero mask through the cast. + if (!truncating_cast_p (inner, outer)) + { + wide_int nz = inner.get_nonzero_bits (); + nz = wide_int::from (nz, TYPE_PRECISION (type), TYPE_SIGN (inner.type ())); + r.set_nonzero_bits (nz); + } return true; }