Lines Matching refs:BB
116 MachineBasicBlock *BB; member
125 ExtraCost(0), ExtraCost2(0), BB(0), TrueBB(0), FalseBB(0) {} in BBInfo()
184 BBInfo &AnalyzeBlock(MachineBasicBlock *BB,
189 void InvalidatePreds(MachineBasicBlock *BB);
206 bool MeetIfcvtSizeLimit(MachineBasicBlock &BB, in MeetIfcvtSizeLimit() argument
209 return Cycle > 0 && TII->isProfitableToIfCvt(BB, Cycle, Extra, in MeetIfcvtSizeLimit()
245 return C1->BBI.BB->getNumber() < C2->BBI.BB->getNumber(); in IfcvtTokenCmp()
324 << "): BB#" << BBI.BB->getNumber() << " (" in INITIALIZE_PASS_DEPENDENCY()
351 DEBUG(dbgs() << "): BB#" << BBI.BB->getNumber() << " (T:" in INITIALIZE_PASS_DEPENDENCY()
369 DEBUG(dbgs() << "Ifcvt (Diamond): BB#" << BBI.BB->getNumber() << " (T:" in INITIALIZE_PASS_DEPENDENCY()
415 static MachineBasicBlock *findFalseBlock(MachineBasicBlock *BB, in findFalseBlock() argument
417 for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(), in findFalseBlock()
418 E = BB->succ_end(); SI != E; ++SI) { in findFalseBlock()
431 TII->RemoveBranch(*BBI.BB); in ReverseBranchCondition()
432 TII->InsertBranch(*BBI.BB, BBI.FalseBB, BBI.TrueBB, BBI.BrCond, dl); in ReverseBranchCondition()
441 static inline MachineBasicBlock *getNextBlock(MachineBasicBlock *BB) { in getNextBlock() argument
442 MachineFunction::iterator I = BB; in getNextBlock()
443 MachineFunction::iterator E = BB->getParent()->end(); in getNextBlock()
462 if (TrueBBI.BB->pred_size() > 1) { in ValidSimple()
464 !TII->isProfitableToDupForIfCvt(*TrueBBI.BB, TrueBBI.NonPredSize, in ValidSimple()
486 if (TrueBBI.BB->pred_size() > 1) { in ValidTriangle()
503 if (!TII->isProfitableToDupForIfCvt(*TrueBBI.BB, Size, Prediction)) in ValidTriangle()
510 MachineFunction::iterator I = TrueBBI.BB; in ValidTriangle()
511 if (++I == TrueBBI.BB->getParent()->end()) in ValidTriangle()
515 return TExit && TExit == FalseBBI.BB; in ValidTriangle()
531 TT = getNextBlock(TrueBBI.BB); in ValidDiamond()
533 FT = getNextBlock(FalseBBI.BB); in ValidDiamond()
538 if (TrueBBI.BB->pred_size() > 1 || FalseBBI.BB->pred_size() > 1) in ValidDiamond()
547 MachineBasicBlock::iterator TIB = TrueBBI.BB->begin(); in ValidDiamond()
548 MachineBasicBlock::iterator FIB = FalseBBI.BB->begin(); in ValidDiamond()
549 MachineBasicBlock::iterator TIE = TrueBBI.BB->end(); in ValidDiamond()
550 MachineBasicBlock::iterator FIE = FalseBBI.BB->end(); in ValidDiamond()
629 !TII->AnalyzeBranch(*BBI.BB, BBI.TrueBB, BBI.FalseBB, BBI.BrCond); in ScanInstructions()
636 BBI.FalseBB = findFalseBlock(BBI.BB, BBI.TrueBB); in ScanInstructions()
649 for (MachineBasicBlock::iterator I = BBI.BB->begin(), E = BBI.BB->end(); in ScanInstructions()
741 IfConverter::BBInfo &IfConverter::AnalyzeBlock(MachineBasicBlock *BB, in AnalyzeBlock() argument
743 BBInfo &BBI = BBAnalysis[BB->getNumber()]; in AnalyzeBlock()
748 BBI.BB = BB; in AnalyzeBlock()
762 if (BBI.TrueBB == BB || BBI.FalseBB == BB) { in AnalyzeBlock()
793 BranchProbability Prediction = MBPI->getEdgeProbability(BB, TrueBBI.BB); in AnalyzeBlock()
796 MeetIfcvtSizeLimit(*TrueBBI.BB, (TrueBBI.NonPredSize - (Dups + Dups2) + in AnalyzeBlock()
798 *FalseBBI.BB, (FalseBBI.NonPredSize - (Dups + Dups2) + in AnalyzeBlock()
817 MeetIfcvtSizeLimit(*TrueBBI.BB, TrueBBI.NonPredSize + TrueBBI.ExtraCost, in AnalyzeBlock()
832 MeetIfcvtSizeLimit(*TrueBBI.BB, TrueBBI.NonPredSize + TrueBBI.ExtraCost, in AnalyzeBlock()
840 MeetIfcvtSizeLimit(*TrueBBI.BB, TrueBBI.NonPredSize + TrueBBI.ExtraCost, in AnalyzeBlock()
858 MeetIfcvtSizeLimit(*FalseBBI.BB, in AnalyzeBlock()
868 MeetIfcvtSizeLimit(*FalseBBI.BB, in AnalyzeBlock()
877 MeetIfcvtSizeLimit(*FalseBBI.BB, in AnalyzeBlock()
897 MachineBasicBlock *BB = I; in AnalyzeBlocks() local
898 AnalyzeBlock(BB, Tokens); in AnalyzeBlocks()
908 static bool canFallThroughTo(MachineBasicBlock *BB, MachineBasicBlock *ToBB) { in canFallThroughTo() argument
909 MachineFunction::iterator PI = BB; in canFallThroughTo()
912 MachineFunction::iterator E = BB->getParent()->end(); in canFallThroughTo()
926 void IfConverter::InvalidatePreds(MachineBasicBlock *BB) { in InvalidatePreds() argument
927 for (MachineBasicBlock::pred_iterator PI = BB->pred_begin(), in InvalidatePreds()
928 E = BB->pred_end(); PI != E; ++PI) { in InvalidatePreds()
930 if (PBBI.IsDone || PBBI.BB == BB) in InvalidatePreds()
939 static void InsertUncondBranch(MachineBasicBlock *BB, MachineBasicBlock *ToBB, in InsertUncondBranch() argument
943 TII->InsertBranch(*BB, ToBB, NULL, NoCond, dl); in InsertUncondBranch()
951 if (!TII->AnalyzeBranch(*BBI.BB, TBB, FBB, Cond)) in RemoveExtraEdges()
952 BBI.BB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in RemoveExtraEdges()
959 static void InitPredRedefs(MachineBasicBlock *BB, SmallSet<unsigned,4> &Redefs, in InitPredRedefs() argument
961 for (MachineBasicBlock::livein_iterator I = BB->livein_begin(), in InitPredRedefs()
962 E = BB->livein_end(); I != E; ++I) { in InitPredRedefs()
1028 (CvtBBI->CannotBeCopied && CvtBBI->BB->pred_size() > 1)) { in IfConvertSimple()
1042 InitPredRedefs(CvtBBI->BB, Redefs, TRI); in IfConvertSimple()
1043 InitPredRedefs(NextBBI->BB, Redefs, TRI); in IfConvertSimple()
1045 if (CvtBBI->BB->pred_size() > 1) { in IfConvertSimple()
1046 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertSimple()
1051 PredicateBlock(*CvtBBI, CvtBBI->BB->end(), Cond, Redefs); in IfConvertSimple()
1054 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertSimple()
1059 if (!canFallThroughTo(BBI.BB, NextBBI->BB)) { in IfConvertSimple()
1060 InsertUncondBranch(BBI.BB, NextBBI->BB, TII); in IfConvertSimple()
1080 InvalidatePreds(BBI.BB); in IfConvertSimple()
1101 (CvtBBI->CannotBeCopied && CvtBBI->BB->pred_size() > 1)) { in IfConvertTriangle()
1116 for (MachineBasicBlock::pred_iterator PI = CvtBBI->BB->pred_begin(), in IfConvertTriangle()
1117 E = CvtBBI->BB->pred_end(); PI != E; ++PI) { in IfConvertTriangle()
1119 if (PBB == BBI.BB) in IfConvertTriangle()
1133 InitPredRedefs(CvtBBI->BB, Redefs, TRI); in IfConvertTriangle()
1134 InitPredRedefs(NextBBI->BB, Redefs, TRI); in IfConvertTriangle()
1137 if (CvtBBI->BB->pred_size() > 1) { in IfConvertTriangle()
1138 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertTriangle()
1144 CvtBBI->NonPredSize -= TII->RemoveBranch(*CvtBBI->BB); in IfConvertTriangle()
1145 PredicateBlock(*CvtBBI, CvtBBI->BB->end(), Cond, Redefs); in IfConvertTriangle()
1148 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertTriangle()
1158 TII->InsertBranch(*BBI.BB, CvtBBI->FalseBB, NULL, RevCond, dl); in IfConvertTriangle()
1159 BBI.BB->addSuccessor(CvtBBI->FalseBB); in IfConvertTriangle()
1166 bool isFallThrough = canFallThroughTo(BBI.BB, NextBBI->BB); in IfConvertTriangle()
1172 NextBBI->BB->pred_size() == 1 && !NextBBI->HasFallThrough) { in IfConvertTriangle()
1176 InsertUncondBranch(BBI.BB, NextBBI->BB, TII); in IfConvertTriangle()
1189 InvalidatePreds(BBI.BB); in IfConvertTriangle()
1213 TrueBBI.BB->pred_size() > 1 || in IfConvertDiamond()
1214 FalseBBI.BB->pred_size() > 1) { in IfConvertDiamond()
1247 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertDiamond()
1252 InitPredRedefs(BBI1->BB, Redefs, TRI); in IfConvertDiamond()
1255 MachineBasicBlock::iterator DI1 = BBI1->BB->begin(); in IfConvertDiamond()
1256 MachineBasicBlock::iterator DI2 = BBI2->BB->begin(); in IfConvertDiamond()
1257 MachineBasicBlock::iterator DIE1 = BBI1->BB->end(); in IfConvertDiamond()
1258 MachineBasicBlock::iterator DIE2 = BBI2->BB->end(); in IfConvertDiamond()
1279 UpdatePredRedefs(BBI1->BB->begin(), DI1, Redefs, TRI); in IfConvertDiamond()
1280 BBI.BB->splice(BBI.BB->end(), BBI1->BB, BBI1->BB->begin(), DI1); in IfConvertDiamond()
1281 BBI2->BB->erase(BBI2->BB->begin(), DI2); in IfConvertDiamond()
1284 BBI1->NonPredSize -= TII->RemoveBranch(*BBI1->BB); in IfConvertDiamond()
1285 DI1 = BBI1->BB->end(); in IfConvertDiamond()
1289 assert (DI1 != BBI1->BB->begin()); in IfConvertDiamond()
1295 BBI1->BB->erase(DI1, BBI1->BB->end()); in IfConvertDiamond()
1298 BBI2->NonPredSize -= TII->RemoveBranch(*BBI2->BB); in IfConvertDiamond()
1299 DI2 = BBI2->BB->end(); in IfConvertDiamond()
1303 assert (DI2 != BBI2->BB->begin()); in IfConvertDiamond()
1320 if (TII->isProfitableToUnpredicate(*BBI1->BB, *BBI2->BB)) { in IfConvertDiamond()
1321 for (MachineBasicBlock::iterator FI = BBI2->BB->begin(); FI != DI2; ++FI) { in IfConvertDiamond()
1355 PredicateBlock(*BBI1, BBI1->BB->end(), *Cond1, Redefs, &RedefsByFalse); in IfConvertDiamond()
1378 if (*PI != BBI1->BB && *PI != BBI2->BB) in IfConvertDiamond()
1385 BBI.BB->addSuccessor(TailBB); in IfConvertDiamond()
1386 InsertUncondBranch(BBI.BB, TailBB, TII); in IfConvertDiamond()
1394 BBI.BB->removeSuccessor(BBI1->BB); in IfConvertDiamond()
1395 BBI.BB->removeSuccessor(BBI2->BB); in IfConvertDiamond()
1400 InvalidatePreds(BBI.BB); in IfConvertDiamond()
1436 for (MachineBasicBlock::iterator I = BBI.BB->begin(); I != E; ++I) { in PredicateBlock()
1477 MachineFunction &MF = *ToBBI.BB->getParent(); in CopyAndPredicateBlock()
1479 for (MachineBasicBlock::iterator I = FromBBI.BB->begin(), in CopyAndPredicateBlock()
1480 E = FromBBI.BB->end(); I != E; ++I) { in CopyAndPredicateBlock()
1486 ToBBI.BB->insert(ToBBI.BB->end(), MI); in CopyAndPredicateBlock()
1509 std::vector<MachineBasicBlock *> Succs(FromBBI.BB->succ_begin(), in CopyAndPredicateBlock()
1510 FromBBI.BB->succ_end()); in CopyAndPredicateBlock()
1511 MachineBasicBlock *NBB = getNextBlock(FromBBI.BB); in CopyAndPredicateBlock()
1519 ToBBI.BB->addSuccessor(Succ); in CopyAndPredicateBlock()
1539 ToBBI.BB->splice(ToBBI.BB->end(), in MergeBlocks()
1540 FromBBI.BB, FromBBI.BB->begin(), FromBBI.BB->end()); in MergeBlocks()
1542 std::vector<MachineBasicBlock *> Succs(FromBBI.BB->succ_begin(), in MergeBlocks()
1543 FromBBI.BB->succ_end()); in MergeBlocks()
1544 MachineBasicBlock *NBB = getNextBlock(FromBBI.BB); in MergeBlocks()
1552 FromBBI.BB->removeSuccessor(Succ); in MergeBlocks()
1554 ToBBI.BB->addSuccessor(Succ); in MergeBlocks()
1558 if (NBB && !FromBBI.BB->isSuccessor(NBB)) in MergeBlocks()
1559 FromBBI.BB->addSuccessor(NBB); in MergeBlocks()