brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 6a5201b Raw
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