xref: /llvm-project/llvm/lib/Target/AArch64/AArch64Processors.td (revision ef54e0bbfbef59932a59a1640f1f9e14b70cc41b)
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//===----------------------------------------------------------------------===//
11
12//===----------------------------------------------------------------------===//
13// AArch64 Processor subtarget features.
14//===----------------------------------------------------------------------===//
15
16
17def TuneA35     : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
18                                "Cortex-A35 ARM processors">;
19
20def TuneA53     : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
21                                   "Cortex-A53 ARM processors", [
22                                   FeatureFuseAES,
23                                   FeatureFuseAdrpAdd,
24                                   FeatureBalanceFPOps,
25                                   FeaturePostRAScheduler]>;
26
27def TuneA55     : SubtargetFeature<"a55", "ARMProcFamily", "CortexA55",
28                                   "Cortex-A55 ARM processors", [
29                                   FeatureFuseAES,
30                                   FeatureFuseAdrpAdd,
31                                   FeaturePostRAScheduler,
32                                   FeatureFuseAddress]>;
33
34def TuneA510    : SubtargetFeature<"a510", "ARMProcFamily", "CortexA510",
35                                   "Cortex-A510 ARM processors", [
36                                   FeatureFuseAES,
37                                   FeatureFuseAdrpAdd,
38                                   FeaturePostRAScheduler
39                                   ]>;
40
41def TuneA520    : SubtargetFeature<"a520", "ARMProcFamily", "CortexA520",
42                                   "Cortex-A520 ARM processors", [
43                                   FeatureFuseAES,
44                                   FeatureFuseAdrpAdd,
45                                   FeaturePostRAScheduler]>;
46
47def TuneA520AE  : SubtargetFeature<"a520ae", "ARMProcFamily", "CortexA520",
48                                   "Cortex-A520AE ARM processors", [
49                                   FeatureFuseAES,
50                                   FeatureFuseAdrpAdd,
51                                   FeaturePostRAScheduler]>;
52
53def 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]>;
63
64def TuneA65     : SubtargetFeature<"a65", "ARMProcFamily", "CortexA65",
65                                   "Cortex-A65 ARM processors", [
66                                   FeatureFuseAES,
67                                   FeatureFuseAddress,
68                                   FeatureFuseAdrpAdd,
69                                   FeatureFuseLiterals,
70                                   FeatureEnableSelectOptimize,
71                                   FeaturePredictableSelectIsExpensive]>;
72
73def TuneA72     : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72",
74                                   "Cortex-A72 ARM processors", [
75                                   FeatureFuseAES,
76                                   FeatureFuseAdrpAdd,
77                                   FeatureFuseLiterals,
78                                   FeatureAddrLSLSlow14,
79                                   FeatureEnableSelectOptimize,
80                                   FeaturePredictableSelectIsExpensive]>;
81
82def TuneA73     : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73",
83                                   "Cortex-A73 ARM processors", [
84                                   FeatureFuseAES,
85                                   FeatureFuseAdrpAdd,
86                                   FeatureAddrLSLSlow14,
87                                   FeatureEnableSelectOptimize,
88                                   FeaturePredictableSelectIsExpensive]>;
89
90def TuneA75     : SubtargetFeature<"a75", "ARMProcFamily", "CortexA75",
91                                   "Cortex-A75 ARM processors", [
92                                   FeatureFuseAES,
93                                   FeatureFuseAdrpAdd,
94                                   FeatureAddrLSLSlow14,
95                                   FeatureEnableSelectOptimize,
96                                   FeaturePredictableSelectIsExpensive]>;
97
98def TuneA76     : SubtargetFeature<"a76", "ARMProcFamily", "CortexA76",
99                                   "Cortex-A76 ARM processors", [
100                                   FeatureFuseAES,
101                                   FeatureFuseAdrpAdd,
102                                   FeatureAddrLSLSlow14,
103                                   FeatureALULSLFast,
104                                   FeatureEnableSelectOptimize,
105                                   FeaturePredictableSelectIsExpensive]>;
106
107def TuneA77     : SubtargetFeature<"a77", "ARMProcFamily", "CortexA77",
108                                   "Cortex-A77 ARM processors", [
109                                   FeatureCmpBccFusion,
110                                   FeatureFuseAES,
111                                   FeatureFuseAdrpAdd,
112                                   FeatureAddrLSLSlow14,
113                                   FeatureALULSLFast,
114                                   FeatureEnableSelectOptimize,
115                                   FeaturePredictableSelectIsExpensive]>;
116
117def 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]>;
127
128def 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]>;
139
140def 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]>;
151
152def TuneA710    : SubtargetFeature<"a710", "ARMProcFamily", "CortexA710",
153                                   "Cortex-A710 ARM processors", [
154                                   FeatureCmpBccFusion,
155                                   FeatureFuseAES,
156                                   FeatureFuseAdrpAdd,
157                                   FeatureALULSLFast,
158                                   FeaturePostRAScheduler,
159                                   FeatureEnableSelectOptimize,
160                                   FeaturePredictableSelectIsExpensive]>;
161
162def TuneA715 : SubtargetFeature<"a715", "ARMProcFamily", "CortexA715",
163                                 "Cortex-A715 ARM processors", [
164                                 FeatureFuseAES,
165                                 FeaturePostRAScheduler,
166                                 FeatureCmpBccFusion,
167                                 FeatureALULSLFast,
168                                 FeatureFuseAdrpAdd,
169                                 FeatureEnableSelectOptimize,
170                                 FeaturePredictableSelectIsExpensive]>;
171
172def TuneA720 : SubtargetFeature<"a720", "ARMProcFamily", "CortexA720",
173                                "Cortex-A720 ARM processors", [
174                                 FeatureFuseAES,
175                                 FeaturePostRAScheduler,
176                                 FeatureCmpBccFusion,
177                                 FeatureALULSLFast,
178                                 FeatureFuseAdrpAdd,
179                                 FeatureEnableSelectOptimize,
180                                 FeaturePredictableSelectIsExpensive]>;
181
182def TuneA720AE : SubtargetFeature<"a720ae", "ARMProcFamily", "CortexA720",
183                                "Cortex-A720AE ARM processors", [
184                                 FeatureFuseAES,
185                                 FeaturePostRAScheduler,
186                                 FeatureCmpBccFusion,
187                                 FeatureALULSLFast,
188                                 FeatureFuseAdrpAdd,
189                                 FeatureEnableSelectOptimize,
190                                 FeaturePredictableSelectIsExpensive]>;
191
192def 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]>;
202
203def TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
204                               "CortexR82",
205                               "Cortex-R82 ARM processors", [
206                               FeaturePostRAScheduler]>;
207
208def TuneR82AE : SubtargetFeature<"cortex-r82ae", "ARMProcFamily",
209                                 "CortexR82AE",
210                                 "Cortex-R82-AE ARM processors",
211                                 [FeaturePostRAScheduler]>;
212
213def 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]>;
223
224def 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]>;
234
235def 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]>;
245
246def 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]>;
256
257def 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]>;
267
268def TuneA64FX : SubtargetFeature<"a64fx", "ARMProcFamily", "A64FX",
269                                 "Fujitsu A64FX processors", [
270                                 FeaturePostRAScheduler,
271                                 FeatureAggressiveFMA,
272                                 FeatureArithmeticBccFusion,
273                                 FeatureStorePairSuppress,
274                                 FeaturePredictableSelectIsExpensive]>;
275
276def TuneMONAKA : SubtargetFeature<"fujitsu-monaka", "ARMProcFamily", "MONAKA",
277                                 "Fujitsu FUJITSU-MONAKA processors", [
278                                 FeaturePredictableSelectIsExpensive,
279                                 FeatureEnableSelectOptimize,
280                                 FeaturePostRAScheduler,
281                                 FeatureArithmeticBccFusion,
282                                 ]>;
283
284def TuneCarmel : SubtargetFeature<"carmel", "ARMProcFamily", "Carmel",
285                                  "Nvidia Carmel processors">;
286
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.
289def 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]>;
300
301def 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]>;
312
313def 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]>;
324
325def 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]>;
336
337def 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]>;
348
349def 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]>;
365
366def 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]>;
382
383def 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]>;
399
400def 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]>;
416
417def 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                                     ]>;
433
434def 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]>;
447
448// Re-uses some scheduling and tunings from the ExynosM3 proc family.
449def 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]>;
465
466def TuneKryo    : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
467                                   "Qualcomm Kryo processors", [
468                                   FeaturePostRAScheduler,
469                                   FeaturePredictableSelectIsExpensive,
470                                   FeatureZCZeroing,
471                                   FeatureALULSLFast,
472                                   FeatureStorePairSuppress]>;
473
474def TuneFalkor  : SubtargetFeature<"falkor", "ARMProcFamily", "Falkor",
475                                   "Qualcomm Falkor processors", [
476                                   FeaturePostRAScheduler,
477                                   FeaturePredictableSelectIsExpensive,
478                                   FeatureZCZeroing,
479                                   FeatureStorePairSuppress,
480                                   FeatureALULSLFast,
481                                   FeatureSlowSTRQro]>;
482
483def TuneNeoverseE1 : SubtargetFeature<"neoversee1", "ARMProcFamily", "NeoverseE1",
484                                      "Neoverse E1 ARM processors", [
485                                      FeatureFuseAES,
486                                      FeatureFuseAdrpAdd,
487                                      FeaturePostRAScheduler]>;
488
489def TuneNeoverseN1 : SubtargetFeature<"neoversen1", "ARMProcFamily", "NeoverseN1",
490                                      "Neoverse N1 ARM processors", [
491                                      FeatureFuseAES,
492                                      FeatureFuseAdrpAdd,
493                                      FeatureAddrLSLSlow14,
494                                      FeatureALULSLFast,
495                                      FeaturePostRAScheduler,
496                                      FeatureEnableSelectOptimize,
497                                      FeaturePredictableSelectIsExpensive]>;
498
499def TuneNeoverseN2 : SubtargetFeature<"neoversen2", "ARMProcFamily", "NeoverseN2",
500                                      "Neoverse N2 ARM processors", [
501                                      FeatureFuseAES,
502                                      FeatureFuseAdrpAdd,
503                                      FeatureALULSLFast,
504                                      FeaturePostRAScheduler,
505                                      FeatureEnableSelectOptimize,
506                                      FeaturePredictableSelectIsExpensive]>;
507
508def TuneNeoverseN3 : SubtargetFeature<"neoversen3", "ARMProcFamily", "NeoverseN3",
509                                      "Neoverse N3 ARM processors", [
510                                      FeatureFuseAES,
511                                      FeaturePostRAScheduler,
512                                      FeatureALULSLFast,
513                                      FeatureFuseAdrpAdd,
514                                      FeatureEnableSelectOptimize,
515                                      FeaturePredictableSelectIsExpensive]>;
516
517def TuneNeoverse512TVB : SubtargetFeature<"neoverse512tvb", "ARMProcFamily", "Neoverse512TVB",
518                                      "Neoverse 512-TVB ARM processors", [
519                                      FeatureFuseAES,
520                                      FeatureFuseAdrpAdd,
521                                      FeatureALULSLFast,
522                                      FeaturePostRAScheduler,
523                                      FeatureEnableSelectOptimize,
524                                      FeaturePredictableSelectIsExpensive]>;
525
526def 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]>;
536
537def 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]>;
548
549def TuneNeoverseV3 : SubtargetFeature<"neoversev3", "ARMProcFamily", "NeoverseV3",
550                                      "Neoverse V3 ARM processors", [
551                                      FeatureFuseAES,
552                                      FeatureALULSLFast,
553                                      FeatureFuseAdrpAdd,
554                                      FeaturePostRAScheduler,
555                                      FeatureEnableSelectOptimize,
556                                      FeatureAvoidLDAPUR,
557                                      FeaturePredictableSelectIsExpensive]>;
558
559def TuneNeoverseV3AE : SubtargetFeature<"neoversev3AE", "ARMProcFamily", "NeoverseV3",
560                                      "Neoverse V3AE ARM processors", [
561                                      FeatureFuseAES,
562                                      FeatureALULSLFast,
563                                      FeatureFuseAdrpAdd,
564                                      FeaturePostRAScheduler,
565                                      FeatureEnableSelectOptimize,
566                                      FeatureAvoidLDAPUR,
567                                      FeaturePredictableSelectIsExpensive]>;
568
569def TuneSaphira  : SubtargetFeature<"saphira", "ARMProcFamily", "Saphira",
570                                   "Qualcomm Saphira processors", [
571                                   FeaturePostRAScheduler,
572                                   FeaturePredictableSelectIsExpensive,
573                                   FeatureZCZeroing,
574                                   FeatureStorePairSuppress,
575                                   FeatureALULSLFast]>;
576
577def TuneThunderX2T99  : SubtargetFeature<"thunderx2t99", "ARMProcFamily", "ThunderX2T99",
578                                         "Cavium ThunderX2 processors", [
579                                          FeatureAggressiveFMA,
580                                          FeatureArithmeticBccFusion,
581                                          FeaturePostRAScheduler,
582                                          FeatureStorePairSuppress,
583                                          FeaturePredictableSelectIsExpensive]>;
584
585def TuneThunderX3T110  : SubtargetFeature<"thunderx3t110", "ARMProcFamily",
586                                          "ThunderX3T110",
587                                          "Marvell ThunderX3 processors", [
588                                           FeatureAggressiveFMA,
589                                           FeatureArithmeticBccFusion,
590                                           FeaturePostRAScheduler,
591                                           FeaturePredictableSelectIsExpensive,
592                                           FeatureBalanceFPOps,
593                                           FeatureStorePairSuppress,
594                                           FeatureStrictAlign]>;
595
596def TuneThunderX : SubtargetFeature<"thunderx", "ARMProcFamily", "ThunderX",
597                                    "Cavium ThunderX processors", [
598                                    FeaturePostRAScheduler,
599                                    FeatureStorePairSuppress,
600                                    FeaturePredictableSelectIsExpensive]>;
601
602def TuneThunderXT88 : SubtargetFeature<"thunderxt88", "ARMProcFamily",
603                                       "ThunderXT88",
604                                       "Cavium ThunderX processors", [
605                                       FeaturePostRAScheduler,
606                                       FeatureStorePairSuppress,
607                                       FeaturePredictableSelectIsExpensive]>;
608
609def TuneThunderXT81 : SubtargetFeature<"thunderxt81", "ARMProcFamily",
610                                       "ThunderXT81",
611                                       "Cavium ThunderX processors", [
612                                       FeaturePostRAScheduler,
613                                       FeatureStorePairSuppress,
614                                       FeaturePredictableSelectIsExpensive]>;
615
616def TuneThunderXT83 : SubtargetFeature<"thunderxt83", "ARMProcFamily",
617                                       "ThunderXT83",
618                                       "Cavium ThunderX processors", [
619                                       FeaturePostRAScheduler,
620                                       FeatureStorePairSuppress,
621                                       FeaturePredictableSelectIsExpensive]>;
622
623def TuneTSV110 : SubtargetFeature<"tsv110", "ARMProcFamily", "TSV110",
624                                  "HiSilicon TS-V110 processors", [
625                                  FeatureFuseAES,
626                                  FeatureStorePairSuppress,
627                                  FeaturePostRAScheduler]>;
628
629def 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]>;
643
644def 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]>;
659
660def 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]>;
676
677def 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]>;
699
700def 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];
1062
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];
1071
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];
1077}
1078
1079// Define an alternative name for a given Processor.
1080class ProcessorAlias<string n, string alias> {
1081  string Name = n;
1082  string Alias = alias;
1083}
1084
1085// FeatureFuseAdrpAdd is enabled under Generic to allow linker merging
1086// optimizations.
1087def : ProcessorModel<"generic", CortexA510Model, ProcessorFeatures.Generic,
1088                     [FeatureFuseAES, FeatureFuseAdrpAdd, FeaturePostRAScheduler,
1089                      FeatureEnableSelectOptimize]>;
1090def : ProcessorModel<"cortex-a35", CortexA53Model, ProcessorFeatures.A53,
1091                     [TuneA35]>;
1092def : ProcessorModel<"cortex-a34", CortexA53Model, ProcessorFeatures.A53,
1093                     [TuneA35]>;
1094def : ProcessorModel<"cortex-a53", CortexA53Model, ProcessorFeatures.A53,
1095                     [TuneA53]>;
1096def : ProcessorModel<"cortex-a55", CortexA55Model, ProcessorFeatures.A55,
1097                     [TuneA55]>;
1098def : ProcessorModel<"cortex-a510", CortexA510Model, ProcessorFeatures.A510,
1099                     [TuneA510]>;
1100def : ProcessorModel<"cortex-a520", CortexA510Model, ProcessorFeatures.A520,
1101                     [TuneA520]>;
1102def : ProcessorModel<"cortex-a520ae", CortexA510Model, ProcessorFeatures.A520AE,
1103                     [TuneA520AE]>;
1104def : ProcessorModel<"cortex-a57", CortexA57Model, ProcessorFeatures.A53,
1105                     [TuneA57]>;
1106def : ProcessorModel<"cortex-a65", CortexA53Model, ProcessorFeatures.A65,
1107                     [TuneA65]>;
1108def : ProcessorModel<"cortex-a65ae", CortexA53Model, ProcessorFeatures.A65,
1109                     [TuneA65]>;
1110def : ProcessorModel<"cortex-a72", CortexA57Model, ProcessorFeatures.A53,
1111                     [TuneA72]>;
1112def : ProcessorModel<"cortex-a73", CortexA57Model, ProcessorFeatures.A53,
1113                     [TuneA73]>;
1114def : ProcessorModel<"cortex-a75", CortexA57Model, ProcessorFeatures.A55,
1115                     [TuneA75]>;
1116def : ProcessorModel<"cortex-a76", CortexA57Model, ProcessorFeatures.A76,
1117                     [TuneA76]>;
1118def : ProcessorModel<"cortex-a76ae", CortexA57Model, ProcessorFeatures.A76,
1119                     [TuneA76]>;
1120def : ProcessorModel<"cortex-a77", CortexA57Model, ProcessorFeatures.A77,
1121                     [TuneA77]>;
1122def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78,
1123                     [TuneA78]>;
1124def : ProcessorModel<"cortex-a78ae", CortexA57Model, ProcessorFeatures.A78AE,
1125                     [TuneA78AE]>;
1126def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C,
1127                     [TuneA78C]>;
1128def : ProcessorModel<"cortex-a710", NeoverseN2Model, ProcessorFeatures.A710,
1129                     [TuneA710]>;
1130def : ProcessorModel<"cortex-a715", NeoverseN2Model, ProcessorFeatures.A715,
1131                     [TuneA715]>;
1132def : ProcessorModel<"cortex-a720", NeoverseN2Model, ProcessorFeatures.A720,
1133                     [TuneA720]>;
1134def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE,
1135                     [TuneA720AE]>;
1136def : ProcessorModel<"cortex-a725", NeoverseN3Model, ProcessorFeatures.A725,
1137                     [TuneA725]>;
1138def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
1139                     [TuneR82]>;
1140def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
1141                     [TuneR82AE]>;
1142def : ProcessorModel<"cortex-x1", NeoverseV1Model, ProcessorFeatures.X1,
1143                     [TuneX1]>;
1144def : ProcessorModel<"cortex-x1c", NeoverseV1Model, ProcessorFeatures.X1C,
1145                     [TuneX1]>;
1146def : ProcessorModel<"cortex-x2", NeoverseV2Model, ProcessorFeatures.X2,
1147                     [TuneX2]>;
1148def : ProcessorModel<"cortex-x3", NeoverseV2Model, ProcessorFeatures.X3,
1149                     [TuneX3]>;
1150def : ProcessorModel<"cortex-x4", NeoverseV2Model, ProcessorFeatures.X4,
1151                     [TuneX4]>;
1152def : ProcessorModel<"cortex-x925", NeoverseV2Model, ProcessorFeatures.X925,
1153                     [TuneX925]>;
1154def : ProcessorModel<"neoverse-e1", CortexA53Model,
1155                     ProcessorFeatures.NeoverseE1, [TuneNeoverseE1]>;
1156def : ProcessorModel<"neoverse-n1", NeoverseN1Model,
1157                     ProcessorFeatures.NeoverseN1, [TuneNeoverseN1]>;
1158def : ProcessorModel<"neoverse-n2", NeoverseN2Model,
1159                     ProcessorFeatures.NeoverseN2, [TuneNeoverseN2]>;
1160def : ProcessorAlias<"cobalt-100", "neoverse-n2">;
1161def : ProcessorModel<"neoverse-n3", NeoverseN3Model,
1162                     ProcessorFeatures.NeoverseN3, [TuneNeoverseN3]>;
1163def : ProcessorModel<"neoverse-512tvb", NeoverseV1Model,
1164                     ProcessorFeatures.Neoverse512TVB, [TuneNeoverse512TVB]>;
1165def : ProcessorModel<"neoverse-v1", NeoverseV1Model,
1166                     ProcessorFeatures.NeoverseV1, [TuneNeoverseV1]>;
1167def : ProcessorModel<"neoverse-v2", NeoverseV2Model,
1168                     ProcessorFeatures.NeoverseV2, [TuneNeoverseV2]>;
1169def : ProcessorAlias<"grace", "neoverse-v2">;
1170def : ProcessorModel<"neoverse-v3", NeoverseV2Model,
1171                     ProcessorFeatures.NeoverseV3, [TuneNeoverseV3]>;
1172def : ProcessorModel<"neoverse-v3ae", NeoverseV2Model,
1173                     ProcessorFeatures.NeoverseV3AE, [TuneNeoverseV3AE]>;
1174def : ProcessorModel<"exynos-m3", ExynosM3Model, ProcessorFeatures.ExynosM3,
1175                     [TuneExynosM3]>;
1176def : ProcessorModel<"exynos-m4", ExynosM4Model, ProcessorFeatures.ExynosM4,
1177                     [TuneExynosM4]>;
1178def : ProcessorModel<"exynos-m5", ExynosM5Model, ProcessorFeatures.ExynosM4,
1179                     [TuneExynosM4]>;
1180def : ProcessorModel<"falkor", FalkorModel, ProcessorFeatures.Falkor,
1181                     [TuneFalkor]>;
1182def : ProcessorModel<"saphira", FalkorModel, ProcessorFeatures.Saphira,
1183                     [TuneSaphira]>;
1184def : ProcessorModel<"kryo", KryoModel, ProcessorFeatures.A53, [TuneKryo]>;
1185
1186// Cavium ThunderX/ThunderX T8X  Processors
1187def : ProcessorModel<"thunderx", ThunderXT8XModel,  ProcessorFeatures.ThunderX,
1188                     [TuneThunderX]>;
1189def : ProcessorModel<"thunderxt88", ThunderXT8XModel,
1190                     ProcessorFeatures.ThunderX, [TuneThunderXT88]>;
1191def : ProcessorModel<"thunderxt81", ThunderXT8XModel,
1192                     ProcessorFeatures.ThunderX, [TuneThunderXT81]>;
1193def : ProcessorModel<"thunderxt83", ThunderXT8XModel,
1194                     ProcessorFeatures.ThunderX, [TuneThunderXT83]>;
1195// Cavium ThunderX2T9X  Processors. Formerly Broadcom Vulcan.
1196def : ProcessorModel<"thunderx2t99", ThunderX2T99Model,
1197                     ProcessorFeatures.ThunderX2T99, [TuneThunderX2T99]>;
1198// Marvell ThunderX3T110 Processors.
1199def : ProcessorModel<"thunderx3t110", ThunderX3T110Model,
1200                     ProcessorFeatures.ThunderX3T110, [TuneThunderX3T110]>;
1201def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
1202                     [TuneTSV110]>;
1203
1204
1205// Apple CPUs
1206
1207def : ProcessorModel<"apple-a7", CycloneModel, ProcessorFeatures.AppleA7,
1208                     [TuneAppleA7]>;
1209// Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
1210def : ProcessorAlias<"cyclone", "apple-a7">;
1211def : ProcessorAlias<"apple-a8", "apple-a7">;
1212def : ProcessorAlias<"apple-a9", "apple-a7">;
1213
1214def : ProcessorModel<"apple-a10", CycloneModel, ProcessorFeatures.AppleA10,
1215                     [TuneAppleA10]>;
1216
1217def : ProcessorModel<"apple-a11", CycloneModel, ProcessorFeatures.AppleA11,
1218                     [TuneAppleA11]>;
1219
1220def : ProcessorModel<"apple-a12", CycloneModel, ProcessorFeatures.AppleA12,
1221                     [TuneAppleA12]>;
1222def : ProcessorAlias<"apple-s4", "apple-a12">;
1223def : ProcessorAlias<"apple-s5", "apple-a12">;
1224
1225def : ProcessorModel<"apple-a13", CycloneModel, ProcessorFeatures.AppleA13,
1226                     [TuneAppleA13]>;
1227
1228def : ProcessorModel<"apple-a14", CycloneModel, ProcessorFeatures.AppleA14,
1229                     [TuneAppleA14]>;
1230def : ProcessorAlias<"apple-m1", "apple-a14">;
1231
1232def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
1233                     [TuneAppleA15]>;
1234def : ProcessorAlias<"apple-m2", "apple-a15">;
1235
1236def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
1237                     [TuneAppleA16]>;
1238def : ProcessorAlias<"apple-m3", "apple-a16">;
1239
1240def : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
1241                     [TuneAppleA17]>;
1242
1243def : ProcessorModel<"apple-m4", CycloneModel, ProcessorFeatures.AppleM4,
1244                     [TuneAppleM4]>;
1245
1246// Alias for the latest Apple processor model supported by LLVM.
1247def : ProcessorAlias<"apple-latest", "apple-m4">;
1248
1249
1250// Fujitsu A64FX
1251def : ProcessorModel<"a64fx", A64FXModel, ProcessorFeatures.A64FX,
1252                     [TuneA64FX]>;
1253
1254// Fujitsu FUJITSU-MONAKA
1255def : ProcessorModel<"fujitsu-monaka", A64FXModel, ProcessorFeatures.MONAKA,
1256                     [TuneMONAKA]>;
1257
1258// Nvidia Carmel
1259def : ProcessorModel<"carmel", NoSchedModel, ProcessorFeatures.Carmel,
1260                     [TuneCarmel]>;
1261
1262// Ampere Computing
1263def : ProcessorModel<"ampere1", Ampere1Model, ProcessorFeatures.Ampere1,
1264                     [TuneAmpere1]>;
1265
1266def : ProcessorModel<"ampere1a", Ampere1Model, ProcessorFeatures.Ampere1A,
1267                     [TuneAmpere1A]>;
1268
1269def : ProcessorModel<"ampere1b", Ampere1BModel, ProcessorFeatures.Ampere1B,
1270                     [TuneAmpere1B]>;
1271
1272// Qualcomm Oryon
1273def : ProcessorModel<"oryon-1", OryonModel, ProcessorFeatures.Oryon,
1274                       [TuneOryon]>;
1275