Scale = 4;
}
break;
+ case ARM::t2LDRi12:
+ // FIXME: Temporary workaround for a bug introduced by r121082.
+ // We should use t2LDRpci for loads from constantpools.
+ if (isARMLowRegister(U.MI->getOperand(0).getReg()) &&
+ U.MI->getOperand(1).getReg() == ARM::PC) {
+ NewOpc = ARM::tLDRpci;
+ Bits = 8;
+ Scale = 4;
+ }
+ break;
}
if (!NewOpc)
// FIXME: Check if offset is multiple of scale if scale is not 4.
if (CPEIsInRange(U.MI, UserOffset, U.CPEMI, MaxOffs, false, true)) {
U.MI->setDesc(TII->get(NewOpc));
+ if (NewOpc == ARM::tLDRpci)
+ // FIXME: Temporary workaround.
+ // PC is now an implicit operand.
+ U.MI->RemoveOperand(1);
MachineBasicBlock *MBB = U.MI->getParent();
BBSizes[MBB->getNumber()] -= 2;
AdjustBBOffsetsAfter(MBB, -2);
HasImmOffset = true;
HasOffReg = false;
} else {
- if (Entry.WideOpc == ARM::t2LDRi12) {
- Opc = ARM::tLDRpci;
- OpNum = 2;
- }
-
- HasImmOffset = false;
- HasBaseReg = false;
- HasOffReg = false;
+ // FIXME: Temporary workaround for a bug introduced by r121082.
+ // We should use t2LDRpci for loads from constantpools.
+ // We don't want to narrow this to tLDRpci until constant island pass
+ // for fear of pessimizing code.
+ return false;
}
break;
case ARM::t2LDRBi12: