24 using Base = CodeGenPassBuilder;
26 SparcTargetMachine &
getTM()
const {
27 return static_cast<SparcTargetMachine &
>(TM);
31 explicit SparcCodeGenPassBuilder(SparcTargetMachine &TM,
32 const CGPassBuilderOption &Opts,
33 PassInstrumentationCallbacks *
PIC)
34 : CodeGenPassBuilder(TM, Opts,
PIC) {}
36 void addIRPasses(PassManagerWrapper &PMW)
override;
37 Error addInstSelector(PassManagerWrapper &PMW)
override;
38 void addPreEmitPass(PassManagerWrapper &PMW)
override;
39 void addAsmPrinterBegin(PassManagerWrapper &PMW)
override;
40 void addAsmPrinter(PassManagerWrapper &PMW)
override;
41 void addAsmPrinterEnd(PassManagerWrapper &PMW)
override;
45 addFunctionPass(AtomicExpandPass(
getTM()), PMW);
47 Base::addIRPasses(PMW);
50Error SparcCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
51 addMachineFunctionPass(SparcDAGToDAGISelPass(
getTM(), getOptLevel()), PMW);
55void SparcCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
57 addMachineFunctionPass(BranchRelaxationPass(), PMW);
59 addMachineFunctionPass(SparcDelaySlotFillerPass(), PMW);
60 addMachineFunctionPass(SparcInsertNOPLoadPass(), PMW);
61 addMachineFunctionPass(SparcDetectRoundChangePass(), PMW);
62 addMachineFunctionPass(SparcFixAllFDIVSQRTPass(), PMW);
63 addMachineFunctionPass(SparcErrataWorkaroundPass(), PMW);
66void SparcCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
67 addModulePass(SparcAsmPrinterBeginPass(), PMW,
true);
70void SparcCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
71 addMachineFunctionPass(SparcAsmPrinterPass(), PMW,
true);
74void SparcCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
75 addModulePass(SparcAsmPrinterEndPass(), PMW,
true);
81#define GET_PASS_REGISTRY "SparcPassRegistry.def"
90 auto CGPB = SparcCodeGenPassBuilder(*
this, Opt,
PIC);
91 return CGPB.buildPipeline(MPM,
MAM, Out, DwoOut, FileType, Ctx);
Interfaces for producing common pass manager configurations.
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,...
const AArch64MCOptions & getCLOpts(const MCTargetOptions &Options)
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.