Skip to content

Don't read from vpcmpeqd xmm, xmm, xmm and vpternlogd zmm, zmm, zmm, 255 simultaneously #144481

Open
@Validark

Description

@Validark

I have some assembly like this: (Zig Godbolt LLVM Godbolt)

.LCPI0_0:
        .quad   72340172838076673
prefix_xor_512:
        vpopcntq        zmm1, zmm0
        vpcmpeqd        xmm2, xmm2, xmm2
        vpmovqb xmm1, zmm1
        vpandq  xmm1, xmm1, qword ptr [rip + .LCPI0_0]{1to2}
        vpclmulqdq      xmm1, xmm1, xmm2, 0
        vpternlogd      zmm2, zmm2, zmm2, 255
        vpclmulqdq      zmm3, zmm0, zmm2, 0
        vpclmulqdq      zmm0, zmm0, zmm2, 17
        vpmovsxbq       zmm1, xmm1
        vpunpcklqdq     zmm0, zmm3, zmm0
        vpxorq  zmm0, zmm0, zmm1
        ret

Should be:

.LCPI0_0:
        .quad   72340172838076673
prefix_xor_512:
        vpopcntq        zmm1, zmm0
-       vpcmpeqd        xmm2, xmm2, xmm2
+       vpternlogd      zmm2, zmm2, zmm2, 255
        vpmovqb xmm1, zmm1
        vpandq  xmm1, xmm1, qword ptr [rip + .LCPI0_0]{1to2}
        vpclmulqdq      xmm1, xmm1, xmm2, 0
-       vpternlogd      zmm2, zmm2, zmm2, 255
        vpclmulqdq      zmm3, zmm0, zmm2, 0
        vpclmulqdq      zmm0, zmm0, zmm2, 17
        vpmovsxbq       zmm1, xmm1
        vpunpcklqdq     zmm0, zmm3, zmm0
        vpxorq  zmm0, zmm0, zmm1
        ret

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions