Use the integer compare when the value is small enough. Use the "move into a
register and then compare against that" method when it's too large. We have to move the value into the register in the "movw, movt" pair of instructions. llvm-svn: 142440
This commit is contained in:
parent
9bede2dd92
commit
4969dcdef9
|
@ -5672,9 +5672,7 @@ EmitSjLjDispatchBlock(MachineInstr *MI, MachineBasicBlock *MBB) const {
|
||||||
MachineRegisterInfo *MRI = &MF->getRegInfo();
|
MachineRegisterInfo *MRI = &MF->getRegInfo();
|
||||||
ARMFunctionInfo *AFI = MF->getInfo<ARMFunctionInfo>();
|
ARMFunctionInfo *AFI = MF->getInfo<ARMFunctionInfo>();
|
||||||
MachineFrameInfo *MFI = MF->getFrameInfo();
|
MachineFrameInfo *MFI = MF->getFrameInfo();
|
||||||
MachineConstantPool *MCP = MF->getConstantPool();
|
|
||||||
int FI = MFI->getFunctionContextIndex();
|
int FI = MFI->getFunctionContextIndex();
|
||||||
const Function *F = MF->getFunction();
|
|
||||||
|
|
||||||
const TargetRegisterClass *TRC =
|
const TargetRegisterClass *TRC =
|
||||||
Subtarget->isThumb() ? ARM::tGPRRegisterClass : ARM::GPRRegisterClass;
|
Subtarget->isThumb() ? ARM::tGPRRegisterClass : ARM::GPRRegisterClass;
|
||||||
|
@ -5863,6 +5861,23 @@ EmitSjLjDispatchBlock(MachineInstr *MI, MachineBasicBlock *MBB) const {
|
||||||
.addImm(4)
|
.addImm(4)
|
||||||
.addMemOperand(FIMMOLd));
|
.addMemOperand(FIMMOLd));
|
||||||
|
|
||||||
|
if (NumLPads < 256) {
|
||||||
|
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::CMPri))
|
||||||
|
.addReg(NewVReg1)
|
||||||
|
.addImm(NumLPads));
|
||||||
|
} else {
|
||||||
|
unsigned VReg1 = MRI->createVirtualRegister(TRC);
|
||||||
|
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::MOVi16), VReg1)
|
||||||
|
.addImm(NumLPads & 0xFF));
|
||||||
|
unsigned VReg2 = MRI->createVirtualRegister(TRC);
|
||||||
|
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::MOVTi16), VReg2)
|
||||||
|
.addReg(VReg1)
|
||||||
|
.addImm(NumLPads >> 16));
|
||||||
|
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::CMPrr))
|
||||||
|
.addReg(NewVReg1)
|
||||||
|
.addReg(VReg2));
|
||||||
|
}
|
||||||
|
|
||||||
unsigned NewVReg2 = MRI->createVirtualRegister(TRC);
|
unsigned NewVReg2 = MRI->createVirtualRegister(TRC);
|
||||||
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::MOVi16), NewVReg2)
|
AddDefaultPred(BuildMI(DispatchBB, dl, TII->get(ARM::MOVi16), NewVReg2)
|
||||||
.addImm(LPadList.size()));
|
.addImm(LPadList.size()));
|
||||||
|
|
Loading…
Reference in New Issue