This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/82897] Unnecessary zero-extension when loading mask register from memory


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

--- Comment #5 from Uroš Bizjak <ubizjak at gmail dot com> ---
Also,

#include <x86intrin.h>

__mmask16 m;

__m512i zzz;

__m512i
foo (__m512i x, __m512i y, int a)
{
  zzz = _mm512_mask_slli_epi32 (y, m, x, a);
  return _mm512_mask_srai_epi32 (y, m, x, a);
}

defeats the proposed prototype patch, resulting in:

        vmovd   %edi, %xmm2
        vmovdqa64       %zmm1, %zmm3
        movzwl  m(%rip), %eax
        vmovdqa64       %zmm1, %zmm4
        kmovw   %eax, %k1
        vpslld  %xmm2, %zmm0, %zmm3{%k1}
        vpsrad  %xmm2, %zmm0, %zmm4{%k1}
        vmovdqa64       %zmm3, zzz(%rip)
        vmovdqa64       %zmm4, %zmm0
        ret

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]