[mlir] More fixes for 9fddaf6b14102963f12dbb9730f101fc52e662c1
[llvm-project.git] / llvm / lib / Target / AArch64 / AArch64Processors.td
blob8a2c0442a0c0da44457538fbdeb42980998cea85
1 //=- AArch64Processors.td - Describe AArch64 Processors ------*- tablegen -*-=//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //
10 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
13 // AArch64 Processor subtarget features.
14 //===----------------------------------------------------------------------===//
17 def TuneA35     : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
18                                 "Cortex-A35 ARM processors">;
20 def TuneA53     : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
21                                    "Cortex-A53 ARM processors", [
22                                    FeatureFuseAES,
23                                    FeatureFuseAdrpAdd,
24                                    FeatureBalanceFPOps,
25                                    FeaturePostRAScheduler]>;
27 def TuneA55     : SubtargetFeature<"a55", "ARMProcFamily", "CortexA55",
28                                    "Cortex-A55 ARM processors", [
29                                    FeatureFuseAES,
30                                    FeatureFuseAdrpAdd,
31                                    FeaturePostRAScheduler,
32                                    FeatureFuseAddress]>;
34 def TuneA510    : SubtargetFeature<"a510", "ARMProcFamily", "CortexA510",
35                                    "Cortex-A510 ARM processors", [
36                                    FeatureFuseAES,
37                                    FeatureFuseAdrpAdd,
38                                    FeaturePostRAScheduler
39                                    ]>;
41 def TuneA520    : SubtargetFeature<"a520", "ARMProcFamily", "CortexA520",
42                                    "Cortex-A520 ARM processors", [
43                                    FeatureFuseAES,
44                                    FeatureFuseAdrpAdd,
45                                    FeaturePostRAScheduler]>;
47 def TuneA520AE  : SubtargetFeature<"a520ae", "ARMProcFamily", "CortexA520",
48                                    "Cortex-A520AE ARM processors", [
49                                    FeatureFuseAES,
50                                    FeatureFuseAdrpAdd,
51                                    FeaturePostRAScheduler]>;
53 def TuneA57     : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
54                                    "Cortex-A57 ARM processors", [
55                                    FeatureFuseAES,
56                                    FeatureBalanceFPOps,
57                                    FeatureFuseAdrpAdd,
58                                    FeatureFuseLiterals,
59                                    FeatureAddrLSLSlow14,
60                                    FeaturePostRAScheduler,
61                                    FeatureEnableSelectOptimize,
62                                    FeaturePredictableSelectIsExpensive]>;
64 def TuneA65     : SubtargetFeature<"a65", "ARMProcFamily", "CortexA65",
65                                    "Cortex-A65 ARM processors", [
66                                    FeatureFuseAES,
67                                    FeatureFuseAddress,
68                                    FeatureFuseAdrpAdd,
69                                    FeatureFuseLiterals,
70                                    FeatureEnableSelectOptimize,
71                                    FeaturePredictableSelectIsExpensive]>;
73 def TuneA72     : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72",
74                                    "Cortex-A72 ARM processors", [
75                                    FeatureFuseAES,
76                                    FeatureFuseAdrpAdd,
77                                    FeatureFuseLiterals,
78                                    FeatureAddrLSLSlow14,
79                                    FeatureEnableSelectOptimize,
80                                    FeaturePredictableSelectIsExpensive]>;
82 def TuneA73     : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73",
83                                    "Cortex-A73 ARM processors", [
84                                    FeatureFuseAES,
85                                    FeatureFuseAdrpAdd,
86                                    FeatureAddrLSLSlow14,
87                                    FeatureEnableSelectOptimize,
88                                    FeaturePredictableSelectIsExpensive]>;
90 def TuneA75     : SubtargetFeature<"a75", "ARMProcFamily", "CortexA75",
91                                    "Cortex-A75 ARM processors", [
92                                    FeatureFuseAES,
93                                    FeatureFuseAdrpAdd,
94                                    FeatureAddrLSLSlow14,
95                                    FeatureEnableSelectOptimize,
96                                    FeaturePredictableSelectIsExpensive]>;
98 def TuneA76     : SubtargetFeature<"a76", "ARMProcFamily", "CortexA76",
99                                    "Cortex-A76 ARM processors", [
100                                    FeatureFuseAES,
101                                    FeatureFuseAdrpAdd,
102                                    FeatureAddrLSLSlow14,
103                                    FeatureALULSLFast,
104                                    FeatureEnableSelectOptimize,
105                                    FeaturePredictableSelectIsExpensive]>;
107 def TuneA77     : SubtargetFeature<"a77", "ARMProcFamily", "CortexA77",
108                                    "Cortex-A77 ARM processors", [
109                                    FeatureCmpBccFusion,
110                                    FeatureFuseAES,
111                                    FeatureFuseAdrpAdd,
112                                    FeatureAddrLSLSlow14,
113                                    FeatureALULSLFast,
114                                    FeatureEnableSelectOptimize,
115                                    FeaturePredictableSelectIsExpensive]>;
117 def TuneA78 : SubtargetFeature<"a78", "ARMProcFamily", "CortexA78",
118                                "Cortex-A78 ARM processors", [
119                                FeatureCmpBccFusion,
120                                FeatureFuseAES,
121                                FeatureFuseAdrpAdd,
122                                FeatureAddrLSLSlow14,
123                                FeatureALULSLFast,
124                                FeaturePostRAScheduler,
125                                FeatureEnableSelectOptimize,
126                                FeaturePredictableSelectIsExpensive]>;
128 def TuneA78AE : SubtargetFeature<"a78ae", "ARMProcFamily",
129                                  "CortexA78AE",
130                                  "Cortex-A78AE ARM processors", [
131                                  FeatureCmpBccFusion,
132                                  FeatureFuseAES,
133                                  FeatureFuseAdrpAdd,
134                                  FeatureAddrLSLSlow14,
135                                  FeatureALULSLFast,
136                                  FeaturePostRAScheduler,
137                                  FeatureEnableSelectOptimize,
138                                  FeaturePredictableSelectIsExpensive]>;
140 def TuneA78C : SubtargetFeature<"a78c", "ARMProcFamily",
141                                 "CortexA78C",
142                                 "Cortex-A78C ARM processors", [
143                                 FeatureCmpBccFusion,
144                                 FeatureFuseAES,
145                                 FeatureFuseAdrpAdd,
146                                 FeatureAddrLSLSlow14,
147                                 FeatureALULSLFast,
148                                 FeaturePostRAScheduler,
149                                 FeatureEnableSelectOptimize,
150                                 FeaturePredictableSelectIsExpensive]>;
152 def TuneA710    : SubtargetFeature<"a710", "ARMProcFamily", "CortexA710",
153                                    "Cortex-A710 ARM processors", [
154                                    FeatureCmpBccFusion,
155                                    FeatureFuseAES,
156                                    FeatureFuseAdrpAdd,
157                                    FeatureALULSLFast,
158                                    FeaturePostRAScheduler,
159                                    FeatureEnableSelectOptimize,
160                                    FeaturePredictableSelectIsExpensive]>;
162 def TuneA715 : SubtargetFeature<"a715", "ARMProcFamily", "CortexA715",
163                                  "Cortex-A715 ARM processors", [
164                                  FeatureFuseAES,
165                                  FeaturePostRAScheduler,
166                                  FeatureCmpBccFusion,
167                                  FeatureALULSLFast,
168                                  FeatureFuseAdrpAdd,
169                                  FeatureEnableSelectOptimize,
170                                  FeaturePredictableSelectIsExpensive]>;
172 def TuneA720 : SubtargetFeature<"a720", "ARMProcFamily", "CortexA720",
173                                 "Cortex-A720 ARM processors", [
174                                  FeatureFuseAES,
175                                  FeaturePostRAScheduler,
176                                  FeatureCmpBccFusion,
177                                  FeatureALULSLFast,
178                                  FeatureFuseAdrpAdd,
179                                  FeatureEnableSelectOptimize,
180                                  FeaturePredictableSelectIsExpensive]>;
182 def TuneA720AE : SubtargetFeature<"a720ae", "ARMProcFamily", "CortexA720",
183                                 "Cortex-A720AE ARM processors", [
184                                  FeatureFuseAES,
185                                  FeaturePostRAScheduler,
186                                  FeatureCmpBccFusion,
187                                  FeatureALULSLFast,
188                                  FeatureFuseAdrpAdd,
189                                  FeatureEnableSelectOptimize,
190                                  FeaturePredictableSelectIsExpensive]>;
192 def TuneA725 : SubtargetFeature<"cortex-a725", "ARMProcFamily",
193                                 "CortexA725",
194                                 "Cortex-A725 ARM processors", [
195                                 FeatureFuseAES,
196                                 FeaturePostRAScheduler,
197                                 FeatureCmpBccFusion,
198                                 FeatureALULSLFast,
199                                 FeatureFuseAdrpAdd,
200                                 FeatureEnableSelectOptimize,
201                                 FeaturePredictableSelectIsExpensive]>;
203 def TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
204                                "CortexR82",
205                                "Cortex-R82 ARM processors", [
206                                FeaturePostRAScheduler]>;
208 def TuneR82AE : SubtargetFeature<"cortex-r82ae", "ARMProcFamily",
209                                  "CortexR82AE",
210                                  "Cortex-R82-AE ARM processors",
211                                  [FeaturePostRAScheduler]>;
213 def TuneX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1",
214                                   "Cortex-X1 ARM processors", [
215                                   FeatureCmpBccFusion,
216                                   FeatureFuseAES,
217                                   FeatureFuseAdrpAdd,
218                                   FeatureAddrLSLSlow14,
219                                   FeatureALULSLFast,
220                                   FeaturePostRAScheduler,
221                                   FeatureEnableSelectOptimize,
222                                   FeaturePredictableSelectIsExpensive]>;
224 def TuneX2 : SubtargetFeature<"cortex-x2", "ARMProcFamily", "CortexX2",
225                                   "Cortex-X2 ARM processors", [
226                                   FeatureCmpBccFusion,
227                                   FeatureFuseAES,
228                                   FeatureFuseAdrpAdd,
229                                   FeatureALULSLFast,
230                                   FeaturePostRAScheduler,
231                                   FeatureEnableSelectOptimize,
232                                   FeatureUseFixedOverScalableIfEqualCost,
233                                   FeaturePredictableSelectIsExpensive]>;
235 def TuneX3 : SubtargetFeature<"cortex-x3", "ARMProcFamily", "CortexX3",
236                               "Cortex-X3 ARM processors", [
237                                FeatureALULSLFast,
238                                FeatureFuseAdrpAdd,
239                                FeatureFuseAES,
240                                FeaturePostRAScheduler,
241                                FeatureEnableSelectOptimize,
242                                FeatureUseFixedOverScalableIfEqualCost,
243                                FeatureAvoidLDAPUR,
244                                FeaturePredictableSelectIsExpensive]>;
246 def TuneX4 : SubtargetFeature<"cortex-x4", "ARMProcFamily", "CortexX4",
247                               "Cortex-X4 ARM processors", [
248                                FeatureALULSLFast,
249                                FeatureFuseAdrpAdd,
250                                FeatureFuseAES,
251                                FeaturePostRAScheduler,
252                                FeatureEnableSelectOptimize,
253                                FeatureUseFixedOverScalableIfEqualCost,
254                                FeatureAvoidLDAPUR,
255                                FeaturePredictableSelectIsExpensive]>;
257 def TuneX925 : SubtargetFeature<"cortex-x925", "ARMProcFamily",
258                                 "CortexX925", "Cortex-X925 ARM processors",[
259                                 FeatureALULSLFast,
260                                 FeatureFuseAdrpAdd,
261                                 FeatureFuseAES,
262                                 FeaturePostRAScheduler,
263                                 FeatureEnableSelectOptimize,
264                                 FeatureUseFixedOverScalableIfEqualCost,
265                                 FeatureAvoidLDAPUR,
266                                 FeaturePredictableSelectIsExpensive]>;
268 def TuneA64FX : SubtargetFeature<"a64fx", "ARMProcFamily", "A64FX",
269                                  "Fujitsu A64FX processors", [
270                                  FeaturePostRAScheduler,
271                                  FeatureAggressiveFMA,
272                                  FeatureArithmeticBccFusion,
273                                  FeatureStorePairSuppress,
274                                  FeaturePredictableSelectIsExpensive]>;
276 def TuneMONAKA : SubtargetFeature<"fujitsu-monaka", "ARMProcFamily", "MONAKA",
277                                  "Fujitsu FUJITSU-MONAKA processors", [
278                                  FeaturePredictableSelectIsExpensive,
279                                  FeatureEnableSelectOptimize,
280                                  FeaturePostRAScheduler,
281                                  FeatureArithmeticBccFusion,
282                                  ]>;
284 def TuneCarmel : SubtargetFeature<"carmel", "ARMProcFamily", "Carmel",
285                                   "Nvidia Carmel processors">;
287 // Note that cyclone does not fuse AES instructions, but newer apple chips do
288 // perform the fusion and cyclone is used by default when targetting apple OSes.
289 def TuneAppleA7  : SubtargetFeature<"apple-a7", "ARMProcFamily", "AppleA7",
290                                     "Apple A7 (the CPU formerly known as Cyclone)", [
291                                     FeatureAlternateSExtLoadCVTF32Pattern,
292                                     FeatureArithmeticBccFusion,
293                                     FeatureArithmeticCbzFusion,
294                                     FeatureDisableLatencySchedHeuristic,
295                                     FeatureFuseAES, FeatureFuseCryptoEOR,
296                                     FeatureStorePairSuppress,
297                                     FeatureZCRegMove,
298                                     FeatureZCZeroing,
299                                     FeatureZCZeroingFPWorkaround]>;
301 def TuneAppleA10 : SubtargetFeature<"apple-a10", "ARMProcFamily", "AppleA10",
302                                     "Apple A10", [
303                                     FeatureAlternateSExtLoadCVTF32Pattern,
304                                     FeatureArithmeticBccFusion,
305                                     FeatureArithmeticCbzFusion,
306                                     FeatureDisableLatencySchedHeuristic,
307                                     FeatureFuseAES,
308                                     FeatureFuseCryptoEOR,
309                                     FeatureStorePairSuppress,
310                                     FeatureZCRegMove,
311                                     FeatureZCZeroing]>;
313 def TuneAppleA11 : SubtargetFeature<"apple-a11", "ARMProcFamily", "AppleA11",
314                                     "Apple A11", [
315                                     FeatureAlternateSExtLoadCVTF32Pattern,
316                                     FeatureArithmeticBccFusion,
317                                     FeatureArithmeticCbzFusion,
318                                     FeatureDisableLatencySchedHeuristic,
319                                     FeatureFuseAES,
320                                     FeatureFuseCryptoEOR,
321                                     FeatureStorePairSuppress,
322                                     FeatureZCRegMove,
323                                     FeatureZCZeroing]>;
325 def TuneAppleA12 : SubtargetFeature<"apple-a12", "ARMProcFamily", "AppleA12",
326                                     "Apple A12", [
327                                     FeatureAlternateSExtLoadCVTF32Pattern,
328                                     FeatureArithmeticBccFusion,
329                                     FeatureArithmeticCbzFusion,
330                                     FeatureDisableLatencySchedHeuristic,
331                                     FeatureFuseAES,
332                                     FeatureFuseCryptoEOR,
333                                     FeatureStorePairSuppress,
334                                     FeatureZCRegMove,
335                                     FeatureZCZeroing]>;
337 def TuneAppleA13 : SubtargetFeature<"apple-a13", "ARMProcFamily", "AppleA13",
338                                     "Apple A13", [
339                                     FeatureAlternateSExtLoadCVTF32Pattern,
340                                     FeatureArithmeticBccFusion,
341                                     FeatureArithmeticCbzFusion,
342                                     FeatureDisableLatencySchedHeuristic,
343                                     FeatureFuseAES,
344                                     FeatureFuseCryptoEOR,
345                                     FeatureStorePairSuppress,
346                                     FeatureZCRegMove,
347                                     FeatureZCZeroing]>;
349 def TuneAppleA14 : SubtargetFeature<"apple-a14", "ARMProcFamily", "AppleA14",
350                                     "Apple A14", [
351                                     FeatureAggressiveFMA,
352                                     FeatureAlternateSExtLoadCVTF32Pattern,
353                                     FeatureArithmeticBccFusion,
354                                     FeatureArithmeticCbzFusion,
355                                     FeatureDisableLatencySchedHeuristic,
356                                     FeatureFuseAddress,
357                                     FeatureFuseAES,
358                                     FeatureFuseArithmeticLogic,
359                                     FeatureFuseCCSelect,
360                                     FeatureFuseCryptoEOR,
361                                     FeatureFuseLiterals,
362                                     FeatureStorePairSuppress,
363                                     FeatureZCRegMove,
364                                     FeatureZCZeroing]>;
366 def TuneAppleA15 : SubtargetFeature<"apple-a15", "ARMProcFamily", "AppleA15",
367                                     "Apple A15", [
368                                     FeatureAlternateSExtLoadCVTF32Pattern,
369                                     FeatureArithmeticBccFusion,
370                                     FeatureArithmeticCbzFusion,
371                                     FeatureDisableLatencySchedHeuristic,
372                                     FeatureFuseAddress,
373                                     FeatureFuseAdrpAdd,
374                                     FeatureFuseAES,
375                                     FeatureFuseArithmeticLogic,
376                                     FeatureFuseCCSelect,
377                                     FeatureFuseCryptoEOR,
378                                     FeatureFuseLiterals,
379                                     FeatureStorePairSuppress,
380                                     FeatureZCRegMove,
381                                     FeatureZCZeroing]>;
383 def TuneAppleA16 : SubtargetFeature<"apple-a16", "ARMProcFamily", "AppleA16",
384                                     "Apple A16", [
385                                     FeatureAlternateSExtLoadCVTF32Pattern,
386                                     FeatureArithmeticBccFusion,
387                                     FeatureArithmeticCbzFusion,
388                                     FeatureDisableLatencySchedHeuristic,
389                                     FeatureFuseAddress,
390                                     FeatureFuseAdrpAdd,
391                                     FeatureFuseAES,
392                                     FeatureFuseArithmeticLogic,
393                                     FeatureFuseCCSelect,
394                                     FeatureFuseCryptoEOR,
395                                     FeatureFuseLiterals,
396                                     FeatureStorePairSuppress,
397                                     FeatureZCRegMove,
398                                     FeatureZCZeroing]>;
400 def TuneAppleA17 : SubtargetFeature<"apple-a17", "ARMProcFamily", "AppleA17",
401                                     "Apple A17", [
402                                     FeatureAlternateSExtLoadCVTF32Pattern,
403                                     FeatureArithmeticBccFusion,
404                                     FeatureArithmeticCbzFusion,
405                                     FeatureDisableLatencySchedHeuristic,
406                                     FeatureFuseAddress,
407                                     FeatureFuseAdrpAdd,
408                                     FeatureFuseAES,
409                                     FeatureFuseArithmeticLogic,
410                                     FeatureFuseCCSelect,
411                                     FeatureFuseCryptoEOR,
412                                     FeatureFuseLiterals,
413                                     FeatureStorePairSuppress,
414                                     FeatureZCRegMove,
415                                     FeatureZCZeroing]>;
417 def TuneAppleM4 : SubtargetFeature<"apple-m4", "ARMProcFamily", "AppleM4",
418                                      "Apple M4", [
419                                      FeatureAlternateSExtLoadCVTF32Pattern,
420                                      FeatureArithmeticBccFusion,
421                                      FeatureArithmeticCbzFusion,
422                                      FeatureDisableLatencySchedHeuristic,
423                                      FeatureFuseAddress,
424                                      FeatureFuseAdrpAdd,
425                                      FeatureFuseAES,
426                                      FeatureFuseArithmeticLogic,
427                                      FeatureFuseCCSelect,
428                                      FeatureFuseCryptoEOR,
429                                      FeatureFuseLiterals,
430                                      FeatureZCRegMove,
431                                      FeatureZCZeroing
432                                      ]>;
434 def TuneExynosM3 : SubtargetFeature<"exynosm3", "ARMProcFamily", "ExynosM3",
435                                     "Samsung Exynos-M3 processors",
436                                     [FeatureExynosCheapAsMoveHandling,
437                                      FeatureForce32BitJumpTables,
438                                      FeatureFuseAddress,
439                                      FeatureFuseAES,
440                                      FeatureFuseCCSelect,
441                                      FeatureFuseAdrpAdd,
442                                      FeatureFuseLiterals,
443                                      FeatureStorePairSuppress,
444                                      FeatureALULSLFast,
445                                      FeaturePostRAScheduler,
446                                      FeaturePredictableSelectIsExpensive]>;
448 // Re-uses some scheduling and tunings from the ExynosM3 proc family.
449 def TuneExynosM4 : SubtargetFeature<"exynosm4", "ARMProcFamily", "ExynosM3",
450                                     "Samsung Exynos-M4 processors",
451                                     [FeatureArithmeticBccFusion,
452                                      FeatureArithmeticCbzFusion,
453                                      FeatureExynosCheapAsMoveHandling,
454                                      FeatureForce32BitJumpTables,
455                                      FeatureFuseAddress,
456                                      FeatureFuseAES,
457                                      FeatureFuseArithmeticLogic,
458                                      FeatureFuseCCSelect,
459                                      FeatureFuseAdrpAdd,
460                                      FeatureFuseLiterals,
461                                      FeatureStorePairSuppress,
462                                      FeatureALULSLFast,
463                                      FeaturePostRAScheduler,
464                                      FeatureZCZeroing]>;
466 def TuneKryo    : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
467                                    "Qualcomm Kryo processors", [
468                                    FeaturePostRAScheduler,
469                                    FeaturePredictableSelectIsExpensive,
470                                    FeatureZCZeroing,
471                                    FeatureALULSLFast,
472                                    FeatureStorePairSuppress]>;
474 def TuneFalkor  : SubtargetFeature<"falkor", "ARMProcFamily", "Falkor",
475                                    "Qualcomm Falkor processors", [
476                                    FeaturePostRAScheduler,
477                                    FeaturePredictableSelectIsExpensive,
478                                    FeatureZCZeroing,
479                                    FeatureStorePairSuppress,
480                                    FeatureALULSLFast,
481                                    FeatureSlowSTRQro]>;
483 def TuneNeoverseE1 : SubtargetFeature<"neoversee1", "ARMProcFamily", "NeoverseE1",
484                                       "Neoverse E1 ARM processors", [
485                                       FeatureFuseAES,
486                                       FeatureFuseAdrpAdd,
487                                       FeaturePostRAScheduler]>;
489 def TuneNeoverseN1 : SubtargetFeature<"neoversen1", "ARMProcFamily", "NeoverseN1",
490                                       "Neoverse N1 ARM processors", [
491                                       FeatureFuseAES,
492                                       FeatureFuseAdrpAdd,
493                                       FeatureAddrLSLSlow14,
494                                       FeatureALULSLFast,
495                                       FeaturePostRAScheduler,
496                                       FeatureEnableSelectOptimize,
497                                       FeaturePredictableSelectIsExpensive]>;
499 def TuneNeoverseN2 : SubtargetFeature<"neoversen2", "ARMProcFamily", "NeoverseN2",
500                                       "Neoverse N2 ARM processors", [
501                                       FeatureFuseAES,
502                                       FeatureFuseAdrpAdd,
503                                       FeatureALULSLFast,
504                                       FeaturePostRAScheduler,
505                                       FeatureEnableSelectOptimize,
506                                       FeaturePredictableSelectIsExpensive]>;
508 def TuneNeoverseN3 : SubtargetFeature<"neoversen3", "ARMProcFamily", "NeoverseN3",
509                                       "Neoverse N3 ARM processors", [
510                                       FeatureFuseAES,
511                                       FeaturePostRAScheduler,
512                                       FeatureALULSLFast,
513                                       FeatureFuseAdrpAdd,
514                                       FeatureEnableSelectOptimize,
515                                       FeaturePredictableSelectIsExpensive]>;
517 def TuneNeoverse512TVB : SubtargetFeature<"neoverse512tvb", "ARMProcFamily", "Neoverse512TVB",
518                                       "Neoverse 512-TVB ARM processors", [
519                                       FeatureFuseAES,
520                                       FeatureFuseAdrpAdd,
521                                       FeatureALULSLFast,
522                                       FeaturePostRAScheduler,
523                                       FeatureEnableSelectOptimize,
524                                       FeaturePredictableSelectIsExpensive]>;
526 def TuneNeoverseV1 : SubtargetFeature<"neoversev1", "ARMProcFamily", "NeoverseV1",
527                                       "Neoverse V1 ARM processors", [
528                                       FeatureFuseAES,
529                                       FeatureFuseAdrpAdd,
530                                       FeatureAddrLSLSlow14,
531                                       FeatureALULSLFast,
532                                       FeaturePostRAScheduler,
533                                       FeatureEnableSelectOptimize,
534                                       FeaturePredictableSelectIsExpensive,
535                                       FeatureNoSVEFPLD1R]>;
537 def TuneNeoverseV2 : SubtargetFeature<"neoversev2", "ARMProcFamily", "NeoverseV2",
538                                       "Neoverse V2 ARM processors", [
539                                       FeatureFuseAES,
540                                       FeatureCmpBccFusion,
541                                       FeatureFuseAdrpAdd,
542                                       FeatureALULSLFast,
543                                       FeaturePostRAScheduler,
544                                       FeatureEnableSelectOptimize,
545                                       FeatureUseFixedOverScalableIfEqualCost,
546                                       FeatureAvoidLDAPUR,
547                                       FeaturePredictableSelectIsExpensive]>;
549 def TuneNeoverseV3 : SubtargetFeature<"neoversev3", "ARMProcFamily", "NeoverseV3",
550                                       "Neoverse V3 ARM processors", [
551                                       FeatureFuseAES,
552                                       FeatureALULSLFast,
553                                       FeatureFuseAdrpAdd,
554                                       FeaturePostRAScheduler,
555                                       FeatureEnableSelectOptimize,
556                                       FeatureAvoidLDAPUR,
557                                       FeaturePredictableSelectIsExpensive]>;
559 def TuneNeoverseV3AE : SubtargetFeature<"neoversev3AE", "ARMProcFamily", "NeoverseV3",
560                                       "Neoverse V3AE ARM processors", [
561                                       FeatureFuseAES,
562                                       FeatureALULSLFast,
563                                       FeatureFuseAdrpAdd,
564                                       FeaturePostRAScheduler,
565                                       FeatureEnableSelectOptimize,
566                                       FeatureAvoidLDAPUR,
567                                       FeaturePredictableSelectIsExpensive]>;
569 def TuneSaphira  : SubtargetFeature<"saphira", "ARMProcFamily", "Saphira",
570                                    "Qualcomm Saphira processors", [
571                                    FeaturePostRAScheduler,
572                                    FeaturePredictableSelectIsExpensive,
573                                    FeatureZCZeroing,
574                                    FeatureStorePairSuppress,
575                                    FeatureALULSLFast]>;
577 def TuneThunderX2T99  : SubtargetFeature<"thunderx2t99", "ARMProcFamily", "ThunderX2T99",
578                                          "Cavium ThunderX2 processors", [
579                                           FeatureAggressiveFMA,
580                                           FeatureArithmeticBccFusion,
581                                           FeaturePostRAScheduler,
582                                           FeatureStorePairSuppress,
583                                           FeaturePredictableSelectIsExpensive]>;
585 def TuneThunderX3T110  : SubtargetFeature<"thunderx3t110", "ARMProcFamily",
586                                           "ThunderX3T110",
587                                           "Marvell ThunderX3 processors", [
588                                            FeatureAggressiveFMA,
589                                            FeatureArithmeticBccFusion,
590                                            FeaturePostRAScheduler,
591                                            FeaturePredictableSelectIsExpensive,
592                                            FeatureBalanceFPOps,
593                                            FeatureStorePairSuppress,
594                                            FeatureStrictAlign]>;
596 def TuneThunderX : SubtargetFeature<"thunderx", "ARMProcFamily", "ThunderX",
597                                     "Cavium ThunderX processors", [
598                                     FeaturePostRAScheduler,
599                                     FeatureStorePairSuppress,
600                                     FeaturePredictableSelectIsExpensive]>;
602 def TuneThunderXT88 : SubtargetFeature<"thunderxt88", "ARMProcFamily",
603                                        "ThunderXT88",
604                                        "Cavium ThunderX processors", [
605                                        FeaturePostRAScheduler,
606                                        FeatureStorePairSuppress,
607                                        FeaturePredictableSelectIsExpensive]>;
609 def TuneThunderXT81 : SubtargetFeature<"thunderxt81", "ARMProcFamily",
610                                        "ThunderXT81",
611                                        "Cavium ThunderX processors", [
612                                        FeaturePostRAScheduler,
613                                        FeatureStorePairSuppress,
614                                        FeaturePredictableSelectIsExpensive]>;
616 def TuneThunderXT83 : SubtargetFeature<"thunderxt83", "ARMProcFamily",
617                                        "ThunderXT83",
618                                        "Cavium ThunderX processors", [
619                                        FeaturePostRAScheduler,
620                                        FeatureStorePairSuppress,
621                                        FeaturePredictableSelectIsExpensive]>;
623 def TuneTSV110 : SubtargetFeature<"tsv110", "ARMProcFamily", "TSV110",
624                                   "HiSilicon TS-V110 processors", [
625                                   FeatureFuseAES,
626                                   FeatureStorePairSuppress,
627                                   FeaturePostRAScheduler]>;
629 def TuneAmpere1 : SubtargetFeature<"ampere1", "ARMProcFamily", "Ampere1",
630                                    "Ampere Computing Ampere-1 processors", [
631                                    FeaturePostRAScheduler,
632                                    FeatureFuseAES,
633                                    FeatureFuseAdrpAdd,
634                                    FeatureALULSLFast,
635                                    FeatureAggressiveFMA,
636                                    FeatureArithmeticBccFusion,
637                                    FeatureCmpBccFusion,
638                                    FeatureFuseAddress,
639                                    FeatureFuseLiterals,
640                                    FeatureStorePairSuppress,
641                                    FeatureLdpAlignedOnly,
642                                    FeatureStpAlignedOnly]>;
644 def TuneAmpere1A : SubtargetFeature<"ampere1a", "ARMProcFamily", "Ampere1A",
645                                     "Ampere Computing Ampere-1A processors", [
646                                     FeaturePostRAScheduler,
647                                     FeatureFuseAES,
648                                     FeatureFuseAdrpAdd,
649                                     FeatureALULSLFast,
650                                     FeatureAggressiveFMA,
651                                     FeatureArithmeticBccFusion,
652                                     FeatureCmpBccFusion,
653                                     FeatureFuseAddress,
654                                     FeatureFuseLiterals,
655                                     FeatureFuseAddSub2RegAndConstOne,
656                                     FeatureStorePairSuppress,
657                                     FeatureLdpAlignedOnly,
658                                     FeatureStpAlignedOnly]>;
660 def TuneAmpere1B : SubtargetFeature<"ampere1b", "ARMProcFamily", "Ampere1B",
661                                     "Ampere Computing Ampere-1B processors", [
662                                     FeaturePostRAScheduler,
663                                     FeatureFuseAES,
664                                     FeatureFuseAdrpAdd,
665                                     FeatureALULSLFast,
666                                     FeatureAggressiveFMA,
667                                     FeatureArithmeticBccFusion,
668                                     FeatureCmpBccFusion,
669                                     FeatureFuseAddress,
670                                     FeatureFuseLiterals,
671                                     FeatureStorePairSuppress,
672                                     FeatureEnableSelectOptimize,
673                                     FeaturePredictableSelectIsExpensive,
674                                     FeatureLdpAlignedOnly,
675                                     FeatureStpAlignedOnly]>;
677 def TuneOryon  : SubtargetFeature<"oryon-1", "ARMProcFamily",
678                                     "Oryon",
679                                     "Nuvia Inc Oryon processors", [
680                                     FeatureSHA2,
681                                     FeatureAES,
682                                     FeatureFPARMv8,
683                                     FeatureNEON,
684                                     FeatureFuseAES,
685                                     FeatureFuseAdrpAdd,
686                                     FeatureEnableSelectOptimize,
687                                     FeatureFuseCryptoEOR,
688                                     FeatureFuseAddress,
689                                     FeatureSM4,
690                                     FeatureSHA2,
691                                     FeatureSHA3,
692                                     FeatureAES,
693                                     FeatureFullFP16,
694                                     FeatureFP16FML,
695                                     FeaturePerfMon,
696                                     FeatureSPE,
697                                     FeaturePostRAScheduler,
698                                     HasV8_6aOps]>;
700 def ProcessorFeatures {
701   list<SubtargetFeature> A53  = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
702                                  FeatureFPARMv8, FeatureNEON, FeaturePerfMon];
703   list<SubtargetFeature> A55  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
704                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
705                                  FeatureRCPC, FeaturePerfMon, FeatureCRC,
706                                  FeatureLSE, FeatureRAS, FeatureRDM];
707   list<SubtargetFeature> A510 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
708                                  FeatureMatMulInt8, FeatureBF16, FeatureAM,
709                                  FeatureMTE, FeatureETE, FeatureSVEBitPerm,
710                                  FeatureFP16FML,
711                                  FeatureCCIDX,
712                                  FeatureSB, FeaturePAuth, FeatureSSBS, FeatureSVE, FeatureSVE2,
713                                  FeatureComplxNum, FeatureCRC, FeatureDotProd,
714                                  FeatureFPARMv8,FeatureFullFP16, FeatureJS, FeatureLSE,
715                                  FeatureRAS, FeatureRCPC, FeatureRDM];
716   list<SubtargetFeature> A520 = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
717                                  FeatureMTE, FeatureETE, FeatureSVEBitPerm,
718                                  FeatureFP16FML,
719                                  FeatureCCIDX,
720                                  FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
721                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
722                                  FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
723                                  FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
724                                  FeatureDotProd];
725   list<SubtargetFeature> A520AE = [HasV9_2aOps, FeaturePerfMon, FeatureAM,
726                                  FeatureMTE, FeatureETE, FeatureSVEBitPerm,
727                                  FeatureFP16FML,
728                                  FeatureCCIDX,
729                                  FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
730                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
731                                  FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS,
732                                  FeatureNEON, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
733                                  FeatureDotProd];
734   list<SubtargetFeature> A65  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
735                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
736                                  FeatureRCPC, FeatureSSBS, FeatureRAS,
737                                  FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRDM];
738   list<SubtargetFeature> A76  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
739                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
740                                  FeatureRCPC, FeatureSSBS, FeaturePerfMon,
741                                  FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
742   list<SubtargetFeature> A77  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
743                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
744                                  FeatureRCPC, FeaturePerfMon, FeatureSSBS,
745                                  FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
746   list<SubtargetFeature> A78  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
747                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
748                                  FeatureRCPC, FeaturePerfMon, FeatureSPE,
749                                  FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
750   list<SubtargetFeature> A78AE = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
751                                   FeatureNEON, FeatureFullFP16, FeatureDotProd,
752                                   FeatureRCPC, FeaturePerfMon, FeatureSPE,
753                                   FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
754   list<SubtargetFeature> A78C = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
755                                  FeatureNEON, FeatureFullFP16, FeatureDotProd,
756                                  FeatureFlagM, FeaturePAuth,
757                                  FeaturePerfMon, FeatureRCPC, FeatureSPE,
758                                  FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
759   list<SubtargetFeature> A710 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
760                                  FeatureCCIDX, FeatureSSBS,
761                                  FeatureETE, FeatureMTE, FeatureFP16FML,
762                                  FeatureSVEBitPerm, FeatureBF16, FeatureMatMulInt8,
763                                  FeaturePAuth, FeatureFlagM, FeatureSB, FeatureSVE, FeatureSVE2,
764                                  FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8,
765                                  FeatureFullFP16, FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
766   list<SubtargetFeature> A715 = [HasV9_0aOps, FeatureNEON, FeatureMTE,
767                                  FeatureCCIDX,
768                                  FeatureFP16FML, FeatureSVE, FeatureTRBE,
769                                  FeatureSVEBitPerm, FeatureBF16, FeatureETE,
770                                  FeaturePerfMon, FeatureMatMulInt8, FeatureSPE,
771                                  FeatureSB, FeatureSSBS, FeatureFullFP16, FeaturePAuth, FeaturePredRes, FeatureFlagM,
772                                  FeatureSVE2, FeatureComplxNum, FeatureCRC,
773                                  FeatureDotProd, FeatureFPARMv8,
774                                  FeatureJS, FeatureLSE, FeatureRAS,
775                                  FeatureRCPC, FeatureRDM];
776   list<SubtargetFeature> A720 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
777                                  FeatureCCIDX,
778                                  FeatureTRBE, FeatureSVEBitPerm, FeatureETE,
779                                  FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
780                                  FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
781                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
782                                  FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
783                                  FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
784                                  FeatureRCPC, FeatureRDM];
785   list<SubtargetFeature> A720AE = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
786                                  FeatureCCIDX,
787                                  FeatureTRBE, FeatureSVEBitPerm, FeatureETE,
788                                  FeaturePerfMon, FeatureSPE, FeatureSPE_EEF,
789                                  FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
790                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
791                                  FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
792                                  FeatureJS, FeatureLSE, FeatureNEON, FeatureRAS,
793                                  FeatureRCPC, FeatureRDM];
794   list<SubtargetFeature> A725 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
795                                  FeatureCCIDX,
796                                  FeatureETE, FeaturePerfMon, FeatureSPE,
797                                  FeatureSVEBitPerm, FeatureSPE_EEF, FeatureTRBE,
798                                  FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
799                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
800                                  FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
801                                  FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
802                                  FeatureRCPC, FeatureRDM];
803   list<SubtargetFeature> R82  = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
804                                  FeatureFP16FML, FeatureSSBS, FeaturePredRes,
805                                  FeatureSB, FeatureRDM, FeatureDotProd,
806                                  FeatureComplxNum, FeatureJS,
807                                  FeatureCacheDeepPersist,
808                                  FeatureFlagM, FeatureCRC, FeatureLSE, FeatureRAS, FeatureFPARMv8,
809                                  FeatureNEON, FeaturePAuth, FeatureRCPC];
810   list<SubtargetFeature> R82AE = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
811                                   FeatureFP16FML, FeatureSSBS, FeaturePredRes,
812                                   FeatureSB, FeatureRDM, FeatureDotProd,
813                                   FeatureComplxNum, FeatureJS,
814                                   FeatureCacheDeepPersist,
815                                   FeatureLSE, FeatureFlagM, FeatureCRC, FeatureFPARMv8, FeatureNEON,
816                                   FeaturePAuth, FeatureRAS, FeatureRCPC];
817   list<SubtargetFeature> X1   = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
818                                  FeatureNEON, FeatureRCPC, FeaturePerfMon,
819                                  FeatureSPE, FeatureFullFP16, FeatureDotProd,
820                                  FeatureSSBS, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
821   list<SubtargetFeature> X1C  = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
822                                  FeatureNEON, FeatureRCPC_IMMO, FeaturePerfMon,
823                                  FeatureSPE, FeatureFullFP16, FeatureDotProd,
824                                  FeaturePAuth, FeatureSSBS, FeatureFlagM,
825                                  FeatureLSE2,
826                                  FeatureRCPC, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
827   list<SubtargetFeature> X2   = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
828                                  FeatureMatMulInt8, FeatureBF16, FeatureAM,
829                                  FeatureMTE, FeatureETE, FeatureSVEBitPerm,
830                                  FeatureFP16FML,
831                                  FeatureCCIDX,
832                                  FeaturePAuth, FeatureSSBS, FeatureSB, FeatureSVE, FeatureSVE2, FeatureFlagM,
833                                  FeatureComplxNum, FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureFullFP16,
834                                  FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
835   list<SubtargetFeature> X3 =   [HasV9_0aOps, FeatureSVE, FeatureNEON,
836                                  FeaturePerfMon, FeatureETE, FeatureTRBE,
837                                  FeatureSPE, FeatureBF16, FeatureMatMulInt8,
838                                  FeatureMTE, FeatureSVEBitPerm, FeatureFullFP16,
839                                  FeatureFP16FML,
840                                  FeatureCCIDX,
841                                  FeatureSB, FeaturePAuth, FeaturePredRes, FeatureFlagM, FeatureSSBS,
842                                  FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS,
843                                  FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
844   list<SubtargetFeature> X4 =   [HasV9_2aOps,
845                                  FeaturePerfMon, FeatureETE, FeatureTRBE,
846                                  FeatureSPE, FeatureMTE, FeatureSVEBitPerm,
847                                  FeatureFP16FML, FeatureSPE_EEF,
848                                  FeatureCCIDX,
849                                  FeatureSB, FeatureSSBS, FeaturePAuth, FeatureFlagM, FeaturePredRes,
850                                  FeatureSVE, FeatureSVE2, FeatureComplxNum, FeatureCRC, FeatureDotProd,
851                                  FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8, FeatureJS, FeatureLSE,
852                                  FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureBF16];
853   list<SubtargetFeature> X925 = [HasV9_2aOps, FeatureMTE, FeatureFP16FML,
854                                  FeatureCCIDX,
855                                  FeatureETE, FeaturePerfMon, FeatureSPE,
856                                  FeatureSVEBitPerm, FeatureSPE_EEF, FeatureTRBE,
857                                  FeatureFlagM, FeaturePredRes, FeatureSB, FeatureSSBS,
858                                  FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
859                                  FeatureDotProd, FeatureFPARMv8, FeatureFullFP16, FeatureMatMulInt8,
860                                  FeatureJS, FeatureLSE, FeatureNEON, FeaturePAuth, FeatureRAS,
861                                  FeatureRCPC, FeatureRDM];
862   list<SubtargetFeature> A64FX    = [HasV8_2aOps, FeatureFPARMv8, FeatureNEON,
863                                      FeatureSHA2, FeaturePerfMon, FeatureFullFP16,
864                                      FeatureSVE, FeatureComplxNum,
865                                      FeatureAES, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
866   list<SubtargetFeature> MONAKA = [HasV9_3aOps, FeaturePerfMon, FeatureCCIDX,
867                                    FeatureFPAC, FeatureFP16FML, FeatureRandGen,
868                                    FeatureSSBS, FeatureLS64, FeatureCLRBHB,
869                                    FeatureSPECRES2, FeatureSVEAES, FeatureSVE2SM4,
870                                    FeatureSVE2SHA3, FeatureSVE2, FeatureSVEBitPerm, FeatureETE,
871                                    FeatureMEC, FeatureFP8DOT2];
872   list<SubtargetFeature> Carmel   = [HasV8_2aOps, FeatureNEON, FeatureSHA2, FeatureAES,
873                                      FeatureFullFP16, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM,
874                                      FeatureFPARMv8];
875   list<SubtargetFeature> AppleA7  = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
876                                      FeatureNEON,FeaturePerfMon];
877   list<SubtargetFeature> AppleA10 = [HasV8_0aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
878                                      FeatureNEON, FeaturePerfMon, FeatureCRC,
879                                      FeatureRDM, FeaturePAN, FeatureLOR, FeatureVH];
880   list<SubtargetFeature> AppleA11 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
881                                      FeatureNEON, FeaturePerfMon, FeatureFullFP16, FeatureCRC,
882                                      FeatureLSE, FeatureRAS, FeatureRDM];
883   list<SubtargetFeature> AppleA12 = [HasV8_3aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
884                                      FeatureNEON, FeaturePerfMon, FeatureFullFP16,
885                                      FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
886                                      FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
887   list<SubtargetFeature> AppleA13 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
888                                      FeatureNEON, FeaturePerfMon, FeatureFullFP16,
889                                      FeatureFP16FML, FeatureSHA3, FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
890                                      FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureDotProd];
891   list<SubtargetFeature> AppleA14 = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
892                                      FeatureNEON, FeaturePerfMon,
893                                      FeatureFullFP16, FeatureFP16FML, FeatureSHA3,
894                                      // ArmV8.5-a extensions, excluding BTI:
895                                      FeatureAltFPCmp, FeatureFRInt3264,
896                                      FeatureSpecRestrict, FeatureSSBS, FeatureSB,
897                                      FeaturePredRes, FeatureCacheDeepPersist,
898                                      FeatureComplxNum, FeatureCRC, FeatureJS, FeatureLSE,
899                                      FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM,
900                                      FeatureDotProd];
901   list<SubtargetFeature> AppleA15 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
902                                      FeatureNEON, FeaturePerfMon, FeatureSHA3,
903                                      FeatureFullFP16, FeatureFP16FML,
904                                      FeatureComplxNum, FeatureCRC, FeatureJS,
905                                      FeatureLSE, FeaturePAuth, FeatureFPAC,
906                                      FeatureRAS, FeatureRCPC, FeatureRDM,
907                                      FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
908   list<SubtargetFeature> AppleA16 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
909                                      FeatureNEON, FeaturePerfMon, FeatureSHA3,
910                                      FeatureFullFP16, FeatureFP16FML,
911                                      FeatureHCX,
912                                      FeatureComplxNum, FeatureCRC, FeatureJS,
913                                      FeatureLSE, FeaturePAuth, FeatureFPAC,
914                                      FeatureRAS, FeatureRCPC, FeatureRDM,
915                                      FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
916   list<SubtargetFeature> AppleA17 = [HasV8_6aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
917                                      FeatureNEON, FeaturePerfMon, FeatureSHA3,
918                                      FeatureFullFP16, FeatureFP16FML,
919                                      FeatureHCX,
920                                      FeatureComplxNum, FeatureCRC, FeatureJS,
921                                      FeatureLSE, FeaturePAuth, FeatureFPAC,
922                                      FeatureRAS, FeatureRCPC, FeatureRDM,
923                                      FeatureBF16, FeatureDotProd, FeatureMatMulInt8, FeatureSSBS];
924   // Technically apple-m4 is v9.2a, but we can't use that here.
925   // Historically, llvm defined v9.0a as requiring SVE, but it's optional
926   // according to the Arm ARM, and not supported by the core.  We decoupled the
927   // two in the clang driver and in the backend subtarget features, but it's
928   // still an issue in the clang frontend.  v8.7a is the next closest choice.
929   list<SubtargetFeature> AppleM4 = [HasV8_7aOps, FeatureSHA2, FeatureFPARMv8,
930                                     FeatureNEON, FeaturePerfMon, FeatureSHA3,
931                                     FeatureFullFP16, FeatureFP16FML,
932                                     FeatureAES, FeatureBF16,
933                                     FeatureSME, FeatureSME2,
934                                     FeatureSMEF64F64, FeatureSMEI16I64,
935                                     FeatureComplxNum, FeatureCRC, FeatureJS,
936                                     FeatureLSE, FeaturePAuth, FeatureFPAC,
937                                     FeatureRAS, FeatureRCPC, FeatureRDM,
938                                     FeatureDotProd, FeatureMatMulInt8];
939   list<SubtargetFeature> ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
940                                      FeaturePerfMon, FeatureNEON, FeatureFPARMv8];
941   list<SubtargetFeature> ExynosM4 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
942                                      FeatureFullFP16, FeaturePerfMon, FeatureCRC, FeatureFPARMv8,
943                                      FeatureLSE, FeatureNEON, FeatureRAS, FeatureRDM];
944   list<SubtargetFeature> Falkor   = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
945                                      FeatureFPARMv8, FeatureNEON, FeaturePerfMon,
946                                      FeatureRDM];
947   list<SubtargetFeature> NeoverseE1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
948                                        FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
949                                        FeatureRCPC, FeatureSSBS, FeaturePerfMon, FeatureCRC,
950                                        FeatureLSE, FeatureRAS, FeatureRDM];
951   list<SubtargetFeature> NeoverseN1 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureDotProd,
952                                        FeatureFPARMv8, FeatureFullFP16, FeatureNEON,
953                                        FeatureRCPC, FeatureSPE, FeatureSSBS,
954                                        FeaturePerfMon, FeatureCRC, FeatureLSE, FeatureRAS, FeatureRDM];
955   list<SubtargetFeature> NeoverseN2 = [HasV9_0aOps, FeatureBF16, FeatureETE, FeatureFP16FML,
956                                        FeatureMatMulInt8, FeatureMTE, FeatureSVE2,
957                                        FeatureSVEBitPerm, FeatureTRBE,
958                                        FeaturePerfMon,
959                                        FeatureCCIDX,
960                                        FeatureDotProd, FeatureFullFP16, FeatureSB, FeatureSSBS, FeatureSVE,
961                                        FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
962                                        FeatureNEON, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
963   list<SubtargetFeature> NeoverseN3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
964                                       FeatureFullFP16, FeatureMTE, FeaturePerfMon,
965                                       FeatureRandGen, FeatureSPE, FeatureSPE_EEF,
966                                       FeatureSVEBitPerm,
967                                       FeatureCCIDX,
968                                       FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
969                                       FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum,
970                                       FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
971                                       FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM,
972                                       FeatureNEON];
973   list<SubtargetFeature> Neoverse512TVB = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
974                                            FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
975                                            FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
976                                            FeaturePerfMon, FeatureRandGen, FeatureSPE,
977                                            FeatureSSBS, FeatureSVE,
978                                            FeatureCCIDX,
979                                            FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
980                                            FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
981                                            FeatureRCPC, FeatureRDM];
982   list<SubtargetFeature> NeoverseV1 = [HasV8_4aOps, FeatureBF16, FeatureCacheDeepPersist,
983                                        FeatureSHA2, FeatureAES, FeatureFPARMv8, FeatureFP16FML,
984                                        FeatureFullFP16, FeatureMatMulInt8, FeatureNEON,
985                                        FeaturePerfMon, FeatureRandGen, FeatureSPE,
986                                        FeatureSSBS, FeatureSVE,
987                                        FeatureCCIDX,
988                                        FeatureSHA3, FeatureSM4, FeatureDotProd, FeatureComplxNum,
989                                        FeatureCRC, FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS,
990                                        FeatureRCPC, FeatureRDM];
991   list<SubtargetFeature> NeoverseV2 = [HasV9_0aOps, FeatureBF16, FeatureSPE,
992                                        FeaturePerfMon, FeatureETE, FeatureMatMulInt8,
993                                        FeatureNEON, FeatureSVEBitPerm, FeatureFP16FML,
994                                        FeatureMTE, FeatureRandGen,
995                                        FeatureCCIDX,
996                                        FeatureSVE, FeatureSVE2, FeatureSSBS, FeatureFullFP16, FeatureDotProd,
997                                        FeatureComplxNum, FeatureCRC, FeatureFPARMv8, FeatureJS, FeatureLSE,
998                                        FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
999   list<SubtargetFeature> NeoverseV3 = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
1000                                       FeatureFullFP16, FeatureLS64, FeatureMTE,
1001                                       FeaturePerfMon, FeatureRandGen, FeatureSPE,
1002                                       FeatureCCIDX,
1003                                       FeatureSPE_EEF, FeatureSVEBitPerm, FeatureBRBE,
1004                                       FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
1005                                       FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
1006                                       FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS, FeatureLSE,
1007                                       FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM, FeatureRME];
1008   list<SubtargetFeature> NeoverseV3AE = [HasV9_2aOps, FeatureETE, FeatureFP16FML,
1009                                       FeatureFullFP16, FeatureLS64, FeatureMTE,
1010                                       FeaturePerfMon, FeatureRandGen, FeatureSPE,
1011                                       FeatureSPE_EEF, FeatureSVEBitPerm, FeatureBRBE,
1012                                       FeatureSSBS, FeatureSB, FeaturePredRes, FeaturePAuth, FeatureFlagM,
1013                                       FeatureCCIDX,
1014                                       FeatureSVE, FeatureSVE2, FeatureBF16, FeatureComplxNum, FeatureCRC,
1015                                       FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
1016                                       FeatureLSE, FeatureNEON, FeatureRAS, FeatureRCPC, FeatureRDM,
1017                                       FeatureRME];
1018   list<SubtargetFeature> Saphira    = [HasV8_4aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
1019                                        FeatureNEON, FeatureSPE, FeaturePerfMon, FeatureCRC,
1020                                        FeatureCCIDX,
1021                                        FeatureLSE, FeatureRDM, FeatureRAS, FeatureRCPC];
1022   list<SubtargetFeature> ThunderX   = [HasV8_0aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1023                                        FeatureFPARMv8, FeaturePerfMon, FeatureNEON];
1024   list<SubtargetFeature> ThunderX2T99  = [HasV8_1aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1025                                           FeatureFPARMv8, FeatureNEON, FeatureLSE,
1026                                           FeatureRDM];
1027   list<SubtargetFeature> ThunderX3T110 = [HasV8_3aOps, FeatureCRC, FeatureSHA2, FeatureAES,
1028                                           FeatureFPARMv8, FeatureNEON, FeatureLSE,
1029                                           FeatureCCIDX,
1030                                           FeaturePAuth, FeaturePerfMon, FeatureComplxNum,
1031                                           FeatureJS, FeatureRAS, FeatureRCPC, FeatureRDM];
1032   list<SubtargetFeature> TSV110 = [HasV8_2aOps, FeatureSHA2, FeatureAES, FeatureFPARMv8,
1033                                    FeatureNEON, FeaturePerfMon, FeatureSPE,
1034                                    FeatureFullFP16, FeatureFP16FML, FeatureDotProd,
1035                                    FeatureJS, FeatureComplxNum, FeatureCRC, FeatureLSE,
1036                                    FeatureRAS, FeatureRDM];
1037   list<SubtargetFeature> Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1038                                     FeatureSSBS, FeatureRandGen, FeatureSB,
1039                                     FeatureSHA2, FeatureSHA3, FeatureAES,
1040                                     FeatureFullFP16, FeatureBF16, FeatureComplxNum, FeatureCRC,
1041                                     FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8, FeatureJS,
1042                                     FeatureCCIDX,
1043                                     FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC, FeatureRDM];
1044   list<SubtargetFeature> Ampere1A = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1045                                      FeatureMTE, FeatureSSBS, FeatureRandGen,
1046                                      FeatureSB, FeatureSM4, FeatureSHA2,
1047                                      FeatureSHA3, FeatureAES,
1048                                      FeatureFullFP16, FeatureBF16, FeatureComplxNum,
1049                                      FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1050                                      FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
1051                                      FeatureCCIDX,
1052                                      FeatureRDM];
1053   list<SubtargetFeature> Ampere1B = [HasV8_7aOps, FeatureNEON, FeaturePerfMon,
1054                                      FeatureMTE, FeatureSSBS, FeatureRandGen,
1055                                      FeatureSB, FeatureSM4, FeatureSHA2,
1056                                      FeatureSHA3, FeatureAES, FeatureCSSC,
1057                                      FeatureWFxT, FeatureFullFP16, FeatureBF16, FeatureComplxNum,
1058                                      FeatureCRC, FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1059                                      FeatureJS, FeatureLSE, FeaturePAuth, FeatureRAS, FeatureRCPC,
1060                                      FeatureCCIDX,
1061                                      FeatureRDM];
1063   list<SubtargetFeature> Oryon = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1064                                      FeatureRandGen,
1065                                      FeaturePAuth, FeatureSM4, FeatureSHA2,
1066                                      FeatureSHA3, FeatureAES,
1067                                      FeatureSPE, FeatureBF16, FeatureComplxNum, FeatureCRC,
1068                                      FeatureDotProd, FeatureFPARMv8, FeatureMatMulInt8,
1069                                      FeatureSSBS, FeatureCCIDX,
1070                                      FeatureJS, FeatureLSE, FeatureRAS, FeatureRCPC, FeatureRDM];
1072   // ETE and TRBE are future architecture extensions. We temporarily enable them
1073   // by default for users targeting generic AArch64. The extensions do not
1074   // affect code generated by the compiler and can be used only by explicitly
1075   // mentioning the new system register names in assembly.
1076   list<SubtargetFeature> Generic = [FeatureFPARMv8, FeatureNEON, FeatureETE];
1079 // Define an alternative name for a given Processor.
1080 class ProcessorAlias<string n, string alias> {
1081   string Name = n;
1082   string Alias = alias;
1085 // FeatureFuseAdrpAdd is enabled under Generic to allow linker merging
1086 // optimizations.
1087 def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic,
1088                      [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler,
1089                       FeatureEnableSelectOptimize]>;
1090 def : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53,
1091                      [TuneA35]>;
1092 def : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53,
1093                      [TuneA35]>;
1094 def : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53,
1095                      [TuneA53]>;
1096 def : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55,
1097                      [TuneA55]>;
1098 def : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510,
1099                      [TuneA510]>;
1100 def : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520,
1101                      [TuneA520]>;
1102 def : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE,
1103                      [TuneA520AE]>;
1104 def : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53,
1105                      [TuneA57]>;
1106 def : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65,
1107                      [TuneA65]>;
1108 def : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65,
1109                      [TuneA65]>;
1110 def : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53,
1111                      [TuneA72]>;
1112 def : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53,
1113                      [TuneA73]>;
1114 def : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55,
1115                      [TuneA75]>;
1116 def : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76,
1117                      [TuneA76]>;
1118 def : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76,
1119                      [TuneA76]>;
1120 def : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77,
1121                      [TuneA77]>;
1122 def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78,
1123                      [TuneA78]>;
1124 def : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE,
1125                      [TuneA78AE]>;
1126 def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C,
1127                      [TuneA78C]>;
1128 def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710,
1129                      [TuneA710]>;
1130 def : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715,
1131                      [TuneA715]>;
1132 def : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720,
1133                      [TuneA720]>;
1134 def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE,
1135                      [TuneA720AE]>;
1136 def : ProcessorModel<"cortex-a725", NeoverseN3Model, ProcessorFeatures.A725,
1137                      [TuneA725]>;
1138 def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
1139                      [TuneR82]>;
1140 def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
1141                      [TuneR82AE]>;
1142 def : ProcessorModel<"cortex-x1", NeoverseV1Model, ProcessorFeatures.X1,
1143                      [TuneX1]>;
1144 def : ProcessorModel<"cortex-x1c", NeoverseV1Model, ProcessorFeatures.X1C,
1145                      [TuneX1]>;
1146 def : ProcessorModel<"cortex-x2", NeoverseV2Model, ProcessorFeatures.X2,
1147                      [TuneX2]>;
1148 def : ProcessorModel<"cortex-x3", NeoverseV2Model, ProcessorFeatures.X3,
1149                      [TuneX3]>;
1150 def : ProcessorModel<"cortex-x4", NeoverseV2Model, ProcessorFeatures.X4,
1151                      [TuneX4]>;
1152 def : ProcessorModel<"cortex-x925", NeoverseV2Model, ProcessorFeatures.X925,
1153                      [TuneX925]>;
1154 def : ProcessorModel<"neoverse-e1", CortexA53Model,
1155                      ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>;
1156 def : ProcessorModel<"neoverse-n1", NeoverseN1Model,
1157                      ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>;
1158 def : ProcessorModel<"neoverse-n2", NeoverseN2Model,
1159                      ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>;
1160 def : ProcessorAlias<"cobalt-100", "neoverse-n2">;
1161 def : ProcessorModel<"neoverse-n3", NeoverseN3Model,
1162                      ProcessorFeatures.NeoverseN3, [TuneNeoverseN3]>;
1163 def : ProcessorModel<"neoverse-512tvb", NeoverseV1Model,
1164                      ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>;
1165 def : ProcessorModel<"neoverse-v1", NeoverseV1Model,
1166                      ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>;
1167 def : ProcessorModel<"neoverse-v2", NeoverseV2Model,
1168                      ProcessorFeatures.NeoverseV2, [TuneNeoverseV2]>;
1169 def : ProcessorAlias<"grace", "neoverse-v2">;
1170 def : ProcessorModel<"neoverse-v3", NeoverseV2Model,
1171                      ProcessorFeatures.NeoverseV3, [TuneNeoverseV3]>;
1172 def : ProcessorModel<"neoverse-v3ae", NeoverseV2Model,
1173                      ProcessorFeatures.NeoverseV3AE, [TuneNeoverseV3AE]>;
1174 def : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3,
1175                      [TuneExynosM3]>;
1176 def : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4,
1177                      [TuneExynosM4]>;
1178 def : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4,
1179                      [TuneExynosM4]>;
1180 def : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor,
1181                      [TuneFalkor]>;
1182 def : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira,
1183                      [TuneSaphira]>;
1184 def : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>;
1186 // Cavium ThunderX/ThunderX T8X  Processors
1187 def : ProcessorModel<"thunderx", ThunderXT8XModel,  ProcessorFeatures.ThunderX,
1188                      [TuneThunderX]>;
1189 def : ProcessorModel<"thunderxt88", ThunderXT8XModel,
1190                      ProcessorFeatures.ThunderX, [TuneThunderXT88]>;
1191 def : ProcessorModel<"thunderxt81", ThunderXT8XModel,
1192                      ProcessorFeatures.ThunderX, [TuneThunderXT81]>;
1193 def : ProcessorModel<"thunderxt83", ThunderXT8XModel,
1194                      ProcessorFeatures.ThunderX, [TuneThunderXT83]>;
1195 // Cavium ThunderX2T9X  Processors. Formerly Broadcom Vulcan.
1196 def : ProcessorModel<"thunderx2t99", ThunderX2T99Model,
1197                      ProcessorFeatures.ThunderX2T99, [TuneThunderX2T99]>;
1198 // Marvell ThunderX3T110 Processors.
1199 def : ProcessorModel<"thunderx3t110", ThunderX3T110Model,
1200                      ProcessorFeatures.ThunderX3T110, [TuneThunderX3T110]>;
1201 def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
1202                      [TuneTSV110]>;
1205 // Apple CPUs
1207 def : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7,
1208                      [TuneAppleA7]>;
1209 // Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
1210 def : ProcessorAlias<"cyclone", "apple-a7">;
1211 def : ProcessorAlias<"apple-a8", "apple-a7">;
1212 def : ProcessorAlias<"apple-a9", "apple-a7">;
1214 def : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10,
1215                      [TuneAppleA10]>;
1217 def : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11,
1218                      [TuneAppleA11]>;
1220 def : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12,
1221                      [TuneAppleA12]>;
1222 def : ProcessorAlias<"apple-s4", "apple-a12">;
1223 def : ProcessorAlias<"apple-s5", "apple-a12">;
1225 def : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13,
1226                      [TuneAppleA13]>;
1228 def : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14,
1229                      [TuneAppleA14]>;
1230 def : ProcessorAlias<"apple-m1", "apple-a14">;
1232 def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
1233                      [TuneAppleA15]>;
1234 def : ProcessorAlias<"apple-m2", "apple-a15">;
1236 def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
1237                      [TuneAppleA16]>;
1238 def : ProcessorAlias<"apple-m3", "apple-a16">;
1240 def : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
1241                      [TuneAppleA17]>;
1243 def : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
1244                      [TuneAppleM4]>;
1246 // Alias for the latest Apple processor model supported by LLVM.
1247 def : ProcessorAlias<"apple-latest", "apple-m4">;
1250 // Fujitsu A64FX
1251 def : ProcessorModel<"a64fx", A64FXModel, ProcessorFeatures.A64FX,
1252                      [TuneA64FX]>;
1254 // Fujitsu FUJITSU-MONAKA
1255 def : ProcessorModel<"fujitsu-monaka", A64FXModel, ProcessorFeatures.MONAKA,
1256                      [TuneMONAKA]>;
1258 // Nvidia Carmel
1259 def : ProcessorModel<"carmel", NoSchedModel, ProcessorFeatures.Carmel,
1260                      [TuneCarmel]>;
1262 // Ampere Computing
1263 def : ProcessorModel<"ampere1", Ampere1Model, ProcessorFeatures.Ampere1,
1264                      [TuneAmpere1]>;
1266 def : ProcessorModel<"ampere1a", Ampere1Model, ProcessorFeatures.Ampere1A,
1267                      [TuneAmpere1A]>;
1269 def : ProcessorModel<"ampere1b", Ampere1BModel, ProcessorFeatures.Ampere1B,
1270                      [TuneAmpere1B]>;
1272 // Qualcomm Oryon
1273 def : ProcessorModel<"oryon-1", OryonModel, ProcessorFeatures.Oryon,
1274                        [TuneOryon]>;