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