1*9880d681SAndroid Build Coastguard Worker //=====-- LanaiSubtarget.h - Define Subtarget for the Lanai -----*- 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 // This file declares the Lanai specific subclass of TargetSubtarget. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 15*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker #include "LanaiFrameLowering.h" 18*9880d681SAndroid Build Coastguard Worker #include "LanaiISelLowering.h" 19*9880d681SAndroid Build Coastguard Worker #include "LanaiInstrInfo.h" 20*9880d681SAndroid Build Coastguard Worker #include "LanaiSelectionDAGInfo.h" 21*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/DataLayout.h" 22*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetFrameLowering.h" 23*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetMachine.h" 24*9880d681SAndroid Build Coastguard Worker #include "llvm/Target/TargetSubtargetInfo.h" 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker #define GET_SUBTARGETINFO_HEADER 27*9880d681SAndroid Build Coastguard Worker #include "LanaiGenSubtargetInfo.inc" 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker namespace llvm { 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker class LanaiSubtarget : public LanaiGenSubtargetInfo { 32*9880d681SAndroid Build Coastguard Worker public: 33*9880d681SAndroid Build Coastguard Worker // This constructor initializes the data members to match that 34*9880d681SAndroid Build Coastguard Worker // of the specified triple. 35*9880d681SAndroid Build Coastguard Worker LanaiSubtarget(const Triple &TargetTriple, StringRef Cpu, 36*9880d681SAndroid Build Coastguard Worker StringRef FeatureString, const TargetMachine &TM, 37*9880d681SAndroid Build Coastguard Worker const TargetOptions &Options, CodeModel::Model CodeModel, 38*9880d681SAndroid Build Coastguard Worker CodeGenOpt::Level OptLevel); 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker // ParseSubtargetFeatures - Parses features string setting specified 41*9880d681SAndroid Build Coastguard Worker // subtarget options. Definition of function is auto generated by tblgen. 42*9880d681SAndroid Build Coastguard Worker void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker LanaiSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS); 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker void initSubtargetFeatures(StringRef CPU, StringRef FS); 47*9880d681SAndroid Build Coastguard Worker enableMachineScheduler()48*9880d681SAndroid Build Coastguard Worker bool enableMachineScheduler() const override { return true; } 49*9880d681SAndroid Build Coastguard Worker getInstrInfo()50*9880d681SAndroid Build Coastguard Worker const LanaiInstrInfo *getInstrInfo() const override { return &InstrInfo; } 51*9880d681SAndroid Build Coastguard Worker getFrameLowering()52*9880d681SAndroid Build Coastguard Worker const TargetFrameLowering *getFrameLowering() const override { 53*9880d681SAndroid Build Coastguard Worker return &FrameLowering; 54*9880d681SAndroid Build Coastguard Worker } 55*9880d681SAndroid Build Coastguard Worker getRegisterInfo()56*9880d681SAndroid Build Coastguard Worker const LanaiRegisterInfo *getRegisterInfo() const override { 57*9880d681SAndroid Build Coastguard Worker return &InstrInfo.getRegisterInfo(); 58*9880d681SAndroid Build Coastguard Worker } 59*9880d681SAndroid Build Coastguard Worker getTargetLowering()60*9880d681SAndroid Build Coastguard Worker const LanaiTargetLowering *getTargetLowering() const override { 61*9880d681SAndroid Build Coastguard Worker return &TLInfo; 62*9880d681SAndroid Build Coastguard Worker } 63*9880d681SAndroid Build Coastguard Worker getSelectionDAGInfo()64*9880d681SAndroid Build Coastguard Worker const LanaiSelectionDAGInfo *getSelectionDAGInfo() const override { 65*9880d681SAndroid Build Coastguard Worker return &TSInfo; 66*9880d681SAndroid Build Coastguard Worker } 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker private: 69*9880d681SAndroid Build Coastguard Worker LanaiFrameLowering FrameLowering; 70*9880d681SAndroid Build Coastguard Worker LanaiInstrInfo InstrInfo; 71*9880d681SAndroid Build Coastguard Worker LanaiTargetLowering TLInfo; 72*9880d681SAndroid Build Coastguard Worker LanaiSelectionDAGInfo TSInfo; 73*9880d681SAndroid Build Coastguard Worker }; 74*9880d681SAndroid Build Coastguard Worker } // namespace llvm 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker #endif // LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 77