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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV][MACROFusion] Improve fusion in pre-RA
        </td>
    </tr>

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

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

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

<pre>
    #79425 has adopted TableGen-based macro fusion. 

And it will generate RISCVGenMacroFusion.inc.

```cpp
bool isTuneAUIPCADDIFusion(
    const TargetInstrInfo &TII,
    const TargetSubtargetInfo &STI,
    const MachineInstr *FirstMI,
    const MachineInstr &SecondMI) {
  auto &MRI = SecondMI.getMF()->getRegInfo();
  {
    const MachineInstr *MI = &SecondMI;
    if (( MI->getOpcode() != RISCV::ADDI ))
      return false;
  }
  if (!FirstMI)
    return true;
  {
    const MachineInstr *MI = FirstMI;
    if (( MI->getOpcode() != RISCV::AUIPC ))
      return false;
  }
  {
    const MachineInstr *MI = &SecondMI;
    if (!(
 MI->getOperand(0).getReg().isVirtual()
        || MI->getOperand(0).getReg() == MI->getOperand(1).getReg()
      ))
 return false;
  }
  {
    Register FirstDest = FirstMI->getOperand(0).getReg();
    if (FirstDest.isVirtual() && !MRI.hasOneNonDBGUse(FirstDest))
      return false;
  }
  if (!(FirstMI->getOperand(0).isReg() &&
 SecondMI.getOperand(1).isReg() &&
        FirstMI->getOperand(0).getReg() == SecondMI.getOperand(1).getReg()))
    return false;
  return true;
}
```

My question is, is it possible to check `FirstMI->getOperand(0).getReg() == SecondMI.getOperand(2).getReg()` when these two regs are virtual and the second inst is commutative?

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVlFzozYQ_jXyy44ZEAabBx4cU2d4oOk4vnsXYg1qsUQlkfT66zsC7JDUaXN38XhsD-z37bffLlozY0QtEVMS3ZEoW7DeNkqnf__FAxrRcFGq6ltKaLhOVjSChhlgleosVnBkZYv3KJclM1jBmXGt4NQboaQHxM-Ivx0_t7ICYeFZtC3UKFEzi3DIH3df71EWDrYfUUJybw4ksT--edeNV0qlWhDm2Evcfsl_222zLB_BhG7GEAAArqSxcGS6RptLY3UuTwoIjY95TujuduBjX9oJMQY_Hm8FF4w3QuJAC4Ru90IbW3wgMn5ErmTlQhMg67tLOOvtkK445EDCDC5hXo222Lu6aLIk4S812gPWTtx4jYRXihnbezKLkXwuI5yBxAkG1g0U-ZTsoeOqwjEXEBo4-NA1Em5JuHXWg5NBkxcaAI221xJOrDX4SmF2-XlJFVydmxFMcKt7_KH6Lpw_WZubrR8q7vM6EbxM9Ew2aiYrQjc-oYk3TsRYhSfMV6Ftz9ppOmaynawdWe8-ROTEOX03YoO3sfMkr9z6TqMOWAtjUY_ty9DYeTP_X_MNA69Mb41xxhMau64Xh9xrmHmQ-KuS2d39F4Nz5E8N94XoPfnCzBwfFE0U88f_jfXvYqbXh_269Pg_cr2y940R79hw69m9WnM9y-cHfPEN_uzRWKEkCEPoDoRxq6JTxoiyRbAKeIP8DyCx_0nV0X9VF_vw3KAE26BBsM8KNNYGmEZ4GicHmKzcbTADJQj3XAsDXJ3PvWVWPCEJ92NNiyoNqyRM2ALTYO1v4nWw2iSLJl1tTlhxXPGE-jTGBCvOsKIUQz8KktV6IVLq05VPaejH0cZPvFMZrdcJ5zFNgnAVcLLy8cxE67Xt09lTul4IY3pMN3QdbhYtK7E1wx6nVOIzDDcJpW6t69RhlmVfG7LyW2GseWGxwrbDH4DxCIwyEt0V293hYVqtUQb5udPqCaf9DkJCp3F52C563aaNtZ1xJyfdE7qvhW360uPqTOje5Zi-lp1WvyO3hO4HZYbQ_aD8nwAAAP__jo1sXg">