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