forked from OSchip/llvm-project
[AArch64][ARM] Enablement of Cortex-A710 Support
Phabricator review: https://reviews.llvm.org/D113256
This commit is contained in:
parent
c772a9b6eb
commit
8e47b83ec9
|
@ -194,6 +194,7 @@ Arm and AArch64 Support in Clang
|
|||
- Support has been added for the following processors (command-line identifiers in parentheses):
|
||||
- Arm Cortex-A510 (``cortex-a510``)
|
||||
- Arm Cortex-X2 (``cortex-x2``)
|
||||
- Arm Cortex-A710 (``cortex-A710``)
|
||||
|
||||
- The -mtune flag is no longer ignored for AArch64. It is now possible to
|
||||
tune code generation for a particular CPU with -mtune without setting any
|
||||
|
|
|
@ -413,6 +413,15 @@
|
|||
// RUN: %clang -target aarch64 -mcpu=cortex-x2+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-X2-CRYPTO %s
|
||||
// CORTEX-X2-CRYPTO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+sm4" "-target-feature" "+sha3" "-target-feature" "+sha2" "-target-feature" "+aes"
|
||||
|
||||
// RUN: %clang -target aarch64 -mcpu=cortex-a710 -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A710 %s
|
||||
// CORTEX-A710: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a710"
|
||||
// CORTEX-A710-NOT: "-target-feature" "{{[+-]}}sm4"
|
||||
// CORTEX-A710-NOT: "-target-feature" "{{[+-]}}sha3"
|
||||
// CORTEX-A710-NOT: "-target-feature" "{{[+-]}}aes"
|
||||
// CORTEX-A710-SAME: {{$}}
|
||||
// RUN: %clang -target aarch64 -mcpu=cortex-a710+crypto -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A710-CRYPTO %s
|
||||
// CORTEX-A710-CRYPTO: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-feature" "+sm4" "-target-feature" "+sha3" "-target-feature" "+sha2" "-target-feature" "+aes"
|
||||
|
||||
// RUN: %clang -target aarch64_be -mcpu=cortex-a57 -### -c %s 2>&1 | FileCheck -check-prefix=CA57-BE %s
|
||||
// RUN: %clang -target aarch64 -mbig-endian -mcpu=cortex-a57 -### -c %s 2>&1 | FileCheck -check-prefix=CA57-BE %s
|
||||
// RUN: %clang -target aarch64_be -mbig-endian -mcpu=cortex-a57 -### -c %s 2>&1 | FileCheck -check-prefix=CA57-BE %s
|
||||
|
|
|
@ -949,6 +949,17 @@
|
|||
// CHECK-CORTEX-A78C-MFPU: "-target-feature" "+sha2"
|
||||
// CHECK-CORTEX-A78C-MFPU: "-target-feature" "+aes"
|
||||
|
||||
// RUN: %clang -target armv8a-arm-none-eabi -mcpu=cortex-a710 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A710 %s
|
||||
// RUN: %clang -target armv8a-arm-none-eabi -mcpu=cortex-a710 -mfpu=crypto-neon-fp-armv8 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A710-MFPU %s
|
||||
// CHECK-CORTEX-A710: "-cc1"{{.*}} "-triple" "armv9a-{{.*}} "-target-cpu" "cortex-a710"
|
||||
// CHECK-CORTEX-A710-NOT: "-target-feature" "{{[+-]}}sm4"
|
||||
// CHECK-CORTEX-A710-NOT: "-target-feature" "{{[+-]}}sha3"
|
||||
// CHECK-CORTEX-A710: "-target-feature" "-aes"
|
||||
// CHECK-CORTEX-A710-SAME: {{$}}
|
||||
// CHECK-CORTEX-A710-MFPU: "-cc1"{{.*}} "-target-feature" "+fp-armv8"
|
||||
// CHECK-CORTEX-A710-MFPU: "-target-feature" "+sha2"
|
||||
// CHECK-CORTEX-A710-MFPU: "-target-feature" "+aes"
|
||||
|
||||
// RUN: %clang -target arm -mcpu=cortex-m23 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-CPUV8MBASE %s
|
||||
// CHECK-CPUV8MBASE: "-cc1"{{.*}} "-triple" "thumbv8m.base-
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// Use CHECK-NEXT instead of multiple CHECK-SAME to ensure we will fail if there is anything extra in the output.
|
||||
// RUN: not %clang_cc1 -triple armv5--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix ARM
|
||||
// ARM: error: unknown target CPU 'not-a-cpu'
|
||||
// ARM-NEXT: note: valid target CPU values are: arm8, arm810, strongarm, strongarm110, strongarm1100, strongarm1110, arm7tdmi, arm7tdmi-s, arm710t, arm720t, arm9, arm9tdmi, arm920, arm920t, arm922t, arm940t, ep9312, arm10tdmi, arm1020t, arm9e, arm946e-s, arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1176jz-s, arm1176jzf-s, arm1156t2-s, arm1156t2f-s, cortex-m0, cortex-m0plus, cortex-m1, sc000, cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17, krait, cortex-r4, cortex-r4f, cortex-r5, cortex-r7, cortex-r8, cortex-r52, sc300, cortex-m3, cortex-m4, cortex-m7, cortex-m23, cortex-m33, cortex-m35p, cortex-m55, cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-x1, neoverse-n1, neoverse-n2, neoverse-v1, cyclone, exynos-m3, exynos-m4, exynos-m5, kryo, iwmmxt, xscale, swift{{$}}
|
||||
// ARM-NEXT: note: valid target CPU values are: arm8, arm810, strongarm, strongarm110, strongarm1100, strongarm1110, arm7tdmi, arm7tdmi-s, arm710t, arm720t, arm9, arm9tdmi, arm920, arm920t, arm922t, arm940t, ep9312, arm10tdmi, arm1020t, arm9e, arm946e-s, arm966e-s, arm968e-s, arm10e, arm1020e, arm1022e, arm926ej-s, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1176jz-s, arm1176jzf-s, arm1156t2-s, arm1156t2f-s, cortex-m0, cortex-m0plus, cortex-m1, sc000, cortex-a5, cortex-a7, cortex-a8, cortex-a9, cortex-a12, cortex-a15, cortex-a17, krait, cortex-r4, cortex-r4f, cortex-r5, cortex-r7, cortex-r8, cortex-r52, sc300, cortex-m3, cortex-m4, cortex-m7, cortex-m23, cortex-m33, cortex-m35p, cortex-m55, cortex-a32, cortex-a35, cortex-a53, cortex-a55, cortex-a57, cortex-a72, cortex-a73, cortex-a75, cortex-a76, cortex-a76ae, cortex-a77, cortex-a78, cortex-a78c, cortex-a710, cortex-x1, neoverse-n1, neoverse-n2, neoverse-v1, cyclone, exynos-m3, exynos-m4, exynos-m5, kryo, iwmmxt, xscale, swift{{$}}
|
||||
|
||||
// RUN: not %clang_cc1 -triple arm64--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix AARCH64
|
||||
// AARCH64: error: unknown target CPU 'not-a-cpu'
|
||||
// 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-r82, cortex-x1, 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{{$}}
|
||||
// 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-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{{$}}
|
||||
|
||||
// RUN: not %clang_cc1 -triple arm64--- -tune-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix TUNE_AARCH64
|
||||
// TUNE_AARCH64: error: unknown target CPU 'not-a-cpu'
|
||||
// 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-r82, cortex-x1, 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{{$}}
|
||||
// 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-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{{$}}
|
||||
|
||||
// RUN: not %clang_cc1 -triple i386--- -target-cpu not-a-cpu -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix X86
|
||||
// X86: error: unknown target CPU 'not-a-cpu'
|
||||
|
|
|
@ -177,6 +177,10 @@ AARCH64_CPU_NAME("cortex-a78", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
|||
AARCH64_CPU_NAME("cortex-a78c", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC |
|
||||
AArch64::AEK_SSBS))
|
||||
AARCH64_CPU_NAME("cortex-a710", ARMV9A, FK_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_MTE | AArch64::AEK_PAUTH | AArch64::AEK_FLAGM |
|
||||
AArch64::AEK_SB | AArch64::AEK_I8MM | AArch64::AEK_FP16FML |
|
||||
AArch64::AEK_SVE2BITPERM | AArch64::AEK_BF16))
|
||||
AARCH64_CPU_NAME("cortex-r82", ARMV8R, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_LSE))
|
||||
AARCH64_CPU_NAME("cortex-x1", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
|
|
|
@ -311,6 +311,9 @@ ARM_CPU_NAME("cortex-a78", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
|||
(ARM::AEK_FP16 | ARM::AEK_DOTPROD))
|
||||
ARM_CPU_NAME("cortex-a78c", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
ARM::AEK_FP16 | ARM::AEK_DOTPROD)
|
||||
ARM_CPU_NAME("cortex-a710", ARMV9A, FK_NEON_FP_ARMV8, false,
|
||||
(ARM::AEK_DOTPROD | ARM::AEK_FP16FML | ARM::AEK_BF16 | ARM::AEK_SB |
|
||||
ARM::AEK_I8MM))
|
||||
ARM_CPU_NAME("cortex-x1", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(ARM::AEK_FP16 | ARM::AEK_DOTPROD))
|
||||
ARM_CPU_NAME("neoverse-n1", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
|
|
|
@ -680,6 +680,12 @@ def TuneA78C : SubtargetFeature<"a78c", "ARMProcFamily",
|
|||
FeatureFuseAES,
|
||||
FeaturePostRAScheduler]>;
|
||||
|
||||
def TuneA710 : SubtargetFeature<"a710", "ARMProcFamily", "CortexA710",
|
||||
"Cortex-A710 ARM processors", [
|
||||
FeatureFuseAES,
|
||||
FeaturePostRAScheduler,
|
||||
FeatureCmpBccFusion]>;
|
||||
|
||||
def TuneR82 : SubtargetFeature<"cortex-r82", "ARMProcFamily",
|
||||
"CortexR82",
|
||||
"Cortex-R82 ARM processors", [
|
||||
|
@ -943,6 +949,9 @@ def ProcessorFeatures {
|
|||
FeatureFlagM, FeatureFP16FML, FeaturePAuth,
|
||||
FeaturePerfMon, FeatureRCPC, FeatureSPE,
|
||||
FeatureSSBS];
|
||||
list<SubtargetFeature> A710 = [HasV9_0aOps, FeatureNEON, FeaturePerfMon,
|
||||
FeatureETE, FeatureMTE, FeatureFP16FML,
|
||||
FeatureSVE2BitPerm, FeatureBF16, FeatureMatMulInt8];
|
||||
list<SubtargetFeature> R82 = [HasV8_0rOps];
|
||||
list<SubtargetFeature> X1 = [HasV8_2aOps, FeatureCrypto, FeatureFPARMv8,
|
||||
FeatureNEON, FeatureRCPC, FeaturePerfMon,
|
||||
|
@ -1055,6 +1064,8 @@ def : ProcessorModel<"cortex-a78", CortexA57Model, ProcessorFeatures.A78,
|
|||
[TuneA78]>;
|
||||
def : ProcessorModel<"cortex-a78c", CortexA57Model, ProcessorFeatures.A78C,
|
||||
[TuneA78C]>;
|
||||
def : ProcessorModel<"cortex-a710", CortexA57Model, ProcessorFeatures.A710,
|
||||
[TuneA710]>;
|
||||
def : ProcessorModel<"cortex-r82", CortexA55Model, ProcessorFeatures.R82,
|
||||
[TuneR82]>;
|
||||
def : ProcessorModel<"cortex-x1", CortexA57Model, ProcessorFeatures.X1,
|
||||
|
|
|
@ -82,10 +82,6 @@ void AArch64Subtarget::initializeProperties() {
|
|||
case CortexA55:
|
||||
PrefFunctionLogAlignment = 4;
|
||||
break;
|
||||
case CortexA510:
|
||||
PrefFunctionLogAlignment = 4;
|
||||
VScaleForTuning = 1;
|
||||
break;
|
||||
case CortexA57:
|
||||
MaxInterleaveFactor = 4;
|
||||
PrefFunctionLogAlignment = 4;
|
||||
|
@ -104,6 +100,8 @@ void AArch64Subtarget::initializeProperties() {
|
|||
case CortexX1:
|
||||
PrefFunctionLogAlignment = 4;
|
||||
break;
|
||||
case CortexA510:
|
||||
case CortexA710:
|
||||
case CortexX2:
|
||||
PrefFunctionLogAlignment = 4;
|
||||
VScaleForTuning = 1;
|
||||
|
|
|
@ -60,6 +60,7 @@ public:
|
|||
CortexA77,
|
||||
CortexA78,
|
||||
CortexA78C,
|
||||
CortexA710,
|
||||
CortexR82,
|
||||
CortexX1,
|
||||
CortexX2,
|
||||
|
|
|
@ -636,6 +636,8 @@ def ProcA78 : SubtargetFeature<"cortex-a78", "ARMProcFamily", "CortexA78",
|
|||
"Cortex-A78 ARM processors", []>;
|
||||
def ProcA78C : SubtargetFeature<"a78c", "ARMProcFamily", "CortexA78C",
|
||||
"Cortex-A78C ARM processors", []>;
|
||||
def ProcA710 : SubtargetFeature<"cortex-a710", "ARMProcFamily",
|
||||
"CortexA710", "Cortex-A710 ARM processors", []>;
|
||||
def ProcX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1",
|
||||
"Cortex-X1 ARM processors", []>;
|
||||
|
||||
|
@ -1380,6 +1382,14 @@ def : ProcNoItin<"cortex-a78c", [ARMv82a, ProcA78C,
|
|||
FeatureDotProd,
|
||||
FeatureFullFP16]>;
|
||||
|
||||
def : ProcNoItin<"cortex-a710", [ARMv9a, ProcA710,
|
||||
FeatureHWDivThumb,
|
||||
FeatureHWDivARM,
|
||||
FeatureFP16FML,
|
||||
FeatureBF16,
|
||||
FeatureMatMulInt8,
|
||||
FeatureSB]>;
|
||||
|
||||
def : ProcNoItin<"cortex-x1", [ARMv82a, ProcX1,
|
||||
FeatureHWDivThumb,
|
||||
FeatureHWDivARM,
|
||||
|
|
|
@ -295,6 +295,7 @@ void ARMSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
|
|||
case CortexA77:
|
||||
case CortexA78:
|
||||
case CortexA78C:
|
||||
case CortexA710:
|
||||
case CortexR4:
|
||||
case CortexR4F:
|
||||
case CortexR5:
|
||||
|
|
|
@ -65,6 +65,7 @@ protected:
|
|||
CortexA77,
|
||||
CortexA78,
|
||||
CortexA78C,
|
||||
CortexA710,
|
||||
CortexA8,
|
||||
CortexA9,
|
||||
CortexM3,
|
||||
|
|
|
@ -309,6 +309,13 @@ INSTANTIATE_TEST_SUITE_P(
|
|||
ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
|
||||
ARM::AEK_FP16 | ARM::AEK_DOTPROD,
|
||||
"8.2-A"),
|
||||
ARMCPUTestParams("cortex-a710", "armv9-a", "neon-fp-armv8",
|
||||
ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT |
|
||||
ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB |
|
||||
ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
|
||||
ARM::AEK_DOTPROD | ARM::AEK_FP16FML |
|
||||
ARM::AEK_BF16 | ARM::AEK_I8MM | ARM::AEK_SB,
|
||||
"9-A"),
|
||||
ARMCPUTestParams("cortex-a77", "armv8.2-a", "crypto-neon-fp-armv8",
|
||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP |
|
||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
|
||||
|
@ -386,7 +393,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||
ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP,
|
||||
"7-S")));
|
||||
|
||||
static constexpr unsigned NumARMCPUArchs = 86;
|
||||
static constexpr unsigned NumARMCPUArchs = 87;
|
||||
|
||||
TEST(TargetParserTest, testARMCPUArchList) {
|
||||
SmallVector<StringRef, NumARMCPUArchs> List;
|
||||
|
@ -984,6 +991,17 @@ INSTANTIATE_TEST_SUITE_P(
|
|||
AArch64::AEK_FP16 | AArch64::AEK_DOTPROD |
|
||||
AArch64::AEK_RCPC | AArch64::AEK_SSBS,
|
||||
"8.2-A"),
|
||||
ARMCPUTestParams("cortex-a710", "armv9-a", "neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS |
|
||||
AArch64::AEK_LSE | AArch64::AEK_RDM |
|
||||
AArch64::AEK_RCPC | AArch64::AEK_SVE2 |
|
||||
AArch64::AEK_DOTPROD | AArch64::AEK_MTE |
|
||||
AArch64::AEK_FP16FML | AArch64::AEK_SVE2BITPERM |
|
||||
AArch64::AEK_PAUTH | AArch64::AEK_FLAGM |
|
||||
AArch64::AEK_SB | AArch64::AEK_I8MM |
|
||||
AArch64::AEK_BF16,
|
||||
"9-A"),
|
||||
ARMCPUTestParams(
|
||||
"neoverse-v1", "armv8.4-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_RAS | AArch64::AEK_SVE | AArch64::AEK_SSBS |
|
||||
|
@ -1208,7 +1226,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||
AArch64::AEK_LSE | AArch64::AEK_RDM,
|
||||
"8.2-A")));
|
||||
|
||||
static constexpr unsigned NumAArch64CPUArchs = 51;
|
||||
static constexpr unsigned NumAArch64CPUArchs = 52;
|
||||
|
||||
TEST(TargetParserTest, testAArch64CPUArchList) {
|
||||
SmallVector<StringRef, NumAArch64CPUArchs> List;
|
||||
|
|
Loading…
Reference in New Issue