- Notifications
You must be signed in to change notification settings - Fork 15.3k
Closed
Labels
llvmUmbrella label for LLVM issuesUmbrella label for LLVM issues
Description
#79425 has adopted TableGen-based macro fusion.
And it will generate RISCVGenMacroFusion.inc.
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?
Metadata
Metadata
Assignees
Labels
llvmUmbrella label for LLVM issuesUmbrella label for LLVM issues