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