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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] PseudoVCPOP_M_B8_MASK transforms into incorrect machine code after RISCVVectorPeephole
        </td>
    </tr>

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

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

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

<pre>
    https://godbolt.org/z/4sxvzGoPG 

```
#include <iostream>
#include <riscv_vector.h>
using std::cerr;
using std::endl;
template <class T> bool __attribute__((noinline)) check(T, T) {}
unsigned long main_var_59;
int main() {
  unsigned long var_61;
  vbool8_t var_8 = __riscv_vmset_m_b8(7);
  unsigned long var_5 = __riscv_vcpop_m_b8_m(var_8, var_8, 6);
  vbool8_t var_19;
  if (check(var_5, var_61))
    cerr << endl;
  unsigned long var_4 = __riscv_vcpop_m_b8_m(var_8, var_19, 8);
 check(var_4, main_var_59);
}
```

```
# After RISC-V Vector Peephole Optimization
# Machine code for function main: IsSSA, TracksLiveness

...
*** Bad machine code: Too few operands ***
- function:    main
- basic block: %bb.7  (0x411b1a70)
- instruction: %20:gpr = PseudoVCPOP_M_B8 8, 0, debug-location !1042; example.cpp:14:25
4 operands expected, but 3 given.

*** Bad machine code: Expected a register operand. ***
- function:    main
- basic block: %bb.7  (0x411b1a70)
- instruction: %20:gpr = PseudoVCPOP_M_B8 8, 0, debug-location !1042; example.cpp:14:25
- operand 1:   8

```


Maybe this line https://github.com/llvm/llvm-project/blob/82d5dd28b4de7245088f7ed40da37f8cf80461e4/llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp#L486 which comes from https://github.com/llvm/llvm-project/commit/129440728ce3e688969ed253a6709a5d50c5e850 is reason.


</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVV2P2yoQ_TXkZbQRBjvGD3lwtk1V3a66urvaVwvDOOHWNhbgdNtffwVO9rP36_FKKLGYmTMz5wwgvTeHEXFLih0pPqzkHI7WbXd4c1i1Vv_YHkOYPOE1YXvC9gerW9uHtXUHwvY_Cdvn_vH085O9_QSE1nFt6HnRmjBuRtXPGoHwa2N9cCgHwj--sznj1ak5oQrWrY-Lx-zNeAAfdMzOa4XOEb57b8BR94sh4DD1MiRE1Uvv4Z7wj9Ba20PTyBCcaeeATUOYIEyM1oy9GZGwirAK1BHVN8LEPWHXcB93SLkj5YeYcUwsaejteIBBmrE5SdcU1ZLXjCFtJtgljNYAr6NiwCZbAgBOsSjRhLQtgPAP0DRnFgaPoRmaNtZYxuL4X-EVrwPVZKcU2AyEiYQce3n62LwAe1VA9rRtOiBMXKhIOS4Qm2whKvkBRD0i0YRfw7MEv6oy_9dVZlX8Es9lviwkj7aX3F-8Fo1eDd67OYS6C-jg989311cP8JAGDW4Rp6PtEb5OwQzmpwzGjmf_G6mOZkRQViN01kE3jyraF6V5DZ_93V2dZsVJ9c1_MScc0fsl_Xq9TkDnBTupYXgBGQHurYUOv4Od0MlRe3hyJ7S-ekoYXQGWtHG_ld4oaHurvkUTYUXbrkuIutHHPMvaTJZ00ekKzOiDm59wCCsYJbw-TC6Jcutx1vbh-vbrbXPT7AQkKWj80djOh6veqsQKEJZlNGeE7wAf5TD1uFbTRHid5YTXrCC0zp87wccJVUAdgdo5AIdDpGd91uZvafl4jgUJDg_GR93OwOv_O0VXl04gW2oWv5jWtG7kjxYhHI2HeEfBm3vYhOPcrpUdCNv3_enydzU5-weqQNi-7W1L2F4wXWjNRJtrLFleUCG6EnVOteRlJ1QnaL7JMH-BY2LcvXQHjDjxyDxc_peDczk3qT3Gv-RiA9-PRh1B2QE9dM4O_71gZYfBxI-MVXlOSyYUctwIUW0q1KzgclPSSha6oKpAUVAwHhxKby9ztdJbriteyRVus5Jv8kwUFV0dtxSpxop3YsOUqqqWi0opxUuWlUpJwVZmyygraEarjLKqoOtNUTHJhGqx67imHckpDtL061h0fP5WxvsZtxljLC9WvWyx9-kRZWzE75CshLH4prpt6rSdD57ktDc--GeYYEKfXt-F5-L9wDU39d1vEJwcfWfd4MGMwYIZlXUOVXh1fkA-XXNvtFrNrn_7mP-zJqkNnzRJfZ627M8AAAD__1Gve1k">