Analyze has to be before checking the condition, obviously. Properly construct an iterator for prior.

llvm-svn: 88917
This commit is contained in:
Jim Grosbach 2009-11-16 17:10:56 +00:00
parent 16917aa19d
commit 47d5e333ff
1 changed files with 8 additions and 6 deletions

View File

@ -1772,13 +1772,15 @@ AdjustJTTargetBlockForward(MachineBasicBlock *BB, MachineBasicBlock *JTBB)
int Size = BBSizes[BBI]; int Size = BBSizes[BBI];
MachineBasicBlock *TBB = 0, *FBB = 0; MachineBasicBlock *TBB = 0, *FBB = 0;
SmallVector<MachineOperand, 4> Cond; SmallVector<MachineOperand, 4> Cond;
// If the block is small and ends in an unconditional branch, move it.
if (Size < 50 && Cond.empty()) {
// If the block terminator isn't analyzable, don't try to move the block
if (TII->AnalyzeBranch(*BB, TBB, FBB, Cond))
return NULL;
MachineFunction::iterator OldPrior = prior(BB); // If the block terminator isn't analyzable, don't try to move the block
if (TII->AnalyzeBranch(*BB, TBB, FBB, Cond))
return NULL;
// If the block is small and ends in an unconditional branch, move it.
if (Size < 50 && Cond.empty() && BB != MF.begin()) {
MachineFunction::iterator BBi = BB;
MachineFunction::iterator OldPrior = prior(BBi);
BB->moveAfter(JTBB); BB->moveAfter(JTBB);
OldPrior->updateTerminator(); OldPrior->updateTerminator();
BB->updateTerminator(); BB->updateTerminator();