30 using Base = CodeGenPassBuilder;
32 BPFTargetMachine &
getTM()
const {
33 return static_cast<BPFTargetMachine &
>(TM);
37 explicit BPFCodeGenPassBuilder(BPFTargetMachine &TM,
38 const CGPassBuilderOption &Opts,
39 PassInstrumentationCallbacks *
PIC)
40 : CodeGenPassBuilder(TM, Opts,
PIC) {}
42 void addIRPasses(PassManagerWrapper &PMW)
override;
43 Error addInstSelector(PassManagerWrapper &PMW)
override;
44 void addMachineSSAOptimization(PassManagerWrapper &PMW)
override;
45 void addPreEmitPass(PassManagerWrapper &PMW)
override;
46 void addAsmPrinterBegin(PassManagerWrapper &PMW)
override;
47 void addAsmPrinter(PassManagerWrapper &PMW)
override;
48 void addAsmPrinterEnd(PassManagerWrapper &PMW)
override;
52 addFunctionPass(AtomicExpandPass(TM), PMW);
54 addModulePass(BPFCheckAndAdjustIRPass(), PMW);
56 Base::addIRPasses(PMW);
59Error BPFCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
60 addMachineFunctionPass(BPFISelDAGToDAGPass(
getTM()), PMW);
64void BPFCodeGenPassBuilder::addMachineSSAOptimization(PassManagerWrapper &PMW) {
65 addMachineFunctionPass(BPFMISimplifyPatchablePass(), PMW);
67 Base::addMachineSSAOptimization(PMW);
72 addMachineFunctionPass(BPFMIPeepholePass(), PMW);
76void BPFCodeGenPassBuilder::addPreEmitPass(PassManagerWrapper &PMW) {
77 addMachineFunctionPass(BPFMIPreEmitCheckingPass(), PMW);
79 addMachineFunctionPass(BPFMIExpandStackArgPseudosPass(), PMW);
80 addMachineFunctionPass(BPFMIPreEmitPeepholePass(), PMW);
84void BPFCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
85 addModulePass(BPFAsmPrinterBeginPass(), PMW,
true);
88void BPFCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
89 addMachineFunctionPass(BPFAsmPrinterPass(), PMW);
92void BPFCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
93 addModulePass(BPFAsmPrinterEndPass(), PMW);
100 "BPFPreserveStaticOffsetPass");
104#define GET_PASS_REGISTRY "BPFPassRegistry.def"
107 PB.registerPipelineStartEPCallback(
121 PB.registerScalarOptimizerLateEPCallback(
127 PB.registerPipelineEarlySimplificationEPCallback(
138 auto CGPB = BPFCodeGenPassBuilder(*
this, Opt,
PIC);
139 return CGPB.buildPipeline(MPM,
MAM, Out, DwoOut, FileType, Ctx);
cl::opt< bool > DisableMIPeephole
static Expected< bool > parseBPFPreserveStaticOffsetOptions(StringRef Params)
Interfaces for producing common pass manager configurations.
ModuleAnalysisManager MAM
PassInstrumentationCallbacks PIC
PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC)
This file defines the Pass Instrumentation classes that provide instrumentation points into the pass ...
const GCNTargetMachine & getTM(const GCNSubtarget *STI)
This file provides the interface for the pass responsible for both simplifying and canonicalizing the...
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.
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
Tagged union holding either a T or a Error.
const TargetSubtargetInfo * getSubtargetImpl(const Function &) const override
Virtual method implemented by subclasses that returns a reference to that target's TargetSubtargetInf...
Context object for machine code objects.
This class provides access to building LLVM's passes.
static LLVM_ABI Expected< bool > parseSinglePassOption(StringRef Params, StringRef OptionName, StringRef PassName)
Handle passes only accept one bool-valued parameter.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
A pass to simplify and canonicalize the CFG of a function.
Represent a constant reference to a string, i.e.
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.
ModuleToFunctionPassAdaptor createModuleToFunctionPassAdaptor(FunctionPassT &&Pass, bool EagerlyInvalidate=false)
A function to deduce a function pass type and wrap it in the templated adaptor.
ThinOrFullLTOPhase
This enumerates the LLVM full LTO or ThinLTO optimization phases.
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.
PassManager< Function > FunctionPassManager
Convenience typedef for a pass manager over functions.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.