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