Lines Matching refs:MachineBasicBlock
119 using MBBVector = SmallVector<MachineBasicBlock *, 32>;
120 using MBBInfoMap = std::map<MachineBasicBlock *, BlockInformation *>;
121 using LoopLandInfoMap = std::map<MachineLoop *, MachineBasicBlock *>;
204 int getSCCNum(MachineBasicBlock *MBB) const;
205 MachineBasicBlock *getLoopLandInfo(MachineLoop *LoopRep) const;
206 bool hasBackEdge(MachineBasicBlock *MBB) const;
207 bool isRetiredBlock(MachineBasicBlock *MBB) const;
208 bool isActiveLoophead(MachineBasicBlock *MBB) const;
209 PathToKind singlePathTo(MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
213 bool needMigrateBlock(MachineBasicBlock *MBB) const;
216 void reversePredicateSetter(MachineBasicBlock::iterator I,
217 MachineBasicBlock &MBB);
222 void insertInstrEnd(MachineBasicBlock *MBB, int NewOpcode,
224 MachineInstr *insertInstrBefore(MachineBasicBlock *MBB, int NewOpcode,
226 MachineInstr *insertInstrBefore(MachineBasicBlock::iterator I, int NewOpcode);
227 void insertCondBranchBefore(MachineBasicBlock::iterator I, int NewOpcode,
229 void insertCondBranchBefore(MachineBasicBlock *MBB,
230 MachineBasicBlock::iterator I, int NewOpcode,
237 static MachineBasicBlock *getTrueBranch(MachineInstr *MI);
238 static void setTrueBranch(MachineInstr *MI, MachineBasicBlock *MBB);
239 static MachineBasicBlock *getFalseBranch(MachineBasicBlock *MBB,
243 static DebugLoc getLastDebugLocInBB(MachineBasicBlock *MBB);
244 static MachineInstr *getNormalBlockBranchInstr(MachineBasicBlock *MBB);
250 MachineInstr *getLoopendBlockBranchInstr(MachineBasicBlock *MBB);
252 static MachineInstr *getReturnInstr(MachineBasicBlock *MBB);
253 static bool isReturnBlock(MachineBasicBlock *MBB);
254 static void cloneSuccessorList(MachineBasicBlock *DstMBB,
255 MachineBasicBlock *SrcMBB);
256 static MachineBasicBlock *clone(MachineBasicBlock *MBB);
261 void replaceInstrUseOfBlockWith(MachineBasicBlock *SrcMBB,
262 MachineBasicBlock *OldMBB, MachineBasicBlock *NewBlk);
264 static void wrapup(MachineBasicBlock *MBB);
266 int patternMatch(MachineBasicBlock *MBB);
267 int patternMatchGroup(MachineBasicBlock *MBB);
268 int serialPatternMatch(MachineBasicBlock *MBB);
269 int ifPatternMatch(MachineBasicBlock *MBB);
276 bool isSameloopDetachedContbreak(MachineBasicBlock *Src1MBB,
277 MachineBasicBlock *Src2MBB);
278 int handleJumpintoIf(MachineBasicBlock *HeadMBB,
279 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
280 int handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
281 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
282 int improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
283 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
284 MachineBasicBlock **LandMBBPtr);
285 void showImproveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
286 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
287 MachineBasicBlock *LandMBB, bool Detail = false);
288 int cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
289 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB);
290 void mergeSerialBlock(MachineBasicBlock *DstMBB,
291 MachineBasicBlock *SrcMBB);
294 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
295 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB);
296 void mergeLooplandBlock(MachineBasicBlock *DstMBB,
297 MachineBasicBlock *LandMBB);
298 void mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
299 MachineBasicBlock *LandMBB);
300 void settleLoopcontBlock(MachineBasicBlock *ContingMBB,
301 MachineBasicBlock *ContMBB);
311 MachineBasicBlock *normalizeInfiniteLoopExit(MachineLoop *LoopRep);
312 void removeUnconditionalBranch(MachineBasicBlock *MBB);
322 void removeRedundantConditionalBranch(MachineBasicBlock *MBB);
324 void addDummyExitBlock(SmallVectorImpl<MachineBasicBlock *> &RetMBB);
325 void removeSuccessor(MachineBasicBlock *MBB);
326 MachineBasicBlock *cloneBlockForPredecessor(MachineBasicBlock *MBB,
327 MachineBasicBlock *PredMBB);
328 void migrateInstruction(MachineBasicBlock *SrcMBB,
329 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I);
330 void recordSccnum(MachineBasicBlock *MBB, int SCCNum);
331 void retireBlock(MachineBasicBlock *MBB);
338 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> OrderedBlks;
345 int AMDGPUCFGStructurizer::getSCCNum(MachineBasicBlock *MBB) const { in getSCCNum()
352 MachineBasicBlock *AMDGPUCFGStructurizer::getLoopLandInfo(MachineLoop *LoopRep) in getLoopLandInfo()
360 bool AMDGPUCFGStructurizer::hasBackEdge(MachineBasicBlock *MBB) const { in hasBackEdge()
364 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in hasBackEdge()
368 bool AMDGPUCFGStructurizer::isRetiredBlock(MachineBasicBlock *MBB) const { in isRetiredBlock()
375 bool AMDGPUCFGStructurizer::isActiveLoophead(MachineBasicBlock *MBB) const { in isActiveLoophead()
378 MachineBasicBlock *LoopLand = getLoopLandInfo(LoopRep); in isActiveLoophead()
389 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB, in singlePathTo()
417 bool AMDGPUCFGStructurizer::needMigrateBlock(MachineBasicBlock *MBB) const { in needMigrateBlock()
430 MachineBasicBlock::iterator I, MachineBasicBlock &MBB) { in reversePredicateSetter()
456 void AMDGPUCFGStructurizer::insertInstrEnd(MachineBasicBlock *MBB, in insertInstrEnd()
465 MachineInstr *AMDGPUCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB, in insertInstrBefore()
479 MachineBasicBlock::iterator I, int NewOpcode) { in insertInstrBefore()
481 MachineBasicBlock *MBB = OldMI->getParent(); in insertInstrBefore()
491 MachineBasicBlock::iterator I, int NewOpcode, const DebugLoc &DL) { in insertCondBranchBefore()
493 MachineBasicBlock *MBB = OldMI->getParent(); in insertCondBranchBefore()
504 MachineBasicBlock *blk, MachineBasicBlock::iterator I, int NewOpcode, in insertCondBranchBefore()
554 MachineBasicBlock *AMDGPUCFGStructurizer::getTrueBranch(MachineInstr *MI) { in getTrueBranch()
559 MachineBasicBlock *MBB) { in setTrueBranch()
563 MachineBasicBlock *
564 AMDGPUCFGStructurizer::getFalseBranch(MachineBasicBlock *MBB, in getFalseBranch()
567 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in getFalseBranch()
568 MachineBasicBlock::succ_iterator It = MBB->succ_begin(); in getFalseBranch()
569 MachineBasicBlock::succ_iterator Next = It; in getFalseBranch()
596 DebugLoc AMDGPUCFGStructurizer::getLastDebugLocInBB(MachineBasicBlock *MBB) { in getLastDebugLocInBB()
599 for (MachineBasicBlock::iterator It = MBB->begin(); It != MBB->end(); in getLastDebugLocInBB()
609 MachineBasicBlock *MBB) { in getNormalBlockBranchInstr()
610 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getNormalBlockBranchInstr()
618 MachineBasicBlock *MBB) { in getLoopendBlockBranchInstr()
619 for (MachineBasicBlock::reverse_iterator It = MBB->rbegin(), E = MBB->rend(); in getLoopendBlockBranchInstr()
633 MachineInstr *AMDGPUCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) { in getReturnInstr()
634 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getReturnInstr()
643 bool AMDGPUCFGStructurizer::isReturnBlock(MachineBasicBlock *MBB) { in isReturnBlock()
654 void AMDGPUCFGStructurizer::cloneSuccessorList(MachineBasicBlock *DstMBB, in cloneSuccessorList()
655 MachineBasicBlock *SrcMBB) { in cloneSuccessorList()
656 for (MachineBasicBlock::succ_iterator It = SrcMBB->succ_begin(), in cloneSuccessorList()
661 MachineBasicBlock *AMDGPUCFGStructurizer::clone(MachineBasicBlock *MBB) { in clone()
663 MachineBasicBlock *NewMBB = Func->CreateMachineBasicBlock(); in clone()
671 MachineBasicBlock *SrcMBB, MachineBasicBlock *OldMBB, in replaceInstrUseOfBlockWith()
672 MachineBasicBlock *NewBlk) { in replaceInstrUseOfBlockWith()
679 void AMDGPUCFGStructurizer::wrapup(MachineBasicBlock *MBB) { in wrapup()
686 MachineBasicBlock::iterator Pre = MBB->begin(); in wrapup()
687 MachineBasicBlock::iterator E = MBB->end(); in wrapup()
688 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()
765 MachineBasicBlock *MBB; in run()
775 SmallVectorImpl<MachineBasicBlock *>::const_iterator It = in run()
777 SmallVectorImpl<MachineBasicBlock *>::const_iterator E = in run()
780 SmallVectorImpl<MachineBasicBlock *>::const_iterator SccBeginIter = in run()
782 MachineBasicBlock *SccBeginMBB = nullptr; in run()
834 MachineBasicBlock *EntryMBB = in run()
879 MachineBasicBlock *MBB; in orderBlocks()
882 const std::vector<MachineBasicBlock *> &SccNext = *It; in orderBlocks()
883 for (std::vector<MachineBasicBlock *>::const_iterator in orderBlocks()
900 int AMDGPUCFGStructurizer::patternMatch(MachineBasicBlock *MBB) { in patternMatch()
915 int AMDGPUCFGStructurizer::patternMatchGroup(MachineBasicBlock *MBB) { in patternMatchGroup()
923 int AMDGPUCFGStructurizer::serialPatternMatch(MachineBasicBlock *MBB) { in serialPatternMatch()
927 MachineBasicBlock *childBlk = *MBB->succ_begin(); in serialPatternMatch()
936 int AMDGPUCFGStructurizer::ifPatternMatch(MachineBasicBlock *MBB) { in ifPatternMatch()
949 MachineBasicBlock *TrueMBB = getTrueBranch(BranchMI); in ifPatternMatch()
952 MachineBasicBlock *FalseMBB = getFalseBranch(MBB, BranchMI); in ifPatternMatch()
955 MachineBasicBlock *LandBlk; in ifPatternMatch()
1040 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in mergeLoop()
1049 SmallPtrSet<MachineBasicBlock *, 2> ExitBlkSet; in mergeLoop()
1053 MachineBasicBlock *ExitBlk = *ExitBlks.begin(); in mergeLoop()
1056 for (auto *LB : inverse_children<MachineBasicBlock*>(LoopHeader)) in mergeLoop()
1081 MachineBasicBlock *Src1MBB, MachineBasicBlock *Src2MBB) { in isSameloopDetachedContbreak()
1085 MachineBasicBlock *&TheEntry = LLInfoMap[LoopRep]; in isSameloopDetachedContbreak()
1097 int AMDGPUCFGStructurizer::handleJumpintoIf(MachineBasicBlock *HeadMBB, in handleJumpintoIf()
1098 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIf()
1108 int AMDGPUCFGStructurizer::handleJumpintoIfImp(MachineBasicBlock *HeadMBB, in handleJumpintoIfImp()
1109 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIfImp()
1111 MachineBasicBlock *DownBlk; in handleJumpintoIfImp()
1147 MachineBasicBlock *HeadMBB, MachineBasicBlock *TrueMBB, in showImproveSimpleJumpintoIf()
1148 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB, bool Detail) { in showImproveSimpleJumpintoIf()
1189 int AMDGPUCFGStructurizer::improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB, in improveSimpleJumpintoIf()
1190 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB, in improveSimpleJumpintoIf()
1191 MachineBasicBlock **LandMBBPtr) { in improveSimpleJumpintoIf()
1195 MachineBasicBlock *LandBlk = *LandMBBPtr; in improveSimpleJumpintoIf()
1307 MachineBasicBlock::iterator I = insertInstrBefore(LandBlk, R600::ENDIF); in improveSimpleJumpintoIf()
1347 for (MachineBasicBlock::pred_iterator PI = LandBlk->pred_begin(), in improveSimpleJumpintoIf()
1349 MachineBasicBlock *MBB = *PI; in improveSimpleJumpintoIf()
1364 void AMDGPUCFGStructurizer::mergeSerialBlock(MachineBasicBlock *DstMBB, in mergeSerialBlock()
1365 MachineBasicBlock *SrcMBB) { in mergeSerialBlock()
1379 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB, in mergeIfthenelseBlock()
1380 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB) { in mergeIfthenelseBlock()
1403 MachineBasicBlock::iterator I = BranchMI; in mergeIfthenelseBlock()
1434 void AMDGPUCFGStructurizer::mergeLooplandBlock(MachineBasicBlock *DstBlk, in mergeLooplandBlock()
1435 MachineBasicBlock *LandMBB) { in mergeLooplandBlock()
1444 void AMDGPUCFGStructurizer::mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB, in mergeLoopbreakBlock()
1445 MachineBasicBlock *LandMBB) { in mergeLoopbreakBlock()
1452 MachineBasicBlock *TrueBranch = getTrueBranch(BranchMI); in mergeLoopbreakBlock()
1453 MachineBasicBlock::iterator I = BranchMI; in mergeLoopbreakBlock()
1465 void AMDGPUCFGStructurizer::settleLoopcontBlock(MachineBasicBlock *ContingMBB, in settleLoopcontBlock()
1466 MachineBasicBlock *ContMBB) { in settleLoopcontBlock()
1474 MachineBasicBlock::iterator I = MI; in settleLoopcontBlock()
1475 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in settleLoopcontBlock()
1508 int AMDGPUCFGStructurizer::cloneOnSideEntryTo(MachineBasicBlock *PreMBB, in cloneOnSideEntryTo()
1509 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB) { in cloneOnSideEntryTo()
1526 MachineBasicBlock *
1527 AMDGPUCFGStructurizer::cloneBlockForPredecessor(MachineBasicBlock *MBB, in cloneBlockForPredecessor()
1528 MachineBasicBlock *PredMBB) { in cloneBlockForPredecessor()
1532 MachineBasicBlock *CloneMBB = clone(MBB); //clone instructions in cloneBlockForPredecessor()
1552 void AMDGPUCFGStructurizer::migrateInstruction(MachineBasicBlock *SrcMBB, in migrateInstruction()
1553 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I) { in migrateInstruction()
1554 MachineBasicBlock::iterator SpliceEnd; in migrateInstruction()
1576 MachineBasicBlock *
1578 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in normalizeInfiniteLoopExit()
1579 MachineBasicBlock *LoopLatch = LoopRep->getLoopLatch(); in normalizeInfiniteLoopExit()
1588 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in normalizeInfiniteLoopExit()
1597 void AMDGPUCFGStructurizer::removeUnconditionalBranch(MachineBasicBlock *MBB) { in removeUnconditionalBranch()
1610 MachineBasicBlock *MBB) { in removeRedundantConditionalBranch()
1613 MachineBasicBlock *MBB1 = *MBB->succ_begin(); in removeRedundantConditionalBranch()
1614 MachineBasicBlock *MBB2 = *std::next(MBB->succ_begin()); in removeRedundantConditionalBranch()
1627 SmallVectorImpl<MachineBasicBlock*> &RetMBB) { in addDummyExitBlock()
1628 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in addDummyExitBlock()
1632 for (SmallVectorImpl<MachineBasicBlock *>::iterator It = RetMBB.begin(), in addDummyExitBlock()
1634 MachineBasicBlock *MBB = *It; in addDummyExitBlock()
1645 void AMDGPUCFGStructurizer::removeSuccessor(MachineBasicBlock *MBB) { in removeSuccessor()
1650 void AMDGPUCFGStructurizer::recordSccnum(MachineBasicBlock *MBB, in recordSccnum()
1658 void AMDGPUCFGStructurizer::retireBlock(MachineBasicBlock *MBB) { in retireBlock()