1*9880d681SAndroid Build Coastguard Worker //=- WebAssemblySubtarget.h - Define Subtarget for the WebAssembly -*- C++ -*-// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker /// 10*9880d681SAndroid Build Coastguard Worker /// \file 11*9880d681SAndroid Build Coastguard Worker /// \brief This file declares the WebAssembly-specific subclass of 12*9880d681SAndroid Build Coastguard Worker /// TargetSubtarget. 13*9880d681SAndroid Build Coastguard Worker /// 14*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H 17*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYSUBTARGET_H 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker #include "WebAssemblyFrameLowering.h" 20*9880d681SAndroid Build Coastguard Worker #include "WebAssemblyISelLowering.h" 21*9880d681SAndroid Build Coastguard Worker #include "WebAssemblyInstrInfo.h" 22*9880d681SAndroid Build Coastguard Worker #include "WebAssemblySelectionDAGInfo.h" 23*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetSubtargetInfo.h" 24*9880d681SAndroid Build Coastguard Worker #include <string> 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker #define GET_SUBTARGETINFO_HEADER 27*9880d681SAndroid Build Coastguard Worker #include "WebAssemblyGenSubtargetInfo.inc" 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker namespace llvm { 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker class WebAssemblySubtarget final : public WebAssemblyGenSubtargetInfo { 32*9880d681SAndroid Build Coastguard Worker bool HasSIMD128; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker /// String name of used CPU. 35*9880d681SAndroid Build Coastguard Worker std::string CPUString; 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker /// What processor and OS we're targeting. 38*9880d681SAndroid Build Coastguard Worker Triple TargetTriple; 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker WebAssemblyFrameLowering FrameLowering; 41*9880d681SAndroid Build Coastguard Worker WebAssemblyInstrInfo InstrInfo; 42*9880d681SAndroid Build Coastguard Worker WebAssemblySelectionDAGInfo TSInfo; 43*9880d681SAndroid Build Coastguard Worker WebAssemblyTargetLowering TLInfo; 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker /// Initializes using CPUString and the passed in feature string so that we 46*9880d681SAndroid Build Coastguard Worker /// can use initializer lists for subtarget initialization. 47*9880d681SAndroid Build Coastguard Worker WebAssemblySubtarget &initializeSubtargetDependencies(StringRef FS); 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker public: 50*9880d681SAndroid Build Coastguard Worker /// This constructor initializes the data members to match that 51*9880d681SAndroid Build Coastguard Worker /// of the specified triple. 52*9880d681SAndroid Build Coastguard Worker WebAssemblySubtarget(const Triple &TT, const std::string &CPU, 53*9880d681SAndroid Build Coastguard Worker const std::string &FS, const TargetMachine &TM); 54*9880d681SAndroid Build Coastguard Worker getSelectionDAGInfo()55*9880d681SAndroid Build Coastguard Worker const WebAssemblySelectionDAGInfo *getSelectionDAGInfo() const override { 56*9880d681SAndroid Build Coastguard Worker return &TSInfo; 57*9880d681SAndroid Build Coastguard Worker } getFrameLowering()58*9880d681SAndroid Build Coastguard Worker const WebAssemblyFrameLowering *getFrameLowering() const override { 59*9880d681SAndroid Build Coastguard Worker return &FrameLowering; 60*9880d681SAndroid Build Coastguard Worker } getTargetLowering()61*9880d681SAndroid Build Coastguard Worker const WebAssemblyTargetLowering *getTargetLowering() const override { 62*9880d681SAndroid Build Coastguard Worker return &TLInfo; 63*9880d681SAndroid Build Coastguard Worker } getInstrInfo()64*9880d681SAndroid Build Coastguard Worker const WebAssemblyInstrInfo *getInstrInfo() const override { 65*9880d681SAndroid Build Coastguard Worker return &InstrInfo; 66*9880d681SAndroid Build Coastguard Worker } getRegisterInfo()67*9880d681SAndroid Build Coastguard Worker const WebAssemblyRegisterInfo *getRegisterInfo() const override { 68*9880d681SAndroid Build Coastguard Worker return &getInstrInfo()->getRegisterInfo(); 69*9880d681SAndroid Build Coastguard Worker } getTargetTriple()70*9880d681SAndroid Build Coastguard Worker const Triple &getTargetTriple() const { return TargetTriple; } 71*9880d681SAndroid Build Coastguard Worker bool enableMachineScheduler() const override; 72*9880d681SAndroid Build Coastguard Worker bool useAA() const override; 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker // Predicates used by WebAssemblyInstrInfo.td. hasAddr64()75*9880d681SAndroid Build Coastguard Worker bool hasAddr64() const { return TargetTriple.isArch64Bit(); } hasSIMD128()76*9880d681SAndroid Build Coastguard Worker bool hasSIMD128() const { return HasSIMD128; } 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker /// Parses features string setting specified subtarget options. Definition of 79*9880d681SAndroid Build Coastguard Worker /// function is auto generated by tblgen. 80*9880d681SAndroid Build Coastguard Worker void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 81*9880d681SAndroid Build Coastguard Worker }; 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker } // end namespace llvm 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker #endif 86