https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115575

--- Comment #4 from Matthias Kretz (Vir) <mkretz at gcc dot gnu.org> ---
The test fails on x86_64 because the effective target selector 'avx512f' is
always true. Thus on non-AVX512 systems the test fails with 'illegal
instruction(s)'. That's a different issue than on SPARC, where it aborts with a
bogus value.

On SPARC vectorization of SIMD is actually disabled. Thus an '<int, 4>' mask is
a bitmask of 4 bits (a 'fixed_size_simd_mask'). Now, looking back at my
fixed_size implementation, the mask stores a _SanitizedBitMask. IOW, it assumes
the bit mask padding bits are always zero. Consequently, the memcpy in
'reduce2()' in the new test violates the invariant of fixed_size_simd_mask. The
test itself is the bug.

necessary changes:
1. compile with '-march=x86_64-v4' only with 'avx512f_runtime'.
2. add another constexpr-if condition in 'reduce2()' to skip fixed_size ABIs

Reply via email to