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