1*b5046a7fSAndrei Safronov //===-- XtensaSubtarget.h - Define Subtarget for the Xtensa ----*- C++ -*--===// 2*b5046a7fSAndrei Safronov // 3*b5046a7fSAndrei Safronov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*b5046a7fSAndrei Safronov // See https://llvm.org/LICENSE.txt for license information. 5*b5046a7fSAndrei Safronov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*b5046a7fSAndrei Safronov // 7*b5046a7fSAndrei Safronov //===----------------------------------------------------------------------===// 8*b5046a7fSAndrei Safronov // 9*b5046a7fSAndrei Safronov // This file declares the Xtensa specific subclass of TargetSubtargetInfo. 10*b5046a7fSAndrei Safronov // 11*b5046a7fSAndrei Safronov //===----------------------------------------------------------------------===// 12*b5046a7fSAndrei Safronov 13*b5046a7fSAndrei Safronov #ifndef LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H 14*b5046a7fSAndrei Safronov #define LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H 15*b5046a7fSAndrei Safronov 16*b5046a7fSAndrei Safronov #include "XtensaFrameLowering.h" 17*b5046a7fSAndrei Safronov #include "XtensaISelLowering.h" 18*b5046a7fSAndrei Safronov #include "XtensaInstrInfo.h" 19*b5046a7fSAndrei Safronov #include "XtensaRegisterInfo.h" 20*b5046a7fSAndrei Safronov #include "llvm/CodeGen/SelectionDAGTargetInfo.h" 21*b5046a7fSAndrei Safronov #include "llvm/CodeGen/TargetSubtargetInfo.h" 22*b5046a7fSAndrei Safronov #include "llvm/IR/DataLayout.h" 23*b5046a7fSAndrei Safronov #include "llvm/Target/TargetMachine.h" 24*b5046a7fSAndrei Safronov 25*b5046a7fSAndrei Safronov #define GET_SUBTARGETINFO_HEADER 26*b5046a7fSAndrei Safronov #include "XtensaGenSubtargetInfo.inc" 27*b5046a7fSAndrei Safronov 28*b5046a7fSAndrei Safronov namespace llvm { 29*b5046a7fSAndrei Safronov class StringRef; 30*b5046a7fSAndrei Safronov 31*b5046a7fSAndrei Safronov class XtensaSubtarget : public XtensaGenSubtargetInfo { 32*b5046a7fSAndrei Safronov private: 33*b5046a7fSAndrei Safronov const Triple &TargetTriple; 34*b5046a7fSAndrei Safronov XtensaInstrInfo InstrInfo; 35*b5046a7fSAndrei Safronov XtensaTargetLowering TLInfo; 36*b5046a7fSAndrei Safronov SelectionDAGTargetInfo TSInfo; 37*b5046a7fSAndrei Safronov XtensaFrameLowering FrameLowering; 38*b5046a7fSAndrei Safronov 39*b5046a7fSAndrei Safronov // Enabled Xtensa Density extension 40*b5046a7fSAndrei Safronov bool HasDensity; 41*b5046a7fSAndrei Safronov 42*b5046a7fSAndrei Safronov XtensaSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS); 43*b5046a7fSAndrei Safronov 44*b5046a7fSAndrei Safronov public: 45*b5046a7fSAndrei Safronov XtensaSubtarget(const Triple &TT, StringRef CPU, StringRef FS, 46*b5046a7fSAndrei Safronov const TargetMachine &TM); 47*b5046a7fSAndrei Safronov getTargetTriple()48*b5046a7fSAndrei Safronov const Triple &getTargetTriple() const { return TargetTriple; } 49*b5046a7fSAndrei Safronov getFrameLowering()50*b5046a7fSAndrei Safronov const TargetFrameLowering *getFrameLowering() const override { 51*b5046a7fSAndrei Safronov return &FrameLowering; 52*b5046a7fSAndrei Safronov } getInstrInfo()53*b5046a7fSAndrei Safronov const XtensaInstrInfo *getInstrInfo() const override { return &InstrInfo; } getRegisterInfo()54*b5046a7fSAndrei Safronov const XtensaRegisterInfo *getRegisterInfo() const override { 55*b5046a7fSAndrei Safronov return &InstrInfo.getRegisterInfo(); 56*b5046a7fSAndrei Safronov } 57*b5046a7fSAndrei Safronov getTargetLowering()58*b5046a7fSAndrei Safronov const XtensaTargetLowering *getTargetLowering() const override { 59*b5046a7fSAndrei Safronov return &TLInfo; 60*b5046a7fSAndrei Safronov } getSelectionDAGInfo()61*b5046a7fSAndrei Safronov const SelectionDAGTargetInfo *getSelectionDAGInfo() const override { 62*b5046a7fSAndrei Safronov return &TSInfo; 63*b5046a7fSAndrei Safronov } 64*b5046a7fSAndrei Safronov hasDensity()65*b5046a7fSAndrei Safronov bool hasDensity() const { return HasDensity; } 66*b5046a7fSAndrei Safronov 67*b5046a7fSAndrei Safronov // Automatically generated by tblgen. 68*b5046a7fSAndrei Safronov void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS); 69*b5046a7fSAndrei Safronov }; 70*b5046a7fSAndrei Safronov } // end namespace llvm 71*b5046a7fSAndrei Safronov 72*b5046a7fSAndrei Safronov #endif /* LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H */ 73