forked from OSchip/llvm-project
To shrink a t2LDM instruction to the 16-bit wide tLDM instruction, the base
register must be one of the destination registers for the load. Otherwise, the tLDM instruction will write-back to the base register, which isn't what's desired (otherwise, we'd have a t2LDM_UPD instead). rdar://8394087 llvm-svn: 113297
This commit is contained in:
parent
41994fd45d
commit
88628e9738
|
@ -315,6 +315,18 @@ Thumb2SizeReduce::ReduceLoadStore(MachineBasicBlock &MBB, MachineInstr *MI,
|
|||
ARM_AM::AMSubMode Mode = ARM_AM::getAM4SubMode(MI->getOperand(1).getImm());
|
||||
if (!isARMLowRegister(BaseReg) || Mode != ARM_AM::ia)
|
||||
return false;
|
||||
// For the non-writeback version (this one), the base register must be
|
||||
// one of the registers being loaded.
|
||||
bool isOK = false;
|
||||
for (unsigned i = 4; i < MI->getNumOperands(); ++i) {
|
||||
if (MI->getOperand(i).getReg() == BaseReg) {
|
||||
isOK = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isOK)
|
||||
return false;
|
||||
|
||||
OpNum = 0;
|
||||
isLdStMul = true;
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue