14#ifndef LLVM_TARGETPARSER_AARCH64TARGETPARSER_H
15#define LLVM_TARGETPARSER_AARCH64TARGETPARSER_H
104 "Number of features in CPUFeatures are limited to 62 entries");
109#define ARM_EXTENSION(NAME, ENUM) ENUM,
110#include "llvm/TargetParser/AArch64TargetParserDef.inc"
155 {
"aes", AArch64::AEK_AES,
"+aes",
"-aes",
FEAT_AES,
"+fp-armv8,+neon", 150},
156 {
"b16b16", AArch64::AEK_B16B16,
"+b16b16",
"-b16b16",
FEAT_INIT,
"", 0},
157 {
"bf16", AArch64::AEK_BF16,
"+bf16",
"-bf16",
FEAT_BF16,
"+bf16", 280},
158 {
"brbe", AArch64::AEK_BRBE,
"+brbe",
"-brbe",
FEAT_INIT,
"", 0},
160 {
"crc", AArch64::AEK_CRC,
"+crc",
"-crc",
FEAT_CRC,
"+crc", 110},
161 {
"crypto", AArch64::AEK_CRYPTO,
"+crypto",
"-crypto",
FEAT_INIT,
"+aes,+sha2", 0},
162 {
"cssc", AArch64::AEK_CSSC,
"+cssc",
"-cssc",
FEAT_INIT,
"", 0},
163 {
"d128", AArch64::AEK_D128,
"+d128",
"-d128",
FEAT_INIT,
"", 0},
166 {
"dotprod", AArch64::AEK_DOTPROD,
"+dotprod",
"-dotprod",
FEAT_DOTPROD,
"+dotprod,+fp-armv8,+neon", 104},
170 {
"f32mm",
AArch64::AEK_F32MM,
"+f32mm",
"-f32mm",
FEAT_SVE_F32MM,
"+sve,+f32mm,+fullfp16,+fp-armv8,+neon", 350},
171 {
"f64mm",
AArch64::AEK_F64MM,
"+f64mm",
"-f64mm",
FEAT_SVE_F64MM,
"+sve,+f64mm,+fullfp16,+fp-armv8,+neon", 360},
173 {
"flagm", AArch64::AEK_FLAGM,
"+flagm",
"-flagm",
FEAT_FLAGM,
"+flagm", 20},
177 {
"fp16fml", AArch64::AEK_FP16FML,
"+fp16fml",
"-fp16fml",
FEAT_FP16FML,
"+fp16fml,+fullfp16,+fp-armv8,+neon", 175},
179 {
"hbc", AArch64::AEK_HBC,
"+hbc",
"-hbc",
FEAT_INIT,
"", 0},
181 {
"ite", AArch64::AEK_ITE,
"+ite",
"-ite",
FEAT_INIT,
"", 0},
185 {
"ls64", AArch64::AEK_LS64,
"+ls64",
"-ls64",
FEAT_LS64,
"", 520},
186 {
"lse", AArch64::AEK_LSE,
"+lse",
"-lse",
FEAT_LSE,
"+lse", 80},
187 {
"lse128", AArch64::AEK_LSE128,
"+lse128",
"-lse128",
FEAT_INIT,
"", 0},
188 {
"memtag", AArch64::AEK_MTE,
"+mte",
"-mte",
FEAT_MEMTAG,
"", 440},
191 {
"mops", AArch64::AEK_MOPS,
"+mops",
"-mops",
FEAT_MOPS,
"+mops", 650},
192 {
"pauth", AArch64::AEK_PAUTH,
"+pauth",
"-pauth",
FEAT_INIT,
"", 0},
194 {
"pmuv3", AArch64::AEK_PERFMON,
"+perfmon",
"-perfmon",
FEAT_INIT,
"", 0},
195 {
"predres", AArch64::AEK_PREDRES,
"+predres",
"-predres",
FEAT_PREDRES,
"+predres", 480},
196 {
"predres2", AArch64::AEK_SPECRES2,
"+specres2",
"-specres2",
FEAT_INIT,
"", 0},
198 {
"ras", AArch64::AEK_RAS,
"+ras",
"-ras",
FEAT_INIT,
"", 0},
200 {
"rcpc", AArch64::AEK_RCPC,
"+rcpc",
"-rcpc",
FEAT_RCPC,
"+rcpc", 230},
202 {
"rcpc3", AArch64::AEK_RCPC3,
"+rcpc3",
"-rcpc3",
FEAT_RCPC3,
"+rcpc,+rcpc3", 241},
203 {
"rdm", AArch64::AEK_RDM,
"+rdm",
"-rdm",
FEAT_RDM,
"+rdm,+fp-armv8,+neon", 108},
206 {
"sb", AArch64::AEK_SB,
"+sb",
"-sb",
FEAT_SB,
"+sb", 470},
208 {
"sha2", AArch64::AEK_SHA2,
"+sha2",
"-sha2",
FEAT_SHA2,
"+sha2,+fp-armv8,+neon", 130},
209 {
"sha3", AArch64::AEK_SHA3,
"+sha3",
"-sha3",
FEAT_SHA3,
"+sha3,+sha2,+fp-armv8,+neon", 140},
211 {
"sm4", AArch64::AEK_SM4,
"+sm4",
"-sm4",
FEAT_SM4,
"+sm4,+fp-armv8,+neon", 106},
212 {
"sme-f16f16", AArch64::AEK_SMEF16F16,
"+sme-f16f16",
"-sme-f16f16",
FEAT_INIT,
"+sme2,+sme-f16f16", 0},
213 {
"sme-f64f64", AArch64::AEK_SMEF64F64,
"+sme-f64f64",
"-sme-f64f64",
FEAT_SME_F64,
"+sme,+sme-f64f64,+bf16", 560},
214 {
"sme-i16i64", AArch64::AEK_SMEI16I64,
"+sme-i16i64",
"-sme-i16i64",
FEAT_SME_I64,
"+sme,+sme-i16i64,+bf16", 570},
215 {
"sme", AArch64::AEK_SME,
"+sme",
"-sme",
FEAT_SME,
"+sme,+bf16", 430},
216 {
"sme2", AArch64::AEK_SME2,
"+sme2",
"-sme2",
FEAT_SME2,
"+sme2,+sme,+bf16", 580},
217 {
"sme2p1",
AArch64::AEK_SME2p1,
"+sme2p1",
"-sme2p1",
FEAT_INIT,
"+sme2p1,+sme2,+sme,+bf16", 0},
218 {
"ssbs", AArch64::AEK_SSBS,
"+ssbs",
"-ssbs",
FEAT_SSBS,
"", 490},
220 {
"sve-bf16",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_BF16,
"+sve,+bf16,+fullfp16,+fp-armv8,+neon", 320},
221 {
"sve-ebf16",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_EBF16,
"+sve,+bf16,+fullfp16,+fp-armv8,+neon", 330},
222 {
"sve-i8mm",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_I8MM,
"+sve,+i8mm,+fullfp16,+fp-armv8,+neon", 340},
223 {
"sve", AArch64::AEK_SVE,
"+sve",
"-sve",
FEAT_SVE,
"+sve,+fullfp16,+fp-armv8,+neon", 310},
224 {
"sve2-aes", AArch64::AEK_SVE2AES,
"+sve2-aes",
"-sve2-aes",
FEAT_SVE_AES,
"+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 380},
225 {
"sve2-bitperm", AArch64::AEK_SVE2BITPERM,
"+sve2-bitperm",
"-sve2-bitperm",
FEAT_SVE_BITPERM,
"+sve2,+sve,+sve2-bitperm,+fullfp16,+fp-armv8,+neon", 400},
226 {
"sve2-pmull128",
AArch64::AEK_NONE, {}, {},
FEAT_SVE_PMULL128,
"+sve2,+sve,+sve2-aes,+fullfp16,+fp-armv8,+neon", 390},
227 {
"sve2-sha3", AArch64::AEK_SVE2SHA3,
"+sve2-sha3",
"-sve2-sha3",
FEAT_SVE_SHA3,
"+sve2,+sve,+sve2-sha3,+fullfp16,+fp-armv8,+neon", 410},
228 {
"sve2-sm4", AArch64::AEK_SVE2SM4,
"+sve2-sm4",
"-sve2-sm4",
FEAT_SVE_SM4,
"+sve2,+sve,+sve2-sm4,+fullfp16,+fp-armv8,+neon", 420},
229 {
"sve2", AArch64::AEK_SVE2,
"+sve2",
"-sve2",
FEAT_SVE2,
"+sve2,+sve,+fullfp16,+fp-armv8,+neon", 370},
230 {
"sve2p1",
AArch64::AEK_SVE2p1,
"+sve2p1",
"-sve2p1",
FEAT_INIT,
"+sve2p1,+sve2,+sve,+fullfp16,+fp-armv8,+neon", 0},
231 {
"the", AArch64::AEK_THE,
"+the",
"-the",
FEAT_INIT,
"", 0},
232 {
"tme", AArch64::AEK_TME,
"+tme",
"-tme",
FEAT_INIT,
"", 0},
234 {
"gcs", AArch64::AEK_GCS,
"+gcs",
"-gcs",
FEAT_INIT,
"", 0},
235 {
"fpmr", AArch64::AEK_FPMR,
"+fpmr",
"-fpmr",
FEAT_INIT,
"", 0},
236 {
"fp8", AArch64::AEK_FP8,
"+fp8",
"-fp8",
FEAT_INIT,
"+fpmr", 0},
237 {
"faminmax", AArch64::AEK_FAMINMAX,
"+faminmax",
"-faminmax",
FEAT_INIT,
"", 0},
238 {
"fp8fma", AArch64::AEK_FP8FMA,
"+fp8fma",
"-fp8fma",
FEAT_INIT,
"+fpmr", 0},
239 {
"ssve-fp8fma", AArch64::AEK_SSVE_FP8FMA,
"+ssve-fp8fma",
"-ssve-fp8fma",
FEAT_INIT,
"+sme2", 0},
240 {
"fp8dot2", AArch64::AEK_FP8DOT2,
"+fp8dot2",
"-fp8dot2",
FEAT_INIT,
"", 0},
241 {
"ssve-fp8dot2", AArch64::AEK_SSVE_FP8DOT2,
"+ssve-fp8dot2",
"-ssve-fp8dot2",
FEAT_INIT,
"+sme2", 0},
242 {
"fp8dot4", AArch64::AEK_FP8DOT4,
"+fp8dot4",
"-fp8dot4",
FEAT_INIT,
"", 0},
243 {
"ssve-fp8dot4", AArch64::AEK_SSVE_FP8DOT4,
"+ssve-fp8dot4",
"-ssve-fp8dot4",
FEAT_INIT,
"+sme2", 0},
244 {
"lut", AArch64::AEK_LUT,
"+lut",
"-lut",
FEAT_INIT,
"", 0},
246 {
"sme-f8f16", AArch64::AEK_SMEF8F16,
"+sme-f8f16",
"-sme-f8f16",
FEAT_INIT,
"+fp8,+sme2", 0},
247 {
"sme-f8f32", AArch64::AEK_SMEF8F32,
"+sme-f8f32",
"-sme-f8f32",
FEAT_INIT,
"+sme2,+fp8", 0},
248 {
"sme-fa64", AArch64::AEK_SMEFA64,
"+sme-fa64",
"-sme-fa64",
FEAT_INIT,
"", 0},
249 {
"cpa", AArch64::AEK_CPA,
"+cpa",
"-cpa",
FEAT_INIT,
"", 0},
250 {
"pauth-lr", AArch64::AEK_PAUTHLR,
"+pauth-lr",
"-pauth-lr",
FEAT_INIT,
"", 0},
251 {
"tlbiw", AArch64::AEK_TLBIW,
"+tlbiw",
"-tlbiw",
FEAT_INIT,
"", 0},
327 {AEK_BF16, AEK_B16B16},
332 {AEK_SVE2, AEK_SVE2BITPERM},
333 {AEK_SVE2, AEK_SVE2AES},
334 {AEK_SVE2, AEK_SVE2SHA3},
335 {AEK_SVE2, AEK_SVE2SM4},
336 {AEK_SVE2, AEK_SMEFA64},
337 {AEK_SVE2, AEK_SMEFA64},
339 {AEK_SME, AEK_SMEF16F16},
340 {AEK_SME, AEK_SMEF64F64},
341 {AEK_SME, AEK_SMEI16I64},
342 {AEK_SME, AEK_SMEFA64},
344 {AEK_SME2, AEK_SSVE_FP8FMA},
345 {AEK_SME2, AEK_SSVE_FP8DOT2},
346 {AEK_SME2, AEK_SSVE_FP8DOT4},
347 {AEK_SME2, AEK_SMEF8F16},
348 {AEK_SME2, AEK_SMEF8F32},
349 {AEK_FP8, AEK_SMEF8F16},
350 {AEK_FP8, AEK_SMEF8F32},
351 {AEK_LSE, AEK_LSE128},
352 {AEK_PREDRES, AEK_SPECRES2},
354 {AEK_RCPC, AEK_RCPC3},
370 return this->Name ==
Other.Name;
373 return this->Name !=
Other.Name;
387 if (this->Profile !=
Other.Profile)
390 return this->Version >
Other.Version;
392 if (this->Version.
getMajor() == 9 &&
Other.Version.getMajor() == 8) {
394 "AArch64::ArchInfo should have a minor version.");
395 return this->Version.
getMinor().value_or(0) + 5 >=
396 Other.Version.getMinor().value_or(0);
447 AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SB}).flip(AArch64::AEK_LSE))};
451static constexpr std::array<const ArchInfo *, 17>
ArchInfos = {
476 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
479 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
482 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
486 AArch64::AEK_RCPC})},
490 AArch64::AEK_PAUTH, AArch64::AEK_MTE, AArch64::AEK_SSBS,
491 AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM,
492 AArch64::AEK_FP16FML})},
495 {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE,
496 AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
497 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
500 {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE,
501 AArch64::AEK_FP16FML, AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
502 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
505 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
509 AArch64::AEK_RCPC, AArch64::AEK_SSBS})},
513 AArch64::AEK_RCPC, AArch64::AEK_SSBS})},
516 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
519 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
523 AArch64::AEK_RCPC})},
527 AArch64::AEK_RCPC, AArch64::AEK_SSBS})},
531 AArch64::AEK_RCPC, AArch64::AEK_SSBS})},
535 AArch64::AEK_DOTPROD, AArch64::AEK_SSBS})},
539 AArch64::AEK_RCPC, AArch64::AEK_SSBS,
544 AArch64::AEK_RCPC, AArch64::AEK_SSBS,
549 AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS,
553 AArch64::AEK_FLAGM, AArch64::AEK_SB,
555 AArch64::AEK_SVE, AArch64::AEK_SVE2,
556 AArch64::AEK_SVE2BITPERM, AArch64::AEK_BF16})},
559 {AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_MTE,
563 AArch64::AEK_BF16, AArch64::AEK_FLAGM})},
566 AArch64::AEK_MTE, AArch64::AEK_FP16FML,
567 AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
568 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
572 AArch64::AEK_MTE, AArch64::AEK_FP16FML,
573 AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
574 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
578 AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
581 AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
585 AArch64::AEK_RCPC, AArch64::AEK_SSBS,
590 AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS,
595 AArch64::AEK_PAUTH, AArch64::AEK_SSBS, AArch64::AEK_SB,
596 AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM,
597 AArch64::AEK_FP16FML, AArch64::AEK_FLAGM})},
602 AArch64::AEK_SVE2BITPERM, AArch64::AEK_SB, AArch64::AEK_PAUTH,
604 AArch64::AEK_FLAGM, AArch64::AEK_SSBS})},
607 AArch64::AEK_MTE, AArch64::AEK_FP16FML,
608 AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
609 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
614 AArch64::AEK_RCPC, AArch64::AEK_SSBS})},
619 AArch64::AEK_SSBS})},
624 AArch64::AEK_SB, AArch64::AEK_SSBS, AArch64::AEK_SVE,
625 AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM})},
628 AArch64::AEK_SB, AArch64::AEK_PREDRES,
629 AArch64::AEK_FP16FML, AArch64::AEK_PAUTH,
630 AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
635 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
636 AArch64::AEK_SM4, AArch64::AEK_SVE, AArch64::AEK_SSBS,
642 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
643 AArch64::AEK_SM4, AArch64::AEK_SVE, AArch64::AEK_SSBS,
649 {AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SSBS,
656 AArch64::AEK_SB, AArch64::AEK_PREDRES, AArch64::AEK_LS64,
657 AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM,
659 AArch64::AEK_FP16FML})},
663 AArch64::AEK_SB, AArch64::AEK_PREDRES, AArch64::AEK_LS64,
664 AArch64::AEK_BRBE, AArch64::AEK_PAUTH, AArch64::AEK_FLAGM,
666 AArch64::AEK_FP16FML}))},
681 AArch64::AEK_CRC, AArch64::AEK_RDM})},
691 AArch64::AEK_FP16FML})},
695 AArch64::AEK_FP16FML})},
699 AArch64::AEK_FP16FML})},
703 AArch64::AEK_FP16FML})},
707 AArch64::AEK_FP16FML})},
712 AArch64::AEK_FP16FML})},
716 AArch64::AEK_FP16FML})},
720 AArch64::AEK_FP16FML})},
730 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
739 AArch64::AEK_CRC, AArch64::AEK_RDM})},
745 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
752 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
755 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
758 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
761 {AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_CRC})},
776 AArch64::AEK_SB, AArch64::AEK_SSBS,
781 AArch64::AEK_SHA3, AArch64::AEK_SHA2, AArch64::AEK_AES,
782 AArch64::AEK_MTE, AArch64::AEK_SB, AArch64::AEK_SSBS})},
785 AArch64::AEK_SM4, AArch64::AEK_SHA3,
786 AArch64::AEK_SHA2, AArch64::AEK_AES,
787 AArch64::AEK_MTE, AArch64::AEK_SB,
788 AArch64::AEK_SSBS, AArch64::AEK_CSSC})},
798 {
"grace",
"neoverse-v2"}};
804 std::vector<StringRef> &Features);
This file defines the StringMap class.
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
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...
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
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.
void PrintSupportedExtensions(StringMap< StringRef > DescMap)
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
const ArchInfo * parseArch(StringRef Arch)
constexpr ArchInfo ARMV8_6A
constexpr ArchInfo ARMV8_5A
const ArchInfo * getArchForCpu(StringRef CPU)
constexpr ArchInfo ARMV8A
constexpr ArchInfo ARMV9_1A
constexpr ArchInfo ARMV9A
void fillValidCPUArchList(SmallVectorImpl< StringRef > &Values)
constexpr ArchInfo ARMV9_2A
constexpr ArchInfo ARMV9_4A
StringRef resolveExtAlias(StringRef ArchExt)
constexpr ExtensionDependency ExtensionDependencies[]
constexpr ArchInfo ARMV9_5A
constexpr Alias CpuAliases[]
static constexpr std::array< const ArchInfo *, 17 > ArchInfos
constexpr Alias ExtAliases[]
StringRef resolveCPUAlias(StringRef CPU)
bool getExtensionFeatures(const AArch64::ExtensionBitset &Extensions, std::vector< StringRef > &Features)
constexpr ArchInfo ARMV8_8A
constexpr ArchInfo ARMV8_1A
constexpr ArchInfo ARMV8_2A
Bitset< AEK_NUM_EXTENSIONS > ExtensionBitset
constexpr ExtensionInfo Extensions[]
This is an optimization pass for GlobalISel generic memory operations.
bool is_superset(const ArchInfo &Other) const
StringRef getSubArch() const
bool implies(const ArchInfo &Other) const
AArch64::ExtensionBitset DefaultExts
static std::optional< ArchInfo > findBySubArch(StringRef SubArch)
bool operator==(const ArchInfo &Other) const
bool operator!=(const ArchInfo &Other) const
AArch64::ExtensionBitset getImpliedExtensions() const
AArch64::ExtensionBitset DefaultExtensions
static constexpr unsigned MaxFMVPriority
StringRef DependentFeatures
void addCPUDefaults(const CpuInfo &CPU)
void enable(ArchExtKind E)
void disable(ArchExtKind E)
void toLLVMFeatureList(std::vector< StringRef > &Features) const
const ArchInfo * BaseArch
bool parseModifier(StringRef Modifier)
void addArchDefaults(const ArchInfo &Arch)