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

--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Looks like this was fixed in GCC 15:
```
foo:
.LFB7284:
        .cfi_startproc
        vmovd   %edi, %xmm2
        vmovdqa32       %zmm1, %zmm4
        kmovw   m(%rip), %k1
        vpsrad  %xmm2, %zmm0, %zmm4{%k1}
        vmovdqa32       %zmm4, %zmm0
        ret


```

Though for comment #5 we get:
```
foo:
.LFB7470:
        .cfi_startproc
        vmovdqa64       %zmm0, %zmm3
        vmovd   %edi, %xmm2
        vmovdqa32       %zmm1, %zmm0
        kmovw   m(%rip), %k1
        vmovdqa32       %zmm1, %zmm4
        vpslld  %xmm2, %zmm3, %zmm0{%k1}
        kmovw   m(%rip), %k2
        vpsrad  %xmm2, %zmm3, %zmm4{%k2}
        vmovdqa32       %zmm0, zzz(%rip)
        vmovdqa32       %zmm4, %zmm0
        ret
```


Note the extra kmovw.
But we get for the trunk:
```
foo:
.LFB7470:
        .cfi_startproc
        vmovdqa64       %zmm0, %zmm3
        vmovd   %edi, %xmm2
        vmovdqa32       %zmm1, %zmm0
        kmovw   m(%rip), %k1
        vmovdqa32       %zmm1, %zmm4
        vpslld  %xmm2, %zmm3, %zmm0{%k1}
        vpsrad  %xmm2, %zmm3, %zmm4{%k1}
        vmovdqa32       %zmm0, zzz(%rip)
        vmovdqa32       %zmm4, %zmm0
        ret
```

Which looks fixed.

Reply via email to