assert(RS && "Register scavenging must be on");
Register Reg = RS->FindUnusedReg(&Lanai::GPRRegClass);
if (!Reg)
- Reg = RS->scavengeRegister(&Lanai::GPRRegClass, II, SPAdj);
+ Reg = RS->scavengeRegisterBackwards(Lanai::GPRRegClass, II, false, SPAdj);
assert(Reg && "Register scavenger failed");
bool HasNegOffset = false;
.addReg(FrameReg)
.addImm(-Offset);
MI.eraseFromParent();
- } else {
- MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false);
- MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
+ return true;
}
+
+ MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false);
+ MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
return false;
}
bool requiresRegisterScavenging(const MachineFunction &MF) const override;
+ bool supportsBackwardScavenger() const override { return true; }
+
bool eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
unsigned FIOperandNum,
RegScavenger *RS = nullptr) const override;