Lines Matching defs:TailBB

90     void ProcessPHI(MachineInstr *MI, MachineBasicBlock *TailBB,
97 MachineBasicBlock *TailBB,
107 bool IsSimple, MachineBasicBlock &TailBB);
108 bool isSimpleBB(MachineBasicBlock *TailBB);
110 bool duplicateSimpleBB(MachineBasicBlock *TailBB,
114 bool TailDuplicate(MachineBasicBlock *TailBB,
228 // TailBB's immediate successors are now successors of those predecessors
229 // which duplicated TailBB. Add the predecessors as sources to the PHI
392 /// ProcessPHI - Process PHI node in TailBB by turning it into a copy in PredBB.
396 MachineInstr *MI, MachineBasicBlock *TailBB, MachineBasicBlock *PredBB,
411 if (isDefLiveOut(DefReg, TailBB, MRI) || RegsUsedByPhi.count(DefReg))
424 /// DuplicateInstruction - Duplicate a TailBB instruction to PredBB and update
427 MachineBasicBlock *TailBB,
445 if (isDefLiveOut(Reg, TailBB, MRI) || UsedByPhi.count(Reg))
548 MachineBasicBlock &TailBB) {
550 if (TailBB.canFallThrough())
554 if (TailBB.isSuccessor(&TailBB))
575 if (!TailBB.empty())
576 HasIndirectbr = TailBB.back().isIndirectBranch();
584 for (MachineBasicBlock::iterator I = TailBB.begin(); I != TailBB.end(); ++I) {
617 return canCompletelyDuplicateBB(TailBB);
622 TailDuplicatePass::isSimpleBB(MachineBasicBlock *TailBB) {
623 if (TailBB->succ_size() != 1)
625 if (TailBB->pred_empty())
627 MachineBasicBlock::iterator I = TailBB->begin();
628 MachineBasicBlock::iterator E = TailBB->end();
670 TailDuplicatePass::duplicateSimpleBB(MachineBasicBlock *TailBB,
674 SmallPtrSet<MachineBasicBlock*, 8> Succs(TailBB->succ_begin(),
675 TailBB->succ_end());
676 SmallVector<MachineBasicBlock*, 8> Preds(TailBB->pred_begin(),
677 TailBB->pred_end());
696 << "From simple Succ: " << *TailBB);
698 MachineBasicBlock *NewTarget = *TailBB->succ_begin();
712 if (PredFBB == TailBB)
714 if (PredTBB == TailBB)
734 uint32_t Weight = MBPI->getEdgeWeight(PredBB, TailBB);
735 PredBB->removeSuccessor(TailBB);
746 /// TailDuplicate - If it is profitable, duplicate TailBB's contents in each
749 TailDuplicatePass::TailDuplicate(MachineBasicBlock *TailBB,
754 DEBUG(dbgs() << "\n*** Tail-duplicating BB#" << TailBB->getNumber() << '\n');
757 getRegsUsedByPHIs(*TailBB, &UsedByPhi);
760 return duplicateSimpleBB(TailBB, TDBBs, UsedByPhi, Copies);
766 SmallSetVector<MachineBasicBlock*, 8> Preds(TailBB->pred_begin(),
767 TailBB->pred_end());
772 assert(TailBB != PredBB &&
785 if (PredBB->isLayoutSuccessor(TailBB) && PredBB->canFallThrough())
789 << "From Succ: " << *TailBB);
796 if (RS && !TailBB->livein_empty()) {
803 for (MachineBasicBlock::livein_iterator I = TailBB->livein_begin(),
804 E = TailBB->livein_end(); I != E; ++I) {
813 // Clone the contents of TailBB into PredBB.
818 MachineBasicBlock::instr_iterator I = TailBB->instr_begin();
819 while (I != TailBB->instr_end()) {
825 ProcessPHI(MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, true);
829 DuplicateInstruction(MI, TailBB, PredBB, MF, LocalVRMap, UsedByPhi);
842 NumInstrDups += TailBB->size() - 1; // subtract one for removed branch
848 for (MachineBasicBlock::succ_iterator I = TailBB->succ_begin(),
849 E = TailBB->succ_end(); I != E; ++I)
850 PredBB->addSuccessor(*I, MBPI->getEdgeWeight(TailBB, I));
856 // If TailBB was duplicated into all its predecessors except for the prior
859 MachineBasicBlock *PrevBB = std::prev(MachineFunction::iterator(TailBB));
866 PriorCond.empty() && !PriorTBB && TailBB->pred_size() == 1 &&
867 !TailBB->hasAddressTaken()) {
869 << "From MBB: " << *TailBB);
873 MachineBasicBlock::iterator I = TailBB->begin();
875 while (I != TailBB->end() && I->isPHI()) {
879 ProcessPHI(MI, TailBB, PrevBB, LocalVRMap, CopyInfos, UsedByPhi, true);
885 while (I != TailBB->end()) {
890 DuplicateInstruction(MI, TailBB, PrevBB, MF, LocalVRMap, UsedByPhi);
902 PrevBB->splice(PrevBB->end(), TailBB, TailBB->begin(), TailBB->end());
906 PrevBB->transferSuccessors(TailBB);
946 MachineBasicBlock::iterator I = TailBB->begin();
948 while (I != TailBB->end() && I->isPHI()) {
952 ProcessPHI(MI, TailBB, PredBB, LocalVRMap, CopyInfos, UsedByPhi, false);