Skip to content

Commit fcd4a2f

Browse files
authored
[CodeGen][NewPM] Port "PostRAMachineSink" pass to NPM (#129690)
1 parent ed87f0a commit fcd4a2f

17 files changed

+100
-34
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//===- llvm/CodeGen/PostRAMachineSink.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_POSTRAMACHINESINK_H
10+
#define LLVM_CODEGEN_POSTRAMACHINESINK_H
11+
12+
#include "llvm/CodeGen/MachinePassManager.h"
13+
14+
namespace llvm {
15+
16+
class PostRAMachineSinkingPass
17+
: public PassInfoMixin<PostRAMachineSinkingPass> {
18+
public:
19+
PreservedAnalyses run(MachineFunction &MF,
20+
MachineFunctionAnalysisManager &MFAM);
21+
22+
MachineFunctionProperties getRequiredProperties() const {
23+
return MachineFunctionProperties().set(
24+
MachineFunctionProperties::Property::NoVRegs);
25+
}
26+
};
27+
28+
} // namespace llvm
29+
30+
#endif // LLVM_CODEGEN_POSTRAMACHINESINK_H

llvm/include/llvm/InitializePasses.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ LLVM_ABI void initializePostDominatorTreeWrapperPassPass(PassRegistry &);
252252
LLVM_ABI void initializePostInlineEntryExitInstrumenterPass(PassRegistry &);
253253
LLVM_ABI void initializePostMachineSchedulerLegacyPass(PassRegistry &);
254254
LLVM_ABI void initializePostRAHazardRecognizerLegacyPass(PassRegistry &);
255-
LLVM_ABI void initializePostRAMachineSinkingPass(PassRegistry &);
255+
LLVM_ABI void initializePostRAMachineSinkingLegacyPass(PassRegistry &);
256256
LLVM_ABI void initializePostRASchedulerLegacyPass(PassRegistry &);
257257
LLVM_ABI void initializePreISelIntrinsicLoweringLegacyPassPass(PassRegistry &);
258258
LLVM_ABI void initializePrintFunctionPassWrapperPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
#include "llvm/CodeGen/PHIElimination.h"
7070
#include "llvm/CodeGen/PatchableFunction.h"
7171
#include "llvm/CodeGen/PeepholeOptimizer.h"
72+
#include "llvm/CodeGen/PostRAMachineSink.h"
7273
#include "llvm/CodeGen/PostRASchedulerList.h"
7374
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
7475
#include "llvm/CodeGen/RegAllocEvictionAdvisor.h"

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
164164
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
165165
MACHINE_FUNCTION_PASS("post-RA-hazard-rec", PostRAHazardRecognizerPass())
166166
MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass(TM))
167+
MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass())
167168
MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass(TM))
168169
MACHINE_FUNCTION_PASS("post-ra-pseudos", ExpandPostRAPseudosPass())
169170
MACHINE_FUNCTION_PASS("print", PrintMIRPass())
@@ -317,7 +318,6 @@ DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
317318
DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
318319
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
319320
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
320-
DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
321321
DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass)
322322
DUMMY_MACHINE_FUNCTION_PASS("prologepilog-code", PrologEpilogCodeInserterPass)
323323
DUMMY_MACHINE_FUNCTION_PASS("ra-basic", RABasicPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
106106
initializePatchableFunctionLegacyPass(Registry);
107107
initializePeepholeOptimizerLegacyPass(Registry);
108108
initializePostMachineSchedulerLegacyPass(Registry);
109+
initializePostRAMachineSinkingLegacyPass(Registry);
109110
initializePostRAHazardRecognizerLegacyPass(Registry);
110-
initializePostRAMachineSinkingPass(Registry);
111111
initializePostRASchedulerLegacyPass(Registry);
112112
initializePreISelIntrinsicLoweringLegacyPassPass(Registry);
113113
initializeProcessImplicitDefsPass(Registry);

llvm/lib/CodeGen/MachineSink.cpp

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "llvm/CodeGen/MachinePostDominators.h"
4444
#include "llvm/CodeGen/MachineRegisterInfo.h"
4545
#include "llvm/CodeGen/MachineSizeOpts.h"
46+
#include "llvm/CodeGen/PostRAMachineSink.h"
4647
#include "llvm/CodeGen/RegisterClassInfo.h"
4748
#include "llvm/CodeGen/RegisterPressure.h"
4849
#include "llvm/CodeGen/SlotIndexes.h"
@@ -2068,24 +2069,7 @@ void MachineSinking::SalvageUnsunkDebugUsersOfCopy(
20682069
//===----------------------------------------------------------------------===//
20692070
namespace {
20702071

2071-
class PostRAMachineSinking : public MachineFunctionPass {
2072-
public:
2073-
bool runOnMachineFunction(MachineFunction &MF) override;
2074-
2075-
static char ID;
2076-
PostRAMachineSinking() : MachineFunctionPass(ID) {}
2077-
StringRef getPassName() const override { return "PostRA Machine Sink"; }
2078-
2079-
void getAnalysisUsage(AnalysisUsage &AU) const override {
2080-
AU.setPreservesCFG();
2081-
MachineFunctionPass::getAnalysisUsage(AU);
2082-
}
2083-
2084-
MachineFunctionProperties getRequiredProperties() const override {
2085-
return MachineFunctionProperties().setNoVRegs();
2086-
}
2087-
2088-
private:
2072+
class PostRAMachineSinkingImpl {
20892073
/// Track which register units have been modified and used.
20902074
LiveRegUnits ModifiedRegUnits, UsedRegUnits;
20912075

@@ -2099,13 +2083,36 @@ class PostRAMachineSinking : public MachineFunctionPass {
20992083
/// successors.
21002084
bool tryToSinkCopy(MachineBasicBlock &BB, MachineFunction &MF,
21012085
const TargetRegisterInfo *TRI, const TargetInstrInfo *TII);
2086+
2087+
public:
2088+
bool run(MachineFunction &MF);
21022089
};
2090+
2091+
class PostRAMachineSinkingLegacy : public MachineFunctionPass {
2092+
public:
2093+
bool runOnMachineFunction(MachineFunction &MF) override;
2094+
2095+
static char ID;
2096+
PostRAMachineSinkingLegacy() : MachineFunctionPass(ID) {}
2097+
StringRef getPassName() const override { return "PostRA Machine Sink"; }
2098+
2099+
void getAnalysisUsage(AnalysisUsage &AU) const override {
2100+
AU.setPreservesCFG();
2101+
MachineFunctionPass::getAnalysisUsage(AU);
2102+
}
2103+
2104+
MachineFunctionProperties getRequiredProperties() const override {
2105+
return MachineFunctionProperties().set(
2106+
MachineFunctionProperties::Property::NoVRegs);
2107+
}
2108+
};
2109+
21032110
} // namespace
21042111

2105-
char PostRAMachineSinking::ID = 0;
2106-
char &llvm::PostRAMachineSinkingID = PostRAMachineSinking::ID;
2112+
char PostRAMachineSinkingLegacy::ID = 0;
2113+
char &llvm::PostRAMachineSinkingID = PostRAMachineSinkingLegacy::ID;
21072114

2108-
INITIALIZE_PASS(PostRAMachineSinking, "postra-machine-sink",
2115+
INITIALIZE_PASS(PostRAMachineSinkingLegacy, "postra-machine-sink",
21092116
"PostRA Machine Sink", false, false)
21102117

21112118
static bool aliasWithRegsInLiveIn(MachineBasicBlock &MBB, Register Reg,
@@ -2226,10 +2233,10 @@ static bool hasRegisterDependency(MachineInstr *MI,
22262233
return HasRegDependency;
22272234
}
22282235

2229-
bool PostRAMachineSinking::tryToSinkCopy(MachineBasicBlock &CurBB,
2230-
MachineFunction &MF,
2231-
const TargetRegisterInfo *TRI,
2232-
const TargetInstrInfo *TII) {
2236+
bool PostRAMachineSinkingImpl::tryToSinkCopy(MachineBasicBlock &CurBB,
2237+
MachineFunction &MF,
2238+
const TargetRegisterInfo *TRI,
2239+
const TargetInstrInfo *TII) {
22332240
SmallPtrSet<MachineBasicBlock *, 2> SinkableBBs;
22342241
// FIXME: For now, we sink only to a successor which has a single predecessor
22352242
// so that we can directly sink COPY instructions to the successor without
@@ -2354,10 +2361,7 @@ bool PostRAMachineSinking::tryToSinkCopy(MachineBasicBlock &CurBB,
23542361
return Changed;
23552362
}
23562363

2357-
bool PostRAMachineSinking::runOnMachineFunction(MachineFunction &MF) {
2358-
if (skipFunction(MF.getFunction()))
2359-
return false;
2360-
2364+
bool PostRAMachineSinkingImpl::run(MachineFunction &MF) {
23612365
bool Changed = false;
23622366
const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
23632367
const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
@@ -2369,3 +2373,23 @@ bool PostRAMachineSinking::runOnMachineFunction(MachineFunction &MF) {
23692373

23702374
return Changed;
23712375
}
2376+
2377+
bool PostRAMachineSinkingLegacy::runOnMachineFunction(MachineFunction &MF) {
2378+
if (skipFunction(MF.getFunction()))
2379+
return false;
2380+
2381+
return PostRAMachineSinkingImpl().run(MF);
2382+
}
2383+
2384+
PreservedAnalyses
2385+
PostRAMachineSinkingPass::run(MachineFunction &MF,
2386+
MachineFunctionAnalysisManager &MFAM) {
2387+
MFPropsModifier _(*this, MF);
2388+
2389+
if (!PostRAMachineSinkingImpl().run(MF))
2390+
return PreservedAnalyses::all();
2391+
2392+
PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
2393+
PA.preserveSet<CFGAnalyses>();
2394+
return PA;
2395+
}

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
#include "llvm/CodeGen/PatchableFunction.h"
140140
#include "llvm/CodeGen/PeepholeOptimizer.h"
141141
#include "llvm/CodeGen/PostRAHazardRecognizer.h"
142+
#include "llvm/CodeGen/PostRAMachineSink.h"
142143
#include "llvm/CodeGen/PostRASchedulerList.h"
143144
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
144145
#include "llvm/CodeGen/RegAllocEvictionAdvisor.h"

llvm/test/CodeGen/AArch64/bisect-post-ra-machine-sink.mir

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=postra-machine-sink -verify-machineinstrs -o - %s | FileCheck -check-prefix=RUN-POSTRA %s
2+
# RUN: llc -mtriple=aarch64-none-linux-gnu -passes='postra-machine-sink' -o - %s | FileCheck -check-prefix=RUN-POSTRA %s
23
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=postra-machine-sink -opt-bisect-limit=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=BISECT-NO-RUN-POSTRA %s
4+
# RUN: llc -mtriple=aarch64-none-linux-gnu -passes='postra-machine-sink' -opt-bisect-limit=0 -o - %s | FileCheck -check-prefix=BISECT-NO-RUN-POSTRA %s
35

46
---
57

llvm/test/CodeGen/AArch64/post-ra-machine-sink.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=postra-machine-sink -verify-machineinstrs -o - %s | FileCheck %s
2+
# RUN: llc -mtriple=aarch64-none-linux-gnu -passes='postra-machine-sink' -o - %s | FileCheck %s
23

34
---
45
# Sink w19 to %bb.1.

0 commit comments

Comments
 (0)