Lines Matching refs:MachineBasicBlock

57   using PHISourceT = std::pair<unsigned, MachineBasicBlock *>;
73 MachineBasicBlock *SourceMBB);
76 MachineBasicBlock *SourceMBB);
79 MachineBasicBlock *SourceMBB);
82 bool findSourcesFromMBB(MachineBasicBlock *SourceMBB,
88 MachineBasicBlock *SourceMBB);
90 MachineBasicBlock *SourceMBB = nullptr);
91 bool findDest(unsigned SourceReg, MachineBasicBlock *SourceMBB,
93 bool isSource(unsigned Reg, MachineBasicBlock *SourceMBB = nullptr);
146 MachineBasicBlock *SourceMBB) { in phiInfoElementAddSource()
162 MachineBasicBlock *SourceMBB) { in phiInfoElementRemoveSource()
189 MachineBasicBlock *SourceMBB) { in findPHIInfoElementFromSource()
201 bool PHILinearize::findSourcesFromMBB(MachineBasicBlock *SourceMBB, in findSourcesFromMBB()
236 MachineBasicBlock *SourceMBB) { in addSource()
241 MachineBasicBlock *SourceMBB) { in removeSource()
245 bool PHILinearize::findDest(unsigned SourceReg, MachineBasicBlock *SourceMBB, in findDest()
256 bool PHILinearize::isSource(unsigned Reg, MachineBasicBlock *SourceMBB) { in isSource()
308 static MachineBasicBlock *getPHIPred(MachineInstr &PHI, unsigned Index) { in getPHIPred()
314 MachineBasicBlock *NewPred) { in setPhiPred()
335 MachineBasicBlock *Entry;
338 MachineBasicBlock *Exit;
340 SmallPtrSet<MachineBasicBlock *, 1> MBBs;
345 void storeLiveOutReg(MachineBasicBlock *MBB, unsigned Reg,
355 void storeMBBLiveOuts(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
359 void storeLiveOuts(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
368 LinearizedRegion(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
414 void setEntry(MachineBasicBlock *NewEntry);
416 MachineBasicBlock *getEntry();
418 void setExit(MachineBasicBlock *NewExit);
420 MachineBasicBlock *getExit();
422 void addMBB(MachineBasicBlock *MBB);
426 bool contains(MachineBasicBlock *MBB);
469 static MachineBasicBlock *
488 MachineBasicBlock *MBB;
491 MBBMRT(MachineBasicBlock *BB) : MBB(BB) { in MBBMRT()
499 MachineBasicBlock *getMBB() { return MBB; } in getMBB()
513 MachineBasicBlock *Succ = nullptr;
571 MachineBasicBlock *getEntry() { in getEntry()
577 MachineBasicBlock *getExit() { in getExit()
583 void setSucc(MachineBasicBlock *MBB) { Succ = MBB; } in setSucc()
585 MachineBasicBlock *getSucc() { return Succ; } in getSucc()
587 bool contains(MachineBasicBlock *MBB) { in contains()
623 MachineBasicBlock *
627 MachineBasicBlock *ExitMBB = &MFI; in initializeMRT()
647 MachineBasicBlock *Exit = initializeMRT(MF, RegionInfo, RegionMap); in buildMRT()
655 MachineBasicBlock *MBB = &(*MBBI); in buildMRT()
693 void LinearizedRegion::storeLiveOutReg(MachineBasicBlock *MBB, unsigned Reg, in storeLiveOutReg()
717 for (MachineBasicBlock::instr_iterator in storeLiveOutReg()
751 void LinearizedRegion::storeLiveOuts(MachineBasicBlock *MBB, in storeLiveOuts()
770 for (MachineBasicBlock::succ_iterator SI = MBB->succ_begin(), in storeLiveOuts()
794 void LinearizedRegion::storeMBBLiveOuts(MachineBasicBlock *MBB, in storeMBBLiveOuts()
818 MachineBasicBlock *Exit = Region->getSucc(); in storeLiveOuts()
986 void LinearizedRegion::setEntry(MachineBasicBlock *NewEntry) { in setEntry()
990 MachineBasicBlock *LinearizedRegion::getEntry() { return Entry; } in getEntry()
992 void LinearizedRegion::setExit(MachineBasicBlock *NewExit) { Exit = NewExit; } in setExit()
994 MachineBasicBlock *LinearizedRegion::getExit() { return Exit; } in getExit()
996 void LinearizedRegion::addMBB(MachineBasicBlock *MBB) { MBBs.insert(MBB); } in addMBB()
1004 bool LinearizedRegion::contains(MachineBasicBlock *MBB) { in contains()
1021 MachineBasicBlock *MBB = MBBI; in removeFalseRegisterKills()
1067 LinearizedRegion::LinearizedRegion(MachineBasicBlock *MBB, in LinearizedRegion()
1094 DenseMap<MachineBasicBlock *, MachineBasicBlock *> FallthroughMap;
1111 void extractKilledPHIs(MachineBasicBlock *MBB);
1117 MachineBasicBlock *SourceMBB,
1121 MachineBasicBlock *LastMerge,
1124 MachineBasicBlock *IfMBB,
1130 void rewriteRegionExitPHI(RegionMRT *Region, MachineBasicBlock *LastMerge,
1133 void rewriteRegionExitPHIs(RegionMRT *Region, MachineBasicBlock *LastMerge,
1135 void rewriteRegionEntryPHI(LinearizedRegion *Region, MachineBasicBlock *IfMBB,
1138 MachineBasicBlock *IfMBB);
1144 void eliminateDeadBranchOperands(MachineBasicBlock::instr_iterator &II);
1146 void insertUnconditionalBranch(MachineBasicBlock *MBB,
1147 MachineBasicBlock *Dest,
1150 MachineBasicBlock *createLinearizedExitBlock(RegionMRT *Region);
1152 void insertMergePHI(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1153 MachineBasicBlock *MergeBB, unsigned DestRegister,
1157 MachineBasicBlock *createIfBlock(MachineBasicBlock *MergeBB,
1158 MachineBasicBlock *CodeBBStart,
1159 MachineBasicBlock *CodeBBEnd,
1160 MachineBasicBlock *SelectBB, unsigned IfReg,
1163 void prunePHIInfo(MachineBasicBlock *MBB);
1167 void resolvePHIInfos(MachineBasicBlock *FunctionEntry);
1171 MachineBasicBlock *createIfRegion(MachineBasicBlock *MergeBB,
1172 MachineBasicBlock *CodeBB,
1177 MachineBasicBlock *
1178 createIfRegion(MachineBasicBlock *MergeMBB, LinearizedRegion *InnerRegion,
1179 LinearizedRegion *CurrentRegion, MachineBasicBlock *SelectBB,
1183 void rewriteCodeBBTerminator(MachineBasicBlock *CodeBB,
1184 MachineBasicBlock *MergeBB,
1188 void insertChainedPHI(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1189 MachineBasicBlock *MergeBB,
1192 bool containsDef(MachineBasicBlock *MBB, LinearizedRegion *InnerRegion,
1194 void rewriteLiveOutRegs(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1195 MachineBasicBlock *MergeBB,
1199 void splitLoopPHI(MachineInstr &PHI, MachineBasicBlock *Entry,
1200 MachineBasicBlock *EntrySucc, LinearizedRegion *LRegion);
1201 void splitLoopPHIs(MachineBasicBlock *Entry, MachineBasicBlock *EntrySucc,
1204 MachineBasicBlock *splitExit(LinearizedRegion *LRegion);
1206 MachineBasicBlock *splitEntry(LinearizedRegion *LRegion);
1248 MachineBasicBlock *Entry = Region->getEntry(); in regionIsSimpleIf()
1249 MachineBasicBlock *Succ = Region->getSucc(); in regionIsSimpleIf()
1257 for (MachineBasicBlock::const_succ_iterator SI = Entry->succ_begin(), in regionIsSimpleIf()
1260 MachineBasicBlock *Current = *SI; in regionIsSimpleIf()
1274 MachineBasicBlock *Entry = Region->getEntry(); in transformSimpleIfRegion()
1275 MachineBasicBlock *Exit = Region->getExit(); in transformSimpleIfRegion()
1279 static void fixMBBTerminator(MachineBasicBlock *MBB) { in fixMBBTerminator()
1293 MachineBasicBlock *InternalSucc = nullptr; in fixRegionTerminator()
1294 MachineBasicBlock *ExternalSucc = nullptr; in fixRegionTerminator()
1298 SmallPtrSet<MachineBasicBlock *, 2> Successors; in fixRegionTerminator()
1299 for (MachineBasicBlock::const_succ_iterator SI = Exit->succ_begin(), in fixRegionTerminator()
1302 MachineBasicBlock *Succ = *SI; in fixRegionTerminator()
1357 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1369 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1381 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHINonRegionIndices()
1413 void AMDGPUMachineCFGStructurizer::extractKilledPHIs(MachineBasicBlock *MBB) { in extractKilledPHIs()
1417 for (MachineBasicBlock::instr_iterator I = MBB->instr_begin(), in extractKilledPHIs()
1453 MachineBasicBlock *SourceMBB, in shrinkPHI()
1482 MachineBasicBlock *MBB = PHI.getParent(); in shrinkPHI()
1498 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in shrinkPHI()
1511 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *LastMerge, in replacePHI()
1527 MachineBasicBlock *MBB = PHI.getParent(); in replacePHI()
1540 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replacePHI()
1554 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *IfMBB, in replaceEntryPHI()
1576 MachineBasicBlock *MBB = PHI.getParent(); in replaceEntryPHI()
1590 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replaceEntryPHI()
1611 MachineBasicBlock *DefMBB = getDefInstr(Reg)->getParent(); in replaceLiveOutRegs()
1633 MachineBasicBlock *LastMerge, in rewriteRegionExitPHI()
1646 MachineBasicBlock *IfMBB, in rewriteRegionEntryPHI()
1655 static void collectPHIs(MachineBasicBlock *MBB, in collectPHIs()
1665 MachineBasicBlock *LastMerge, in rewriteRegionExitPHIs()
1680 MachineBasicBlock *IfMBB) { in rewriteRegionEntryPHIs()
1691 void AMDGPUMachineCFGStructurizer::insertUnconditionalBranch(MachineBasicBlock *MBB, in insertUnconditionalBranch()
1692 MachineBasicBlock *Dest, in insertUnconditionalBranch()
1696 MachineBasicBlock::instr_iterator Terminator = MBB->getFirstInstrTerminator(); in insertUnconditionalBranch()
1706 static MachineBasicBlock *getSingleExitNode(MachineFunction &MF) { in getSingleExitNode()
1707 MachineBasicBlock *result = nullptr; in getSingleExitNode()
1725 MachineBasicBlock *
1735 MachineBasicBlock *LastMerge = MF->CreateMachineBasicBlock(); in createLinearizedExitBlock()
1750 void AMDGPUMachineCFGStructurizer::insertMergePHI(MachineBasicBlock *IfBB, in insertMergePHI()
1751 MachineBasicBlock *CodeBB, in insertMergePHI()
1752 MachineBasicBlock *MergeBB, in insertMergePHI()
1780 static void removeExternalCFGSuccessors(MachineBasicBlock *MBB) { in removeExternalCFGSuccessors()
1781 for (MachineBasicBlock::succ_iterator PI = MBB->succ_begin(), in removeExternalCFGSuccessors()
1790 static void removeExternalCFGEdges(MachineBasicBlock *StartMBB, in removeExternalCFGEdges()
1791 MachineBasicBlock *EndMBB) { in removeExternalCFGEdges()
1796 DenseSet<std::pair<MachineBasicBlock *, MachineBasicBlock *>> Succs; in removeExternalCFGEdges()
1799 MachineBasicBlock *StartMBBSucc = *(StartMBB->succ_begin()); in removeExternalCFGEdges()
1800 for (MachineBasicBlock::succ_iterator PI = EndMBB->succ_begin(), in removeExternalCFGEdges()
1808 std::pair<MachineBasicBlock *, MachineBasicBlock *>(EndMBB, *PI)); in removeExternalCFGEdges()
1813 for (MachineBasicBlock::pred_iterator PI = StartMBB->pred_begin(), in removeExternalCFGEdges()
1818 std::pair<MachineBasicBlock *, MachineBasicBlock *>(*PI, StartMBB)); in removeExternalCFGEdges()
1823 std::pair<MachineBasicBlock *, MachineBasicBlock *> Edge = SI; in removeExternalCFGEdges()
1830 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfBlock( in createIfBlock()
1831 MachineBasicBlock *MergeBB, MachineBasicBlock *CodeBBStart, in createIfBlock()
1832 MachineBasicBlock *CodeBBEnd, MachineBasicBlock *SelectBB, unsigned IfReg, in createIfBlock()
1835 MachineBasicBlock *IfBB = MF->CreateMachineBasicBlock(); in createIfBlock()
1838 for (MachineBasicBlock::pred_iterator PI = CodeBBStart->pred_begin(), in createIfBlock()
1842 MachineBasicBlock *Pred = (*PI); in createIfBlock()
1867 MachineBasicBlock *SinglePred = in createIfBlock()
1900 void AMDGPUMachineCFGStructurizer::rewriteCodeBBTerminator(MachineBasicBlock *CodeBB, in rewriteCodeBBTerminator()
1901 MachineBasicBlock *MergeBB, in rewriteCodeBBTerminator()
1903 MachineBasicBlock *TrueBB = nullptr; in rewriteCodeBBTerminator()
1904 MachineBasicBlock *FalseBB = nullptr; in rewriteCodeBBTerminator()
1906 MachineBasicBlock *FallthroughBB = FallthroughMap[CodeBB]; in rewriteCodeBBTerminator()
1967 void AMDGPUMachineCFGStructurizer::insertChainedPHI(MachineBasicBlock *IfBB, in insertChainedPHI()
1968 MachineBasicBlock *CodeBB, in insertChainedPHI()
1969 MachineBasicBlock *MergeBB, in insertChainedPHI()
2018 bool AMDGPUMachineCFGStructurizer::containsDef(MachineBasicBlock *MBB, in containsDef()
2025 void AMDGPUMachineCFGStructurizer::rewriteLiveOutRegs(MachineBasicBlock *IfBB, in rewriteLiveOutRegs()
2026 MachineBasicBlock *CodeBB, in rewriteLiveOutRegs()
2027 MachineBasicBlock *MergeBB, in rewriteLiveOutRegs()
2092 void AMDGPUMachineCFGStructurizer::prunePHIInfo(MachineBasicBlock *MBB) { in prunePHIInfo()
2095 SmallVector<std::tuple<unsigned, unsigned, MachineBasicBlock *>, 4> in prunePHIInfo()
2119 MachineBasicBlock *SourceMBB = Source.second; in prunePHIInfo()
2140 MachineBasicBlock *Entry = CurrentRegion->getEntry(); in createEntryPHI()
2141 MachineBasicBlock *Exit = CurrentRegion->getExit(); in createEntryPHI()
2173 MachineBasicBlock *PHIDefMBB = PHIDefInstr->getParent(); in createEntryPHI()
2258 void AMDGPUMachineCFGStructurizer::resolvePHIInfos(MachineBasicBlock *FunctionEntry) { in resolvePHIInfos()
2276 static bool isFunctionEntryBlock(MachineBasicBlock *MBB) { in isFunctionEntryBlock()
2280 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion( in createIfRegion()
2281 MachineBasicBlock *MergeBB, MachineBasicBlock *CodeBB, in createIfRegion()
2316 MachineBasicBlock *IfBB = createIfBlock(MergeBB, CodeBB, CodeBB, CodeBB, in createIfRegion()
2325 MachineBasicBlock *RegionExit = CurrentRegion->getExit(); in createIfRegion()
2326 MachineBasicBlock *ETrueBB = nullptr; in createIfRegion()
2327 MachineBasicBlock *EFalseBB = nullptr; in createIfRegion()
2369 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion( in createIfRegion()
2370 MachineBasicBlock *MergeBB, LinearizedRegion *InnerRegion, in createIfRegion()
2371 LinearizedRegion *CurrentRegion, MachineBasicBlock *SelectBB, in createIfRegion()
2375 MachineBasicBlock *CodeEntryBB = InnerRegion->getEntry(); in createIfRegion()
2376 MachineBasicBlock *CodeExitBB = InnerRegion->getExit(); in createIfRegion()
2377 MachineBasicBlock *IfBB = createIfBlock(MergeBB, CodeEntryBB, CodeExitBB, in createIfRegion()
2384 MachineBasicBlock *RegionExit = CurrentRegion->getExit(); in createIfRegion()
2385 MachineBasicBlock *ETrueBB = nullptr; in createIfRegion()
2386 MachineBasicBlock *EFalseBB = nullptr; in createIfRegion()
2430 MachineBasicBlock *Entry, in splitLoopPHI()
2431 MachineBasicBlock *EntrySucc, in splitLoopPHI()
2440 MachineBasicBlock *RegionSourceMBB = getPHIPred(PHI, RegionIndex); in splitLoopPHI()
2467 void AMDGPUMachineCFGStructurizer::splitLoopPHIs(MachineBasicBlock *Entry, in splitLoopPHIs()
2468 MachineBasicBlock *EntrySucc, in splitLoopPHIs()
2479 MachineBasicBlock *
2520 static MachineBasicBlock *split(MachineBasicBlock::iterator I) { in split()
2522 MachineBasicBlock *MBB = (*I).getParent(); in split()
2524 MachineBasicBlock *SuccMBB = MF->CreateMachineBasicBlock(); in split()
2540 MachineBasicBlock *
2542 MachineBasicBlock *Entry = LRegion->getEntry(); in splitEntry()
2543 MachineBasicBlock *EntrySucc = split(Entry->getFirstNonPHI()); in splitEntry()
2544 MachineBasicBlock *Exit = LRegion->getExit(); in splitEntry()
2577 MachineBasicBlock *Exit = Region->getSucc(); in removeOldExitPreds()
2581 for (MachineBasicBlock::pred_iterator PI = Exit->pred_begin(), in removeOldExitPreds()
2590 static bool mbbHasBackEdge(MachineBasicBlock *MBB, in mbbHasBackEdge()
2591 SmallPtrSet<MachineBasicBlock *, 8> &MBBs) { in mbbHasBackEdge() argument
2601 SmallPtrSet<MachineBasicBlock *, 8> &MBBs) { in containsNewBackedge() argument
2607 MachineBasicBlock *MBB = Tree->getMBBMRT()->getMBB(); in containsNewBackedge()
2624 SmallPtrSet<MachineBasicBlock *, 8> MBBs; in containsNewBackedge()
2631 MachineBasicBlock *LastMerge = createLinearizedExitBlock(Region); in structurizeComplexRegion()
2632 MachineBasicBlock *CurrentMerge = LastMerge; in structurizeComplexRegion()
2671 MachineBasicBlock *InnerEntry = InnerLRegion->getEntry(); in structurizeComplexRegion()
2692 MachineBasicBlock *IfEnd = CurrentMerge; in structurizeComplexRegion()
2698 MachineBasicBlock *MBB = Child->getMBBMRT()->getMBB(); in structurizeComplexRegion()
2716 MachineBasicBlock *IfEnd = CurrentMerge; in structurizeComplexRegion()
2732 MachineBasicBlock *NewSucc = splitEntry(LRegion); in structurizeComplexRegion()
2804 MachineBasicBlock *MBB = MBBI.getFallThrough(); in initFallthroughMap()
2858 for (MachineBasicBlock::instr_iterator I = MBBI.instr_begin(), in checkRegOnlyPHIInputs()