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.

Reply via email to