<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/79332>79332</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] Extra vmerge in shuffle lowering could be replaced with passthru operand and VL
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
lukel97
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
lukel97
</td>
</tr>
</table>
<pre>
We currently lower
```llvm
%shuffle = shufflevector <4 x i64> %0, <4 x i64> %1, <4 x i32> <i32 2, i32 3, i32 6, i32 7>
```
To something like this:
```asm
vsetivli zero, 4, e64, m1, ta, ma
vmv.v.i v0, 12
vslidedown.vi v8, v8, 2
vmerge.vvm v8, v8, v9, v0
```
The vmerge mask is `0b1100`, which could be emulated by using the passthru on the `vslidedown.vi` and setting VL:
```asm
vsetivli zero, 2, e64, m1, ta, ma
vslidedown.vi v9, v8, 2
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycU12PmzoQ_TXmZbTIX0B44GFvspGutE_3VumzgSG4MRDZhuz211d2SDe7W1VVpWQ8DHNsnzMc5Zw-jogVyf4hnJv5hKYsCOck2yVq9v1kq7WY1FP7Wn1FaGZrcfTmFcx0QUvojtDHNeb0-jNmGdYSz1w_d51BIGIHa75g4ycLRGwlvIDOJRFPQHhGCd9-rrL7quCxKrZacODhTUjELclvSUHE04db3V_1ywRuGtD3ejyC0ScE32tHxOMv-Sh3o0PLxaHXi9GElt_RTuE8GQLmcRnibb2KuXpDDUu6pAG0RJKM321odIvtdBnTJTZsQsM13nUNaI-YLkHYdy1LGSP9DdmVco9w3QUG5U6gHZCc0poxGgF8C5deNz0002xaqBFwmI3y2EL9CrMLSvke4ayc872dYRrjM8npewo5BTW24ND7gDk8_6Ws_A9k_ahd-Vm722lJW4m2FKVKsGIFzRnLM7lJ-qrJi7oopdpkDeZCso1komlVLTouecHaRFecckkZl6xgmdykmWy6ouO8k4x2WVYTSXFQ2qThw08ne0y0czNWRSkET4yq0bjVY7VqTji2RDz-9-__24fDajZbBehDPR8dkdRo593bZl57Ez0aIAeS7eDpxVt1m6Yeb766WjKI_nOGFs9GNdjCRfv-bnZntGFI4X94TmZrqt77c3QA3xO-P2rfz3XaTAPh--jn6_JwttM3bDzh-8jREb6PNH8EAAD__6HkPD4">