<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110868>110868</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVX2] `bitcast i64 to <64 x i1>` + `sext <64 x i1> to <64 x i8>` should not use `vpermq 0b01_00_01_00` when `vpbroadcastq` would work too
</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 Godbolt](https://llvm.godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:1,endLineNumber:7,positionColumn:1,positionLineNumber:7,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'define+dso_local+range(i8+-1,+1)+%3C64+x+i8%3E+@unmovemask64_auto(i64+%250)+local_unnamed_addr+%7B%0AEntry:%0A++%251+%3D+bitcast+i64+%250+to+%3C64+x+i1%3E%0A++%252+%3D+sext+%3C64+x+i1%3E+%251+to+%3C64+x+i8%3E%0A++ret+%3C64+x+i8%3E+%252%0A%7D%0A'),l:'5',n:'1',o:'LLVM+IR+source+%231',t:'0')),k:49.75646879756469,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:irclangtrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,libs:!(),options:'-O3+-march%3Dznver3',overrides:!(),selection:(endColumn:12,endLineNumber:87,positionColumn:12,positionLineNumber:87,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+clang+(trunk)+(Editor+%231)',t:'0')),k:50.24353120243532,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
[Zig Godbolt](https://zig.godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:13,fontUsePx:'0',j:3,lang:zig,selection:(endColumn:1,endLineNumber:10,positionColumn:1,positionLineNumber:10,selectionStartColumn:1,selectionStartLineNumber:10,startColumn:1,startLineNumber:10),source:'const+std+%3D+@import(%22std%22)%3B%0A%0Aexport+fn+unmovemask64_auto(x:+u64)+@Vector(64,+u8)+%7B%0A++++return+@select(u8,%0A++++++++@as(@Vector(64,+bool),+@bitCast(x)),%0A++++++++@as(@Vector(64,+u8),+@splat(0xff)),%0A++++++++@as(@Vector(64,+u8),+@splat(0))%0A++++)%3B%0A%7D%0A%0Aexport+fn+unmovemask64(x:+u64)+@Vector(64,+u8)+%7B%0A++++const+bit_positions+%3D+comptime+std.simd.repeat(64,+@as(@Vector(8,+u8),+@splat(1))+%3C%3C+std.simd.iota(u3,+8))%3B%0A++++return+@select(u8,%0A++++++++bit_positions+%3D%3D+(bit_positions+%26+@shuffle(u8,+@as(@Vector(64,+u8),+@bitCast(@as(@Vector(8,+u64),+@splat(x)))),+undefined,+(std.simd.iota(u8,+64)+%3E%3E+@splat(4)+%3C%3C+@splat(4))+%2B+(std.simd.iota(u8,+64)+%3E%3E+@splat(3)))),%0A++++++++@as(@Vector(64,+u8),+@splat(0xff)),%0A++++++++@as(@Vector(64,+u8),+@splat(0))%0A++++)%3B%0A%7D'),l:'5',n:'1',o:'Zig+source+%233',t:'0')),header:(),k:56.563878859314066,l:'4',m:100,n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:ztrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,libs:!(),options:'-O+ReleaseFast+-target+x86_64-linux+-mcpu%3Dznver3',overrides:!(),selection:(endColumn:12,endLineNumber:173,positionColumn:12,positionLineNumber:173,selectionStartColumn:12,selectionStartLineNumber:173,startColumn:12,startLineNumber:173),source:3),l:'5',n:'0',o:'+zig+trunk+(Editor+%233)',t:'0')),header:(),k:43.43612114068593,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
```llvm
define dso_local range(i8 -1, 1) <64 x i8> @unmovemask64(i64 %0) local_unnamed_addr {
Entry:
%1 = bitcast i64 %0 to <64 x i1>
%2 = sext <64 x i1> %1 to <64 x i8>
ret <64 x i8> %2
}
```
Emit for Zen 3:
```diff
.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
.LCPI0_2:
.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
.LCPI0_1:
.byte 1
.byte 2
.byte 4
.byte 8
.byte 16
.byte 32
.byte 64
.byte 128
unmovemask64:
vmovq xmm0, rdi
vpbroadcastq ymm2, qword ptr [rip + .LCPI0_1]
- vpermq ymm1, ymm0, 68 ; 0b01_00_01_00
+ vpbroadcastq ymm1, xmm0
vpshufb ymm0, ymm1, ymmword ptr [rip + .LCPI0_0]
vpshufb ymm1, ymm1, ymmword ptr [rip + .LCPI0_2]
vpand ymm0, ymm0, ymm2
vpand ymm1, ymm1, ymm2
vpcmpeqb ymm0, ymm0, ymm2
vpcmpeqb ymm1, ymm1, ymm2
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWVuP6jgS_jXmxWrk2LmYBx4I3b0a6eye0Yy2tTovKBcDnk5ijuPQ9Pn1K18ISQj0ZZiz2tW2UOiUq76yy1WuKpPUNd9UjM1BEIPgfpI0aivk_CkpeJ7I50kq8lc99uXL09_h30SeikKB4B5gulVqVwOyAPgR4Mei2JfTjR2fCrkxVLIx4x7AFGB6-WULyCITOXvIuRIS4CU3o3TNC1YlJTNvkQdwBPByLSr1e5YUmur5jvDPmv16sGzIsv2hhwFeFkmlden5AbysWcEyxUVlFbAqX4qiKSvHzKr8C6_YP5oyZRKQhQbaiZpriR7jkXjG3Sr4XSVS9WT6Qz1JM3wuMMY30wOikZmzSs7WvGIAx3ktVoXIkgLgWCbVhgFMOQU4vtNYAMdWOAY4IMvQBzg-ABxrjoA8aLqPmqoUe1Ym9XPor5JGCQ1hWAEOcIAsgFGyaiq9M_kqyXNpGSL9QIuHSslXM7cALcyIlfac7nuA45SrLKmV1t-Dj7XK4Qw9N8M-HO7A1eygLsud1I-h0yG6ZCNYtIeFHXsQ3bv_Irsxhd2TwLpg1fNbYd90IAEc__KbnrfdR4tKHJ_quvHM4j4DsvBn0ygI_ZBGM_Pd0ef39KGePvuiAxWNgC_HQ7Hc8YJ1ArGlkAWXmQ4pJZvqWQcfLxST9hygaW8CKa8S5wlHG1jS1_QPlqneQCbKklXqa1W89jByljabZVIUdY89Z2VSbQrW5-VSx9ee1T0yO7CsUf0zhFeKFT2ugqcyka9LkfdBleRlT3TPZCpqdm9nwKvN0KLrItnUT5y9fN2x6nYnV8HTurNRWpPY6dPErfbuK9GxXiYy25q4-FHtmSTOF_ZMSp6zIcK14xCPnId0_EDEl05E-vOPRO9KJA4jIzaubOKPOoe2JyQ9ZqI2MmfXgzNAU-yTgHgYmW98FpzaizyEPhemnRXhN2N9THjPZG232dcEdA_QAgTxN765ltR_8M1_IKeTq5FBTpHxg28-ntI99KGcbtg_6cHovS6MztN6JiqTH2uVdxId8BEvd0IqY-MAYzMcYGwAAhIfExNasIPli9cVwPFYZre2jZvQd27voyeWmc2imqZrhoa2RUMU91KwS5WNrKyoNQTAVIssz1h7Hx8ltV7BiMJUiOKYmTRjytXSVAr00Drzp8Hdahx0vSsSDYwO6_Vfhn0EPkPt71dbSFzduZts2tGzUq5WR5evOz6mc73iJbPON615mU8l2zGznqOKMUvQa4bwjoawlZV7nDRwoRLtPMRK0tZu5GZud2HBLrIwHRnHodOybdbrgp3UfMAVTh58zWhuPwdWa32-9c64qWzFnztmTM9s6DBbF3EF7rHKP4L7I_txNuw4nA0_rYucLeR_MoTf3wZ807lr0ACQy_l7y5Lc5Iq2dDNVRzgNQkIjSoMZ8XwUhrctOz7eHfz4f1_ws_oCW_283RYAHP_GCpbU7NG23HcqkRvT5B5ouAr9u4JXzcE0D9mu-ct6By8iH2serMCl2gu_UXxZ4RGZcdZe_UU-0kOYfYid35_3DuRq7zAe1z6Z-iT0sKdjWsf2f0M30X2GyH5M72pINmnB9pIKnq6ooLmggrpCgIAsQx8eIKeAPMDBlZS9jYLA3kTB83soCKLYqmsvocwb1DIeBOQeupsneASCSpyUeoA8dCSwkajZQfVZLFpXkHYEJVPDZeAAO8NE9wMLdc32UHIF10LCb6yCpJ39QCLn67UlTb8sf_0FrVBnnfZvmr4qBiFE18nvZHsP-QYQEHqDeXnX2T5GviEoHuf9HPnPSb8BSsbZPkK-AcSJPHh3DowvOrB_nfxOtp8BGoyRR4kXeN8k_znpATkcgIbX2d5DvgHE-byicbbPkW8IGvUc2LvowBeOldHwveBZ9ALyBQuS4RkQXsD1sEPupdjhQval2H-HEB7KUpcSUOZ8wLBLpUhynVQ1H3wtS11mwe8vQuZwpyQEQSz5DgIcw9ZegcuDd3C_Y7L8buRMGfDqFIUUAhJDlCJvhdDKPF0mxPFl3QbDTHYwS93Cpy16R9uVeaJ2nl0A7_0A-ATQTiSpcjtV1F2uMdslzqHGM86s3LHv6btAHav7uwIumbpSq0zyOclnZJZM2NyLcEQp9imZbOckSUg-CwOMcxQE_gzRnGDmBWGYstwneMLnGGHfQwh7AfYwmQZZmuBZFGA6y6O17wEfsTLhxdT8pizkZsLrumFzz0M0pJMiSVlRm9-rMa7YCzSjAGtbT-RcC92lzaYGPip4reoTjOKqYHO9TYunf2l2CELULQjPasEQmd0EIRqpAs8KwBDBeiuaIoeVULCpmRZ0_t334xDBly2r7PjJhw3dALwI-QyVEJNGFvP-pfyGq22TTjNRup_d3dfdTgrTP-NHY5Ea4Ednsv0c_zsAAP__6k9aoA">