1 | //===-- WebAssembly.h - Top-level interface for WebAssembly ----*- C++ -*-===// |
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 | /// \file |
10 | /// This file contains the entry points for global functions defined in |
11 | /// the LLVM WebAssembly back-end. |
12 | /// |
13 | //===----------------------------------------------------------------------===// |
14 | |
15 | #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLY_H |
16 | #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLY_H |
17 | |
18 | #include "llvm/PassRegistry.h" |
19 | #include "llvm/Support/CodeGen.h" |
20 | |
21 | namespace llvm { |
22 | |
23 | class WebAssemblyTargetMachine; |
24 | class ModulePass; |
25 | class FunctionPass; |
26 | |
27 | // LLVM IR passes. |
28 | ModulePass *createWebAssemblyLowerEmscriptenEHSjLj(); |
29 | ModulePass *createWebAssemblyAddMissingPrototypes(); |
30 | ModulePass *createWebAssemblyFixFunctionBitcasts(); |
31 | FunctionPass *createWebAssemblyOptimizeReturned(); |
32 | FunctionPass *createWebAssemblyLowerRefTypesIntPtrConv(); |
33 | FunctionPass *createWebAssemblyRefTypeMem2Local(); |
34 | |
35 | // ISel and immediate followup passes. |
36 | FunctionPass *createWebAssemblyISelDag(WebAssemblyTargetMachine &TM, |
37 | CodeGenOptLevel OptLevel); |
38 | FunctionPass *createWebAssemblyArgumentMove(); |
39 | FunctionPass *createWebAssemblySetP2AlignOperands(); |
40 | |
41 | // Late passes. |
42 | FunctionPass *createWebAssemblyReplacePhysRegs(); |
43 | FunctionPass *createWebAssemblyNullifyDebugValueLists(); |
44 | FunctionPass *createWebAssemblyOptimizeLiveIntervals(); |
45 | FunctionPass *createWebAssemblyMemIntrinsicResults(); |
46 | FunctionPass *createWebAssemblyRegStackify(); |
47 | FunctionPass *createWebAssemblyRegColoring(); |
48 | FunctionPass *createWebAssemblyFixBrTableDefaults(); |
49 | FunctionPass *createWebAssemblyFixIrreducibleControlFlow(); |
50 | FunctionPass *createWebAssemblyLateEHPrepare(); |
51 | FunctionPass *createWebAssemblyCFGSort(); |
52 | FunctionPass *createWebAssemblyCFGStackify(); |
53 | FunctionPass *createWebAssemblyExplicitLocals(); |
54 | FunctionPass *createWebAssemblyLowerBrUnless(); |
55 | FunctionPass *createWebAssemblyRegNumbering(); |
56 | FunctionPass *createWebAssemblyDebugFixup(); |
57 | FunctionPass *createWebAssemblyPeephole(); |
58 | ModulePass *createWebAssemblyMCLowerPrePass(); |
59 | |
60 | // PassRegistry initialization declarations. |
61 | void initializeFixFunctionBitcastsPass(PassRegistry &); |
62 | void initializeOptimizeReturnedPass(PassRegistry &); |
63 | void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &); |
64 | void initializeWebAssemblyAddMissingPrototypesPass(PassRegistry &); |
65 | void initializeWebAssemblyArgumentMovePass(PassRegistry &); |
66 | void initializeWebAssemblyCFGSortPass(PassRegistry &); |
67 | void initializeWebAssemblyCFGStackifyPass(PassRegistry &); |
68 | void initializeWebAssemblyDAGToDAGISelPass(PassRegistry &); |
69 | void initializeWebAssemblyDebugFixupPass(PassRegistry &); |
70 | void initializeWebAssemblyExceptionInfoPass(PassRegistry &); |
71 | void initializeWebAssemblyExplicitLocalsPass(PassRegistry &); |
72 | void initializeWebAssemblyFixBrTableDefaultsPass(PassRegistry &); |
73 | void initializeWebAssemblyFixIrreducibleControlFlowPass(PassRegistry &); |
74 | void initializeWebAssemblyLateEHPreparePass(PassRegistry &); |
75 | void initializeWebAssemblyLowerBrUnlessPass(PassRegistry &); |
76 | void initializeWebAssemblyLowerEmscriptenEHSjLjPass(PassRegistry &); |
77 | void initializeWebAssemblyLowerRefTypesIntPtrConvPass(PassRegistry &); |
78 | void initializeWebAssemblyMCLowerPrePassPass(PassRegistry &); |
79 | void initializeWebAssemblyMemIntrinsicResultsPass(PassRegistry &); |
80 | void initializeWebAssemblyNullifyDebugValueListsPass(PassRegistry &); |
81 | void initializeWebAssemblyOptimizeLiveIntervalsPass(PassRegistry &); |
82 | void initializeWebAssemblyPeepholePass(PassRegistry &); |
83 | void initializeWebAssemblyRegColoringPass(PassRegistry &); |
84 | void initializeWebAssemblyRegNumberingPass(PassRegistry &); |
85 | void initializeWebAssemblyRegStackifyPass(PassRegistry &); |
86 | void initializeWebAssemblyReplacePhysRegsPass(PassRegistry &); |
87 | void initializeWebAssemblySetP2AlignOperandsPass(PassRegistry &); |
88 | |
89 | namespace WebAssembly { |
90 | enum TargetIndex { |
91 | // Followed by a local index (ULEB). |
92 | TI_LOCAL, |
93 | // Followed by an absolute global index (ULEB). DEPRECATED. |
94 | TI_GLOBAL_FIXED, |
95 | // Followed by the index from the bottom of the Wasm stack. |
96 | TI_OPERAND_STACK, |
97 | // Followed by a compilation unit relative global index (uint32_t) |
98 | // that will have an associated relocation. |
99 | TI_GLOBAL_RELOC, |
100 | // Like TI_LOCAL, but indicates an indirect value (e.g. byval arg |
101 | // passed by pointer). |
102 | TI_LOCAL_INDIRECT |
103 | }; |
104 | } // end namespace WebAssembly |
105 | |
106 | } // end namespace llvm |
107 | |
108 | #endif |
109 | |