<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/153655>153655</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            s390x: manual `vec_packs` does not optimize well
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          folkertdev
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/PqG76bKcq

I believe that

```llvm
define <8 x i16> @narrow_manual(<4 x i32> %a, <4 x i32> %b) unnamed_addr {
bb2:
  %0 = shufflevector <4 x i32> %a, <4 x i32> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
  %1 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %0, <8 x i32> splat (i32 -32768))
 %2 = tail call <8 x i32> @llvm.smin.v8i32(<8 x i32> %1, <8 x i32> splat (i32 32767))
  %3 = trunc nsw <8 x i32> %2 to <8 x i16>
  ret <8 x i16> %3
}

declare <8 x i32> @llvm.smin.v8i32(<8 x i32>, <8 x i32>) #2

declare <8 x i32> @llvm.smax.v8i32(<8 x i32>, <8 x i32>) #2
```

should optimize into a `vec_packs`. In the linked godbolt, we see that `x86_64` and `aarch64` are able to make this optimization. (wasm32 is not, that'll be its own issue).

Instead we get

```asm
narrow_manual:
 vrepif  %v0, -32768
        vmxf    %v1, %v24, %v0
        vmxf %v0, %v26, %v0
        vrepif  %v2, 32767
        vmnf    %v0, %v2, %v0
 vmnf    %v1, %v2, %v1
        vpkf    %v24, %v1, %v0
        br %r14

narrow_builtin:
        vpksf   %v24, %v24, %v26
        br %r14
```

cc @uweigand 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVV2zoygQ_TXkpeumEETNgw-Z3MnW1L7sP7iF2olsEDKAJju_fguN-Zy7O5Oyyq5O9zlHOA3Se7U3iCURX4h4X8g-tNaVO6sP6EKDw6KyzT9lG8LRE74mbEvYdm-byuqwtG5P2PYHYdu_vv-RZ9Wf9XdC14Suv0GFWuGAEFoZphzJ6PRoPXSErhvcKYNA-KaAM6gkI_wrkJQa6Zw9fXTS9FITVhC-SWMBZ2MBE5KwDbxkK8JW0BsjO2w-ZNM4IPkXQtdVxaJuuoZYRYHwd_Btv9tpHLAO1r1CfUqwuaq9ZPlGcQY0_hODZA7YHPA5SOdAzEE2BznhX2d9yagvSKWhllo_86Xj4i19J8_LoYjZcX2KB6H0Vag_ahmAsNgCb5zlWUHYKj50HVvYL9Iq8zlt8j-0kTW_scYWPtG63tRg_OmZNuoK9tEhY6vD8OwbJnj0WP4-ma3BWkuHv_0hL98QXUUYZ78G-9m2_CfsPBcThW9trxuwx6A69QNBmWBBAsnogPXHUdYHTzK6hG8GQouglTlgA5eJjDwnBI_T4MWuc5F9ZCnJKEjTxISUrm4vGYcgK41xlTt5iE3Kz9QyKGuWcfdO0necgfJg7EgxDjXLtYYKQQUP9mRAed8jYavl5QgwPqBsopw9Ph8B0scT4HHSpyEdHB7VbnTHMBr54ta47dNv6M67-I4Vk-eYGFg6R_S59Io01mU_rbsjHUd38uo9kLly3rAeoO5LkpeS5B7seLhW3nQnPxNWuZhySTqt32XBql7poMx8rF1R_e4F9S7KPsN99F9dRz_3J1T7aJhFU_JmxVdygWWSC8EoTdJi0Zb5DrOaixXlNe6KnFdpWuRFJiQiFVmTLFTJKBO0SNJkxUVaLJnIm6YuRJ1xmde1ICnFTiq9HIfHuv1itFCZCJ4JsdCyQu3He4kxg6fZYCxeU66MTW9Vv_dx-pQP_gYTVNBYer6iZ8LXMPnreYKgsTga-jZqJ9R60Tv9fNup0PbVsrYdYdvx8ppeb0dn_8Y6ELYdpXnCthftQ8n-DQAA__9pwv0A">