Skip to content

Commit 3293bff

Browse files
authored
[AMDGPU][NewPM] Port "GCNPreRAOptimizations" pass to NPM (#126040)
1 parent 1a0de96 commit 3293bff

File tree

7 files changed

+63
-20
lines changed

7 files changed

+63
-20
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ ModulePass *
6363
createAMDGPULowerModuleLDSLegacyPass(const AMDGPUTargetMachine *TM = nullptr);
6464
ModulePass *createAMDGPULowerBufferFatPointersPass();
6565
FunctionPass *createSIModeRegisterPass();
66-
FunctionPass *createGCNPreRAOptimizationsPass();
66+
FunctionPass *createGCNPreRAOptimizationsLegacyPass();
6767
FunctionPass *createAMDGPUPreloadKernArgPrologLegacyPass();
6868

6969
struct AMDGPUSimplifyLibCallsPass : PassInfoMixin<AMDGPUSimplifyLibCallsPass> {
@@ -454,7 +454,7 @@ extern char &GCNNSAReassignID;
454454
void initializeGCNPreRALongBranchRegLegacyPass(PassRegistry &);
455455
extern char &GCNPreRALongBranchRegID;
456456

457-
void initializeGCNPreRAOptimizationsPass(PassRegistry &);
457+
void initializeGCNPreRAOptimizationsLegacyPass(PassRegistry &);
458458
extern char &GCNPreRAOptimizationsID;
459459

460460
FunctionPass *createAMDGPUSetWavePriorityPass();

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ FUNCTION_PASS_WITH_PARAMS(
9898
#endif
9999
MACHINE_FUNCTION_PASS("amdgpu-isel", AMDGPUISelDAGToDAGPass(*this))
100100
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass())
101+
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
101102
MACHINE_FUNCTION_PASS("gcn-dpp-combine", GCNDPPCombinePass())
102103
MACHINE_FUNCTION_PASS("si-fix-sgpr-copies", SIFixSGPRCopiesPass())
103104
MACHINE_FUNCTION_PASS("si-fix-vgpr-copies", SIFixVGPRCopiesPass())
@@ -118,7 +119,6 @@ MACHINE_FUNCTION_PASS("si-wqm", SIWholeQuadModePass())
118119
#define DUMMY_MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
119120
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-insert-delay-alu", AMDGPUInsertDelayAluPass())
120121
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass())
121-
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
122122
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass())
123123
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority", AMDGPUSetWavePriorityPass())
124124

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "GCNDPPCombine.h"
3434
#include "GCNIterativeScheduler.h"
3535
#include "GCNPreRALongBranchReg.h"
36+
#include "GCNPreRAOptimizations.h"
3637
#include "GCNSchedStrategy.h"
3738
#include "GCNVOPDUtils.h"
3839
#include "R600.h"
@@ -547,7 +548,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
547548
initializeAMDGPUPrintfRuntimeBindingPass(*PR);
548549
initializeAMDGPUResourceUsageAnalysisPass(*PR);
549550
initializeGCNNSAReassignPass(*PR);
550-
initializeGCNPreRAOptimizationsPass(*PR);
551+
initializeGCNPreRAOptimizationsLegacyPass(*PR);
551552
initializeGCNPreRALongBranchRegLegacyPass(*PR);
552553
initializeGCNRewritePartialRegUsesPass(*PR);
553554
initializeGCNRegPressurePrinterPass(*PR);

llvm/lib/Target/AMDGPU/GCNPreRAOptimizations.cpp

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
///
2525
//===----------------------------------------------------------------------===//
2626

27+
#include "GCNPreRAOptimizations.h"
2728
#include "AMDGPU.h"
2829
#include "GCNSubtarget.h"
2930
#include "MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -37,7 +38,7 @@ using namespace llvm;
3738

