aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Kretz <m.kretz@gsi.de>2024-06-21 16:22:22 +0200
committerMatthias Kretz <m.kretz@gsi.de>2024-06-21 18:07:30 +0200
commita851931bc0d7a2b39ccc1f236015aabf24ee51f9 (patch)
tree080f98890986d5c94c8e5114f022e6b94c6a9d8e
parenta16f47f5f34d08b13ee58ea362027c6a479eb82f (diff)
downloadgcc-a851931bc0d7a2b39ccc1f236015aabf24ee51f9.zip
gcc-a851931bc0d7a2b39ccc1f236015aabf24ee51f9.tar.gz
gcc-a851931bc0d7a2b39ccc1f236015aabf24ee51f9.tar.bz2
libstdc++: Fix test on x86_64 and non-simd targets
* Running a test compiled with AVX512 instructions requires avx512f_runtime not just avx512f. * The 'reduce2' test violated an invariant of fixed_size_simd_mask and thus failed on all targets without 16-Byte vector builtins enabled (in bits/simd.h). Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: PR libstdc++/115575 * testsuite/experimental/simd/pr115454_find_last_set.cc: Require avx512f_runtime. Don't memcpy fixed_size masks. (cherry picked from commit 77f321435b4ac37992c2ed6737ca0caa1dd50551)
-rw-r--r--libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc
index b47f19d..25a713b 100644
--- a/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc
+++ b/libstdc++-v3/testsuite/experimental/simd/pr115454_find_last_set.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++17" }
// { dg-do run { target *-*-* } }
// { dg-require-effective-target c++17 }
-// { dg-additional-options "-march=x86-64-v4" { target avx512f } }
+// { dg-additional-options "-march=x86-64-v4" { target avx512f_runtime } }
// { dg-require-cmath "" }
#include <experimental/simd>
@@ -25,7 +25,9 @@ int reduce2()
{
using M8 = typename V<short, 8>::mask_type;
using M4 = typename V<int, 4>::mask_type;
- if constexpr (sizeof(M8) == sizeof(M4))
+ if constexpr (sizeof(M8) == sizeof(M4)
+ && !std::is_same_v<M4, stdx::fixed_size_simd_mask<int, 4>>)
+ // fixed_size invariant: padding bits of masks are zero, the memcpy would violate that
{
M4 k;
__builtin_memcpy(&__data(k), &__data(M8(true)), sizeof(M4));