aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorAkshat Oke <Akshat.Oke@amd.com>2025-02-05 17:54:57 +0530
committerGitHub <noreply@github.com>2025-02-05 17:54:57 +0530
commitf77f777f35c4d60573c75701eda8ddbaee070c21 (patch)
tree072a59df474af6ef95ab5aacd29f1559a4abc97d /llvm/lib/CodeGen
parent7945a33a103bbb756ae284237bb7dc577cfa1be4 (diff)
downloadllvm-f77f777f35c4d60573c75701eda8ddbaee070c21.zip
llvm-f77f777f35c4d60573c75701eda8ddbaee070c21.tar.gz
llvm-f77f777f35c4d60573c75701eda8ddbaee070c21.tar.bz2
[CodeGen][NewPM] Port RenameIndependentSubregs to NPM (#125192)
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/CodeGen.cpp2
-rw-r--r--llvm/lib/CodeGen/RenameIndependentSubregs.cpp69
2 files changed, 47 insertions, 24 deletions
diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 37972de..5955d0fc 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -119,7 +119,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
initializeRegisterCoalescerLegacyPass(Registry);
initializeRemoveLoadsIntoFakeUsesPass(Registry);
initializeRemoveRedundantDebugValuesPass(Registry);
- initializeRenameIndependentSubregsPass(Registry);
+ initializeRenameIndependentSubregsLegacyPass(Registry);
initializeSafeStackLegacyPassPass(Registry);
initializeSelectOptimizePass(Registry);
initializeShadowStackGCLoweringPass(Registry);
diff --git a/llvm/lib/CodeGen/RenameIndependentSubregs.cpp b/llvm/lib/CodeGen/RenameIndependentSubregs.cpp
index 0128f87..58f212e 100644
--- a/llvm/lib/CodeGen/RenameIndependentSubregs.cpp
+++ b/llvm/lib/CodeGen/RenameIndependentSubregs.cpp
@@ -26,6 +26,7 @@
//
//===----------------------------------------------------------------------===//
+#include "llvm/CodeGen/RenameIndependentSubregs.h"
#include "LiveRangeUtils.h"
#include "PHIEliminationUtils.h"
#include "llvm/CodeGen/LiveInterval.h"
@@ -43,25 +44,11 @@ using namespace llvm;
namespace {
-class RenameIndependentSubregs : public MachineFunctionPass {
+class RenameIndependentSubregs {
public:
- static char ID;
- RenameIndependentSubregs() : MachineFunctionPass(ID) {}
-
- StringRef getPassName() const override {
- return "Rename Disconnected Subregister Components";
- }
-
- void getAnalysisUsage(AnalysisUsage &AU) const override {
- AU.setPreservesCFG();
- AU.addRequired<LiveIntervalsWrapperPass>();
- AU.addPreserved<LiveIntervalsWrapperPass>();
- AU.addRequired<SlotIndexesWrapperPass>();
- AU.addPreserved<SlotIndexesWrapperPass>();
- MachineFunctionPass::getAnalysisUsage(AU);
- }
+ RenameIndependentSubregs(LiveIntervals *LIS) : LIS(LIS) {}
- bool runOnMachineFunction(MachineFunction &MF) override;
+ bool run(MachineFunction &MF);
private:
struct SubRangeInfo {
@@ -106,17 +93,36 @@ private:
const TargetInstrInfo *TII = nullptr;
};
+class RenameIndependentSubregsLegacy : public MachineFunctionPass {
+public:
+ static char ID;
+ RenameIndependentSubregsLegacy() : MachineFunctionPass(ID) {}
+ bool runOnMachineFunction(MachineFunction &MF) override;
+ StringRef getPassName() const override {
+ return "Rename Disconnected Subregister Components";
+ }
+
+ void getAnalysisUsage(AnalysisUsage &AU) const override {
+ AU.setPreservesCFG();
+ AU.addRequired<LiveIntervalsWrapperPass>();
+ AU.addPreserved<LiveIntervalsWrapperPass>();
+ AU.addRequired<SlotIndexesWrapperPass>();
+ AU.addPreserved<SlotIndexesWrapperPass>();
+ MachineFunctionPass::getAnalysisUsage(AU);
+ }
+};
+
} // end anonymous namespace
-char RenameIndependentSubregs::ID;
+char RenameIndependentSubregsLegacy::ID;
-char &llvm::RenameIndependentSubregsID = RenameIndependentSubregs::ID;
+char &llvm::RenameIndependentSubregsID = RenameIndependentSubregsLegacy::ID;
-INITIALIZE_PASS_BEGIN(RenameIndependentSubregs, DEBUG_TYPE,
+INITIALIZE_PASS_BEGIN(RenameIndependentSubregsLegacy, DEBUG_TYPE,
"Rename Independent Subregisters", false, false)
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
-INITIALIZE_PASS_END(RenameIndependentSubregs, DEBUG_TYPE,
+INITIALIZE_PASS_END(RenameIndependentSubregsLegacy, DEBUG_TYPE,
"Rename Independent Subregisters", false, false)
bool RenameIndependentSubregs::renameComponents(LiveInterval &LI) const {
@@ -381,7 +387,25 @@ void RenameIndependentSubregs::computeMainRangesFixFlags(
}
}
-bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
+PreservedAnalyses
+RenameIndependentSubregsPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ auto &LIS = MFAM.getResult<LiveIntervalsAnalysis>(MF);
+ if (!RenameIndependentSubregs(&LIS).run(MF))
+ return PreservedAnalyses::all();
+ auto PA = getMachineFunctionPassPreservedAnalyses();
+ PA.preserveSet<CFGAnalyses>();
+ PA.preserve<LiveIntervalsAnalysis>();
+ PA.preserve<SlotIndexesAnalysis>();
+ return PA;
+}
+
+bool RenameIndependentSubregsLegacy::runOnMachineFunction(MachineFunction &MF) {
+ auto &LIS = getAnalysis<LiveIntervalsWrapperPass>().getLIS();
+ return RenameIndependentSubregs(&LIS).run(MF);
+}
+
+bool RenameIndependentSubregs::run(MachineFunction &MF) {
// Skip renaming if liveness of subregister is not tracked.
MRI = &MF.getRegInfo();
if (!MRI->subRegLivenessEnabled())
@@ -390,7 +414,6 @@ bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
LLVM_DEBUG(dbgs() << "Renaming independent subregister live ranges in "
<< MF.getName() << '\n');
- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
TII = MF.getSubtarget().getInstrInfo();
// Iterate over all vregs. Note that we query getNumVirtRegs() the newly