forked from OSchip/llvm-project
[AMDGPU] Use standard MachineBasicBlock::getFallThrough method. NFCI.
Differential Revision: https://reviews.llvm.org/D101825
This commit is contained in:
parent
58d28b931f
commit
c8e5aef1a0
|
@ -730,23 +730,6 @@ void SILowerControlFlow::lowerInitExec(MachineBasicBlock *MBB,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) {
|
bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) {
|
||||||
auto GetFallThroughSucc = [=](MachineBasicBlock *B) -> MachineBasicBlock * {
|
|
||||||
auto *S = B->getNextNode();
|
|
||||||
if (!S)
|
|
||||||
return nullptr;
|
|
||||||
if (B->isSuccessor(S)) {
|
|
||||||
// The only fallthrough candidate
|
|
||||||
MachineBasicBlock::iterator I(B->getFirstInstrTerminator());
|
|
||||||
MachineBasicBlock::iterator E = B->end();
|
|
||||||
for (; I != E; I++) {
|
|
||||||
if (I->isBranch() && TII->getBranchDestBlock(*I) == S)
|
|
||||||
// We have unoptimized branch to layout successor
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return S;
|
|
||||||
};
|
|
||||||
|
|
||||||
for (auto &I : MBB.instrs()) {
|
for (auto &I : MBB.instrs()) {
|
||||||
if (!I.isDebugInstr() && !I.isUnconditionalBranch())
|
if (!I.isDebugInstr() && !I.isUnconditionalBranch())
|
||||||
return false;
|
return false;
|
||||||
|
@ -759,7 +742,7 @@ bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) {
|
||||||
|
|
||||||
while (!MBB.predecessors().empty()) {
|
while (!MBB.predecessors().empty()) {
|
||||||
MachineBasicBlock *P = *MBB.pred_begin();
|
MachineBasicBlock *P = *MBB.pred_begin();
|
||||||
if (GetFallThroughSucc(P) == &MBB)
|
if (P->getFallThrough() == &MBB)
|
||||||
FallThrough = P;
|
FallThrough = P;
|
||||||
P->ReplaceUsesOfBlockWith(&MBB, Succ);
|
P->ReplaceUsesOfBlockWith(&MBB, Succ);
|
||||||
}
|
}
|
||||||
|
@ -780,7 +763,7 @@ bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) {
|
||||||
MBB.clear();
|
MBB.clear();
|
||||||
MBB.eraseFromParent();
|
MBB.eraseFromParent();
|
||||||
if (FallThrough && !FallThrough->isLayoutSuccessor(Succ)) {
|
if (FallThrough && !FallThrough->isLayoutSuccessor(Succ)) {
|
||||||
if (!GetFallThroughSucc(Succ)) {
|
if (!Succ->canFallThrough()) {
|
||||||
MachineFunction *MF = FallThrough->getParent();
|
MachineFunction *MF = FallThrough->getParent();
|
||||||
MachineFunction::iterator FallThroughPos(FallThrough);
|
MachineFunction::iterator FallThroughPos(FallThrough);
|
||||||
MF->splice(std::next(FallThroughPos), Succ);
|
MF->splice(std::next(FallThroughPos), Succ);
|
||||||
|
|
Loading…
Reference in New Issue