@@ -81,12 +81,6 @@ class VGPRRegisterRegAlloc : public RegisterRegAllocBase<VGPRRegisterRegAlloc> {
8181 : RegisterRegAllocBase(N, D, C) {}
8282};
8383
84- class WWMRegisterRegAlloc : public RegisterRegAllocBase <WWMRegisterRegAlloc> {
85- public:
86- WWMRegisterRegAlloc (const char *N, const char *D, FunctionPassCtor C)
87- : RegisterRegAllocBase(N, D, C) {}
88- };
89-
9084static bool onlyAllocateSGPRs (const TargetRegisterInfo &TRI,
9185 const MachineRegisterInfo &MRI,
9286 const Register Reg) {
@@ -101,24 +95,13 @@ static bool onlyAllocateVGPRs(const TargetRegisterInfo &TRI,
10195 return !static_cast <const SIRegisterInfo &>(TRI).isSGPRClass (RC);
10296}
10397
104- static bool onlyAllocateWWMRegs (const TargetRegisterInfo &TRI,
105- const MachineRegisterInfo &MRI,
106- const Register Reg) {
107- const SIMachineFunctionInfo *MFI =
108- MRI.getMF ().getInfo <SIMachineFunctionInfo>();
109- const TargetRegisterClass *RC = MRI.getRegClass (Reg);
110- return !static_cast <const SIRegisterInfo &>(TRI).isSGPRClass (RC) &&
111- MFI->checkFlag (Reg, AMDGPU::VirtRegFlag::WWM_REG);
112- }
113-
114- // / -{sgpr|wwm|vgpr}-regalloc=... command line option.
98+ // / -{sgpr|vgpr}-regalloc=... command line option.
11599static FunctionPass *useDefaultRegisterAllocator () { return nullptr ; }
116100
117101// / A dummy default pass factory indicates whether the register allocator is
118102// / overridden on the command line.
119103static llvm::once_flag InitializeDefaultSGPRRegisterAllocatorFlag;
120104static llvm::once_flag InitializeDefaultVGPRRegisterAllocatorFlag;
121- static llvm::once_flag InitializeDefaultWWMRegisterAllocatorFlag;
122105
123106static SGPRRegisterRegAlloc
124107defaultSGPRRegAlloc (" default" ,
@@ -135,11 +118,6 @@ static cl::opt<VGPRRegisterRegAlloc::FunctionPassCtor, false,
135118VGPRRegAlloc (" vgpr-regalloc" , cl::Hidden, cl::init(&useDefaultRegisterAllocator),
136119 cl::desc (" Register allocator to use for VGPRs" ));
137120
138- static cl::opt<WWMRegisterRegAlloc::FunctionPassCtor, false ,
139- RegisterPassParser<WWMRegisterRegAlloc>>
140- WWMRegAlloc (" wwm-regalloc" , cl::Hidden,
141- cl::init (&useDefaultRegisterAllocator),
142- cl::desc(" Register allocator to use for WWM registers" ));
143121
144122static void initializeDefaultSGPRRegisterAllocatorOnce () {
145123 RegisterRegAlloc::FunctionPassCtor Ctor = SGPRRegisterRegAlloc::getDefault ();
@@ -159,15 +137,6 @@ static void initializeDefaultVGPRRegisterAllocatorOnce() {
159137 }
160138}
161139
162- static void initializeDefaultWWMRegisterAllocatorOnce () {
163- RegisterRegAlloc::FunctionPassCtor Ctor = WWMRegisterRegAlloc::getDefault ();
164-
165- if (!Ctor) {
166- Ctor = WWMRegAlloc;
167- WWMRegisterRegAlloc::setDefault (WWMRegAlloc);
168- }
169- }
170-
171140static FunctionPass *createBasicSGPRRegisterAllocator () {
172141 return createBasicRegisterAllocator (onlyAllocateSGPRs);
173142}
@@ -192,18 +161,6 @@ static FunctionPass *createFastVGPRRegisterAllocator() {
192161 return createFastRegisterAllocator (onlyAllocateVGPRs, true );
193162}
194163
195- static FunctionPass *createBasicWWMRegisterAllocator () {
196- return createBasicRegisterAllocator (onlyAllocateWWMRegs);
197- }
198-
199- static FunctionPass *createGreedyWWMRegisterAllocator () {
200- return createGreedyRegisterAllocator (onlyAllocateWWMRegs);
201- }
202-
203- static FunctionPass *createFastWWMRegisterAllocator () {
204- return createFastRegisterAllocator (onlyAllocateWWMRegs, false );
205- }
206-
207164static SGPRRegisterRegAlloc basicRegAllocSGPR (
208165 " basic" , " basic register allocator" , createBasicSGPRRegisterAllocator);
209166static SGPRRegisterRegAlloc greedyRegAllocSGPR (
@@ -220,16 +177,7 @@ static VGPRRegisterRegAlloc greedyRegAllocVGPR(
220177
221178static VGPRRegisterRegAlloc fastRegAllocVGPR (
222179 " fast" , " fast register allocator" , createFastVGPRRegisterAllocator);
223-
224- static WWMRegisterRegAlloc basicRegAllocWWMReg (" basic" ,
225- " basic register allocator" ,
226- createBasicWWMRegisterAllocator);
227- static WWMRegisterRegAlloc
228- greedyRegAllocWWMReg (" greedy" , " greedy register allocator" ,
229- createGreedyWWMRegisterAllocator);
230- static WWMRegisterRegAlloc fastRegAllocWWMReg (" fast" , " fast register allocator" ,
231- createFastWWMRegisterAllocator);
232- } // namespace
180+ }
233181
234182static cl::opt<bool >
235183EnableEarlyIfConversion (" amdgpu-early-ifcvt" , cl::Hidden,
@@ -477,7 +425,6 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
477425 initializeAMDGPURemoveIncompatibleFunctionsPass (*PR);
478426 initializeAMDGPUSwLowerLDSLegacyPass (*PR);
479427 initializeAMDGPULowerModuleLDSLegacyPass (*PR);
480- initializeAMDGPUReserveWWMRegsPass (*PR);
481428 initializeAMDGPURewriteOutArgumentsPass (*PR);
482429 initializeAMDGPURewriteUndefForPHILegacyPass (*PR);
483430 initializeAMDGPUUnifyMetadataPass (*PR);
@@ -1067,7 +1014,6 @@ class GCNPassConfig final : public AMDGPUPassConfig {
10671014
10681015 FunctionPass *createSGPRAllocPass (bool Optimized);
10691016 FunctionPass *createVGPRAllocPass (bool Optimized);
1070- FunctionPass *createWWMRegAllocPass (bool Optimized);
10711017 FunctionPass *createRegAllocPass (bool Optimized) override ;
10721018
10731019 bool addRegAssignAndRewriteFast () override ;
@@ -1464,6 +1410,7 @@ void GCNPassConfig::addOptimizedRegAlloc() {
14641410}
14651411
14661412bool GCNPassConfig::addPreRewrite () {
1413+ addPass (&SILowerWWMCopiesID);
14671414 if (EnableRegReassign)
14681415 addPass (&GCNNSAReassignID);
14691416 return true ;
@@ -1499,28 +1446,12 @@ FunctionPass *GCNPassConfig::createVGPRAllocPass(bool Optimized) {
14991446 return createFastVGPRRegisterAllocator ();
15001447}
15011448
1502- FunctionPass *GCNPassConfig::createWWMRegAllocPass (bool Optimized) {
1503- // Initialize the global default.
1504- llvm::call_once (InitializeDefaultWWMRegisterAllocatorFlag,
1505- initializeDefaultWWMRegisterAllocatorOnce);
1506-
1507- RegisterRegAlloc::FunctionPassCtor Ctor = WWMRegisterRegAlloc::getDefault ();
1508- if (Ctor != useDefaultRegisterAllocator)
1509- return Ctor ();
1510-
1511- if (Optimized)
1512- return createGreedyWWMRegisterAllocator ();
1513-
1514- return createFastWWMRegisterAllocator ();
1515- }
1516-
15171449FunctionPass *GCNPassConfig::createRegAllocPass (bool Optimized) {
15181450 llvm_unreachable (" should not be used" );
15191451}
15201452
15211453static const char RegAllocOptNotSupportedMessage[] =
1522- " -regalloc not supported with amdgcn. Use -sgpr-regalloc, -wwm-regalloc, "
1523- " and -vgpr-regalloc" ;
1454+ " -regalloc not supported with amdgcn. Use -sgpr-regalloc and -vgpr-regalloc" ;
15241455
15251456bool GCNPassConfig::addRegAssignAndRewriteFast () {
15261457 if (!usingDefaultRegAlloc ())
@@ -1532,19 +1463,11 @@ bool GCNPassConfig::addRegAssignAndRewriteFast() {
15321463
15331464 // Equivalent of PEI for SGPRs.
15341465 addPass (&SILowerSGPRSpillsID);
1535-
1536- // To Allocate wwm registers used in whole quad mode operations (for shaders).
15371466 addPass (&SIPreAllocateWWMRegsID);
15381467
1539- // For allocating other wwm register operands.
1540- addPass (createWWMRegAllocPass (false ));
1541-
1542- addPass (&SILowerWWMCopiesID);
1543- addPass (&AMDGPUReserveWWMRegsID);
1544-
1545- // For allocating regular VGPRs.
15461468 addPass (createVGPRAllocPass (false ));
15471469
1470+ addPass (&SILowerWWMCopiesID);
15481471 return true ;
15491472}
15501473
@@ -1564,17 +1487,8 @@ bool GCNPassConfig::addRegAssignAndRewriteOptimized() {
15641487
15651488 // Equivalent of PEI for SGPRs.
15661489 addPass (&SILowerSGPRSpillsID);
1567-
1568- // To Allocate wwm registers used in whole quad mode operations (for shaders).
15691490 addPass (&SIPreAllocateWWMRegsID);
15701491
1571- // For allocating other whole wave mode registers.
1572- addPass (createWWMRegAllocPass (true ));
1573- addPass (&SILowerWWMCopiesID);
1574- addPass (createVirtRegRewriter (false ));
1575- addPass (&AMDGPUReserveWWMRegsID);
1576-
1577- // For allocating regular VGPRs.
15781492 addPass (createVGPRAllocPass (true ));
15791493
15801494 addPreRewrite ();
0 commit comments