@@ -614,25 +614,28 @@ void StructurizeCFG::insertConditions(bool Loops) {
614614 BasicBlock *SuccTrue = Term->getSuccessor (0 );
615615 BasicBlock *SuccFalse = Term->getSuccessor (1 );
616616
617- BBPredicates &Preds = Loops ? LoopPreds[SuccFalse] : Predicates[SuccTrue];
617+ PhiInserter.Initialize (Boolean, " " );
618+ PhiInserter.AddAvailableValue (Loops ? SuccFalse : Parent, Default);
618619
619- if (Preds.size () == 1 && Preds.begin ()->first == Parent) {
620- auto &PI = Preds.begin ()->second ;
621- Term->setCondition (PI.Pred );
622- CondBranchWeights::setMetadata (*Term, PI.Weights );
623- } else {
624- PhiInserter.Initialize (Boolean, " " );
625- PhiInserter.AddAvailableValue (Loops ? SuccFalse : Parent, Default);
620+ BBPredicates &Preds = Loops ? LoopPreds[SuccFalse] : Predicates[SuccTrue];
626621
627- NearestCommonDominator Dominator (DT);
628- Dominator.addBlock (Parent);
622+ NearestCommonDominator Dominator (DT);
623+ Dominator.addBlock (Parent);
629624
630- for (auto [BB, PI] : Preds) {
631- assert (BB != Parent);
632- PhiInserter.AddAvailableValue (BB, PI.Pred );
633- Dominator.addAndRememberBlock (BB);
625+ PredInfo ParentInfo{nullptr , std::nullopt };
626+ for (auto [BB, PI] : Preds) {
627+ if (BB == Parent) {
628+ ParentInfo = PI;
629+ break ;
634630 }
631+ PhiInserter.AddAvailableValue (BB, PI.Pred );
632+ Dominator.addAndRememberBlock (BB);
633+ }
635634
635+ if (ParentInfo.Pred ) {
636+ Term->setCondition (ParentInfo.Pred );
637+ CondBranchWeights::setMetadata (*Term, ParentInfo.Weights );
638+ } else {
636639 if (!Dominator.resultIsRememberedBlock ())
637640 PhiInserter.AddAvailableValue (Dominator.result (), Default);
638641
0 commit comments