Skip to content

Commit 231e63d

Browse files
authored
[StructurizeCFG] Refactor insertConditions. NFC. (#115476)
This just makes it more obvious that having Parent as the single predecessor is a special case, instead of checking for it in the middle of a loop that finds the nearest common dominator of multiple predecessors.
1 parent 3e1b55c commit 231e63d

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

llvm/lib/Transforms/Scalar/StructurizeCFG.cpp

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -618,28 +618,25 @@ void StructurizeCFG::insertConditions(bool Loops) {
618618
BasicBlock *SuccTrue = Term->getSuccessor(0);
619619
BasicBlock *SuccFalse = Term->getSuccessor(1);
620620

621-
PhiInserter.Initialize(Boolean, "");
622-
PhiInserter.AddAvailableValue(Loops ? SuccFalse : Parent, Default);
623-
624621
BBPredicates &Preds = Loops ? LoopPreds[SuccFalse] : Predicates[SuccTrue];
625622

626-
NearestCommonDominator Dominator(DT);
627-
Dominator.addBlock(Parent);
623+
if (Preds.size() == 1 && Preds.begin()->first == Parent) {
624+
auto &PI = Preds.begin()->second;
625+
Term->setCondition(PI.Pred);
626+
CondBranchWeights::setMetadata(*Term, PI.Weights);
627+
} else {
628+
PhiInserter.Initialize(Boolean, "");
629+
PhiInserter.AddAvailableValue(Loops ? SuccFalse : Parent, Default);
628630

629-
PredInfo ParentInfo{nullptr, std::nullopt};
630-
for (auto [BB, PI] : Preds) {
631-
if (BB == Parent) {
632-
ParentInfo = PI;
633-
break;
631+
NearestCommonDominator Dominator(DT);
632+
Dominator.addBlock(Parent);
633+
634+
for (auto [BB, PI] : Preds) {
635+
assert(BB != Parent);
636+
PhiInserter.AddAvailableValue(BB, PI.Pred);
637+
Dominator.addAndRememberBlock(BB);
634638
}
635-
PhiInserter.AddAvailableValue(BB, PI.Pred);
636-
Dominator.addAndRememberBlock(BB);
637-
}
638639

639-
if (ParentInfo.Pred) {
640-
Term->setCondition(ParentInfo.Pred);
641-
CondBranchWeights::setMetadata(*Term, ParentInfo.Weights);
642-
} else {
643640
if (!Dominator.resultIsRememberedBlock())
644641
PhiInserter.AddAvailableValue(Dominator.result(), Default);
645642

0 commit comments

Comments
 (0)