Lines Matching refs:MachineBasicBlock
38 using PHISourceT = std::pair<unsigned, MachineBasicBlock *>;
54 MachineBasicBlock *SourceMBB);
57 MachineBasicBlock *SourceMBB);
60 MachineBasicBlock *SourceMBB);
63 bool findSourcesFromMBB(MachineBasicBlock *SourceMBB,
69 MachineBasicBlock *SourceMBB);
71 MachineBasicBlock *SourceMBB = nullptr);
72 bool findDest(unsigned SourceReg, MachineBasicBlock *SourceMBB,
74 bool isSource(unsigned Reg, MachineBasicBlock *SourceMBB = nullptr);
127 MachineBasicBlock *SourceMBB) { in phiInfoElementAddSource()
143 MachineBasicBlock *SourceMBB) { in phiInfoElementRemoveSource()
170 MachineBasicBlock *SourceMBB) { in findPHIInfoElementFromSource()
182 bool PHILinearize::findSourcesFromMBB(MachineBasicBlock *SourceMBB, in findSourcesFromMBB()
217 MachineBasicBlock *SourceMBB) { in addSource()
222 MachineBasicBlock *SourceMBB) { in removeSource()
226 bool PHILinearize::findDest(unsigned SourceReg, MachineBasicBlock *SourceMBB, in findDest()
237 bool PHILinearize::isSource(unsigned Reg, MachineBasicBlock *SourceMBB) { in isSource()
289 static MachineBasicBlock *getPHIPred(MachineInstr &PHI, unsigned Index) { in getPHIPred()
295 MachineBasicBlock *NewPred) { in setPhiPred()
316 MachineBasicBlock *Entry;
319 MachineBasicBlock *Exit;
321 SmallPtrSet<MachineBasicBlock *, 1> MBBs;
326 void storeLiveOutReg(MachineBasicBlock *MBB, Register Reg,
336 void storeMBBLiveOuts(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
340 void storeLiveOuts(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
349 LinearizedRegion(MachineBasicBlock *MBB, const MachineRegisterInfo *MRI,
395 void setEntry(MachineBasicBlock *NewEntry);
397 MachineBasicBlock *getEntry();
399 void setExit(MachineBasicBlock *NewExit);
401 MachineBasicBlock *getExit();
403 void addMBB(MachineBasicBlock *MBB);
407 bool contains(MachineBasicBlock *MBB);
450 static MachineBasicBlock *
469 MachineBasicBlock *MBB;
472 MBBMRT(MachineBasicBlock *BB) : MBB(BB) { in MBBMRT()
480 MachineBasicBlock *getMBB() { return MBB; } in getMBB()
494 MachineBasicBlock *Succ = nullptr;
552 MachineBasicBlock *getEntry() { in getEntry()
558 MachineBasicBlock *getExit() { in getExit()
564 void setSucc(MachineBasicBlock *MBB) { Succ = MBB; } in setSucc()
566 MachineBasicBlock *getSucc() { return Succ; } in getSucc()
568 bool contains(MachineBasicBlock *MBB) { in contains()
604 MachineBasicBlock *
608 MachineBasicBlock *ExitMBB = &MFI; in initializeMRT()
628 MachineBasicBlock *Exit = initializeMRT(MF, RegionInfo, RegionMap); in buildMRT()
636 MachineBasicBlock *MBB = &(*MBBI); in buildMRT()
674 void LinearizedRegion::storeLiveOutReg(MachineBasicBlock *MBB, Register Reg, in storeLiveOutReg()
698 for (MachineBasicBlock::instr_iterator in storeLiveOutReg()
732 void LinearizedRegion::storeLiveOuts(MachineBasicBlock *MBB, in storeLiveOuts()
751 for (MachineBasicBlock *Succ : MBB->successors()) { in storeLiveOuts()
773 void LinearizedRegion::storeMBBLiveOuts(MachineBasicBlock *MBB, in storeMBBLiveOuts()
797 MachineBasicBlock *Exit = Region->getSucc(); in storeLiveOuts()
966 void LinearizedRegion::setEntry(MachineBasicBlock *NewEntry) { in setEntry()
970 MachineBasicBlock *LinearizedRegion::getEntry() { return Entry; } in getEntry()
972 void LinearizedRegion::setExit(MachineBasicBlock *NewExit) { Exit = NewExit; } in setExit()
974 MachineBasicBlock *LinearizedRegion::getExit() { return Exit; } in getExit()
976 void LinearizedRegion::addMBB(MachineBasicBlock *MBB) { MBBs.insert(MBB); } in addMBB()
984 bool LinearizedRegion::contains(MachineBasicBlock *MBB) { in contains()
1003 MachineBasicBlock *MBB = MBBI; in removeFalseRegisterKills()
1049 LinearizedRegion::LinearizedRegion(MachineBasicBlock *MBB, in LinearizedRegion()
1075 DenseMap<MachineBasicBlock *, MachineBasicBlock *> FallthroughMap;
1092 void extractKilledPHIs(MachineBasicBlock *MBB);
1098 MachineBasicBlock *SourceMBB,
1102 MachineBasicBlock *LastMerge,
1105 MachineBasicBlock *IfMBB,
1111 void rewriteRegionExitPHI(RegionMRT *Region, MachineBasicBlock *LastMerge,
1114 void rewriteRegionExitPHIs(RegionMRT *Region, MachineBasicBlock *LastMerge,
1116 void rewriteRegionEntryPHI(LinearizedRegion *Region, MachineBasicBlock *IfMBB,
1119 MachineBasicBlock *IfMBB);
1125 void insertUnconditionalBranch(MachineBasicBlock *MBB,
1126 MachineBasicBlock *Dest,
1129 MachineBasicBlock *createLinearizedExitBlock(RegionMRT *Region);
1131 void insertMergePHI(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1132 MachineBasicBlock *MergeBB, unsigned DestRegister,
1136 MachineBasicBlock *createIfBlock(MachineBasicBlock *MergeBB,
1137 MachineBasicBlock *CodeBBStart,
1138 MachineBasicBlock *CodeBBEnd,
1139 MachineBasicBlock *SelectBB, unsigned IfReg,
1142 void prunePHIInfo(MachineBasicBlock *MBB);
1146 void resolvePHIInfos(MachineBasicBlock *FunctionEntry);
1150 MachineBasicBlock *createIfRegion(MachineBasicBlock *MergeBB,
1151 MachineBasicBlock *CodeBB,
1156 MachineBasicBlock *
1157 createIfRegion(MachineBasicBlock *MergeMBB, LinearizedRegion *InnerRegion,
1158 LinearizedRegion *CurrentRegion, MachineBasicBlock *SelectBB,
1162 void rewriteCodeBBTerminator(MachineBasicBlock *CodeBB,
1163 MachineBasicBlock *MergeBB,
1167 void insertChainedPHI(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1168 MachineBasicBlock *MergeBB,
1171 bool containsDef(MachineBasicBlock *MBB, LinearizedRegion *InnerRegion,
1173 void rewriteLiveOutRegs(MachineBasicBlock *IfBB, MachineBasicBlock *CodeBB,
1174 MachineBasicBlock *MergeBB,
1178 void splitLoopPHI(MachineInstr &PHI, MachineBasicBlock *Entry,
1179 MachineBasicBlock *EntrySucc, LinearizedRegion *LRegion);
1180 void splitLoopPHIs(MachineBasicBlock *Entry, MachineBasicBlock *EntrySucc,
1183 MachineBasicBlock *splitExit(LinearizedRegion *LRegion);
1185 MachineBasicBlock *splitEntry(LinearizedRegion *LRegion);
1227 MachineBasicBlock *Entry = Region->getEntry(); in regionIsSimpleIf()
1228 MachineBasicBlock *Succ = Region->getSucc(); in regionIsSimpleIf()
1236 for (MachineBasicBlock *Current : Entry->successors()) { in regionIsSimpleIf()
1249 MachineBasicBlock *Entry = Region->getEntry(); in transformSimpleIfRegion()
1250 MachineBasicBlock *Exit = Region->getExit(); in transformSimpleIfRegion()
1254 static void fixMBBTerminator(MachineBasicBlock *MBB) { in fixMBBTerminator()
1268 MachineBasicBlock *InternalSucc = nullptr; in fixRegionTerminator()
1269 MachineBasicBlock *ExternalSucc = nullptr; in fixRegionTerminator()
1273 SmallPtrSet<MachineBasicBlock *, 2> Successors; in fixRegionTerminator()
1274 for (MachineBasicBlock *Succ : Exit->successors()) { in fixRegionTerminator()
1329 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1341 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHIRegionIndices()
1353 MachineBasicBlock *Pred = getPHIPred(PHI, i); in getPHINonRegionIndices()
1385 void AMDGPUMachineCFGStructurizer::extractKilledPHIs(MachineBasicBlock *MBB) { in extractKilledPHIs()
1389 for (MachineBasicBlock::instr_iterator I = MBB->instr_begin(), in extractKilledPHIs()
1421 MachineBasicBlock *SourceMBB, in shrinkPHI()
1450 MachineBasicBlock *MBB = PHI.getParent(); in shrinkPHI()
1466 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in shrinkPHI()
1479 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *LastMerge, in replacePHI()
1495 MachineBasicBlock *MBB = PHI.getParent(); in replacePHI()
1508 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replacePHI()
1522 MachineInstr &PHI, unsigned CombinedSourceReg, MachineBasicBlock *IfMBB, in replaceEntryPHI()
1544 MachineBasicBlock *MBB = PHI.getParent(); in replaceEntryPHI()
1558 MachineBasicBlock *SourcePred = getPHIPred(PHI, i); in replaceEntryPHI()
1579 MachineBasicBlock *DefMBB = getDefInstr(Reg)->getParent(); in replaceLiveOutRegs()
1599 MachineBasicBlock *LastMerge, in rewriteRegionExitPHI()
1612 MachineBasicBlock *IfMBB, in rewriteRegionEntryPHI()
1621 static void collectPHIs(MachineBasicBlock *MBB, in collectPHIs()
1631 MachineBasicBlock *LastMerge, in rewriteRegionExitPHIs()
1646 MachineBasicBlock *IfMBB) { in rewriteRegionEntryPHIs()
1657 void AMDGPUMachineCFGStructurizer::insertUnconditionalBranch(MachineBasicBlock *MBB, in insertUnconditionalBranch()
1658 MachineBasicBlock *Dest, in insertUnconditionalBranch()
1662 MachineBasicBlock::instr_iterator Terminator = MBB->getFirstInstrTerminator(); in insertUnconditionalBranch()
1672 static MachineBasicBlock *getSingleExitNode(MachineFunction &MF) { in getSingleExitNode()
1673 MachineBasicBlock *result = nullptr; in getSingleExitNode()
1691 MachineBasicBlock *
1701 MachineBasicBlock *LastMerge = MF->CreateMachineBasicBlock(); in createLinearizedExitBlock()
1716 void AMDGPUMachineCFGStructurizer::insertMergePHI(MachineBasicBlock *IfBB, in insertMergePHI()
1717 MachineBasicBlock *CodeBB, in insertMergePHI()
1718 MachineBasicBlock *MergeBB, in insertMergePHI()
1746 static void removeExternalCFGSuccessors(MachineBasicBlock *MBB) { in removeExternalCFGSuccessors()
1747 for (MachineBasicBlock::succ_iterator PI = MBB->succ_begin(), in removeExternalCFGSuccessors()
1756 static void removeExternalCFGEdges(MachineBasicBlock *StartMBB, in removeExternalCFGEdges()
1757 MachineBasicBlock *EndMBB) { in removeExternalCFGEdges()
1762 DenseSet<std::pair<MachineBasicBlock *, MachineBasicBlock *>> Succs; in removeExternalCFGEdges()
1765 MachineBasicBlock *StartMBBSucc = *(StartMBB->succ_begin()); in removeExternalCFGEdges()
1766 for (MachineBasicBlock *Succ : EndMBB->successors()) { in removeExternalCFGEdges()
1772 std::pair<MachineBasicBlock *, MachineBasicBlock *>(EndMBB, Succ)); in removeExternalCFGEdges()
1777 for (MachineBasicBlock *Pred : StartMBB->predecessors()) in removeExternalCFGEdges()
1782 std::pair<MachineBasicBlock *, MachineBasicBlock *> Edge = SI; in removeExternalCFGEdges()
1789 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfBlock( in createIfBlock()
1790 MachineBasicBlock *MergeBB, MachineBasicBlock *CodeBBStart, in createIfBlock()
1791 MachineBasicBlock *CodeBBEnd, MachineBasicBlock *SelectBB, unsigned IfReg, in createIfBlock()
1794 MachineBasicBlock *IfBB = MF->CreateMachineBasicBlock(); in createIfBlock()
1797 for (MachineBasicBlock *Pred : CodeBBStart->predecessors()) in createIfBlock()
1821 MachineBasicBlock *SinglePred = in createIfBlock()
1853 void AMDGPUMachineCFGStructurizer::rewriteCodeBBTerminator(MachineBasicBlock *CodeBB, in rewriteCodeBBTerminator()
1854 MachineBasicBlock *MergeBB, in rewriteCodeBBTerminator()
1856 MachineBasicBlock *TrueBB = nullptr; in rewriteCodeBBTerminator()
1857 MachineBasicBlock *FalseBB = nullptr; in rewriteCodeBBTerminator()
1859 MachineBasicBlock *FallthroughBB = FallthroughMap[CodeBB]; in rewriteCodeBBTerminator()
1920 void AMDGPUMachineCFGStructurizer::insertChainedPHI(MachineBasicBlock *IfBB, in insertChainedPHI()
1921 MachineBasicBlock *CodeBB, in insertChainedPHI()
1922 MachineBasicBlock *MergeBB, in insertChainedPHI()
1971 bool AMDGPUMachineCFGStructurizer::containsDef(MachineBasicBlock *MBB, in containsDef()
1978 void AMDGPUMachineCFGStructurizer::rewriteLiveOutRegs(MachineBasicBlock *IfBB, in rewriteLiveOutRegs()
1979 MachineBasicBlock *CodeBB, in rewriteLiveOutRegs()
1980 MachineBasicBlock *MergeBB, in rewriteLiveOutRegs()
2045 void AMDGPUMachineCFGStructurizer::prunePHIInfo(MachineBasicBlock *MBB) { in prunePHIInfo()
2048 SmallVector<std::tuple<unsigned, unsigned, MachineBasicBlock *>, 4> in prunePHIInfo()
2072 MachineBasicBlock *SourceMBB = Source.second; in prunePHIInfo()
2093 MachineBasicBlock *Entry = CurrentRegion->getEntry(); in createEntryPHI()
2094 MachineBasicBlock *Exit = CurrentRegion->getExit(); in createEntryPHI()
2126 MachineBasicBlock *PHIDefMBB = PHIDefInstr->getParent(); in createEntryPHI()
2211 void AMDGPUMachineCFGStructurizer::resolvePHIInfos(MachineBasicBlock *FunctionEntry) { in resolvePHIInfos()
2229 static bool isFunctionEntryBlock(MachineBasicBlock *MBB) { in isFunctionEntryBlock()
2233 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion( in createIfRegion()
2234 MachineBasicBlock *MergeBB, MachineBasicBlock *CodeBB, in createIfRegion()
2269 MachineBasicBlock *IfBB = createIfBlock(MergeBB, CodeBB, CodeBB, CodeBB, in createIfRegion()
2278 MachineBasicBlock *RegionExit = CurrentRegion->getExit(); in createIfRegion()
2279 MachineBasicBlock *ETrueBB = nullptr; in createIfRegion()
2280 MachineBasicBlock *EFalseBB = nullptr; in createIfRegion()
2322 MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion( in createIfRegion()
2323 MachineBasicBlock *MergeBB, LinearizedRegion *InnerRegion, in createIfRegion()
2324 LinearizedRegion *CurrentRegion, MachineBasicBlock *SelectBB, in createIfRegion()
2328 MachineBasicBlock *CodeEntryBB = InnerRegion->getEntry(); in createIfRegion()
2329 MachineBasicBlock *CodeExitBB = InnerRegion->getExit(); in createIfRegion()
2330 MachineBasicBlock *IfBB = createIfBlock(MergeBB, CodeEntryBB, CodeExitBB, in createIfRegion()
2337 MachineBasicBlock *RegionExit = CurrentRegion->getExit(); in createIfRegion()
2338 MachineBasicBlock *ETrueBB = nullptr; in createIfRegion()
2339 MachineBasicBlock *EFalseBB = nullptr; in createIfRegion()
2383 MachineBasicBlock *Entry, in splitLoopPHI()
2384 MachineBasicBlock *EntrySucc, in splitLoopPHI()
2393 MachineBasicBlock *RegionSourceMBB = getPHIPred(PHI, RegionIndex); in splitLoopPHI()
2420 void AMDGPUMachineCFGStructurizer::splitLoopPHIs(MachineBasicBlock *Entry, in splitLoopPHIs()
2421 MachineBasicBlock *EntrySucc, in splitLoopPHIs()
2432 MachineBasicBlock *
2473 static MachineBasicBlock *split(MachineBasicBlock::iterator I) { in split()
2475 MachineBasicBlock *MBB = (*I).getParent(); in split()
2477 MachineBasicBlock *SuccMBB = MF->CreateMachineBasicBlock(); in split()
2493 MachineBasicBlock *
2495 MachineBasicBlock *Entry = LRegion->getEntry(); in splitEntry()
2496 MachineBasicBlock *EntrySucc = split(Entry->getFirstNonPHI()); in splitEntry()
2497 MachineBasicBlock *Exit = LRegion->getExit(); in splitEntry()
2530 MachineBasicBlock *Exit = Region->getSucc(); in removeOldExitPreds()
2534 for (MachineBasicBlock::pred_iterator PI = Exit->pred_begin(), in removeOldExitPreds()
2543 static bool mbbHasBackEdge(MachineBasicBlock *MBB, in mbbHasBackEdge()
2544 SmallPtrSet<MachineBasicBlock *, 8> &MBBs) { in mbbHasBackEdge() argument
2545 for (MachineBasicBlock *Succ : MBB->successors()) in mbbHasBackEdge()
2552 SmallPtrSet<MachineBasicBlock *, 8> &MBBs) { in containsNewBackedge() argument
2558 MachineBasicBlock *MBB = Tree->getMBBMRT()->getMBB(); in containsNewBackedge()
2573 SmallPtrSet<MachineBasicBlock *, 8> MBBs; in containsNewBackedge()
2580 MachineBasicBlock *LastMerge = createLinearizedExitBlock(Region); in structurizeComplexRegion()
2581 MachineBasicBlock *CurrentMerge = LastMerge; in structurizeComplexRegion()
2620 MachineBasicBlock *InnerEntry = InnerLRegion->getEntry(); in structurizeComplexRegion()
2641 MachineBasicBlock *IfEnd = CurrentMerge; in structurizeComplexRegion()
2647 MachineBasicBlock *MBB = Child->getMBBMRT()->getMBB(); in structurizeComplexRegion()
2665 MachineBasicBlock *IfEnd = CurrentMerge; in structurizeComplexRegion()
2681 MachineBasicBlock *NewSucc = splitEntry(LRegion); in structurizeComplexRegion()
2753 MachineBasicBlock *MBB = MBBI.getFallThrough(); in initFallthroughMap()
2803 for (MachineBasicBlock::instr_iterator I = MBBI.instr_begin(), in checkRegOnlyPHIInputs()