Lines Matching refs:TailBB
357 MachineInstr *MI, MachineBasicBlock *TailBB, MachineBasicBlock *PredBB, in processPHI() argument
373 if (isDefLiveOut(DefReg, TailBB, MRI) || RegsUsedByPhi.count(DefReg)) in processPHI()
382 if (MI->getNumOperands() == 1 && !TailBB->hasAddressTaken()) in processPHI()
391 MachineInstr *MI, MachineBasicBlock *TailBB, MachineBasicBlock *PredBB, in duplicateInstruction() argument
416 if (isDefLiveOut(Reg, TailBB, MRI) || UsedByPhi.count(Reg)) in duplicateInstruction()
566 MachineBasicBlock &TailBB) { in shouldTailDuplicate() argument
570 if (!LayoutMode && TailBB.canFallThrough()) in shouldTailDuplicate()
574 if (TailBB.isSuccessor(&TailBB)) in shouldTailDuplicate()
581 if (TailBB.pred_size() > TailDupPredSize && in shouldTailDuplicate()
582 TailBB.succ_size() > TailDupSuccSize) in shouldTailDuplicate()
590 llvm::shouldOptimizeForSize(&TailBB, PSI, MBFI); in shouldTailDuplicate()
604 if (TII->analyzeBranch(TailBB, PredTBB, PredFBB, PredCond) && in shouldTailDuplicate()
605 TailBB.canFallThrough()) in shouldTailDuplicate()
615 if (!TailBB.empty()) in shouldTailDuplicate()
616 HasIndirectbr = TailBB.back().isIndirectBranch(); in shouldTailDuplicate()
624 for (MachineInstr &MI : TailBB) { in shouldTailDuplicate()
631 (TailBB.getParent()->getTarget().getTargetTriple().isOSDarwin() || in shouldTailDuplicate()
678 for (auto *SB : TailBB.successors()) { in shouldTailDuplicate()
682 unsigned Idx = getPHISrcRegOpIdx(&I, &TailBB); in shouldTailDuplicate()
699 return canCompletelyDuplicateBB(TailBB); in shouldTailDuplicate()
703 bool TailDuplicator::isSimpleBB(MachineBasicBlock *TailBB) { in isSimpleBB() argument
704 if (TailBB->succ_size() != 1) in isSimpleBB()
706 if (TailBB->pred_empty()) in isSimpleBB()
708 MachineBasicBlock::iterator I = TailBB->getFirstNonDebugInstr(true); in isSimpleBB()
709 if (I == TailBB->end()) in isSimpleBB()
740 MachineBasicBlock *TailBB, SmallVectorImpl<MachineBasicBlock *> &TDBBs, in duplicateSimpleBB() argument
742 SmallPtrSet<MachineBasicBlock *, 8> Succs(TailBB->succ_begin(), in duplicateSimpleBB()
743 TailBB->succ_end()); in duplicateSimpleBB()
744 SmallVector<MachineBasicBlock *, 8> Preds(TailBB->predecessors()); in duplicateSimpleBB()
760 << "From simple Succ: " << *TailBB); in duplicateSimpleBB()
762 MachineBasicBlock *NewTarget = *TailBB->succ_begin(); in duplicateSimpleBB()
776 if (PredFBB == TailBB) in duplicateSimpleBB()
778 if (PredTBB == TailBB) in duplicateSimpleBB()
797 PredBB->replaceSuccessor(TailBB, NewTarget); in duplicateSimpleBB()
799 PredBB->removeSuccessor(TailBB, true); in duplicateSimpleBB()
811 bool TailDuplicator::canTailDuplicate(MachineBasicBlock *TailBB, in canTailDuplicate() argument
830 if (TailBB->isInlineAsmBrIndirectTarget()) in canTailDuplicate()
845 bool TailDuplicator::tailDuplicate(bool IsSimple, MachineBasicBlock *TailBB, in tailDuplicate() argument
850 LLVM_DEBUG(dbgs() << "\n*** Tail-duplicating " << printMBBReference(*TailBB) in tailDuplicate()
853 bool ShouldUpdateTerminators = TailBB->canFallThrough(); in tailDuplicate()
856 getRegsUsedByPHIs(*TailBB, &UsedByPhi); in tailDuplicate()
859 return duplicateSimpleBB(TailBB, TDBBs, UsedByPhi); in tailDuplicate()
869 Preds.insert(TailBB->pred_begin(), TailBB->pred_end()); in tailDuplicate()
872 assert(TailBB != PredBB && in tailDuplicate()
875 if (!canTailDuplicate(TailBB, PredBB)) in tailDuplicate()
885 else if (PredBB->isLayoutSuccessor(TailBB) && PredBB->canFallThrough()) in tailDuplicate()
892 << "From Succ: " << *TailBB); in tailDuplicate()
902 for (MachineInstr &MI : llvm::make_early_inc_range(*TailBB)) { in tailDuplicate()
906 processPHI(&MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, true); in tailDuplicate()
910 duplicateInstruction(&MI, TailBB, PredBB, LocalVRMap, UsedByPhi); in tailDuplicate()
915 NumTailDupAdded += TailBB->size() - 1; // subtract one for removed branch in tailDuplicate()
921 for (MachineBasicBlock *Succ : TailBB->successors()) in tailDuplicate()
922 PredBB->addSuccessor(Succ, MBPI->getEdgeProbability(TailBB, Succ)); in tailDuplicate()
926 PredBB->updateTerminator(TailBB->getNextNode()); in tailDuplicate()
937 PrevBB = &*std::prev(TailBB->getIterator()); in tailDuplicate()
944 *PrevBB->succ_begin() == TailBB && in tailDuplicate()
947 (!PriorTBB || PriorTBB == TailBB) && in tailDuplicate()
948 TailBB->pred_size() == 1 && in tailDuplicate()
949 !TailBB->hasAddressTaken()) { in tailDuplicate()
951 << "From MBB: " << *TailBB); in tailDuplicate()
962 MachineBasicBlock::iterator I = TailBB->begin(); in tailDuplicate()
964 while (I != TailBB->end() && I->isPHI()) { in tailDuplicate()
968 processPHI(MI, TailBB, PrevBB, LocalVRMap, CopyInfos, UsedByPhi, in tailDuplicate()
973 while (I != TailBB->end()) { in tailDuplicate()
978 duplicateInstruction(MI, TailBB, PrevBB, LocalVRMap, UsedByPhi); in tailDuplicate()
985 PrevBB->splice(PrevBB->end(), TailBB, TailBB->begin(), TailBB->end()); in tailDuplicate()
989 PrevBB->transferSuccessors(TailBB); in tailDuplicate()
993 PrevBB->updateTerminator(TailBB->getNextNode()); in tailDuplicate()
1040 for (MachineInstr &MI : make_early_inc_range(TailBB->phis())) { in tailDuplicate()
1043 processPHI(&MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, false); in tailDuplicate()