From: Richard Biener Date: Tue, 24 Sep 2024 12:23:40 +0000 (+0200) Subject: Simplify range-op shift mask generation X-Git-Tag: basepoints/gcc-16~5720 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2114243c23ec5168cd54633cd4995ab123d92573;p=thirdparty%2Fgcc.git Simplify range-op shift mask generation The following reduces the number of wide_ints built which show up in the profile for PR114855 as the largest remaining bit at -O1. * range-op.cc (operator_rshift::op1_range): Use wi::mask instead of shift and not. --- diff --git a/gcc/range-op.cc b/gcc/range-op.cc index c576f688221..3f5cf083440 100644 --- a/gcc/range-op.cc +++ b/gcc/range-op.cc @@ -2863,7 +2863,7 @@ operator_rshift::op1_range (irange &r, // OP1 is anything from 0011 1000 to 0011 1111. That is, a // range from LHS<<3 plus a mask of the 3 bits we shifted on the // right hand side (0x07). - wide_int mask = wi::bit_not (wi::lshift (wi::minus_one (prec), shift)); + wide_int mask = wi::mask (shift.to_uhwi (), false, prec); int_range_max mask_range (type, wi::zero (TYPE_PRECISION (type)), mask);