Skip to content

Commit 10d6d5f

Browse files
authored
AArch64: add support for currently released Apple CPUs. (#73499)
These are still v8.6a and have no real changes as far as LLVM cares, so it's mostly just a copy/paste job.
1 parent 6cf3566 commit 10d6d5f

File tree

6 files changed

+60
-4
lines changed

6 files changed

+60
-4
lines changed

clang/test/Misc/target-invalid-cpu-note.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
// RUN: not %clang_cc1 -triple arm64--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix AARCH64
77
// AARCH64: error: unknown target CPU 'not-a-cpu'
8-
// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, grace{{$}}
8+
// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-a17, apple-m1, apple-m2, apple-m3, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, grace{{$}}
99

1010
// RUN: not %clang_cc1 -triple arm64--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_AARCH64
1111
// TUNE_AARCH64: error: unknown target CPU 'not-a-cpu'
12-
// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-m1, apple-m2, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, grace{{$}}
12+
// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, neoverse-v2, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-a15, apple-a16, apple-a17, apple-m1, apple-m2, apple-m3, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1, ampere1a, grace{{$}}
1313

1414
// RUN: not %clang_cc1 -triple i386--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86
1515
// X86: error: unknown target CPU 'not-a-cpu'

llvm/include/llvm/TargetParser/AArch64TargetParser.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,11 @@ inline constexpr CpuInfo CpuInfos[] = {
601601
(AArch64::ExtensionBitset(
602602
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
603603
AArch64::AEK_FP16, AArch64::AEK_FP16FML}))},
604+
{"apple-a17", ARMV8_6A,
605+
(AArch64::ExtensionBitset(
606+
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
607+
AArch64::AEK_FP16, AArch64::AEK_FP16FML}))},
608+
604609
{"apple-m1", ARMV8_5A,
605610
(AArch64::ExtensionBitset(
606611
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
@@ -609,6 +614,11 @@ inline constexpr CpuInfo CpuInfos[] = {
609614
(AArch64::ExtensionBitset(
610615
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
611616
AArch64::AEK_FP16, AArch64::AEK_FP16FML}))},
617+
{"apple-m3", ARMV8_6A,
618+
(AArch64::ExtensionBitset(
619+
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_SHA3,
620+
AArch64::AEK_FP16, AArch64::AEK_FP16FML}))},
621+
612622
{"apple-s4", ARMV8_3A,
613623
(AArch64::ExtensionBitset(
614624
{AArch64::AEK_AES, AArch64::AEK_SHA2, AArch64::AEK_FP16}))},

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1147,6 +1147,22 @@ def TuneAppleA16 : SubtargetFeature<"apple-a16", "ARMProcFamily", "AppleA16",
11471147
FeatureZCRegMove,
11481148
FeatureZCZeroing]>;
11491149

