//===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file declares the CSKY specific subclass of TargetSubtargetInfo. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H #define LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H #include "CSKYFrameLowering.h" #include "CSKYISelLowering.h" #include "CSKYInstrInfo.h" #include "CSKYRegisterInfo.h" #include "llvm/CodeGen/SelectionDAGTargetInfo.h" #include "llvm/CodeGen/TargetSubtargetInfo.h" #include "llvm/Target/TargetMachine.h" #define GET_SUBTARGETINFO_HEADER #include "CSKYGenSubtargetInfo.inc" namespace llvm { class StringRef; class CSKYSubtarget : public CSKYGenSubtargetInfo { virtual void anchor(); CSKYFrameLowering FrameLowering; CSKYInstrInfo InstrInfo; CSKYRegisterInfo RegInfo; CSKYTargetLowering TLInfo; SelectionDAGTargetInfo TSInfo; bool UseHardFloat; bool UseHardFloatABI; bool HasFPUv2SingleFloat; bool HasFPUv2DoubleFloat; bool HasFPUv3SingleFloat; bool HasFPUv3DoubleFloat; bool HasBTST16; bool HasJAVA; bool HasExtendLrw; bool HasDoloop; bool HasHighRegisters; bool HasE1; bool HasE2; bool Has2E3; bool HasMP; bool Has3E3r1; bool Has3r1E3r2; bool Has3r2E3r3; bool Has3E7; bool HasMP1E2; bool Has7E10; bool Has10E60; public: CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS, const TargetMachine &TM); const CSKYFrameLowering *getFrameLowering() const override { return &FrameLowering; } const CSKYInstrInfo *getInstrInfo() const override { return &InstrInfo; } const CSKYRegisterInfo *getRegisterInfo() const override { return &RegInfo; } const CSKYTargetLowering *getTargetLowering() const override { return &TLInfo; } const SelectionDAGTargetInfo *getSelectionDAGInfo() const override { return &TSInfo; } /// Initializes using the passed in CPU and feature strings so that we can /// use initializer lists for subtarget initialization. CSKYSubtarget &initializeSubtargetDependencies(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS); // Generated by inc file void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS); bool useHardFloatABI() const; bool useHardFloat() const { return UseHardFloat; } bool hasFPUv2SingleFloat() const { return HasFPUv2SingleFloat; } bool hasFPUv2DoubleFloat() const { return HasFPUv2DoubleFloat; } bool hasFPUv2() const { return HasFPUv2SingleFloat || HasFPUv2DoubleFloat; } bool hasFPUv3SingleFloat() const { return HasFPUv3SingleFloat; } bool hasFPUv3DoubleFloat() const { return HasFPUv3DoubleFloat; } bool hasFPUv3() const { return HasFPUv3SingleFloat || HasFPUv3DoubleFloat; } bool hasAnyFloatExt() const { return hasFPUv2() || hasFPUv3(); }; bool hasBTST16() const { return HasBTST16; } bool hasJAVA() const { return HasJAVA; } bool hasExtendLrw() const { return HasExtendLrw; } bool hasDoloop() const { return HasDoloop; } bool hasHighRegisters() const { return HasHighRegisters; } bool hasE1() const { return HasE1; } bool hasE2() const { return HasE2; } bool has2E3() const { return Has2E3; } bool has3r1E3r2() const { return Has3r1E3r2; } bool has3r2E3r3() const { return Has3r2E3r3; } bool has3E3r1() const { return Has3E3r1; } bool has3E7() const { return Has3E7; } bool hasMP() const { return HasMP; } bool hasMP1E2() const { return HasMP1E2; } bool has7E10() const { return Has7E10; } bool has10E60() const { return Has10E60; } }; } // namespace llvm #endif // LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H