<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/156883>156883</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVX-512] Look for masked `vpmovqb` opportunities on Zen 4+
</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>
Zig version: ([Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:2,endLineNumber:3,positionColumn:2,positionLineNumber:3,selectionStartColumn:2,selectionStartLineNumber:3,startColumn:2,startLineNumber:3),source:'export+fn+foo(x:+@Vector(8,+u64),+y:+@Vector(8,+u64))+@Vector(8,+u8)+%7B%0A++++return+@select(u8,+x+%3D%3D+y,+@popCount(x),+@as(@Vector(8,+u8),+@splat(0)))%3B%0A%7D'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:44.87263226649249,l:'4',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:2,lang:zig,libs:!(),options:'-O+ReleaseFast+-target+x86_64-linux+-mcpu%3Dznver5+-fomit-frame-pointer',overrides:!(),selection:(endColumn:19,endLineNumber:6,positionColumn:19,positionLineNumber:6,selectionStartColumn:19,selectionStartLineNumber:6,startColumn:19,startLineNumber:6),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0')),k:55.127367733507505,l:'4',m:53.31335625350126,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4))
```zig
export fn foo(x: @Vector(8, u64), y: @Vector(8, u64)) @Vector(8, u8) {
return @select(u8, x == y, @popCount(x), @as(@Vector(8, u8), @splat(0)));
}
```
LLVM version: ([Godbolt](https://llvm.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:llvm,selection:(endColumn:50,endLineNumber:10,positionColumn:50,positionLineNumber:10,selectionStartColumn:50,selectionStartLineNumber:10,startColumn:50,startLineNumber:10),source:'define+dso_local+range(i8+0,+65)+%3C8+x+i8%3E+@foo(%3C8+x+i64%3E+%250,+%3C8+x+i64%3E+%251)+local_unnamed_addr+%7B%0AEntry:%0A++%252+%3D+icmp+eq+%3C8+x+i64%3E+%250,+%251%0A++%253+%3D+tail+call+range(i64+0,+65)+%3C8+x+i64%3E+@llvm.ctpop.v8i64(%3C8+x+i64%3E+%250)%0A++%254+%3D+trunc+nuw+nsw+%3C8+x+i64%3E+%253+to+%3C8+x+i8%3E%0A++%255+%3D+select+%3C8+x+i1%3E+%252,+%3C8+x+i8%3E+%254,+%3C8+x+i8%3E+zeroinitializer%0A++ret+%3C8+x+i8%3E+%255%0A%7D%0A%0Adeclare+%3C8+x+i64%3E+@llvm.ctpop.v8i64(%3C8+x+i64%3E)+%231'),l:'5',n:'0',o:'LLVM+IR+source+%231',t:'0')),k:50.91543156059285,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:llctrunk,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+--mtriple%3Dx86_64-linux+-mcpu%3Dznver5',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+llc+(trunk)+(Editor+%231)',t:'0')),k:49.08456843940715,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',m:100,n:'0',o:'',t:'0')),version:4))
```llvm
define dso_local range(i8 0, 65) <8 x i8> @foo(<8 x i64> %0, <8 x i64> %1) local_unnamed_addr {
Entry:
%2 = icmp eq <8 x i64> %0, %1
%3 = tail call range(i64 0, 65) <8 x i64> @llvm.ctpop.v8i64(<8 x i64> %0)
%4 = trunc nuw nsw <8 x i64> %3 to <8 x i8>
%5 = select <8 x i1> %2, <8 x i8> %4, <8 x i8> zeroinitializer
ret <8 x i8> %5
}
declare <8 x i64> @llvm.ctpop.v8i64(<8 x i64>) #1
```
Emits:
```asm
foo:
vpcmpeqq k1, zmm0, zmm1
vpopcntq zmm0, zmm0
vpmovqb xmm0, zmm0
vmovdqu8 xmm0 {k1} {z}, xmm0
vzeroupper
ret
```
Should be:
```asm
foo:
vpcmpeqq k1, zmm0, zmm1
vpopcntq zmm0, zmm0
vpmovqb xmm0 {k1}, zmm0
vzeroupper
ret
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWFlv474R_zT0C2FDIkUdD36w7KQosO0W_0WDYl8WOmiH_1CkQlHO8emLEWVHihR7rxZ9qGHI0nAOznCOn5w1jTgozteIpYjtFllr77VZ32VSlJl5WOS6fFl_FQd85KYRWiG6wYjEiKV_0WWupUVsh0h8b23dILpB5BaR21dxWB1geSVtR6GHbs0HSRJ__HCP6KbQJb8phdUGka3oVuO9kFxlFe-eIh-RCJHtXiv7pcgkUP2gJ_yz4f94dmyeY_sTlhHZykyBrVdxQGTbcMkL6_xBJOaq3GrZVvBIENlyVX4Siv-9rXJuEN1QRLa1bgRIjBhPxAn32cAXmxk7khkvTSWnAnN8CSzo1hR9UPhzrY1FJN0ruGiNSOwCkaLAu-NFF9A4RmSLSNqGgVOBSPpylSv5YDnulwiL4OJ1ak5fw21rlJN0LiMSt73osxOju_6Svjg6Crxa11vdKtvt_7RHFHhZAzny4S56rqaWGYh6p40nYOG0OxbtuqQAfunixlyWqFHOaPf0FXIl7aPcbZjQPvnskN-Z2T4gugmCVRyRkBIShkFCgoGl4IIl9wAV5M0o387XSVULyQdVcqbQzas1rXqAmhDScuNKM85HpnOhMvMyKilH-pz_Cac1XCh0VXFlPyv5MtJR8rw9bDMpmxF7yatMHSQf8woDeX_kzYjMn3nR2nFpC2W5HHFJkZvMvGx1OVZqjahGokduct3wnduBUIf3sdzL7NDcCf70uebqZxsKed9QpMibwQmBIV1DkffOLj8jkv7BJc8afps1UKhLm5kDh7vnOPwWBkspVAuFsayKuu0K41UduWFA2utK2OXeZBVf1hriY_oEOnJjRMnfW7_Q4fxkpsWFcy2u45ztceHHPc5PLje5cNLknMQc46jL-d9duIik3bGkfRmkiMSnmXIu4-RyJTO28klEwyiilHkR89iklCHzGF1Rn1IWEkaZ55Pw50p84Bi52ifmhN_m86lnexsUeu4LwfA2bkTgvcJv4wG_76j4PBrwy8X1ZGYp7shRirwNxhi7EYAnAwA_Y0R3iO4wtH082_TxRy0fnxo-nm_3FKyjaDf0H-69zadPd3_7IRwj5bH6nwUysLnLdc68mTr3vblCZ95Hhd7xf1DpbLo2IzsjMsv5HtGUfC8UzN2y0d-kLjIJqCJTB45ILGJEUs-N_ZCdcQjdxj26AAZGbxwqcPk-Xoc07hkII6zXdZHHNY2028u3VsFBlt-ysjQjEHSjbD9WB4iIEUbeME8qiqpGJOWP10y-baszP9ZIBxptJiA-RSZHYQJ1l-M0MBh4XcYXttb16uiEr0Yteb-rYLgr06oCkVS1T3Btnq75Cy5Z_eFhji2xgaVTh3kn6I-0k7lDjkcswUWWV260UMKKTIpXGMHnDRk-NT7WzIYg1N15m5IXMjP8d51KMoap3zkuoTEikv71jx9Fu8xbJT4LqM9CjyUkno7I_wralbL4P979j-Ld6dy5DnihlJfLyhpRS96V6VWc-7OAdm7OzeLZD6fcBTh7ZcZN0ez8hPsVMCtl4UBsn-bJz0HaIFl5ccDCOKBJ4EX-bynXKXKtuoHu_SYMO4BxXepBzwRggM-wAL-BAgxWcTfoMKLbGD9jESN6g99AQE8Ng47sJiyeUCGYeDroe3B7HvGAcyH4gGcxDHXMH6fKnAlQ2vPTjh9GNoaBjQfjes6DXtH8IJgxlpzsBM4ODGGs2iesmqfp7ii2ehSskzTrpF3unxn8XooMwxb3xGBCfD8wQbXhdiLJ3kD7eSj-uP9d0KASJtj_phK2cSc2XMwaSCjIDHeYx7qoav74iPvPAxQzfq0qr__1-1cb-BxrXRfKnpkHbJ5TVunjY46f39FP4pU-lo9tfHoGNsivBx9FO7h5hYDA29JJHwSzres-jO4DuGPi7Zd73coS5_y6x2dfesd_yeMz25vjZ4_m-L7DoUW5pmVCk2zB137EwiQhYZAs7tcR53HhJWGS0Sgqk7jMc17m-zAsebnPQ7oQa-IR5iVe4FPqBfGqDIIgSgqfxPuM7At4s-RVJuSqSyttDgvRNC1f-yyMY7qQWc5l0_0xTojiT7hbRYQgtluYNQgt8_bQQF6KxjZvaqywsvtHfXP3ryXzQQB_0voB77XBVdY88BKj0OvDhEIP6xpezVsoFN5grfBXrjAA6UVr5Hr8VnoQ9r7NV4Wu-lfU_mdZG90BGXLb7bRB5LZ35bgm_w4AAP__tqR6lw">