31 using Base = CodeGenPassBuilder;
33 SystemZTargetMachine &
getTM()
const {
34 return static_cast<SystemZTargetMachine &
>(TM);
38 explicit SystemZCodeGenPassBuilder(SystemZTargetMachine &TM,
39 const CGPassBuilderOption &Opts,
40 PassInstrumentationCallbacks *
PIC)
41 : CodeGenPassBuilder(TM, Opts,
PIC) {}
43 void addIRPasses(PassManagerWrapper &PMW)
override;
44 Error addInstSelector(PassManagerWrapper &PMW)
override;
45 void addILPOpts(PassManagerWrapper &PMW)
override;
46 void addPreRegAlloc(PassManagerWrapper &PMW)
override;
47 void addPostRewrite(PassManagerWrapper &PMW)
override;
48 void addPostRegAlloc(PassManagerWrapper &PMW)
override;
49 void addPreSched2(PassManagerWrapper &PMW)
override;
50 void addPreEmitPass(PassManagerWrapper &PMW)
override;
51 void addAsmPrinterBegin(PassManagerWrapper &PMW)
override;
52 void addAsmPrinter(PassManagerWrapper &PMW)
override;
53 void addAsmPrinterEnd(PassManagerWrapper &PMW)
override;
57 if (getOptLevel() != CodeGenOptLevel::None) {
59 addModulePass(SystemZAlignGlobalsPass(), PMW);
60 addFunctionPass(SystemZTDCPass(
getTM()), PMW);
61 addFunctionPass(LoopDataPrefetchPass(), PMW);
64 addFunctionPass(AtomicExpandPass(
getTM()), PMW);
66 Base::addIRPasses(PMW);
69Error SystemZCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
70 addMachineFunctionPass(SystemZISelDAGToDAGPass(
getTM(), getOptLevel()), PMW);
72 if (getOptLevel() != CodeGenOptLevel::None)
73 addMachineFunctionPass(SystemZLDCleanupPass(), PMW);
78void SystemZCodeGenPassBuilder::addILPOpts(PassManagerWrapper &PMW) {
79 addMachineFunctionPass(EarlyIfConverterPass(), PMW);
82 addMachineFunctionPass(MachineCombinerPass(), PMW);
85void SystemZCodeGenPassBuilder::addPreRegAlloc(PassManagerWrapper &PMW) {
86 addMachineFunctionPass(SystemZCopyPhysRegsPass(), PMW);
89void SystemZCodeGenPassBuilder::addPostRewrite(PassManagerWrapper &PMW) {
90 addMachineFunctionPass(SystemZPostRewritePass(), PMW);
93void SystemZCodeGenPassBuilder::addPostRegAlloc(PassManagerWrapper &PMW) {
96 if (getOptLevel() == CodeGenOptLevel::None)
97 addMachineFunctionPass(SystemZPostRewritePass(), PMW);
100void SystemZCodeGenPassBuilder::addPreSched2(PassManagerWrapper &PMW) {
101 if (getOptLevel() != CodeGenOptLevel::None)
102 addMachineFunctionPass(IfConverterPass(), PMW);
105void SystemZCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
109 if (getOptLevel() != CodeGenOptLevel::None)
110 addMachineFunctionPass(SystemZShortenInstPass(), PMW);
135 if (getOptLevel() != CodeGenOptLevel::None)
136 addMachineFunctionPass(SystemZElimComparePass(), PMW);
137 addMachineFunctionPass(SystemZLongBranchPass(), PMW);
142 if (getOptLevel() != CodeGenOptLevel::None)
143 addMachineFunctionPass(PostMachineSchedulerPass(&
getTM()), PMW);
146void SystemZCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
147 addModulePass(SystemZAsmPrinterBeginPass(), PMW,
true);
150void SystemZCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
151 addMachineFunctionPass(SystemZAsmPrinterPass(), PMW);
154void SystemZCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
155 addModulePass(SystemZAsmPrinterEndPass(), PMW,
true);
161#define GET_PASS_REGISTRY "SystemZPassRegistry.def"
170 auto CGPB = SystemZCodeGenPassBuilder(*
this, Opt,
PIC);
171 return CGPB.buildPipeline(MPM,
MAM, Out, DwoOut, FileType, Ctx);
Interfaces for producing common pass manager configurations.
This file provides the interface for LLVM's Loop Data Prefetching Pass.
static cl::opt< bool > EnableMachineCombinerPass("ppc-machine-combiner", cl::desc("Enable the machine combiner pass"), cl::init(true), cl::Hidden)
ModuleAnalysisManager MAM
PassBuilder PB(Mod->getContext(), Machine, PassOpts->PTO, std::nullopt, &PIC)
PassInstrumentationCallbacks PIC
This file defines the Pass Instrumentation classes that provide instrumentation points into the pass ...
const GCNTargetMachine & getTM(const GCNSubtarget *STI)
This class provides access to building LLVM's passes.
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
Context object for machine code objects.
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override
void registerPassBuilderCallbacks(PassBuilder &PB) override
Allow the target to modify the pass pipeline.
An abstract base class for streams implementations that also support a pwrite operation.
Interfaces for registering analysis passes, producing common pass manager configurations,...
This is an optimization pass for GlobalISel generic memory operations.
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.