@@ -568,16 +568,14 @@ class RegionMRT : public MRT {
568
568
bool contains (MachineBasicBlock *MBB) {
569
569
for (auto *CI : Children) {
570
570
if (CI->isMBB ()) {
571
- if (MBB == CI->getMBBMRT ()->getMBB ()) {
571
+ if (MBB == CI->getMBBMRT ()->getMBB ())
572
572
return true ;
573
- }
574
573
} else {
575
- if (CI->getRegionMRT ()->contains (MBB)) {
574
+ if (CI->getRegionMRT ()->contains (MBB))
576
575
return true ;
577
- } else if (CI->getRegionMRT ()->getLinearizedRegion () != nullptr &&
578
- CI->getRegionMRT ()->getLinearizedRegion ()->contains (MBB)) {
576
+ if (CI->getRegionMRT ()->getLinearizedRegion () != nullptr &&
577
+ CI->getRegionMRT ()->getLinearizedRegion ()->contains (MBB))
579
578
return true ;
580
- }
581
579
}
582
580
}
583
581
return false ;
@@ -2259,63 +2257,60 @@ MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion(
2259
2257
CodeBB->addSuccessor (MergeBB);
2260
2258
CurrentRegion->addMBB (CodeBB);
2261
2259
return nullptr ;
2262
- } else {
2263
- // Handle internal block.
2264
- const TargetRegisterClass *RegClass = MRI->getRegClass (BBSelectRegIn);
2265
- Register CodeBBSelectReg = MRI->createVirtualRegister (RegClass);
2266
- rewriteCodeBBTerminator (CodeBB, MergeBB, CodeBBSelectReg);
2267
- bool IsRegionEntryBB = CurrentRegion->getEntry () == CodeBB;
2268
- MachineBasicBlock *IfBB = createIfBlock (MergeBB, CodeBB, CodeBB, CodeBB,
2269
- BBSelectRegIn, IsRegionEntryBB);
2270
- CurrentRegion->addMBB (IfBB);
2271
- // If this is the entry block we need to make the If block the new
2272
- // linearized region entry.
2273
- if (IsRegionEntryBB) {
2274
- CurrentRegion->setEntry (IfBB);
2275
-
2276
- if (CurrentRegion->getHasLoop ()) {
2277
- MachineBasicBlock *RegionExit = CurrentRegion->getExit ();
2278
- MachineBasicBlock *ETrueBB = nullptr ;
2279
- MachineBasicBlock *EFalseBB = nullptr ;
2280
- SmallVector<MachineOperand, 1 > ECond;
2281
-
2282
- const DebugLoc &DL = DebugLoc ();
2283
- TII->analyzeBranch (*RegionExit, ETrueBB, EFalseBB, ECond);
2284
- TII->removeBranch (*RegionExit);
2285
-
2286
- // We need to create a backedge if there is a loop
2287
- Register Reg = TII->insertNE (
2288
- RegionExit, RegionExit->instr_end (), DL,
2289
- CurrentRegion->getRegionMRT ()->getInnerOutputRegister (),
2290
- CurrentRegion->getRegionMRT ()->getEntry ()->getNumber ());
2291
- MachineOperand RegOp =
2292
- MachineOperand::CreateReg (Reg, false , false , true );
2293
- ArrayRef<MachineOperand> Cond (RegOp);
2294
- LLVM_DEBUG (dbgs () << " RegionExitReg: " );
2295
- LLVM_DEBUG (RegOp.print (dbgs (), TRI));
2296
- LLVM_DEBUG (dbgs () << " \n " );
2297
- TII->insertBranch (*RegionExit, CurrentRegion->getEntry (), RegionExit,
2298
- Cond, DebugLoc ());
2299
- RegionExit->addSuccessor (CurrentRegion->getEntry ());
2300
- }
2301
- }
2302
- CurrentRegion->addMBB (CodeBB);
2303
- LinearizedRegion InnerRegion (CodeBB, MRI, TRI, PHIInfo);
2260
+ }
2261
+ // Handle internal block.
2262
+ const TargetRegisterClass *RegClass = MRI->getRegClass (BBSelectRegIn);
2263
+ Register CodeBBSelectReg = MRI->createVirtualRegister (RegClass);
2264
+ rewriteCodeBBTerminator (CodeBB, MergeBB, CodeBBSelectReg);
2265
+ bool IsRegionEntryBB = CurrentRegion->getEntry () == CodeBB;
2266
+ MachineBasicBlock *IfBB = createIfBlock (MergeBB, CodeBB, CodeBB, CodeBB,
2267
+ BBSelectRegIn, IsRegionEntryBB);
2268
+ CurrentRegion->addMBB (IfBB);
2269
+ // If this is the entry block we need to make the If block the new
2270
+ // linearized region entry.
2271
+ if (IsRegionEntryBB) {
2272
+ CurrentRegion->setEntry (IfBB);
2273
+
2274
+ if (CurrentRegion->getHasLoop ()) {
2275
+ MachineBasicBlock *RegionExit = CurrentRegion->getExit ();
2276
+ MachineBasicBlock *ETrueBB = nullptr ;
2277
+ MachineBasicBlock *EFalseBB = nullptr ;
2278
+ SmallVector<MachineOperand, 1 > ECond;
2304
2279
2305
- InnerRegion.setParent (CurrentRegion);
2306
- LLVM_DEBUG (dbgs () << " Insert BB Select PHI (BB)\n " );
2307
- insertMergePHI (IfBB, CodeBB, MergeBB, BBSelectRegOut, BBSelectRegIn,
2308
- CodeBBSelectReg);
2309
- InnerRegion.addMBB (MergeBB);
2280
+ const DebugLoc &DL = DebugLoc ();
2281
+ TII->analyzeBranch (*RegionExit, ETrueBB, EFalseBB, ECond);
2282
+ TII->removeBranch (*RegionExit);
2310
2283
2311
- LLVM_DEBUG (InnerRegion.print (dbgs (), TRI));
2312
- rewriteLiveOutRegs (IfBB, CodeBB, MergeBB, &InnerRegion, CurrentRegion);
2313
- extractKilledPHIs (CodeBB);
2314
- if (IsRegionEntryBB) {
2315
- createEntryPHIs (CurrentRegion);
2284
+ // We need to create a backedge if there is a loop
2285
+ Register Reg =
2286
+ TII->insertNE (RegionExit, RegionExit->instr_end (), DL,
2287
+ CurrentRegion->getRegionMRT ()->getInnerOutputRegister (),
2288
+ CurrentRegion->getRegionMRT ()->getEntry ()->getNumber ());
2289
+ MachineOperand RegOp = MachineOperand::CreateReg (Reg, false , false , true );
2290
+ ArrayRef<MachineOperand> Cond (RegOp);
2291
+ LLVM_DEBUG (dbgs () << " RegionExitReg: " );
2292
+ LLVM_DEBUG (RegOp.print (dbgs (), TRI));
2293
+ LLVM_DEBUG (dbgs () << " \n " );
2294
+ TII->insertBranch (*RegionExit, CurrentRegion->getEntry (), RegionExit,
2295
+ Cond, DebugLoc ());
2296
+ RegionExit->addSuccessor (CurrentRegion->getEntry ());
2316
2297
}
2317
- return IfBB;
2318
2298
}
2299
+ CurrentRegion->addMBB (CodeBB);
2300
+ LinearizedRegion InnerRegion (CodeBB, MRI, TRI, PHIInfo);
2301
+
2302
+ InnerRegion.setParent (CurrentRegion);
2303
+ LLVM_DEBUG (dbgs () << " Insert BB Select PHI (BB)\n " );
2304
+ insertMergePHI (IfBB, CodeBB, MergeBB, BBSelectRegOut, BBSelectRegIn,
2305
+ CodeBBSelectReg);
2306
+ InnerRegion.addMBB (MergeBB);
2307
+
2308
+ LLVM_DEBUG (InnerRegion.print (dbgs (), TRI));
2309
+ rewriteLiveOutRegs (IfBB, CodeBB, MergeBB, &InnerRegion, CurrentRegion);
2310
+ extractKilledPHIs (CodeBB);
2311
+ if (IsRegionEntryBB)
2312
+ createEntryPHIs (CurrentRegion);
2313
+ return IfBB;
2319
2314
}
2320
2315
2321
2316
MachineBasicBlock *AMDGPUMachineCFGStructurizer::createIfRegion (
@@ -2712,12 +2707,11 @@ bool AMDGPUMachineCFGStructurizer::structurizeRegion(RegionMRT *Region) {
2712
2707
if (false && regionIsSimpleIf (Region)) {
2713
2708
transformSimpleIfRegion (Region);
2714
2709
return true ;
2715
- } else if (regionIsSequence (Region)) {
2710
+ }
2711
+ if (regionIsSequence (Region))
2716
2712
fixupRegionExits (Region);
2717
- return false ;
2718
- } else {
2713
+ else
2719
2714
structurizeComplexRegion (Region);
2720
- }
2721
2715
return false ;
2722
2716
}
2723
2717
@@ -2784,12 +2778,11 @@ AMDGPUMachineCFGStructurizer::initializeSelectRegisters(MRT *MRT, unsigned Selec
2784
2778
InnerSelectOut = initializeSelectRegisters (CI, InnerSelectOut, MRI, TII);
2785
2779
MRT->setBBSelectRegIn (InnerSelectOut);
2786
2780
return InnerSelectOut;
2787
- } else {
2788
- MRT->setBBSelectRegOut (SelectOut);
2789
- unsigned NewSelectIn = createBBSelectReg (TII, MRI);
2790
- MRT->setBBSelectRegIn (NewSelectIn);
2791
- return NewSelectIn;
2792
2781
}
2782
+ MRT->setBBSelectRegOut (SelectOut);
2783
+ unsigned NewSelectIn = createBBSelectReg (TII, MRI);
2784
+ MRT->setBBSelectRegIn (NewSelectIn);
2785
+ return NewSelectIn;
2793
2786
}
2794
2787
2795
2788
static void checkRegOnlyPHIInputs (MachineFunction &MF) {
0 commit comments