Skip to content

Commit 5f32862

Browse files
committed
Peek through COPY in RISCVVectorPeephole
1 parent 0149853 commit 5f32862

13 files changed

+251
-362
lines changed

llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,12 @@ bool RISCVVectorPeephole::convertSameMaskVMergeToVMv(MachineInstr &MI) {
421421
return false;
422422
MachineInstr *True = MRI->getVRegDef(MI.getOperand(3).getReg());
423423

424+
// Peek through COPY.
425+
if (True && True->isCopy()) {
426+
if (Register TrueReg = True->getOperand(1).getReg(); TrueReg.isVirtual())
427+
True = MRI->getVRegDef(TrueReg);
428+
}
429+
424430
if (!True || True->getParent() != MI.getParent())
425431
return false;
426432

@@ -722,7 +728,15 @@ bool RISCVVectorPeephole::foldVMergeToMask(MachineInstr &MI) const {
722728
Register TrueReg = MI.getOperand(3).getReg();
723729
if (!TrueReg.isVirtual() || !MRI->hasOneUse(TrueReg))
724730
return false;
725-
MachineInstr &True = *MRI->getUniqueVRegDef(TrueReg);
731+
MachineInstr *TrueMI = MRI->getUniqueVRegDef(TrueReg);
732+
// Peek through COPY.
733+
if (TrueMI->isCopy()) {
734+
if (TrueReg = TrueMI->getOperand(1).getReg();
735+
TrueReg.isVirtual() && MRI->hasOneUse(TrueReg))
736+
TrueMI = MRI->getVRegDef(TrueReg);
737+
}
738+
739+
MachineInstr &True = *TrueMI;
726740
if (True.getParent() != MI.getParent())
727741
return false;
728742
const MachineOperand &MaskOp = MI.getOperand(4);

0 commit comments

Comments
 (0)