Skip to content

Commit 57a9088

Browse files
authored
[CodeGen][NPM] Port DetectDeadLanes to NPM (#130567)
1 parent 8d7cb5d commit 57a9088

File tree

8 files changed

+47
-19
lines changed

8 files changed

+47
-19
lines changed

llvm/include/llvm/CodeGen/DetectDeadLanes.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#define LLVM_CODEGEN_DETECTDEADLANES_H
3030

3131
#include "llvm/ADT/BitVector.h"
32+
#include "llvm/CodeGen/MachinePassManager.h"
3233
#include "llvm/MC/LaneBitmask.h"
3334
#include <deque>
3435

@@ -115,6 +116,13 @@ class DeadLaneDetector {
115116
BitVector DefinedByCopy;
116117
};
117118

119+
class DetectDeadLanesPass : public PassInfoMixin<DetectDeadLanesPass> {
120+
public:
121+
PreservedAnalyses run(MachineFunction &MF,
122+
MachineFunctionAnalysisManager &MFAM);
123+
static bool isRequired() { return true; }
124+
};
125+
118126
} // end namespace llvm
119127

120128
#endif // LLVM_CODEGEN_DETECTDEADLANES_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void initializeDXILResourceTypeWrapperPassPass(PassRegistry &);
8989
void initializeDeadMachineInstructionElimPass(PassRegistry &);
9090
void initializeDebugifyMachineModulePass(PassRegistry &);
9191
void initializeDependenceAnalysisWrapperPassPass(PassRegistry &);
92-
void initializeDetectDeadLanesPass(PassRegistry &);
92+
void initializeDetectDeadLanesLegacyPass(PassRegistry &);
9393
void initializeDomOnlyPrinterWrapperPassPass(PassRegistry &);
9494
void initializeDomOnlyViewerWrapperPassPass(PassRegistry &);
9595
void initializeDomPrinterWrapperPassPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "llvm/CodeGen/CallBrPrepare.h"
2727
#include "llvm/CodeGen/CodeGenPrepare.h"
2828
#include "llvm/CodeGen/DeadMachineInstructionElim.h"
29+
#include "llvm/CodeGen/DetectDeadLanes.h"
2930
#include "llvm/CodeGen/DwarfEHPrepare.h"
3031
#include "llvm/CodeGen/EarlyIfConversion.h"
3132
#include "llvm/CodeGen/ExpandLargeDivRem.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
138138
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
139139
#endif
140140
MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass())
141+
MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass())
141142
MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass())
142143
MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass())
143144
MACHINE_FUNCTION_PASS("early-tailduplication", EarlyTailDuplicatePass())
@@ -249,7 +250,6 @@ DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass)
249250
DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass)
250251
DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass)
251252
DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass)
252-
DUMMY_MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass)
253253
DUMMY_MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinter)
254254
DUMMY_MACHINE_FUNCTION_PASS("fentry-insert", FEntryInserterPass)
255255
DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
3333
initializeCodeGenPrepareLegacyPassPass(Registry);
3434
initializeDeadMachineInstructionElimPass(Registry);
3535
initializeDebugifyMachineModulePass(Registry);
36-
initializeDetectDeadLanesPass(Registry);
36+
initializeDetectDeadLanesLegacyPass(Registry);
3737
initializeDwarfEHPrepareLegacyPassPass(Registry);
3838
initializeEarlyIfConverterLegacyPass(Registry);
3939
initializeEarlyIfPredicatorPass(Registry);

