Skip to content

Commit 6c87ec4

Browse files
authored
[AMDGPU][NPM] Port SIModeRegister to NPM (#129014)
1 parent 82d111e commit 6c87ec4

File tree

6 files changed

+47
-20
lines changed

6 files changed

+47
-20
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,12 @@ class AMDGPUAnnotateUniformValuesPass
352352
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
353353
};
354354

355+
class SIModeRegisterPass : public PassInfoMixin<SIModeRegisterPass> {
356+
public:
357+
SIModeRegisterPass() {}
358+
PreservedAnalyses run(MachineFunction &F, MachineFunctionAnalysisManager &AM);
359+
};
360+
355361
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
356362

357363
ModulePass *createAMDGPUPrintfRuntimeBinding();
@@ -419,7 +425,7 @@ extern char &SIAnnotateControlFlowLegacyPassID;
419425
void initializeSIMemoryLegalizerPass(PassRegistry&);
420426
extern char &SIMemoryLegalizerID;
421427

422-
void initializeSIModeRegisterPass(PassRegistry&);
428+
void initializeSIModeRegisterLegacyPass(PassRegistry &);
423429
extern char &SIModeRegisterID;
424430

425431
void initializeAMDGPUInsertDelayAluLegacyPass(PassRegistry &);

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ MACHINE_FUNCTION_PASS("si-load-store-opt", SILoadStoreOptimizerPass())
112112
MACHINE_FUNCTION_PASS("si-lower-control-flow", SILowerControlFlowPass())
113113
MACHINE_FUNCTION_PASS("si-lower-sgpr-spills", SILowerSGPRSpillsPass())
114114
MACHINE_FUNCTION_PASS("si-lower-wwm-copies", SILowerWWMCopiesPass())
115+
MACHINE_FUNCTION_PASS("si-mode-register", SIModeRegisterPass())
115116
MACHINE_FUNCTION_PASS("si-opt-vgpr-liverange", SIOptimizeVGPRLiveRangePass())
116117
MACHINE_FUNCTION_PASS("si-optimize-exec-masking", SIOptimizeExecMaskingPass())
117118
MACHINE_FUNCTION_PASS("si-optimize-exec-masking-pre-ra", SIOptimizeExecMaskingPreRAPass())
@@ -131,7 +132,6 @@ DUMMY_MACHINE_FUNCTION_PASS("si-insert-hard-clauses", SIInsertHardClausesPass())
131132
DUMMY_MACHINE_FUNCTION_PASS("si-insert-waitcnts", SIInsertWaitcntsPass())
132133
DUMMY_MACHINE_FUNCTION_PASS("si-late-branch-lowering", SILateBranchLoweringPass())
133134
DUMMY_MACHINE_FUNCTION_PASS("si-memory-legalizer", SIMemoryLegalizerPass())
134-
DUMMY_MACHINE_FUNCTION_PASS("si-mode-register", SIModeRegisterPass())
135135
DUMMY_MACHINE_FUNCTION_PASS("si-pre-emit-peephole", SIPreEmitPeepholePass())
136136
// TODO: Move amdgpu-preload-kern-arg-prolog to MACHINE_FUNCTION_PASS since it
137137
// already exists.

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
536536
initializeAMDGPUInsertDelayAluLegacyPass(*PR);
537537
initializeSIInsertHardClausesPass(*PR);
538538
initializeSIInsertWaitcntsPass(*PR);
539-
initializeSIModeRegisterPass(*PR);
539+
initializeSIModeRegisterLegacyPass(*PR);
540540
initializeSIWholeQuadModeLegacyPass(*PR);
541541
initializeSILowerControlFlowLegacyPass(*PR);
542542
initializeSIPreEmitPeepholePass(*PR);

