• Home
  • Raw
  • Download

Lines Matching refs:BBI

147       BBInfo &BBI;  member
153 : BBI(b), Kind(k), NeedSubsumption(s), NumDups(d), NumDups2(d2) {} in IfcvtToken()
187 bool ReverseBranchCondition(BBInfo &BBI);
195 void ScanInstructions(BBInfo &BBI);
198 bool FeasibilityAnalysis(BBInfo &BBI, SmallVectorImpl<MachineOperand> &Cond,
202 void RemoveExtraEdges(BBInfo &BBI);
203 bool IfConvertSimple(BBInfo &BBI, IfcvtKind Kind);
204 bool IfConvertTriangle(BBInfo &BBI, IfcvtKind Kind);
205 bool IfConvertDiamond(BBInfo &BBI, IfcvtKind Kind,
207 void PredicateBlock(BBInfo &BBI,
234 bool blockAlwaysFallThrough(BBInfo &BBI) const { in blockAlwaysFallThrough()
235 return BBI.IsBrAnalyzable && BBI.TrueBB == nullptr; in blockAlwaysFallThrough()
255 return C1->BBI.BB->getNumber() < C2->BBI.BB->getNumber(); in IfcvtTokenCmp()
319 BBInfo &BBI = Token->BBI; in INITIALIZE_PASS_DEPENDENCY() local
328 if (BBI.IsDone) in INITIALIZE_PASS_DEPENDENCY()
329 BBI.IsEnqueued = false; in INITIALIZE_PASS_DEPENDENCY()
330 if (!BBI.IsEnqueued) in INITIALIZE_PASS_DEPENDENCY()
333 BBI.IsEnqueued = false; in INITIALIZE_PASS_DEPENDENCY()
344 << "): BB#" << BBI.BB->getNumber() << " (" in INITIALIZE_PASS_DEPENDENCY()
346 ? BBI.FalseBB->getNumber() in INITIALIZE_PASS_DEPENDENCY()
347 : BBI.TrueBB->getNumber()) << ") "); in INITIALIZE_PASS_DEPENDENCY()
348 RetVal = IfConvertSimple(BBI, Kind); in INITIALIZE_PASS_DEPENDENCY()
371 DEBUG(dbgs() << "): BB#" << BBI.BB->getNumber() << " (T:" in INITIALIZE_PASS_DEPENDENCY()
372 << BBI.TrueBB->getNumber() << ",F:" in INITIALIZE_PASS_DEPENDENCY()
373 << BBI.FalseBB->getNumber() << ") "); in INITIALIZE_PASS_DEPENDENCY()
374 RetVal = IfConvertTriangle(BBI, Kind); in INITIALIZE_PASS_DEPENDENCY()
389 DEBUG(dbgs() << "Ifcvt (Diamond): BB#" << BBI.BB->getNumber() << " (T:" in INITIALIZE_PASS_DEPENDENCY()
390 << BBI.TrueBB->getNumber() << ",F:" in INITIALIZE_PASS_DEPENDENCY()
391 << BBI.FalseBB->getNumber() << ") "); in INITIALIZE_PASS_DEPENDENCY()
392 RetVal = IfConvertDiamond(BBI, Kind, NumDups, NumDups2); in INITIALIZE_PASS_DEPENDENCY()
448 bool IfConverter::ReverseBranchCondition(BBInfo &BBI) { in ReverseBranchCondition() argument
450 if (!TII->ReverseBranchCondition(BBI.BrCond)) { in ReverseBranchCondition()
451 TII->RemoveBranch(*BBI.BB); in ReverseBranchCondition()
452 TII->InsertBranch(*BBI.BB, BBI.FalseBB, BBI.TrueBB, BBI.BrCond, dl); in ReverseBranchCondition()
453 std::swap(BBI.TrueBB, BBI.FalseBB); in ReverseBranchCondition()
640 void IfConverter::ScanInstructions(BBInfo &BBI) { in ScanInstructions() argument
641 if (BBI.IsDone) in ScanInstructions()
644 bool AlreadyPredicated = !BBI.Predicate.empty(); in ScanInstructions()
646 BBI.TrueBB = BBI.FalseBB = nullptr; in ScanInstructions()
647 BBI.BrCond.clear(); in ScanInstructions()
648 BBI.IsBrAnalyzable = in ScanInstructions()
649 !TII->AnalyzeBranch(*BBI.BB, BBI.TrueBB, BBI.FalseBB, BBI.BrCond); in ScanInstructions()
650 BBI.HasFallThrough = BBI.IsBrAnalyzable && BBI.FalseBB == nullptr; in ScanInstructions()
652 if (BBI.BrCond.size()) { in ScanInstructions()
655 if (!BBI.FalseBB) in ScanInstructions()
656 BBI.FalseBB = findFalseBlock(BBI.BB, BBI.TrueBB); in ScanInstructions()
657 if (!BBI.FalseBB) { in ScanInstructions()
659 BBI.IsUnpredicable = true; in ScanInstructions()
665 BBI.NonPredSize = 0; in ScanInstructions()
666 BBI.ExtraCost = 0; in ScanInstructions()
667 BBI.ExtraCost2 = 0; in ScanInstructions()
668 BBI.ClobbersPred = false; in ScanInstructions()
669 for (MachineBasicBlock::iterator I = BBI.BB->begin(), E = BBI.BB->end(); in ScanInstructions()
675 BBI.CannotBeCopied = true; in ScanInstructions()
678 bool isCondBr = BBI.IsBrAnalyzable && I->isConditionalBranch(); in ScanInstructions()
685 BBI.NonPredSize++; in ScanInstructions()
689 BBI.ExtraCost += NumCycles-1; in ScanInstructions()
690 BBI.ExtraCost2 += ExtraPredCost; in ScanInstructions()
695 BBI.IsUnpredicable = true; in ScanInstructions()
699 if (BBI.ClobbersPred && !isPredicated) { in ScanInstructions()
704 BBI.IsUnpredicable = true; in ScanInstructions()
712 BBI.ClobbersPred = true; in ScanInstructions()
715 BBI.IsUnpredicable = true; in ScanInstructions()
723 bool IfConverter::FeasibilityAnalysis(BBInfo &BBI, in FeasibilityAnalysis() argument
727 if (BBI.IsDone || BBI.IsUnpredicable) in FeasibilityAnalysis()
732 if (BBI.Predicate.size() && !TII->SubsumesPredicate(Pred, BBI.Predicate)) in FeasibilityAnalysis()
735 if (BBI.BrCond.size()) { in FeasibilityAnalysis()
741 SmallVector<MachineOperand, 4> Cond(BBI.BrCond.begin(), BBI.BrCond.end()); in FeasibilityAnalysis()
759 BBInfo &BBI = BBAnalysis[BB->getNumber()]; in AnalyzeBlock() local
761 if (BBI.IsAnalyzed || BBI.IsBeingAnalyzed) in AnalyzeBlock()
762 return BBI; in AnalyzeBlock()
764 BBI.BB = BB; in AnalyzeBlock()
765 BBI.IsBeingAnalyzed = true; in AnalyzeBlock()
767 ScanInstructions(BBI); in AnalyzeBlock()
771 if (!BBI.IsBrAnalyzable || BBI.BrCond.empty() || BBI.IsDone) { in AnalyzeBlock()
772 BBI.IsBeingAnalyzed = false; in AnalyzeBlock()
773 BBI.IsAnalyzed = true; in AnalyzeBlock()
774 return BBI; in AnalyzeBlock()
778 if (BBI.TrueBB == BB || BBI.FalseBB == BB) { in AnalyzeBlock()
779 BBI.IsBeingAnalyzed = false; in AnalyzeBlock()
780 BBI.IsAnalyzed = true; in AnalyzeBlock()
781 return BBI; in AnalyzeBlock()
785 if (!BBI.FalseBB) { in AnalyzeBlock()
786 BBI.IsBeingAnalyzed = false; in AnalyzeBlock()
787 BBI.IsAnalyzed = true; in AnalyzeBlock()
788 return BBI; in AnalyzeBlock()
791 BBInfo &TrueBBI = AnalyzeBlock(BBI.TrueBB, Tokens); in AnalyzeBlock()
792 BBInfo &FalseBBI = AnalyzeBlock(BBI.FalseBB, Tokens); in AnalyzeBlock()
795 BBI.IsBeingAnalyzed = false; in AnalyzeBlock()
796 BBI.IsAnalyzed = true; in AnalyzeBlock()
797 return BBI; in AnalyzeBlock()
800 SmallVector<MachineOperand, 4> RevCond(BBI.BrCond.begin(), BBI.BrCond.end()); in AnalyzeBlock()
817 FeasibilityAnalysis(TrueBBI, BBI.BrCond) && in AnalyzeBlock()
827 Tokens.push_back(new IfcvtToken(BBI, ICDiamond, TNeedSub|FNeedSub, Dups, in AnalyzeBlock()
835 FeasibilityAnalysis(TrueBBI, BBI.BrCond, true)) { in AnalyzeBlock()
843 Tokens.push_back(new IfcvtToken(BBI, ICTriangle, TNeedSub, Dups)); in AnalyzeBlock()
850 FeasibilityAnalysis(TrueBBI, BBI.BrCond, true, true)) { in AnalyzeBlock()
851 Tokens.push_back(new IfcvtToken(BBI, ICTriangleRev, TNeedSub, Dups)); in AnalyzeBlock()
858 FeasibilityAnalysis(TrueBBI, BBI.BrCond)) { in AnalyzeBlock()
866 Tokens.push_back(new IfcvtToken(BBI, ICSimple, TNeedSub, Dups)); in AnalyzeBlock()
878 Tokens.push_back(new IfcvtToken(BBI, ICTriangleFalse, FNeedSub, Dups)); in AnalyzeBlock()
888 Tokens.push_back(new IfcvtToken(BBI, ICTriangleFRev, FNeedSub, Dups)); in AnalyzeBlock()
897 Tokens.push_back(new IfcvtToken(BBI, ICSimpleFalse, FNeedSub, Dups)); in AnalyzeBlock()
902 BBI.IsEnqueued = Enqueued; in AnalyzeBlock()
903 BBI.IsBeingAnalyzed = false; in AnalyzeBlock()
904 BBI.IsAnalyzed = true; in AnalyzeBlock()
905 return BBI; in AnalyzeBlock()
964 void IfConverter::RemoveExtraEdges(BBInfo &BBI) { in RemoveExtraEdges() argument
967 if (!TII->AnalyzeBranch(*BBI.BB, TBB, FBB, Cond)) in RemoveExtraEdges()
968 BBI.BB->CorrectExtraCFGEdges(TBB, FBB, !Cond.empty()); in RemoveExtraEdges()
1023 bool IfConverter::IfConvertSimple(BBInfo &BBI, IfcvtKind Kind) { in IfConvertSimple() argument
1024 BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; in IfConvertSimple()
1025 BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; in IfConvertSimple()
1029 SmallVector<MachineOperand, 4> Cond(BBI.BrCond.begin(), BBI.BrCond.end()); in IfConvertSimple()
1036 BBI.IsAnalyzed = false; in IfConvertSimple()
1061 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertSimple()
1064 CopyAndPredicateBlock(BBI, *CvtBBI, Cond); in IfConvertSimple()
1068 BBI.BB->removeSuccessor(CvtBBI->BB); in IfConvertSimple()
1074 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertSimple()
1075 MergeBlocks(BBI, *CvtBBI); in IfConvertSimple()
1079 if (!canFallThroughTo(BBI.BB, NextBBI->BB)) { in IfConvertSimple()
1080 InsertUncondBranch(BBI.BB, NextBBI->BB, TII); in IfConvertSimple()
1081 BBI.HasFallThrough = false; in IfConvertSimple()
1095 RemoveExtraEdges(BBI); in IfConvertSimple()
1099 BBI.IsDone = true; in IfConvertSimple()
1100 InvalidatePreds(BBI.BB); in IfConvertSimple()
1131 bool IfConverter::IfConvertTriangle(BBInfo &BBI, IfcvtKind Kind) { in IfConvertTriangle() argument
1132 BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; in IfConvertTriangle()
1133 BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; in IfConvertTriangle()
1138 SmallVector<MachineOperand, 4> Cond(BBI.BrCond.begin(), BBI.BrCond.end()); in IfConvertTriangle()
1145 BBI.IsAnalyzed = false; in IfConvertTriangle()
1165 if (PBB == BBI.BB) in IfConvertTriangle()
1191 BBNext = MBPI->getEdgeWeight(BBI.BB, NextBBI->BB); in IfConvertTriangle()
1192 BBCvt = MBPI->getEdgeWeight(BBI.BB, CvtBBI->BB); in IfConvertTriangle()
1196 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertTriangle()
1199 CopyAndPredicateBlock(BBI, *CvtBBI, Cond, true); in IfConvertTriangle()
1203 BBI.BB->removeSuccessor(CvtBBI->BB); in IfConvertTriangle()
1210 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertTriangle()
1211 MergeBlocks(BBI, *CvtBBI, false); in IfConvertTriangle()
1220 TII->InsertBranch(*BBI.BB, CvtBBI->FalseBB, nullptr, RevCond, dl); in IfConvertTriangle()
1221 BBI.BB->addSuccessor(CvtBBI->FalseBB); in IfConvertTriangle()
1234 ScaleWeights(NewNext, NewFalse, BBI.BB, getNextBlock(BBI.BB), in IfConvertTriangle()
1242 bool isFallThrough = canFallThroughTo(BBI.BB, NextBBI->BB); in IfConvertTriangle()
1250 MergeBlocks(BBI, *NextBBI); in IfConvertTriangle()
1253 InsertUncondBranch(BBI.BB, NextBBI->BB, TII); in IfConvertTriangle()
1254 BBI.HasFallThrough = false; in IfConvertTriangle()
1261 RemoveExtraEdges(BBI); in IfConvertTriangle()
1265 BBI.IsDone = true; in IfConvertTriangle()
1266 InvalidatePreds(BBI.BB); in IfConvertTriangle()
1277 bool IfConverter::IfConvertDiamond(BBInfo &BBI, IfcvtKind Kind, in IfConvertDiamond() argument
1279 BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; in IfConvertDiamond()
1280 BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; in IfConvertDiamond()
1293 BBI.IsAnalyzed = false; in IfConvertDiamond()
1308 SmallVector<MachineOperand, 4> RevCond(BBI.BrCond.begin(), BBI.BrCond.end()); in IfConvertDiamond()
1311 SmallVector<MachineOperand, 4> *Cond1 = &BBI.BrCond; in IfConvertDiamond()
1328 BBI.NonPredSize -= TII->RemoveBranch(*BBI.BB); in IfConvertDiamond()
1373 BBI.BB->splice(BBI.BB->end(), BBI1->BB, BBI1->BB->begin(), DI1); in IfConvertDiamond()
1458 MergeBlocks(BBI, *BBI1, TailBB == nullptr); in IfConvertDiamond()
1459 MergeBlocks(BBI, *BBI2, TailBB == nullptr); in IfConvertDiamond()
1480 MergeBlocks(BBI, TailBBI); in IfConvertDiamond()
1483 BBI.BB->addSuccessor(TailBB); in IfConvertDiamond()
1484 InsertUncondBranch(BBI.BB, TailBB, TII); in IfConvertDiamond()
1485 BBI.HasFallThrough = false; in IfConvertDiamond()
1492 BBI.BB->removeSuccessor(BBI1->BB); in IfConvertDiamond()
1493 BBI.BB->removeSuccessor(BBI2->BB); in IfConvertDiamond()
1494 RemoveExtraEdges(BBI); in IfConvertDiamond()
1497 BBI.IsDone = TrueBBI.IsDone = FalseBBI.IsDone = true; in IfConvertDiamond()
1498 InvalidatePreds(BBI.BB); in IfConvertDiamond()
1527 void IfConverter::PredicateBlock(BBInfo &BBI, in PredicateBlock() argument
1533 for (MachineBasicBlock::iterator I = BBI.BB->begin(); I != E; ++I) { in PredicateBlock()
1558 std::copy(Cond.begin(), Cond.end(), std::back_inserter(BBI.Predicate)); in PredicateBlock()
1560 BBI.IsAnalyzed = false; in PredicateBlock()
1561 BBI.NonPredSize = 0; in PredicateBlock()