[PATCH 2/5] libstdc++: Use conservative default for simd::mask sanitization

Matthias Kretz MatthiasKretz@gmx.net
Mon Mar 2 10:15:03 GMT 2026


This change is conceptual, since the actual masking is only applied
after constexpr-if branch on _S_is_partial.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>

libstdc++-v3/ChangeLog:

	* include/bits/simd_mask.h (_M_concat_data): Default to sanitize
	only when the mask is partial. Don't force (unused) sanitize on
	the power-of-2 mask member.
---
 libstdc++-v3/include/bits/simd_mask.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/include/bits/simd_mask.h b/libstdc++-v3/include/
bits/simd_mask.h
index 1bf74e5ae599..41477cbc9b94 100644
--- a/libstdc++-v3/include/bits/simd_mask.h
+++ b/libstdc++-v3/include/bits/simd_mask.h
@@ -581,7 +581,7 @@ _S_recursive_bit_cast(const basic_mask<_UBytes, _UAbi>& 
__x)
 
       [[__gnu__::__always_inline__]]
       constexpr auto
-      _M_concat_data(bool __do_sanitize = true) const
+      _M_concat_data(bool __do_sanitize = _S_is_partial) const
       {
 	if constexpr (_S_is_scalar)
 	  return __vec_builtin_type<__integer_from<_Bytes>, 
1>{__integer_from<_Bytes>(-_M_data)};
@@ -1501,18 +1501,18 @@ struct _Tmp
 
       [[__gnu__::__always_inline__]]
       constexpr auto
-      _M_concat_data(bool __do_sanitize = true) const
+      _M_concat_data(bool __do_sanitize = _S_is_partial) const
       {
 	if constexpr (_S_use_bitmask)
 	  {
 	    static_assert(_S_size <= numeric_limits<unsigned long 
long>::digits,
 			  "cannot concat more than 64 bits");
 	    using _Up = _Bitmask<_S_size>;
-	    return _Up(_M_data0._M_concat_data(true) | 
(_Up(_M_data1._M_concat_data(__do_sanitize)) << _N0));
+	    return _Up(_M_data0._M_concat_data() | 
(_Up(_M_data1._M_concat_data(__do_sanitize)) << _N0));
 	  }
 	else
 	  {
-	    auto __lo = _M_data0._M_concat_data(true);
+	    auto __lo = _M_data0._M_concat_data();
 	    auto __hi = 
__vec_zero_pad_to<sizeof(__lo)>(_M_data1._M_concat_data(__do_sanitize));
 	    return __vec_concat(__lo, __hi);
 	  }
-- 
──────────────────────────────────────────────────────────────────────────
 Dr. Matthias Kretz                           https://mattkretz.github.io
 GSI Helmholtz Center for Heavy Ion Research               https://gsi.de
 std::simd
──────────────────────────────────────────────────────────────────────────

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part.
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260302/6484a5b1/attachment.sig>


More information about the Libstdc++ mailing list