Skip to content

Commit 79a1cda

Browse files
committed
[CodeGen][NewPM] Port RenameIndependentSubregs to NPM
1 parent 422c9b5 commit 79a1cda

9 files changed

+78
-26
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//===- llvm/CodeGen/RenameIndependentSubregs.h ------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_CODEGEN_RENAME_INDEPENDENT_SUBREGS_H
10+
#define LLVM_CODEGEN_RENAME_INDEPENDENT_SUBREGS_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class RenameIndependentSubregsPass
17+
: public PassInfoMixin<RenameIndependentSubregsPass> {
18+
public:
19+
PreservedAnalyses run(MachineFunction &MF,
20+
MachineFunctionAnalysisManager &MFAM);
21+
};
22+
23+
} // namespace llvm
24+
25+
#endif // LLVM_CODEGEN_RENAME_INDEPENDENT_SUBREGS_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ void initializeRegionViewerPass(PassRegistry &);
269269
void initializeRegisterCoalescerLegacyPass(PassRegistry &);
270270
void initializeRemoveLoadsIntoFakeUsesPass(PassRegistry &);
271271
void initializeRemoveRedundantDebugValuesPass(PassRegistry &);
272-
void initializeRenameIndependentSubregsPass(PassRegistry &);
272+
void initializeRenameIndependentSubregsLegacyPass(PassRegistry &);
273273
void initializeReplaceWithVeclibLegacyPass(PassRegistry &);
274274
void initializeResetMachineFunctionPass(PassRegistry &);
275275
void initializeSCEVAAWrapperPassPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
#include "llvm/CodeGen/RegUsageInfoPropagate.h"
6060
#include "llvm/CodeGen/RegisterCoalescerPass.h"
6161
#include "llvm/CodeGen/RegisterUsageInfo.h"
62+
#include "llvm/CodeGen/RenameIndependentSubregs.h"
6263
#include "llvm/CodeGen/ReplaceWithVeclib.h"
6364
#include "llvm/CodeGen/SafeStack.h"
6465
#include "llvm/CodeGen/SelectOptimize.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ MACHINE_FUNCTION_PASS("print<virtregmap>", VirtRegMapPrinterPass(errs()))
165165
MACHINE_FUNCTION_PASS("reg-usage-collector", RegUsageInfoCollectorPass())
166166
MACHINE_FUNCTION_PASS("reg-usage-propagation", RegUsageInfoPropagationPass())
167167
MACHINE_FUNCTION_PASS("register-coalescer", RegisterCoalescerPass())
168+
MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass())
168169
MACHINE_FUNCTION_PASS("require-all-machine-function-properties",
169170
RequireAllMachineFunctionPropertiesPass())
170171
MACHINE_FUNCTION_PASS("stack-coloring", StackColoringPass())
@@ -263,7 +264,6 @@ DUMMY_MACHINE_FUNCTION_PASS("regallocscoringpass", RegAllocScoringPass)
263264
DUMMY_MACHINE_FUNCTION_PASS("regbankselect", RegBankSelectPass)
264265
DUMMY_MACHINE_FUNCTION_PASS("remove-loads-into-fake-uses", RemoveLoadsIntoFakeUsesPass)
265266
DUMMY_MACHINE_FUNCTION_PASS("removeredundantdebugvalues", RemoveRedundantDebugValuesPass)
266-
DUMMY_MACHINE_FUNCTION_PASS("rename-independent-subregs", RenameIndependentSubregsPass)
267267
DUMMY_MACHINE_FUNCTION_PASS("reset-machine-function", ResetMachineFunctionPass)
268268
DUMMY_MACHINE_FUNCTION_PASS("shrink-wrap", ShrinkWrapPass)
269269
DUMMY_MACHINE_FUNCTION_PASS("stack-frame-layout", StackFrameLayoutAnalysisPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
119119
initializeRegisterCoalescerLegacyPass(Registry);
120120
initializeRemoveLoadsIntoFakeUsesPass(Registry);
121121
initializeRemoveRedundantDebugValuesPass(Registry);
122-
initializeRenameIndependentSubregsPass(Registry);
122+
initializeRenameIndependentSubregsLegacyPass(Registry);
123123
initializeSafeStackLegacyPassPass(Registry);
124124
initializeSelectOptimizePass(Registry);
125125
initializeShadowStackGCLoweringPass(Registry);

llvm/lib/CodeGen/RenameIndependentSubregs.cpp

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
//
2727
//===----------------------------------------------------------------------===//
2828

29+
#include "llvm/CodeGen/RenameIndependentSubregs.h"
2930
#include "LiveRangeUtils.h"
3031
#include "PHIEliminationUtils.h"
3132
#include "llvm/CodeGen/LiveInterval.h"
@@ -43,25 +44,11 @@ using namespace llvm;
4344

4445
namespace {
4546

46-
class RenameIndependentSubregs : public MachineFunctionPass {
47+
class RenameIndependentSubregs {
4748
public:
48-
static char ID;
49-
RenameIndependentSubregs() : MachineFunctionPass(ID) {}
50-
51-
StringRef getPassName() const override {
52-
return "Rename Disconnected Subregister Components";
53-
}
54-
55-
void getAnalysisUsage(AnalysisUsage &AU) const override {
56-
AU.setPreservesCFG();
57-
AU.addRequired<LiveIntervalsWrapperPass>();
58-
AU.addPreserved<LiveIntervalsWrapperPass>();
59-
AU.addRequired<SlotIndexesWrapperPass>();
60-
AU.addPreserved<SlotIndexesWrapperPass>();
61-
MachineFunctionPass::getAnalysisUsage(AU);
62-
}
49+
RenameIndependentSubregs(LiveIntervals *LIS) : LIS(LIS) {}
6350

64-
bool runOnMachineFunction(MachineFunction &MF) override;
51+
bool run(MachineFunction &MF);
6552

6653
private:
6754
struct SubRangeInfo {
@@ -106,17 +93,36 @@ class RenameIndependentSubregs : public MachineFunctionPass {
10693
const TargetInstrInfo *TII = nullptr;
10794
};
10895

96+
class RenameIndependentSubregsLegacy : public MachineFunctionPass {
97+
public:
98+
static char ID;
99+
RenameIndependentSubregsLegacy() : MachineFunctionPass(ID) {}
100+
bool runOnMachineFunction(MachineFunction &MF) override;
101+
StringRef getPassName() const override {
102+
return "Rename Disconnected Subregister Components";
103+
}
104+
105+
void getAnalysisUsage(AnalysisUsage &AU) const override {
106+
AU.setPreservesCFG();
107+
AU.addRequired<LiveIntervalsWrapperPass>();
108+
AU.addPreserved<LiveIntervalsWrapperPass>();
109+
AU.addRequired<SlotIndexesWrapperPass>();
110+
AU.addPreserved<SlotIndexesWrapperPass>();
111+
MachineFunctionPass::getAnalysisUsage(AU);
112+
}
113+
};
114+
109115
} // end anonymous namespace
110116

111-
char RenameIndependentSubregs::ID;
117+
char RenameIndependentSubregsLegacy::ID;
112118

113-
char &llvm::RenameIndependentSubregsID = RenameIndependentSubregs::ID;
119+
char &llvm::RenameIndependentSubregsID = RenameIndependentSubregsLegacy::ID;
114120

115-
INITIALIZE_PASS_BEGIN(RenameIndependentSubregs, DEBUG_TYPE,
121+
INITIALIZE_PASS_BEGIN(RenameIndependentSubregsLegacy, DEBUG_TYPE,
116122
"Rename Independent Subregisters", false, false)
117123
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
118124
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
119-
INITIALIZE_PASS_END(RenameIndependentSubregs, DEBUG_TYPE,
125+
INITIALIZE_PASS_END(RenameIndependentSubregsLegacy, DEBUG_TYPE,
120126
"Rename Independent Subregisters", false, false)
121127

122128
bool RenameIndependentSubregs::renameComponents(LiveInterval &LI) const {
@@ -381,7 +387,25 @@ void RenameIndependentSubregs::computeMainRangesFixFlags(
381387
}
382388
}
383389

384-
bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
390+
PreservedAnalyses
391+
RenameIndependentSubregsPass::run(MachineFunction &MF,
392+
MachineFunctionAnalysisManager &MFAM) {
393+
auto &LIS = MFAM.getResult<LiveIntervalsAnalysis>(MF);
394+
if (!RenameIndependentSubregs(&LIS).run(MF))
395+
return PreservedAnalyses::all();
396+
auto PA = getMachineFunctionPassPreservedAnalyses();
397+
PA.preserveSet<CFGAnalyses>();
398+
PA.preserve<LiveIntervalsAnalysis>();
399+
PA.preserve<SlotIndexesAnalysis>();
400+
return PA;
401+
}
402+
403+
bool RenameIndependentSubregsLegacy::runOnMachineFunction(MachineFunction &MF) {
404+
auto &LIS = getAnalysis<LiveIntervalsWrapperPass>().getLIS();
405+
return RenameIndependentSubregs(&LIS).run(MF);
406+
}
407+
408+
bool RenameIndependentSubregs::run(MachineFunction &MF) {
385409
// Skip renaming if liveness of subregister is not tracked.
386410
MRI = &MF.getRegInfo();
387411
if (!MRI->subRegLivenessEnabled())
@@ -390,7 +414,6 @@ bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
390414
LLVM_DEBUG(dbgs() << "Renaming independent subregister live ranges in "
391415
<< MF.getName() << '\n');
392416

393-
LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
394417
TII = MF.getSubtarget().getInstrInfo();
395418

396419
// Iterate over all vregs. Note that we query getNumVirtRegs() the newly

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
#include "llvm/CodeGen/RegUsageInfoPropagate.h"
130130
#include "llvm/CodeGen/RegisterCoalescerPass.h"
131131
#include "llvm/CodeGen/RegisterUsageInfo.h"
132+
#include "llvm/CodeGen/RenameIndependentSubregs.h"
132133
#include "llvm/CodeGen/SafeStack.h"
133134
#include "llvm/CodeGen/SelectOptimize.h"
134135
#include "llvm/CodeGen/ShadowStackGCLowering.h"

llvm/test/CodeGen/AMDGPU/coalescing-with-subregs-in-loop-bug.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx803 -run-pass=register-coalescer,rename-independent-subregs %s -o - | FileCheck -check-prefix=GCN %s
2+
# RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx803 -passes=register-coalescer,rename-independent-subregs %s -o - | FileCheck -check-prefix=GCN %s
23

34
# This test is for a bug where the following happens:
45
#

llvm/test/CodeGen/AMDGPU/rename-independent-subregs-mac-operands.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass=register-coalescer,rename-independent-subregs -o - %s | FileCheck -check-prefix=GCN %s
2+
# RUN: llc -mtriple=amdgcn -verify-machineinstrs -passes=register-coalescer,rename-independent-subregs -o - %s | FileCheck -check-prefix=GCN %s
23
---
34

45
# GCN-LABEL: name: mac_invalid_operands

0 commit comments

Comments
 (0)