20 using Base = CodeGenPassBuilder;
22 MipsTargetMachine &
getTM()
const {
23 return static_cast<MipsTargetMachine &
>(TM);
27 explicit MipsCodeGenPassBuilder(MipsTargetMachine &TM,
28 const CGPassBuilderOption &Opts,
29 PassInstrumentationCallbacks *
PIC)
30 : CodeGenPassBuilder(TM, Opts,
PIC) {}
32 void addIRPasses(PassManagerWrapper &PMW)
override;
33 Error addInstSelector(PassManagerWrapper &PMW)
override;
34 void addPreRegAlloc(PassManagerWrapper &PMW)
override;
35 void addPreEmitPass(PassManagerWrapper &PMW)
override;
36 void addAsmPrinterBegin(PassManagerWrapper &PMW)
override;
37 void addAsmPrinter(PassManagerWrapper &PMW)
override;
38 void addAsmPrinterEnd(PassManagerWrapper &PMW)
override;
44 Base::addIRPasses(PMW);
45 addFunctionPass(AtomicExpandPass(
getTM()), PMW);
48 addModulePass(MipsOs16Pass(), PMW);
50 addModulePass(Mips16HardFloatPass(
getTM()), PMW);
53Error MipsCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
54 addMachineFunctionPass(Mips16ISelDAGPass(
getTM(), getOptLevel()), PMW);
55 addMachineFunctionPass(MipsSEISelDAGPass(
getTM(), getOptLevel()), PMW);
59void MipsCodeGenPassBuilder::addPreRegAlloc(PassManagerWrapper &PMW) {
60 addMachineFunctionPass(MipsOptimizePICCallPass(), PMW);
63void MipsCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
65 addMachineFunctionPass(MipsExpandPseudoPass(), PMW);
69 addMachineFunctionPass(MicroMipsSizeReducePass(), PMW);
74 addMachineFunctionPass(MipsMulMulBugFixPass(), PMW);
93void MipsCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
97void MipsCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
101void MipsCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
106#define GET_PASS_REGISTRY "MipsPassRegistry.def"
115 auto CGPB = MipsCodeGenPassBuilder(*
this, Opt,
PIC);
116 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
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.
void registerPassBuilderCallbacks(PassBuilder &PB) override
Allow the target to modify the pass pipeline.
Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
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.