1 //=- AArch64Processors.td - Describe AArch64 Processors ------*- tablegen -*-=//
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
7 //===----------------------------------------------------------------------===//
10 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
13 // AArch64 Processor subtarget features.
14 //===----------------------------------------------------------------------===//
17 def TuneA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
18 "Cortex-A35 ARM processors">;
20 def TuneA53 : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
21 "Cortex-A53 ARM processors", [
25 FeaturePostRAScheduler]>;
27 def TuneA55 : SubtargetFeature<"a55", "ARMProcFamily", "CortexA55",
28 "Cortex-A55 ARM processors", [
31 FeaturePostRAScheduler,
34 def TuneA510 : SubtargetFeature<"a510", "ARMProcFamily", "CortexA510",
35 "Cortex-A510 ARM processors", [
38 FeaturePostRAScheduler
41 def TuneA520 : SubtargetFeature<"a520", "ARMProcFamily", "CortexA520",
42 "Cortex-A520 ARM processors", [
45 FeaturePostRAScheduler]>;
47 def TuneA520AE : SubtargetFeature<"a520ae", "ARMProcFamily", "CortexA520",
48 "Cortex-A520AE ARM processors", [
51 FeaturePostRAScheduler]>;
53 def TuneA57 : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
54 "Cortex-A57 ARM processors", [
60 FeaturePostRAScheduler,
61 FeatureEnableSelectOptimize,
62 FeaturePredictableSelectIsExpensive]>;
64 def TuneA65 : SubtargetFeature<"a65", "ARMProcFamily", "CortexA65",
65 "Cortex-A65 ARM processors", [
70 FeatureEnableSelectOptimize,
71 FeaturePredictableSelectIsExpensive]>;
73 def TuneA72 : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72",
74 "Cortex-A72 ARM processors", [
79 FeatureEnableSelectOptimize,
80 FeaturePredictableSelectIsExpensive]>;
82 def TuneA73 : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73",
83 "Cortex-A73 ARM processors", [
87 FeatureEnableSelectOptimize,
88 FeaturePredictableSelectIsExpensive]>;
90 def TuneA75 : SubtargetFeature<"a75", "ARMProcFamily", "CortexA75",
91 "Cortex-A75 ARM processors", [
95 FeatureEnableSelectOptimize,
96 FeaturePredictableSelectIsExpensive]>;
98 def TuneA76 : SubtargetFeature<"a76", "ARMProcFamily", "CortexA76",
99 "Cortex-A76 ARM processors", [
102 FeatureAddrLSLSlow14,
104 FeatureEnableSelectOptimize,
105 FeaturePredictableSelectIsExpensive]>;
107 def TuneA77 : SubtargetFeature<"a77", "ARMProcFamily", "CortexA77",
108 "Cortex-A77 ARM processors", [
112 FeatureAddrLSLSlow14,
114 FeatureEnableSelectOptimize,
115 FeaturePredictableSelectIsExpensive]>;
117 def TuneA78 : SubtargetFeature<"a78", "ARMProcFamily", "CortexA78",
118 "Cortex-A78 ARM processors", [
122 FeatureAddrLSLSlow14,
124 FeaturePostRAScheduler,
125 FeatureEnableSelectOptimize,
126 FeaturePredictableSelectIsExpensive]>;
128 def TuneA78AE : SubtargetFeature<"a78ae", "ARMProcFamily",
130 "Cortex-A78AE ARM processors", [
134 FeatureAddrLSLSlow14,
136 FeaturePostRAScheduler,
137 FeatureEnableSelectOptimize,
138 FeaturePredictableSelectIsExpensive]>;
140 def TuneA78C : SubtargetFeature<"a78c", "ARMProcFamily",
142 "Cortex-A78C ARM processors", [
146 FeatureAddrLSLSlow14,
148 FeaturePostRAScheduler,
149 FeatureEnableSelectOptimize,
150 FeaturePredictableSelectIsExpensive]>;
152 def TuneA710 : SubtargetFeature<"a710", "ARMProcFamily", "CortexA710",
153 "Cortex-A710 ARM processors", [
158 FeaturePostRAScheduler,
159 FeatureEnableSelectOptimize,
160 FeaturePredictableSelectIsExpensive]>;
162 def TuneA715 : SubtargetFeature<"a715", "ARMProcFamily", "CortexA715",
163 "Cortex-A715 ARM processors", [
165 FeaturePostRAScheduler,
169 FeatureEnableSelectOptimize,
170 FeaturePredictableSelectIsExpensive]>;
172 def TuneA720 : SubtargetFeature<"a720", "ARMProcFamily", "CortexA720",
173 "Cortex-A720 ARM processors", [
175 FeaturePostRAScheduler,
179 FeatureEnableSelectOptimize,
180 FeaturePredictableSelectIsExpensive]>;
182 def TuneA720AE : SubtargetFeature<"a720ae", "ARMProcFamily", "CortexA720",
183 "Cortex-A720AE ARM processors", [
185 FeaturePostRAScheduler,
189 FeatureEnableSelectOptimize,
190 FeaturePredictableSelectIsExpensive]>;
192 def TuneA725 : SubtargetFeature<"cortex-a725", "ARMProcFamily",
194 "Cortex-A725 ARM processors", [
196 FeaturePostRAScheduler,
200 FeatureEnableSelectOptimize,
201 FeaturePredictableSelectIsExpensive]>;
203 def TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
205 "Cortex-R82 ARM processors", [
206 FeaturePostRAScheduler]>;
208 def TuneR82AE : SubtargetFeature<"cortex-r82ae", "ARMProcFamily",
210 "Cortex-R82-AE ARM processors",
211 [FeaturePostRAScheduler]>;
213 def TuneX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1",
214 "Cortex-X1 ARM processors", [
218 FeatureAddrLSLSlow14,
220 FeaturePostRAScheduler,
221 FeatureEnableSelectOptimize,
222 FeaturePredictableSelectIsExpensive]>;
224 def TuneX2 : SubtargetFeature<"cortex-x2", "ARMProcFamily", "CortexX2",
225 "Cortex-X2 ARM processors", [
230 FeaturePostRAScheduler,
231 FeatureEnableSelectOptimize,
232 FeatureUseFixedOverScalableIfEqualCost,
233 FeaturePredictableSelectIsExpensive]>;
235 def TuneX3 : SubtargetFeature<"cortex-x3", "ARMProcFamily", "CortexX3",
236 "Cortex-X3 ARM processors", [
240 FeaturePostRAScheduler,
241 FeatureEnableSelectOptimize,
242 FeatureUseFixedOverScalableIfEqualCost,
244 FeaturePredictableSelectIsExpensive]>;
246 def TuneX4 : SubtargetFeature<"cortex-x4", "ARMProcFamily", "CortexX4",
247 "Cortex-X4 ARM processors", [
251 FeaturePostRAScheduler,
252 FeatureEnableSelectOptimize,
253 FeatureUseFixedOverScalableIfEqualCost,
255 FeaturePredictableSelectIsExpensive]>;
257 def TuneX925 : SubtargetFeature<"cortex-x925", "ARMProcFamily",
258 "CortexX925", "Cortex-X925 ARM processors",[
262 FeaturePostRAScheduler,
263 FeatureEnableSelectOptimize,
264 FeatureUseFixedOverScalableIfEqualCost,
266 FeaturePredictableSelectIsExpensive]>;
268 def TuneA64FX : SubtargetFeature<"a64fx", "ARMProcFamily", "A64FX",
269 "Fujitsu A64FX processors", [
270 FeaturePostRAScheduler,
271 FeatureAggressiveFMA,
272 FeatureArithmeticBccFusion,
273 FeatureStorePairSuppress,
274 FeaturePredictableSelectIsExpensive]>;
276 def TuneMONAKA : SubtargetFeature<"fujitsu-monaka", "ARMProcFamily", "MONAKA",
277 "Fujitsu FUJITSU-MONAKA processors", [
278 FeaturePredictableSelectIsExpensive,
279 FeatureEnableSelectOptimize,
280 FeaturePostRAScheduler,
281 FeatureArithmeticBccFusion,
284 def TuneCarmel : SubtargetFeature<"carmel", "ARMProcFamily", "Carmel",
285 "Nvidia Carmel processors">;
287 // Note that cyclone does not fuse AES instructions, but newer apple chips do
288 // perform the fusion and cyclone is used by default when targetting apple OSes.
289 def TuneAppleA7 : SubtargetFeature<"apple-a7", "ARMProcFamily", "AppleA7",
290 "Apple A7 (the CPU formerly known as Cyclone)", [
291 FeatureAlternateSExtLoadCVTF32Pattern,
292 FeatureArithmeticBccFusion,
293 FeatureArithmeticCbzFusion,
294 FeatureDisableLatencySchedHeuristic,
295 FeatureFuseAES, FeatureFuseCryptoEOR,
296 FeatureStorePairSuppress,
299 FeatureZCZeroingFPWorkaround]>;
301 def TuneAppleA10 : SubtargetFeature<"apple-a10", "ARMProcFamily", "AppleA10",
303 FeatureAlternateSExtLoadCVTF32Pattern,
304 FeatureArithmeticBccFusion,
305 FeatureArithmeticCbzFusion,
306 FeatureDisableLatencySchedHeuristic,
308 FeatureFuseCryptoEOR,
309 FeatureStorePairSuppress,
313 def TuneAppleA11 : SubtargetFeature<"apple-a11", "ARMProcFamily", "AppleA11",
315 FeatureAlternateSExtLoadCVTF32Pattern,
316 FeatureArithmeticBccFusion,
317 FeatureArithmeticCbzFusion,
318 FeatureDisableLatencySchedHeuristic,
320 FeatureFuseCryptoEOR,
321 FeatureStorePairSuppress,
325 def TuneAppleA12 : SubtargetFeature<"apple-a12", "ARMProcFamily", "AppleA12",
327 FeatureAlternateSExtLoadCVTF32Pattern,
328 FeatureArithmeticBccFusion,
329 FeatureArithmeticCbzFusion,
330 FeatureDisableLatencySchedHeuristic,
332 FeatureFuseCryptoEOR,
333 FeatureStorePairSuppress,
337 def TuneAppleA13 : SubtargetFeature<"apple-a13", "ARMProcFamily", "AppleA13",
339 FeatureAlternateSExtLoadCVTF32Pattern,
340 FeatureArithmeticBccFusion,
341 FeatureArithmeticCbzFusion,
342 FeatureDisableLatencySchedHeuristic,
344 FeatureFuseCryptoEOR,
345 FeatureStorePairSuppress,
349 def TuneAppleA14 : SubtargetFeature<"apple-a14", "ARMProcFamily", "AppleA14",
351 FeatureAggressiveFMA,
352 FeatureAlternateSExtLoadCVTF32Pattern,
353 FeatureArithmeticBccFusion,
354 FeatureArithmeticCbzFusion,
355 FeatureDisableLatencySchedHeuristic,
358 FeatureFuseArithmeticLogic,
360 FeatureFuseCryptoEOR,
362 FeatureStorePairSuppress,
366 def TuneAppleA15 : SubtargetFeature<"apple-a15", "ARMProcFamily", "AppleA15",
368 FeatureAlternateSExtLoadCVTF32Pattern,
369 FeatureArithmeticBccFusion,
370 FeatureArithmeticCbzFusion,
371 FeatureDisableLatencySchedHeuristic,
375 FeatureFuseArithmeticLogic,
377 FeatureFuseCryptoEOR,
379 FeatureStorePairSuppress,
383 def TuneAppleA16 : SubtargetFeature<"apple-a16", "ARMProcFamily", "AppleA16",
385 FeatureAlternateSExtLoadCVTF32Pattern,
386 FeatureArithmeticBccFusion,
387 FeatureArithmeticCbzFusion,
388 FeatureDisableLatencySchedHeuristic,
392 FeatureFuseArithmeticLogic,
394 FeatureFuseCryptoEOR,
396 FeatureStorePairSuppress,
400 def TuneAppleA17 : SubtargetFeature<"apple-a17", "ARMProcFamily", "AppleA17",
402 FeatureAlternateSExtLoadCVTF32Pattern,
403 FeatureArithmeticBccFusion,
404 FeatureArithmeticCbzFusion,
405 FeatureDisableLatencySchedHeuristic,
409 FeatureFuseArithmeticLogic,
411 FeatureFuseCryptoEOR,
413 FeatureStorePairSuppress,
417 def TuneAppleM4 : SubtargetFeature<"apple-m4", "ARMProcFamily", "AppleM4",
419 FeatureAlternateSExtLoadCVTF32Pattern,
420 FeatureArithmeticBccFusion,
421 FeatureArithmeticCbzFusion,
422 FeatureDisableLatencySchedHeuristic,
426 FeatureFuseArithmeticLogic,
428 FeatureFuseCryptoEOR,
434 def TuneExynosM3 : SubtargetFeature<"exynosm3", "ARMProcFamily", "ExynosM3",
435 "Samsung Exynos-M3 processors",
436 [FeatureExynosCheapAsMoveHandling,
437 FeatureForce32BitJumpTables,
443 FeatureStorePairSuppress,
445 FeaturePostRAScheduler,
446 FeaturePredictableSelectIsExpensive]>;
448 // Re-uses some scheduling and tunings from the ExynosM3 proc family.
449 def TuneExynosM4 : SubtargetFeature<"exynosm4", "ARMProcFamily", "ExynosM3",
450 "Samsung Exynos-M4 processors",
451 [FeatureArithmeticBccFusion,
452 FeatureArithmeticCbzFusion,
453 FeatureExynosCheapAsMoveHandling,
454 FeatureForce32BitJumpTables,
457 FeatureFuseArithmeticLogic,
461 FeatureStorePairSuppress,
463 FeaturePostRAScheduler,
466 def TuneKryo : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
467 "Qualcomm Kryo processors", [
468 FeaturePostRAScheduler,
469 FeaturePredictableSelectIsExpensive,
472 FeatureStorePairSuppress]>;
474 def TuneFalkor : SubtargetFeature<"falkor", "ARMProcFamily", "Falkor",
475 "Qualcomm Falkor processors", [
476 FeaturePostRAScheduler,
477 FeaturePredictableSelectIsExpensive,
479 FeatureStorePairSuppress,
483 def TuneNeoverseE1 : SubtargetFeature<"neoversee1", "ARMProcFamily", "NeoverseE1",
484 "Neoverse E1 ARM processors", [
487 FeaturePostRAScheduler]>;
489 def TuneNeoverseN1 : SubtargetFeature<"neoversen1", "ARMProcFamily", "NeoverseN1",
490 "Neoverse N1 ARM processors", [
493 FeatureAddrLSLSlow14,
495 FeaturePostRAScheduler,
496 FeatureEnableSelectOptimize,
497 FeaturePredictableSelectIsExpensive]>;
499 def TuneNeoverseN2 : SubtargetFeature<"neoversen2", "ARMProcFamily", "NeoverseN2",
500 "Neoverse N2 ARM processors", [
504 FeaturePostRAScheduler,
505 FeatureEnableSelectOptimize,
506 FeaturePredictableSelectIsExpensive]>;
508 def TuneNeoverseN3 : SubtargetFeature<"neoversen3", "ARMProcFamily", "NeoverseN3",
509 "Neoverse N3 ARM processors", [
511 FeaturePostRAScheduler,
514 FeatureEnableSelectOptimize,
515 FeaturePredictableSelectIsExpensive]>;
517 def TuneNeoverse512TVB : SubtargetFeature<"neoverse512tvb", "ARMProcFamily", "Neoverse512TVB",
518 "Neoverse 512-TVB ARM processors", [
522 FeaturePostRAScheduler,
523 FeatureEnableSelectOptimize,
524 FeaturePredictableSelectIsExpensive]>;
526 def TuneNeoverseV1 : SubtargetFeature<"neoversev1", "ARMProcFamily", "NeoverseV1",
527 "Neoverse V1 ARM processors", [
530 FeatureAddrLSLSlow14,
532 FeaturePostRAScheduler,
533 FeatureEnableSelectOptimize,
534 FeaturePredictableSelectIsExpensive,
535 FeatureNoSVEFPLD1R]>;
537 def TuneNeoverseV2 : SubtargetFeature<"neoversev2", "ARMProcFamily", "NeoverseV2",
538 "Neoverse V2 ARM processors", [
543 FeaturePostRAScheduler,
544 FeatureEnableSelectOptimize,
545 FeatureUseFixedOverScalableIfEqualCost,
547 FeaturePredictableSelectIsExpensive]>;
549 def TuneNeoverseV3 : SubtargetFeature<"neoversev3", "ARMProcFamily", "NeoverseV3",
550 "Neoverse V3 ARM processors", [
554 FeaturePostRAScheduler,
555 FeatureEnableSelectOptimize,
557 FeaturePredictableSelectIsExpensive]>;
559 def TuneNeoverseV3AE : SubtargetFeature<"neoversev3AE", "ARMProcFamily", "NeoverseV3",
560 "Neoverse V3AE ARM processors", [
564 FeaturePostRAScheduler,
565 FeatureEnableSelectOptimize,
567 FeaturePredictableSelectIsExpensive]>;
569 def TuneSaphira : SubtargetFeature<"saphira", "ARMProcFamily", "Saphira",
570 "Qualcomm Saphira processors", [
571 FeaturePostRAScheduler,
572 FeaturePredictableSelectIsExpensive,
574 FeatureStorePairSuppress,
577 def TuneThunderX2T99 : SubtargetFeature<"thunderx2t99", "ARMProcFamily", "ThunderX2T99",
578 "Cavium ThunderX2 processors", [
579 FeatureAggressiveFMA,
580 FeatureArithmeticBccFusion,
581 FeaturePostRAScheduler,
582 FeatureStorePairSuppress,
583 FeaturePredictableSelectIsExpensive]>;
585 def TuneThunderX3T110 : SubtargetFeature<"thunderx3t110", "ARMProcFamily",
587 "Marvell ThunderX3 processors", [
588 FeatureAggressiveFMA,
589 FeatureArithmeticBccFusion,
590 FeaturePostRAScheduler,
591 FeaturePredictableSelectIsExpensive,
593 FeatureStorePairSuppress,
594 FeatureStrictAlign]>;
596 def TuneThunderX : SubtargetFeature<"thunderx", "ARMProcFamily", "ThunderX",
597 "Cavium ThunderX processors", [
598 FeaturePostRAScheduler,
599 FeatureStorePairSuppress,
600 FeaturePredictableSelectIsExpensive]>;
602 def TuneThunderXT88 : SubtargetFeature<"thunderxt88", "ARMProcFamily",
604 "Cavium ThunderX processors", [
605 FeaturePostRAScheduler,
606 FeatureStorePairSuppress,
607 FeaturePredictableSelectIsExpensive]>;
609 def TuneThunderXT81 : SubtargetFeature<"thunderxt81", "ARMProcFamily",
611 "Cavium ThunderX processors", [
612 FeaturePostRAScheduler,
613 FeatureStorePairSuppress,
614 FeaturePredictableSelectIsExpensive]>;
616 def TuneThunderXT83 : SubtargetFeature<"thunderxt83", "ARMProcFamily",
618 "Cavium ThunderX processors", [
619 FeaturePostRAScheduler,
620 FeatureStorePairSuppress,
621 FeaturePredictableSelectIsExpensive]>;
623 def TuneTSV110 : SubtargetFeature<"tsv110", "ARMProcFamily", "TSV110",
624 "HiSilicon TS-V110 processors", [
626 FeatureStorePairSuppress,
627 FeaturePostRAScheduler]>;
629 def TuneAmpere1 : SubtargetFeature<"ampere1", "ARMProcFamily", "Ampere1",
630 "Ampere Computing Ampere-1 processors", [
631 FeaturePostRAScheduler,
635 FeatureAggressiveFMA,
636 FeatureArithmeticBccFusion,
640 FeatureStorePairSuppress,
641 FeatureLdpAlignedOnly,
642 FeatureStpAlignedOnly]>;
644 def TuneAmpere1A : SubtargetFeature<"ampere1a", "ARMProcFamily", "Ampere1A",
645 "Ampere Computing Ampere-1A processors", [
646 FeaturePostRAScheduler,
650 FeatureAggressiveFMA,
651 FeatureArithmeticBccFusion,
655 FeatureFuseAddSub2RegAndConstOne,
656 FeatureStorePairSuppress,
657 FeatureLdpAlignedOnly,
658 FeatureStpAlignedOnly]>;
660 def TuneAmpere1B : SubtargetFeature<"ampere1b", "ARMProcFamily", "Ampere1B",
661 "Ampere Computing Ampere-1B processors", [
662 FeaturePostRAScheduler,
666 FeatureAggressiveFMA,
667 FeatureArithmeticBccFusion,
671 FeatureStorePairSuppress,
672 FeatureEnableSelectOptimize,
673 FeaturePredictableSelectIsExpensive,
674 FeatureLdpAlignedOnly,
675 FeatureStpAlignedOnly]>;
677 def TuneOryon : SubtargetFeature<"oryon-1", "ARMProcFamily",
679 "Nuvia Inc Oryon processors", [
686 FeatureEnableSelectOptimize,
687 FeatureFuseCryptoEOR,
697 FeaturePostRAScheduler,
700 def ProcessorFeatures {
701 list<SubtargetFeature> A53 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
702 FeatureFPARMv8, FeatureNEON, FeaturePerfMon];
703 list<SubtargetFeature> A55 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
704 FeatureNEON, FeatureFullFP16, FeatureDotProd,
705 FeatureRCPC, FeaturePerfMon, FeatureCRC,
706 FeatureLSE, FeatureRAS, FeatureRDM];
707 list<SubtargetFeature> A510 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
708 FeatureMatMulInt8, FeatureBF16, FeatureAM,
709 FeatureMTE, FeatureETE, FeatureSVEBitPerm,
712 FeatureSB, FeaturePAuth, FeatureSSBS, FeatureSVE, FeatureSVE2,
713 FeatureComplxNum, FeatureCRC, FeatureDotProd,
714 FeatureFPARMv8,FeatureFullFP16, FeatureJS, FeatureLSE,
715 FeatureRAS, FeatureRCPC, FeatureRDM];
716 list<SubtargetFeature> A520 = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
717 FeatureMTE, FeatureETE, FeatureSVEBitPerm,
720 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
721 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
722 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
723 FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
725 list<SubtargetFeature> A520AE = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
726 FeatureMTE, FeatureETE, FeatureSVEBitPerm,
729 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
730 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
731 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
732 FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
734 list<SubtargetFeature> A65 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
735 FeatureNEON, FeatureFullFP16, FeatureDotProd,
736 FeatureRCPC, FeatureSSBS, FeatureRAS,
737 FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRDM];
738 list<SubtargetFeature> A76 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
739 FeatureNEON, FeatureFullFP16, FeatureDotProd,
740 FeatureRCPC, FeatureSSBS, FeaturePerfMon,
741 FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
742 list<SubtargetFeature> A77 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
743 FeatureNEON, FeatureFullFP16, FeatureDotProd,
744 FeatureRCPC, FeaturePerfMon, FeatureSSBS,
745 FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
746 list<SubtargetFeature> A78 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
747 FeatureNEON, FeatureFullFP16, FeatureDotProd,
748 FeatureRCPC, FeaturePerfMon, FeatureSPE,
749 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
750 list<SubtargetFeature> A78AE = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
751 FeatureNEON, FeatureFullFP16, FeatureDotProd,
752 FeatureRCPC, FeaturePerfMon, FeatureSPE,
753 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
754 list<SubtargetFeature> A78C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
755 FeatureNEON, FeatureFullFP16, FeatureDotProd,
756 FeatureFlagM, FeaturePAuth,
757 FeaturePerfMon, FeatureRCPC, FeatureSPE,
758 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
759 list<SubtargetFeature> A710 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
760 FeatureCCIDX, FeatureSSBS,
761 FeatureETE, FeatureMTE, FeatureFP16FML,
762 FeatureSVEBitPerm, FeatureBF16, FeatureMatMulInt8,
763 FeaturePAuth, FeatureFlagM, FeatureSB, FeatureSVE, FeatureSVE2,
764 FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8,
765 FeatureFullFP16, FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
766 list<SubtargetFeature> A715 = [HasV9_0aOps, FeatureNEON, FeatureMTE,
768 FeatureFP16FML, FeatureSVE, FeatureTRBE,
769 FeatureSVEBitPerm, FeatureBF16, FeatureETE,
770 FeaturePerfMon, FeatureMatMulInt8, FeatureSPE,
771 FeatureSB, FeatureSSBS, FeatureFullFP16, FeaturePAuth, FeaturePredRes, FeatureFlagM,
772 FeatureSVE2, FeatureComplxNum, FeatureCRC,
773 FeatureDotProd, FeatureFPARMv8,
774 FeatureJS, FeatureLSE, FeatureRAS,
775 FeatureRCPC, FeatureRDM];
776 list<SubtargetFeature> A720 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
778 FeatureTRBE, FeatureSVEBitPerm, FeatureETE,
779 FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
780 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
781 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
782 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
783 FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
784 FeatureRCPC, FeatureRDM];
785 list<SubtargetFeature> A720AE = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
787 FeatureTRBE, FeatureSVEBitPerm, FeatureETE,
788 FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
789 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
790 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
791 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
792 FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
793 FeatureRCPC, FeatureRDM];
794 list<SubtargetFeature> A725 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
796 FeatureETE, FeaturePerfMon, FeatureSPE,
797 FeatureSVEBitPerm, FeatureSPE_EEF, FeatureTRBE,
798 FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
799 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
800 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
801 FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
802 FeatureRCPC, FeatureRDM];
803 list<SubtargetFeature> R82 = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
804 FeatureFP16FML, FeatureSSBS, FeaturePredRes,
805 FeatureSB, FeatureRDM, FeatureDotProd,
806 FeatureComplxNum, FeatureJS,
807 FeatureCacheDeepPersist,
808 FeatureFlagM, FeatureCRC, FeatureLSE, FeatureRAS, FeatureFPARMv8,
809 FeatureNEON, FeaturePAuth, FeatureRCPC];
810 list<SubtargetFeature> R82AE = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
811 FeatureFP16FML, FeatureSSBS, FeaturePredRes,
812 FeatureSB, FeatureRDM, FeatureDotProd,
813 FeatureComplxNum, FeatureJS,
814 FeatureCacheDeepPersist,
815 FeatureLSE, FeatureFlagM, FeatureCRC, FeatureFPARMv8, FeatureNEON,
816 FeaturePAuth, FeatureRAS, FeatureRCPC];
817 list<SubtargetFeature> X1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
818 FeatureNEON, FeatureRCPC, FeaturePerfMon,
819 FeatureSPE, FeatureFullFP16, FeatureDotProd,
820 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
821 list<SubtargetFeature> X1C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
822 FeatureNEON, FeatureRCPC_IMMO, FeaturePerfMon,
823 FeatureSPE, FeatureFullFP16, FeatureDotProd,
824 FeaturePAuth, FeatureSSBS, FeatureFlagM,
826 FeatureRCPC, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
827 list<SubtargetFeature> X2 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
828 FeatureMatMulInt8, FeatureBF16, FeatureAM,
829 FeatureMTE, FeatureETE, FeatureSVEBitPerm,
832 FeaturePAuth, FeatureSSBS, FeatureSB, FeatureSVE, FeatureSVE2, FeatureFlagM,
833 FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureFullFP16,
834 FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
835 list<SubtargetFeature> X3 = [HasV9_0aOps, FeatureSVE, FeatureNEON,
836 FeaturePerfMon, FeatureETE, FeatureTRBE,
837 FeatureSPE, FeatureBF16, FeatureMatMulInt8,
838 FeatureMTE, FeatureSVEBitPerm, FeatureFullFP16,
841 FeatureSB, FeaturePAuth, FeaturePredRes, FeatureFlagM, FeatureSSBS,
842 FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS,
843 FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
844 list<SubtargetFeature> X4 = [HasV9_2aOps,
845 FeaturePerfMon, FeatureETE, FeatureTRBE,
846 FeatureSPE, FeatureMTE, FeatureSVEBitPerm,
847 FeatureFP16FML, FeatureSPE_EEF,
849 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
850 FeatureSVE, FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureDotProd,
851 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS, FeatureLSE,
852 FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureBF16];
853 list<SubtargetFeature> X925 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
855 FeatureETE, FeaturePerfMon, FeatureSPE,
856 FeatureSVEBitPerm, FeatureSPE_EEF, FeatureTRBE,
857 FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
858 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
859 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
860 FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
861 FeatureRCPC, FeatureRDM];
862 list<SubtargetFeature> A64FX = [HasV8_2aOps, FeatureFPARMv8, FeatureNEON,
863 FeatureSHA2, FeaturePerfMon, FeatureFullFP16,
864 FeatureSVE, FeatureComplxNum,
865 FeatureAES, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
866 list<SubtargetFeature> MONAKA = [HasV9_3aOps, FeaturePerfMon, FeatureCCIDX,
867 FeatureFPAC, FeatureFP16FML, FeatureRandGen,
868 FeatureSSBS, FeatureLS64, FeatureCLRBHB,
869 FeatureSPECRES2, FeatureSVEAES, FeatureSVE2SM4,
870 FeatureSVE2SHA3, FeatureSVE2, FeatureSVEBitPerm, FeatureETE,
871 FeatureMEC, FeatureFP8DOT2];
872 list<SubtargetFeature> Carmel = [HasV8_2aOps, FeatureNEON, FeatureSHA2, FeatureAES,
873 FeatureFullFP16, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM,
875 list<SubtargetFeature> AppleA7 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
876 FeatureNEON,FeaturePerfMon];
877 list<SubtargetFeature> AppleA10 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
878 FeatureNEON, FeaturePerfMon, FeatureCRC,
879 FeatureRDM, FeaturePAN, FeatureLOR, FeatureVH];
880 list<SubtargetFeature> AppleA11 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
881 FeatureNEON, FeaturePerfMon, FeatureFullFP16, FeatureCRC,
882 FeatureLSE, FeatureRAS, FeatureRDM];
883 list<SubtargetFeature> AppleA12 = [HasV8_3aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
884 FeatureNEON, FeaturePerfMon, FeatureFullFP16,
885 FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
886 FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
887 list<SubtargetFeature> AppleA13 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
888 FeatureNEON, FeaturePerfMon, FeatureFullFP16,
889 FeatureFP16FML, FeatureSHA3, FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
890 FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
891 list<SubtargetFeature> AppleA14 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
892 FeatureNEON, FeaturePerfMon,
893 FeatureFullFP16, FeatureFP16FML, FeatureSHA3,
894 // ArmV8.5-a extensions, excluding BTI:
895 FeatureAltFPCmp, FeatureFRInt3264,
896 FeatureSpecRestrict, FeatureSSBS, FeatureSB,
897 FeaturePredRes, FeatureCacheDeepPersist,
898 FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
899 FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM,
901 list<SubtargetFeature> AppleA15 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
902 FeatureNEON, FeaturePerfMon, FeatureSHA3,
903 FeatureFullFP16, FeatureFP16FML,
904 FeatureComplxNum, FeatureCRC, FeatureJS,
905 FeatureLSE, FeaturePAuth, FeatureFPAC,
906 FeatureRAS, FeatureRCPC, FeatureRDM,
907 FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
908 list<SubtargetFeature> AppleA16 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
909 FeatureNEON, FeaturePerfMon, FeatureSHA3,
910 FeatureFullFP16, FeatureFP16FML,
912 FeatureComplxNum, FeatureCRC, FeatureJS,
913 FeatureLSE, FeaturePAuth, FeatureFPAC,
914 FeatureRAS, FeatureRCPC, FeatureRDM,
915 FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
916 list<SubtargetFeature> AppleA17 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
917 FeatureNEON, FeaturePerfMon, FeatureSHA3,
918 FeatureFullFP16, FeatureFP16FML,
920 FeatureComplxNum, FeatureCRC, FeatureJS,
921 FeatureLSE, FeaturePAuth, FeatureFPAC,
922 FeatureRAS, FeatureRCPC, FeatureRDM,
923 FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
924 // Technically apple-m4 is v9.2a, but we can't use that here.
925 // Historically, llvm defined v9.0a as requiring SVE, but it's optional
926 // according to the Arm ARM, and not supported by the core. We decoupled the
927 // two in the clang driver and in the backend subtarget features, but it's
928 // still an issue in the clang frontend. v8.7a is the next closest choice.
929 list<SubtargetFeature> AppleM4 = [HasV8_7aOps, FeatureSHA2, FeatureFPARMv8,
930 FeatureNEON, FeaturePerfMon, FeatureSHA3,
931 FeatureFullFP16, FeatureFP16FML,
932 FeatureAES, FeatureBF16,
933 FeatureSME, FeatureSME2,
934 FeatureSMEF64F64, FeatureSMEI16I64,
935 FeatureComplxNum, FeatureCRC, FeatureJS,
936 FeatureLSE, FeaturePAuth, FeatureFPAC,
937 FeatureRAS, FeatureRCPC, FeatureRDM,
938 FeatureDotProd, FeatureMatMulInt8];
939 list<SubtargetFeature> ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
940 FeaturePerfMon, FeatureNEON, FeatureFPARMv8];
941 list<SubtargetFeature> ExynosM4 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
942 FeatureFullFP16, FeaturePerfMon, FeatureCRC, FeatureFPARMv8,
943 FeatureLSE, FeatureNEON, FeatureRAS, FeatureRDM];
944 list<SubtargetFeature> Falkor = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
945 FeatureFPARMv8, FeatureNEON, FeaturePerfMon,
947 list<SubtargetFeature> NeoverseE1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
948 FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
949 FeatureRCPC, FeatureSSBS, FeaturePerfMon, FeatureCRC,
950 FeatureLSE, FeatureRAS, FeatureRDM];
951 list<SubtargetFeature> NeoverseN1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
952 FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
953 FeatureRCPC, FeatureSPE, FeatureSSBS,
954 FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
955 list<SubtargetFeature> NeoverseN2 = [HasV9_0aOps, FeatureBF16, FeatureETE, FeatureFP16FML,
956 FeatureMatMulInt8, FeatureMTE, FeatureSVE2,
957 FeatureSVEBitPerm, FeatureTRBE,
960 FeatureDotProd, FeatureFullFP16, FeatureSB, FeatureSSBS, FeatureSVE,
961 FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
962 FeatureNEON, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
963 list<SubtargetFeature> NeoverseN3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
964 FeatureFullFP16, FeatureMTE, FeaturePerfMon,
965 FeatureRandGen, FeatureSPE, FeatureSPE_EEF,
968 FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
969 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum,
970 FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
971 FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
973 list<SubtargetFeature> Neoverse512TVB = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
974 FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
975 FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
976 FeaturePerfMon, FeatureRandGen, FeatureSPE,
977 FeatureSSBS, FeatureSVE,
979 FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
980 FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
981 FeatureRCPC, FeatureRDM];
982 list<SubtargetFeature> NeoverseV1 = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
983 FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
984 FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
985 FeaturePerfMon, FeatureRandGen, FeatureSPE,
986 FeatureSSBS, FeatureSVE,
988 FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
989 FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
990 FeatureRCPC, FeatureRDM];
991 list<SubtargetFeature> NeoverseV2 = [HasV9_0aOps, FeatureBF16, FeatureSPE,
992 FeaturePerfMon, FeatureETE, FeatureMatMulInt8,
993 FeatureNEON, FeatureSVEBitPerm, FeatureFP16FML,
994 FeatureMTE, FeatureRandGen,
996 FeatureSVE, FeatureSVE2, FeatureSSBS, FeatureFullFP16, FeatureDotProd,
997 FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
998 FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
999 list<SubtargetFeature> NeoverseV3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
1000 FeatureFullFP16, FeatureLS64, FeatureMTE,
1001 FeaturePerfMon, FeatureRandGen, FeatureSPE,
1003 FeatureSPE_EEF, FeatureSVEBitPerm, FeatureBRBE,
1004 FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
1005 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
1006 FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS, FeatureLSE,
1007 FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureRME];
1008 list<SubtargetFeature> NeoverseV3AE = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
1009 FeatureFullFP16, FeatureLS64, FeatureMTE,
1010 FeaturePerfMon, FeatureRandGen, FeatureSPE,
1011 FeatureSPE_EEF, FeatureSVEBitPerm, FeatureBRBE,
1012 FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
1014 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
1015 FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
1016 FeatureLSE, FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM,
1018 list<SubtargetFeature> Saphira = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
1019 FeatureNEON, FeatureSPE, FeaturePerfMon, FeatureCRC,
1021 FeatureLSE, FeatureRDM, FeatureRAS, FeatureRCPC];
1022 list<SubtargetFeature> ThunderX = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1023 FeatureFPARMv8, FeaturePerfMon, FeatureNEON];
1024 list<SubtargetFeature> ThunderX2T99 = [HasV8_1aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1025 FeatureFPARMv8, FeatureNEON, FeatureLSE,
1027 list<SubtargetFeature> ThunderX3T110 = [HasV8_3aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1028 FeatureFPARMv8, FeatureNEON, FeatureLSE,
1030 FeaturePAuth, FeaturePerfMon, FeatureComplxNum,
1031 FeatureJS, FeatureRAS, FeatureRCPC, FeatureRDM];
1032 list<SubtargetFeature> TSV110 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
1033 FeatureNEON, FeaturePerfMon, FeatureSPE,
1034 FeatureFullFP16, FeatureFP16FML, FeatureDotProd,
1035 FeatureJS, FeatureComplxNum, FeatureCRC, FeatureLSE,
1036 FeatureRAS, FeatureRDM];
1037 list<SubtargetFeature> Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1038 FeatureSSBS, FeatureRandGen, FeatureSB,
1039 FeatureSHA2, FeatureSHA3, FeatureAES,
1040 FeatureFullFP16, FeatureBF16, FeatureComplxNum, FeatureCRC,
1041 FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
1043 FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
1044 list<SubtargetFeature> Ampere1A = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1045 FeatureMTE, FeatureSSBS, FeatureRandGen,
1046 FeatureSB, FeatureSM4, FeatureSHA2,
1047 FeatureSHA3, FeatureAES,
1048 FeatureFullFP16, FeatureBF16, FeatureComplxNum,
1049 FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1050 FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
1053 list<SubtargetFeature> Ampere1B = [HasV8_7aOps, FeatureNEON, FeaturePerfMon,
1054 FeatureMTE, FeatureSSBS, FeatureRandGen,
1055 FeatureSB, FeatureSM4, FeatureSHA2,
1056 FeatureSHA3, FeatureAES, FeatureCSSC,
1057 FeatureWFxT, FeatureFullFP16, FeatureBF16, FeatureComplxNum,
1058 FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1059 FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
1063 list<SubtargetFeature> Oryon = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1065 FeaturePAuth, FeatureSM4, FeatureSHA2,
1066 FeatureSHA3, FeatureAES,
1067 FeatureSPE, FeatureBF16, FeatureComplxNum, FeatureCRC,
1068 FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1069 FeatureSSBS, FeatureCCIDX,
1070 FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
1072 // ETE and TRBE are future architecture extensions. We temporarily enable them
1073 // by default for users targeting generic AArch64. The extensions do not
1074 // affect code generated by the compiler and can be used only by explicitly
1075 // mentioning the new system register names in assembly.
1076 list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE];
1079 // Define an alternative name for a given Processor.
1080 class ProcessorAlias<string n, string alias> {
1082 string Alias = alias;
1085 // FeatureFuseAdrpAdd is enabled under Generic to allow linker merging
1087 def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic,
1088 [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler,
1089 FeatureEnableSelectOptimize]>;
1090 def : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53,
1092 def : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53,
1094 def : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53,
1096 def : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55,
1098 def : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510,
1100 def : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520,
1102 def : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE,
1104 def : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53,
1106 def : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65,
1108 def : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65,
1110 def : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53,
1112 def : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53,
1114 def : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55,
1116 def : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76,
1118 def : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76,
1120 def : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77,
1122 def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78,
1124 def : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE,
1126 def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C,
1128 def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710,
1130 def : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715,
1132 def : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720,
1134 def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE,
1136 def : ProcessorModel<"cortex-a725", NeoverseN3Model, ProcessorFeatures.A725,
1138 def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
1140 def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
1142 def : ProcessorModel<"cortex-x1", NeoverseV1Model, ProcessorFeatures.X1,
1144 def : ProcessorModel<"cortex-x1c", NeoverseV1Model, ProcessorFeatures.X1C,
1146 def : ProcessorModel<"cortex-x2", NeoverseV2Model, ProcessorFeatures.X2,
1148 def : ProcessorModel<"cortex-x3", NeoverseV2Model, ProcessorFeatures.X3,
1150 def : ProcessorModel<"cortex-x4", NeoverseV2Model, ProcessorFeatures.X4,
1152 def : ProcessorModel<"cortex-x925", NeoverseV2Model, ProcessorFeatures.X925,
1154 def : ProcessorModel<"neoverse-e1", CortexA53Model,
1155 ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>;
1156 def : ProcessorModel<"neoverse-n1", NeoverseN1Model,
1157 ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>;
1158 def : ProcessorModel<"neoverse-n2", NeoverseN2Model,
1159 ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>;
1160 def : ProcessorAlias<"cobalt-100", "neoverse-n2">;
1161 def : ProcessorModel<"neoverse-n3", NeoverseN3Model,
1162 ProcessorFeatures.NeoverseN3, [TuneNeoverseN3]>;
1163 def : ProcessorModel<"neoverse-512tvb", NeoverseV1Model,
1164 ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>;
1165 def : ProcessorModel<"neoverse-v1", NeoverseV1Model,
1166 ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>;
1167 def : ProcessorModel<"neoverse-v2", NeoverseV2Model,
1168 ProcessorFeatures.NeoverseV2, [TuneNeoverseV2]>;
1169 def : ProcessorAlias<"grace", "neoverse-v2">;
1170 def : ProcessorModel<"neoverse-v3", NeoverseV2Model,
1171 ProcessorFeatures.NeoverseV3, [TuneNeoverseV3]>;
1172 def : ProcessorModel<"neoverse-v3ae", NeoverseV2Model,
1173 ProcessorFeatures.NeoverseV3AE, [TuneNeoverseV3AE]>;
1174 def : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3,
1176 def : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4,
1178 def : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4,
1180 def : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor,
1182 def : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira,
1184 def : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>;
1186 // Cavium ThunderX/ThunderX T8X Processors
1187 def : ProcessorModel<"thunderx", ThunderXT8XModel, ProcessorFeatures.ThunderX,
1189 def : ProcessorModel<"thunderxt88", ThunderXT8XModel,
1190 ProcessorFeatures.ThunderX, [TuneThunderXT88]>;
1191 def : ProcessorModel<"thunderxt81", ThunderXT8XModel,
1192 ProcessorFeatures.ThunderX, [TuneThunderXT81]>;
1193 def : ProcessorModel<"thunderxt83", ThunderXT8XModel,
1194 ProcessorFeatures.ThunderX, [TuneThunderXT83]>;
1195 // Cavium ThunderX2T9X Processors. Formerly Broadcom Vulcan.
1196 def : ProcessorModel<"thunderx2t99", ThunderX2T99Model,
1197 ProcessorFeatures.ThunderX2T99, [TuneThunderX2T99]>;
1198 // Marvell ThunderX3T110 Processors.
1199 def : ProcessorModel<"thunderx3t110", ThunderX3T110Model,
1200 ProcessorFeatures.ThunderX3T110, [TuneThunderX3T110]>;
1201 def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
1207 def : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7,
1209 // Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
1210 def : ProcessorAlias<"cyclone", "apple-a7">;
1211 def : ProcessorAlias<"apple-a8", "apple-a7">;
1212 def : ProcessorAlias<"apple-a9", "apple-a7">;
1214 def : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10,
1217 def : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11,
1220 def : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12,
1222 def : ProcessorAlias<"apple-s4", "apple-a12">;
1223 def : ProcessorAlias<"apple-s5", "apple-a12">;
1225 def : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13,
1228 def : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14,
1230 def : ProcessorAlias<"apple-m1", "apple-a14">;
1232 def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
1234 def : ProcessorAlias<"apple-m2", "apple-a15">;
1236 def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
1238 def : ProcessorAlias<"apple-m3", "apple-a16">;
1240 def : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
1243 def : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
1246 // Alias for the latest Apple processor model supported by LLVM.
1247 def : ProcessorAlias<"apple-latest", "apple-m4">;
1251 def : ProcessorModel<"a64fx", A64FXModel, ProcessorFeatures.A64FX,
1254 // Fujitsu FUJITSU-MONAKA
1255 def : ProcessorModel<"fujitsu-monaka", A64FXModel, ProcessorFeatures.MONAKA,
1259 def : ProcessorModel<"carmel", NoSchedModel, ProcessorFeatures.Carmel,
1263 def : ProcessorModel<"ampere1", Ampere1Model, ProcessorFeatures.Ampere1,
1266 def : ProcessorModel<"ampere1a", Ampere1Model, ProcessorFeatures.Ampere1A,
1269 def : ProcessorModel<"ampere1b", Ampere1BModel, ProcessorFeatures.Ampere1B,
1273 def : ProcessorModel<"oryon-1", OryonModel, ProcessorFeatures.Oryon,