]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix incorrect __builtin_is_constant_evaluated calls
authorMatthias Kretz <m.kretz@gsi.de>
Thu, 2 Feb 2023 11:29:33 +0000 (12:29 +0100)
committerMatthias Kretz <m.kretz@gsi.de>
Thu, 16 Feb 2023 14:58:33 +0000 (15:58 +0100)
Signed-off-by: Matthias Kretz <m.kretz@gsi.de>
libstdc++-v3/ChangeLog:

* include/experimental/bits/simd_x86.h
(_SimdImplX86::_S_not_equal_to, _SimdImplX86::_S_less)
(_SimdImplX86::_S_less_equal): Do not call
__builtin_is_constant_evaluated in constexpr-if.

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

index 60e80d394ba2cd36ae3cf44f08498a1b65d3bd7d..dcfdc2a9496d2457af69ade7cfe8333e113e269d 100644 (file)
@@ -2344,15 +2344,16 @@ template <typename _Abi, typename>
            else
              __assert_unreachable<_Tp>();
          }                                                   // }}}
-       else if constexpr (!__builtin_is_constant_evaluated() // {{{
-                          && sizeof(__x) == 8)
+       else if (__builtin_is_constant_evaluated())
+         return _Base::_S_not_equal_to(__x, __y);
+       else if constexpr (sizeof(__x) == 8)
          {
            const auto __r128 = __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__x)
                                != __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__y);
            _MaskMember<_Tp> __r64;
            __builtin_memcpy(&__r64._M_data, &__r128, sizeof(__r64));
            return __r64;
-         } // }}}
+         }
        else
          return _Base::_S_not_equal_to(__x, __y);
       }
@@ -2451,15 +2452,16 @@ template <typename _Abi, typename>
            else
              __assert_unreachable<_Tp>();
          }                                                   // }}}
-       else if constexpr (!__builtin_is_constant_evaluated() // {{{
-                          && sizeof(__x) == 8)
+       else if (__builtin_is_constant_evaluated())
+         return _Base::_S_less(__x, __y);
+       else if constexpr (sizeof(__x) == 8)
          {
            const auto __r128 = __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__x)
                                < __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__y);
            _MaskMember<_Tp> __r64;
            __builtin_memcpy(&__r64._M_data, &__r128, sizeof(__r64));
            return __r64;
-         } // }}}
+         }
        else
          return _Base::_S_less(__x, __y);
       }
@@ -2558,15 +2560,16 @@ template <typename _Abi, typename>
            else
              __assert_unreachable<_Tp>();
          }                                                   // }}}
-       else if constexpr (!__builtin_is_constant_evaluated() // {{{
-                          && sizeof(__x) == 8)
+       else if (__builtin_is_constant_evaluated())
+         return _Base::_S_less_equal(__x, __y);
+       else if constexpr (sizeof(__x) == 8)
          {
            const auto __r128 = __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__x)
                                <= __vector_bitcast<_Tp, 16 / sizeof(_Tp)>(__y);
            _MaskMember<_Tp> __r64;
            __builtin_memcpy(&__r64._M_data, &__r128, sizeof(__r64));
            return __r64;
-         } // }}}
+         }
        else
          return _Base::_S_less_equal(__x, __y);
       }