diff options
author | Matthias Kretz <m.kretz@gsi.de> | 2024-06-21 16:22:22 +0200 |
---|---|---|
committer | Matthias Kretz <m.kretz@gsi.de> | 2024-06-21 18:26:25 +0200 |
commit | 169d4d1addaac7eef6cde4049aa8b4f3d81c28b0 (patch) | |
tree | 79e9101cd9a0adf740b6ab8813fd65dfcae94258 | |
parent | 8b5bdeb8aa2c2f6dbd448a8f7d500d9eaece48e1 (diff) | |
download | gcc-169d4d1addaac7eef6cde4049aa8b4f3d81c28b0.zip gcc-169d4d1addaac7eef6cde4049aa8b4f3d81c28b0.tar.gz gcc-169d4d1addaac7eef6cde4049aa8b4f3d81c28b0.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.cc | 6 |
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)); |