109467b48Spatrick //===-- WebAssembly.h - Top-level interface for WebAssembly  ----*- C++ -*-===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick ///
909467b48Spatrick /// \file
1009467b48Spatrick /// This file contains the entry points for global functions defined in
1109467b48Spatrick /// the LLVM WebAssembly back-end.
1209467b48Spatrick ///
1309467b48Spatrick //===----------------------------------------------------------------------===//
1409467b48Spatrick 
1509467b48Spatrick #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLY_H
1609467b48Spatrick #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLY_H
1709467b48Spatrick 
1809467b48Spatrick #include "llvm/PassRegistry.h"
1909467b48Spatrick #include "llvm/Support/CodeGen.h"
2009467b48Spatrick 
2109467b48Spatrick namespace llvm {
2209467b48Spatrick 
2309467b48Spatrick class WebAssemblyTargetMachine;
2409467b48Spatrick class ModulePass;
2509467b48Spatrick class FunctionPass;
2609467b48Spatrick 
2709467b48Spatrick // LLVM IR passes.
28*d415bd75Srobert ModulePass *createWebAssemblyLowerEmscriptenEHSjLj();
2909467b48Spatrick ModulePass *createWebAssemblyAddMissingPrototypes();
3009467b48Spatrick ModulePass *createWebAssemblyFixFunctionBitcasts();
3109467b48Spatrick FunctionPass *createWebAssemblyOptimizeReturned();
32*d415bd75Srobert FunctionPass *createWebAssemblyLowerRefTypesIntPtrConv();
3309467b48Spatrick 
3409467b48Spatrick // ISel and immediate followup passes.
3509467b48Spatrick FunctionPass *createWebAssemblyISelDag(WebAssemblyTargetMachine &TM,
3609467b48Spatrick                                        CodeGenOpt::Level OptLevel);
3709467b48Spatrick FunctionPass *createWebAssemblyArgumentMove();
3809467b48Spatrick FunctionPass *createWebAssemblySetP2AlignOperands();
3909467b48Spatrick 
4009467b48Spatrick // Late passes.
4109467b48Spatrick FunctionPass *createWebAssemblyReplacePhysRegs();
4273471bf0Spatrick FunctionPass *createWebAssemblyNullifyDebugValueLists();
4309467b48Spatrick FunctionPass *createWebAssemblyOptimizeLiveIntervals();
4409467b48Spatrick FunctionPass *createWebAssemblyMemIntrinsicResults();
4509467b48Spatrick FunctionPass *createWebAssemblyRegStackify();
4609467b48Spatrick FunctionPass *createWebAssemblyRegColoring();
47097a140dSpatrick FunctionPass *createWebAssemblyFixBrTableDefaults();
4809467b48Spatrick FunctionPass *createWebAssemblyFixIrreducibleControlFlow();
4909467b48Spatrick FunctionPass *createWebAssemblyLateEHPrepare();
5009467b48Spatrick FunctionPass *createWebAssemblyCFGSort();
5109467b48Spatrick FunctionPass *createWebAssemblyCFGStackify();
5209467b48Spatrick FunctionPass *createWebAssemblyExplicitLocals();
5309467b48Spatrick FunctionPass *createWebAssemblyLowerBrUnless();
5409467b48Spatrick FunctionPass *createWebAssemblyRegNumbering();
55097a140dSpatrick FunctionPass *createWebAssemblyDebugFixup();
5609467b48Spatrick FunctionPass *createWebAssemblyPeephole();
57*d415bd75Srobert ModulePass *createWebAssemblyMCLowerPrePass();
5809467b48Spatrick 
5909467b48Spatrick // PassRegistry initialization declarations.
6009467b48Spatrick void initializeFixFunctionBitcastsPass(PassRegistry &);
6109467b48Spatrick void initializeOptimizeReturnedPass(PassRegistry &);
62*d415bd75Srobert void initializeWebAssemblyAddMissingPrototypesPass(PassRegistry &);
6309467b48Spatrick void initializeWebAssemblyArgumentMovePass(PassRegistry &);
64*d415bd75Srobert void initializeWebAssemblyCFGSortPass(PassRegistry &);
65*d415bd75Srobert void initializeWebAssemblyCFGStackifyPass(PassRegistry &);
66*d415bd75Srobert void initializeWebAssemblyDAGToDAGISelPass(PassRegistry &);
67*d415bd75Srobert void initializeWebAssemblyDebugFixupPass(PassRegistry &);
68*d415bd75Srobert void initializeWebAssemblyExceptionInfoPass(PassRegistry &);
69*d415bd75Srobert void initializeWebAssemblyExplicitLocalsPass(PassRegistry &);
70097a140dSpatrick void initializeWebAssemblyFixBrTableDefaultsPass(PassRegistry &);
7109467b48Spatrick void initializeWebAssemblyFixIrreducibleControlFlowPass(PassRegistry &);
7209467b48Spatrick void initializeWebAssemblyLateEHPreparePass(PassRegistry &);
7309467b48Spatrick void initializeWebAssemblyLowerBrUnlessPass(PassRegistry &);
74*d415bd75Srobert void initializeWebAssemblyLowerEmscriptenEHSjLjPass(PassRegistry &);
75*d415bd75Srobert void initializeWebAssemblyLowerRefTypesIntPtrConvPass(PassRegistry &);
7673471bf0Spatrick void initializeWebAssemblyMCLowerPrePassPass(PassRegistry &);
77*d415bd75Srobert void initializeWebAssemblyMemIntrinsicResultsPass(PassRegistry &);
78*d415bd75Srobert void initializeWebAssemblyNullifyDebugValueListsPass(PassRegistry &);
79*d415bd75Srobert void initializeWebAssemblyOptimizeLiveIntervalsPass(PassRegistry &);
80*d415bd75Srobert void initializeWebAssemblyPeepholePass(PassRegistry &);
81*d415bd75Srobert void initializeWebAssemblyRegColoringPass(PassRegistry &);
82*d415bd75Srobert void initializeWebAssemblyRegNumberingPass(PassRegistry &);
83*d415bd75Srobert void initializeWebAssemblyRegStackifyPass(PassRegistry &);
84*d415bd75Srobert void initializeWebAssemblyReplacePhysRegsPass(PassRegistry &);
85*d415bd75Srobert void initializeWebAssemblySetP2AlignOperandsPass(PassRegistry &);
8609467b48Spatrick 
8709467b48Spatrick namespace WebAssembly {
88097a140dSpatrick enum TargetIndex {
89097a140dSpatrick   // Followed by a local index (ULEB).
90097a140dSpatrick   TI_LOCAL,
91097a140dSpatrick   // Followed by an absolute global index (ULEB). DEPRECATED.
92097a140dSpatrick   TI_GLOBAL_FIXED,
9373471bf0Spatrick   // Followed by the index from the bottom of the Wasm stack.
94097a140dSpatrick   TI_OPERAND_STACK,
95097a140dSpatrick   // Followed by a compilation unit relative global index (uint32_t)
96097a140dSpatrick   // that will have an associated relocation.
9773471bf0Spatrick   TI_GLOBAL_RELOC,
9873471bf0Spatrick   // Like TI_LOCAL, but indicates an indirect value (e.g. byval arg
9973471bf0Spatrick   // passed by pointer).
10073471bf0Spatrick   TI_LOCAL_INDIRECT
101097a140dSpatrick };
10209467b48Spatrick } // end namespace WebAssembly
10309467b48Spatrick 
10409467b48Spatrick } // end namespace llvm
10509467b48Spatrick 
10609467b48Spatrick #endif
107