diff options
author | Christudasan Devadasan <christudasan.devadasan@amd.com> | 2025-02-05 18:46:27 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-05 18:46:27 +0530 |
commit | 814db6c53faeb1dc66361b67cf30a5e42036c1bb (patch) | |
tree | e5c476179bc1bcb41760bbddf851379ea51741e5 | |
parent | b83c960badecc2806df6c08341fa97d7887cd5c1 (diff) | |
download | llvm-814db6c53faeb1dc66361b67cf30a5e42036c1bb.zip llvm-814db6c53faeb1dc66361b67cf30a5e42036c1bb.tar.gz llvm-814db6c53faeb1dc66361b67cf30a5e42036c1bb.tar.bz2 |
[CodeGen][NewPM] Port GCNPreRALongBranchReg to NPM. (#125844)
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPU.h | 2 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def | 2 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.cpp | 37 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.h | 23 |
5 files changed, 56 insertions, 11 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.h b/llvm/lib/Target/AMDGPU/AMDGPU.h index fa3496d..2c6b882 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPU.h +++ b/llvm/lib/Target/AMDGPU/AMDGPU.h @@ -451,7 +451,7 @@ extern char &AMDGPUOpenCLEnqueuedBlockLoweringLegacyID; void initializeGCNNSAReassignPass(PassRegistry &); extern char &GCNNSAReassignID; -void initializeGCNPreRALongBranchRegPass(PassRegistry &); +void initializeGCNPreRALongBranchRegLegacyPass(PassRegistry &); extern char &GCNPreRALongBranchRegID; void initializeGCNPreRAOptimizationsPass(PassRegistry &); diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def b/llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def index 224515a..41ad144 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def +++ b/llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def @@ -97,6 +97,7 @@ FUNCTION_PASS_WITH_PARAMS( #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) #endif MACHINE_FUNCTION_PASS("amdgpu-isel", AMDGPUISelDAGToDAGPass(*this)) +MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass()) MACHINE_FUNCTION_PASS("gcn-dpp-combine", GCNDPPCombinePass()) MACHINE_FUNCTION_PASS("si-fix-sgpr-copies", SIFixSGPRCopiesPass()) MACHINE_FUNCTION_PASS("si-fix-vgpr-copies", SIFixVGPRCopiesPass()) @@ -117,7 +118,6 @@ MACHINE_FUNCTION_PASS("si-wqm", SIWholeQuadModePass()) #define DUMMY_MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) DUMMY_MACHINE_FUNCTION_PASS("amdgpu-insert-delay-alu", AMDGPUInsertDelayAluPass()) DUMMY_MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass()) -DUMMY_MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass()) DUMMY_MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass()) DUMMY_MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass()) DUMMY_MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority", AMDGPUSetWavePriorityPass()) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 1df0374..fffd30b 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -32,6 +32,7 @@ #include "AMDGPUWaitSGPRHazards.h" #include "GCNDPPCombine.h" #include "GCNIterativeScheduler.h" +#include "GCNPreRALongBranchReg.h" #include "GCNSchedStrategy.h" #include "GCNVOPDUtils.h" #include "R600.h" @@ -548,7 +549,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() { initializeAMDGPUResourceUsageAnalysisPass(*PR); initializeGCNNSAReassignPass(*PR); initializeGCNPreRAOptimizationsPass(*PR); - initializeGCNPreRALongBranchRegPass(*PR); + initializeGCNPreRALongBranchRegLegacyPass(*PR); initializeGCNRewritePartialRegUsesPass(*PR); initializeGCNRegPressurePrinterPass(*PR); initializeAMDGPUPreloadKernArgPrologLegacyPass(*PR); diff --git a/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.cpp b/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.cpp index 76a4148..355bbeb 100644 --- a/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.cpp +++ b/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.cpp @@ -14,6 +14,7 @@ // distrance threshold tuning of what is considered "long" is handled through // amdgpu-long-branch-factor cl argument which sets LongBranchFactor. //===----------------------------------------------------------------------===// +#include "GCNPreRALongBranchReg.h" #include "AMDGPU.h" #include "GCNSubtarget.h" #include "SIMachineFunctionInfo.h" @@ -36,7 +37,7 @@ static cl::opt<double> LongBranchFactor( "reserved. We lean towards always reserving a register for " "long jumps")); -class GCNPreRALongBranchReg : public MachineFunctionPass { +class GCNPreRALongBranchReg { struct BasicBlockInfo { // Offset - Distance from the beginning of the function to the beginning @@ -49,26 +50,38 @@ class GCNPreRALongBranchReg : public MachineFunctionPass { SmallVectorImpl<BasicBlockInfo> &BlockInfo); public: + GCNPreRALongBranchReg() = default; + bool run(MachineFunction &MF); +}; + +class GCNPreRALongBranchRegLegacy : public MachineFunctionPass { +public: static char ID; - GCNPreRALongBranchReg() : MachineFunctionPass(ID) { - initializeGCNPreRALongBranchRegPass(*PassRegistry::getPassRegistry()); + GCNPreRALongBranchRegLegacy() : MachineFunctionPass(ID) { + initializeGCNPreRALongBranchRegLegacyPass(*PassRegistry::getPassRegistry()); } - bool runOnMachineFunction(MachineFunction &MF) override; + + bool runOnMachineFunction(MachineFunction &MF) override { + return GCNPreRALongBranchReg().run(MF); + } + StringRef getPassName() const override { return "AMDGPU Pre-RA Long Branch Reg"; } + void getAnalysisUsage(AnalysisUsage &AU) const override { AU.setPreservesAll(); MachineFunctionPass::getAnalysisUsage(AU); } }; } // End anonymous namespace. -char GCNPreRALongBranchReg::ID = 0; -INITIALIZE_PASS(GCNPreRALongBranchReg, DEBUG_TYPE, +char GCNPreRALongBranchRegLegacy::ID = 0; + +INITIALIZE_PASS(GCNPreRALongBranchRegLegacy, DEBUG_TYPE, "AMDGPU Pre-RA Long Branch Reg", false, false) -char &llvm::GCNPreRALongBranchRegID = GCNPreRALongBranchReg::ID; +char &llvm::GCNPreRALongBranchRegID = GCNPreRALongBranchRegLegacy::ID; void GCNPreRALongBranchReg::generateBlockInfo( MachineFunction &MF, SmallVectorImpl<BasicBlockInfo> &BlockInfo) { @@ -99,7 +112,8 @@ void GCNPreRALongBranchReg::generateBlockInfo( PrevNum = Num; } } -bool GCNPreRALongBranchReg::runOnMachineFunction(MachineFunction &MF) { + +bool GCNPreRALongBranchReg::run(MachineFunction &MF) { const GCNSubtarget &STM = MF.getSubtarget<GCNSubtarget>(); const SIInstrInfo *TII = STM.getInstrInfo(); const SIRegisterInfo *TRI = STM.getRegisterInfo(); @@ -136,3 +150,10 @@ bool GCNPreRALongBranchReg::runOnMachineFunction(MachineFunction &MF) { } return false; } + +PreservedAnalyses +GCNPreRALongBranchRegPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + GCNPreRALongBranchReg().run(MF); + return PreservedAnalyses::all(); +} diff --git a/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.h b/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.h new file mode 100644 index 0000000..4cd7dea --- /dev/null +++ b/llvm/lib/Target/AMDGPU/GCNPreRALongBranchReg.h @@ -0,0 +1,23 @@ +//===- GCNPreRALongBranchReg.h ----------------------------------*- C++- *-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIB_TARGET_AMDGPU_GCNPRERALONGBRANCHREG_H +#define LLVM_LIB_TARGET_AMDGPU_GCNPRERALONGBRANCHREG_H + +#include "llvm/CodeGen/MachinePassManager.h" + +namespace llvm { +class GCNPreRALongBranchRegPass + : public PassInfoMixin<GCNPreRALongBranchRegPass> { +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); +}; +} // namespace llvm + +#endif // LLVM_LIB_TARGET_AMDGPU_GCNPRERALONGBRANCHREG_H |