Avoid de-referencing pass beginning of a basic block. No small test case possible. rdar://9216009

llvm-svn: 128743
This commit is contained in:
Evan Cheng 2011-04-01 22:09:28 +00:00
parent 3d9df607ba
commit 88530e6568
1 changed files with 21 additions and 18 deletions

View File

@ -1650,7 +1650,9 @@ bool ARMConstantIslands::OptimizeThumb2Branches(MachineFunction &MF) {
unsigned BrOffset = GetOffsetOf(Br.MI) + 4 - 2;
unsigned DestOffset = BBOffsets[DestBB->getNumber()];
if (BrOffset < DestOffset && (DestOffset - BrOffset) <= 126) {
MachineBasicBlock::iterator CmpMI = Br.MI; --CmpMI;
MachineBasicBlock::iterator CmpMI = Br.MI;
if (CmpMI != Br.MI->getParent()->begin()) {
--CmpMI;
if (CmpMI->getOpcode() == ARM::tCMPi8) {
unsigned Reg = CmpMI->getOperand(0).getReg();
Pred = llvm::getInstrPredicate(CmpMI, PredReg);
@ -1672,6 +1674,7 @@ bool ARMConstantIslands::OptimizeThumb2Branches(MachineFunction &MF) {
}
}
}
}
return MadeChange;
}