| //=- WebAssemblySubtarget.h - Define Subtarget for the WebAssembly -*- C++ -*-// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | /// | 
 | /// \file | 
 | /// This file declares the WebAssembly-specific subclass of | 
 | /// TargetSubtarget. | 
 | /// | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H | 
 | #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H | 
 |  | 
 | #include "WebAssemblyFrameLowering.h" | 
 | #include "WebAssemblyISelLowering.h" | 
 | #include "WebAssemblyInstrInfo.h" | 
 | #include "WebAssemblySelectionDAGInfo.h" | 
 | #include "llvm/CodeGen/TargetSubtargetInfo.h" | 
 | #include <string> | 
 |  | 
 | #define GET_SUBTARGETINFO_ENUM | 
 | #define GET_SUBTARGETINFO_HEADER | 
 | #include "WebAssemblyGenSubtargetInfo.inc" | 
 |  | 
 | namespace llvm { | 
 |  | 
 | // Defined in WebAssemblyGenSubtargetInfo.inc. | 
 | extern const SubtargetFeatureKV | 
 |     WebAssemblyFeatureKV[WebAssembly::NumSubtargetFeatures]; | 
 |  | 
 | class WebAssemblySubtarget final : public WebAssemblyGenSubtargetInfo { | 
 |   enum SIMDEnum { | 
 |     NoSIMD, | 
 |     SIMD128, | 
 |     UnimplementedSIMD128, | 
 |   } SIMDLevel = NoSIMD; | 
 |  | 
 |   bool HasAtomics = false; | 
 |   bool HasNontrappingFPToInt = false; | 
 |   bool HasSignExt = false; | 
 |   bool HasExceptionHandling = false; | 
 |   bool HasBulkMemory = false; | 
 |   bool HasMultivalue = false; | 
 |   bool HasMutableGlobals = false; | 
 |   bool HasTailCall = false; | 
 |  | 
 |   /// String name of used CPU. | 
 |   std::string CPUString; | 
 |  | 
 |   /// What processor and OS we're targeting. | 
 |   Triple TargetTriple; | 
 |  | 
 |   WebAssemblyFrameLowering FrameLowering; | 
 |   WebAssemblyInstrInfo InstrInfo; | 
 |   WebAssemblySelectionDAGInfo TSInfo; | 
 |   WebAssemblyTargetLowering TLInfo; | 
 |  | 
 |   /// Initializes using CPUString and the passed in feature string so that we | 
 |   /// can use initializer lists for subtarget initialization. | 
 |   WebAssemblySubtarget &initializeSubtargetDependencies(StringRef FS); | 
 |  | 
 | public: | 
 |   /// This constructor initializes the data members to match that | 
 |   /// of the specified triple. | 
 |   WebAssemblySubtarget(const Triple &TT, const std::string &CPU, | 
 |                        const std::string &FS, const TargetMachine &TM); | 
 |  | 
 |   const WebAssemblySelectionDAGInfo *getSelectionDAGInfo() const override { | 
 |     return &TSInfo; | 
 |   } | 
 |   const WebAssemblyFrameLowering *getFrameLowering() const override { | 
 |     return &FrameLowering; | 
 |   } | 
 |   const WebAssemblyTargetLowering *getTargetLowering() const override { | 
 |     return &TLInfo; | 
 |   } | 
 |   const WebAssemblyInstrInfo *getInstrInfo() const override { | 
 |     return &InstrInfo; | 
 |   } | 
 |   const WebAssemblyRegisterInfo *getRegisterInfo() const override { | 
 |     return &getInstrInfo()->getRegisterInfo(); | 
 |   } | 
 |   const Triple &getTargetTriple() const { return TargetTriple; } | 
 |   bool enableAtomicExpand() const override; | 
 |   bool enableIndirectBrExpand() const override { return true; } | 
 |   bool enableMachineScheduler() const override; | 
 |   bool useAA() const override; | 
 |  | 
 |   // Predicates used by WebAssemblyInstrInfo.td. | 
 |   bool hasAddr64() const { return TargetTriple.isArch64Bit(); } | 
 |   bool hasSIMD128() const { return SIMDLevel >= SIMD128; } | 
 |   bool hasUnimplementedSIMD128() const { | 
 |     return SIMDLevel >= UnimplementedSIMD128; | 
 |   } | 
 |   bool hasAtomics() const { return HasAtomics; } | 
 |   bool hasNontrappingFPToInt() const { return HasNontrappingFPToInt; } | 
 |   bool hasSignExt() const { return HasSignExt; } | 
 |   bool hasExceptionHandling() const { return HasExceptionHandling; } | 
 |   bool hasBulkMemory() const { return HasBulkMemory; } | 
 |   bool hasMultivalue() const { return HasMultivalue; } | 
 |   bool hasMutableGlobals() const { return HasMutableGlobals; } | 
 |   bool hasTailCall() const { return HasTailCall; } | 
 |  | 
 |   /// Parses features string setting specified subtarget options. Definition of | 
 |   /// function is auto generated by tblgen. | 
 |   void ParseSubtargetFeatures(StringRef CPU, StringRef FS); | 
 | }; | 
 |  | 
 | } // end namespace llvm | 
 |  | 
 | #endif |