3839
namespace {
3940

40-
class GCNPreRAOptimizations : public MachineFunctionPass {
41+
class GCNPreRAOptimizationsImpl {
4142
private:
4243
const SIInstrInfo *TII;
4344
const SIRegisterInfo *TRI;
@@ -46,11 +47,17 @@ class GCNPreRAOptimizations : public MachineFunctionPass {
4647

4748
bool processReg(Register Reg);
4849

50+
public:
51+
GCNPreRAOptimizationsImpl(LiveIntervals *LS) : LIS(LS) {}
52+
bool run(MachineFunction &MF);
53+
};
54+
55+
class GCNPreRAOptimizationsLegacy : public MachineFunctionPass {
4956
public:
5057
static char ID;
5158

52-
GCNPreRAOptimizations() : MachineFunctionPass(ID) {
53-
initializeGCNPreRAOptimizationsPass(*PassRegistry::getPassRegistry());
59+
GCNPreRAOptimizationsLegacy() : MachineFunctionPass(ID) {
60+
initializeGCNPreRAOptimizationsLegacyPass(*PassRegistry::getPassRegistry());
5461
}
5562

5663
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -65,24 +72,23 @@ class GCNPreRAOptimizations : public MachineFunctionPass {
6572
MachineFunctionPass::getAnalysisUsage(AU);
6673
}
6774
};
68-
6975
} // End anonymous namespace.
7076

71-
INITIALIZE_PASS_BEGIN(GCNPreRAOptimizations, DEBUG_TYPE,
77+
INITIALIZE_PASS_BEGIN(GCNPreRAOptimizationsLegacy, DEBUG_TYPE,
7278
"AMDGPU Pre-RA optimizations", false, false)
7379
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
74-
INITIALIZE_PASS_END(GCNPreRAOptimizations, DEBUG_TYPE, "Pre-RA optimizations",
75-
false, false)
80+
INITIALIZE_PASS_END(GCNPreRAOptimizationsLegacy, DEBUG_TYPE,
81+
"Pre-RA optimizations", false, false)
7682

77-
char GCNPreRAOptimizations::ID = 0;
83+
char GCNPreRAOptimizationsLegacy::ID = 0;
7884

79-
char &llvm::GCNPreRAOptimizationsID = GCNPreRAOptimizations::ID;
85+
char &llvm::GCNPreRAOptimizationsID = GCNPreRAOptimizationsLegacy::ID;
8086

81-
FunctionPass *llvm::createGCNPreRAOptimizationsPass() {
82-
return new GCNPreRAOptimizations();
87+
FunctionPass *llvm::createGCNPreRAOptimizationsLegacyPass() {
88+
return new GCNPreRAOptimizationsLegacy();
8389
}
8490

85-
bool GCNPreRAOptimizations::processReg(Register Reg) {
91+
bool GCNPreRAOptimizationsImpl::processReg(Register Reg) {
8692
MachineInstr *Def0 = nullptr;
8793
MachineInstr *Def1 = nullptr;
8894
uint64_t Init = 0;
@@ -212,14 +218,25 @@ bool GCNPreRAOptimizations::processReg(Register Reg) {
212218
return true;
213219
}
214220

215-
bool GCNPreRAOptimizations::runOnMachineFunction(MachineFunction &MF) {
221+
bool GCNPreRAOptimizationsLegacy::runOnMachineFunction(MachineFunction &MF) {
216222
if (skipFunction(MF.getFunction()))
217223
return false;
224+
LiveIntervals *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
225+
return GCNPreRAOptimizationsImpl(LIS).run(MF);
226+
}
227+
228+
PreservedAnalyses
229+
GCNPreRAOptimizationsPass::run(MachineFunction &MF,
230+
MachineFunctionAnalysisManager &MFAM) {
231+
LiveIntervals *LIS = &MFAM.getResult<LiveIntervalsAnalysis>(MF);
232+
GCNPreRAOptimizationsImpl(LIS).run(MF);
233+
return PreservedAnalyses::all();
234+
}
218235

236+
bool GCNPreRAOptimizationsImpl::run(MachineFunction &MF) {
219237
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
220238
TII = ST.getInstrInfo();
221239
MRI = &MF.getRegInfo();
222-
LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
223240
TRI = ST.getRegisterInfo();
224241

225242
bool Changed = false;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//===- GCNPreRAOptimizations.h ----------------------------------*- C++- *-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIB_TARGET_AMDGPU_GCNPRERAOPTIMIZATIONS_H
10+
#define LLVM_LIB_TARGET_AMDGPU_GCNPRERAOPTIMIZATIONS_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
class GCNPreRAOptimizationsPass
16+
: public PassInfoMixin<GCNPreRAOptimizationsPass> {
17+
public:
18+
PreservedAnalyses run(MachineFunction &MF,
19+
MachineFunctionAnalysisManager &MFAM);
20+
};
21+
} // namespace llvm
22+
23+
#endif // LLVM_LIB_TARGET_AMDGPU_GCNPRERAOPTIMIZATIONS_H

llvm/test/CodeGen/AMDGPU/agpr-to-agpr-copy.mir

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2-
# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -run-pass=liveintervals,amdgpu-pre-ra-optimizations -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX908 %s
2+
# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -run-pass=amdgpu-pre-ra-optimizations -verify-machineinstrs %s -o - | FileCheck -check-prefix=GFX908 %s
3+
# RUN: llc -mtriple=amdgcn -mcpu=gfx908 -passes="amdgpu-pre-ra-optimizations" %s -o - | FileCheck -check-prefix=GFX908 %s
34

45
---
56
name: test_mfma_f32_4x4x1f32_propagate_vgpr

llvm/test/CodeGen/AMDGPU/combine-sreg64-inits.mir

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2-
# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass=liveintervals,amdgpu-pre-ra-optimizations %s -o - | FileCheck -check-prefix=GCN %s
2+
# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass=amdgpu-pre-ra-optimizations %s -o - | FileCheck -check-prefix=GCN %s
3+
# RUN: llc -mtriple=amdgcn -passes="amdgpu-pre-ra-optimizations" %s -o - | FileCheck -check-prefix=GCN %s
34

45
---
56
name: combine_sreg64_inits

0 commit comments

Comments
 (0)