llvm/lib/Target/AMDGPU/SIModeRegister.cpp

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,8 @@ class BlockData {
107107

108108
namespace {
109109

110-
class SIModeRegister : public MachineFunctionPass {
110+
class SIModeRegister {
111111
public:
112-
static char ID;
113-
114112
std::vector<std::unique_ptr<BlockData>> BlockInfo;
115113
std::queue<MachineBasicBlock *> Phase2List;
116114

@@ -125,15 +123,7 @@ class SIModeRegister : public MachineFunctionPass {
125123

126124
bool Changed = false;
127125

128-
public:
129-
SIModeRegister() : MachineFunctionPass(ID) {}
130-
131-
bool runOnMachineFunction(MachineFunction &MF) override;
132-
133-
void getAnalysisUsage(AnalysisUsage &AU) const override {
134-
AU.setPreservesCFG();
135-
MachineFunctionPass::getAnalysisUsage(AU);
136-
}
126+
bool run(MachineFunction &MF);
137127

138128
void processBlockPhase1(MachineBasicBlock &MBB, const SIInstrInfo *TII);
139129

@@ -146,16 +136,32 @@ class SIModeRegister : public MachineFunctionPass {
146136
void insertSetreg(MachineBasicBlock &MBB, MachineInstr *I,
147137
const SIInstrInfo *TII, Status InstrMode);
148138
};
139+
140+
class SIModeRegisterLegacy : public MachineFunctionPass {
141+
public:
142+
static char ID;
143+
144+
SIModeRegisterLegacy() : MachineFunctionPass(ID) {}
145+
146+
bool runOnMachineFunction(MachineFunction &MF) override;
147+
148+
void getAnalysisUsage(AnalysisUsage &AU) const override {
149+
AU.setPreservesCFG();
150+
MachineFunctionPass::getAnalysisUsage(AU);
151+
}
152+
};
149153
} // End anonymous namespace.
150154

151-
INITIALIZE_PASS(SIModeRegister, DEBUG_TYPE,
155+
INITIALIZE_PASS(SIModeRegisterLegacy, DEBUG_TYPE,
152156
"Insert required mode register values", false, false)
153157

154-
char SIModeRegister::ID = 0;
158+
char SIModeRegisterLegacy::ID = 0;
155159

156-
char &llvm::SIModeRegisterID = SIModeRegister::ID;
160+
char &llvm::SIModeRegisterID = SIModeRegisterLegacy::ID;
157161

158-
FunctionPass *llvm::createSIModeRegisterPass() { return new SIModeRegister(); }
162+
FunctionPass *llvm::createSIModeRegisterPass() {
163+
return new SIModeRegisterLegacy();
164+
}
159165

160166
// Determine the Mode register setting required for this instruction.
161167
// Instructions which don't use the Mode register return a null Status.
@@ -422,7 +428,20 @@ void SIModeRegister::processBlockPhase3(MachineBasicBlock &MBB,
422428
}
423429
}
424430

425-
bool SIModeRegister::runOnMachineFunction(MachineFunction &MF) {
431+
bool SIModeRegisterLegacy::runOnMachineFunction(MachineFunction &MF) {
432+
return SIModeRegister().run(MF);
433+
}
434+
435+
PreservedAnalyses SIModeRegisterPass::run(MachineFunction &MF,
436+
MachineFunctionAnalysisManager &AM) {
437+
if (!SIModeRegister().run(MF))
438+
return PreservedAnalyses::all();
439+
auto PA = getMachineFunctionPassPreservedAnalyses();
440+
PA.preserveSet<CFGAnalyses>();
441+
return PA;
442+
}
443+
444+
bool SIModeRegister::run(MachineFunction &MF) {
426445
// Constrained FP intrinsics are used to support non-default rounding modes.
427446
// strictfp attribute is required to mark functions with strict FP semantics
428447
// having constrained FP intrinsics. This pass fixes up operations that uses

llvm/test/CodeGen/AMDGPU/mode-register-fptrunc.gfx11plus-fake16.mir

Lines changed: 1 addition & 0 deletions
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
22
# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -run-pass si-mode-register %s -o - | FileCheck %s --check-prefixes=GFX11
3+
# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -passes si-mode-register %s -o - | FileCheck %s --check-prefixes=GFX11
34

45
---
56
name: ftrunc_tonearest

llvm/test/CodeGen/AMDGPU/mode-register.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass si-mode-register %s -o - | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -passes=si-mode-register %s -o - | FileCheck %s
23

34
---
45
# check that the mode is changed to rtz from default rtn for interp f16

0 commit comments

Comments
 (0)