52class WebAssemblyCodeGenPassBuilder
54 WebAssemblyTargetMachine> {
77 disablePass<RegisterCoalescerPass>();
80 void addIRPasses(PassManagerWrapper &PMW)
const;
81 void addISelPrepare(PassManagerWrapper &PMW)
const;
82 Error addInstSelector(PassManagerWrapper &PMW)
const;
83 void addPreEmitPass(PassManagerWrapper &PMW)
const;
84 void addAsmPrinterBegin(PassManagerWrapper &PMW)
const;
85 void addAsmPrinter(PassManagerWrapper &PMW)
const;
86 void addAsmPrinterEnd(PassManagerWrapper &PMW)
const;
92 addModulePass(WebAssemblyAddMissingPrototypesPass(), PMW);
95 addModulePass(LowerGlobalDtorsPass(), PMW);
99 addModulePass(WebAssemblyFixFunctionBitcastsPass(), PMW);
102 if (getOptLevel() != CodeGenOptLevel::None)
103 addFunctionPass(WebAssemblyOptimizeReturnedPass(), PMW);
112 addFunctionPass(LowerInvokePass(), PMW);
115 addFunctionPass(UnreachableBlockElimPass(), PMW);
124 addModulePass(WebAssemblyLowerEmscriptenEHSjLjPass(), PMW);
128 addFunctionPass(IndirectBrExpandPass(TM), PMW);
131 addFunctionPass(WebAssemblyReduceToAnyAllTruePass(TM), PMW);
133 Base::addIRPasses(PMW);
136void WebAssemblyCodeGenPassBuilder::addISelPrepare(
137 PassManagerWrapper &PMW)
const {
140 addFunctionPass(WebAssemblyRefTypeMem2LocalPass(), PMW);
143 addModulePass(WebAssemblyCoalesceFeaturesAndStripAtomicsPass(TM), PMW);
146 addFunctionPass(AtomicExpandPass(TM), PMW);
148 Base::addISelPrepare(PMW);
151Error WebAssemblyCodeGenPassBuilder::addInstSelector(
152 PassManagerWrapper &PMW)
const {
153 addMachineFunctionPass(WebAssemblyISelDAGToDAGPass(TM, getOptLevel()), PMW);
158 addMachineFunctionPass(WebAssemblyArgumentMovePass(), PMW);
163 addMachineFunctionPass(WebAssemblySetP2AlignOperandsPass(), PMW);
166 addMachineFunctionPass(WebAssemblyFixBrTableDefaultsPass(), PMW);
170 addMachineFunctionPass(WebAssemblyCleanCodeAfterTrapPass(), PMW);
175void WebAssemblyCodeGenPassBuilder::addPreEmitPass(
176 PassManagerWrapper &PMW)
const {
177 Base::addPreEmitPass(PMW);
180 addMachineFunctionPass(WebAssemblyNullifyDebugValueListsPass(), PMW);
184 addMachineFunctionPass(UnreachableMachineBlockElimPass(), PMW);
187 addMachineFunctionPass(WebAssemblyFixIrreducibleControlFlowPass(), PMW);
192 addMachineFunctionPass(WebAssemblyLateEHPreparePass(), PMW);
197 addMachineFunctionPass(WebAssemblyReplacePhysRegsPass(), PMW);
200 if (getOptLevel() != CodeGenOptLevel::None) {
202 addMachineFunctionPass(WebAssemblyOptimizeLiveIntervalsPass(), PMW);
205 addMachineFunctionPass(WebAssemblyMemIntrinsicResultsPass(), PMW);
213 addMachineFunctionPass(WebAssemblyRegStackifyPass(getOptLevel()), PMW);
215 if (getOptLevel() != CodeGenOptLevel::None) {
219 addMachineFunctionPass(WebAssemblyRegColoringPass(), PMW);
224 addMachineFunctionPass(WebAssemblyCFGSortPass(), PMW);
227 addMachineFunctionPass(WebAssemblyCFGStackifyPass(), PMW);
231 addMachineFunctionPass(WebAssemblyExplicitLocalsPass(), PMW);
234 addMachineFunctionPass(WebAssemblyLowerBrUnlessPass(), PMW);
237 if (getOptLevel() != CodeGenOptLevel::None)
238 addMachineFunctionPass(WebAssemblyPeepholePass(), PMW);
241 addMachineFunctionPass(WebAssemblyRegNumberingPass(), PMW);
245 addMachineFunctionPass(WebAssemblyDebugFixupPass(), PMW);
249 addModulePass(WebAssemblyMCLowerPrePass(), PMW);
252void WebAssemblyCodeGenPassBuilder::addAsmPrinterBegin(
253 PassManagerWrapper &PMW)
const {
254 addModulePass(WebAssemblyAsmPrinterBeginPass(), PMW);
257void WebAssemblyCodeGenPassBuilder::addAsmPrinter(
258 PassManagerWrapper &PMW)
const {
259 addMachineFunctionPass(WebAssemblyAsmPrinterPass(), PMW);
262void WebAssemblyCodeGenPassBuilder::addAsmPrinterEnd(
263 PassManagerWrapper &PMW)
const {
264 addModulePass(WebAssemblyAsmPrinterEndPass(), PMW);
270#define GET_PASS_REGISTRY "WebAssemblyPassRegistry.def"
276 "wasm-asm-printer-begin");
280 "wasm-asm-printer-end");
289 auto CGPB = WebAssemblyCodeGenPassBuilder(*
this, Opt,
PIC);
290 return CGPB.buildPipeline(MPM,
MAM, Out, DwoOut, FileType, Ctx);
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 ...
cl::opt< bool > WasmEnableEH
cl::opt< bool > WasmEnableSjLj
cl::opt< bool > WasmEnableEmEH
cl::opt< bool > WasmEnableEmSjLj
cl::opt< bool > WasmDisableExplicitLocals
This file implements WebAssemblyException information analysis.
This file declares the WebAssembly-specific subclass of TargetMachine.
This file contains the entry points for global functions defined in the LLVM WebAssembly back-end.
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 ...
ExceptionHandling ExceptionModel
What exception model to use.
void registerPassBuilderCallbacks(PassBuilder &PbB) 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
An abstract base class for streams implementations that also support a pwrite operation.
Interfaces for registering analysis passes, producing common pass manager configurations,...
cl::opt< bool > WasmEnableEmEH
cl::opt< bool > WasmEnableEH
cl::opt< bool > WasmEnableSjLj
cl::opt< bool > WasmEnableEmSjLj
cl::opt< bool > WasmDisableExplicitLocals
cl::opt< bool > WasmEnableEH
cl::opt< bool > WasmEnableSjLj
cl::opt< bool > WasmEnableEmEH
cl::opt< bool > WasmEnableEmSjLj
cl::opt< bool > WasmDisableExplicitLocals
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.