Lines Matching refs:MachineBasicBlock
95 using MBBVector = SmallVector<MachineBasicBlock *, 32>;
96 using MBBInfoMap = std::map<MachineBasicBlock *, BlockInformation *>;
97 using LoopLandInfoMap = std::map<MachineLoop *, MachineBasicBlock *>;
182 int getSCCNum(MachineBasicBlock *MBB) const;
183 MachineBasicBlock *getLoopLandInfo(MachineLoop *LoopRep) const;
184 bool hasBackEdge(MachineBasicBlock *MBB) const;
185 bool isRetiredBlock(MachineBasicBlock *MBB) const;
186 bool isActiveLoophead(MachineBasicBlock *MBB) const;
187 PathToKind singlePathTo(MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
191 bool needMigrateBlock(MachineBasicBlock *MBB) const;
194 void reversePredicateSetter(MachineBasicBlock::iterator I,
195 MachineBasicBlock &MBB);
200 void insertInstrEnd(MachineBasicBlock *MBB, int NewOpcode,
202 MachineInstr *insertInstrBefore(MachineBasicBlock *MBB, int NewOpcode,
204 MachineInstr *insertInstrBefore(MachineBasicBlock::iterator I, int NewOpcode);
205 void insertCondBranchBefore(MachineBasicBlock::iterator I, int NewOpcode,
207 void insertCondBranchBefore(MachineBasicBlock *MBB,
208 MachineBasicBlock::iterator I, int NewOpcode,
215 static MachineBasicBlock *getTrueBranch(MachineInstr *MI);
216 static void setTrueBranch(MachineInstr *MI, MachineBasicBlock *MBB);
217 static MachineBasicBlock *getFalseBranch(MachineBasicBlock *MBB,
221 static DebugLoc getLastDebugLocInBB(MachineBasicBlock *MBB);
222 static MachineInstr *getNormalBlockBranchInstr(MachineBasicBlock *MBB);
228 MachineInstr *getLoopendBlockBranchInstr(MachineBasicBlock *MBB);
230 static MachineInstr *getReturnInstr(MachineBasicBlock *MBB);
231 static bool isReturnBlock(MachineBasicBlock *MBB);
232 static void cloneSuccessorList(MachineBasicBlock *DstMBB,
233 MachineBasicBlock *SrcMBB);
234 static MachineBasicBlock *clone(MachineBasicBlock *MBB);
239 void replaceInstrUseOfBlockWith(MachineBasicBlock *SrcMBB,
240 MachineBasicBlock *OldMBB, MachineBasicBlock *NewBlk);
242 static void wrapup(MachineBasicBlock *MBB);
244 int patternMatch(MachineBasicBlock *MBB);
245 int patternMatchGroup(MachineBasicBlock *MBB);
246 int serialPatternMatch(MachineBasicBlock *MBB);
247 int ifPatternMatch(MachineBasicBlock *MBB);
254 bool isSameloopDetachedContbreak(MachineBasicBlock *Src1MBB,
255 MachineBasicBlock *Src2MBB);
256 int handleJumpintoIf(MachineBasicBlock *HeadMBB,
257 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
258 int handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
259 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
260 int improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
261 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
262 MachineBasicBlock **LandMBBPtr);
263 void showImproveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
264 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
265 MachineBasicBlock *LandMBB, bool Detail = false);
266 int cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
267 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB);
268 void mergeSerialBlock(MachineBasicBlock *DstMBB,
269 MachineBasicBlock *SrcMBB);
272 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
273 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB);
274 void mergeLooplandBlock(MachineBasicBlock *DstMBB,
275 MachineBasicBlock *LandMBB);
276 void mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
277 MachineBasicBlock *LandMBB);
278 void settleLoopcontBlock(MachineBasicBlock *ContingMBB,
279 MachineBasicBlock *ContMBB);
289 MachineBasicBlock *normalizeInfiniteLoopExit(MachineLoop *LoopRep);
290 void removeUnconditionalBranch(MachineBasicBlock *MBB);
300 void removeRedundantConditionalBranch(MachineBasicBlock *MBB);
302 void addDummyExitBlock(SmallVectorImpl<MachineBasicBlock *> &RetMBB);
303 void removeSuccessor(MachineBasicBlock *MBB);
304 MachineBasicBlock *cloneBlockForPredecessor(MachineBasicBlock *MBB,
305 MachineBasicBlock *PredMBB);
306 void migrateInstruction(MachineBasicBlock *SrcMBB,
307 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I);
308 void recordSccnum(MachineBasicBlock *MBB, int SCCNum);
309 void retireBlock(MachineBasicBlock *MBB);
316 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> OrderedBlks;
323 int R600MachineCFGStructurizer::getSCCNum(MachineBasicBlock *MBB) const { in getSCCNum()
330 MachineBasicBlock *R600MachineCFGStructurizer::getLoopLandInfo(MachineLoop *LoopRep) in getLoopLandInfo()
338 bool R600MachineCFGStructurizer::hasBackEdge(MachineBasicBlock *MBB) const { in hasBackEdge()
342 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in hasBackEdge()
346 bool R600MachineCFGStructurizer::isRetiredBlock(MachineBasicBlock *MBB) const { in isRetiredBlock()
353 bool R600MachineCFGStructurizer::isActiveLoophead(MachineBasicBlock *MBB) const { in isActiveLoophead()
356 MachineBasicBlock *LoopLand = getLoopLandInfo(LoopRep); in isActiveLoophead()
367 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB, in singlePathTo()
395 bool R600MachineCFGStructurizer::needMigrateBlock(MachineBasicBlock *MBB) const { in needMigrateBlock()
408 MachineBasicBlock::iterator I, MachineBasicBlock &MBB) { in reversePredicateSetter()
434 void R600MachineCFGStructurizer::insertInstrEnd(MachineBasicBlock *MBB, in insertInstrEnd()
443 MachineInstr *R600MachineCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB, in insertInstrBefore()
457 MachineBasicBlock::iterator I, int NewOpcode) { in insertInstrBefore()
459 MachineBasicBlock *MBB = OldMI->getParent(); in insertInstrBefore()
469 MachineBasicBlock::iterator I, int NewOpcode, const DebugLoc &DL) { in insertCondBranchBefore()
471 MachineBasicBlock *MBB = OldMI->getParent(); in insertCondBranchBefore()
482 MachineBasicBlock *blk, MachineBasicBlock::iterator I, int NewOpcode, in insertCondBranchBefore()
532 MachineBasicBlock *R600MachineCFGStructurizer::getTrueBranch(MachineInstr *MI) { in getTrueBranch()
537 MachineBasicBlock *MBB) { in setTrueBranch()
541 MachineBasicBlock *
542 R600MachineCFGStructurizer::getFalseBranch(MachineBasicBlock *MBB, in getFalseBranch()
545 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in getFalseBranch()
546 MachineBasicBlock::succ_iterator It = MBB->succ_begin(); in getFalseBranch()
547 MachineBasicBlock::succ_iterator Next = It; in getFalseBranch()
574 DebugLoc R600MachineCFGStructurizer::getLastDebugLocInBB(MachineBasicBlock *MBB) { in getLastDebugLocInBB()
584 MachineBasicBlock *MBB) { in getNormalBlockBranchInstr()
585 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getNormalBlockBranchInstr()
593 MachineBasicBlock *MBB) { in getLoopendBlockBranchInstr()
594 for (MachineBasicBlock::reverse_iterator It = MBB->rbegin(), E = MBB->rend(); in getLoopendBlockBranchInstr()
608 MachineInstr *R600MachineCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) { in getReturnInstr()
609 MachineBasicBlock::reverse_iterator It = MBB->rbegin(); in getReturnInstr()
618 bool R600MachineCFGStructurizer::isReturnBlock(MachineBasicBlock *MBB) { in isReturnBlock()
629 void R600MachineCFGStructurizer::cloneSuccessorList(MachineBasicBlock *DstMBB, in cloneSuccessorList()
630 MachineBasicBlock *SrcMBB) { in cloneSuccessorList()
631 for (MachineBasicBlock *Succ : SrcMBB->successors()) in cloneSuccessorList()
635 MachineBasicBlock *R600MachineCFGStructurizer::clone(MachineBasicBlock *MBB) { in clone()
637 MachineBasicBlock *NewMBB = Func->CreateMachineBasicBlock(); in clone()
645 MachineBasicBlock *SrcMBB, MachineBasicBlock *OldMBB, in replaceInstrUseOfBlockWith()
646 MachineBasicBlock *NewBlk) { in replaceInstrUseOfBlockWith()
653 void R600MachineCFGStructurizer::wrapup(MachineBasicBlock *MBB) { in wrapup()
660 MachineBasicBlock::iterator Pre = MBB->begin(); in wrapup()
661 MachineBasicBlock::iterator E = MBB->end(); in wrapup()
662 MachineBasicBlock::iterator It = Pre; in wrapup()
690 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> RetBlks; in prepare()
698 MachineBasicBlock* DummyExitBlk = normalizeInfiniteLoopExit(LoopRep); in prepare()
706 for (MachineBasicBlock *MBB : OrderedBlks) { in prepare()
735 MachineBasicBlock *MBB; in run()
746 SmallVectorImpl<MachineBasicBlock *>::const_iterator It = in run()
748 SmallVectorImpl<MachineBasicBlock *>::const_iterator E = in run()
751 SmallVectorImpl<MachineBasicBlock *>::const_iterator SccBeginIter = in run()
753 MachineBasicBlock *SccBeginMBB = nullptr; in run()
806 MachineBasicBlock *EntryMBB = in run()
852 const std::vector<MachineBasicBlock *> &SccNext = *It; in orderBlocks()
853 for (MachineBasicBlock *MBB : SccNext) { in orderBlocks()
867 int R600MachineCFGStructurizer::patternMatch(MachineBasicBlock *MBB) { in patternMatch()
882 int R600MachineCFGStructurizer::patternMatchGroup(MachineBasicBlock *MBB) { in patternMatchGroup()
890 int R600MachineCFGStructurizer::serialPatternMatch(MachineBasicBlock *MBB) { in serialPatternMatch()
894 MachineBasicBlock *childBlk = *MBB->succ_begin(); in serialPatternMatch()
903 int R600MachineCFGStructurizer::ifPatternMatch(MachineBasicBlock *MBB) { in ifPatternMatch()
916 MachineBasicBlock *TrueMBB = getTrueBranch(BranchMI); in ifPatternMatch()
919 MachineBasicBlock *FalseMBB = getFalseBranch(MBB, BranchMI); in ifPatternMatch()
922 MachineBasicBlock *LandBlk; in ifPatternMatch()
1007 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in mergeLoop()
1016 SmallPtrSet<MachineBasicBlock *, 2> ExitBlkSet; in mergeLoop()
1020 MachineBasicBlock *ExitBlk = *ExitBlks.begin(); in mergeLoop()
1023 for (auto *LB : inverse_children<MachineBasicBlock*>(LoopHeader)) in mergeLoop()
1048 MachineBasicBlock *Src1MBB, MachineBasicBlock *Src2MBB) { in isSameloopDetachedContbreak()
1052 MachineBasicBlock *&TheEntry = LLInfoMap[LoopRep]; in isSameloopDetachedContbreak()
1064 int R600MachineCFGStructurizer::handleJumpintoIf(MachineBasicBlock *HeadMBB, in handleJumpintoIf()
1065 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIf()
1075 int R600MachineCFGStructurizer::handleJumpintoIfImp(MachineBasicBlock *HeadMBB, in handleJumpintoIfImp()
1076 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) { in handleJumpintoIfImp()
1078 MachineBasicBlock *DownBlk; in handleJumpintoIfImp()
1114 MachineBasicBlock *HeadMBB, MachineBasicBlock *TrueMBB, in showImproveSimpleJumpintoIf()
1115 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB, bool Detail) { in showImproveSimpleJumpintoIf()
1156 int R600MachineCFGStructurizer::improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB, in improveSimpleJumpintoIf()
1157 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB, in improveSimpleJumpintoIf()
1158 MachineBasicBlock **LandMBBPtr) { in improveSimpleJumpintoIf()
1162 MachineBasicBlock *LandBlk = *LandMBBPtr; in improveSimpleJumpintoIf()
1274 MachineBasicBlock::iterator I = insertInstrBefore(LandBlk, R600::ENDIF); in improveSimpleJumpintoIf()
1314 for (MachineBasicBlock *MBB : LandBlk->predecessors()) in improveSimpleJumpintoIf()
1328 void R600MachineCFGStructurizer::mergeSerialBlock(MachineBasicBlock *DstMBB, in mergeSerialBlock()
1329 MachineBasicBlock *SrcMBB) { in mergeSerialBlock()
1343 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB, in mergeIfthenelseBlock()
1344 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB) { in mergeIfthenelseBlock()
1367 MachineBasicBlock::iterator I = BranchMI; in mergeIfthenelseBlock()
1398 void R600MachineCFGStructurizer::mergeLooplandBlock(MachineBasicBlock *DstBlk, in mergeLooplandBlock()
1399 MachineBasicBlock *LandMBB) { in mergeLooplandBlock()
1408 void R600MachineCFGStructurizer::mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB, in mergeLoopbreakBlock()
1409 MachineBasicBlock *LandMBB) { in mergeLoopbreakBlock()
1416 MachineBasicBlock *TrueBranch = getTrueBranch(BranchMI); in mergeLoopbreakBlock()
1417 MachineBasicBlock::iterator I = BranchMI; in mergeLoopbreakBlock()
1429 void R600MachineCFGStructurizer::settleLoopcontBlock(MachineBasicBlock *ContingMBB, in settleLoopcontBlock()
1430 MachineBasicBlock *ContMBB) { in settleLoopcontBlock()
1438 MachineBasicBlock::iterator I = MI; in settleLoopcontBlock()
1439 MachineBasicBlock *TrueBranch = getTrueBranch(MI); in settleLoopcontBlock()
1472 int R600MachineCFGStructurizer::cloneOnSideEntryTo(MachineBasicBlock *PreMBB, in cloneOnSideEntryTo()
1473 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB) { in cloneOnSideEntryTo()
1490 MachineBasicBlock *
1491 R600MachineCFGStructurizer::cloneBlockForPredecessor(MachineBasicBlock *MBB, in cloneBlockForPredecessor()
1492 MachineBasicBlock *PredMBB) { in cloneBlockForPredecessor()
1495 MachineBasicBlock *CloneMBB = clone(MBB); //clone instructions in cloneBlockForPredecessor()
1515 void R600MachineCFGStructurizer::migrateInstruction(MachineBasicBlock *SrcMBB, in migrateInstruction()
1516 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I) { in migrateInstruction()
1517 MachineBasicBlock::iterator SpliceEnd; in migrateInstruction()
1539 MachineBasicBlock *
1541 MachineBasicBlock *LoopHeader = LoopRep->getHeader(); in normalizeInfiniteLoopExit()
1542 MachineBasicBlock *LoopLatch = LoopRep->getLoopLatch(); in normalizeInfiniteLoopExit()
1551 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in normalizeInfiniteLoopExit()
1560 void R600MachineCFGStructurizer::removeUnconditionalBranch(MachineBasicBlock *MBB) { in removeUnconditionalBranch()
1573 MachineBasicBlock *MBB) { in removeRedundantConditionalBranch()
1576 MachineBasicBlock *MBB1 = *MBB->succ_begin(); in removeRedundantConditionalBranch()
1577 MachineBasicBlock *MBB2 = *std::next(MBB->succ_begin()); in removeRedundantConditionalBranch()
1590 SmallVectorImpl<MachineBasicBlock*> &RetMBB) { in addDummyExitBlock()
1591 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock(); in addDummyExitBlock()
1595 for (MachineBasicBlock *MBB : RetMBB) { in addDummyExitBlock()
1605 void R600MachineCFGStructurizer::removeSuccessor(MachineBasicBlock *MBB) { in removeSuccessor()
1610 void R600MachineCFGStructurizer::recordSccnum(MachineBasicBlock *MBB, in recordSccnum()
1618 void R600MachineCFGStructurizer::retireBlock(MachineBasicBlock *MBB) { in retireBlock()