[llvm] [CodeGen][NewPM] Port LiveDebugVariables to NPM (PR #115468)
Akshat Oke via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 22 03:58:57 PST 2024
https://github.com/optimisan updated https://github.com/llvm/llvm-project/pull/115468
>From 231fddb12611e67a58ec471ac2b3d5d76dc286a6 Mon Sep 17 00:00:00 2001
From: Akshat Oke <Akshat.Oke at amd.com>
Date: Fri, 8 Nov 2024 11:46:15 +0000
Subject: [PATCH 1/2] [CodeGen][NewPM] Port LiveDebugVariables to NPM
---
.../include/llvm/CodeGen/LiveDebugVariables.h | 49 +++++++++--
llvm/include/llvm/InitializePasses.h | 2 +-
llvm/lib/CodeGen/CodeGen.cpp | 2 +-
llvm/lib/CodeGen/LiveDebugVariables.cpp | 88 +++++++++++--------
llvm/lib/CodeGen/RegAllocBasic.cpp | 6 +-
llvm/lib/CodeGen/RegAllocGreedy.cpp | 8 +-
llvm/lib/CodeGen/RegAllocGreedy.h | 3 +-
llvm/lib/CodeGen/StackSlotColoring.cpp | 2 +-
llvm/lib/CodeGen/VirtRegMap.cpp | 8 +-
.../LoongArchDeadRegisterDefinitions.cpp | 2 +-
.../RISCV/RISCVDeadRegisterDefinitions.cpp | 2 +-
llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp | 2 +-
12 files changed, 114 insertions(+), 60 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/LiveDebugVariables.h b/llvm/include/llvm/CodeGen/LiveDebugVariables.h
index a4b5a87fd3887a..81dcd22d214fc7 100644
--- a/llvm/include/llvm/CodeGen/LiveDebugVariables.h
+++ b/llvm/include/llvm/CodeGen/LiveDebugVariables.h
@@ -21,7 +21,9 @@
#define LLVM_CODEGEN_LIVEDEBUGVARIABLES_H
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/IR/PassManager.h"
#include "llvm/Support/Compiler.h"
+#include <memory>
namespace llvm {
@@ -29,15 +31,24 @@ template <typename T> class ArrayRef;
class LiveIntervals;
class VirtRegMap;
-class LiveDebugVariables : public MachineFunctionPass {
- void *pImpl = nullptr;
+class LiveDebugVariables {
+private:
+ void *PImpl;
public:
- static char ID; // Pass identification, replacement for typeid
+ LiveDebugVariables() = default;
+ ~LiveDebugVariables();
+
+ LiveDebugVariables(LiveDebugVariables &&Other) : PImpl(Other.PImpl) {
+ Other.PImpl = nullptr;
+ }
+
+ LiveDebugVariables &operator=(LiveDebugVariables &&Other);
- LiveDebugVariables();
- ~LiveDebugVariables() override;
+ LiveDebugVariables &operator=(const LiveDebugVariables &) = delete;
+ LiveDebugVariables(const LiveDebugVariables &) = delete;
+ void analyze(MachineFunction &MF, LiveIntervals *LIS);
/// splitRegister - Move any user variables in OldReg to the live ranges in
/// NewRegs where they are live. Mark the values as unavailable where no new
/// register is live.
@@ -52,9 +63,23 @@ class LiveDebugVariables : public MachineFunctionPass {
/// dump - Print data structures to dbgs().
void dump() const;
-private:
+ void releaseMemory();
+};
+
+class LiveDebugVariablesWrapperPass : public MachineFunctionPass {
+ std::unique_ptr<LiveDebugVariables> Impl;
+
+public:
+ static char ID; // Pass identification, replacement for typeid
+
+ LiveDebugVariablesWrapperPass();
+
bool runOnMachineFunction(MachineFunction &) override;
- void releaseMemory() override;
+
+ LiveDebugVariables &getLDV() { return *Impl; }
+ const LiveDebugVariables &getLDV() const { return *Impl; }
+
+ void releaseMemory() override { Impl->releaseMemory(); }
void getAnalysisUsage(AnalysisUsage &) const override;
MachineFunctionProperties getSetProperties() const override {
@@ -63,6 +88,16 @@ class LiveDebugVariables : public MachineFunctionPass {
}
};
+class LiveDebugVariablesAnalysis
+ : public AnalysisInfoMixin<LiveDebugVariablesAnalysis> {
+ friend AnalysisInfoMixin<LiveDebugVariablesAnalysis>;
+ static AnalysisKey Key;
+
+public:
+ using Result = LiveDebugVariables;
+ Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
+};
+
} // end namespace llvm
#endif // LLVM_CODEGEN_LIVEDEBUGVARIABLES_H
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index af93d5e989f654..594421e3f06cd3 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -154,7 +154,7 @@ void initializeLegalizerPass(PassRegistry &);
void initializeGISelCSEAnalysisWrapperPassPass(PassRegistry &);
void initializeGISelKnownBitsAnalysisPass(PassRegistry &);
void initializeLiveDebugValuesPass(PassRegistry &);
-void initializeLiveDebugVariablesPass(PassRegistry &);
+void initializeLiveDebugVariablesWrapperPassPass(PassRegistry &);
void initializeLiveIntervalsWrapperPassPass(PassRegistry &);
void initializeLiveRangeShrinkPass(PassRegistry &);
void initializeLiveRegMatrixWrapperLegacyPass(PassRegistry &);
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 408395fefc298a..07605a54b31934 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -59,7 +59,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeInterleavedAccessPass(Registry);
initializeJMCInstrumenterPass(Registry);
initializeLiveDebugValuesPass(Registry);
- initializeLiveDebugVariablesPass(Registry);
+ initializeLiveDebugVariablesWrapperPassPass(Registry);
initializeLiveIntervalsWrapperPassPass(Registry);
initializeLiveRangeShrinkPass(Registry);
initializeLiveStacksPass(Registry);
diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp
index 2ff346d3fd0223..6b26e8c9555d24 100644
--- a/llvm/lib/CodeGen/LiveDebugVariables.cpp
+++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp
@@ -74,24 +74,25 @@ EnableLDV("live-debug-variables", cl::init(true),
STATISTIC(NumInsertedDebugValues, "Number of DBG_VALUEs inserted");
STATISTIC(NumInsertedDebugLabels, "Number of DBG_LABELs inserted");
-char LiveDebugVariables::ID = 0;
+char LiveDebugVariablesWrapperPass::ID = 0;
-INITIALIZE_PASS_BEGIN(LiveDebugVariables, DEBUG_TYPE,
- "Debug Variable Analysis", false, false)
+INITIALIZE_PASS_BEGIN(LiveDebugVariablesWrapperPass, DEBUG_TYPE,
+ "Debug Variable Analysis", false, false)
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
-INITIALIZE_PASS_END(LiveDebugVariables, DEBUG_TYPE,
- "Debug Variable Analysis", false, false)
+INITIALIZE_PASS_END(LiveDebugVariablesWrapperPass, DEBUG_TYPE,
+ "Debug Variable Analysis", false, false)
-void LiveDebugVariables::getAnalysisUsage(AnalysisUsage &AU) const {
+void LiveDebugVariablesWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<MachineDominatorTreeWrapperPass>();
AU.addRequiredTransitive<LiveIntervalsWrapperPass>();
AU.setPreservesAll();
MachineFunctionPass::getAnalysisUsage(AU);
}
-LiveDebugVariables::LiveDebugVariables() : MachineFunctionPass(ID) {
- initializeLiveDebugVariablesPass(*PassRegistry::getPassRegistry());
+LiveDebugVariablesWrapperPass::LiveDebugVariablesWrapperPass()
+ : MachineFunctionPass(ID) {
+ initializeLiveDebugVariablesWrapperPassPass(*PassRegistry::getPassRegistry());
}
enum : unsigned { UndefLocNo = ~0U };
@@ -530,7 +531,6 @@ class UserLabel {
/// Implementation of the LiveDebugVariables pass.
class LDVImpl {
- LiveDebugVariables &pass;
LocMap::Allocator allocator;
MachineFunction *MF = nullptr;
LiveIntervals *LIS;
@@ -634,7 +634,7 @@ class LDVImpl {
void computeIntervals();
public:
- LDVImpl(LiveDebugVariables *ps) : pass(*ps) {}
+ LDVImpl(LiveIntervals *LIS) : LIS(LIS) {}
bool runOnMachineFunction(MachineFunction &mf, bool InstrRef);
@@ -1263,7 +1263,6 @@ void LDVImpl::computeIntervals() {
bool LDVImpl::runOnMachineFunction(MachineFunction &mf, bool InstrRef) {
clear();
MF = &mf;
- LIS = &pass.getAnalysis<LiveIntervalsWrapperPass>().getLIS();
TRI = mf.getSubtarget().getRegisterInfo();
LLVM_DEBUG(dbgs() << "********** COMPUTING LIVE DEBUG VARIABLES: "
<< mf.getName() << " **********\n");
@@ -1298,31 +1297,50 @@ static void removeDebugInstrs(MachineFunction &mf) {
}
}
-bool LiveDebugVariables::runOnMachineFunction(MachineFunction &mf) {
- if (!EnableLDV)
- return false;
- if (!mf.getFunction().getSubprogram()) {
- removeDebugInstrs(mf);
- return false;
- }
+bool LiveDebugVariablesWrapperPass::runOnMachineFunction(MachineFunction &mf) {
+ auto *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
- // Have we been asked to track variable locations using instruction
- // referencing?
- bool InstrRef = mf.useDebugInstrRef();
+ Impl = std::make_unique<LiveDebugVariables>();
+ Impl->analyze(mf, LIS);
+ return false;
+}
+
+AnalysisKey LiveDebugVariablesAnalysis::Key;
+
+LiveDebugVariables
+LiveDebugVariablesAnalysis::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto *LIS = &MFAM.getResult<LiveIntervalsAnalysis>(MF);
+ LiveDebugVariables LDV;
+ LDV.analyze(MF, LIS);
+ return LDV;
+}
- if (!pImpl)
- pImpl = new LDVImpl(this);
- return static_cast<LDVImpl *>(pImpl)->runOnMachineFunction(mf, InstrRef);
+LiveDebugVariables::~LiveDebugVariables() {
+ if (PImpl)
+ delete static_cast<LDVImpl *>(PImpl);
}
void LiveDebugVariables::releaseMemory() {
- if (pImpl)
- static_cast<LDVImpl*>(pImpl)->clear();
+ if (PImpl)
+ static_cast<LDVImpl *>(PImpl)->clear();
}
-LiveDebugVariables::~LiveDebugVariables() {
- if (pImpl)
- delete static_cast<LDVImpl*>(pImpl);
+void LiveDebugVariables::analyze(MachineFunction &MF, LiveIntervals *LIS) {
+ if (!EnableLDV)
+ return;
+ if (!MF.getFunction().getSubprogram()) {
+ removeDebugInstrs(MF);
+ return;
+ }
+
+ if (!PImpl)
+ PImpl = new LDVImpl(LIS); // reuse same object across analysis runs
+
+ // Have we been asked to track variable locations using instruction
+ // referencing?
+ bool InstrRef = MF.useDebugInstrRef();
+ static_cast<LDVImpl *>(PImpl)->runOnMachineFunction(MF, InstrRef);
}
//===----------------------------------------------------------------------===//
@@ -1504,8 +1522,8 @@ void LDVImpl::splitRegister(Register OldReg, ArrayRef<Register> NewRegs) {
void LiveDebugVariables::
splitRegister(Register OldReg, ArrayRef<Register> NewRegs, LiveIntervals &LIS) {
- if (pImpl)
- static_cast<LDVImpl*>(pImpl)->splitRegister(OldReg, NewRegs);
+ if (PImpl)
+ static_cast<LDVImpl *>(PImpl)->splitRegister(OldReg, NewRegs);
}
void UserValue::rewriteLocations(VirtRegMap &VRM, const MachineFunction &MF,
@@ -1956,13 +1974,13 @@ void LDVImpl::emitDebugValues(VirtRegMap *VRM) {
}
void LiveDebugVariables::emitDebugValues(VirtRegMap *VRM) {
- if (pImpl)
- static_cast<LDVImpl*>(pImpl)->emitDebugValues(VRM);
+ if (PImpl)
+ static_cast<LDVImpl *>(PImpl)->emitDebugValues(VRM);
}
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void LiveDebugVariables::dump() const {
- if (pImpl)
- static_cast<LDVImpl*>(pImpl)->print(dbgs());
+ if (PImpl)
+ static_cast<LDVImpl *>(PImpl)->print(dbgs());
}
#endif
diff --git a/llvm/lib/CodeGen/RegAllocBasic.cpp b/llvm/lib/CodeGen/RegAllocBasic.cpp
index 55d806e768b910..647bbdb66a3fe6 100644
--- a/llvm/lib/CodeGen/RegAllocBasic.cpp
+++ b/llvm/lib/CodeGen/RegAllocBasic.cpp
@@ -130,7 +130,7 @@ char &llvm::RABasicID = RABasic::ID;
INITIALIZE_PASS_BEGIN(RABasic, "regallocbasic", "Basic Register Allocator",
false, false)
-INITIALIZE_PASS_DEPENDENCY(LiveDebugVariables)
+INITIALIZE_PASS_DEPENDENCY(LiveDebugVariablesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
INITIALIZE_PASS_DEPENDENCY(RegisterCoalescer)
@@ -180,8 +180,8 @@ void RABasic::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<LiveIntervalsWrapperPass>();
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addRequired<LiveDebugVariables>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addRequired<LiveDebugVariablesWrapperPass>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
AU.addRequired<LiveStacks>();
AU.addPreserved<LiveStacks>();
AU.addRequired<ProfileSummaryInfoWrapperPass>();
diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp
index 80f7af1eaebbe0..4248672bbef5c3 100644
--- a/llvm/lib/CodeGen/RegAllocGreedy.cpp
+++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp
@@ -151,7 +151,7 @@ char &llvm::RAGreedyID = RAGreedy::ID;
INITIALIZE_PASS_BEGIN(RAGreedy, "greedy",
"Greedy Register Allocator", false, false)
-INITIALIZE_PASS_DEPENDENCY(LiveDebugVariables)
+INITIALIZE_PASS_DEPENDENCY(LiveDebugVariablesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
INITIALIZE_PASS_DEPENDENCY(RegisterCoalescer)
@@ -204,8 +204,8 @@ void RAGreedy::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addRequired<SlotIndexesWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addRequired<LiveDebugVariables>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addRequired<LiveDebugVariablesWrapperPass>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
AU.addRequired<LiveStacks>();
AU.addPreserved<LiveStacks>();
AU.addRequired<MachineDominatorTreeWrapperPass>();
@@ -2732,7 +2732,7 @@ bool RAGreedy::runOnMachineFunction(MachineFunction &mf) {
Loops = &getAnalysis<MachineLoopInfoWrapperPass>().getLI();
Bundles = &getAnalysis<EdgeBundles>();
SpillPlacer = &getAnalysis<SpillPlacement>();
- DebugVars = &getAnalysis<LiveDebugVariables>();
+ DebugVars = &getAnalysis<LiveDebugVariablesWrapperPass>().getLDV();
initializeCSRCost();
diff --git a/llvm/lib/CodeGen/RegAllocGreedy.h b/llvm/lib/CodeGen/RegAllocGreedy.h
index 2e7608a53e9cec..c88892574ff4da 100644
--- a/llvm/lib/CodeGen/RegAllocGreedy.h
+++ b/llvm/lib/CodeGen/RegAllocGreedy.h
@@ -25,6 +25,7 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/CalcSpillWeights.h"
+#include "llvm/CodeGen/LiveDebugVariables.h"
#include "llvm/CodeGen/LiveInterval.h"
#include "llvm/CodeGen/LiveRangeEdit.h"
#include "llvm/CodeGen/MachineFunction.h"
@@ -42,7 +43,7 @@ namespace llvm {
class AllocationOrder;
class AnalysisUsage;
class EdgeBundles;
-class LiveDebugVariables;
+class LiveDebugVariablesWrapperPass;
class LiveIntervals;
class LiveRegMatrix;
class MachineBasicBlock;
diff --git a/llvm/lib/CodeGen/StackSlotColoring.cpp b/llvm/lib/CodeGen/StackSlotColoring.cpp
index a1fa266354a526..2a3af37b351d76 100644
--- a/llvm/lib/CodeGen/StackSlotColoring.cpp
+++ b/llvm/lib/CodeGen/StackSlotColoring.cpp
@@ -159,7 +159,7 @@ namespace {
// may be invoked multiple times requiring it to save these analyses to be
// used by RA later.
AU.addPreserved<LiveIntervalsWrapperPass>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
diff --git a/llvm/lib/CodeGen/VirtRegMap.cpp b/llvm/lib/CodeGen/VirtRegMap.cpp
index 26a12512c87be0..9cf631cd20ea4c 100644
--- a/llvm/lib/CodeGen/VirtRegMap.cpp
+++ b/llvm/lib/CodeGen/VirtRegMap.cpp
@@ -251,7 +251,7 @@ INITIALIZE_PASS_BEGIN(VirtRegRewriter, "virtregrewriter",
"Virtual Register Rewriter", false, false)
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(LiveDebugVariables)
+INITIALIZE_PASS_DEPENDENCY(LiveDebugVariablesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveRegMatrixWrapperLegacy)
INITIALIZE_PASS_DEPENDENCY(LiveStacks)
INITIALIZE_PASS_DEPENDENCY(VirtRegMapWrapperLegacy)
@@ -264,14 +264,14 @@ void VirtRegRewriter::getAnalysisUsage(AnalysisUsage &AU) const {
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addRequired<SlotIndexesWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addRequired<LiveDebugVariables>();
+ AU.addRequired<LiveDebugVariablesWrapperPass>();
AU.addRequired<LiveStacks>();
AU.addPreserved<LiveStacks>();
AU.addRequired<VirtRegMapWrapperLegacy>();
AU.addRequired<LiveRegMatrixWrapperLegacy>();
if (!ClearVirtRegs)
- AU.addPreserved<LiveDebugVariables>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
@@ -285,7 +285,7 @@ bool VirtRegRewriter::runOnMachineFunction(MachineFunction &fn) {
LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
LRM = &getAnalysis<LiveRegMatrixWrapperLegacy>().getLRM();
VRM = &getAnalysis<VirtRegMapWrapperLegacy>().getVRM();
- DebugVars = &getAnalysis<LiveDebugVariables>();
+ DebugVars = &getAnalysis<LiveDebugVariablesWrapperPass>().getLDV();
LLVM_DEBUG(dbgs() << "********** REWRITE VIRTUAL REGISTERS **********\n"
<< "********** Function: " << MF->getName() << '\n');
LLVM_DEBUG(VRM->dump());
diff --git a/llvm/lib/Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp b/llvm/lib/Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
index f0e6837d49a97b..96f6f7fe492788 100644
--- a/llvm/lib/Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
+++ b/llvm/lib/Target/LoongArch/LoongArchDeadRegisterDefinitions.cpp
@@ -37,7 +37,7 @@ class LoongArchDeadRegisterDefinitions : public MachineFunctionPass {
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addRequired<LiveIntervalsWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
AU.addPreserved<LiveStacks>();
MachineFunctionPass::getAnalysisUsage(AU);
}
diff --git a/llvm/lib/Target/RISCV/RISCVDeadRegisterDefinitions.cpp b/llvm/lib/Target/RISCV/RISCVDeadRegisterDefinitions.cpp
index 4b35f3bb0a524f..a2dbe3faf0e590 100644
--- a/llvm/lib/Target/RISCV/RISCVDeadRegisterDefinitions.cpp
+++ b/llvm/lib/Target/RISCV/RISCVDeadRegisterDefinitions.cpp
@@ -37,7 +37,7 @@ class RISCVDeadRegisterDefinitions : public MachineFunctionPass {
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addRequired<LiveIntervalsWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
AU.addPreserved<LiveStacks>();
MachineFunctionPass::getAnalysisUsage(AU);
}
diff --git a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
index 052b4a61298223..9f42cf4724737b 100644
--- a/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp
@@ -889,7 +889,7 @@ class RISCVInsertVSETVLI : public MachineFunctionPass {
AU.addUsedIfAvailable<LiveIntervalsWrapperPass>();
AU.addPreserved<LiveIntervalsWrapperPass>();
AU.addPreserved<SlotIndexesWrapperPass>();
- AU.addPreserved<LiveDebugVariables>();
+ AU.addPreserved<LiveDebugVariablesWrapperPass>();
AU.addPreserved<LiveStacks>();
MachineFunctionPass::getAnalysisUsage(AU);
>From 63bd16a8390732537a73c6c767194e3e995b11a2 Mon Sep 17 00:00:00 2001
From: Akshat Oke <Akshat.Oke at amd.com>
Date: Fri, 22 Nov 2024 11:56:19 +0000
Subject: [PATCH 2/2] Use unique_ptr
---
llvm/include/llvm/CodeGen/LiveDebugVariables.h | 15 ++++-----------
llvm/lib/CodeGen/LiveDebugVariables.cpp | 18 ++++++++----------
2 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/LiveDebugVariables.h b/llvm/include/llvm/CodeGen/LiveDebugVariables.h
index 81dcd22d214fc7..dc59d1be78b91f 100644
--- a/llvm/include/llvm/CodeGen/LiveDebugVariables.h
+++ b/llvm/include/llvm/CodeGen/LiveDebugVariables.h
@@ -33,20 +33,13 @@ class VirtRegMap;
class LiveDebugVariables {
private:
- void *PImpl;
+ struct Deleter {
+ void operator()(void *Ptr) const;
+ };
+ std::unique_ptr<void, Deleter> PImpl;
public:
LiveDebugVariables() = default;
- ~LiveDebugVariables();
-
- LiveDebugVariables(LiveDebugVariables &&Other) : PImpl(Other.PImpl) {
- Other.PImpl = nullptr;
- }
-
- LiveDebugVariables &operator=(LiveDebugVariables &&Other);
-
- LiveDebugVariables &operator=(const LiveDebugVariables &) = delete;
- LiveDebugVariables(const LiveDebugVariables &) = delete;
void analyze(MachineFunction &MF, LiveIntervals *LIS);
/// splitRegister - Move any user variables in OldReg to the live ranges in
diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp
index 6b26e8c9555d24..68acec5555c15f 100644
--- a/llvm/lib/CodeGen/LiveDebugVariables.cpp
+++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp
@@ -1316,14 +1316,13 @@ LiveDebugVariablesAnalysis::run(MachineFunction &MF,
return LDV;
}
-LiveDebugVariables::~LiveDebugVariables() {
- if (PImpl)
- delete static_cast<LDVImpl *>(PImpl);
+void LiveDebugVariables::Deleter::operator()(void *Ptr) const {
+ delete static_cast<LDVImpl *>(Ptr);
}
void LiveDebugVariables::releaseMemory() {
if (PImpl)
- static_cast<LDVImpl *>(PImpl)->clear();
+ static_cast<LDVImpl *>(PImpl.get())->clear();
}
void LiveDebugVariables::analyze(MachineFunction &MF, LiveIntervals *LIS) {
@@ -1334,13 +1333,12 @@ void LiveDebugVariables::analyze(MachineFunction &MF, LiveIntervals *LIS) {
return;
}
- if (!PImpl)
- PImpl = new LDVImpl(LIS); // reuse same object across analysis runs
+ PImpl.reset(new LDVImpl(LIS));
// Have we been asked to track variable locations using instruction
// referencing?
bool InstrRef = MF.useDebugInstrRef();
- static_cast<LDVImpl *>(PImpl)->runOnMachineFunction(MF, InstrRef);
+ static_cast<LDVImpl *>(PImpl.get())->runOnMachineFunction(MF, InstrRef);
}
//===----------------------------------------------------------------------===//
@@ -1523,7 +1521,7 @@ void LDVImpl::splitRegister(Register OldReg, ArrayRef<Register> NewRegs) {
void LiveDebugVariables::
splitRegister(Register OldReg, ArrayRef<Register> NewRegs, LiveIntervals &LIS) {
if (PImpl)
- static_cast<LDVImpl *>(PImpl)->splitRegister(OldReg, NewRegs);
+ static_cast<LDVImpl *>(PImpl.get())->splitRegister(OldReg, NewRegs);
}
void UserValue::rewriteLocations(VirtRegMap &VRM, const MachineFunction &MF,
@@ -1975,12 +1973,12 @@ void LDVImpl::emitDebugValues(VirtRegMap *VRM) {
void LiveDebugVariables::emitDebugValues(VirtRegMap *VRM) {
if (PImpl)
- static_cast<LDVImpl *>(PImpl)->emitDebugValues(VRM);
+ static_cast<LDVImpl *>(PImpl.get())->emitDebugValues(VRM);
}
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void LiveDebugVariables::dump() const {
if (PImpl)
- static_cast<LDVImpl *>(PImpl)->print(dbgs());
+ static_cast<LDVImpl *>(PImpl.get())->print(dbgs());
}
#endif
More information about the llvm-commits
mailing list