Home | History | Annotate | Download | only in AMDGPU

Lines Matching refs:MachineBasicBlock

127   typedef SmallVector<MachineBasicBlock *, 32> MBBVector;
128 typedef std::map<MachineBasicBlock *, BlockInformation *> MBBInfoMap;
129 typedef std::map<MachineLoop *, MachineBasicBlock *> LoopLandInfoMap;
213 int getSCCNum(MachineBasicBlock *MBB) const;
214 MachineBasicBlock *getLoopLandInfo(MachineLoop *LoopRep) const;
215 bool hasBackEdge(MachineBasicBlock *MBB) const;
217 bool isRetiredBlock(MachineBasicBlock *MBB) const;
218 bool isActiveLoophead(MachineBasicBlock *MBB) const;
219 PathToKind singlePathTo(MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
223 bool needMigrateBlock(MachineBasicBlock *MBB) const;
226 void reversePredicateSetter(MachineBasicBlock::iterator I);
231 void insertInstrEnd(MachineBasicBlock *MBB, int NewOpcode,
233 MachineInstr *insertInstrBefore(MachineBasicBlock *MBB, int NewOpcode,
235 MachineInstr *insertInstrBefore(MachineBasicBlock::iterator I, int NewOpcode);
236 void insertCondBranchBefore(MachineBasicBlock::iterator I, int NewOpcode,
238 void insertCondBranchBefore(MachineBasicBlock *MBB,
239 MachineBasicBlock::iterator I, int NewOpcode, int RegNum,
241 void insertCondBranchEnd(MachineBasicBlock *MBB, int NewOpcode, int RegNum);
246 static MachineBasicBlock *getTrueBranch(MachineInstr *MI);
247 static void setTrueBranch(MachineInstr *MI, MachineBasicBlock *MBB);
248 static MachineBasicBlock *getFalseBranch(MachineBasicBlock *MBB,
252 static DebugLoc getLastDebugLocInBB(MachineBasicBlock *MBB);
253 static MachineInstr *getNormalBlockBranchInstr(MachineBasicBlock *MBB);
258 MachineInstr *getLoopendBlockBranchInstr(MachineBasicBlock *MBB);
259 static MachineInstr *getReturnInstr(MachineBasicBlock *MBB);
260 static MachineInstr *getContinueInstr(MachineBasicBlock *MBB);
261 static bool isReturnBlock(MachineBasicBlock *MBB);
262 static void cloneSuccessorList(MachineBasicBlock *DstMBB,
263 MachineBasicBlock *SrcMBB) ;
264 static MachineBasicBlock *clone(MachineBasicBlock *MBB);
265 /// MachineBasicBlock::ReplaceUsesOfBlockWith doesn't serve the purpose
268 void replaceInstrUseOfBlockWith(MachineBasicBlock *SrcMBB,
269 MachineBasicBlock *OldMBB, MachineBasicBlock *NewBlk);
270 static void wrapup(MachineBasicBlock *MBB);
273 int patternMatch(MachineBasicBlock *MBB);
274 int patternMatchGroup(MachineBasicBlock *MBB);
275 int serialPatternMatch(MachineBasicBlock *MBB);
276 int ifPatternMatch(MachineBasicBlock *MBB);
279 int loopcontPatternMatch(MachineLoop *LoopRep, MachineBasicBlock *LoopHeader);
281 void handleLoopcontBlock(MachineBasicBlock *ContingMBB,
282 MachineLoop *ContingLoop, MachineBasicBlock *ContMBB,
287 bool isSameloopDetachedContbreak(MachineBasicBlock *Src1MBB,
288 MachineBasicBlock *Src2MBB);
289 int handleJumpintoIf(MachineBasicBlock *HeadMBB,
290 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
291 int handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
292 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB);
293 int improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
294 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
295 MachineBasicBlock **LandMBBPtr);
296 void showImproveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
297 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
298 MachineBasicBlock *LandMBB, bool Detail = false);
299 int cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
300 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB);
301 void mergeSerialBlock(MachineBasicBlock *DstMBB,
302 MachineBasicBlock *SrcMBB);
305 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
306 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB);
307 void mergeLooplandBlock(MachineBasicBlock *DstMBB,
308 MachineBasicBlock *LandMBB);
309 void mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
310 MachineBasicBlock *LandMBB);
311 void settleLoopcontBlock(MachineBasicBlock *ContingMBB,
312 MachineBasicBlock *ContMBB);
321 MachineBasicBlock *normalizeInfiniteLoopExit(MachineLoop *LoopRep);
322 void removeUnconditionalBranch(MachineBasicBlock *MBB);
331 void removeRedundantConditionalBranch(MachineBasicBlock *MBB);
332 void addDummyExitBlock(SmallVectorImpl<MachineBasicBlock *> &RetMBB);
333 void removeSuccessor(MachineBasicBlock *MBB);
334 MachineBasicBlock *cloneBlockForPredecessor(MachineBasicBlock *MBB,
335 MachineBasicBlock *PredMBB);
336 void migrateInstruction(MachineBasicBlock *SrcMBB,
337 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I);
338 void recordSccnum(MachineBasicBlock *MBB, int SCCNum);
339 void retireBlock(MachineBasicBlock *MBB);
340 void setLoopLandBlock(MachineLoop *LoopRep, MachineBasicBlock *MBB = nullptr);
342 MachineBasicBlock *findNearestCommonPostDom(std::set<MachineBasicBlock *>&);
345 MachineBasicBlock *findNearestCommonPostDom(MachineBasicBlock *MBB1,
346 MachineBasicBlock *MBB2);
353 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> OrderedBlks;
356 int AMDGPUCFGStructurizer::getSCCNum(MachineBasicBlock *MBB) const {
363 MachineBasicBlock *AMDGPUCFGStructurizer::getLoopLandInfo(MachineLoop *LoopRep)
371 bool AMDGPUCFGStructurizer::hasBackEdge(MachineBasicBlock *MBB) const {
375 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
383 bool AMDGPUCFGStructurizer::isRetiredBlock(MachineBasicBlock *MBB) const {
390 bool AMDGPUCFGStructurizer::isActiveLoophead(MachineBasicBlock *MBB) const {
393 MachineBasicBlock *LoopLand = getLoopLandInfo(LoopRep);
403 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB,
431 bool AMDGPUCFGStructurizer::needMigrateBlock(MachineBasicBlock *MBB) const {
444 MachineBasicBlock::iterator I) {
471 void AMDGPUCFGStructurizer::insertInstrEnd(MachineBasicBlock *MBB,
480 MachineInstr *AMDGPUCFGStructurizer::insertInstrBefore(MachineBasicBlock *MBB,
493 MachineBasicBlock::iterator I, int NewOpcode) {
495 MachineBasicBlock *MBB = OldMI->getParent();
505 MachineBasicBlock::iterator I, int NewOpcode, DebugLoc DL) {
507 MachineBasicBlock *MBB = OldMI->getParent();
517 void AMDGPUCFGStructurizer::insertCondBranchBefore(MachineBasicBlock *blk,
518 MachineBasicBlock::iterator I, int NewOpcode, int RegNum,
528 void AMDGPUCFGStructurizer::insertCondBranchEnd(MachineBasicBlock *MBB,
578 MachineBasicBlock *AMDGPUCFGStructurizer::getTrueBranch(MachineInstr *MI) {
583 MachineBasicBlock *MBB) {
587 MachineBasicBlock *
588 AMDGPUCFGStructurizer::getFalseBranch(MachineBasicBlock *MBB,
591 MachineBasicBlock *TrueBranch = getTrueBranch(MI);
592 MachineBasicBlock::succ_iterator It = MBB->succ_begin();
593 MachineBasicBlock::succ_iterator Next = It;
620 DebugLoc AMDGPUCFGStructurizer::getLastDebugLocInBB(MachineBasicBlock *MBB) {
621 //get DebugLoc from the first MachineBasicBlock instruction with debug info
623 for (MachineBasicBlock::iterator It = MBB->begin(); It != MBB->end();
633 MachineBasicBlock *MBB) {
634 MachineBasicBlock::reverse_iterator It = MBB->rbegin();
642 MachineBasicBlock *MBB) {
643 for (MachineBasicBlock::reverse_iterator It = MBB->rbegin(), E = MBB->rend();
657 MachineInstr *AMDGPUCFGStructurizer::getReturnInstr(MachineBasicBlock *MBB) {
658 MachineBasicBlock::reverse_iterator It = MBB->rbegin();
667 MachineInstr *AMDGPUCFGStructurizer::getContinueInstr(MachineBasicBlock *MBB) {
668 MachineBasicBlock::reverse_iterator It = MBB->rbegin();
677 bool AMDGPUCFGStructurizer::isReturnBlock(MachineBasicBlock *MBB) {
689 void AMDGPUCFGStructurizer::cloneSuccessorList(MachineBasicBlock *DstMBB,
690 MachineBasicBlock *SrcMBB) {
691 for (MachineBasicBlock::succ_iterator It = SrcMBB->succ_begin(),
696 MachineBasicBlock *AMDGPUCFGStructurizer::clone(MachineBasicBlock *MBB) {
698 MachineBasicBlock *NewMBB = Func->CreateMachineBasicBlock();
700 for (MachineBasicBlock::iterator It = MBB->begin(), E = MBB->end();
709 MachineBasicBlock *SrcMBB, MachineBasicBlock *OldMBB,
710 MachineBasicBlock *NewBlk) {
717 void AMDGPUCFGStructurizer::wrapup(MachineBasicBlock *MBB) {
724 MachineBasicBlock::iterator Pre = MBB->begin();
725 MachineBasicBlock::iterator E = MBB->end();
726 MachineBasicBlock::iterator It = Pre;
756 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> RetBlks;
766 MachineBasicBlock* DummyExitBlk = normalizeInfiniteLoopExit(LoopRep);
774 for (SmallVectorImpl<MachineBasicBlock *>::const_iterator
776 MachineBasicBlock *MBB = *It;
806 MachineBasicBlock *MBB;
818 SmallVectorImpl<MachineBasicBlock *>::const_iterator It =
820 SmallVectorImpl<MachineBasicBlock *>::const_iterator E =
823 SmallVectorImpl<MachineBasicBlock *>::const_iterator SccBeginIter =
825 MachineBasicBlock *SccBeginMBB = nullptr;
883 MachineBasicBlock *EntryMBB =
936 MachineBasicBlock *MBB;
939 const std::vector<MachineBasicBlock *> &SccNext = *It;
940 for (std::vector<MachineBasicBlock *>::const_iterator
953 MachineBasicBlock *MBB = &(*It);
960 int AMDGPUCFGStructurizer::patternMatch(MachineBasicBlock *MBB) {
979 int AMDGPUCFGStructurizer::patternMatchGroup(MachineBasicBlock *MBB) {
988 int AMDGPUCFGStructurizer::serialPatternMatch(MachineBasicBlock *MBB) {
992 MachineBasicBlock *childBlk = *MBB->succ_begin();
1001 int AMDGPUCFGStructurizer::ifPatternMatch(MachineBasicBlock *MBB) {
1014 MachineBasicBlock *TrueMBB = getTrueBranch(BranchMI);
1017 MachineBasicBlock *FalseMBB = getFalseBranch(MBB, BranchMI);
1020 MachineBasicBlock *LandBlk;
1105 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
1113 SmallPtrSet<MachineBasicBlock *, 2> ExitBlkSet;
1117 MachineBasicBlock *ExitBlk = *ExitBlks.begin();
1120 typedef GraphTraits<Inverse<MachineBasicBlock*> > InvMBBTraits;
1149 MachineBasicBlock *LoopHeader) {
1151 SmallVector<MachineBasicBlock *, DEFAULT_VEC_SLOTS> ContMBB;
1152 typedef GraphTraits<Inverse<MachineBasicBlock *> > GTIM;
1156 MachineBasicBlock *MBB = *It;
1165 for (SmallVectorImpl<MachineBasicBlock *>::iterator It = ContMBB.begin(),
1177 MachineBasicBlock *Src1MBB, MachineBasicBlock *Src2MBB) {
1181 MachineBasicBlock *&TheEntry = LLInfoMap[LoopRep];
1195 int AMDGPUCFGStructurizer::handleJumpintoIf(MachineBasicBlock *HeadMBB,
1196 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) {
1207 int AMDGPUCFGStructurizer::handleJumpintoIfImp(MachineBasicBlock *HeadMBB,
1208 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB) {
1210 MachineBasicBlock *DownBlk;
1253 MachineBasicBlock *HeadMBB, MachineBasicBlock *TrueMBB,
1254 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB, bool Detail) {
1294 int AMDGPUCFGStructurizer::improveSimpleJumpintoIf(MachineBasicBlock *HeadMBB,
1295 MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB,
1296 MachineBasicBlock **LandMBBPtr) {
1300 MachineBasicBlock *LandBlk = *LandMBBPtr;
1413 MachineBasicBlock::iterator I = insertInstrBefore(LandBlk, AMDGPU::ENDIF);
1453 for (MachineBasicBlock::pred_iterator PI = LandBlk->pred_begin(),
1455 MachineBasicBlock *MBB = *PI;
1471 void AMDGPUCFGStructurizer::handleLoopcontBlock(MachineBasicBlock *ContingMBB,
1472 MachineLoop *ContingLoop, MachineBasicBlock *ContMBB,
1482 void AMDGPUCFGStructurizer::mergeSerialBlock(MachineBasicBlock *DstMBB,
1483 MachineBasicBlock *SrcMBB) {
1499 MachineBasicBlock *MBB, MachineBasicBlock *TrueMBB,
1500 MachineBasicBlock *FalseMBB, MachineBasicBlock *LandMBB) {
1534 MachineBasicBlock::iterator I = BranchMI;
1566 void AMDGPUCFGStructurizer::mergeLooplandBlock(MachineBasicBlock *DstBlk,
1567 MachineBasicBlock *LandMBB) {
1577 void AMDGPUCFGStructurizer::mergeLoopbreakBlock(MachineBasicBlock *ExitingMBB,
1578 MachineBasicBlock *LandMBB) {
1584 MachineBasicBlock *TrueBranch = getTrueBranch(BranchMI);
1585 MachineBasicBlock::iterator I = BranchMI;
1597 void AMDGPUCFGStructurizer::settleLoopcontBlock(MachineBasicBlock *ContingMBB,
1598 MachineBasicBlock *ContMBB) {
1606 MachineBasicBlock::iterator I = MI;
1607 MachineBasicBlock *TrueBranch = getTrueBranch(MI);
1640 int AMDGPUCFGStructurizer::cloneOnSideEntryTo(MachineBasicBlock *PreMBB,
1641 MachineBasicBlock *SrcMBB, MachineBasicBlock *DstMBB) {
1658 MachineBasicBlock *
1659 AMDGPUCFGStructurizer::cloneBlockForPredecessor(MachineBasicBlock *MBB,
1660 MachineBasicBlock *PredMBB) {
1664 MachineBasicBlock *CloneMBB = clone(MBB); //clone instructions
1685 void AMDGPUCFGStructurizer::migrateInstruction(MachineBasicBlock *SrcMBB,
1686 MachineBasicBlock *DstMBB, MachineBasicBlock::iterator I) {
1687 MachineBasicBlock::iterator SpliceEnd;
1713 MachineBasicBlock *
1715 MachineBasicBlock *LoopHeader = LoopRep->getHeader();
1716 MachineBasicBlock *LoopLatch = LoopRep->getLoopLatch();
1725 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock();
1734 void AMDGPUCFGStructurizer::removeUnconditionalBranch(MachineBasicBlock *MBB) {
1747 MachineBasicBlock *MBB) {
1750 MachineBasicBlock *MBB1 = *MBB->succ_begin();
1751 MachineBasicBlock *MBB2 = *std::next(MBB->succ_begin());
1764 SmallVectorImpl<MachineBasicBlock*> &RetMBB) {
1765 MachineBasicBlock *DummyExitBlk = FuncRep->CreateMachineBasicBlock();
1769 for (SmallVectorImpl<MachineBasicBlock *>::iterator It = RetMBB.begin(),
1771 MachineBasicBlock *MBB = *It;
1784 void AMDGPUCFGStructurizer::removeSuccessor(MachineBasicBlock *MBB) {
1789 void AMDGPUCFGStructurizer::recordSccnum(MachineBasicBlock *MBB,
1797 void AMDGPUCFGStructurizer::retireBlock(MachineBasicBlock *MBB) {
1813 MachineBasicBlock *MBB) {
1814 MachineBasicBlock *&TheEntry = LLInfoMap[loopRep];
1828 MachineBasicBlock *
1829 AMDGPUCFGStructurizer::findNearestCommonPostDom(MachineBasicBlock *MBB1,
1830 MachineBasicBlock *MBB2) {
1859 MachineBasicBlock *
1861 std::set<MachineBasicBlock *> &MBBs) {
1862 MachineBasicBlock *CommonDom;
1863 std::set<MachineBasicBlock *>::const_iterator It = MBBs.begin();
1864 std::set<MachineBasicBlock *>::const_iterator E = MBBs.end();
1866 MachineBasicBlock *MBB = *It;