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