Skip to content

Commit 53433dd

Browse files
ptomsichtstellar
authored andcommitted
[AArch64] Support for Ampere1 core
Add support for the Ampere Computing Ampere1 core. Ampere1 implements the AArch64 state and is compatible with ARMv8.6-A. Differential Revision: https://reviews.llvm.org/D117112 (cherry picked from commit 64816e6)
1 parent c6d56a3 commit 53433dd

File tree

15 files changed

+1209
-4
lines changed

15 files changed

+1209
-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-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-m1, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel{{$}}
8+
// AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, 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-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-m1, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1{{$}}
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-a57, cortex-a65, cortex-a65ae, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-m1, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel{{$}}
12+
// TUNE_AARCH64-NEXT: note: valid target CPU values are: cortex-a34, cortex-a35, cortex-a53, cortex-a55, cortex-a510, 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-r82, cortex-x1, cortex-x1c, cortex-x2, neoverse-e1, neoverse-n1, neoverse-n2, neoverse-512tvb, neoverse-v1, cyclone, apple-a7, apple-a8, apple-a9, apple-a10, apple-a11, apple-a12, apple-a13, apple-a14, apple-m1, apple-s4, apple-s5, exynos-m3, exynos-m4, exynos-m5, falkor, saphira, kryo, thunderx2t99, thunderx3t110, thunderx, thunderxt88, thunderxt81, thunderxt83, tsv110, a64fx, carmel, ampere1{{$}}
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/Support/AArch64TargetParser.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,9 @@ AARCH64_CPU_NAME("a64fx", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
290290
(AArch64::AEK_FP16 | AArch64::AEK_SVE))
291291
AARCH64_CPU_NAME("carmel", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
292292
AArch64::AEK_FP16)
293+
AARCH64_CPU_NAME("ampere1", ARMV8_6A, FK_CRYPTO_NEON_FP_ARMV8, false,
294+
(AArch64::AEK_FP16 | AArch64::AEK_MTE | AArch64::AEK_SB |
295+
AArch64::AEK_SSBS))
293296
// Invalid CPU
294297
AARCH64_CPU_NAME("invalid", INVALID, FK_INVALID, true, AArch64::AEK_INVALID)
295298
#undef AARCH64_CPU_NAME

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,7 @@ include "AArch64Schedule.td"
557557
include "AArch64InstrInfo.td"
558558
include "AArch64SchedPredicates.td"
559559
include "AArch64SchedPredExynos.td"
560+
include "AArch64SchedPredAmpere.td"
560561
include "AArch64Combine.td"
561562

562563
def AArch64InstrInfo : InstrInfo;
@@ -626,6 +627,7 @@ include "AArch64SchedThunderX2T99.td"
626627
include "AArch64SchedA64FX.td"
627628
include "AArch64SchedThunderX3T110.td"
628629
include "AArch64SchedTSV110.td"
630+
include "AArch64SchedAmpere1.td"
629631

630632
def TuneA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
631633
"Cortex-A35 ARM processors">;
@@ -939,6 +941,16 @@ def TuneTSV110 : SubtargetFeature<"tsv110", "ARMProcFamily", "TSV110",
939941
FeatureFuseAES,
940942
FeaturePostRAScheduler]>;
941943

944+
def TuneAmpere1 : SubtargetFeature<"ampere1", "ARMProcFamily", "Ampere1",
945+
"Ampere Computing Ampere-1 processors", [
946+
FeaturePostRAScheduler,
947+
FeatureFuseAES,
948+
FeatureLSLFast,
949+
FeatureAggressiveFMA,
950+
FeatureArithmeticBccFusion,
951+
FeatureCmpBccFusion,
952+
FeatureFuseAddress,
953+
FeatureFuseLiterals]>;
942954

943955
def ProcessorFeatures {
944956
list<SubtargetFeature> A53 = [HasV8_0aOps, FeatureCRC, FeatureCrypto,
@@ -1047,6 +1059,8 @@ def ProcessorFeatures {
10471059
list<SubtargetFeature> TSV110 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8,
10481060
FeatureNEON, FeaturePerfMon, FeatureSPE,
10491061
FeatureFullFP16, FeatureFP16FML, FeatureDotProd];
1062+
list<SubtargetFeature> Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
1063+
FeatureMTE, FeatureSSBS];
10501064

10511065
// ETE and TRBE are future architecture extensions. We temporarily enable them
10521066
// by default for users targeting generic AArch64. The extensions do not
@@ -1184,6 +1198,10 @@ def : ProcessorModel<"a64fx", A64FXModel, ProcessorFeatures.A64FX,
11841198
def : ProcessorModel<"carmel", NoSchedModel, ProcessorFeatures.Carmel,
11851199
[TuneCarmel]>;
11861200

1201+
// Ampere Computing
1202+
def : ProcessorModel<"ampere1", Ampere1Model, ProcessorFeatures.Ampere1,
1203+
[TuneAmpere1]>;
1204+
11871205
//===----------------------------------------------------------------------===//
11881206
// Assembly parser
11891207
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)