1150+
def TuneAppleA17 : SubtargetFeature<"apple-a17", "ARMProcFamily", "AppleA17",
1151+
"Apple A17", [
1152+
FeatureAlternateSExtLoadCVTF32Pattern,
1153+
FeatureArithmeticBccFusion,
1154+
FeatureArithmeticCbzFusion,
1155+
FeatureDisableLatencySchedHeuristic,
1156+
FeatureFuseAddress,
1157+
FeatureFuseAES,
1158+
FeatureFuseArithmeticLogic,
1159+
FeatureFuseCCSelect,
1160+
FeatureFuseCryptoEOR,
1161+
FeatureFuseLiterals,
1162+
FeatureStorePairSuppress,
1163+
FeatureZCRegMove,
1164+
FeatureZCZeroing]>;
1165+
11501166
def TuneExynosM3 : SubtargetFeature<"exynosm3", "ARMProcFamily", "ExynosM3",
11511167
"Samsung Exynos-M3 processors",
11521168
[FeatureExynosCheapAsMoveHandling,
@@ -1446,6 +1462,10 @@ def ProcessorFeatures {
14461462
FeatureNEON, FeaturePerfMon, FeatureSHA3,
14471463
FeatureFullFP16, FeatureFP16FML,
14481464
FeatureHCX];
1465+
list<SubtargetFeature> AppleA17 = [HasV8_6aOps, FeatureCrypto, FeatureFPARMv8,
1466+
FeatureNEON, FeaturePerfMon, FeatureSHA3,
1467+
FeatureFullFP16, FeatureFP16FML,
1468+
FeatureHCX];
14491469
list<SubtargetFeature> ExynosM3 = [HasV8_0aOps, FeatureCRC, FeatureCrypto,
14501470
FeaturePerfMon];
14511471
list<SubtargetFeature> ExynosM4 = [HasV8_2aOps, FeatureCrypto, FeatureDotProd,
@@ -1629,12 +1649,15 @@ def : ProcessorModel<"apple-a15", CycloneModel, ProcessorFeatures.AppleA15,
16291649
[TuneAppleA15]>;
16301650
def : ProcessorModel<"apple-a16", CycloneModel, ProcessorFeatures.AppleA16,
16311651
[TuneAppleA16]>;
1632-
1652+
def : ProcessorModel<"apple-a17", CycloneModel, ProcessorFeatures.AppleA17,
1653+
[TuneAppleA17]>;
16331654
// Mac CPUs
16341655
def : ProcessorModel<"apple-m1", CycloneModel, ProcessorFeatures.AppleA14,
16351656
[TuneAppleA14]>;
16361657
def : ProcessorModel<"apple-m2", CycloneModel, ProcessorFeatures.AppleA15,
16371658
[TuneAppleA15]>;
1659+
def : ProcessorModel<"apple-m3", CycloneModel, ProcessorFeatures.AppleA16,
1660+
[TuneAppleA16]>;
16381661

16391662
// watch CPUs.
16401663
def : ProcessorModel<"apple-s4", CycloneModel, ProcessorFeatures.AppleA12,

llvm/lib/Target/AArch64/AArch64Subtarget.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
184184
case AppleA14:
185185
case AppleA15:
186186
case AppleA16:
187+
case AppleA17:
187188
CacheLineSize = 64;
188189
PrefetchDistance = 280;
189190
MinPrefetchStride = 2048;
@@ -192,6 +193,7 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
192193
case AppleA14:
193194
case AppleA15:
194195
case AppleA16:
196+
case AppleA17:
195197
MaxInterleaveFactor = 4;
196198
break;
197199
default:

llvm/lib/Target/AArch64/AArch64Subtarget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
5151
AppleA14,
5252
AppleA15,
5353
AppleA16,
54+
AppleA17,
5455
Carmel,
5556
CortexA35,
5657
CortexA53,

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,16 @@ INSTANTIATE_TEST_SUITE_P(
14081408
AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16,
14091409
AArch64::AEK_I8MM})),
14101410
"8.6-A"),
1411+
ARMCPUTestParams<AArch64::ExtensionBitset>(
1412+
"apple-a17", "armv8.6-a", "crypto-neon-fp-armv8",
1413+
(AArch64::ExtensionBitset(
1414+
{AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
1415+
AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD,
1416+
AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM,
1417+
AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16,
1418+
AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16,
1419+
AArch64::AEK_I8MM})),
1420+
"8.6-A"),
14111421
ARMCPUTestParams<AArch64::ExtensionBitset>(
14121422
"apple-m1", "armv8.5-a", "crypto-neon-fp-armv8",
14131423
(AArch64::ExtensionBitset(
@@ -1427,6 +1437,16 @@ INSTANTIATE_TEST_SUITE_P(
14271437
AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16,
14281438
AArch64::AEK_I8MM})),
14291439
"8.6-A"),
1440+
ARMCPUTestParams<AArch64::ExtensionBitset>(
1441+
"apple-m3", "armv8.6-a", "crypto-neon-fp-armv8",
1442+
(AArch64::ExtensionBitset(
1443+
{AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
1444+
AArch64::AEK_SHA3, AArch64::AEK_FP, AArch64::AEK_SIMD,
1445+
AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM,
1446+
AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_FP16,
1447+
AArch64::AEK_FP16FML, AArch64::AEK_SHA3, AArch64::AEK_BF16,
1448+
AArch64::AEK_I8MM})),
1449+
"8.6-A"),
14301450
ARMCPUTestParams<AArch64::ExtensionBitset>(
14311451
"apple-s4", "armv8.3-a", "crypto-neon-fp-armv8",
14321452
(AArch64::ExtensionBitset(
@@ -1606,7 +1626,7 @@ INSTANTIATE_TEST_SUITE_P(
16061626
"8.2-A")));
16071627

16081628
// Note: number of CPUs includes aliases.
1609-
static constexpr unsigned NumAArch64CPUArchs = 65;
1629+
static constexpr unsigned NumAArch64CPUArchs = 67;
16101630

16111631
TEST(TargetParserTest, testAArch64CPUArchList) {
16121632
SmallVector<StringRef, NumAArch64CPUArchs> List;

0 commit comments

Comments
 (0)