| //=- WebAssemblySubtarget.h - Define Subtarget for the WebAssembly -*- C++ -*-// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| /// | |
| /// \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_HEADER | |
| #include "WebAssemblyGenSubtargetInfo.inc" | |
| namespace llvm { | |
| class WebAssemblySubtarget final : public WebAssemblyGenSubtargetInfo { | |
| bool HasSIMD128; | |
| bool HasAtomics; | |
| bool HasNontrappingFPToInt; | |
| bool HasSignExt; | |
| bool HasExceptionHandling; | |
| /// 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 enableMachineScheduler() const override; | |
| bool useAA() const override; | |
| // Predicates used by WebAssemblyInstrInfo.td. | |
| bool hasAddr64() const { return TargetTriple.isArch64Bit(); } | |
| bool hasSIMD128() const { return HasSIMD128; } | |
| bool hasAtomics() const { return HasAtomics; } | |
| bool hasNontrappingFPToInt() const { return HasNontrappingFPToInt; } | |
| bool hasSignExt() const { return HasSignExt; } | |
| bool hasExceptionHandling() const { return HasExceptionHandling; } | |
| /// 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 |