From: Andrew MacLeod Date: Wed, 14 May 2025 15:12:22 +0000 (-0400) Subject: Improve constant bitmasks. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=65cd212bd4c533351a09e6974f40ae5d7effca84;p=thirdparty%2Fgcc.git Improve constant bitmasks. bitmasks for constants are created only for trailing zeros. It is no additional work to also include leading 1's in the value that are also known. before : [5, 7] mask 0x7 value 0x0 after : [5, 7] mask 0x3 value 0x4 PR tree-optimization/116546 * value-range.cc (irange_bitmask::irange_bitmask): Include leading ones in the bitmask. --- diff --git a/gcc/value-range.cc b/gcc/value-range.cc index 48a1521b81e..64d10f41168 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -47,9 +47,11 @@ irange_bitmask::irange_bitmask (tree type, else { wide_int xorv = min ^ max; - xorv = wi::mask (prec - wi::clz (xorv), false, prec); - m_value = wi::zero (prec); - m_mask = min | xorv; + // Mask will have leading zeros for all leading bits that are + // common, both zeros and ones. + m_mask = wi::mask (prec - wi::clz (xorv), false, prec); + // Now set value to those bits which are known, and zero the rest. + m_value = ~m_mask & min; } }