Lines Matching defs:MBB
85 for (MachineBasicBlock *MBB : CurrentSCC) {
86 for (MachineBasicBlock *Pred : MBB->predecessors()) {
90 Header = MBB;
106 MachineBasicBlock *MBB;
109 POStackEntry(MachineBasicBlock *MBB, MachineFunction &MF,
115 const MachineBasicBlock *MBB) {
116 return Loop ? Loop->contains(MBB) : true;
119 POStackEntry::POStackEntry(MachineBasicBlock *MBB, MachineFunction &MF,
121 : MBB(MBB), Succs(MBB->successors()) {
125 MachineLoop *Loop = MLI.getLoopFor(MBB);
126 MachineFunction::iterator Next = next(MachineFunction::iterator(MBB));
161 for (MachineBasicBlock *MBB : Loop->blocks())
162 if (MBB->getNumber() > Bottom->getNumber())
163 Bottom = MBB;
196 MachineBasicBlock &MBB = *Entry.MBB;
197 MBB.moveBefore(&*MF.begin());
201 if (!MBB.empty() && MBB.back().isTerminator() && !MBB.back().isBranch() &&
202 !MBB.back().isBarrier())
205 if (MBB.empty() || !MBB.back().isTerminator() || MBB.back().isBranch())
206 MBB.updateTerminator();
224 for (auto &MBB : MF) {
225 assert(MBB.getNumber() >= 0 && "Renumbered blocks should be non-negative.");
227 MachineLoop *Loop = MLI.getLoopFor(&MBB);
228 if (Loop && &MBB == Loop->getHeader()) {
231 for (auto Pred : MBB.predecessors())
233 (Pred->getNumber() < MBB.getNumber() || Loop->contains(Pred)) &&
238 for (auto Pred : MBB.predecessors())
239 assert(Pred->getNumber() < MBB.getNumber() &&
241 assert(OnStack.count(MLI.getLoopFor(&MBB)) &&
244 while (OnStack.size() > 1 && &MBB == LoopBottom(OnStack.back()))
254 /// Test whether Pred has any terminators explicitly branching to MBB, as
259 static bool ExplicitlyBranchesTo(MachineBasicBlock *Pred, MachineBasicBlock *MBB) {
262 if (MO.isMBB() && MO.getMBB() == MBB)
267 /// Insert a BLOCK marker for branches to MBB (if needed).
268 static void PlaceBlockMarker(MachineBasicBlock &MBB, MachineFunction &MF,
278 int MBBNumber = MBB.getNumber();
279 for (MachineBasicBlock *Pred : MBB.predecessors())
282 if (ExplicitlyBranchesTo(Pred, &MBB))
290 assert(&MBB != &MF.front() && "Header blocks shouldn't have predecessors");
291 MachineBasicBlock *LayoutPred = &*prev(MachineFunction::iterator(&MBB));
308 // If there's a loop which ends just before MBB which contains Header, we can
318 if (HeaderLoop && MBB.getNumber() > LoopBottom(HeaderLoop)->getNumber()) {
319 // Header is the header of a loop that does not lexically contain MBB, so
333 .addMBB(&MBB);
336 int Number = MBB.getNumber();
342 /// Insert a LOOP marker for a loop starting at MBB (if it's a loop header).
343 static void PlaceLoopMarker(MachineBasicBlock &MBB, MachineFunction &MF,
347 MachineLoop *Loop = MLI.getLoopFor(&MBB);
348 if (!Loop || Loop->getHeader() != &MBB)
363 BuildMI(MBB, MBB.begin(), DebugLoc(), TII.get(WebAssembly::LOOP))
373 ScopeTops[AfterLoop->getNumber()]->getNumber() < MBB.getNumber()) &&
376 ScopeTops[AfterLoop->getNumber()] = &MBB;
390 for (auto &MBB : MF) {
391 // Place the LOOP for MBB if MBB is the header of a loop.
392 PlaceLoopMarker(MBB, MF, ScopeTops, TII, MLI);
394 // Place the BLOCK for MBB if MBB is branched to from above.
395 PlaceBlockMarker(MBB, MF, ScopeTops, TII, MLI, MDT);
402 const MachineBasicBlock *MBB) {
404 if (Pair.first == MBB)
433 for (auto &MBB : MF) {
434 while (!Stack.empty() && Stack.back().first == &MBB)
443 for (auto &MI : MBB)
446 Stack.push_back(std::make_pair(&MBB, false));