]> git.ipfire.org Git - people/ms/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 15:12:13 +0000 (16:12 +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 305d7a9fa54886c0227660e26a9d6c86f8a83fca..db4c744d6e40a233236b22961e5901fc5a533a9f 100644 (file)
@@ -2340,15 +2340,16 @@ template <typename _Abi>
            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>
            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>
            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);
       }