https://gcc.gnu.org/g:2114243c23ec5168cd54633cd4995ab123d92573

commit r15-3833-g2114243c23ec5168cd54633cd4995ab123d92573
Author: Richard Biener <rguent...@suse.de>
Date:   Tue Sep 24 14:23:40 2024 +0200

    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:
---
 gcc/range-op.cc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/range-op.cc b/gcc/range-op.cc
index c576f6882219..3f5cf0834402 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);

Reply via email to