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