<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/114001>114001</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AVX-512] Decompose `vpermb` with constant shuffle vector in some cases
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Validark
      </td>
    </tr>
</table>

<pre>
    ```llvm
define dso_local <64 x i8> @foo(<8 x i8> %0) local_unnamed_addr {
Entry:
  %1 = shufflevector <8 x i8> %0, <8 x i8> poison, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
  ret <64 x i8> %1
}
```

Compiled for Zen 4, we get:

```asm
.LCPI0_0:
        .byte   0
        .byte   0
 .byte   0
        .byte   0
        .byte   0
        .byte 0
        .byte   0
        .byte   0
        .byte   1
 .byte   1
        .byte   1
        .byte   1
        .byte   1
 .byte   1
        .byte   1
        .byte   1
        .byte 2
        .byte   2
        .byte   2
        .byte   2
 .byte   2
        .byte   2
        .byte   2
        .byte   2
 .byte   3
        .byte   3
        .byte   3
        .byte 3
        .byte   3
        .byte   3
        .byte   3
 .byte   3
        .byte   4
        .byte   4
        .byte   4
 .byte   4
        .byte   4
        .byte   4
        .byte 4
        .byte   4
        .byte   5
        .byte   5
 .byte   5
        .byte   5
        .byte   5
        .byte   5
 .byte   5
        .byte   5
        .byte   6
        .byte 6
        .byte   6
        .byte   6
        .byte   6
 .byte   6
        .byte   6
        .byte   6
        .byte   7
 .byte   7
        .byte   7
        .byte   7
        .byte 7
        .byte   7
        .byte   7
        .byte 7
foo:
.Lfoo$local:
        vmovdqa64       zmm1, zmmword ptr [rip + .LCPI0_0]
        vpermb  zmm0, zmm1, zmm0
        ret
```

I think `vpermb` should be decomposed into `vpbroadcastq`+`vpshufb`

```asm
foo:
        vpbroadcastq zmm0, xmm0
        vpshufb  zmm0, zmm0, zmmword ptr [rip + .LCPI0_0]
 ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VsuO4jgU_Rpnc1XIjziERRYFFFJLvZhVazSbkhMb4ukkTtsO1dVfP8qDoiswFBRRIwTXJ_ec-Pp5hHN6VymVIL5EfB2IxufGJt9EoaWw34PUyNcERbj_FsW-RHiN8KNUW10pkM48FyYTBSC2ikL4CTpG7AlQiLfGIBojtoqPKOUY0QV0jOemqkSp5LOQ0gKaL3vhp8rbV8Qe-xa0HAKIrcHlzXZbqL3KvLFwRnf1HqyNdqYa4L5rjHbZbKUZhY4xQUAmCuhEAZsoCCcK-ERBNFEwvzdgT4e1aZUfr3vKSf8UzddDcNg8Q7P7XZmy1oWSsDUW_lFVP1wvCnbKvy3-EV-4Ye_Nvq7--oKf8W-7pP_M0levAABfhq9MuwaeQAKAjPpFLqfdBk8oSs_nfg6-j_2BKDufdgs8gcQR_iAt_BR8H_sdfJsEvwxfmfYnRKNz8Fnwf3I_hO9jj-D5SHR-Oe0aeDqJ1s8cDtzZ187dhJ2ROTmG96XZyx8iCof2r7LsbvlfZflirITaW0B8aXUNiC7h7Tjn65FOrWyZdnw88A86o5PUKn_hsvkCPtfVd0AR7iVRhMHlpikkpAqkykxZG6ck6MqbPi21RshMOP-jFaPLDmwtWDoSP72efh-oYylHwbd6fp7UMbziXcn4pqE7HYlAJkwu2EIEKiFzhsk8YpwFeYIzIkQmCAkFF5LixSKmREaLOI6ylIc80AnFNCSYLnDIKGMzzpVkLJSxiPlWcYVCrEqhi1nri2fG7gLtXKMSQkKMSVCIVBWuc9aUVuoFuqeI0tZo26QlPaTNzqEQF9p5d5Tx2hedJX_89vcDJy0B1odpej-PL9rnkJnKeVH5g0mGwSXrCpwpFWTCKRc0tkhy72vXTg_dILrZaZ836SwzJaKbztz3fw-1Nf-qzCO66frsEN0MRe0T-l8AAAD__8zQ_o8">