1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file is used as the registry of passes that are part of the WebAssembly
10// backend.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MACHINE_MODULE_PASS
15#define MACHINE_MODULE_PASS(NAME, CREATE_PASS)
16#endif
17MACHINE_MODULE_PASS("wasm-mclower-prepass", WebAssemblyMCLowerPrePass())
18#undef MACHINE_MODULE_PASS
19
20#ifndef MODULE_PASS
21#define MODULE_PASS(NAME, CREATE_PASS)
22#endif
23MODULE_PASS("wasm-add-missing-prototypes", WebAssemblyAddMissingPrototypesPass())
24MODULE_PASS("wasm-asm-printer-begin", WebAssemblyAsmPrinterBeginPass())
25MODULE_PASS("wasm-asm-printer-end", WebAssemblyAsmPrinterEndPass())
26MODULE_PASS("wasm-coalesce-features-and-strip-atomics",
27 WebAssemblyCoalesceFeaturesAndStripAtomicsPass(*this))
28MODULE_PASS("wasm-fix-function-bitcasts", WebAssemblyFixFunctionBitcastsPass())
29MODULE_PASS("wasm-lower-em-ehsjlj", WebAssemblyLowerEmscriptenEHSjLjPass())
30#undef MODULE_PASS
31
32#ifndef FUNCTION_PASS
33#define FUNCTION_PASS(NAME, CREATE_PASS)
34#endif
35FUNCTION_PASS("wasm-optimize-returned", WebAssemblyOptimizeReturnedPass())
36FUNCTION_PASS("wasm-reduce-to-any-all-true", WebAssemblyReduceToAnyAllTruePass(*this))
37FUNCTION_PASS("wasm-ref-type-mem2local", WebAssemblyRefTypeMem2LocalPass())
38#undef FUNCTION_PASS
39
40#ifndef MACHINE_FUNCTION_ANALYSIS
41#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)
42#endif
43MACHINE_FUNCTION_ANALYSIS("wasm-exception-info", WebAssemblyExceptionAnalysis())
44#undef MACHINE_FUNCTION_ANALYSIS
45
46#ifndef MACHINE_FUNCTION_PASS
47#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
48#endif
49MACHINE_FUNCTION_PASS("wasm-argument-move", WebAssemblyArgumentMovePass())
50MACHINE_FUNCTION_PASS("wasm-asm-printer", WebAssemblyAsmPrinterPass())
51MACHINE_FUNCTION_PASS("wasm-cfg-sort", WebAssemblyCFGSortPass())
52MACHINE_FUNCTION_PASS("wasm-cfg-stackify", WebAssemblyCFGStackifyPass())
53MACHINE_FUNCTION_PASS("wasm-clean-code-after-trap",
54 WebAssemblyCleanCodeAfterTrapPass())
55MACHINE_FUNCTION_PASS("wasm-debug-fixup", WebAssemblyDebugFixupPass())
56MACHINE_FUNCTION_PASS("wasm-explicit-locals", WebAssemblyExplicitLocalsPass())
57MACHINE_FUNCTION_PASS("wasm-isel", WebAssemblyISelDAGToDAGPass(*this, getOptLevel()))
58MACHINE_FUNCTION_PASS("wasm-fix-br-table-defaults",
59 WebAssemblyFixBrTableDefaultsPass())
60MACHINE_FUNCTION_PASS("wasm-fix-irreducible-control-flow",
61 WebAssemblyFixIrreducibleControlFlowPass())
62MACHINE_FUNCTION_PASS("wasm-late-eh-prepare", WebAssemblyLateEHPreparePass())
63MACHINE_FUNCTION_PASS("wasm-lower-br-unless", WebAssemblyLowerBrUnlessPass())
64MACHINE_FUNCTION_PASS("wasm-mem-intrinsic-results", WebAssemblyMemIntrinsicResultsPass())
65MACHINE_FUNCTION_PASS("wasm-nullify-dbg-value-lists",
66 WebAssemblyNullifyDebugValueListsPass())
67MACHINE_FUNCTION_PASS("wasm-optimize-live-intervals",
68 WebAssemblyOptimizeLiveIntervalsPass())
69MACHINE_FUNCTION_PASS("wasm-peephole", WebAssemblyPeepholePass())
70MACHINE_FUNCTION_PASS("wasm-postlegalizer-combiner", WebAssemblyPostLegalizerCombinerPass())
71MACHINE_FUNCTION_PASS("wasm-prelegalizer-combiner", WebAssemblyPreLegalizerCombinerPass())
72MACHINE_FUNCTION_PASS("wasm-reg-coloring", WebAssemblyRegColoringPass())
73MACHINE_FUNCTION_PASS("wasm-reg-numbering", WebAssemblyRegNumberingPass())
74MACHINE_FUNCTION_PASS("wasm-reg-stackify", WebAssemblyRegStackifyPass(getOptLevel()))
75MACHINE_FUNCTION_PASS("wasm-replace-phys-regs", WebAssemblyReplacePhysRegsPass())
76MACHINE_FUNCTION_PASS("wasm-set-p2align-operands",
77 WebAssemblySetP2AlignOperandsPass())
78#undef MACHINE_FUNCTION_PASS
79