<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">