]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Ensure __builtin_constant_p isn't lost on the way
authorMatthias Kretz <m.kretz@gsi.de>
Fri, 13 Jan 2023 15:20:36 +0000 (16:20 +0100)
committerMatthias Kretz <m.kretz@gsi.de>
Thu, 16 Feb 2023 21:03:54 +0000 (22:03 +0100)
The more expensive code path should only be taken if it can be optimized
away.

Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd.h
(_SimdWrapper::_M_is_constprop_none_of)
(_SimdWrapper::_M_is_constprop_all_of): Return false unless the
computed result still satisfies __builtin_constant_p.

(cherry picked from commit fea34ee491104f325682cc5fb75683b7d74a0a3b)

libstdc++-v3/include/experimental/bits/simd.h

index b0226fa4c5304ce857927e171cb78a3d78a97f27..2b1e5bcbe946641ab865da20f6f934639f904aa1 100644 (file)
@@ -2673,7 +2673,8 @@ template <typename _Tp, size_t _Width>
          else
            __execute_n_times<_Width>(
              [&](auto __i) { __r &= _M_data[__i.value] == _Tp(); });
-         return __r;
+         if (__builtin_constant_p(__r))
+           return __r;
        }
       return false;
     }
@@ -2693,7 +2694,8 @@ template <typename _Tp, size_t _Width>
          else
            __execute_n_times<_Width>(
              [&](auto __i) { __r &= _M_data[__i.value] == ~_Tp(); });
-         return __r;
+         if (__builtin_constant_p(__r))
+           return __r;
        }
       return false;
     }