llvm/lib/CodeGen/DetectDeadLanes.cpp

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -373,19 +373,9 @@ LaneBitmask DeadLaneDetector::determineInitialUsedLanes(Register Reg) {
373373

374374
namespace {
375375

376-
class DetectDeadLanes : public MachineFunctionPass {
376+
class DetectDeadLanes {
377377
public:
378-
bool runOnMachineFunction(MachineFunction &MF) override;
379-
380-
static char ID;
381-
DetectDeadLanes() : MachineFunctionPass(ID) {}
382-
383-
StringRef getPassName() const override { return "Detect Dead Lanes"; }
384-
385-
void getAnalysisUsage(AnalysisUsage &AU) const override {
386-
AU.setPreservesCFG();
387-
MachineFunctionPass::getAnalysisUsage(AU);
388-
}
378+
bool run(MachineFunction &MF);
389379

390380
private:
391381
/// update the operand status.
@@ -407,12 +397,29 @@ class DetectDeadLanes : public MachineFunctionPass {
407397
const TargetRegisterInfo *TRI = nullptr;
408398
};
409399

400+
struct DetectDeadLanesLegacy : public MachineFunctionPass {
401+
static char ID;
402+
DetectDeadLanesLegacy() : MachineFunctionPass(ID) {}
403+
404+
StringRef getPassName() const override { return "Detect Dead Lanes"; }
405+
406+
void getAnalysisUsage(AnalysisUsage &AU) const override {
407+
AU.setPreservesCFG();
408+
MachineFunctionPass::getAnalysisUsage(AU);
409+
}
410+
411+
bool runOnMachineFunction(MachineFunction &MF) override {
412+
return DetectDeadLanes().run(MF);
413+
}
414+
};
415+
410416
} // end anonymous namespace
411417

412-
char DetectDeadLanes::ID = 0;
413-
char &llvm::DetectDeadLanesID = DetectDeadLanes::ID;
418+
char DetectDeadLanesLegacy::ID = 0;
419+
char &llvm::DetectDeadLanesID = DetectDeadLanesLegacy::ID;
414420

415-
INITIALIZE_PASS(DetectDeadLanes, DEBUG_TYPE, "Detect Dead Lanes", false, false)
421+
INITIALIZE_PASS(DetectDeadLanesLegacy, DEBUG_TYPE, "Detect Dead Lanes", false,
422+
false)
416423

417424
bool DetectDeadLanes::isUndefRegAtInput(
418425
const MachineOperand &MO, const DeadLaneDetector::VRegInfo &RegInfo) const {
@@ -537,7 +544,17 @@ DetectDeadLanes::modifySubRegisterOperandStatus(const DeadLaneDetector &DLD,
537544
return std::make_pair(Changed, Again);
538545
}
539546

540-
bool DetectDeadLanes::runOnMachineFunction(MachineFunction &MF) {
547+
PreservedAnalyses
548+
DetectDeadLanesPass::run(MachineFunction &MF,
549+
MachineFunctionAnalysisManager &MFAM) {
550+
if (!DetectDeadLanes().run(MF))
551+
return PreservedAnalyses::all();
552+
auto PA = getMachineFunctionPassPreservedAnalyses();
553+
PA.preserveSet<CFGAnalyses>();
554+
return PA;
555+
}
556+
557+
bool DetectDeadLanes::run(MachineFunction &MF) {
541558
// Don't bother if we won't track subregister liveness later. This pass is
542559
// required for correctness if subregister liveness is enabled because the
543560
// register coalescer cannot deal with hidden dead defs. However without

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
#include "llvm/CodeGen/CodeGenPrepare.h"
8585
#include "llvm/CodeGen/ComplexDeinterleavingPass.h"
8686
#include "llvm/CodeGen/DeadMachineInstructionElim.h"
87+
#include "llvm/CodeGen/DetectDeadLanes.h"
8788
#include "llvm/CodeGen/DwarfEHPrepare.h"
8889
#include "llvm/CodeGen/EarlyIfConversion.h"
8990
#include "llvm/CodeGen/EdgeBundles.h"

llvm/test/CodeGen/AMDGPU/detect-dead-lanes.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn -run-pass detect-dead-lanes -o - %s | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn -passes detect-dead-lanes -o - %s | FileCheck %s
23
...
34
---
45
# Combined use/def transfer check, the basics.

0 commit comments

Comments
 (0)