[MBB] Early exit to reduce indentation, per coding guidelines. NFC.

llvm-svn: 270773
This commit is contained in:
Chad Rosier 2016-05-25 21:53:46 +00:00
parent e4580bceba
commit 7ea3413fa0

View File

@ -404,7 +404,8 @@ void MachineBasicBlock::moveAfter(MachineBasicBlock *NewBefore) {
void MachineBasicBlock::updateTerminator() { void MachineBasicBlock::updateTerminator() {
const TargetInstrInfo *TII = getParent()->getSubtarget().getInstrInfo(); const TargetInstrInfo *TII = getParent()->getSubtarget().getInstrInfo();
// A block with no successors has no concerns with fall-through edges. // A block with no successors has no concerns with fall-through edges.
if (this->succ_empty()) return; if (this->succ_empty())
return;
MachineBasicBlock *TBB = nullptr, *FBB = nullptr; MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
SmallVector<MachineOperand, 4> Cond; SmallVector<MachineOperand, 4> Cond;
@ -414,14 +415,14 @@ void MachineBasicBlock::updateTerminator() {
assert(!B && "UpdateTerminators requires analyzable predecessors!"); assert(!B && "UpdateTerminators requires analyzable predecessors!");
if (Cond.empty()) { if (Cond.empty()) {
if (TBB) { if (TBB) {
// The block has an unconditional branch. If its successor is now // The block has an unconditional branch. If its successor is now its
// its layout successor, delete the branch. // layout successor, delete the branch.
if (isLayoutSuccessor(TBB)) if (isLayoutSuccessor(TBB))
TII->RemoveBranch(*this); TII->RemoveBranch(*this);
} else { } else {
// The block has an unconditional fallthrough. If its successor is not // The block has an unconditional fallthrough. If its successor is not its
// its layout successor, insert a branch. First we have to locate the // layout successor, insert a branch. First we have to locate the only
// only non-landing-pad successor, as that is the fallthrough block. // non-landing-pad successor, as that is the fallthrough block.
for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) { for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) {
if ((*SI)->isEHPad()) if ((*SI)->isEHPad())
continue; continue;
@ -429,8 +430,8 @@ void MachineBasicBlock::updateTerminator() {
TBB = *SI; TBB = *SI;
} }
// If there is no non-landing-pad successor, the block has no // If there is no non-landing-pad successor, the block has no fall-through
// fall-through edges to be concerned with. // edges to be concerned with.
if (!TBB) if (!TBB)
return; return;
@ -439,61 +440,63 @@ void MachineBasicBlock::updateTerminator() {
if (!isLayoutSuccessor(TBB)) if (!isLayoutSuccessor(TBB))
TII->InsertBranch(*this, TBB, nullptr, Cond, DL); TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
} }
} else { return;
if (FBB) { }
// The block has a non-fallthrough conditional branch. If one of its
// successors is its layout successor, rewrite it to a fallthrough
// conditional branch.
if (isLayoutSuccessor(TBB)) {
if (TII->ReverseBranchCondition(Cond))
return;
TII->RemoveBranch(*this);
TII->InsertBranch(*this, FBB, nullptr, Cond, DL);
} else if (isLayoutSuccessor(FBB)) {
TII->RemoveBranch(*this);
TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
}
} else {
// Walk through the successors and find the successor which is not
// a landing pad and is not the conditional branch destination (in TBB)
// as the fallthrough successor.
MachineBasicBlock *FallthroughBB = nullptr;
for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) {
if ((*SI)->isEHPad() || *SI == TBB)
continue;
assert(!FallthroughBB && "Found more than one fallthrough successor.");
FallthroughBB = *SI;
}
if (!FallthroughBB && canFallThrough()) {
// We fallthrough to the same basic block as the conditional jump
// targets. Remove the conditional jump, leaving unconditional
// fallthrough.
// FIXME: This does not seem like a reasonable pattern to support, but
// it has been seen in the wild coming out of degenerate ARM test cases.
TII->RemoveBranch(*this);
// Finally update the unconditional successor to be reached via a branch if (FBB) {
// if it would not be reached by fallthrough. // The block has a non-fallthrough conditional branch. If one of its
if (!isLayoutSuccessor(TBB)) // successors is its layout successor, rewrite it to a fallthrough
TII->InsertBranch(*this, TBB, nullptr, Cond, DL); // conditional branch.
if (isLayoutSuccessor(TBB)) {
if (TII->ReverseBranchCondition(Cond))
return; return;
} TII->RemoveBranch(*this);
TII->InsertBranch(*this, FBB, nullptr, Cond, DL);
// The block has a fallthrough conditional branch. } else if (isLayoutSuccessor(FBB)) {
if (isLayoutSuccessor(TBB)) { TII->RemoveBranch(*this);
if (TII->ReverseBranchCondition(Cond)) { TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
// We can't reverse the condition, add an unconditional branch.
Cond.clear();
TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
return;
}
TII->RemoveBranch(*this);
TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
} else if (!isLayoutSuccessor(FallthroughBB)) {
TII->RemoveBranch(*this);
TII->InsertBranch(*this, TBB, FallthroughBB, Cond, DL);
}
} }
return;
}
// Walk through the successors and find the successor which is not a landing
// pad and is not the conditional branch destination (in TBB) as the
// fallthrough successor.
MachineBasicBlock *FallthroughBB = nullptr;
for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) {
if ((*SI)->isEHPad() || *SI == TBB)
continue;
assert(!FallthroughBB && "Found more than one fallthrough successor.");
FallthroughBB = *SI;
}
if (!FallthroughBB && canFallThrough()) {
// We fallthrough to the same basic block as the conditional jump targets.
// Remove the conditional jump, leaving unconditional fallthrough.
// FIXME: This does not seem like a reasonable pattern to support, but it
// has been seen in the wild coming out of degenerate ARM test cases.
TII->RemoveBranch(*this);
// Finally update the unconditional successor to be reached via a branch if
// it would not be reached by fallthrough.
if (!isLayoutSuccessor(TBB))
TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
return;
}
// The block has a fallthrough conditional branch.
if (isLayoutSuccessor(TBB)) {
if (TII->ReverseBranchCondition(Cond)) {
// We can't reverse the condition, add an unconditional branch.
Cond.clear();
TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
return;
}
TII->RemoveBranch(*this);
TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
} else if (!isLayoutSuccessor(FallthroughBB)) {
TII->RemoveBranch(*this);
TII->InsertBranch(*this, TBB, FallthroughBB, Cond, DL);
} }
} }