LLVM 20.0.0git
CSKYSubtarget.h
Go to the documentation of this file.
1//===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- 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-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the CSKY specific subclass of TargetSubtargetInfo.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H
14#define LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H
15
16#include "CSKYFrameLowering.h"
17#include "CSKYISelLowering.h"
18#include "CSKYInstrInfo.h"
19#include "CSKYRegisterInfo.h"
23
24#define GET_SUBTARGETINFO_HEADER
25#include "CSKYGenSubtargetInfo.inc"
26
27namespace llvm {
28class StringRef;
29
31 virtual void anchor();
32
33 CSKYFrameLowering FrameLowering;
34 CSKYInstrInfo InstrInfo;
36 CSKYTargetLowering TLInfo;
38
39 enum CSKYProcFamilyEnum {
40 Others,
41
42 CK801,
43 CK802,
44 CK803,
45 CK803S,
46 CK804,
47 CK805,
48 CK807,
49 CK810,
50 CK810V,
51 CK860,
52 CK860V
53 };
54
55 /// CSKYProcFamily - CSKY processor family: CK801, CK802, and others.
56 CSKYProcFamilyEnum CSKYProcFamily = Others;
57
58 bool UseHardFloat;
59 bool UseHardFloatABI;
60 bool HasFPUv2SingleFloat;
61 bool HasFPUv2DoubleFloat;
62 bool HasFPUv3HalfWord;
63 bool HasFPUv3HalfFloat;
64 bool HasFPUv3SingleFloat;
65 bool HasFPUv3DoubleFloat;
66 bool HasFdivdu;
67 bool HasFLOATE1;
68 bool HasFLOAT1E2;
69 bool HasFLOAT1E3;
70 bool HasFLOAT3E4;
71 bool HasFLOAT7E60;
72 bool HasBTST16;
73 bool HasExtendLrw;
74 bool HasTrust;
75 bool HasJAVA;
76 bool HasCache;
77 bool HasNVIC;
78 bool HasDSP;
79 bool HasDSP1E2;
80 bool HasDSPE60;
81 bool HasDSPV2;
82 bool HasDSP_Silan;
83 bool HasDoloop;
84 bool HasHardwareDivide;
85 bool HasHighRegisters;
86 bool HasVDSPV2;
87 bool HasVDSP2E3;
88 bool HasVDSP2E60F;
89 bool ReadTPHard;
90 bool HasVDSPV1_128;
91 bool UseCCRT;
92 bool DumpConstPool;
93 bool EnableInterruptAttribute;
94 bool HasPushPop;
95 bool HasSTM;
96 bool SmartMode;
97 bool EnableStackSize;
98
99 bool HasE1;
100 bool HasE2;
101 bool Has2E3;
102 bool HasMP;
103 bool Has3E3r1;
104 bool Has3r1E3r2;
105 bool Has3r2E3r3;
106 bool Has3E7;
107 bool HasMP1E2;
108 bool Has7E10;
109 bool Has10E60;
110
111public:
112 CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU,
113 StringRef FS, const TargetMachine &TM);
114
115 const CSKYFrameLowering *getFrameLowering() const override {
116 return &FrameLowering;
117 }
118 const CSKYInstrInfo *getInstrInfo() const override { return &InstrInfo; }
119 const CSKYRegisterInfo *getRegisterInfo() const override { return &RegInfo; }
120 const CSKYTargetLowering *getTargetLowering() const override {
121 return &TLInfo;
122 }
124 return &TSInfo;
125 }
126
127 /// Initializes using the passed in CPU and feature strings so that we can
128 /// use initializer lists for subtarget initialization.
130 StringRef CPU,
131 StringRef TuneCPU,
132 StringRef FS);
133
134 // Generated by inc file
136
137 bool useHardFloatABI() const;
138 bool useHardFloat() const { return UseHardFloat; }
139 bool hasFPUv2SingleFloat() const { return HasFPUv2SingleFloat; }
140 bool hasFPUv2DoubleFloat() const { return HasFPUv2DoubleFloat; }
141 bool hasFPUv2() const { return HasFPUv2SingleFloat || HasFPUv2DoubleFloat; }
142 bool hasFPUv3HalfWord() const { return HasFPUv3HalfWord; }
143 bool hasFPUv3HalfFloat() const { return HasFPUv3HalfFloat; }
144 bool hasFPUv3SingleFloat() const { return HasFPUv3SingleFloat; }
145 bool hasFPUv3DoubleFloat() const { return HasFPUv3DoubleFloat; }
146 bool hasFPUv3() const {
147 return HasFPUv3HalfFloat || HasFPUv3SingleFloat || HasFPUv3DoubleFloat;
148 }
149 bool hasAnyFloatExt() const { return hasFPUv2() || hasFPUv3(); };
150 bool hasFdivdu() const { return HasFdivdu; }
151 bool hasFLOATE1() const { return HasFLOATE1; }
152 bool hasFLOAT1E2() const { return HasFLOAT1E2; }
153 bool hasFLOAT1E3() const { return HasFLOAT1E3; }
154 bool hasFLOAT3E4() const { return HasFLOAT3E4; }
155 bool hasFLOAT7E60() const { return HasFLOAT7E60; }
156 bool hasExtendLrw() const { return HasExtendLrw; }
157 bool hasBTST16() const { return HasBTST16; }
158 bool hasTrust() const { return HasTrust; }
159 bool hasJAVA() const { return HasJAVA; }
160 bool hasCache() const { return HasCache; }
161 bool hasNVIC() const { return HasNVIC; }
162 bool hasDSP() const { return HasDSP; }
163 bool hasDSP1E2() const { return HasDSP1E2; }
164 bool hasDSPE60() const { return HasDSPE60; }
165 bool hasDSPV2() const { return HasDSPV2; }
166 bool hasDSP_Silan() const { return HasDSP_Silan; }
167 bool hasDoloop() const { return HasDoloop; }
168 bool hasHighRegisters() const { return HasHighRegisters; }
169 bool hasVDSPV2() const { return HasVDSPV2; }
170 bool hasVDSPV2_FLOAT() const { return HasVDSPV2 && UseHardFloat; }
171 bool hasVDSPV2_HALF() const {
172 return HasVDSPV2 && UseHardFloat && HasFPUv3HalfFloat;
173 }
174 bool hasVDSP2E3() const { return HasVDSP2E3; }
175 bool hasVDSP2E60F() const { return HasVDSP2E60F; }
176 bool readTPHard() const { return ReadTPHard; }
177 bool hasVDSPV1_128() const { return HasVDSPV1_128; }
178 bool useCCRT() const { return UseCCRT; }
179 bool dumpConstPool() const { return DumpConstPool; }
180 bool enableInterruptAttribute() const { return EnableInterruptAttribute; }
181 bool hasPushPop() const { return HasPushPop; }
182 bool hasSTM() const { return HasSTM; }
183 bool smartMode() const { return SmartMode; }
184 bool enableStackSize() const { return EnableStackSize; }
185
186 bool hasE1() const { return HasE1; }
187 bool hasE2() const { return HasE2; }
188 bool has2E3() const { return Has2E3; }
189 bool has3r1E3r2() const { return Has3r1E3r2; }
190 bool has3r2E3r3() const { return Has3r2E3r3; }
191 bool has3E3r1() const { return Has3E3r1; }
192 bool has3E7() const { return Has3E7; }
193 bool hasMP() const { return HasMP; }
194 bool hasMP1E2() const { return HasMP1E2; }
195 bool has7E10() const { return Has7E10; }
196 bool has10E60() const { return Has10E60; }
197
198 bool isCK801() const { return CSKYProcFamily == CK801; }
199 bool isCK802() const { return CSKYProcFamily == CK802; }
200 bool isCK803() const { return CSKYProcFamily == CK803; }
201 bool isCK803S() const { return CSKYProcFamily == CK803S; }
202 bool isCK804() const { return CSKYProcFamily == CK804; }
203 bool isCK805() const { return CSKYProcFamily == CK805; }
204 bool isCK807() const { return CSKYProcFamily == CK807; }
205 bool isCK810() const { return CSKYProcFamily == CK810; }
206 bool isCK810V() const { return CSKYProcFamily == CK810V; }
207 bool isCK860() const { return CSKYProcFamily == CK860; }
208 bool isCK860V() const { return CSKYProcFamily == CK860V; }
209
210 const unsigned XLen = 32;
211};
212} // namespace llvm
213
214#endif // LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H
const char LLVMTargetMachineRef TM
bool hasHighRegisters() const
bool isCK860V() const
bool hasDSP1E2() const
bool hasMP() const
bool hasJAVA() const
bool hasFPUv2SingleFloat() const
bool has3E7() const
const CSKYFrameLowering * getFrameLowering() const override
bool hasFLOAT1E2() const
bool hasVDSPV2_HALF() const
bool hasFdivdu() const
bool hasFPUv3SingleFloat() const
bool hasDSP() const
bool hasCache() const
CSKYSubtarget & initializeSubtargetDependencies(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS)
Initializes using the passed in CPU and feature strings so that we can use initializer lists for subt...
bool isCK807() const
bool hasVDSPV2() const
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
const CSKYRegisterInfo * getRegisterInfo() const override
const unsigned XLen
bool dumpConstPool() const
bool isCK801() const
bool hasFLOAT7E60() const
bool hasE2() const
const SelectionDAGTargetInfo * getSelectionDAGInfo() const override
bool isCK803() const
bool enableInterruptAttribute() const
bool hasMP1E2() const
bool hasFPUv2DoubleFloat() const
bool hasAnyFloatExt() const
bool hasDSP_Silan() const
bool hasVDSPV1_128() const
bool readTPHard() const
bool hasBTST16() const
bool hasFLOATE1() const
bool hasNVIC() const
bool hasExtendLrw() const
bool hasFPUv3HalfWord() const
bool smartMode() const
bool isCK804() const
bool hasDoloop() const
bool has7E10() const
bool useHardFloatABI() const
bool useHardFloat() const
bool isCK810() const
bool has3r2E3r3() const
bool hasVDSP2E60F() const
bool has10E60() const
bool hasDSPE60() const
bool isCK860() const
bool hasSTM() const
bool hasPushPop() const
bool isCK805() const
const CSKYTargetLowering * getTargetLowering() const override
bool hasFPUv2() const
bool useCCRT() const
bool has3E3r1() const
bool hasFPUv3HalfFloat() const
bool hasFLOAT3E4() const
bool enableStackSize() const
bool isCK803S() const
bool hasFPUv3DoubleFloat() const
bool hasE1() const
const CSKYInstrInfo * getInstrInfo() const override
bool hasFPUv3() const
bool isCK810V() const
bool hasVDSP2E3() const
bool hasTrust() const
bool hasVDSPV2_FLOAT() const
bool hasFLOAT1E3() const
bool has3r1E3r2() const
bool isCK802() const
bool hasDSPV2() const
bool has2E3() const
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process...
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:77
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18