https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88794
Bug ID: 88794 Summary: fixupimm intrinsics are unusable [9.0 regression] Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: kretz at kde dot org Target Milestone: --- Target: x86_64-*-*, i?86-*-* Test case: ``` #include <x86intrin.h> __m128 f(__m128 x, __m128 &y) { y = _mm_fixupimm_ps(x, _mm_set1_epi32(0x00000000), 0x00); return x; } __m128 g(__m128 x, __m128 &y) { y = _mm_mask_fixupimm_ps(y, -1, x, _mm_set1_epi32(0x00000000), 0x00); return x; } __m128 h(__m128 x, __m128 &y, __mmask16 k) { y = _mm_mask_fixupimm_ps(y, k, x, _mm_set1_epi32(0x00000000), 0x00); return x; } ``` The function f (cf. https://godbolt.org/z/f6u-GI) only compiles with GCC 9; none of GCC 8, clang, or ICC accept f. If one adds `y, ` as first argument to f it compiles on non-GCC9 (cf. https://godbolt.org/z/rqPT15). Besides the incompatibility, fixupimm is unusable on GCC9, because the functions f and g produce garbage in y. This was introduced in r265827.