Lines Matching refs:MBB
232 void visitMachineBasicBlockBefore(const MachineBasicBlock *MBB);
238 void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB);
242 void report(const char *msg, const MachineBasicBlock *MBB);
270 void markReachable(const MachineBasicBlock *MBB);
272 void checkPHIOps(const MachineBasicBlock &MBB);
487 void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) { in report() argument
488 assert(MBB); in report()
489 report(msg, MBB->getParent()); in report()
490 errs() << "- basic block: " << printMBBReference(*MBB) << ' ' in report()
491 << MBB->getName() << " (" << (const void *)MBB << ')'; in report()
493 errs() << " [" << Indexes->getMBBStartIdx(MBB) in report()
494 << ';' << Indexes->getMBBEndIdx(MBB) << ')'; in report()
564 void MachineVerifier::markReachable(const MachineBasicBlock *MBB) { in markReachable() argument
565 BBInfo &MInfo = MBBInfoMap[MBB]; in markReachable()
568 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), in markReachable()
569 SuE = MBB->succ_end(); SuI != SuE; ++SuI) in markReachable()
584 for (const auto &MBB : *MF) { in visitMachineFunctionBefore()
585 FunctionBlocks.insert(&MBB); in visitMachineFunctionBefore()
586 BBInfo &MInfo = MBBInfoMap[&MBB]; in visitMachineFunctionBefore()
588 MInfo.Preds.insert(MBB.pred_begin(), MBB.pred_end()); in visitMachineFunctionBefore()
589 if (MInfo.Preds.size() != MBB.pred_size()) in visitMachineFunctionBefore()
590 report("MBB has duplicate entries in its predecessor list.", &MBB); in visitMachineFunctionBefore()
592 MInfo.Succs.insert(MBB.succ_begin(), MBB.succ_end()); in visitMachineFunctionBefore()
593 if (MInfo.Succs.size() != MBB.succ_size()) in visitMachineFunctionBefore()
594 report("MBB has duplicate entries in its successor list.", &MBB); in visitMachineFunctionBefore()
615 MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) { in visitMachineBasicBlockBefore() argument
623 for (const auto &LI : MBB->liveins()) { in visitMachineBasicBlockBefore()
624 if (isAllocatable(LI.PhysReg) && !MBB->isEHPad() && in visitMachineBasicBlockBefore()
625 MBB->getIterator() != MBB->getParent()->begin()) { in visitMachineBasicBlockBefore()
626 report("MBB has allocatable live-in, but isn't entry or landing-pad.", MBB); in visitMachineBasicBlockBefore()
634 for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(), in visitMachineBasicBlockBefore()
635 E = MBB->succ_end(); I != E; ++I) { in visitMachineBasicBlockBefore()
639 report("MBB has successor that isn't part of the function.", MBB); in visitMachineBasicBlockBefore()
640 if (!MBBInfoMap[*I].Preds.count(MBB)) { in visitMachineBasicBlockBefore()
641 report("Inconsistent CFG", MBB); in visitMachineBasicBlockBefore()
648 for (MachineBasicBlock::const_pred_iterator I = MBB->pred_begin(), in visitMachineBasicBlockBefore()
649 E = MBB->pred_end(); I != E; ++I) { in visitMachineBasicBlockBefore()
651 report("MBB has predecessor that isn't part of the function.", MBB); in visitMachineBasicBlockBefore()
652 if (!MBBInfoMap[*I].Succs.count(MBB)) { in visitMachineBasicBlockBefore()
653 report("Inconsistent CFG", MBB); in visitMachineBasicBlockBefore()
660 const BasicBlock *BB = MBB->getBasicBlock(); in visitMachineBasicBlockBefore()
667 report("MBB has more than one landing pad successor", MBB); in visitMachineBasicBlockBefore()
672 if (!TII->analyzeBranch(*const_cast<MachineBasicBlock *>(MBB), TBB, FBB, in visitMachineBasicBlockBefore()
678 MachineFunction::const_iterator MBBI = MBB->getIterator(); in visitMachineBasicBlockBefore()
684 } else if (MBB->succ_size() == LandingPadSuccs.size()) { in visitMachineBasicBlockBefore()
688 } else if (MBB->succ_size() != 1+LandingPadSuccs.size()) { in visitMachineBasicBlockBefore()
690 "exactly one CFG successor!", MBB); in visitMachineBasicBlockBefore()
691 } else if (!MBB->isSuccessor(&*MBBI)) { in visitMachineBasicBlockBefore()
693 "differs from its CFG successor!", MBB); in visitMachineBasicBlockBefore()
695 if (!MBB->empty() && MBB->back().isBarrier() && in visitMachineBasicBlockBefore()
696 !TII->isPredicated(MBB->back())) { in visitMachineBasicBlockBefore()
698 "barrier instruction!", MBB); in visitMachineBasicBlockBefore()
702 MBB); in visitMachineBasicBlockBefore()
708 if (MBB->succ_size() != 1+LandingPadSuccs.size() && in visitMachineBasicBlockBefore()
709 (MBB->succ_size() != 1 || LandingPadSuccs.size() != 1 || in visitMachineBasicBlockBefore()
710 *MBB->succ_begin() != *LandingPadSuccs.begin())) { in visitMachineBasicBlockBefore()
712 "exactly one CFG successor!", MBB); in visitMachineBasicBlockBefore()
713 } else if (!MBB->isSuccessor(TBB)) { in visitMachineBasicBlockBefore()
715 "successor doesn't match the actual successor!", MBB); in visitMachineBasicBlockBefore()
717 if (MBB->empty()) { in visitMachineBasicBlockBefore()
719 "any instructions!", MBB); in visitMachineBasicBlockBefore()
720 } else if (!MBB->back().isBarrier()) { in visitMachineBasicBlockBefore()
722 "barrier instruction!", MBB); in visitMachineBasicBlockBefore()
723 } else if (!MBB->back().isTerminator()) { in visitMachineBasicBlockBefore()
725 "terminator instruction!", MBB); in visitMachineBasicBlockBefore()
729 MachineFunction::const_iterator MBBI = MBB->getIterator(); in visitMachineBasicBlockBefore()
732 report("MBB conditionally falls through out of function!", MBB); in visitMachineBasicBlockBefore()
733 } else if (MBB->succ_size() == 1) { in visitMachineBasicBlockBefore()
737 "one CFG successor!", MBB); in visitMachineBasicBlockBefore()
738 else if (TBB != *MBB->succ_begin()) in visitMachineBasicBlockBefore()
740 "successor don't match the actual successor!", MBB); in visitMachineBasicBlockBefore()
741 } else if (MBB->succ_size() != 2) { in visitMachineBasicBlockBefore()
743 "exactly two CFG successors!", MBB); in visitMachineBasicBlockBefore()
744 } else if (!matchPair(MBB->succ_begin(), TBB, &*MBBI)) { in visitMachineBasicBlockBefore()
746 "successors don't match the actual successors!", MBB); in visitMachineBasicBlockBefore()
748 if (MBB->empty()) { in visitMachineBasicBlockBefore()
750 "contain any instructions!", MBB); in visitMachineBasicBlockBefore()
751 } else if (MBB->back().isBarrier()) { in visitMachineBasicBlockBefore()
753 "barrier instruction!", MBB); in visitMachineBasicBlockBefore()
754 } else if (!MBB->back().isTerminator()) { in visitMachineBasicBlockBefore()
756 "isn't a terminator instruction!", MBB); in visitMachineBasicBlockBefore()
761 if (MBB->succ_size() == 1) { in visitMachineBasicBlockBefore()
765 "one CFG successor!", MBB); in visitMachineBasicBlockBefore()
766 else if (TBB != *MBB->succ_begin()) in visitMachineBasicBlockBefore()
768 "successor don't match the actual successor!", MBB); in visitMachineBasicBlockBefore()
769 } else if (MBB->succ_size() != 2) { in visitMachineBasicBlockBefore()
771 "exactly two CFG successors!", MBB); in visitMachineBasicBlockBefore()
772 } else if (!matchPair(MBB->succ_begin(), TBB, FBB)) { in visitMachineBasicBlockBefore()
774 "successors don't match the actual successors!", MBB); in visitMachineBasicBlockBefore()
776 if (MBB->empty()) { in visitMachineBasicBlockBefore()
778 "contain any instructions!", MBB); in visitMachineBasicBlockBefore()
779 } else if (!MBB->back().isBarrier()) { in visitMachineBasicBlockBefore()
781 "barrier instruction!", MBB); in visitMachineBasicBlockBefore()
782 } else if (!MBB->back().isTerminator()) { in visitMachineBasicBlockBefore()
784 "isn't a terminator instruction!", MBB); in visitMachineBasicBlockBefore()
788 "condition!", MBB); in visitMachineBasicBlockBefore()
791 report("AnalyzeBranch returned invalid data!", MBB); in visitMachineBasicBlockBefore()
797 for (const auto &LI : MBB->liveins()) { in visitMachineBasicBlockBefore()
799 report("MBB live-in list contains non-physical register", MBB); in visitMachineBasicBlockBefore()
820 lastIndex = Indexes->getMBBStartIdx(MBB); in visitMachineBasicBlockBefore()
1727 MachineVerifier::visitMachineBasicBlockAfter(const MachineBasicBlock *MBB) { in visitMachineBasicBlockAfter() argument
1728 MBBInfoMap[MBB].regsLiveOut = regsLive; in visitMachineBasicBlockAfter()
1732 SlotIndex stop = Indexes->getMBBEndIdx(MBB); in visitMachineBasicBlockAfter()
1734 report("Block ends before last instruction index", MBB); in visitMachineBasicBlockAfter()
1749 for (const auto &MBB : *MF) { in calcRegsPassed()
1750 BBInfo &MInfo = MBBInfoMap[&MBB]; in calcRegsPassed()
1753 for (MachineBasicBlock::const_succ_iterator SuI = MBB.succ_begin(), in calcRegsPassed()
1754 SuE = MBB.succ_end(); SuI != SuE; ++SuI) { in calcRegsPassed()
1764 const MachineBasicBlock *MBB = *todo.begin(); in calcRegsPassed() local
1765 todo.erase(MBB); in calcRegsPassed()
1766 BBInfo &MInfo = MBBInfoMap[MBB]; in calcRegsPassed()
1767 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), in calcRegsPassed()
1768 SuE = MBB->succ_end(); SuI != SuE; ++SuI) { in calcRegsPassed()
1769 if (*SuI == MBB) in calcRegsPassed()
1784 for (const auto &MBB : *MF) { in calcRegsRequired()
1785 BBInfo &MInfo = MBBInfoMap[&MBB]; in calcRegsRequired()
1786 for (MachineBasicBlock::const_pred_iterator PrI = MBB.pred_begin(), in calcRegsRequired()
1787 PrE = MBB.pred_end(); PrI != PrE; ++PrI) { in calcRegsRequired()
1797 const MachineBasicBlock *MBB = *todo.begin(); in calcRegsRequired() local
1798 todo.erase(MBB); in calcRegsRequired()
1799 BBInfo &MInfo = MBBInfoMap[MBB]; in calcRegsRequired()
1800 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), in calcRegsRequired()
1801 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { in calcRegsRequired()
1802 if (*PrI == MBB) in calcRegsRequired()
1813 void MachineVerifier::checkPHIOps(const MachineBasicBlock &MBB) { in checkPHIOps() argument
1814 BBInfo &MInfo = MBBInfoMap[&MBB]; in checkPHIOps()
1817 for (const MachineInstr &Phi : MBB) { in checkPHIOps()
1851 if (!Pre.isSuccessor(&MBB)) { in checkPHIOps()
1867 for (MachineBasicBlock *Pred : MBB.predecessors()) { in checkPHIOps()
1881 for (const MachineBasicBlock &MBB : *MF) in visitMachineFunctionAfter()
1882 checkPHIOps(MBB); in visitMachineFunctionAfter()
1888 for (const auto &MBB : *MF) { in visitMachineFunctionAfter()
1889 BBInfo &MInfo = MBBInfoMap[&MBB]; in visitMachineFunctionAfter()
1894 report("Virtual register killed in block, but needed live out.", &MBB); in visitMachineFunctionAfter()
1921 for (const auto &MBB : *MF) { in verifyLiveVariables()
1922 BBInfo &MInfo = MBBInfoMap[&MBB]; in verifyLiveVariables()
1926 if (!VI.AliveBlocks.test(MBB.getNumber())) { in verifyLiveVariables()
1927 report("LiveVariables: Block missing from AliveBlocks", &MBB); in verifyLiveVariables()
1932 if (VI.AliveBlocks.test(MBB.getNumber())) { in verifyLiveVariables()
1933 report("LiveVariables: Block should not be in AliveBlocks", &MBB); in verifyLiveVariables()
1990 const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(VNI->def); in verifyLiveRangeValue() local
1991 if (!MBB) { in verifyLiveRangeValue()
1999 if (VNI->def != LiveInts->getMBBStartIdx(MBB)) { in verifyLiveRangeValue()
2000 report("PHIDef VNInfo is not defined at MBB start", MBB); in verifyLiveRangeValue()
2010 report("No instruction at VNInfo def index", MBB); in verifyLiveRangeValue()
2048 report("Early clobber def must be at an early-clobber slot", MBB); in verifyLiveRangeValue()
2053 report("Non-PHI, non-early clobber def must be at a register slot", MBB); in verifyLiveRangeValue()
2081 const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(S.start); in verifyLiveRangeSegment() local
2082 if (!MBB) { in verifyLiveRangeSegment()
2088 SlotIndex MBBStartIdx = LiveInts->getMBBStartIdx(MBB); in verifyLiveRangeSegment()
2090 report("Live segment must begin at MBB entry or valno def", MBB); in verifyLiveRangeSegment()
2207 MachineFunction::const_iterator MFI = MBB->getIterator(); in verifyLiveRangeSegment()
2211 if (MBB == EndMBB) in verifyLiveRangeSegment()
2369 const MachineBasicBlock *MBB = *DFI; in verifyStackFrame() local
2384 for (const auto &I : *MBB) { in verifyStackFrame()
2407 SPState[MBB->getNumber()] = BBState; in verifyStackFrame()
2411 for (MachineBasicBlock::const_pred_iterator I = MBB->pred_begin(), in verifyStackFrame()
2412 E = MBB->pred_end(); I != E; ++I) { in verifyStackFrame()
2416 report("The exit stack state of a predecessor is inconsistent.", MBB); in verifyStackFrame()
2420 << printMBBReference(*MBB) << " has entry state (" in verifyStackFrame()
2427 for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(), in verifyStackFrame()
2428 E = MBB->succ_end(); I != E; ++I) { in verifyStackFrame()
2432 report("The entry stack state of a successor is inconsistent.", MBB); in verifyStackFrame()
2436 << printMBBReference(*MBB) << " has exit state (" in verifyStackFrame()
2442 if (!MBB->empty() && MBB->back().isReturn()) { in verifyStackFrame()
2444 report("A return block ends with a FrameSetup.", MBB); in verifyStackFrame()
2446 report("A return block ends with a nonzero stack adjustment.", MBB); in verifyStackFrame()