diff options
author | Akshat Oke <Akshat.Oke@amd.com> | 2025-03-12 11:22:02 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-12 11:22:02 +0530 |
commit | 57a90883ca541a90a7a4a22d715832ec0ceb0599 (patch) | |
tree | d7205172029b046a465e14ba5d103784b7d914e8 | |
parent | 8d7cb5d05b1278d96a8811581d3b0baf0753e0e3 (diff) | |
download | llvm-57a90883ca541a90a7a4a22d715832ec0ceb0599.zip llvm-57a90883ca541a90a7a4a22d715832ec0ceb0599.tar.gz llvm-57a90883ca541a90a7a4a22d715832ec0ceb0599.tar.bz2 |
[CodeGen][NPM] Port DetectDeadLanes to NPM (#130567)
-rw-r--r-- | llvm/include/llvm/CodeGen/DetectDeadLanes.h | 8 | ||||
-rw-r--r-- | llvm/include/llvm/InitializePasses.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Passes/CodeGenPassBuilder.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/Passes/MachinePassRegistry.def | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/CodeGen.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/DetectDeadLanes.cpp | 49 | ||||
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 1 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir | 1 |
8 files changed, 47 insertions, 19 deletions
diff --git a/llvm/include/llvm/CodeGen/DetectDeadLanes.h b/llvm/include/llvm/CodeGen/DetectDeadLanes.h index 349bf79..5efe659 100644 --- a/llvm/include/llvm/CodeGen/DetectDeadLanes.h +++ b/llvm/include/llvm/CodeGen/DetectDeadLanes.h @@ -29,6 +29,7 @@ #define LLVM_CODEGEN_DETECTDEADLANES_H #include "llvm/ADT/BitVector.h" +#include "llvm/CodeGen/MachinePassManager.h" #include "llvm/MC/LaneBitmask.h" #include <deque> @@ -115,6 +116,13 @@ private: BitVector DefinedByCopy; }; +class DetectDeadLanesPass : public PassInfoMixin<DetectDeadLanesPass> { +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); + static bool isRequired() { return true; } +}; + } // end namespace llvm #endif // LLVM_CODEGEN_DETECTDEADLANES_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index a05e876..862cdd7 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -89,7 +89,7 @@ void initializeDXILResourceTypeWrapperPassPass(PassRegistry &); void initializeDeadMachineInstructionElimPass(PassRegistry &); void initializeDebugifyMachineModulePass(PassRegistry &); void initializeDependenceAnalysisWrapperPassPass(PassRegistry &); -void initializeDetectDeadLanesPass(PassRegistry &); +void initializeDetectDeadLanesLegacyPass(PassRegistry &); void initializeDomOnlyPrinterWrapperPassPass(PassRegistry &); void initializeDomOnlyViewerWrapperPassPass(PassRegistry &); void initializeDomPrinterWrapperPassPass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h index 25899d0..10a97b5 100644 --- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h +++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h @@ -26,6 +26,7 @@ #include "llvm/CodeGen/CallBrPrepare.h" #include "llvm/CodeGen/CodeGenPrepare.h" #include "llvm/CodeGen/DeadMachineInstructionElim.h" +#include "llvm/CodeGen/DetectDeadLanes.h" #include "llvm/CodeGen/DwarfEHPrepare.h" #include "llvm/CodeGen/EarlyIfConversion.h" #include "llvm/CodeGen/ExpandLargeDivRem.h" diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index f99a5f2..33b2fd0 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -138,6 +138,7 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis()) #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) #endif MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass()) +MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass()) MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass()) MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass()) MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass()) @@ -249,7 +250,6 @@ DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass) DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass) DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass) DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass) -DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass) DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter) DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass) DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index beb7fb2..54823c1 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -33,7 +33,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeCodeGenPrepareLegacyPassPass(Registry); initializeDeadMachineInstructionElimPass(Registry); initializeDebugifyMachineModulePass(Registry); - initializeDetectDeadLanesPass(Registry); + initializeDetectDeadLanesLegacyPass(Registry); initializeDwarfEHPrepareLegacyPassPass(Registry); initializeEarlyIfConverterLegacyPass(Registry); initializeEarlyIfPredicatorPass(Registry); diff --git a/llvm/lib/CodeGen/DetectDeadLanes.cpp b/llvm/lib/CodeGen/DetectDeadLanes.cpp index 01da473..d2522fd 100644 --- a/llvm/lib/CodeGen/DetectDeadLanes.cpp +++ b/llvm/lib/CodeGen/DetectDeadLanes.cpp @@ -373,19 +373,9 @@ LaneBitmask DeadLaneDetector::determineInitialUsedLanes(Register Reg) { namespace { -class DetectDeadLanes : public MachineFunctionPass { +class DetectDeadLanes { public: - bool runOnMachineFunction(MachineFunction &MF) override; - - static char ID; - DetectDeadLanes() : MachineFunctionPass(ID) {} - - StringRef getPassName() const override { return "Detect Dead Lanes"; } - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.setPreservesCFG(); - MachineFunctionPass::getAnalysisUsage(AU); - } + bool run(MachineFunction &MF); private: /// update the operand status. @@ -407,12 +397,29 @@ private: const TargetRegisterInfo *TRI = nullptr; }; +struct DetectDeadLanesLegacy : public MachineFunctionPass { + static char ID; + DetectDeadLanesLegacy() : MachineFunctionPass(ID) {} + + StringRef getPassName() const override { return "Detect Dead Lanes"; } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesCFG(); + MachineFunctionPass::getAnalysisUsage(AU); + } + + bool runOnMachineFunction(MachineFunction &MF) override { + return DetectDeadLanes().run(MF); + } +}; + } // end anonymous namespace -char DetectDeadLanes::ID = 0; -char &llvm::DetectDeadLanesID = DetectDeadLanes::ID; +char DetectDeadLanesLegacy::ID = 0; +char &llvm::DetectDeadLanesID = DetectDeadLanesLegacy::ID; -INITIALIZE_PASS(DetectDeadLanes, DEBUG_TYPE, "Detect Dead Lanes", false, false) +INITIALIZE_PASS(DetectDeadLanesLegacy, DEBUG_TYPE, "Detect Dead Lanes", false, + false) bool DetectDeadLanes::isUndefRegAtInput( const MachineOperand &MO, const DeadLaneDetector::VRegInfo &RegInfo) const { @@ -537,7 +544,17 @@ DetectDeadLanes::modifySubRegisterOperandStatus(const DeadLaneDetector &DLD, return std::make_pair(Changed, Again); } -bool DetectDeadLanes::runOnMachineFunction(MachineFunction &MF) { +PreservedAnalyses +DetectDeadLanesPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + if (!DetectDeadLanes().run(MF)) + return PreservedAnalyses::all(); + auto PA = getMachineFunctionPassPreservedAnalyses(); + PA.preserveSet<CFGAnalyses>(); + return PA; +} + +bool DetectDeadLanes::run(MachineFunction &MF) { // Don't bother if we won't track subregister liveness later. This pass is // required for correctness if subregister liveness is enabled because the // register coalescer cannot deal with hidden dead defs. However without diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 8080059..1f1e956 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -84,6 +84,7 @@ #include "llvm/CodeGen/CodeGenPrepare.h" #include "llvm/CodeGen/ComplexDeinterleavingPass.h" #include "llvm/CodeGen/DeadMachineInstructionElim.h" +#include "llvm/CodeGen/DetectDeadLanes.h" #include "llvm/CodeGen/DwarfEHPrepare.h" #include "llvm/CodeGen/EarlyIfConversion.h" #include "llvm/CodeGen/EdgeBundles.h" diff --git a/llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir b/llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir index f58c7d35..df64d24 100644 --- a/llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir +++ b/llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir @@ -1,4 +1,5 @@ # RUN: llc -mtriple=amdgcn -run-pass detect-dead-lanes -o - %s | FileCheck %s +# RUN: llc -mtriple=amdgcn -passes detect-dead-lanes -o - %s | FileCheck %s ... --- # Combined use/def transfer check, the basics. |