]> 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 21:03:54 +0000 (22:03 +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.

(cherry picked from commit 1fd3836463c65f695831ef04c7dbda1e7a1794ba)

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

index baa978bffdafc2d378365da979d177ef1a71825c..c809520dcdd113e3909b739128e559478db751de 100644 (file)
@@ -2340,15 +2340,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);
       }
@@ -2447,15 +2448,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);
       }
@@ -2554,15 +2556,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);
       }