14#ifndef LLVM_TARGETPARSER_AARCH64TARGETPARSER_H
15#define LLVM_TARGETPARSER_AARCH64TARGETPARSER_H
94 "CPUFeatures enum must not have more than 64 entries");
196 {
"f32mm",
AArch64::AEK_F32MM,
"+f32mm",
"-f32mm",
FEAT_SVE_F32MM,
"+sve,+f32mm,+fullfp16,+fp-armv8,+neon", 350},
197 {
"f64mm",
AArch64::AEK_F64MM,
"+f64mm",
"-f64mm",
FEAT_SVE_F64MM,
"+sve,+f64mm,+fullfp16,+fp-armv8,+neon", 360},
203 {
"fp16fml",
AArch64::AEK_FP16FML,
"+fp16fml",
"-fp16fml",
FEAT_FP16FML,
"+fp16fml,+fullfp16,+fp-armv8,+neon", 40},
235 {
"sha3",
AArch64::AEK_SHA3,
"+sha3",
"-sha3",
FEAT_SHA3,
"+sha3,+sha2,+fp-armv8,+neon", 140},
246 {
"sve-bf16",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_BF16,
"+sve,+bf16,+fullfp16,+fp-armv8,+neon", 320},
247 {
"sve-ebf16",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_EBF16,
"+sve,+bf16,+fullfp16,+fp-armv8,+neon", 330},
248 {
"sve-i8mm",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_I8MM,
"+sve,+i8mm,+fullfp16,+fp-armv8,+neon", 340},
249 {
"sve",
AArch64::AEK_SVE,
"+sve",
"-sve",
FEAT_SVE,
"+sve,+fullfp16,+fp-armv8,+neon", 310},
250 {
"sve2-aes",
AArch64::AEK_SVE2AES,
"+sve2-aes",
"-sve2-aes",
FEAT_SVE_AES,
"+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 380},
251 {
"sve2-bitperm",
AArch64::AEK_SVE2BITPERM,
"+sve2-bitperm",
"-sve2-bitperm",
FEAT_SVE_BITPERM,
"+sve2,+sve,+sve2-bitperm,+fullfp16,+fp-armv8,+neon", 400},
252 {
"sve2-pmull128",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_PMULL128,
"+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 390},
253 {
"sve2-sha3",
AArch64::AEK_SVE2SHA3,
"+sve2-sha3",
"-sve2-sha3",
FEAT_SVE_SHA3,
"+sve2,+sve,+sve2-sha3,+fullfp16,+fp-armv8,+neon", 410},
254 {
"sve2-sm4",
AArch64::AEK_SVE2SM4,
"+sve2-sm4",
"-sve2-sm4",
FEAT_SVE_SM4,
"+sve2,+sve,+sve2-sm4,+fullfp16,+fp-armv8,+neon", 420},
255 {
"sve2",
AArch64::AEK_SVE2,
"+sve2",
"-sve2",
FEAT_SVE2,
"+sve2,+sve,+fullfp16,+fp-armv8,+neon", 370},
256 {
"sve2p1",
AArch64::AEK_SVE2p1,
"+sve2p1",
"-sve2p1",
FEAT_MAX,
"+sve2p1,+sve2,+sve,+fullfp16,+fp-armv8,+neon", 0},
277 return this->Name ==
Other.Name;
280 return this->Name !=
Other.Name;
294 if (this->Profile !=
Other.Profile)
297 return this->Version >
Other.Version;
299 if (this->Version.
getMajor() == 9 &&
Other.Version.getMajor() == 8) {
301 "AArch64::ArchInfo should have a minor version.");
302 return this->Version.
getMinor().value_or(0) + 5 >=
303 Other.Version.getMinor().value_or(0);
336static constexpr std::array<const ArchInfo *, 16>
ArchInfos = {
554 std::vector<StringRef> &Features);
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Defines the llvm::VersionTuple class, which represents a version in the form major[....
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
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.
constexpr StringRef substr(size_t Start, size_t N=npos) const
Return a reference to the substring from [Start, Start + N).
Triple - Helper class for working with autoconf configuration names.
Represents a version number in the form major[.minor[.subminor[.build]]].
unsigned getMajor() const
Retrieve the major version number.
std::optional< unsigned > getMinor() const
Retrieve the minor version number, if provided.
static constexpr std::array< const ArchInfo *, 16 > ArchInfos
bool getExtensionFeatures(uint64_t Extensions, std::vector< StringRef > &Features)
constexpr ArchInfo ARMV8_9A
bool isX18ReservedByDefault(const Triple &TT)
StringRef getArchExtFeature(StringRef ArchExt)
std::optional< ExtensionInfo > parseArchExtension(StringRef Extension)
constexpr ArchInfo ARMV8_3A
constexpr CpuInfo CpuInfos[]
constexpr ArchInfo ARMV8_7A
constexpr ArchInfo ARMV8R
std::optional< CpuInfo > parseCpu(StringRef Name)
constexpr ArchInfo ARMV8_4A
uint64_t getCpuSupportsMask(ArrayRef< StringRef > FeatureStrs)
constexpr ArchInfo ARMV9_3A
constexpr ArchInfo ARMV8_6A
constexpr ArchInfo ARMV8_5A
constexpr ArchInfo ARMV8A
constexpr ArchInfo ARMV9_1A
constexpr ArchInfo ARMV9A
void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values)
std::optional< ArchInfo > parseArch(StringRef Arch)
constexpr ArchInfo ARMV9_2A
constexpr CpuAlias CpuAliases[]
constexpr ArchInfo ARMV9_4A
std::optional< ArchInfo > getArchForCpu(StringRef CPU)
StringRef resolveCPUAlias(StringRef CPU)
constexpr ArchInfo ARMV8_8A
constexpr ArchInfo ARMV8_1A
constexpr ArchInfo ARMV8_2A
constexpr ExtensionInfo Extensions[]
This is an optimization pass for GlobalISel generic memory operations.
StringRef getSubArch() const
bool implies(const ArchInfo &Other) const
static std::optional< ArchInfo > findBySubArch(StringRef SubArch)
bool operator==(const ArchInfo &Other) const
bool operator!=(const ArchInfo &Other) const
uint64_t getImpliedExtensions() const
uint64_t DefaultExtensions
static constexpr unsigned MaxFMVPriority
StringRef DependentFeatures