10b57cec5SDimitry Andric //=====-- LanaiSubtarget.h - Define Subtarget for the Lanai -----*- C++ -*--==// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file declares the Lanai specific subclass of TargetSubtarget. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 140b57cec5SDimitry Andric #define LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric #include "LanaiFrameLowering.h" 170b57cec5SDimitry Andric #include "LanaiISelLowering.h" 180b57cec5SDimitry Andric #include "LanaiInstrInfo.h" 190b57cec5SDimitry Andric #include "LanaiSelectionDAGInfo.h" 200b57cec5SDimitry Andric #include "llvm/CodeGen/TargetSubtargetInfo.h" 210b57cec5SDimitry Andric #include "llvm/IR/DataLayout.h" 220b57cec5SDimitry Andric #include "llvm/Target/TargetMachine.h" 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric #define GET_SUBTARGETINFO_HEADER 250b57cec5SDimitry Andric #include "LanaiGenSubtargetInfo.inc" 260b57cec5SDimitry Andric 270b57cec5SDimitry Andric namespace llvm { 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric class LanaiSubtarget : public LanaiGenSubtargetInfo { 300b57cec5SDimitry Andric public: 310b57cec5SDimitry Andric // This constructor initializes the data members to match that 320b57cec5SDimitry Andric // of the specified triple. 330b57cec5SDimitry Andric LanaiSubtarget(const Triple &TargetTriple, StringRef Cpu, 340b57cec5SDimitry Andric StringRef FeatureString, const TargetMachine &TM, 350b57cec5SDimitry Andric const TargetOptions &Options, CodeModel::Model CodeModel, 36*5f757f3fSDimitry Andric CodeGenOptLevel OptLevel); 370b57cec5SDimitry Andric 380b57cec5SDimitry Andric // ParseSubtargetFeatures - Parses features string setting specified 390b57cec5SDimitry Andric // subtarget options. Definition of function is auto generated by tblgen. 40e8d8bef9SDimitry Andric void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS); 410b57cec5SDimitry Andric 420b57cec5SDimitry Andric LanaiSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS); 430b57cec5SDimitry Andric 440b57cec5SDimitry Andric void initSubtargetFeatures(StringRef CPU, StringRef FS); 450b57cec5SDimitry Andric enableMachineScheduler()460b57cec5SDimitry Andric bool enableMachineScheduler() const override { return true; } 470b57cec5SDimitry Andric getInstrInfo()480b57cec5SDimitry Andric const LanaiInstrInfo *getInstrInfo() const override { return &InstrInfo; } 490b57cec5SDimitry Andric getFrameLowering()500b57cec5SDimitry Andric const TargetFrameLowering *getFrameLowering() const override { 510b57cec5SDimitry Andric return &FrameLowering; 520b57cec5SDimitry Andric } 530b57cec5SDimitry Andric getRegisterInfo()540b57cec5SDimitry Andric const LanaiRegisterInfo *getRegisterInfo() const override { 550b57cec5SDimitry Andric return &InstrInfo.getRegisterInfo(); 560b57cec5SDimitry Andric } 570b57cec5SDimitry Andric getTargetLowering()580b57cec5SDimitry Andric const LanaiTargetLowering *getTargetLowering() const override { 590b57cec5SDimitry Andric return &TLInfo; 600b57cec5SDimitry Andric } 610b57cec5SDimitry Andric getSelectionDAGInfo()620b57cec5SDimitry Andric const LanaiSelectionDAGInfo *getSelectionDAGInfo() const override { 630b57cec5SDimitry Andric return &TSInfo; 640b57cec5SDimitry Andric } 650b57cec5SDimitry Andric 660b57cec5SDimitry Andric private: 670b57cec5SDimitry Andric LanaiFrameLowering FrameLowering; 680b57cec5SDimitry Andric LanaiInstrInfo InstrInfo; 690b57cec5SDimitry Andric LanaiTargetLowering TLInfo; 700b57cec5SDimitry Andric LanaiSelectionDAGInfo TSInfo; 710b57cec5SDimitry Andric }; 720b57cec5SDimitry Andric } // namespace llvm 730b57cec5SDimitry Andric 740b57cec5SDimitry Andric #endif // LLVM_LIB_TARGET_LANAI_LANAISUBTARGET_H 75