Lines Matching refs:MachineBasicBlock
57 #include "llvm/CodeGen/MachineBasicBlock.h"
122 MachineBasicBlock *Save = nullptr;
127 MachineBasicBlock *Restore = nullptr;
153 const MachineBasicBlock *Entry = nullptr;
196 void updateSaveRestorePoints(MachineBasicBlock &MBB, RegScavenger *RS);
201 const ReversePostOrderTraversal<MachineBasicBlock *> &RPOT,
218 const MachineBasicBlock *CurRestore,
219 const DenseSet<const MachineBasicBlock *> &ReachableByDirty,
220 SmallVectorImpl<MachineBasicBlock *> &DirtyPreds,
221 SmallVectorImpl<MachineBasicBlock *> &CleanPreds,
376 static MachineBasicBlock *FindIDom(MachineBasicBlock &Block, ListOfBBs BBs,
378 MachineBasicBlock *IDom = Dom.findNearestCommonDominator(iterator_range(BBs));
385 MachineBasicBlock &Entry) {
387 MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
397 hasDirtyPred(const DenseSet<const MachineBasicBlock *> &ReachableByDirty,
398 const MachineBasicBlock &MBB) {
399 for (const MachineBasicBlock *PredBB : MBB.predecessors())
406 static void markAllReachable(DenseSet<const MachineBasicBlock *> &Visited,
407 const MachineBasicBlock &MBB) {
408 SmallVector<MachineBasicBlock *, 4> Worklist(MBB.successors());
411 MachineBasicBlock *SuccMBB = Worklist.pop_back_val();
420 const DenseSet<const MachineBasicBlock *> &DirtyBBs,
421 DenseSet<const MachineBasicBlock *> &ReachableByDirty) {
422 for (const MachineBasicBlock *MBB : DirtyBBs) {
433 isSaveReachableThroughClean(const MachineBasicBlock *SavePoint,
434 ArrayRef<MachineBasicBlock *> CleanPreds) {
435 DenseSet<const MachineBasicBlock *> Visited;
436 SmallVector<MachineBasicBlock *, 4> Worklist(CleanPreds);
438 MachineBasicBlock *CleanBB = Worklist.pop_back_val();
458 static void updateTerminator(MachineBasicBlock *BBToUpdate,
459 MachineBasicBlock *NMBB,
478 static MachineBasicBlock *
479 tryToSplitRestore(MachineBasicBlock *MBB,
480 ArrayRef<MachineBasicBlock *> DirtyPreds,
488 SmallPtrSet<MachineBasicBlock *, 8> MBBFallthrough;
489 for (MachineBasicBlock *BB : DirtyPreds)
493 MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock();
498 for (const MachineBasicBlock::RegisterMaskPair &LI : MBB->liveins())
505 for (MachineBasicBlock *SuccBB : DirtyPreds)
510 for (MachineBasicBlock *BBToUpdate : MBBFallthrough)
522 static void rollbackRestoreSplit(MachineFunction &MF, MachineBasicBlock *NMBB,
523 MachineBasicBlock *MBB,
524 ArrayRef<MachineBasicBlock *> DirtyPreds,
529 SmallPtrSet<MachineBasicBlock *, 8> NMBBFallthrough;
530 for (MachineBasicBlock *BB : DirtyPreds)
535 for (MachineBasicBlock *SuccBB : DirtyPreds)
541 for (MachineBasicBlock *BBToUpdate : NMBBFallthrough)
549 const MachineBasicBlock *CurRestore,
550 const DenseSet<const MachineBasicBlock *> &ReachableByDirty,
551 SmallVectorImpl<MachineBasicBlock *> &DirtyPreds,
552 SmallVectorImpl<MachineBasicBlock *> &CleanPreds,
558 for (MachineBasicBlock *PredBB : CurRestore->predecessors()) {
576 MachineBasicBlock *InitSave = nullptr;
577 MachineBasicBlock *InitRestore = nullptr;
585 for (MachineBasicBlock &MBB : MF) {
604 for (MachineBasicBlock &MBB : MF)
608 DenseSet<const MachineBasicBlock *> DirtyBBs;
609 for (MachineBasicBlock &MBB : MF) {
622 DenseSet<const MachineBasicBlock *> ReachableByDirty;
626 SmallVector<MachineBasicBlock *, 2> DirtyPreds;
627 SmallVector<MachineBasicBlock *, 2> CleanPreds;
633 MachineBasicBlock *NewSave =
652 MachineBasicBlock *NewRestore =
678 void ShrinkWrap::updateSaveRestorePoints(MachineBasicBlock &MBB,
772 SmallVector<MachineBasicBlock*, 4> ExitBlocks;
776 MachineBasicBlock *IPdom = Restore;
777 for (MachineBasicBlock *LoopExitBB: ExitBlocks) {
799 const MachineBasicBlock *MBB) {
810 const ReversePostOrderTraversal<MachineBasicBlock *> &RPOT,
812 for (MachineBasicBlock *MBB : RPOT) {
840 for (const MachineBasicBlock *Pred : MBB->predecessors()) {
895 MachineBasicBlock *NewBB;
926 ReversePostOrderTraversal<MachineBasicBlock *> RPOT(&*MF.begin());
927 if (containsIrreducibleCFG<MachineBasicBlock *>(RPOT, *MLI)) {