105 lines · c
1//===-- XtensaSubtarget.h - Define Subtarget for the Xtensa ----*- C++ -*--===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares the Xtensa specific subclass of TargetSubtargetInfo.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H14#define LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H15 16#include "XtensaFrameLowering.h"17#include "XtensaISelLowering.h"18#include "XtensaInstrInfo.h"19#include "XtensaRegisterInfo.h"20#include "llvm/CodeGen/TargetSubtargetInfo.h"21#include "llvm/IR/DataLayout.h"22#include "llvm/Target/TargetMachine.h"23 24#define GET_SUBTARGETINFO_HEADER25#include "XtensaGenSubtargetInfo.inc"26 27namespace llvm {28class StringRef;29 30class XtensaSubtarget : public XtensaGenSubtargetInfo {31private:32// Bool members corresponding to the SubtargetFeatures defined in tablegen33#define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER) \34 bool ATTRIBUTE = DEFAULT;35#include "XtensaGenSubtargetInfo.inc"36 37 const Triple &TargetTriple;38 XtensaInstrInfo InstrInfo;39 XtensaTargetLowering TLInfo;40 std::unique_ptr<const SelectionDAGTargetInfo> TSInfo;41 XtensaFrameLowering FrameLowering;42 43 XtensaSubtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);44 45public:46 XtensaSubtarget(const Triple &TT, StringRef CPU, StringRef FS,47 const TargetMachine &TM);48 49 ~XtensaSubtarget() override;50 51 const Triple &getTargetTriple() const { return TargetTriple; }52 53 const TargetFrameLowering *getFrameLowering() const override {54 return &FrameLowering;55 }56 const XtensaInstrInfo *getInstrInfo() const override { return &InstrInfo; }57 const XtensaRegisterInfo *getRegisterInfo() const override {58 return &InstrInfo.getRegisterInfo();59 }60 61 const XtensaTargetLowering *getTargetLowering() const override {62 return &TLInfo;63 }64 65 const SelectionDAGTargetInfo *getSelectionDAGInfo() const override;66 67 bool hasDensity() const { return HasDensity; }68 bool hasMAC16() const { return HasMAC16; }69 bool hasWindowed() const { return HasWindowed; }70 bool hasBoolean() const { return HasBoolean; }71 bool hasLoop() const { return HasLoop; }72 bool hasSEXT() const { return HasSEXT; }73 bool hasCLAMPS() const { return HasCLAMPS; }74 bool hasNSA() const { return HasNSA; }75 bool hasMINMAX() const { return HasMINMAX; }76 bool hasMul16() const { return HasMul16; }77 bool hasMul32() const { return HasMul32; }78 bool hasMul32High() const { return HasMul32High; }79 bool hasDiv32() const { return HasDiv32; }80 bool hasS32C1I() const { return HasS32C1I; }81 bool hasForcedAtomics() const { return HasForcedAtomics; }82 bool hasSingleFloat() const { return HasSingleFloat; }83 bool hasRegionProtection() const { return HasRegionProtection; }84 bool hasRelocatableVector() const { return HasRelocatableVector; }85 bool hasMiscSR() const { return HasMiscSR; }86 bool hasExtendedL32R() const { return HasExtendedL32R; }87 bool hasDataCache() const { return HasDataCache; }88 bool hasHighPriInterrupts() const { return HasHighPriInterrupts; }89 bool hasHighPriInterruptsLevel3() const { return HasHighPriInterruptsLevel3; }90 bool hasHighPriInterruptsLevel4() const { return HasHighPriInterruptsLevel4; }91 bool hasHighPriInterruptsLevel5() const { return HasHighPriInterruptsLevel5; }92 bool hasHighPriInterruptsLevel6() const { return HasHighPriInterruptsLevel6; }93 bool hasHighPriInterruptsLevel7() const { return HasHighPriInterruptsLevel7; }94 bool hasInterrupt() const { return HasInterrupt; }95 bool hasException() const { return HasException; }96 bool hasTHREADPTR() const { return HasTHREADPTR; }97 bool isWindowedABI() const { return hasWindowed(); }98 99 // Automatically generated by tblgen.100 void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS);101};102} // end namespace llvm103 104#endif /* LLVM_LIB_TARGET_XTENSA_XTENSASUBTARGET_H */105