xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AArch64/AArch64Processors.td (revision 6c4b055cfb6bf549e9145dde6454cc6b178c35e4)
10fca6ea1SDimitry Andric//=- AArch64Processors.td - Describe AArch64 Processors ------*- tablegen -*-=//
20fca6ea1SDimitry Andric//
30fca6ea1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40fca6ea1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50fca6ea1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60fca6ea1SDimitry Andric//
70fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
80fca6ea1SDimitry Andric//
90fca6ea1SDimitry Andric//
100fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
110fca6ea1SDimitry Andric
120fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
130fca6ea1SDimitry Andric// AArch64 Processor subtarget features.
140fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
150fca6ea1SDimitry Andric
160fca6ea1SDimitry Andric
170fca6ea1SDimitry Andricdef TuneA35     : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
180fca6ea1SDimitry Andric                                "Cortex-A35 ARM processors">;
190fca6ea1SDimitry Andric
200fca6ea1SDimitry Andricdef TuneA53     : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
210fca6ea1SDimitry Andric                                   "Cortex-A53 ARM processors", [
220fca6ea1SDimitry Andric                                   FeatureFuseAES,
230fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
240fca6ea1SDimitry Andric                                   FeatureBalanceFPOps,
250fca6ea1SDimitry Andric                                   FeaturePostRAScheduler]>;
260fca6ea1SDimitry Andric
270fca6ea1SDimitry Andricdef TuneA55     : SubtargetFeature<"a55", "ARMProcFamily", "CortexA55",
280fca6ea1SDimitry Andric                                   "Cortex-A55 ARM processors", [
290fca6ea1SDimitry Andric                                   FeatureFuseAES,
300fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
310fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
320fca6ea1SDimitry Andric                                   FeatureFuseAddress]>;
330fca6ea1SDimitry Andric
340fca6ea1SDimitry Andricdef TuneA510    : SubtargetFeature<"a510", "ARMProcFamily", "CortexA510",
350fca6ea1SDimitry Andric                                   "Cortex-A510 ARM processors", [
360fca6ea1SDimitry Andric                                   FeatureFuseAES,
370fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
380fca6ea1SDimitry Andric                                   FeaturePostRAScheduler
390fca6ea1SDimitry Andric                                   ]>;
400fca6ea1SDimitry Andric
410fca6ea1SDimitry Andricdef TuneA520    : SubtargetFeature<"a520", "ARMProcFamily", "CortexA520",
420fca6ea1SDimitry Andric                                   "Cortex-A520 ARM processors", [
430fca6ea1SDimitry Andric                                   FeatureFuseAES,
440fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
450fca6ea1SDimitry Andric                                   FeaturePostRAScheduler]>;
460fca6ea1SDimitry Andric
470fca6ea1SDimitry Andricdef TuneA520AE  : SubtargetFeature<"a520ae", "ARMProcFamily", "CortexA520",
480fca6ea1SDimitry Andric                                   "Cortex-A520AE ARM processors", [
490fca6ea1SDimitry Andric                                   FeatureFuseAES,
500fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
510fca6ea1SDimitry Andric                                   FeaturePostRAScheduler]>;
520fca6ea1SDimitry Andric
530fca6ea1SDimitry Andricdef TuneA57     : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
540fca6ea1SDimitry Andric                                   "Cortex-A57 ARM processors", [
550fca6ea1SDimitry Andric                                   FeatureFuseAES,
560fca6ea1SDimitry Andric                                   FeatureBalanceFPOps,
570fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
580fca6ea1SDimitry Andric                                   FeatureFuseLiterals,
590fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
600fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
610fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
620fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
630fca6ea1SDimitry Andric
640fca6ea1SDimitry Andricdef TuneA65     : SubtargetFeature<"a65", "ARMProcFamily", "CortexA65",
650fca6ea1SDimitry Andric                                   "Cortex-A65 ARM processors", [
660fca6ea1SDimitry Andric                                   FeatureFuseAES,
670fca6ea1SDimitry Andric                                   FeatureFuseAddress,
680fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
690fca6ea1SDimitry Andric                                   FeatureFuseLiterals,
700fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
710fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
720fca6ea1SDimitry Andric
730fca6ea1SDimitry Andricdef TuneA72     : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72",
740fca6ea1SDimitry Andric                                   "Cortex-A72 ARM processors", [
750fca6ea1SDimitry Andric                                   FeatureFuseAES,
760fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
770fca6ea1SDimitry Andric                                   FeatureFuseLiterals,
780fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
790fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
800fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
810fca6ea1SDimitry Andric
820fca6ea1SDimitry Andricdef TuneA73     : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73",
830fca6ea1SDimitry Andric                                   "Cortex-A73 ARM processors", [
840fca6ea1SDimitry Andric                                   FeatureFuseAES,
850fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
860fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
870fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
880fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
890fca6ea1SDimitry Andric
900fca6ea1SDimitry Andricdef TuneA75     : SubtargetFeature<"a75", "ARMProcFamily", "CortexA75",
910fca6ea1SDimitry Andric                                   "Cortex-A75 ARM processors", [
920fca6ea1SDimitry Andric                                   FeatureFuseAES,
930fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
940fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
950fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
960fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
970fca6ea1SDimitry Andric
980fca6ea1SDimitry Andricdef TuneA76     : SubtargetFeature<"a76", "ARMProcFamily", "CortexA76",
990fca6ea1SDimitry Andric                                   "Cortex-A76 ARM processors", [
1000fca6ea1SDimitry Andric                                   FeatureFuseAES,
1010fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
1020fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
1030fca6ea1SDimitry Andric                                   FeatureALULSLFast,
1040fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
1050fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
1060fca6ea1SDimitry Andric
1070fca6ea1SDimitry Andricdef TuneA77     : SubtargetFeature<"a77", "ARMProcFamily", "CortexA77",
1080fca6ea1SDimitry Andric                                   "Cortex-A77 ARM processors", [
1090fca6ea1SDimitry Andric                                   FeatureCmpBccFusion,
1100fca6ea1SDimitry Andric                                   FeatureFuseAES,
1110fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
1120fca6ea1SDimitry Andric                                   FeatureAddrLSLSlow14,
1130fca6ea1SDimitry Andric                                   FeatureALULSLFast,
1140fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
1150fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
1160fca6ea1SDimitry Andric
1170fca6ea1SDimitry Andricdef TuneA78 : SubtargetFeature<"a78", "ARMProcFamily", "CortexA78",
1180fca6ea1SDimitry Andric                               "Cortex-A78 ARM processors", [
1190fca6ea1SDimitry Andric                               FeatureCmpBccFusion,
1200fca6ea1SDimitry Andric                               FeatureFuseAES,
1210fca6ea1SDimitry Andric                               FeatureFuseAdrpAdd,
1220fca6ea1SDimitry Andric                               FeatureAddrLSLSlow14,
1230fca6ea1SDimitry Andric                               FeatureALULSLFast,
1240fca6ea1SDimitry Andric                               FeaturePostRAScheduler,
1250fca6ea1SDimitry Andric                               FeatureEnableSelectOptimize,
1260fca6ea1SDimitry Andric                               FeaturePredictableSelectIsExpensive]>;
1270fca6ea1SDimitry Andric
1280fca6ea1SDimitry Andricdef TuneA78AE : SubtargetFeature<"a78ae", "ARMProcFamily",
1290fca6ea1SDimitry Andric                                 "CortexA78AE",
1300fca6ea1SDimitry Andric                                 "Cortex-A78AE ARM processors", [
1310fca6ea1SDimitry Andric                                 FeatureCmpBccFusion,
1320fca6ea1SDimitry Andric                                 FeatureFuseAES,
1330fca6ea1SDimitry Andric                                 FeatureFuseAdrpAdd,
1340fca6ea1SDimitry Andric                                 FeatureAddrLSLSlow14,
1350fca6ea1SDimitry Andric                                 FeatureALULSLFast,
1360fca6ea1SDimitry Andric                                 FeaturePostRAScheduler,
1370fca6ea1SDimitry Andric                                 FeatureEnableSelectOptimize,
1380fca6ea1SDimitry Andric                                 FeaturePredictableSelectIsExpensive]>;
1390fca6ea1SDimitry Andric
1400fca6ea1SDimitry Andricdef TuneA78C : SubtargetFeature<"a78c", "ARMProcFamily",
1410fca6ea1SDimitry Andric                                "CortexA78C",
1420fca6ea1SDimitry Andric                                "Cortex-A78C ARM processors", [
1430fca6ea1SDimitry Andric                                FeatureCmpBccFusion,
1440fca6ea1SDimitry Andric                                FeatureFuseAES,
1450fca6ea1SDimitry Andric                                FeatureFuseAdrpAdd,
1460fca6ea1SDimitry Andric                                FeatureAddrLSLSlow14,
1470fca6ea1SDimitry Andric                                FeatureALULSLFast,
1480fca6ea1SDimitry Andric                                FeaturePostRAScheduler,
1490fca6ea1SDimitry Andric                                FeatureEnableSelectOptimize,
1500fca6ea1SDimitry Andric                                FeaturePredictableSelectIsExpensive]>;
1510fca6ea1SDimitry Andric
1520fca6ea1SDimitry Andricdef TuneA710    : SubtargetFeature<"a710", "ARMProcFamily", "CortexA710",
1530fca6ea1SDimitry Andric                                   "Cortex-A710 ARM processors", [
1540fca6ea1SDimitry Andric                                   FeatureCmpBccFusion,
1550fca6ea1SDimitry Andric                                   FeatureFuseAES,
1560fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
1570fca6ea1SDimitry Andric                                   FeatureALULSLFast,
1580fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
1590fca6ea1SDimitry Andric                                   FeatureEnableSelectOptimize,
1600fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive]>;
1610fca6ea1SDimitry Andric
1620fca6ea1SDimitry Andricdef TuneA715 : SubtargetFeature<"a715", "ARMProcFamily", "CortexA715",
1630fca6ea1SDimitry Andric                                 "Cortex-A715 ARM processors", [
1640fca6ea1SDimitry Andric                                 FeatureFuseAES,
1650fca6ea1SDimitry Andric                                 FeaturePostRAScheduler,
1660fca6ea1SDimitry Andric                                 FeatureCmpBccFusion,
1670fca6ea1SDimitry Andric                                 FeatureALULSLFast,
1680fca6ea1SDimitry Andric                                 FeatureFuseAdrpAdd,
1690fca6ea1SDimitry Andric                                 FeatureEnableSelectOptimize,
1700fca6ea1SDimitry Andric                                 FeaturePredictableSelectIsExpensive]>;
1710fca6ea1SDimitry Andric
1720fca6ea1SDimitry Andricdef TuneA720 : SubtargetFeature<"a720", "ARMProcFamily", "CortexA720",
1730fca6ea1SDimitry Andric                                "Cortex-A720 ARM processors", [
1740fca6ea1SDimitry Andric                                 FeatureFuseAES,
1750fca6ea1SDimitry Andric                                 FeaturePostRAScheduler,
1760fca6ea1SDimitry Andric                                 FeatureCmpBccFusion,
1770fca6ea1SDimitry Andric                                 FeatureALULSLFast,
1780fca6ea1SDimitry Andric                                 FeatureFuseAdrpAdd,
1790fca6ea1SDimitry Andric                                 FeatureEnableSelectOptimize,
1800fca6ea1SDimitry Andric                                 FeaturePredictableSelectIsExpensive]>;
1810fca6ea1SDimitry Andric
1820fca6ea1SDimitry Andricdef TuneA720AE : SubtargetFeature<"a720ae", "ARMProcFamily", "CortexA720",
1830fca6ea1SDimitry Andric                                "Cortex-A720AE ARM processors", [
1840fca6ea1SDimitry Andric                                 FeatureFuseAES,
1850fca6ea1SDimitry Andric                                 FeaturePostRAScheduler,
1860fca6ea1SDimitry Andric                                 FeatureCmpBccFusion,
1870fca6ea1SDimitry Andric                                 FeatureALULSLFast,
1880fca6ea1SDimitry Andric                                 FeatureFuseAdrpAdd,
1890fca6ea1SDimitry Andric                                 FeatureEnableSelectOptimize,
1900fca6ea1SDimitry Andric                                 FeaturePredictableSelectIsExpensive]>;
1910fca6ea1SDimitry Andric
1920fca6ea1SDimitry Andricdef TuneA725 : SubtargetFeature<"cortex-a725", "ARMProcFamily",
1930fca6ea1SDimitry Andric                                "CortexA725",
1940fca6ea1SDimitry Andric                                "Cortex-A725 ARM processors", [
1950fca6ea1SDimitry Andric                                FeatureFuseAES,
1960fca6ea1SDimitry Andric                                FeaturePostRAScheduler,
1970fca6ea1SDimitry Andric                                FeatureCmpBccFusion,
1980fca6ea1SDimitry Andric                                FeatureALULSLFast,
1990fca6ea1SDimitry Andric                                FeatureFuseAdrpAdd,
2000fca6ea1SDimitry Andric                                FeatureEnableSelectOptimize,
2010fca6ea1SDimitry Andric                                FeaturePredictableSelectIsExpensive]>;
2020fca6ea1SDimitry Andric
2030fca6ea1SDimitry Andricdef TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
2040fca6ea1SDimitry Andric                               "CortexR82",
2050fca6ea1SDimitry Andric                               "Cortex-R82 ARM processors", [
2060fca6ea1SDimitry Andric                               FeaturePostRAScheduler]>;
2070fca6ea1SDimitry Andric
2080fca6ea1SDimitry Andricdef TuneR82AE : SubtargetFeature<"cortex-r82ae", "ARMProcFamily",
2090fca6ea1SDimitry Andric                                 "CortexR82AE",
2100fca6ea1SDimitry Andric                                 "Cortex-R82-AE ARM processors",
2110fca6ea1SDimitry Andric                                 [FeaturePostRAScheduler]>;
2120fca6ea1SDimitry Andric
2130fca6ea1SDimitry Andricdef TuneX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1",
2140fca6ea1SDimitry Andric                                  "Cortex-X1 ARM processors", [
2150fca6ea1SDimitry Andric                                  FeatureCmpBccFusion,
2160fca6ea1SDimitry Andric                                  FeatureFuseAES,
2170fca6ea1SDimitry Andric                                  FeatureFuseAdrpAdd,
2180fca6ea1SDimitry Andric                                  FeatureAddrLSLSlow14,
2190fca6ea1SDimitry Andric                                  FeatureALULSLFast,
2200fca6ea1SDimitry Andric                                  FeaturePostRAScheduler,
2210fca6ea1SDimitry Andric                                  FeatureEnableSelectOptimize,
2220fca6ea1SDimitry Andric                                  FeaturePredictableSelectIsExpensive]>;
2230fca6ea1SDimitry Andric
2240fca6ea1SDimitry Andricdef TuneX2 : SubtargetFeature<"cortex-x2", "ARMProcFamily", "CortexX2",
2250fca6ea1SDimitry Andric                                  "Cortex-X2 ARM processors", [
2260fca6ea1SDimitry Andric                                  FeatureCmpBccFusion,
2270fca6ea1SDimitry Andric                                  FeatureFuseAES,
2280fca6ea1SDimitry Andric                                  FeatureFuseAdrpAdd,
2290fca6ea1SDimitry Andric                                  FeatureALULSLFast,
2300fca6ea1SDimitry Andric                                  FeaturePostRAScheduler,
2310fca6ea1SDimitry Andric                                  FeatureEnableSelectOptimize,
2320fca6ea1SDimitry Andric                                  FeaturePredictableSelectIsExpensive]>;
2330fca6ea1SDimitry Andric
2340fca6ea1SDimitry Andricdef TuneX3 : SubtargetFeature<"cortex-x3", "ARMProcFamily", "CortexX3",
2350fca6ea1SDimitry Andric                              "Cortex-X3 ARM processors", [
2360fca6ea1SDimitry Andric                               FeatureALULSLFast,
2370fca6ea1SDimitry Andric                               FeatureFuseAdrpAdd,
2380fca6ea1SDimitry Andric                               FeatureFuseAES,
2390fca6ea1SDimitry Andric                               FeaturePostRAScheduler,
2400fca6ea1SDimitry Andric                               FeatureEnableSelectOptimize,
2410fca6ea1SDimitry Andric                               FeaturePredictableSelectIsExpensive]>;
2420fca6ea1SDimitry Andric
2430fca6ea1SDimitry Andricdef TuneX4 : SubtargetFeature<"cortex-x4", "ARMProcFamily", "CortexX4",
2440fca6ea1SDimitry Andric                              "Cortex-X4 ARM processors", [
2450fca6ea1SDimitry Andric                               FeatureALULSLFast,
2460fca6ea1SDimitry Andric                               FeatureFuseAdrpAdd,
2470fca6ea1SDimitry Andric                               FeatureFuseAES,
2480fca6ea1SDimitry Andric                               FeaturePostRAScheduler,
2490fca6ea1SDimitry Andric                               FeatureEnableSelectOptimize,
2500fca6ea1SDimitry Andric                               FeaturePredictableSelectIsExpensive]>;
2510fca6ea1SDimitry Andric
2520fca6ea1SDimitry Andricdef TuneX925 : SubtargetFeature<"cortex-x925", "ARMProcFamily",
2530fca6ea1SDimitry Andric                                "CortexX925", "Cortex-X925 ARM processors",[
2540fca6ea1SDimitry Andric                                FeatureALULSLFast,
2550fca6ea1SDimitry Andric                                FeatureFuseAdrpAdd,
2560fca6ea1SDimitry Andric                                FeatureFuseAES,
2570fca6ea1SDimitry Andric                                FeaturePostRAScheduler,
2580fca6ea1SDimitry Andric                                FeatureEnableSelectOptimize,
2590fca6ea1SDimitry Andric                                FeaturePredictableSelectIsExpensive]>;
2600fca6ea1SDimitry Andric
2610fca6ea1SDimitry Andricdef TuneA64FX : SubtargetFeature<"a64fx", "ARMProcFamily", "A64FX",
2620fca6ea1SDimitry Andric                                 "Fujitsu A64FX processors", [
2630fca6ea1SDimitry Andric                                 FeaturePostRAScheduler,
2640fca6ea1SDimitry Andric                                 FeatureAggressiveFMA,
2650fca6ea1SDimitry Andric                                 FeatureArithmeticBccFusion,
2660fca6ea1SDimitry Andric                                 FeatureStorePairSuppress,
2670fca6ea1SDimitry Andric                                 FeaturePredictableSelectIsExpensive]>;
2680fca6ea1SDimitry Andric
2690fca6ea1SDimitry Andricdef TuneCarmel : SubtargetFeature<"carmel", "ARMProcFamily", "Carmel",
2700fca6ea1SDimitry Andric                                  "Nvidia Carmel processors">;
2710fca6ea1SDimitry Andric
2720fca6ea1SDimitry Andric// Note that cyclone does not fuse AES instructions, but newer apple chips do
2730fca6ea1SDimitry Andric// perform the fusion and cyclone is used by default when targetting apple OSes.
2740fca6ea1SDimitry Andricdef TuneAppleA7  : SubtargetFeature<"apple-a7", "ARMProcFamily", "AppleA7",
2750fca6ea1SDimitry Andric                                    "Apple A7 (the CPU formerly known as Cyclone)", [
2760fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
2770fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
2780fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
2790fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
2800fca6ea1SDimitry Andric                                    FeatureFuseAES, FeatureFuseCryptoEOR,
2810fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
2820fca6ea1SDimitry Andric                                    FeatureZCRegMove,
2830fca6ea1SDimitry Andric                                    FeatureZCZeroing,
2840fca6ea1SDimitry Andric                                    FeatureZCZeroingFPWorkaround]>;
2850fca6ea1SDimitry Andric
2860fca6ea1SDimitry Andricdef TuneAppleA10 : SubtargetFeature<"apple-a10", "ARMProcFamily", "AppleA10",
2870fca6ea1SDimitry Andric                                    "Apple A10", [
2880fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
2890fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
2900fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
2910fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
2920fca6ea1SDimitry Andric                                    FeatureFuseAES,
2930fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
2940fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
2950fca6ea1SDimitry Andric                                    FeatureZCRegMove,
2960fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
2970fca6ea1SDimitry Andric
2980fca6ea1SDimitry Andricdef TuneAppleA11 : SubtargetFeature<"apple-a11", "ARMProcFamily", "AppleA11",
2990fca6ea1SDimitry Andric                                    "Apple A11", [
3000fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3010fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3020fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3030fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3040fca6ea1SDimitry Andric                                    FeatureFuseAES,
3050fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3060fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3070fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3080fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3090fca6ea1SDimitry Andric
3100fca6ea1SDimitry Andricdef TuneAppleA12 : SubtargetFeature<"apple-a12", "ARMProcFamily", "AppleA12",
3110fca6ea1SDimitry Andric                                    "Apple A12", [
3120fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3130fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3140fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3150fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3160fca6ea1SDimitry Andric                                    FeatureFuseAES,
3170fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3180fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3190fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3200fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3210fca6ea1SDimitry Andric
3220fca6ea1SDimitry Andricdef TuneAppleA13 : SubtargetFeature<"apple-a13", "ARMProcFamily", "AppleA13",
3230fca6ea1SDimitry Andric                                    "Apple A13", [
3240fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3250fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3260fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3270fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3280fca6ea1SDimitry Andric                                    FeatureFuseAES,
3290fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3300fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3310fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3320fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3330fca6ea1SDimitry Andric
3340fca6ea1SDimitry Andricdef TuneAppleA14 : SubtargetFeature<"apple-a14", "ARMProcFamily", "AppleA14",
3350fca6ea1SDimitry Andric                                    "Apple A14", [
3360fca6ea1SDimitry Andric                                    FeatureAggressiveFMA,
3370fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3380fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3390fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3400fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3410fca6ea1SDimitry Andric                                    FeatureFuseAddress,
3420fca6ea1SDimitry Andric                                    FeatureFuseAES,
3430fca6ea1SDimitry Andric                                    FeatureFuseArithmeticLogic,
3440fca6ea1SDimitry Andric                                    FeatureFuseCCSelect,
3450fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3460fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
3470fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3480fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3490fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3500fca6ea1SDimitry Andric
3510fca6ea1SDimitry Andricdef TuneAppleA15 : SubtargetFeature<"apple-a15", "ARMProcFamily", "AppleA15",
3520fca6ea1SDimitry Andric                                    "Apple A15", [
3530fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3540fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3550fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3560fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3570fca6ea1SDimitry Andric                                    FeatureFuseAddress,
3580fca6ea1SDimitry Andric                                    FeatureFuseAES,
3590fca6ea1SDimitry Andric                                    FeatureFuseArithmeticLogic,
3600fca6ea1SDimitry Andric                                    FeatureFuseCCSelect,
3610fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3620fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
3630fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3640fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3650fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3660fca6ea1SDimitry Andric
3670fca6ea1SDimitry Andricdef TuneAppleA16 : SubtargetFeature<"apple-a16", "ARMProcFamily", "AppleA16",
3680fca6ea1SDimitry Andric                                    "Apple A16", [
3690fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3700fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3710fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3720fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3730fca6ea1SDimitry Andric                                    FeatureFuseAddress,
3740fca6ea1SDimitry Andric                                    FeatureFuseAdrpAdd,
3750fca6ea1SDimitry Andric                                    FeatureFuseAES,
3760fca6ea1SDimitry Andric                                    FeatureFuseArithmeticLogic,
3770fca6ea1SDimitry Andric                                    FeatureFuseCCSelect,
3780fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3790fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
3800fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3810fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3820fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
3830fca6ea1SDimitry Andric
3840fca6ea1SDimitry Andricdef TuneAppleA17 : SubtargetFeature<"apple-a17", "ARMProcFamily", "AppleA17",
3850fca6ea1SDimitry Andric                                    "Apple A17", [
3860fca6ea1SDimitry Andric                                    FeatureAlternateSExtLoadCVTF32Pattern,
3870fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
3880fca6ea1SDimitry Andric                                    FeatureArithmeticCbzFusion,
3890fca6ea1SDimitry Andric                                    FeatureDisableLatencySchedHeuristic,
3900fca6ea1SDimitry Andric                                    FeatureFuseAddress,
3910fca6ea1SDimitry Andric                                    FeatureFuseAdrpAdd,
3920fca6ea1SDimitry Andric                                    FeatureFuseAES,
3930fca6ea1SDimitry Andric                                    FeatureFuseArithmeticLogic,
3940fca6ea1SDimitry Andric                                    FeatureFuseCCSelect,
3950fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
3960fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
3970fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
3980fca6ea1SDimitry Andric                                    FeatureZCRegMove,
3990fca6ea1SDimitry Andric                                    FeatureZCZeroing]>;
4000fca6ea1SDimitry Andric
4010fca6ea1SDimitry Andricdef TuneAppleM4 : SubtargetFeature<"apple-m4", "ARMProcFamily", "AppleM4",
4020fca6ea1SDimitry Andric                                     "Apple M4", [
4030fca6ea1SDimitry Andric                                     FeatureAlternateSExtLoadCVTF32Pattern,
4040fca6ea1SDimitry Andric                                     FeatureArithmeticBccFusion,
4050fca6ea1SDimitry Andric                                     FeatureArithmeticCbzFusion,
4060fca6ea1SDimitry Andric                                     FeatureDisableLatencySchedHeuristic,
4070fca6ea1SDimitry Andric                                     FeatureFuseAddress,
4080fca6ea1SDimitry Andric                                     FeatureFuseAES,
4090fca6ea1SDimitry Andric                                     FeatureFuseArithmeticLogic,
4100fca6ea1SDimitry Andric                                     FeatureFuseCCSelect,
4110fca6ea1SDimitry Andric                                     FeatureFuseCryptoEOR,
4120fca6ea1SDimitry Andric                                     FeatureFuseLiterals,
4130fca6ea1SDimitry Andric                                     FeatureZCRegMove,
4140fca6ea1SDimitry Andric                                     FeatureZCZeroing
4150fca6ea1SDimitry Andric                                     ]>;
4160fca6ea1SDimitry Andric
4170fca6ea1SDimitry Andricdef TuneExynosM3 : SubtargetFeature<"exynosm3", "ARMProcFamily", "ExynosM3",
4180fca6ea1SDimitry Andric                                    "Samsung Exynos-M3 processors",
4190fca6ea1SDimitry Andric                                    [FeatureExynosCheapAsMoveHandling,
4200fca6ea1SDimitry Andric                                     FeatureForce32BitJumpTables,
4210fca6ea1SDimitry Andric                                     FeatureFuseAddress,
4220fca6ea1SDimitry Andric                                     FeatureFuseAES,
4230fca6ea1SDimitry Andric                                     FeatureFuseCCSelect,
4240fca6ea1SDimitry Andric                                     FeatureFuseAdrpAdd,
4250fca6ea1SDimitry Andric                                     FeatureFuseLiterals,
4260fca6ea1SDimitry Andric                                     FeatureStorePairSuppress,
4270fca6ea1SDimitry Andric                                     FeatureALULSLFast,
4280fca6ea1SDimitry Andric                                     FeaturePostRAScheduler,
4290fca6ea1SDimitry Andric                                     FeaturePredictableSelectIsExpensive]>;
4300fca6ea1SDimitry Andric
4310fca6ea1SDimitry Andric// Re-uses some scheduling and tunings from the ExynosM3 proc family.
4320fca6ea1SDimitry Andricdef TuneExynosM4 : SubtargetFeature<"exynosm4", "ARMProcFamily", "ExynosM3",
4330fca6ea1SDimitry Andric                                    "Samsung Exynos-M4 processors",
4340fca6ea1SDimitry Andric                                    [FeatureArithmeticBccFusion,
4350fca6ea1SDimitry Andric                                     FeatureArithmeticCbzFusion,
4360fca6ea1SDimitry Andric                                     FeatureExynosCheapAsMoveHandling,
4370fca6ea1SDimitry Andric                                     FeatureForce32BitJumpTables,
4380fca6ea1SDimitry Andric                                     FeatureFuseAddress,
4390fca6ea1SDimitry Andric                                     FeatureFuseAES,
4400fca6ea1SDimitry Andric                                     FeatureFuseArithmeticLogic,
4410fca6ea1SDimitry Andric                                     FeatureFuseCCSelect,
4420fca6ea1SDimitry Andric                                     FeatureFuseAdrpAdd,
4430fca6ea1SDimitry Andric                                     FeatureFuseLiterals,
4440fca6ea1SDimitry Andric                                     FeatureStorePairSuppress,
4450fca6ea1SDimitry Andric                                     FeatureALULSLFast,
4460fca6ea1SDimitry Andric                                     FeaturePostRAScheduler,
4470fca6ea1SDimitry Andric                                     FeatureZCZeroing]>;
4480fca6ea1SDimitry Andric
4490fca6ea1SDimitry Andricdef TuneKryo    : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
4500fca6ea1SDimitry Andric                                   "Qualcomm Kryo processors", [
4510fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
4520fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive,
4530fca6ea1SDimitry Andric                                   FeatureZCZeroing,
4540fca6ea1SDimitry Andric                                   FeatureALULSLFast,
4550fca6ea1SDimitry Andric                                   FeatureStorePairSuppress]>;
4560fca6ea1SDimitry Andric
4570fca6ea1SDimitry Andricdef TuneFalkor  : SubtargetFeature<"falkor", "ARMProcFamily", "Falkor",
4580fca6ea1SDimitry Andric                                   "Qualcomm Falkor processors", [
4590fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
4600fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive,
4610fca6ea1SDimitry Andric                                   FeatureZCZeroing,
4620fca6ea1SDimitry Andric                                   FeatureStorePairSuppress,
4630fca6ea1SDimitry Andric                                   FeatureALULSLFast,
4640fca6ea1SDimitry Andric                                   FeatureSlowSTRQro]>;
4650fca6ea1SDimitry Andric
4660fca6ea1SDimitry Andricdef TuneNeoverseE1 : SubtargetFeature<"neoversee1", "ARMProcFamily", "NeoverseE1",
4670fca6ea1SDimitry Andric                                      "Neoverse E1 ARM processors", [
4680fca6ea1SDimitry Andric                                      FeatureFuseAES,
4690fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
4700fca6ea1SDimitry Andric                                      FeaturePostRAScheduler]>;
4710fca6ea1SDimitry Andric
4720fca6ea1SDimitry Andricdef TuneNeoverseN1 : SubtargetFeature<"neoversen1", "ARMProcFamily", "NeoverseN1",
4730fca6ea1SDimitry Andric                                      "Neoverse N1 ARM processors", [
4740fca6ea1SDimitry Andric                                      FeatureFuseAES,
4750fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
4760fca6ea1SDimitry Andric                                      FeatureAddrLSLSlow14,
4770fca6ea1SDimitry Andric                                      FeatureALULSLFast,
4780fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
4790fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
4800fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
4810fca6ea1SDimitry Andric
4820fca6ea1SDimitry Andricdef TuneNeoverseN2 : SubtargetFeature<"neoversen2", "ARMProcFamily", "NeoverseN2",
4830fca6ea1SDimitry Andric                                      "Neoverse N2 ARM processors", [
4840fca6ea1SDimitry Andric                                      FeatureFuseAES,
4850fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
4860fca6ea1SDimitry Andric                                      FeatureALULSLFast,
4870fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
4880fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
4890fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
4900fca6ea1SDimitry Andric
4910fca6ea1SDimitry Andricdef TuneNeoverseN3 : SubtargetFeature<"neoversen3", "ARMProcFamily", "NeoverseN3",
4920fca6ea1SDimitry Andric                                      "Neoverse N3 ARM processors", [
4930fca6ea1SDimitry Andric                                      FeatureFuseAES,
4940fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
4950fca6ea1SDimitry Andric                                      FeatureALULSLFast,
4960fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
4970fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
4980fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
4990fca6ea1SDimitry Andric
5000fca6ea1SDimitry Andricdef TuneNeoverse512TVB : SubtargetFeature<"neoverse512tvb", "ARMProcFamily", "Neoverse512TVB",
5010fca6ea1SDimitry Andric                                      "Neoverse 512-TVB ARM processors", [
5020fca6ea1SDimitry Andric                                      FeatureFuseAES,
5030fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
5040fca6ea1SDimitry Andric                                      FeatureALULSLFast,
5050fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
5060fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
5070fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
5080fca6ea1SDimitry Andric
5090fca6ea1SDimitry Andricdef TuneNeoverseV1 : SubtargetFeature<"neoversev1", "ARMProcFamily", "NeoverseV1",
5100fca6ea1SDimitry Andric                                      "Neoverse V1 ARM processors", [
5110fca6ea1SDimitry Andric                                      FeatureFuseAES,
5120fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
5130fca6ea1SDimitry Andric                                      FeatureAddrLSLSlow14,
5140fca6ea1SDimitry Andric                                      FeatureALULSLFast,
5150fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
5160fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
5170fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive,
5180fca6ea1SDimitry Andric                                      FeatureNoSVEFPLD1R]>;
5190fca6ea1SDimitry Andric
5200fca6ea1SDimitry Andricdef TuneNeoverseV2 : SubtargetFeature<"neoversev2", "ARMProcFamily", "NeoverseV2",
5210fca6ea1SDimitry Andric                                      "Neoverse V2 ARM processors", [
5220fca6ea1SDimitry Andric                                      FeatureFuseAES,
5230fca6ea1SDimitry Andric                                      FeatureCmpBccFusion,
5240fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
5250fca6ea1SDimitry Andric                                      FeatureALULSLFast,
5260fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
5270fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
5280fca6ea1SDimitry Andric                                      FeatureUseFixedOverScalableIfEqualCost,
5290fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
5300fca6ea1SDimitry Andric
5310fca6ea1SDimitry Andricdef TuneNeoverseV3 : SubtargetFeature<"neoversev3", "ARMProcFamily", "NeoverseV3",
5320fca6ea1SDimitry Andric                                      "Neoverse V3 ARM processors", [
5330fca6ea1SDimitry Andric                                      FeatureFuseAES,
5340fca6ea1SDimitry Andric                                      FeatureALULSLFast,
5350fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
5360fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
5370fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
5380fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
5390fca6ea1SDimitry Andric
5400fca6ea1SDimitry Andricdef TuneNeoverseV3AE : SubtargetFeature<"neoversev3AE", "ARMProcFamily", "NeoverseV3",
5410fca6ea1SDimitry Andric                                      "Neoverse V3AE ARM processors", [
5420fca6ea1SDimitry Andric                                      FeatureFuseAES,
5430fca6ea1SDimitry Andric                                      FeatureALULSLFast,
5440fca6ea1SDimitry Andric                                      FeatureFuseAdrpAdd,
5450fca6ea1SDimitry Andric                                      FeaturePostRAScheduler,
5460fca6ea1SDimitry Andric                                      FeatureEnableSelectOptimize,
5470fca6ea1SDimitry Andric                                      FeaturePredictableSelectIsExpensive]>;
5480fca6ea1SDimitry Andric
5490fca6ea1SDimitry Andricdef TuneSaphira  : SubtargetFeature<"saphira", "ARMProcFamily", "Saphira",
5500fca6ea1SDimitry Andric                                   "Qualcomm Saphira processors", [
5510fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
5520fca6ea1SDimitry Andric                                   FeaturePredictableSelectIsExpensive,
5530fca6ea1SDimitry Andric                                   FeatureZCZeroing,
5540fca6ea1SDimitry Andric                                   FeatureStorePairSuppress,
5550fca6ea1SDimitry Andric                                   FeatureALULSLFast]>;
5560fca6ea1SDimitry Andric
5570fca6ea1SDimitry Andricdef TuneThunderX2T99  : SubtargetFeature<"thunderx2t99", "ARMProcFamily", "ThunderX2T99",
5580fca6ea1SDimitry Andric                                         "Cavium ThunderX2 processors", [
5590fca6ea1SDimitry Andric                                          FeatureAggressiveFMA,
5600fca6ea1SDimitry Andric                                          FeatureArithmeticBccFusion,
5610fca6ea1SDimitry Andric                                          FeaturePostRAScheduler,
5620fca6ea1SDimitry Andric                                          FeatureStorePairSuppress,
5630fca6ea1SDimitry Andric                                          FeaturePredictableSelectIsExpensive]>;
5640fca6ea1SDimitry Andric
5650fca6ea1SDimitry Andricdef TuneThunderX3T110  : SubtargetFeature<"thunderx3t110", "ARMProcFamily",
5660fca6ea1SDimitry Andric                                          "ThunderX3T110",
5670fca6ea1SDimitry Andric                                          "Marvell ThunderX3 processors", [
5680fca6ea1SDimitry Andric                                           FeatureAggressiveFMA,
5690fca6ea1SDimitry Andric                                           FeatureArithmeticBccFusion,
5700fca6ea1SDimitry Andric                                           FeaturePostRAScheduler,
5710fca6ea1SDimitry Andric                                           FeaturePredictableSelectIsExpensive,
5720fca6ea1SDimitry Andric                                           FeatureBalanceFPOps,
5730fca6ea1SDimitry Andric                                           FeatureStorePairSuppress,
5740fca6ea1SDimitry Andric                                           FeatureStrictAlign]>;
5750fca6ea1SDimitry Andric
5760fca6ea1SDimitry Andricdef TuneThunderX : SubtargetFeature<"thunderx", "ARMProcFamily", "ThunderX",
5770fca6ea1SDimitry Andric                                    "Cavium ThunderX processors", [
5780fca6ea1SDimitry Andric                                    FeaturePostRAScheduler,
5790fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
5800fca6ea1SDimitry Andric                                    FeaturePredictableSelectIsExpensive]>;
5810fca6ea1SDimitry Andric
5820fca6ea1SDimitry Andricdef TuneThunderXT88 : SubtargetFeature<"thunderxt88", "ARMProcFamily",
5830fca6ea1SDimitry Andric                                       "ThunderXT88",
5840fca6ea1SDimitry Andric                                       "Cavium ThunderX processors", [
5850fca6ea1SDimitry Andric                                       FeaturePostRAScheduler,
5860fca6ea1SDimitry Andric                                       FeatureStorePairSuppress,
5870fca6ea1SDimitry Andric                                       FeaturePredictableSelectIsExpensive]>;
5880fca6ea1SDimitry Andric
5890fca6ea1SDimitry Andricdef TuneThunderXT81 : SubtargetFeature<"thunderxt81", "ARMProcFamily",
5900fca6ea1SDimitry Andric                                       "ThunderXT81",
5910fca6ea1SDimitry Andric                                       "Cavium ThunderX processors", [
5920fca6ea1SDimitry Andric                                       FeaturePostRAScheduler,
5930fca6ea1SDimitry Andric                                       FeatureStorePairSuppress,
5940fca6ea1SDimitry Andric                                       FeaturePredictableSelectIsExpensive]>;
5950fca6ea1SDimitry Andric
5960fca6ea1SDimitry Andricdef TuneThunderXT83 : SubtargetFeature<"thunderxt83", "ARMProcFamily",
5970fca6ea1SDimitry Andric                                       "ThunderXT83",
5980fca6ea1SDimitry Andric                                       "Cavium ThunderX processors", [
5990fca6ea1SDimitry Andric                                       FeaturePostRAScheduler,
6000fca6ea1SDimitry Andric                                       FeatureStorePairSuppress,
6010fca6ea1SDimitry Andric                                       FeaturePredictableSelectIsExpensive]>;
6020fca6ea1SDimitry Andric
6030fca6ea1SDimitry Andricdef TuneTSV110 : SubtargetFeature<"tsv110", "ARMProcFamily", "TSV110",
6040fca6ea1SDimitry Andric                                  "HiSilicon TS-V110 processors", [
6050fca6ea1SDimitry Andric                                  FeatureFuseAES,
6060fca6ea1SDimitry Andric                                  FeatureStorePairSuppress,
6070fca6ea1SDimitry Andric                                  FeaturePostRAScheduler]>;
6080fca6ea1SDimitry Andric
6090fca6ea1SDimitry Andricdef TuneAmpere1 : SubtargetFeature<"ampere1", "ARMProcFamily", "Ampere1",
6100fca6ea1SDimitry Andric                                   "Ampere Computing Ampere-1 processors", [
6110fca6ea1SDimitry Andric                                   FeaturePostRAScheduler,
6120fca6ea1SDimitry Andric                                   FeatureFuseAES,
6130fca6ea1SDimitry Andric                                   FeatureFuseAdrpAdd,
6140fca6ea1SDimitry Andric                                   FeatureALULSLFast,
6150fca6ea1SDimitry Andric                                   FeatureAggressiveFMA,
6160fca6ea1SDimitry Andric                                   FeatureArithmeticBccFusion,
6170fca6ea1SDimitry Andric                                   FeatureCmpBccFusion,
6180fca6ea1SDimitry Andric                                   FeatureFuseAddress,
6190fca6ea1SDimitry Andric                                   FeatureFuseLiterals,
6200fca6ea1SDimitry Andric                                   FeatureStorePairSuppress,
6210fca6ea1SDimitry Andric                                   FeatureLdpAlignedOnly,
6220fca6ea1SDimitry Andric                                   FeatureStpAlignedOnly]>;
6230fca6ea1SDimitry Andric
6240fca6ea1SDimitry Andricdef TuneAmpere1A : SubtargetFeature<"ampere1a", "ARMProcFamily", "Ampere1A",
6250fca6ea1SDimitry Andric                                    "Ampere Computing Ampere-1A processors", [
6260fca6ea1SDimitry Andric                                    FeaturePostRAScheduler,
6270fca6ea1SDimitry Andric                                    FeatureFuseAES,
6280fca6ea1SDimitry Andric                                    FeatureFuseAdrpAdd,
6290fca6ea1SDimitry Andric                                    FeatureALULSLFast,
6300fca6ea1SDimitry Andric                                    FeatureAggressiveFMA,
6310fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
6320fca6ea1SDimitry Andric                                    FeatureCmpBccFusion,
6330fca6ea1SDimitry Andric                                    FeatureFuseAddress,
6340fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
6350fca6ea1SDimitry Andric                                    FeatureFuseAddSub2RegAndConstOne,
6360fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
6370fca6ea1SDimitry Andric                                    FeatureLdpAlignedOnly,
6380fca6ea1SDimitry Andric                                    FeatureStpAlignedOnly]>;
6390fca6ea1SDimitry Andric
6400fca6ea1SDimitry Andricdef TuneAmpere1B : SubtargetFeature<"ampere1b", "ARMProcFamily", "Ampere1B",
6410fca6ea1SDimitry Andric                                    "Ampere Computing Ampere-1B processors", [
6420fca6ea1SDimitry Andric                                    FeaturePostRAScheduler,
6430fca6ea1SDimitry Andric                                    FeatureFuseAES,
6440fca6ea1SDimitry Andric                                    FeatureFuseAdrpAdd,
6450fca6ea1SDimitry Andric                                    FeatureALULSLFast,
6460fca6ea1SDimitry Andric                                    FeatureAggressiveFMA,
6470fca6ea1SDimitry Andric                                    FeatureArithmeticBccFusion,
6480fca6ea1SDimitry Andric                                    FeatureCmpBccFusion,
6490fca6ea1SDimitry Andric                                    FeatureFuseAddress,
6500fca6ea1SDimitry Andric                                    FeatureFuseLiterals,
6510fca6ea1SDimitry Andric                                    FeatureStorePairSuppress,
6520fca6ea1SDimitry Andric                                    FeatureEnableSelectOptimize,
6530fca6ea1SDimitry Andric                                    FeaturePredictableSelectIsExpensive,
6540fca6ea1SDimitry Andric                                    FeatureLdpAlignedOnly,
6550fca6ea1SDimitry Andric                                    FeatureStpAlignedOnly]>;
6560fca6ea1SDimitry Andric
6570fca6ea1SDimitry Andricdef TuneOryon  : SubtargetFeature<"oryon-1", "ARMProcFamily",
6580fca6ea1SDimitry Andric                                    "Oryon",
6590fca6ea1SDimitry Andric                                    "Nuvia Inc Oryon processors", [
6600fca6ea1SDimitry Andric                                    FeatureSHA2,
6610fca6ea1SDimitry Andric                                    FeatureAES,
6620fca6ea1SDimitry Andric                                    FeatureFPARMv8,
6630fca6ea1SDimitry Andric                                    FeatureNEON,
6640fca6ea1SDimitry Andric                                    FeatureFuseAES,
6650fca6ea1SDimitry Andric                                    FeatureFuseAdrpAdd,
6660fca6ea1SDimitry Andric                                    FeatureEnableSelectOptimize,
6670fca6ea1SDimitry Andric                                    FeatureFuseCryptoEOR,
6680fca6ea1SDimitry Andric                                    FeatureFuseAddress,
6690fca6ea1SDimitry Andric                                    FeatureSM4,
6700fca6ea1SDimitry Andric                                    FeatureSHA2,
6710fca6ea1SDimitry Andric                                    FeatureSHA3,
6720fca6ea1SDimitry Andric                                    FeatureAES,
6730fca6ea1SDimitry Andric                                    FeatureFullFP16,
6740fca6ea1SDimitry Andric                                    FeatureFP16FML,
6750fca6ea1SDimitry Andric                                    FeaturePerfMon,
6760fca6ea1SDimitry Andric                                    FeatureSPE,
6770fca6ea1SDimitry Andric                                    FeaturePostRAScheduler,
6780fca6ea1SDimitry Andric                                    HasV8_6aOps]>;
6790fca6ea1SDimitry Andric
6800fca6ea1SDimitry Andricdef ProcessorFeatures {
6810fca6ea1SDimitry Andric  list<SubtargetFeature> A53  = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
6820fca6ea1SDimitry Andric                                 FeatureFPARMv8, FeatureNEON, FeaturePerfMon];
6830fca6ea1SDimitry Andric  list<SubtargetFeature> A55  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
6840fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
6850fca6ea1SDimitry Andric                                 FeatureRCPC, FeaturePerfMon, FeatureCRC,
6860fca6ea1SDimitry Andric                                 FeatureLSE, FeatureRAS, FeatureRDM];
6870fca6ea1SDimitry Andric  list<SubtargetFeature> A510 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
6880fca6ea1SDimitry Andric                                 FeatureMatMulInt8, FeatureBF16, FeatureAM,
6890fca6ea1SDimitry Andric                                 FeatureMTE, FeatureETE, FeatureSVE2BitPerm,
6900fca6ea1SDimitry Andric                                 FeatureFP16FML,
69162987288SDimitry Andric                                 FeatureCCIDX,
6920fca6ea1SDimitry Andric                                 FeatureSB, FeaturePAuth, FeatureSSBS, FeatureSVE, FeatureSVE2,
6930fca6ea1SDimitry Andric                                 FeatureComplxNum, FeatureCRC, FeatureDotProd,
6940fca6ea1SDimitry Andric                                 FeatureFPARMv8,FeatureFullFP16, FeatureJS, FeatureLSE,
6950fca6ea1SDimitry Andric                                 FeatureRAS, FeatureRCPC, FeatureRDM];
6960fca6ea1SDimitry Andric  list<SubtargetFeature> A520 = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
6970fca6ea1SDimitry Andric                                 FeatureMTE, FeatureETE, FeatureSVE2BitPerm,
6980fca6ea1SDimitry Andric                                 FeatureFP16FML,
69962987288SDimitry Andric                                 FeatureCCIDX,
7000fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
7010fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
7020fca6ea1SDimitry Andric                                 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
7030fca6ea1SDimitry Andric                                 FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
7040fca6ea1SDimitry Andric                                 FeatureDotProd];
7050fca6ea1SDimitry Andric  list<SubtargetFeature> A520AE = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
7060fca6ea1SDimitry Andric                                 FeatureMTE, FeatureETE, FeatureSVE2BitPerm,
7070fca6ea1SDimitry Andric                                 FeatureFP16FML,
70862987288SDimitry Andric                                 FeatureCCIDX,
7090fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
7100fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
7110fca6ea1SDimitry Andric                                 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
7120fca6ea1SDimitry Andric                                 FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
7130fca6ea1SDimitry Andric                                 FeatureDotProd];
7140fca6ea1SDimitry Andric  list<SubtargetFeature> A65  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7150fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
7160fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureSSBS, FeatureRAS,
7170fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRDM];
7180fca6ea1SDimitry Andric  list<SubtargetFeature> A76  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7190fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
7200fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureSSBS, FeaturePerfMon,
7210fca6ea1SDimitry Andric                                 FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
7220fca6ea1SDimitry Andric  list<SubtargetFeature> A77  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7230fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
7240fca6ea1SDimitry Andric                                 FeatureRCPC, FeaturePerfMon, FeatureSSBS,
7250fca6ea1SDimitry Andric                                 FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
7260fca6ea1SDimitry Andric  list<SubtargetFeature> A78  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7270fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
7280fca6ea1SDimitry Andric                                 FeatureRCPC, FeaturePerfMon, FeatureSPE,
7290fca6ea1SDimitry Andric                                 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
7300fca6ea1SDimitry Andric  list<SubtargetFeature> A78AE = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7310fca6ea1SDimitry Andric                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
7320fca6ea1SDimitry Andric                                  FeatureRCPC, FeaturePerfMon, FeatureSPE,
7330fca6ea1SDimitry Andric                                  FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
7340fca6ea1SDimitry Andric  list<SubtargetFeature> A78C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7350fca6ea1SDimitry Andric                                 FeatureNEON, FeatureFullFP16, FeatureDotProd,
7360fca6ea1SDimitry Andric                                 FeatureFlagM, FeaturePAuth,
7370fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureRCPC, FeatureSPE,
7380fca6ea1SDimitry Andric                                 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
7390fca6ea1SDimitry Andric  list<SubtargetFeature> A710 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
74062987288SDimitry Andric                                 FeatureCCIDX, FeatureSSBS,
7410fca6ea1SDimitry Andric                                 FeatureETE, FeatureMTE, FeatureFP16FML,
7420fca6ea1SDimitry Andric                                 FeatureSVE2BitPerm, FeatureBF16, FeatureMatMulInt8,
7430fca6ea1SDimitry Andric                                 FeaturePAuth, FeatureFlagM, FeatureSB, FeatureSVE, FeatureSVE2,
7440fca6ea1SDimitry Andric                                 FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8,
7450fca6ea1SDimitry Andric                                 FeatureFullFP16, FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
7460fca6ea1SDimitry Andric  list<SubtargetFeature> A715 = [HasV9_0aOps, FeatureNEON, FeatureMTE,
74762987288SDimitry Andric                                 FeatureCCIDX,
7480fca6ea1SDimitry Andric                                 FeatureFP16FML, FeatureSVE, FeatureTRBE,
7490fca6ea1SDimitry Andric                                 FeatureSVE2BitPerm, FeatureBF16, FeatureETE,
7500fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureMatMulInt8, FeatureSPE,
7510fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeatureFullFP16, FeaturePAuth, FeaturePredRes, FeatureFlagM,
7520fca6ea1SDimitry Andric                                 FeatureSVE2, FeatureComplxNum, FeatureCRC,
7530fca6ea1SDimitry Andric                                 FeatureDotProd, FeatureFPARMv8,
7540fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureRAS,
7550fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureRDM];
7560fca6ea1SDimitry Andric  list<SubtargetFeature> A720 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
75762987288SDimitry Andric                                 FeatureCCIDX,
7580fca6ea1SDimitry Andric                                 FeatureTRBE, FeatureSVE2BitPerm, FeatureETE,
7590fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
7600fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
7610fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
7620fca6ea1SDimitry Andric                                 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
7630fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
7640fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureRDM];
7650fca6ea1SDimitry Andric  list<SubtargetFeature> A720AE = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
76662987288SDimitry Andric                                 FeatureCCIDX,
7670fca6ea1SDimitry Andric                                 FeatureTRBE, FeatureSVE2BitPerm, FeatureETE,
7680fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
7690fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
7700fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
7710fca6ea1SDimitry Andric                                 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
7720fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
7730fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureRDM];
7740fca6ea1SDimitry Andric  list<SubtargetFeature> A725 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
77562987288SDimitry Andric                                 FeatureCCIDX,
7760fca6ea1SDimitry Andric                                 FeatureETE, FeaturePerfMon, FeatureSPE,
7770fca6ea1SDimitry Andric                                 FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE,
7780fca6ea1SDimitry Andric                                 FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
7790fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
7800fca6ea1SDimitry Andric                                 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
7810fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
7820fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureRDM];
7830fca6ea1SDimitry Andric  list<SubtargetFeature> R82  = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
7840fca6ea1SDimitry Andric                                 FeatureFP16FML, FeatureSSBS, FeaturePredRes,
7850fca6ea1SDimitry Andric                                 FeatureSB, FeatureRDM, FeatureDotProd,
7860fca6ea1SDimitry Andric                                 FeatureComplxNum, FeatureJS,
7870fca6ea1SDimitry Andric                                 FeatureCacheDeepPersist,
7880fca6ea1SDimitry Andric                                 FeatureFlagM, FeatureCRC, FeatureLSE, FeatureRAS, FeatureFPARMv8,
7890fca6ea1SDimitry Andric                                 FeatureNEON, FeaturePAuth, FeatureRCPC];
7900fca6ea1SDimitry Andric  list<SubtargetFeature> R82AE = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
7910fca6ea1SDimitry Andric                                  FeatureFP16FML, FeatureSSBS, FeaturePredRes,
7920fca6ea1SDimitry Andric                                  FeatureSB, FeatureRDM, FeatureDotProd,
7930fca6ea1SDimitry Andric                                  FeatureComplxNum, FeatureJS,
7940fca6ea1SDimitry Andric                                  FeatureCacheDeepPersist,
7950fca6ea1SDimitry Andric                                  FeatureLSE, FeatureFlagM, FeatureCRC, FeatureFPARMv8, FeatureNEON,
7960fca6ea1SDimitry Andric                                  FeaturePAuth, FeatureRAS, FeatureRCPC];
7970fca6ea1SDimitry Andric  list<SubtargetFeature> X1   = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
7980fca6ea1SDimitry Andric                                 FeatureNEON, FeatureRCPC, FeaturePerfMon,
7990fca6ea1SDimitry Andric                                 FeatureSPE, FeatureFullFP16, FeatureDotProd,
8000fca6ea1SDimitry Andric                                 FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
8010fca6ea1SDimitry Andric  list<SubtargetFeature> X1C  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8020fca6ea1SDimitry Andric                                 FeatureNEON, FeatureRCPC_IMMO, FeaturePerfMon,
8030fca6ea1SDimitry Andric                                 FeatureSPE, FeatureFullFP16, FeatureDotProd,
8040fca6ea1SDimitry Andric                                 FeaturePAuth, FeatureSSBS, FeatureFlagM,
8050fca6ea1SDimitry Andric                                 FeatureLSE2,
8060fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
8070fca6ea1SDimitry Andric  list<SubtargetFeature> X2   = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
8080fca6ea1SDimitry Andric                                 FeatureMatMulInt8, FeatureBF16, FeatureAM,
8090fca6ea1SDimitry Andric                                 FeatureMTE, FeatureETE, FeatureSVE2BitPerm,
8100fca6ea1SDimitry Andric                                 FeatureFP16FML,
81162987288SDimitry Andric                                 FeatureCCIDX,
8120fca6ea1SDimitry Andric                                 FeaturePAuth, FeatureSSBS, FeatureSB, FeatureSVE, FeatureSVE2, FeatureFlagM,
8130fca6ea1SDimitry Andric                                 FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureFullFP16,
8140fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
8150fca6ea1SDimitry Andric  list<SubtargetFeature> X3 =   [HasV9_0aOps, FeatureSVE, FeatureNEON,
8160fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureETE, FeatureTRBE,
8170fca6ea1SDimitry Andric                                 FeatureSPE, FeatureBF16, FeatureMatMulInt8,
8180fca6ea1SDimitry Andric                                 FeatureMTE, FeatureSVE2BitPerm, FeatureFullFP16,
8190fca6ea1SDimitry Andric                                 FeatureFP16FML,
82062987288SDimitry Andric                                 FeatureCCIDX,
8210fca6ea1SDimitry Andric                                 FeatureSB, FeaturePAuth, FeaturePredRes, FeatureFlagM, FeatureSSBS,
8220fca6ea1SDimitry Andric                                 FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS,
8230fca6ea1SDimitry Andric                                 FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
8240fca6ea1SDimitry Andric  list<SubtargetFeature> X4 =   [HasV9_2aOps,
8250fca6ea1SDimitry Andric                                 FeaturePerfMon, FeatureETE, FeatureTRBE,
8260fca6ea1SDimitry Andric                                 FeatureSPE, FeatureMTE, FeatureSVE2BitPerm,
8270fca6ea1SDimitry Andric                                 FeatureFP16FML, FeatureSPE_EEF,
82862987288SDimitry Andric                                 FeatureCCIDX,
8290fca6ea1SDimitry Andric                                 FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
8300fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureDotProd,
8310fca6ea1SDimitry Andric                                 FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS, FeatureLSE,
8320fca6ea1SDimitry Andric                                 FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureBF16];
8330fca6ea1SDimitry Andric  list<SubtargetFeature> X925 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
83462987288SDimitry Andric                                 FeatureCCIDX,
8350fca6ea1SDimitry Andric                                 FeatureETE, FeaturePerfMon, FeatureSPE,
8360fca6ea1SDimitry Andric                                 FeatureSVE2BitPerm, FeatureSPE_EEF, FeatureTRBE,
8370fca6ea1SDimitry Andric                                 FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
8380fca6ea1SDimitry Andric                                 FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
8390fca6ea1SDimitry Andric                                 FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
8400fca6ea1SDimitry Andric                                 FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
8410fca6ea1SDimitry Andric                                 FeatureRCPC, FeatureRDM];
8420fca6ea1SDimitry Andric  list<SubtargetFeature> A64FX    = [HasV8_2aOps, FeatureFPARMv8, FeatureNEON,
8430fca6ea1SDimitry Andric                                     FeatureSHA2, FeaturePerfMon, FeatureFullFP16,
8440fca6ea1SDimitry Andric                                     FeatureSVE, FeatureComplxNum,
8450fca6ea1SDimitry Andric                                     FeatureAES, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
8460fca6ea1SDimitry Andric  list<SubtargetFeature> Carmel   = [HasV8_2aOps, FeatureNEON, FeatureSHA2, FeatureAES,
8470fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM,
8480fca6ea1SDimitry Andric                                     FeatureFPARMv8];
8490fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA7  = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8500fca6ea1SDimitry Andric                                     FeatureNEON,FeaturePerfMon, FeatureAppleA7SysReg];
8510fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA10 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8520fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureCRC,
8530fca6ea1SDimitry Andric                                     FeatureRDM, FeaturePAN, FeatureLOR, FeatureVH];
8540fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA11 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8550fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureFullFP16, FeatureCRC,
8560fca6ea1SDimitry Andric                                     FeatureLSE, FeatureRAS, FeatureRDM];
8570fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA12 = [HasV8_3aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8580fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureFullFP16,
8590fca6ea1SDimitry Andric                                     FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
8600fca6ea1SDimitry Andric                                     FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
8610fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA13 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8620fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureFullFP16,
8630fca6ea1SDimitry Andric                                     FeatureFP16FML, FeatureSHA3, FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
8640fca6ea1SDimitry Andric                                     FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
8650fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA14 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8660fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon,
8670fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureFP16FML, FeatureSHA3,
8680fca6ea1SDimitry Andric                                     // ArmV8.5-a extensions, excluding BTI:
8690fca6ea1SDimitry Andric                                     FeatureAltFPCmp, FeatureFRInt3264,
8700fca6ea1SDimitry Andric                                     FeatureSpecRestrict, FeatureSSBS, FeatureSB,
8710fca6ea1SDimitry Andric                                     FeaturePredRes, FeatureCacheDeepPersist,
8720fca6ea1SDimitry Andric                                     FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
8730fca6ea1SDimitry Andric                                     FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM,
8740fca6ea1SDimitry Andric                                     FeatureDotProd];
8750fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA15 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8760fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureSHA3,
8770fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureFP16FML,
87862987288SDimitry Andric                                     FeatureComplxNum, FeatureCRC, FeatureJS,
87962987288SDimitry Andric                                     FeatureLSE, FeaturePAuth,
88062987288SDimitry Andric                                     FeatureRAS, FeatureRCPC, FeatureRDM,
88162987288SDimitry Andric                                     FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
8820fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA16 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8830fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureSHA3,
8840fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureFP16FML,
8850fca6ea1SDimitry Andric                                     FeatureHCX,
88662987288SDimitry Andric                                     FeatureComplxNum, FeatureCRC, FeatureJS,
88762987288SDimitry Andric                                     FeatureLSE, FeaturePAuth,
88862987288SDimitry Andric                                     FeatureRAS, FeatureRCPC, FeatureRDM,
88962987288SDimitry Andric                                     FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
8900fca6ea1SDimitry Andric  list<SubtargetFeature> AppleA17 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
8910fca6ea1SDimitry Andric                                     FeatureNEON, FeaturePerfMon, FeatureSHA3,
8920fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureFP16FML,
8930fca6ea1SDimitry Andric                                     FeatureHCX,
89462987288SDimitry Andric                                     FeatureComplxNum, FeatureCRC, FeatureJS,
89562987288SDimitry Andric                                     FeatureLSE, FeaturePAuth,
89662987288SDimitry Andric                                     FeatureRAS, FeatureRCPC, FeatureRDM,
89762987288SDimitry Andric                                     FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
898*6c4b055cSDimitry Andric  // Technically apple-m4 is v9.2a, but we can't use that here.
899*6c4b055cSDimitry Andric  // Historically, llvm defined v9.0a as requiring SVE, but it's optional
900*6c4b055cSDimitry Andric  // according to the Arm ARM, and not supported by the core.  We decoupled the
901*6c4b055cSDimitry Andric  // two in the clang driver and in the backend subtarget features, but it's
902*6c4b055cSDimitry Andric  // still an issue in the clang frontend.  v8.7a is the next closest choice.
903*6c4b055cSDimitry Andric  list<SubtargetFeature> AppleM4 = [HasV8_7aOps, FeatureSHA2, FeatureFPARMv8,
9040fca6ea1SDimitry Andric                                    FeatureNEON, FeaturePerfMon, FeatureSHA3,
9050fca6ea1SDimitry Andric                                    FeatureFullFP16, FeatureFP16FML,
9060fca6ea1SDimitry Andric                                    FeatureAES, FeatureBF16,
9070fca6ea1SDimitry Andric                                    FeatureSME, FeatureSME2,
9080fca6ea1SDimitry Andric                                    FeatureSMEF64F64, FeatureSMEI16I64,
9090fca6ea1SDimitry Andric                                    FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
9100fca6ea1SDimitry Andric                                    FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM,
9110fca6ea1SDimitry Andric                                    FeatureDotProd, FeatureMatMulInt8];
9120fca6ea1SDimitry Andric  list<SubtargetFeature> ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
9130fca6ea1SDimitry Andric                                     FeaturePerfMon, FeatureNEON, FeatureFPARMv8];
9140fca6ea1SDimitry Andric  list<SubtargetFeature> ExynosM4 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
9150fca6ea1SDimitry Andric                                     FeatureFullFP16, FeaturePerfMon, FeatureCRC, FeatureFPARMv8,
9160fca6ea1SDimitry Andric                                     FeatureLSE, FeatureNEON, FeatureRAS, FeatureRDM];
9170fca6ea1SDimitry Andric  list<SubtargetFeature> Falkor   = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
9180fca6ea1SDimitry Andric                                     FeatureFPARMv8, FeatureNEON, FeaturePerfMon,
9190fca6ea1SDimitry Andric                                     FeatureRDM];
9200fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseE1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
9210fca6ea1SDimitry Andric                                       FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
9220fca6ea1SDimitry Andric                                       FeatureRCPC, FeatureSSBS, FeaturePerfMon, FeatureCRC,
9230fca6ea1SDimitry Andric                                       FeatureLSE, FeatureRAS, FeatureRDM];
9240fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseN1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
9250fca6ea1SDimitry Andric                                       FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
9260fca6ea1SDimitry Andric                                       FeatureRCPC, FeatureSPE, FeatureSSBS,
9270fca6ea1SDimitry Andric                                       FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
9280fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseN2 = [HasV9_0aOps, FeatureBF16, FeatureETE, FeatureFP16FML,
9290fca6ea1SDimitry Andric                                       FeatureMatMulInt8, FeatureMTE, FeatureSVE2,
9300fca6ea1SDimitry Andric                                       FeatureSVE2BitPerm, FeatureTRBE,
9310fca6ea1SDimitry Andric                                       FeaturePerfMon,
93262987288SDimitry Andric                                       FeatureCCIDX,
9330fca6ea1SDimitry Andric                                       FeatureDotProd, FeatureFullFP16, FeatureSB, FeatureSSBS, FeatureSVE,
9340fca6ea1SDimitry Andric                                       FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
9350fca6ea1SDimitry Andric                                       FeatureNEON, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
9360fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseN3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
9370fca6ea1SDimitry Andric                                      FeatureFullFP16, FeatureMTE, FeaturePerfMon,
9380fca6ea1SDimitry Andric                                      FeatureRandGen, FeatureSPE, FeatureSPE_EEF,
9390fca6ea1SDimitry Andric                                      FeatureSVE2BitPerm,
94062987288SDimitry Andric                                      FeatureCCIDX,
9410fca6ea1SDimitry Andric                                      FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
9420fca6ea1SDimitry Andric                                      FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum,
9430fca6ea1SDimitry Andric                                      FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
9440fca6ea1SDimitry Andric                                      FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
9450fca6ea1SDimitry Andric                                      FeatureNEON];
9460fca6ea1SDimitry Andric  list<SubtargetFeature> Neoverse512TVB = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
9470fca6ea1SDimitry Andric                                           FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
9480fca6ea1SDimitry Andric                                           FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
9490fca6ea1SDimitry Andric                                           FeaturePerfMon, FeatureRandGen, FeatureSPE,
9500fca6ea1SDimitry Andric                                           FeatureSSBS, FeatureSVE,
95162987288SDimitry Andric                                           FeatureCCIDX,
9520fca6ea1SDimitry Andric                                           FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
9530fca6ea1SDimitry Andric                                           FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
9540fca6ea1SDimitry Andric                                           FeatureRCPC, FeatureRDM];
9550fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseV1 = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
9560fca6ea1SDimitry Andric                                       FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
9570fca6ea1SDimitry Andric                                       FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
9580fca6ea1SDimitry Andric                                       FeaturePerfMon, FeatureRandGen, FeatureSPE,
9590fca6ea1SDimitry Andric                                       FeatureSSBS, FeatureSVE,
96062987288SDimitry Andric                                       FeatureCCIDX,
9610fca6ea1SDimitry Andric                                       FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
9620fca6ea1SDimitry Andric                                       FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
9630fca6ea1SDimitry Andric                                       FeatureRCPC, FeatureRDM];
9640fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseV2 = [HasV9_0aOps, FeatureBF16, FeatureSPE,
9650fca6ea1SDimitry Andric                                       FeaturePerfMon, FeatureETE, FeatureMatMulInt8,
9660fca6ea1SDimitry Andric                                       FeatureNEON, FeatureSVE2BitPerm, FeatureFP16FML,
9670fca6ea1SDimitry Andric                                       FeatureMTE, FeatureRandGen,
96862987288SDimitry Andric                                       FeatureCCIDX,
9690fca6ea1SDimitry Andric                                       FeatureSVE, FeatureSVE2, FeatureSSBS, FeatureFullFP16, FeatureDotProd,
9700fca6ea1SDimitry Andric                                       FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
9710fca6ea1SDimitry Andric                                       FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
9720fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseV3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
9730fca6ea1SDimitry Andric                                      FeatureFullFP16, FeatureLS64, FeatureMTE,
9740fca6ea1SDimitry Andric                                      FeaturePerfMon, FeatureRandGen, FeatureSPE,
97562987288SDimitry Andric                                      FeatureCCIDX,
9760fca6ea1SDimitry Andric                                      FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE,
9770fca6ea1SDimitry Andric                                      FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
9780fca6ea1SDimitry Andric                                      FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
9790fca6ea1SDimitry Andric                                      FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS, FeatureLSE,
9800fca6ea1SDimitry Andric                                      FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureRME];
9810fca6ea1SDimitry Andric  list<SubtargetFeature> NeoverseV3AE = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
9820fca6ea1SDimitry Andric                                      FeatureFullFP16, FeatureLS64, FeatureMTE,
9830fca6ea1SDimitry Andric                                      FeaturePerfMon, FeatureRandGen, FeatureSPE,
9840fca6ea1SDimitry Andric                                      FeatureSPE_EEF, FeatureSVE2BitPerm, FeatureBRBE,
9850fca6ea1SDimitry Andric                                      FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
98662987288SDimitry Andric                                      FeatureCCIDX,
9870fca6ea1SDimitry Andric                                      FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
9880fca6ea1SDimitry Andric                                      FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
9890fca6ea1SDimitry Andric                                      FeatureLSE, FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM,
9900fca6ea1SDimitry Andric                                      FeatureRME];
9910fca6ea1SDimitry Andric  list<SubtargetFeature> Saphira    = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
9920fca6ea1SDimitry Andric                                       FeatureNEON, FeatureSPE, FeaturePerfMon, FeatureCRC,
99362987288SDimitry Andric                                       FeatureCCIDX,
9940fca6ea1SDimitry Andric                                       FeatureLSE, FeatureRDM, FeatureRAS, FeatureRCPC];
9950fca6ea1SDimitry Andric  list<SubtargetFeature> ThunderX   = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
9960fca6ea1SDimitry Andric                                       FeatureFPARMv8, FeaturePerfMon, FeatureNEON];
9970fca6ea1SDimitry Andric  list<SubtargetFeature> ThunderX2T99  = [HasV8_1aOps, FeatureCRC, FeatureSHA2, FeatureAES,
9980fca6ea1SDimitry Andric                                          FeatureFPARMv8, FeatureNEON, FeatureLSE,
9990fca6ea1SDimitry Andric                                          FeatureRDM];
10000fca6ea1SDimitry Andric  list<SubtargetFeature> ThunderX3T110 = [HasV8_3aOps, FeatureCRC, FeatureSHA2, FeatureAES,
10010fca6ea1SDimitry Andric                                          FeatureFPARMv8, FeatureNEON, FeatureLSE,
100262987288SDimitry Andric                                          FeatureCCIDX,
10030fca6ea1SDimitry Andric                                          FeaturePAuth, FeaturePerfMon, FeatureComplxNum,
10040fca6ea1SDimitry Andric                                          FeatureJS, FeatureRAS, FeatureRCPC, FeatureRDM];
10050fca6ea1SDimitry Andric  list<SubtargetFeature> TSV110 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
10060fca6ea1SDimitry Andric                                   FeatureNEON, FeaturePerfMon, FeatureSPE,
10070fca6ea1SDimitry Andric                                   FeatureFullFP16, FeatureFP16FML, FeatureDotProd,
10080fca6ea1SDimitry Andric                                   FeatureJS, FeatureComplxNum, FeatureCRC, FeatureLSE,
10090fca6ea1SDimitry Andric                                   FeatureRAS, FeatureRDM];
10100fca6ea1SDimitry Andric  list<SubtargetFeature> Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
10110fca6ea1SDimitry Andric                                    FeatureSSBS, FeatureRandGen, FeatureSB,
10120fca6ea1SDimitry Andric                                    FeatureSHA2, FeatureSHA3, FeatureAES,
10130fca6ea1SDimitry Andric                                    FeatureFullFP16, FeatureBF16, FeatureComplxNum, FeatureCRC,
10140fca6ea1SDimitry Andric                                    FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
101562987288SDimitry Andric                                    FeatureCCIDX,
10160fca6ea1SDimitry Andric                                    FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
10170fca6ea1SDimitry Andric  list<SubtargetFeature> Ampere1A = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
10180fca6ea1SDimitry Andric                                     FeatureMTE, FeatureSSBS, FeatureRandGen,
10190fca6ea1SDimitry Andric                                     FeatureSB, FeatureSM4, FeatureSHA2,
10200fca6ea1SDimitry Andric                                     FeatureSHA3, FeatureAES,
10210fca6ea1SDimitry Andric                                     FeatureFullFP16, FeatureBF16, FeatureComplxNum,
10220fca6ea1SDimitry Andric                                     FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
10230fca6ea1SDimitry Andric                                     FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
102462987288SDimitry Andric                                     FeatureCCIDX,
10250fca6ea1SDimitry Andric                                     FeatureRDM];
10260fca6ea1SDimitry Andric  list<SubtargetFeature> Ampere1B = [HasV8_7aOps, FeatureNEON, FeaturePerfMon,
10270fca6ea1SDimitry Andric                                     FeatureMTE, FeatureSSBS, FeatureRandGen,
10280fca6ea1SDimitry Andric                                     FeatureSB, FeatureSM4, FeatureSHA2,
10290fca6ea1SDimitry Andric                                     FeatureSHA3, FeatureAES, FeatureCSSC,
10300fca6ea1SDimitry Andric                                     FeatureWFxT, FeatureFullFP16, FeatureBF16, FeatureComplxNum,
10310fca6ea1SDimitry Andric                                     FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
10320fca6ea1SDimitry Andric                                     FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
103362987288SDimitry Andric                                     FeatureCCIDX,
10340fca6ea1SDimitry Andric                                     FeatureRDM];
10350fca6ea1SDimitry Andric
10360fca6ea1SDimitry Andric  list<SubtargetFeature> Oryon = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
10370fca6ea1SDimitry Andric                                     FeatureRandGen,
10380fca6ea1SDimitry Andric                                     FeaturePAuth, FeatureSM4, FeatureSHA2,
10390fca6ea1SDimitry Andric                                     FeatureSHA3, FeatureAES,
10400fca6ea1SDimitry Andric                                     FeatureSPE, FeatureBF16, FeatureComplxNum, FeatureCRC,
10410fca6ea1SDimitry Andric                                     FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
104262987288SDimitry Andric                                     FeatureSSBS, FeatureCCIDX,
10430fca6ea1SDimitry Andric                                     FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
10440fca6ea1SDimitry Andric
10450fca6ea1SDimitry Andric  // ETE and TRBE are future architecture extensions. We temporarily enable them
10460fca6ea1SDimitry Andric  // by default for users targeting generic AArch64. The extensions do not
10470fca6ea1SDimitry Andric  // affect code generated by the compiler and can be used only by explicitly
10480fca6ea1SDimitry Andric  // mentioning the new system register names in assembly.
10490fca6ea1SDimitry Andric  list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE];
10500fca6ea1SDimitry Andric}
10510fca6ea1SDimitry Andric
10520fca6ea1SDimitry Andric// Define an alternative name for a given Processor.
10530fca6ea1SDimitry Andricclass ProcessorAlias<string n, string alias> {
10540fca6ea1SDimitry Andric  string Name = n;
10550fca6ea1SDimitry Andric  string Alias = alias;
10560fca6ea1SDimitry Andric}
10570fca6ea1SDimitry Andric
10580fca6ea1SDimitry Andric// FeatureFuseAdrpAdd is enabled under Generic to allow linker merging
10590fca6ea1SDimitry Andric// optimizations.
10600fca6ea1SDimitry Andricdef : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic,
10610fca6ea1SDimitry Andric                     [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler,
10620fca6ea1SDimitry Andric                      FeatureEnableSelectOptimize]>;
10630fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53,
10640fca6ea1SDimitry Andric                     [TuneA35]>;
10650fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53,
10660fca6ea1SDimitry Andric                     [TuneA35]>;
10670fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53,
10680fca6ea1SDimitry Andric                     [TuneA53]>;
10690fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55,
10700fca6ea1SDimitry Andric                     [TuneA55]>;
10710fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510,
10720fca6ea1SDimitry Andric                     [TuneA510]>;
10730fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520,
10740fca6ea1SDimitry Andric                     [TuneA520]>;
10750fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE,
10760fca6ea1SDimitry Andric                     [TuneA520AE]>;
10770fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53,
10780fca6ea1SDimitry Andric                     [TuneA57]>;
10790fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65,
10800fca6ea1SDimitry Andric                     [TuneA65]>;
10810fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65,
10820fca6ea1SDimitry Andric                     [TuneA65]>;
10830fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53,
10840fca6ea1SDimitry Andric                     [TuneA72]>;
10850fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53,
10860fca6ea1SDimitry Andric                     [TuneA73]>;
10870fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55,
10880fca6ea1SDimitry Andric                     [TuneA75]>;
10890fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76,
10900fca6ea1SDimitry Andric                     [TuneA76]>;
10910fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76,
10920fca6ea1SDimitry Andric                     [TuneA76]>;
10930fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77,
10940fca6ea1SDimitry Andric                     [TuneA77]>;
10950fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78,
10960fca6ea1SDimitry Andric                     [TuneA78]>;
10970fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE,
10980fca6ea1SDimitry Andric                     [TuneA78AE]>;
10990fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C,
11000fca6ea1SDimitry Andric                     [TuneA78C]>;
11010fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710,
11020fca6ea1SDimitry Andric                     [TuneA710]>;
11030fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715,
11040fca6ea1SDimitry Andric                     [TuneA715]>;
11050fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720,
11060fca6ea1SDimitry Andric                     [TuneA720]>;
11070fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE,
11080fca6ea1SDimitry Andric                     [TuneA720AE]>;
11090fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a725", NeoverseN2Model, ProcessorFeatures.A725,
11100fca6ea1SDimitry Andric                     [TuneA725]>;
11110fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
11120fca6ea1SDimitry Andric                     [TuneR82]>;
11130fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
11140fca6ea1SDimitry Andric                     [TuneR82AE]>;
11150fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1,
11160fca6ea1SDimitry Andric                     [TuneX1]>;
11170fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C,
11180fca6ea1SDimitry Andric                     [TuneX1]>;
11190fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x2", NeoverseN2Model, ProcessorFeatures.X2,
11200fca6ea1SDimitry Andric                     [TuneX2]>;
11210fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x3", NeoverseN2Model, ProcessorFeatures.X3,
11220fca6ea1SDimitry Andric                     [TuneX3]>;
11230fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x4", NeoverseN2Model, ProcessorFeatures.X4,
11240fca6ea1SDimitry Andric                     [TuneX4]>;
11250fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-x925", NeoverseV2Model, ProcessorFeatures.X925,
11260fca6ea1SDimitry Andric                     [TuneX925]>;
11270fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-e1", CortexA53Model,
11280fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>;
11290fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-n1", NeoverseN1Model,
11300fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>;
11310fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-n2", NeoverseN2Model,
11320fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>;
11330fca6ea1SDimitry Andricdef : ProcessorAlias<"cobalt-100", "neoverse-n2">;
11340fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-n3", NeoverseN2Model,
11350fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseN3, [TuneNeoverseN3]>;
11360fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-512tvb", NeoverseV1Model,
11370fca6ea1SDimitry Andric                     ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>;
11380fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-v1", NeoverseV1Model,
11390fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>;
11400fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-v2", NeoverseV2Model,
11410fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseV2, [TuneNeoverseV2]>;
11420fca6ea1SDimitry Andricdef : ProcessorAlias<"grace", "neoverse-v2">;
11430fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-v3", NeoverseV2Model,
11440fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseV3, [TuneNeoverseV3]>;
11450fca6ea1SDimitry Andricdef : ProcessorModel<"neoverse-v3ae", NeoverseV2Model,
11460fca6ea1SDimitry Andric                     ProcessorFeatures.NeoverseV3AE, [TuneNeoverseV3AE]>;
11470fca6ea1SDimitry Andricdef : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3,
11480fca6ea1SDimitry Andric                     [TuneExynosM3]>;
11490fca6ea1SDimitry Andricdef : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4,
11500fca6ea1SDimitry Andric                     [TuneExynosM4]>;
11510fca6ea1SDimitry Andricdef : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4,
11520fca6ea1SDimitry Andric                     [TuneExynosM4]>;
11530fca6ea1SDimitry Andricdef : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor,
11540fca6ea1SDimitry Andric                     [TuneFalkor]>;
11550fca6ea1SDimitry Andricdef : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira,
11560fca6ea1SDimitry Andric                     [TuneSaphira]>;
11570fca6ea1SDimitry Andricdef : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>;
11580fca6ea1SDimitry Andric
11590fca6ea1SDimitry Andric// Cavium ThunderX/ThunderX T8X  Processors
11600fca6ea1SDimitry Andricdef : ProcessorModel<"thunderx", ThunderXT8XModel,  ProcessorFeatures.ThunderX,
11610fca6ea1SDimitry Andric                     [TuneThunderX]>;
11620fca6ea1SDimitry Andricdef : ProcessorModel<"thunderxt88", ThunderXT8XModel,
11630fca6ea1SDimitry Andric                     ProcessorFeatures.ThunderX, [TuneThunderXT88]>;
11640fca6ea1SDimitry Andricdef : ProcessorModel<"thunderxt81", ThunderXT8XModel,
11650fca6ea1SDimitry Andric                     ProcessorFeatures.ThunderX, [TuneThunderXT81]>;
11660fca6ea1SDimitry Andricdef : ProcessorModel<"thunderxt83", ThunderXT8XModel,
11670fca6ea1SDimitry Andric                     ProcessorFeatures.ThunderX, [TuneThunderXT83]>;
11680fca6ea1SDimitry Andric// Cavium ThunderX2T9X  Processors. Formerly Broadcom Vulcan.
11690fca6ea1SDimitry Andricdef : ProcessorModel<"thunderx2t99", ThunderX2T99Model,
11700fca6ea1SDimitry Andric                     ProcessorFeatures.ThunderX2T99, [TuneThunderX2T99]>;
11710fca6ea1SDimitry Andric// Marvell ThunderX3T110 Processors.
11720fca6ea1SDimitry Andricdef : ProcessorModel<"thunderx3t110", ThunderX3T110Model,
11730fca6ea1SDimitry Andric                     ProcessorFeatures.ThunderX3T110, [TuneThunderX3T110]>;
11740fca6ea1SDimitry Andricdef : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
11750fca6ea1SDimitry Andric                     [TuneTSV110]>;
11760fca6ea1SDimitry Andric
11770fca6ea1SDimitry Andric
11780fca6ea1SDimitry Andric// Apple CPUs
11790fca6ea1SDimitry Andric
11800fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7,
11810fca6ea1SDimitry Andric                     [TuneAppleA7]>;
11820fca6ea1SDimitry Andric// Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
11830fca6ea1SDimitry Andricdef : ProcessorAlias<"cyclone", "apple-a7">;
11840fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-a8", "apple-a7">;
11850fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-a9", "apple-a7">;
11860fca6ea1SDimitry Andric
11870fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10,
11880fca6ea1SDimitry Andric                     [TuneAppleA10]>;
11890fca6ea1SDimitry Andric
11900fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11,
11910fca6ea1SDimitry Andric                     [TuneAppleA11]>;
11920fca6ea1SDimitry Andric
11930fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12,
11940fca6ea1SDimitry Andric                     [TuneAppleA12]>;
11950fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-s4", "apple-a12">;
11960fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-s5", "apple-a12">;
11970fca6ea1SDimitry Andric
11980fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13,
11990fca6ea1SDimitry Andric                     [TuneAppleA13]>;
12000fca6ea1SDimitry Andric
12010fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14,
12020fca6ea1SDimitry Andric                     [TuneAppleA14]>;
12030fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-m1", "apple-a14">;
12040fca6ea1SDimitry Andric
12050fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
12060fca6ea1SDimitry Andric                     [TuneAppleA15]>;
12070fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-m2", "apple-a15">;
12080fca6ea1SDimitry Andric
12090fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
12100fca6ea1SDimitry Andric                     [TuneAppleA16]>;
12110fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-m3", "apple-a16">;
12120fca6ea1SDimitry Andric
12130fca6ea1SDimitry Andricdef : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
12140fca6ea1SDimitry Andric                     [TuneAppleA17]>;
12150fca6ea1SDimitry Andric
12160fca6ea1SDimitry Andricdef : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
12170fca6ea1SDimitry Andric                     [TuneAppleM4]>;
12180fca6ea1SDimitry Andric
12190fca6ea1SDimitry Andric// Alias for the latest Apple processor model supported by LLVM.
12200fca6ea1SDimitry Andricdef : ProcessorAlias<"apple-latest", "apple-m4">;
12210fca6ea1SDimitry Andric
12220fca6ea1SDimitry Andric
12230fca6ea1SDimitry Andric// Fujitsu A64FX
12240fca6ea1SDimitry Andricdef : ProcessorModel<"a64fx", A64FXModel, ProcessorFeatures.A64FX,
12250fca6ea1SDimitry Andric                     [TuneA64FX]>;
12260fca6ea1SDimitry Andric
12270fca6ea1SDimitry Andric// Nvidia Carmel
12280fca6ea1SDimitry Andricdef : ProcessorModel<"carmel", NoSchedModel, ProcessorFeatures.Carmel,
12290fca6ea1SDimitry Andric                     [TuneCarmel]>;
12300fca6ea1SDimitry Andric
12310fca6ea1SDimitry Andric// Ampere Computing
12320fca6ea1SDimitry Andricdef : ProcessorModel<"ampere1", Ampere1Model, ProcessorFeatures.Ampere1,
12330fca6ea1SDimitry Andric                     [TuneAmpere1]>;
12340fca6ea1SDimitry Andric
12350fca6ea1SDimitry Andricdef : ProcessorModel<"ampere1a", Ampere1Model, ProcessorFeatures.Ampere1A,
12360fca6ea1SDimitry Andric                     [TuneAmpere1A]>;
12370fca6ea1SDimitry Andric
12380fca6ea1SDimitry Andricdef : ProcessorModel<"ampere1b", Ampere1BModel, ProcessorFeatures.Ampere1B,
12390fca6ea1SDimitry Andric                     [TuneAmpere1B]>;
12400fca6ea1SDimitry Andric
12410fca6ea1SDimitry Andric// Qualcomm Oryon
12420fca6ea1SDimitry Andricdef : ProcessorModel<"oryon-1", OryonModel, ProcessorFeatures.Oryon,
12430fca6ea1SDimitry Andric                       [TuneOryon]>;
1244