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);
236 /// MachineBasicBlock::ReplaceUsesOfBlockWith doesn't serve the purpose
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 {
330 MachineBasicBlock *R600MachineCFGStructurizer::getLoopLandInfo(MachineLoop *LoopRep)
338 bool R600MachineCFGStructurizer::hasBackEdge(MachineBasicBlock *MBB) const {
342 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
346 bool R600MachineCFGStructurizer::isRetiredBlock(MachineBasicBlock *MBB) const {
353 bool R600MachineCFGStructurizer::isActiveLoophead(MachineBasicBlock *MBB) const {
356 MachineBasicBlock *LoopLand = getLoopLandInfo(LoopRep);
367 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
395 bool R600MachineCFGStructurizer::needMigrateBlock(MachineBasicBlock *MBB) const {
408 MachineBasicBlock::iterator I, MachineBasicBlock &MBB) {
434 void R600MachineCFGStructurizer::insertInstrEnd(MachineBasicBlock *MBB,
443 MachineInstr *R600MachineCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB,
457 MachineBasicBlock::iterator I, int NewOpcode) {
459 MachineBasicBlock *MBB = OldMI->getParent();
469 MachineBasicBlock::iterator I, int NewOpcode, const DebugLoc &DL) {
471 MachineBasicBlock *MBB = OldMI->getParent();
482 MachineBasicBlock *blk, MachineBasicBlock::iterator I, int NewOpcode,
532 MachineBasicBlock *R600MachineCFGStructurizer::getTrueBranch(MachineInstr *MI) {
537 MachineBasicBlock *MBB) {
541 MachineBasicBlock *
542 R600MachineCFGStructurizer::getFalseBranch(MachineBasicBlock *MBB,
545 MachineBasicBlock *TrueBranch = getTrueBranch(MI);
546 MachineBasicBlock::succ_iterator It = MBB->succ_begin();
547 MachineBasicBlock::succ_iterator Next = It;
574 DebugLoc R600MachineCFGStructurizer::getLastDebugLocInBB(MachineBasicBlock *MBB) {
575 //get DebugLoc from the first MachineBasicBlock instruction with debug info
584 MachineBasicBlock *MBB) {
585 MachineBasicBlock::reverse_iterator It = MBB->rbegin();
593 MachineBasicBlock *MBB) {
594 for (MachineBasicBlock::reverse_iterator It = MBB->rbegin(), E = MBB->rend();
608 MachineInstr *R600MachineCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) {
609 MachineBasicBlock::reverse_iterator It = MBB->rbegin();
618 bool R600MachineCFGStructurizer::isReturnBlock(MachineBasicBlock *MBB) {
629 void R600MachineCFGStructurizer::cloneSuccessorList(MachineBasicBlock *DstMBB,
630 MachineBasicBlock *SrcMBB) {
631 for (MachineBasicBlock *Succ : SrcMBB->successors())
635 MachineBasicBlock *R600MachineCFGStructurizer::clone(MachineBasicBlock *MBB) {
637 MachineBasicBlock *NewMBB = Func->CreateMachineBasicBlock();
645 MachineBasicBlock *SrcMBB, MachineBasicBlock *OldMBB,
646 MachineBasicBlock *NewBlk) {
653 void R600MachineCFGStructurizer::wrapup(MachineBasicBlock *MBB) {
660 MachineBasicBlock::iterator Pre = MBB->begin();
661 MachineBasicBlock::iterator E = MBB->end();
662 MachineBasicBlock::iterator It = Pre;
690 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> RetBlks;
698 MachineBasicBlock* DummyExitBlk = normalizeInfiniteLoopExit(LoopRep);
706 for (MachineBasicBlock *MBB : OrderedBlks) {
735 MachineBasicBlock *MBB;
746 SmallVectorImpl<MachineBasicBlock *>::const_iterator It =
748 SmallVectorImpl<MachineBasicBlock *>::const_iterator E =
751 SmallVectorImpl<MachineBasicBlock *>::const_iterator SccBeginIter =
753 MachineBasicBlock *SccBeginMBB = nullptr;
806 MachineBasicBlock *EntryMBB =
852 const std::vector<MachineBasicBlock *> &SccNext = *It;
853 for (MachineBasicBlock *MBB : SccNext) {
867 int R600MachineCFGStructurizer::patternMatch(MachineBasicBlock *MBB) {
882 int R600MachineCFGStructurizer::patternMatchGroup(MachineBasicBlock *MBB) {
890 int R600MachineCFGStructurizer::serialPatternMatch(MachineBasicBlock *MBB) {
894 MachineBasicBlock *childBlk = *MBB->succ_begin();
903 int R600MachineCFGStructurizer::ifPatternMatch(MachineBasicBlock *MBB) {
916 MachineBasicBlock *TrueMBB = getTrueBranch(BranchMI);
919 MachineBasicBlock *FalseMBB = getFalseBranch(MBB, BranchMI);
922 MachineBasicBlock *LandBlk;
1007 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
1016 SmallPtrSet<MachineBasicBlock *, 2> ExitBlkSet;
1017 for (MachineBasicBlock *MBB : ExitBlks)
1020 MachineBasicBlock *ExitBlk = *ExitBlks.begin();
1023 for (auto *LB : inverse_children<MachineBasicBlock*>(LoopHeader))
1027 for (MachineBasicBlock *MBB : ExitingMBBs)
1029 for (MachineBasicBlock *MBB : LatchBlks)
1048 MachineBasicBlock *Src1MBB, MachineBasicBlock *Src2MBB) {
1052 MachineBasicBlock *&TheEntry = LLInfoMap[LoopRep];
1064 int R600MachineCFGStructurizer::handleJumpintoIf(MachineBasicBlock *HeadMBB,
1065 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) {
1075 int R600MachineCFGStructurizer::handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
1076 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) {
1078 MachineBasicBlock *DownBlk;
1114 MachineBasicBlock *HeadMBB, MachineBasicBlock *TrueMBB,
1115 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB, bool Detail) {
1156 int R600MachineCFGStructurizer::improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
1157 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
1158 MachineBasicBlock **LandMBBPtr) {
1162 MachineBasicBlock *LandBlk = *LandMBBPtr;
1274 MachineBasicBlock::iterator I = insertInstrBefore(LandBlk, R600::ENDIF);
1314 for (MachineBasicBlock *MBB : LandBlk->predecessors())
1328 void R600MachineCFGStructurizer::mergeSerialBlock(MachineBasicBlock *DstMBB,
1329 MachineBasicBlock *SrcMBB) {
1343 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
1344 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB) {
1367 MachineBasicBlock::iterator I = BranchMI;
1398 void R600MachineCFGStructurizer::mergeLooplandBlock(MachineBasicBlock *DstBlk,
1399 MachineBasicBlock *LandMBB) {
1408 void R600MachineCFGStructurizer::mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
1409 MachineBasicBlock *LandMBB) {
1416 MachineBasicBlock *TrueBranch = getTrueBranch(BranchMI);
1417 MachineBasicBlock::iterator I = BranchMI;
1429 void R600MachineCFGStructurizer::settleLoopcontBlock(MachineBasicBlock *ContingMBB,
1430 MachineBasicBlock *ContMBB) {
1438 MachineBasicBlock::iterator I = MI;
1439 MachineBasicBlock *TrueBranch = getTrueBranch(MI);
1472 int R600MachineCFGStructurizer::cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
1473 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB) {
1490 MachineBasicBlock *
1491 R600MachineCFGStructurizer::cloneBlockForPredecessor(MachineBasicBlock *MBB,
1492 MachineBasicBlock *PredMBB) {
1495 MachineBasicBlock *CloneMBB = clone(MBB); //clone instructions
1515 void R600MachineCFGStructurizer::migrateInstruction(MachineBasicBlock *SrcMBB,
1516 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I) {
1517 MachineBasicBlock::iterator SpliceEnd;
1539 MachineBasicBlock *
1541 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
1542 MachineBasicBlock *LoopLatch = LoopRep->getLoopLatch();
1551 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock();
1560 void R600MachineCFGStructurizer::removeUnconditionalBranch(MachineBasicBlock *MBB) {
1573 MachineBasicBlock *MBB) {
1576 MachineBasicBlock *MBB1 = *MBB->succ_begin();
1577 MachineBasicBlock *MBB2 = *std::next(MBB->succ_begin());
1590 SmallVectorImpl<MachineBasicBlock*> &RetMBB) {
1591 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock();
1595 for (MachineBasicBlock *MBB : RetMBB) {
1605 void R600MachineCFGStructurizer::removeSuccessor(MachineBasicBlock *MBB) {
1610 void R600MachineCFGStructurizer::recordSccnum(MachineBasicBlock *MBB,
1618 void R600MachineCFGStructurizer::retireBlock(MachineBasicBlock *MBB) {