Lines Matching refs:MachineBasicBlock
125 typedef SmallVector<MachineBasicBlock *, 32> MBBVector;
126 typedef std::map<MachineBasicBlock *, BlockInformation *> MBBInfoMap;
127 typedef std::map<MachineLoop *, MachineBasicBlock *> LoopLandInfoMap;
211 int getSCCNum(MachineBasicBlock *MBB) const;
212 MachineBasicBlock *getLoopLandInfo(MachineLoop *LoopRep) const;
213 bool hasBackEdge(MachineBasicBlock *MBB) const;
214 bool isRetiredBlock(MachineBasicBlock *MBB) const;
215 bool isActiveLoophead(MachineBasicBlock *MBB) const;
216 PathToKind singlePathTo(MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
220 bool needMigrateBlock(MachineBasicBlock *MBB) const;
223 void reversePredicateSetter(MachineBasicBlock::iterator I);
228 void insertInstrEnd(MachineBasicBlock *MBB, int NewOpcode,
230 MachineInstr *insertInstrBefore(MachineBasicBlock *MBB, int NewOpcode,
232 MachineInstr *insertInstrBefore(MachineBasicBlock::iterator I, int NewOpcode);
233 void insertCondBranchBefore(MachineBasicBlock::iterator I, int NewOpcode,
235 void insertCondBranchBefore(MachineBasicBlock *MBB,
236 MachineBasicBlock::iterator I, int NewOpcode,
242 static MachineBasicBlock *getTrueBranch(MachineInstr *MI);
243 static void setTrueBranch(MachineInstr *MI, MachineBasicBlock *MBB);
244 static MachineBasicBlock *getFalseBranch(MachineBasicBlock *MBB,
248 static DebugLoc getLastDebugLocInBB(MachineBasicBlock *MBB);
249 static MachineInstr *getNormalBlockBranchInstr(MachineBasicBlock *MBB);
254 MachineInstr *getLoopendBlockBranchInstr(MachineBasicBlock *MBB);
255 static MachineInstr *getReturnInstr(MachineBasicBlock *MBB);
256 static bool isReturnBlock(MachineBasicBlock *MBB);
257 static void cloneSuccessorList(MachineBasicBlock *DstMBB,
258 MachineBasicBlock *SrcMBB) ;
259 static MachineBasicBlock *clone(MachineBasicBlock *MBB);
263 void replaceInstrUseOfBlockWith(MachineBasicBlock *SrcMBB,
264 MachineBasicBlock *OldMBB, MachineBasicBlock *NewBlk);
265 static void wrapup(MachineBasicBlock *MBB);
268 int patternMatch(MachineBasicBlock *MBB);
269 int patternMatchGroup(MachineBasicBlock *MBB);
270 int serialPatternMatch(MachineBasicBlock *MBB);
271 int ifPatternMatch(MachineBasicBlock *MBB);
278 bool isSameloopDetachedContbreak(MachineBasicBlock *Src1MBB,
279 MachineBasicBlock *Src2MBB);
280 int handleJumpintoIf(MachineBasicBlock *HeadMBB,
281 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
282 int handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
283 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
284 int improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
285 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
286 MachineBasicBlock **LandMBBPtr);
287 void showImproveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
288 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
289 MachineBasicBlock *LandMBB, bool Detail = false);
290 int cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
291 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB);
292 void mergeSerialBlock(MachineBasicBlock *DstMBB,
293 MachineBasicBlock *SrcMBB);
296 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
297 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB);
298 void mergeLooplandBlock(MachineBasicBlock *DstMBB,
299 MachineBasicBlock *LandMBB);
300 void mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
301 MachineBasicBlock *LandMBB);
302 void settleLoopcontBlock(MachineBasicBlock *ContingMBB,
303 MachineBasicBlock *ContMBB);
312 MachineBasicBlock *normalizeInfiniteLoopExit(MachineLoop *LoopRep);
313 void removeUnconditionalBranch(MachineBasicBlock *MBB);
322 void removeRedundantConditionalBranch(MachineBasicBlock *MBB);
323 void addDummyExitBlock(SmallVectorImpl<MachineBasicBlock *> &RetMBB);
324 void removeSuccessor(MachineBasicBlock *MBB);
325 MachineBasicBlock *cloneBlockForPredecessor(MachineBasicBlock *MBB,
326 MachineBasicBlock *PredMBB);
327 void migrateInstruction(MachineBasicBlock *SrcMBB,
328 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I);
329 void recordSccnum(MachineBasicBlock *MBB, int SCCNum);
330 void retireBlock(MachineBasicBlock *MBB);
338 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> OrderedBlks;
341 int AMDGPUCFGStructurizer::getSCCNum(MachineBasicBlock *MBB) const { in getSCCNum()
348 MachineBasicBlock *AMDGPUCFGStructurizer::getLoopLandInfo(MachineLoop *LoopRep) in getLoopLandInfo()
356 bool AMDGPUCFGStructurizer::hasBackEdge(MachineBasicBlock *MBB) const { in hasBackEdge()
360 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in hasBackEdge()
364 bool AMDGPUCFGStructurizer::isRetiredBlock(MachineBasicBlock *MBB) const { in isRetiredBlock()
371 bool AMDGPUCFGStructurizer::isActiveLoophead(MachineBasicBlock *MBB) const { in isActiveLoophead()
374 MachineBasicBlock *LoopLand = getLoopLandInfo(LoopRep); in isActiveLoophead()
384 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB, in singlePathTo()
412 bool AMDGPUCFGStructurizer::needMigrateBlock(MachineBasicBlock *MBB) const { in needMigrateBlock()
425 MachineBasicBlock::iterator I) { in reversePredicateSetter()
453 void AMDGPUCFGStructurizer::insertInstrEnd(MachineBasicBlock *MBB, in insertInstrEnd()
462 MachineInstr *AMDGPUCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB, in insertInstrBefore()
476 MachineBasicBlock::iterator I, int NewOpcode) { in insertInstrBefore()
478 MachineBasicBlock *MBB = OldMI->getParent(); in insertInstrBefore()
488 MachineBasicBlock::iterator I, int NewOpcode, const DebugLoc &DL) { in insertCondBranchBefore()
490 MachineBasicBlock *MBB = OldMI->getParent(); in insertCondBranchBefore()
501 MachineBasicBlock *blk, MachineBasicBlock::iterator I, int NewOpcode, in insertCondBranchBefore()
551 MachineBasicBlock *AMDGPUCFGStructurizer::getTrueBranch(MachineInstr *MI) { in getTrueBranch()
556 MachineBasicBlock *MBB) { in setTrueBranch()
560 MachineBasicBlock *
561 AMDGPUCFGStructurizer::getFalseBranch(MachineBasicBlock *MBB, in getFalseBranch()
564 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in getFalseBranch()
565 MachineBasicBlock::succ_iterator It = MBB->succ_begin(); in getFalseBranch()
566 MachineBasicBlock::succ_iterator Next = It; in getFalseBranch()
593 DebugLoc AMDGPUCFGStructurizer::getLastDebugLocInBB(MachineBasicBlock *MBB) { in getLastDebugLocInBB()
596 for (MachineBasicBlock::iterator It = MBB->begin(); It != MBB->end(); in getLastDebugLocInBB()
606 MachineBasicBlock *MBB) { in getNormalBlockBranchInstr()
607 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getNormalBlockBranchInstr()
615 MachineBasicBlock *MBB) { in getLoopendBlockBranchInstr()
616 for (MachineBasicBlock::reverse_iterator It = MBB->rbegin(), E = MBB->rend(); in getLoopendBlockBranchInstr()
630 MachineInstr *AMDGPUCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) { in getReturnInstr()
631 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getReturnInstr()
640 bool AMDGPUCFGStructurizer::isReturnBlock(MachineBasicBlock *MBB) { in isReturnBlock()
652 void AMDGPUCFGStructurizer::cloneSuccessorList(MachineBasicBlock *DstMBB, in cloneSuccessorList()
653 MachineBasicBlock *SrcMBB) { in cloneSuccessorList()
654 for (MachineBasicBlock::succ_iterator It = SrcMBB->succ_begin(), in cloneSuccessorList()
659 MachineBasicBlock *AMDGPUCFGStructurizer::clone(MachineBasicBlock *MBB) { in clone()
661 MachineBasicBlock *NewMBB = Func->CreateMachineBasicBlock(); in clone()
669 MachineBasicBlock *SrcMBB, MachineBasicBlock *OldMBB, in replaceInstrUseOfBlockWith()
670 MachineBasicBlock *NewBlk) { in replaceInstrUseOfBlockWith()
677 void AMDGPUCFGStructurizer::wrapup(MachineBasicBlock *MBB) { in wrapup()
684 MachineBasicBlock::iterator Pre = MBB->begin(); in wrapup()
685 MachineBasicBlock::iterator E = MBB->end(); in wrapup()
686 MachineBasicBlock::iterator It = Pre; in wrapup()
716 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> RetBlks; in prepare()
726 MachineBasicBlock* DummyExitBlk = normalizeInfiniteLoopExit(LoopRep); in prepare()
734 for (SmallVectorImpl<MachineBasicBlock *>::const_iterator in prepare()
736 MachineBasicBlock *MBB = *It; in prepare()
766 MachineBasicBlock *MBB; in run()
778 SmallVectorImpl<MachineBasicBlock *>::const_iterator It = in run()
780 SmallVectorImpl<MachineBasicBlock *>::const_iterator E = in run()
783 SmallVectorImpl<MachineBasicBlock *>::const_iterator SccBeginIter = in run()
785 MachineBasicBlock *SccBeginMBB = nullptr; in run()
843 MachineBasicBlock *EntryMBB = in run()
896 MachineBasicBlock *MBB; in orderBlocks()
899 const std::vector<MachineBasicBlock *> &SccNext = *It; in orderBlocks()
900 for (std::vector<MachineBasicBlock *>::const_iterator in orderBlocks()
913 MachineBasicBlock *MBB = &(*It); in orderBlocks()
920 int AMDGPUCFGStructurizer::patternMatch(MachineBasicBlock *MBB) { in patternMatch()
939 int AMDGPUCFGStructurizer::patternMatchGroup(MachineBasicBlock *MBB) { in patternMatchGroup()
948 int AMDGPUCFGStructurizer::serialPatternMatch(MachineBasicBlock *MBB) { in serialPatternMatch()
952 MachineBasicBlock *childBlk = *MBB->succ_begin(); in serialPatternMatch()
961 int AMDGPUCFGStructurizer::ifPatternMatch(MachineBasicBlock *MBB) { in ifPatternMatch()
974 MachineBasicBlock *TrueMBB = getTrueBranch(BranchMI); in ifPatternMatch()
977 MachineBasicBlock *FalseMBB = getFalseBranch(MBB, BranchMI); in ifPatternMatch()
980 MachineBasicBlock *LandBlk; in ifPatternMatch()
1065 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in mergeLoop()
1073 SmallPtrSet<MachineBasicBlock *, 2> ExitBlkSet; in mergeLoop()
1077 MachineBasicBlock *ExitBlk = *ExitBlks.begin(); in mergeLoop()
1080 typedef GraphTraits<Inverse<MachineBasicBlock*> > InvMBBTraits; in mergeLoop()
1109 MachineBasicBlock *Src1MBB, MachineBasicBlock *Src2MBB) { in isSameloopDetachedContbreak()
1113 MachineBasicBlock *&TheEntry = LLInfoMap[LoopRep]; in isSameloopDetachedContbreak()
1127 int AMDGPUCFGStructurizer::handleJumpintoIf(MachineBasicBlock *HeadMBB, in handleJumpintoIf()
1128 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIf()
1139 int AMDGPUCFGStructurizer::handleJumpintoIfImp(MachineBasicBlock *HeadMBB, in handleJumpintoIfImp()
1140 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIfImp()
1142 MachineBasicBlock *DownBlk; in handleJumpintoIfImp()
1185 MachineBasicBlock *HeadMBB, MachineBasicBlock *TrueMBB, in showImproveSimpleJumpintoIf()
1186 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB, bool Detail) { in showImproveSimpleJumpintoIf()
1226 int AMDGPUCFGStructurizer::improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB, in improveSimpleJumpintoIf()
1227 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB, in improveSimpleJumpintoIf()
1228 MachineBasicBlock **LandMBBPtr) { in improveSimpleJumpintoIf()
1232 MachineBasicBlock *LandBlk = *LandMBBPtr; in improveSimpleJumpintoIf()
1345 MachineBasicBlock::iterator I = insertInstrBefore(LandBlk, AMDGPU::ENDIF); in improveSimpleJumpintoIf()
1385 for (MachineBasicBlock::pred_iterator PI = LandBlk->pred_begin(), in improveSimpleJumpintoIf()
1387 MachineBasicBlock *MBB = *PI; in improveSimpleJumpintoIf()
1403 void AMDGPUCFGStructurizer::mergeSerialBlock(MachineBasicBlock *DstMBB, in mergeSerialBlock()
1404 MachineBasicBlock *SrcMBB) { in mergeSerialBlock()
1420 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB, in mergeIfthenelseBlock()
1421 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB) { in mergeIfthenelseBlock()
1455 MachineBasicBlock::iterator I = BranchMI; in mergeIfthenelseBlock()
1487 void AMDGPUCFGStructurizer::mergeLooplandBlock(MachineBasicBlock *DstBlk, in mergeLooplandBlock()
1488 MachineBasicBlock *LandMBB) { in mergeLooplandBlock()
1498 void AMDGPUCFGStructurizer::mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB, in mergeLoopbreakBlock()
1499 MachineBasicBlock *LandMBB) { in mergeLoopbreakBlock()
1505 MachineBasicBlock *TrueBranch = getTrueBranch(BranchMI); in mergeLoopbreakBlock()
1506 MachineBasicBlock::iterator I = BranchMI; in mergeLoopbreakBlock()
1518 void AMDGPUCFGStructurizer::settleLoopcontBlock(MachineBasicBlock *ContingMBB, in settleLoopcontBlock()
1519 MachineBasicBlock *ContMBB) { in settleLoopcontBlock()
1527 MachineBasicBlock::iterator I = MI; in settleLoopcontBlock()
1528 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in settleLoopcontBlock()
1561 int AMDGPUCFGStructurizer::cloneOnSideEntryTo(MachineBasicBlock *PreMBB, in cloneOnSideEntryTo()
1562 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB) { in cloneOnSideEntryTo()
1579 MachineBasicBlock *
1580 AMDGPUCFGStructurizer::cloneBlockForPredecessor(MachineBasicBlock *MBB, in cloneBlockForPredecessor()
1581 MachineBasicBlock *PredMBB) { in cloneBlockForPredecessor()
1585 MachineBasicBlock *CloneMBB = clone(MBB); //clone instructions in cloneBlockForPredecessor()
1606 void AMDGPUCFGStructurizer::migrateInstruction(MachineBasicBlock *SrcMBB, in migrateInstruction()
1607 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I) { in migrateInstruction()
1608 MachineBasicBlock::iterator SpliceEnd; in migrateInstruction()
1634 MachineBasicBlock *
1636 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in normalizeInfiniteLoopExit()
1637 MachineBasicBlock *LoopLatch = LoopRep->getLoopLatch(); in normalizeInfiniteLoopExit()
1646 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in normalizeInfiniteLoopExit()
1655 void AMDGPUCFGStructurizer::removeUnconditionalBranch(MachineBasicBlock *MBB) { in removeUnconditionalBranch()
1668 MachineBasicBlock *MBB) { in removeRedundantConditionalBranch()
1671 MachineBasicBlock *MBB1 = *MBB->succ_begin(); in removeRedundantConditionalBranch()
1672 MachineBasicBlock *MBB2 = *std::next(MBB->succ_begin()); in removeRedundantConditionalBranch()
1685 SmallVectorImpl<MachineBasicBlock*> &RetMBB) { in addDummyExitBlock()
1686 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in addDummyExitBlock()
1690 for (SmallVectorImpl<MachineBasicBlock *>::iterator It = RetMBB.begin(), in addDummyExitBlock()
1692 MachineBasicBlock *MBB = *It; in addDummyExitBlock()
1705 void AMDGPUCFGStructurizer::removeSuccessor(MachineBasicBlock *MBB) { in removeSuccessor()
1710 void AMDGPUCFGStructurizer::recordSccnum(MachineBasicBlock *MBB, in recordSccnum()
1718 void AMDGPUCFGStructurizer::retireBlock(MachineBasicBlock *MBB) { in retireBlock()