<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132166>132166</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] mulhu + srl pattern not recognized
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nikic
</td>
</tr>
</table>
<pre>
https://llvm.godbolt.org/z/9Khd9Gdhh
```llvm
define <8 x i16> @mul_and_shift16(<8 x i16> %a, <8 x i16> %b) {
%a.ext = zext <8 x i16> %a to <8 x i32>
%b.ext = zext <8 x i16> %b to <8 x i32>
%mul = mul <8 x i32> %a.ext, %b.ext
%shift = lshr <8 x i32> %mul, splat(i32 16)
%trunc = trunc <8 x i32> %shift to <8 x i16>
ret <8 x i16> %trunc
}
define <8 x i16> @mul_and_shift17(<8 x i16> %a, <8 x i16> %b) {
%a.ext = zext <8 x i16> %a to <8 x i32>
%b.ext = zext <8 x i16> %b to <8 x i32>
%mul = mul <8 x i32> %a.ext, %b.ext
%shift = lshr <8 x i32> %mul, splat(i32 17)
%trunc = trunc <8 x i32> %shift to <8 x i16>
ret <8 x i16> %trunc
}
```
Results in:
```
mul_and_shift16: # @mul_and_shift16
pmulhuw xmm0, xmm1
ret
mul_and_shift17: # @mul_and_shift17
pmulhuw xmm0, xmm1
punpcklwd xmm1, xmm0 # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
punpckhwd xmm0, xmm0 # xmm0 = xmm0[4,4,5,5,6,6,7,7]
psrld xmm0, 17
psrld xmm1, 17
packssdw xmm1, xmm0
movdqa xmm0, xmm1
ret
```
The second one could be just pmulhuw + psrlw.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsVU1z6jYU_TXXG00Y-cqyYeEFgUcX3XW66O6N9QHWi2xRS0rS_PqOhEmAkLarrp4HYYtzz7lfFrfz3hxGrVvgj8C3RRdD76Z2NE9GFsKpv9o-hKMHtgbcAe6sfR4WB6eEs2HhpgPg7g1wt_q1V6tfVN8DXUNNT59kC3St9N6MmgDbLMkrMWUN7BuBig7Rfu9G9d33Zh_KGnB5Y4K8A9zcEpELwBWB5hHommSrhX4NBNiWvJ0eblVIcO-_MgT27cwU_8IUXzKHaDPvdL8weA8ohz67OLNyqplnfT99Jg7RJpo_2i4ALg1DkgqzSnxAHqY4ykw_P93wT_oXMedMsvdJ38kvy6SWNdv0_V971fzs1f1eNXOv_o9mnU8Z0PVv2kcbPDFjOqfX2O0pY-lNYvfOX3J8uo5DtH18Ia_DQFOOr8NQJnjS4ZNikxS_uO46apLSVx7OAcTxKJ_si5r3GT6Z0c8uEpoLnc34IwW-Bdxk7ctdwsorrLzC8ArDK4xdYXmX0shx9pdx0n-Mk57jTCoV4CYtPq96Xk1eswc_WXWhfCrfuUwfYPkZ7OST9-qF3KnhhdngntWfHfmqE6eWX75Qv_eaeC3dqIgbNZEuWkWEJj-iD-99BXzM0b0sCtUytWKrrtBt2VRY1ZQhL_q2wkYIqfa86iQ2lVjuKyEla_iSClXLsjAtUuSUIaXLiiNfYCNqJVa83MuK1bqDiuqhM3aRh5KbDoXxPuq2ZFjWdWE7oa3Pgw1RdPJJjwrY-o9lDYiAG0AcjPdaPbhjMIN564JxY8L4tpjaJPog4sFDRa3xwX-4CSbYPDGTFs9_LH3MOfvJkmMXgp5GMrpAJi3dYTRvWhVxsjez9GBCH8VCumEerPPt4Ti5H1oGwF1OyAPu5pyeW_w7AAD__49THBo">