Skip to content

Commit e50a857

Browse files
authored
[AArch64] Add support for Cortex-R82AE and improve Cortex-R82 (#90440)
1 parent 1c17252 commit e50a857

File tree

9 files changed

+43
-9
lines changed

9 files changed

+43
-9
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,7 @@ Arm and AArch64 Support
666666
* Arm Cortex-A78AE (cortex-a78ae).
667667
* Arm Cortex-A520AE (cortex-a520ae).
668668
* Arm Cortex-A720AE (cortex-a720ae).
669+
* Arm Cortex-R82AE (cortex-r82ae).
669670
* Arm Neoverse-N3 (neoverse-n3).
670671
* Arm Neoverse-V3 (neoverse-v3).
671672
* Arm Neoverse-V3AE (neoverse-v3ae).

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-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, 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, ampere1b, cobalt-100, grace{{$}}
8+
// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, 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, ampere1b, cobalt-100, 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-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, 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, ampere1b, cobalt-100, grace{{$}}
12+
// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, cortex-a520, cortex-a520ae, cortex-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78ae, cortex-a78c, cortex-a710, cortex-a715, cortex-a720, cortex-a720ae, cortex-r82, cortex-r82ae, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, cortex-x4, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-n3, neoverse-512tvb, neoverse-v1, neoverse-v2, neoverse-v3, neoverse-v3ae, 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, ampere1b, cobalt-100, 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'

clang/test/Preprocessor/aarch64-target-features.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@
326326
// CHECK-MCPU-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon"
327327
// CHECK-MCPU-A72: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon"
328328
// CHECK-MCPU-CORTEX-A73: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon"
329-
// CHECK-MCPU-CORTEX-R82: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8r" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+neon" "-target-feature" "+ssbs"
329+
// CHECK-MCPU-CORTEX-R82: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8r" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+complxnum" "-target-feature" "+flagm" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+fp16fml" "-target-feature" "+jsconv" "-target-feature" "+lse" "-target-feature" "+pauth" "-target-feature" "+perfmon" "-target-feature" "+predres" "-target-feature" "+ras" "-target-feature" "+rcpc" "-target-feature" "+rdm" "-target-feature" "+sb" "-target-feature" "+neon" "-target-feature" "+ssbs"
330330
// CHECK-MCPU-M3: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon"
331331
// CHECK-MCPU-M4: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8.2a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+dotprod" "-target-feature" "+fp-armv8" "-target-feature" "+fullfp16" "-target-feature" "+lse" "-target-feature" "+ras" "-target-feature" "+rdm" "-target-feature" "+sha2" "-target-feature" "+neon"
332332
// CHECK-MCPU-KRYO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+v8a" "-target-feature" "+aes" "-target-feature" "+crc" "-target-feature" "+fp-armv8" "-target-feature" "+sha2" "-target-feature" "+neon"

llvm/docs/ReleaseNotes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Changes to the AArch64 Backend
7474
------------------------------
7575

7676
* Added support for Cortex-A78AE, Cortex-A520AE, Cortex-A720AE,
77-
Neoverse-N3, Neoverse-V3 and Neoverse-V3AE CPUs.
77+
Cortex-R82AE, Neoverse-N3, Neoverse-V3 and Neoverse-V3AE CPUs.
7878

7979
Changes to the AMDGPU Backend
8080
-----------------------------

llvm/include/llvm/TargetParser/AArch64TargetParser.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,12 @@ inline constexpr CpuInfo CpuInfos[] = {
573573
AArch64::AEK_PAUTH, AArch64::AEK_SVE2BITPERM,
574574
AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
575575
AArch64::AEK_PREDRES, AArch64::AEK_PROFILE})},
576-
{"cortex-r82", ARMV8R, AArch64::ExtensionBitset({AArch64::AEK_LSE})},
576+
{"cortex-r82", ARMV8R,
577+
AArch64::ExtensionBitset({AArch64::AEK_LSE, AArch64::AEK_FLAGM,
578+
AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
579+
{"cortex-r82ae", ARMV8R,
580+
AArch64::ExtensionBitset({AArch64::AEK_LSE, AArch64::AEK_FLAGM,
581+
AArch64::AEK_PERFMON, AArch64::AEK_PREDRES})},
577582
{"cortex-x1", ARMV8_2A,
578583
AArch64::ExtensionBitset({AArch64::AEK_AES, AArch64::AEK_SHA2,
579584
AArch64::AEK_FP16, AArch64::AEK_DOTPROD,

llvm/lib/Target/AArch64/AArch64Processors.td

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,11 @@ def TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
194194
"Cortex-R82 ARM processors", [
195195
FeaturePostRAScheduler]>;
196196

197+
def TuneR82AE : SubtargetFeature<"cortex-r82ae", "ARMProcFamily",
198+
"CortexR82AE",
199+
"Cortex-R82-AE ARM processors",
200+
[FeaturePostRAScheduler]>;
201+
197202
def TuneX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1",
198203
"Cortex-X1 ARM processors", [
199204
FeatureCmpBccFusion,
@@ -667,7 +672,13 @@ def ProcessorFeatures {
667672
list<SubtargetFeature> R82 = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
668673
FeatureFP16FML, FeatureSSBS, FeaturePredRes,
669674
FeatureSB, FeatureRDM, FeatureDotProd,
670-
FeatureComplxNum, FeatureJS];
675+
FeatureComplxNum, FeatureJS,
676+
FeatureCacheDeepPersist];
677+
list<SubtargetFeature> R82AE = [HasV8_0rOps, FeaturePerfMon, FeatureFullFP16,
678+
FeatureFP16FML, FeatureSSBS, FeaturePredRes,
679+
FeatureSB, FeatureRDM, FeatureDotProd,
680+
FeatureComplxNum, FeatureJS,
681+
FeatureCacheDeepPersist];
671682
list<SubtargetFeature> X1 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8,
672683
FeatureNEON, FeatureRCPC, FeaturePerfMon,
673684
FeatureSPE, FeatureFullFP16, FeatureDotProd,
@@ -854,6 +865,8 @@ def : ProcessorModel<"cortex-a720ae", NeoverseN2Model, ProcessorFeatures.A720AE,
854865
[TuneA720AE]>;
855866
def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
856867
[TuneR82]>;
868+
def : ProcessorModel<"cortex-r82ae", CortexA55Model, ProcessorFeatures.R82AE,
869+
[TuneR82AE]>;
857870
def : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1,
858871
[TuneX1]>;
859872
def : ProcessorModel<"cortex-x1c", CortexA57Model, ProcessorFeatures.X1C,

llvm/lib/Target/AArch64/AArch64Subtarget.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
117117
case CortexA35:
118118
case CortexA53:
119119
case CortexA55:
120+
case CortexR82:
121+
case CortexR82AE:
120122
PrefFunctionAlignment = Align(16);
121123
PrefLoopAlignment = Align(16);
122124
MaxBytesForLoopAlignment = 8;
@@ -142,7 +144,6 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
142144
case CortexA78:
143145
case CortexA78AE:
144146
case CortexA78C:
145-
case CortexR82:
146147
case CortexX1:
147148
PrefFunctionAlignment = Align(16);
148149
PrefLoopAlignment = Align(32);

llvm/lib/TargetParser/Host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ StringRef sys::detail::getHostCPUNameForARM(StringRef ProcCpuinfoContent) {
214214
.Case("0xc18", "cortex-r8")
215215
.Case("0xd13", "cortex-r52")
216216
.Case("0xd15", "cortex-r82")
217+
.Case("0xd14", "cortex-r82ae")
217218
.Case("0xd02", "cortex-a34")
218219
.Case("0xd04", "cortex-a35")
219220
.Case("0xd03", "cortex-a53")

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,7 +1390,20 @@ INSTANTIATE_TEST_SUITE_P(
13901390
AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_SIMD,
13911391
AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_RAS,
13921392
AArch64::AEK_RCPC, AArch64::AEK_LSE, AArch64::AEK_SB,
1393-
AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH}),
1393+
AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH,
1394+
AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
1395+
AArch64::AEK_PREDRES}),
1396+
"8-R"),
1397+
ARMCPUTestParams<AArch64::ExtensionBitset>(
1398+
"cortex-r82ae", "armv8-r", "crypto-neon-fp-armv8",
1399+
AArch64::ExtensionBitset(
1400+
{AArch64::AEK_CRC, AArch64::AEK_RDM, AArch64::AEK_SSBS,
1401+
AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_SIMD,
1402+
AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_RAS,
1403+
AArch64::AEK_RCPC, AArch64::AEK_LSE, AArch64::AEK_SB,
1404+
AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH,
1405+
AArch64::AEK_FLAGM, AArch64::AEK_PERFMON,
1406+
AArch64::AEK_PREDRES}),
13941407
"8-R"),
13951408
ARMCPUTestParams<AArch64::ExtensionBitset>(
13961409
"cortex-x1", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1806,7 +1819,7 @@ INSTANTIATE_TEST_SUITE_P(
18061819
ARMCPUTestParams<AArch64::ExtensionBitset>::PrintToStringParamName);
18071820

18081821
// Note: number of CPUs includes aliases.
1809-
static constexpr unsigned NumAArch64CPUArchs = 75;
1822+
static constexpr unsigned NumAArch64CPUArchs = 76;
18101823

18111824
TEST(TargetParserTest, testAArch64CPUArchList) {
18121825
SmallVector<StringRef, NumAArch64CPUArchs> List;

0 commit comments

Comments
 (0)