Skip to content

Commit 7b60e03

Browse files
optimisancdevadas
andauthored
Reland "CodeGen][NewPM] Port MachineScheduler to NPM. (#125703)" (#126684)
`RegisterClassInfo` was supposed to be kept alive between pass runs, which wasn't being done leading to recomputations increasing the compile time. Now the Impl class is a member of the legacy and new passes so that it is not reconstructed on every pass run. --------- Co-authored-by: Christudasan Devadasan <[email protected]>
1 parent 75dd411 commit 7b60e03

File tree

56 files changed

+418
-102
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+418
-102
lines changed

llvm/include/llvm/CodeGen/MachineScheduler.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@
9898
#include <vector>
9999

100100
namespace llvm {
101+
namespace impl_detail {
102+
// FIXME: Remove these declarations once RegisterClassInfo is queryable as an
103+
// analysis.
104+
class MachineSchedulerImpl;
105+
class PostMachineSchedulerImpl;
106+
} // namespace impl_detail
101107

102108
namespace MISched {
103109
enum Direction {
@@ -1385,6 +1391,34 @@ std::unique_ptr<ScheduleDAGMutation>
13851391
createCopyConstrainDAGMutation(const TargetInstrInfo *TII,
13861392
const TargetRegisterInfo *TRI);
13871393

1394+
class MachineSchedulerPass : public PassInfoMixin<MachineSchedulerPass> {
1395+
// FIXME: Remove this member once RegisterClassInfo is queryable as an
1396+
// analysis.
1397+
std::unique_ptr<impl_detail::MachineSchedulerImpl> Impl;
1398+
const TargetMachine *TM;
1399+
1400+
public:
1401+
MachineSchedulerPass(const TargetMachine *TM);
1402+
MachineSchedulerPass(MachineSchedulerPass &&Other);
1403+
~MachineSchedulerPass();
1404+
PreservedAnalyses run(MachineFunction &MF,
1405+
MachineFunctionAnalysisManager &MFAM);
1406+
};
1407+
1408+
class PostMachineSchedulerPass
1409+
: public PassInfoMixin<PostMachineSchedulerPass> {
1410+
// FIXME: Remove this member once RegisterClassInfo is queryable as an
1411+
// analysis.
1412+
std::unique_ptr<impl_detail::PostMachineSchedulerImpl> Impl;
1413+
const TargetMachine *TM;
1414+
1415+
public:
1416+
PostMachineSchedulerPass(const TargetMachine *TM);
1417+
PostMachineSchedulerPass(PostMachineSchedulerPass &&Other);
1418+
~PostMachineSchedulerPass();
1419+
PreservedAnalyses run(MachineFunction &MF,
1420+
MachineFunctionAnalysisManager &MFAM);
1421+
};
13881422
} // end namespace llvm
13891423

13901424
#endif // LLVM_CODEGEN_MACHINESCHEDULER_H

llvm/include/llvm/InitializePasses.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ void initializeMachinePipelinerPass(PassRegistry &);
209209
void initializeMachinePostDominatorTreeWrapperPassPass(PassRegistry &);
210210
void initializeMachineRegionInfoPassPass(PassRegistry &);
211211
void initializeMachineSanitizerBinaryMetadataPass(PassRegistry &);
212-
void initializeMachineSchedulerPass(PassRegistry &);
212+
void initializeMachineSchedulerLegacyPass(PassRegistry &);
213213
void initializeMachineSinkingPass(PassRegistry &);
214214
void initializeMachineTraceMetricsWrapperPassPass(PassRegistry &);
215215
void initializeMachineUniformityInfoPrinterPassPass(PassRegistry &);
@@ -238,7 +238,7 @@ void initializePostDomPrinterWrapperPassPass(PassRegistry &);
238238
void initializePostDomViewerWrapperPassPass(PassRegistry &);
239239
void initializePostDominatorTreeWrapperPassPass(PassRegistry &);
240240
void initializePostInlineEntryExitInstrumenterPass(PassRegistry &);
241-
void initializePostMachineSchedulerPass(PassRegistry &);
241+
void initializePostMachineSchedulerLegacyPass(PassRegistry &);
242242
void initializePostRAHazardRecognizerPass(PassRegistry &);
243243
void initializePostRAMachineSinkingPass(PassRegistry &);
244244
void initializePostRASchedulerLegacyPass(PassRegistry &);

llvm/include/llvm/Passes/CodeGenPassBuilder.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "llvm/CodeGen/MachineLICM.h"
5151
#include "llvm/CodeGen/MachineModuleInfo.h"
5252
#include "llvm/CodeGen/MachinePassManager.h"
53+
#include "llvm/CodeGen/MachineScheduler.h"
5354
#include "llvm/CodeGen/MachineVerifier.h"
5455
#include "llvm/CodeGen/OptimizePHIs.h"
5556
#include "llvm/CodeGen/PHIElimination.h"
@@ -960,7 +961,7 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::addMachinePasses(
960961
if (getOptLevel() != CodeGenOptLevel::None &&
961962
!TM.targetSchedulesPostRAScheduling()) {
962963
if (Opt.MISchedPostRA)
963-
addPass(PostMachineSchedulerPass());
964+
addPass(PostMachineSchedulerPass(&TM));
964965
else
965966
addPass(PostRASchedulerPass(&TM));
966967
}
@@ -1144,7 +1145,7 @@ void CodeGenPassBuilder<Derived, TargetMachineT>::addOptimizedRegAlloc(
11441145
addPass(RenameIndependentSubregsPass());
11451146

11461147
// PreRA instruction scheduling.
1147-
addPass(MachineSchedulerPass());
1148+
addPass(MachineSchedulerPass(&TM));
11481149

11491150
if (derived().addRegAssignmentOptimized(addPass)) {
11501151
// Allow targets to expand pseudo instructions depending on the choice of

llvm/include/llvm/Passes/MachinePassRegistry.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,14 @@ MACHINE_FUNCTION_PASS("finalize-isel", FinalizeISelPass())
142142
MACHINE_FUNCTION_PASS("localstackalloc", LocalStackSlotAllocationPass())
143143
MACHINE_FUNCTION_PASS("machine-cp", MachineCopyPropagationPass())
144144
MACHINE_FUNCTION_PASS("machine-cse", MachineCSEPass())
145+
MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass(TM))
145146
MACHINE_FUNCTION_PASS("machinelicm", MachineLICMPass())
146147
MACHINE_FUNCTION_PASS("no-op-machine-function", NoOpMachineFunctionPass())
147148
MACHINE_FUNCTION_PASS("opt-phis", OptimizePHIsPass())
148149
MACHINE_FUNCTION_PASS("peephole-opt", PeepholeOptimizerPass())
149150
MACHINE_FUNCTION_PASS("phi-node-elimination", PHIEliminationPass())
150151
MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass(TM))
152+
MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass(TM))
151153
MACHINE_FUNCTION_PASS("print", PrintMIRPass())
152154
MACHINE_FUNCTION_PASS("print<livedebugvars>", LiveDebugVariablesPrinterPass(errs()))
153155
MACHINE_FUNCTION_PASS("print<live-intervals>", LiveIntervalsPrinterPass(errs()))
@@ -243,13 +245,11 @@ DUMMY_MACHINE_FUNCTION_PASS("static-data-splitter", StaticDataSplitter)
243245
DUMMY_MACHINE_FUNCTION_PASS("machine-function-splitter", MachineFunctionSplitterPass)
244246
DUMMY_MACHINE_FUNCTION_PASS("machine-latecleanup", MachineLateInstrsCleanupPass)
245247
DUMMY_MACHINE_FUNCTION_PASS("machine-sanmd", MachineSanitizerBinaryMetadata)
246-
DUMMY_MACHINE_FUNCTION_PASS("machine-scheduler", MachineSchedulerPass)
247248
DUMMY_MACHINE_FUNCTION_PASS("machine-sink", MachineSinkingPass)
248249
DUMMY_MACHINE_FUNCTION_PASS("machine-uniformity", MachineUniformityInfoWrapperPass)
249250
DUMMY_MACHINE_FUNCTION_PASS("machineinstr-printer", MachineFunctionPrinterPass)
250251
DUMMY_MACHINE_FUNCTION_PASS("mirfs-discriminators", MIRAddFSDiscriminatorsPass)
251252
DUMMY_MACHINE_FUNCTION_PASS("patchable-function", PatchableFunctionPass)
252-
DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass)
253253
DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass)
254254
DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass)
255255
DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass)

llvm/lib/CodeGen/CodeGen.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
9494
initializeModuloScheduleTestPass(Registry);
9595
initializeMachinePostDominatorTreeWrapperPassPass(Registry);
9696
initializeMachineRegionInfoPassPass(Registry);
97-
initializeMachineSchedulerPass(Registry);
97+
initializeMachineSchedulerLegacyPass(Registry);
9898
initializeMachineSinkingPass(Registry);
9999
initializeMachineUniformityAnalysisPassPass(Registry);
100100
initializeMachineUniformityInfoPrinterPassPass(Registry);
@@ -105,7 +105,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
105105
initializePHIEliminationPass(Registry);
106106
initializePatchableFunctionPass(Registry);
107107
initializePeepholeOptimizerLegacyPass(Registry);
108-
initializePostMachineSchedulerPass(Registry);
108+
initializePostMachineSchedulerLegacyPass(Registry);
109109
initializePostRAHazardRecognizerPass(Registry);
110110
initializePostRAMachineSinkingPass(Registry);
111111
initializePostRASchedulerLegacyPass(Registry);

0 commit comments

Comments
 (0)