25 using Base = CodeGenPassBuilder;
27 MipsTargetMachine &
getTM()
const {
28 return static_cast<MipsTargetMachine &
>(TM);
32 explicit MipsCodeGenPassBuilder(MipsTargetMachine &TM,
33 const CGPassBuilderOption &Opts,
34 PassInstrumentationCallbacks *
PIC)
35 : CodeGenPassBuilder(TM, Opts,
PIC) {}
37 void addIRPasses(PassManagerWrapper &PMW)
override;
39 Error addInstSelector(PassManagerWrapper &PMW)
override;
41 Error addIRTranslator(PassManagerWrapper &PMW)
override;
42 void addPreLegalizeMachineIR(PassManagerWrapper &PMW)
override;
43 Error addLegalizeMachineIR(PassManagerWrapper &PMW)
override;
44 void addPreRegBankSelect(PassManagerWrapper &PMW)
override;
45 Error addRegBankSelect(PassManagerWrapper &PMW)
override;
46 Error addGlobalInstructionSelect(PassManagerWrapper &PMW)
override;
48 void addPreRegAlloc(PassManagerWrapper &PMW)
override;
49 void addPreEmitPass(PassManagerWrapper &PMW)
override;
50 void addAsmPrinterBegin(PassManagerWrapper &PMW)
override;
51 void addAsmPrinter(PassManagerWrapper &PMW)
override;
52 void addAsmPrinterEnd(PassManagerWrapper &PMW)
override;
58 Base::addIRPasses(PMW);
59 addFunctionPass(AtomicExpandPass(
getTM()), PMW);
62 addModulePass(MipsOs16Pass(), PMW);
64 addModulePass(Mips16HardFloatPass(
getTM()), PMW);
67Error MipsCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
68 addMachineFunctionPass(Mips16ISelDAGPass(
getTM(), getOptLevel()), PMW);
69 addMachineFunctionPass(MipsSEISelDAGPass(
getTM(), getOptLevel()), PMW);
73Error MipsCodeGenPassBuilder::addIRTranslator(PassManagerWrapper &PMW) {
74 addMachineFunctionPass(IRTranslatorPass(getOptLevel()), PMW);
78void MipsCodeGenPassBuilder::addPreLegalizeMachineIR(PassManagerWrapper &PMW) {
79 addMachineFunctionPass(MipsPreLegalizerCombinerPass(), PMW);
82Error MipsCodeGenPassBuilder::addLegalizeMachineIR(PassManagerWrapper &PMW) {
83 addMachineFunctionPass(LegalizerPass(), PMW);
87void MipsCodeGenPassBuilder::addPreRegBankSelect(PassManagerWrapper &PMW) {
88 bool IsOptNone = getOptLevel() == CodeGenOptLevel::None;
89 addMachineFunctionPass(MipsPostLegalizerCombinerPass(IsOptNone), PMW);
92Error MipsCodeGenPassBuilder::addRegBankSelect(PassManagerWrapper &PMW) {
93 addMachineFunctionPass(RegBankSelectPass(), PMW);
97Error MipsCodeGenPassBuilder::addGlobalInstructionSelect(
98 PassManagerWrapper &PMW) {
99 addMachineFunctionPass(InstructionSelectPass(getOptLevel()), PMW);
103void MipsCodeGenPassBuilder::addPreRegAlloc(PassManagerWrapper &PMW) {
104 addMachineFunctionPass(MipsOptimizePICCallPass(), PMW);
107void MipsCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
109 addMachineFunctionPass(MipsExpandPseudoPass(), PMW);
113 addMachineFunctionPass(MicroMipsSizeReducePass(), PMW);
118 addMachineFunctionPass(MipsMulMulBugFixPass(), PMW);
122 addMachineFunctionPass(MipsDelaySlotFillerPass(), PMW);
132 addMachineFunctionPass(MipsBranchExpansionPass(), PMW);
134 addMachineFunctionPass(MipsConstantIslandPass(), PMW);
137void MipsCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
138 addModulePass(MipsAsmPrinterBeginPass(), PMW,
true);
141void MipsCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
142 addMachineFunctionPass(MipsAsmPrinterPass(), PMW);
145void MipsCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
146 addModulePass(MipsAsmPrinterEndPass(), PMW,
true);
150#define GET_PASS_REGISTRY "MipsPassRegistry.def"
159 auto CGPB = MipsCodeGenPassBuilder(*
this, Opt,
PIC);
160 return CGPB.buildPipeline(MPM,
MAM, Out, DwoOut, FileType, Ctx);
Interfaces for producing common pass manager configurations.
This file declares the IRTranslator pass.
ModuleAnalysisManager MAM
PassBuilder PB(Mod->getContext(), Machine, PassOpts->PTO, std::nullopt, &PIC)
PassInstrumentationCallbacks PIC
This file describes the interface of the MachineFunctionPass responsible for assigning the generic vi...
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.