LLVM: include/llvm/TargetParser/ARMTargetParser.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_TARGETPARSER_ARMTARGETPARSER_H
15#define LLVM_TARGETPARSER_ARMTARGETPARSER_H
16
22#include
23
24namespace llvm {
25
27
28namespace ARM {
29
36
37
38
80
81
88
90#define ARM_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE) \
91 {NAME, ID, FEATURE, NEGFEATURE},
92#include "ARMTargetParser.def"
93};
94
95
96
97constexpr struct {
101#define ARM_HW_DIV_NAME(NAME, ID) {NAME, ID},
102#include "ARMTargetParser.def"
104
105
107#define ARM_ARCH(NAME, ID, CPU_ATTR, ARCH_FEATURE, ARCH_ATTR, ARCH_FPU, \
108 ARCH_BASE_EXT) \
109 ID,
110#include "ARMTargetParser.def"
111};
112
113
114
115
116
123
125#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) \
126 {NAME, ARM::ArchKind::ID, IS_DEFAULT, DEFAULT_EXT},
127#include "ARMTargetParser.def"
129
130
132#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) KIND,
133#include "ARMTargetParser.def"
134 FK_LAST
135};
136
137
147
148
154
158
162
163
169
170
172
173
174
175
176
184
186#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) \
187 {NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION},
188#include "llvm/TargetParser/ARMTargetParser.def"
189};
190
191
192
193
194
195
196
197
210
212#define ARM_ARCH(NAME, ID, CPU_ATTR, ARCH_FEATURE, ARCH_ATTR, ARCH_FPU, \
213 ARCH_BASE_EXT) \
214 {NAME, CPU_ATTR, ARCH_FEATURE, ARCH_FPU, \
215 ARCH_BASE_EXT, ArchKind::ID, ARCH_ATTR},
216#include "llvm/TargetParser/ARMTargetParser.def"
217};
218
220 assert((Kind >= ArchKind::ARMV8A && Kind <= ArchKind::ARMV9_3A) &&
221 "We only expect operator-- to be called with ARMV8/V9");
222 if (Kind == ArchKind::INVALID || Kind == ArchKind::ARMV8A ||
223 Kind == ArchKind::ARMV8_1A || Kind == ArchKind::ARMV9A ||
224 Kind == ArchKind::ARMV8R)
225 Kind = ArchKind::INVALID;
226 else {
227 unsigned KindAsInteger = static_cast<unsigned>(Kind);
228 Kind = static_cast<ArchKind>(--KindAsInteger);
229 }
230 return Kind;
231}
232
233
238
241 std::vector &Features);
243 std::vector &Features);
244
253 std::vector &Features,
254 FPUKind &ArgFPUKind);
256
257
262
263
271
276
277
278
279
280
283
285
286}
287}
288
289#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
static cl::opt< std::set< SPIRV::Extension::Extension >, false, SPIRVExtensionsParser > Extensions("spirv-ext", cl::desc("Specify list of enabled SPIR-V extensions"))
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringRef - Represent a constant reference to a string, i.e.
Triple - Helper class for working with autoconf configuration names.
Define some predicates that are used for node matching.
constexpr struct llvm::ARM::@324103115345140202011004052154345301224214323271 HWDivNames[]
LLVM_ABI StringRef getArchExtName(uint64_t ArchExtKind)
LLVM_ABI StringRef getFPUSynonym(StringRef FPU)
LLVM_ABI bool getFPUFeatures(FPUKind FPUKind, std::vector< StringRef > &Features)
LLVM_ABI uint64_t parseHWDiv(StringRef HWDiv)
LLVM_ABI StringRef getCPUAttr(ArchKind AK)
LLVM_ABI StringRef getArchName(ArchKind AK)
LLVM_ABI void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values)
ArchKind
Definition ARMTargetParser.h:106
LLVM_ABI LLVM_READONLY ARMABI computeTargetABI(const Triple &TT, StringRef ABIName="")
FPUVersion
Definition ARMTargetParser.h:138
@ VFPV3_FP16
Definition ARMTargetParser.h:142
@ VFPV5_FULLFP16
Definition ARMTargetParser.h:145
@ VFPV5
Definition ARMTargetParser.h:144
@ VFPV2
Definition ARMTargetParser.h:140
@ VFPV3
Definition ARMTargetParser.h:141
@ VFPV4
Definition ARMTargetParser.h:143
@ NONE
Definition ARMTargetParser.h:139
LLVM_ABI uint64_t parseArchExt(StringRef ArchExt)
LLVM_ABI ArchKind convertV9toV8(ArchKind AK)
LLVM_ABI LLVM_READONLY StringRef computeDefaultTargetABI(const Triple &TT)
NeonSupportLevel
Definition ARMTargetParser.h:164
@ Crypto
Neon with Crypto.
Definition ARMTargetParser.h:167
@ Neon
Neon.
Definition ARMTargetParser.h:166
ARMABI
Definition ARMTargetParser.h:30
@ ARM_ABI_AAPCS
Definition ARMTargetParser.h:33
@ ARM_ABI_APCS
Definition ARMTargetParser.h:32
@ ARM_ABI_UNKNOWN
Definition ARMTargetParser.h:31
@ ARM_ABI_AAPCS16
Definition ARMTargetParser.h:34
LLVM_ABI ArchKind parseArch(StringRef Arch)
LLVM_ABI FPURestriction getFPURestriction(FPUKind FPUKind)
LLVM_ABI bool appendArchExtFeatures(StringRef CPU, ARM::ArchKind AK, StringRef ArchExt, std::vector< StringRef > &Features, FPUKind &ArgFPUKind)
FPUKind
Definition ARMTargetParser.h:131
static constexpr FPUName FPUNames[]
Definition ARMTargetParser.h:185
LLVM_ABI StringRef getDefaultCPU(StringRef Arch)
LLVM_ABI StringRef getArchExtFeature(StringRef ArchExt)
LLVM_ABI ProfileKind parseArchProfile(StringRef Arch)
LLVM_ABI FPUKind parseFPU(StringRef FPU)
LLVM_ABI StringRef getSubArch(ArchKind AK)
uint64_t ID
Definition ARMTargetParser.h:99
LLVM_ABI StringRef getARMCPUForArch(const llvm::Triple &Triple, StringRef MArch={})
Get the (LLVM) name of the minimum ARM CPU for the arch we are targeting.
LLVM_ABI unsigned parseArchVersion(StringRef Arch)
bool has32Regs(const FPURestriction restriction)
Definition ARMTargetParser.h:159
LLVM_ABI NeonSupportLevel getFPUNeonSupportLevel(FPUKind FPUKind)
LLVM_ABI ArchKind parseCPUArch(StringRef CPU)
bool isDoublePrecision(const FPURestriction restriction)
Definition ARMTargetParser.h:155
StringRef Name
Definition ARMTargetParser.h:98
ProfileKind
Definition ARMTargetParser.h:171
@ M
Definition ARMTargetParser.h:171
@ A
Definition ARMTargetParser.h:171
@ INVALID
Definition ARMTargetParser.h:171
@ R
Definition ARMTargetParser.h:171
constexpr ExtName ARCHExtNames[]
Definition ARMTargetParser.h:89
LLVM_ABI unsigned getArchAttr(ArchKind AK)
LLVM_ABI StringRef getFPUName(FPUKind FPUKind)
LLVM_ABI FPUVersion getFPUVersion(FPUKind FPUKind)
ArchKind & operator--(ArchKind &Kind)
Definition ARMTargetParser.h:219
LLVM_ABI bool getHWDivFeatures(uint64_t HWDivKind, std::vector< StringRef > &Features)
FPURestriction
Definition ARMTargetParser.h:149
@ SP_D16
Only single-precision instructions, with 16 D registers.
Definition ARMTargetParser.h:152
@ None
No restriction.
Definition ARMTargetParser.h:150
@ D16
Only 16 D registers.
Definition ARMTargetParser.h:151
LLVM_ABI uint64_t getDefaultExtensions(StringRef CPU, ArchKind AK)
ArchExtKind
Definition ARMTargetParser.h:39
@ AEK_AES
Definition ARMTargetParser.h:56
@ AEK_HWDIVTHUMB
Definition ARMTargetParser.h:45
@ AEK_VIRT
Definition ARMTargetParser.h:50
@ AEK_CDECP6
Definition ARMTargetParser.h:69
@ AEK_SIMD
Definition ARMTargetParser.h:48
@ AEK_SB
Definition ARMTargetParser.h:58
@ AEK_DSP
Definition ARMTargetParser.h:51
@ AEK_IWMMXT2
Definition ARMTargetParser.h:76
@ AEK_CRYPTO
Definition ARMTargetParser.h:43
@ AEK_CDECP5
Definition ARMTargetParser.h:68
@ AEK_FP16FML
Definition ARMTargetParser.h:57
@ AEK_LOB
Definition ARMTargetParser.h:60
@ AEK_I8MM
Definition ARMTargetParser.h:62
@ AEK_SHA2
Definition ARMTargetParser.h:55
@ AEK_BF16
Definition ARMTargetParser.h:61
@ AEK_OS
Definition ARMTargetParser.h:74
@ AEK_FP
Definition ARMTargetParser.h:44
@ AEK_MVE
Definition ARMTargetParser.h:72
@ AEK_IWMMXT
Definition ARMTargetParser.h:75
@ AEK_HWDIVARM
Definition ARMTargetParser.h:46
@ AEK_CDECP7
Definition ARMTargetParser.h:70
@ AEK_NONE
Definition ARMTargetParser.h:41
@ AEK_CRC
Definition ARMTargetParser.h:42
@ AEK_INVALID
Definition ARMTargetParser.h:40
@ AEK_MAVERICK
Definition ARMTargetParser.h:77
@ AEK_XSCALE
Definition ARMTargetParser.h:78
@ AEK_CDECP1
Definition ARMTargetParser.h:64
@ AEK_CDECP3
Definition ARMTargetParser.h:66
@ AEK_RAS
Definition ARMTargetParser.h:53
@ AEK_FP16
Definition ARMTargetParser.h:52
@ AEK_CDECP4
Definition ARMTargetParser.h:67
@ AEK_PACBTI
Definition ARMTargetParser.h:71
@ AEK_FP_DP
Definition ARMTargetParser.h:59
@ AEK_CDECP0
Definition ARMTargetParser.h:63
@ AEK_DOTPROD
Definition ARMTargetParser.h:54
@ AEK_SEC
Definition ARMTargetParser.h:49
@ AEK_MP
Definition ARMTargetParser.h:47
@ AEK_CDECP2
Definition ARMTargetParser.h:65
LLVM_ABI FPUKind getDefaultFPU(StringRef CPU, ArchKind AK)
LLVM_ABI bool getExtensionFeatures(uint64_t Extensions, std::vector< StringRef > &Features)
static constexpr ArchNames ARMArchNames[]
Definition ARMTargetParser.h:211
constexpr CpuNames CPUNames[]
Definition ARMTargetParser.h:124
LLVM_ABI void PrintSupportedExtensions(StringMap< StringRef > DescMap)
This is an optimization pass for GlobalISel generic memory operations.
Definition ARMTargetParser.h:198
StringRef getSubArch() const
Definition ARMTargetParser.h:208
StringRef Name
Definition ARMTargetParser.h:199
uint64_t ArchBaseExtensions
Definition ARMTargetParser.h:203
StringRef ArchFeature
Definition ARMTargetParser.h:201
FPUKind DefaultFPU
Definition ARMTargetParser.h:202
StringRef CPUAttr
Definition ARMTargetParser.h:200
ArchKind ID
Definition ARMTargetParser.h:204
ARMBuildAttrs::CPUArch ArchAttr
Definition ARMTargetParser.h:205
Definition ARMTargetParser.h:117
ArchKind ArchID
Definition ARMTargetParser.h:119
StringRef Name
Definition ARMTargetParser.h:118
uint64_t DefaultExtensions
Definition ARMTargetParser.h:121
bool Default
Definition ARMTargetParser.h:120
Definition ARMTargetParser.h:82
StringRef Feature
Definition ARMTargetParser.h:85
uint64_t ID
Definition ARMTargetParser.h:84
StringRef NegFeature
Definition ARMTargetParser.h:86
StringRef Name
Definition ARMTargetParser.h:83
Definition ARMTargetParser.h:177
FPUKind ID
Definition ARMTargetParser.h:179
FPURestriction Restriction
Definition ARMTargetParser.h:182
FPUVersion FPUVer
Definition ARMTargetParser.h:180
StringRef Name
Definition ARMTargetParser.h:178
NeonSupportLevel NeonSupport
Definition ARMTargetParser.h:181