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