Lines Matching defs:Region
330 void storeLiveOutRegRegion(RegionMRT *Region, Register Reg,
343 void storeLiveOuts(RegionMRT *Region, const MachineRegisterInfo *MRI,
353 void setRegionMRT(RegionMRT *Region) { RMRT = Region; }
415 void initLiveOut(RegionMRT *Region, const MachineRegisterInfo *MRI,
446 void setParent(RegionMRT *Region) { Parent = Region; }
492 MachineRegion *Region;
498 RegionMRT(MachineRegion *MachineRegion) : Region(MachineRegion) {
522 MachineRegion *getMachineRegion() { return Region; }
534 dbgs() << "Region: " << (void *)Region;
643 MachineRegion *Region = RegionInfo->getRegionFor(MBB);
646 if (RegionMap.count(Region) == 0) {
647 RegionMRT *NewMRTRegion = new RegionMRT(Region);
648 RegionMap[Region] = NewMRTRegion;
651 MachineRegion *Parent = Region->getParent();
664 // Add MBB to Region MRT
665 RegionMap[Region]->addChild(NewMBB);
666 NewMBB->setParent(RegionMap[Region]);
667 RegionMap[Region]->setSucc(Region->getExit());
712 void LinearizedRegion::storeLiveOutRegRegion(RegionMRT *Region, Register Reg,
721 if (!Region->contains(UI.getParent()->getParent())) {
722 LLVM_DEBUG(dbgs() << "Add LiveOut (Region " << (void *)Region
790 void LinearizedRegion::storeLiveOuts(RegionMRT *Region,
795 MachineBasicBlock *Exit = Region->getSucc();
798 CurrentTopRegion == nullptr ? Region : CurrentTopRegion;
804 auto Children = Region->getChildren();
820 auto Succ = Region->getSucc();
826 if (Region->contains(getPHIPred(PHI, i))) {
828 LLVM_DEBUG(dbgs() << "Add Region LiveOut (" << (void *)Region
840 OS << "Linearized Region {";
904 LLVM_DEBUG(dbgs() << "Region before register replace\n");
907 LLVM_DEBUG(dbgs() << "Region after register replace\n");
1040 void LinearizedRegion::initLiveOut(RegionMRT *Region,
1044 storeLiveOuts(Region, MRI, TRI, PHIInfo);
1076 void getPHIRegionIndices(RegionMRT *Region, MachineInstr &PHI,
1078 void getPHIRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1080 void getPHINonRegionIndices(LinearizedRegion *Region, MachineInstr &PHI,
1109 void rewriteRegionExitPHI(RegionMRT *Region, MachineBasicBlock *LastMerge,
1112 void rewriteRegionExitPHIs(RegionMRT *Region, MachineBasicBlock *LastMerge,
1114 void rewriteRegionEntryPHI(LinearizedRegion *Region, MachineBasicBlock *IfMBB,
1116 void rewriteRegionEntryPHIs(LinearizedRegion *Region,
1119 bool regionIsSimpleIf(RegionMRT *Region);
1121 void transformSimpleIfRegion(RegionMRT *Region);
1127 MachineBasicBlock *createLinearizedExitBlock(RegionMRT *Region);
1185 LinearizedRegion *initLinearizedRegion(RegionMRT *Region);
1187 bool structurizeComplexRegion(RegionMRT *Region);
1189 bool structurizeRegion(RegionMRT *Region);
1191 bool structurizeRegions(RegionMRT *Region, bool isTopRegion);
1207 void createLinearizedRegion(RegionMRT *Region, unsigned SelectOut);
1224 bool AMDGPUMachineCFGStructurizer::regionIsSimpleIf(RegionMRT *Region) {
1225 MachineBasicBlock *Entry = Region->getEntry();
1226 MachineBasicBlock *Succ = Region->getSucc();
1246 void AMDGPUMachineCFGStructurizer::transformSimpleIfRegion(RegionMRT *Region) {
1247 MachineBasicBlock *Entry = Region->getEntry();
1248 MachineBasicBlock *Exit = Region->getExit();
1265 static void fixRegionTerminator(RegionMRT *Region) {
1268 LinearizedRegion *LRegion = Region->getLinearizedRegion();
1299 bool regionIsSequence(RegionMRT *Region) {
1300 auto Children = Region->getChildren();
1311 void fixupRegionExits(RegionMRT *Region) {
1312 auto Children = Region->getChildren();
1323 RegionMRT *Region, MachineInstr &PHI,
1328 if (Region->contains(Pred)) {
1335 LinearizedRegion *Region, MachineInstr &PHI,
1340 if (Region->contains(Pred)) {
1347 LinearizedRegion *Region, MachineInstr &PHI,
1352 if (!Region->contains(Pred)) {
1596 void AMDGPUMachineCFGStructurizer::rewriteRegionExitPHI(RegionMRT *Region,
1601 getPHIRegionIndices(Region, PHI, PHIRegionIndices);
1609 void AMDGPUMachineCFGStructurizer::rewriteRegionEntryPHI(LinearizedRegion *Region,
1613 getPHINonRegionIndices(Region, PHI, PHINonRegionIndices);
1628 void AMDGPUMachineCFGStructurizer::rewriteRegionExitPHIs(RegionMRT *Region,
1632 auto Exit = Region->getSucc();
1639 rewriteRegionExitPHI(Region, LastMerge, *PHII, LRegion);
1643 void AMDGPUMachineCFGStructurizer::rewriteRegionEntryPHIs(LinearizedRegion *Region,
1646 auto Entry = Region->getEntry();
1651 rewriteRegionEntryPHI(Region, IfMBB, *PHII);
1690 AMDGPUMachineCFGStructurizer::createLinearizedExitBlock(RegionMRT *Region) {
1691 auto Exit = Region->getSucc();
1694 MachineFunction *MF = Region->getEntry()->getParent();
1696 return &(*(--(Region->getEntry()->getParent()->end())));
2516 AMDGPUMachineCFGStructurizer::initLinearizedRegion(RegionMRT *Region) {
2517 LinearizedRegion *LRegion = Region->getLinearizedRegion();
2518 LRegion->initLiveOut(Region, MRI, TRI, PHIInfo);
2519 LRegion->setEntry(Region->getEntry());
2523 static void removeOldExitPreds(RegionMRT *Region) {
2524 MachineBasicBlock *Exit = Region->getSucc();
2531 if (Region->contains(*PI)) {
2558 RegionMRT *Region = Tree->getRegionMRT();
2559 for (MRT *C : llvm::reverse(*Region->getChildren()))
2566 static bool containsNewBackedge(RegionMRT *Region) {
2568 return containsNewBackedge(Region, MBBs);
2571 bool AMDGPUMachineCFGStructurizer::structurizeComplexRegion(RegionMRT *Region) {
2572 auto *LRegion = initLinearizedRegion(Region);
2573 LRegion->setHasLoop(containsNewBackedge(Region));
2574 MachineBasicBlock *LastMerge = createLinearizedExitBlock(Region);
2579 rewriteRegionExitPHIs(Region, LastMerge, LRegion);
2580 removeOldExitPreds(Region);
2584 SetVector<MRT *> *Children = Region->getChildren();
2585 LLVM_DEBUG(dbgs() << "===========If Region Start===============\n");
2681 NewInReg, Region->getEntry()->getNumber());
2692 if (Region->isRoot()) {
2696 LLVM_DEBUG(Region->getEntry()->getParent()->dump());
2700 LLVM_DEBUG(dbgs() << "===========If Region End===============\n");
2702 Region->setLinearizedRegion(LRegion);
2706 bool AMDGPUMachineCFGStructurizer::structurizeRegion(RegionMRT *Region) {
2707 if (false && regionIsSimpleIf(Region)) {
2708 transformSimpleIfRegion(Region);
2711 if (regionIsSequence(Region))
2712 fixupRegionExits(Region);
2714 structurizeComplexRegion(Region);
2720 bool AMDGPUMachineCFGStructurizer::structurizeRegions(RegionMRT *Region,
2724 auto Children = Region->getChildren();
2732 Changed |= structurizeRegion(Region);
2750 void AMDGPUMachineCFGStructurizer::createLinearizedRegion(RegionMRT *Region,
2758 LRegion->setRegionMRT(Region);
2759 Region->setLinearizedRegion(LRegion);
2760 LRegion->setParent(Region->getParent()
2761 ? Region->getParent()->getLinearizedRegion()
2770 RegionMRT *Region = MRT->getRegionMRT();
2771 Region->setBBSelectRegOut(SelectOut);
2775 createLinearizedRegion(Region, SelectOut);
2777 for (auto *CI : *Region->getChildren())