Skip to content

Commit 382d3a8

Browse files
Wei Zhaojoelkevinjones
authored andcommitted
[AARch64] Add Marvell ThunderX3T110 support
This is the first checkin to support Marvell ThunderX3T110. Initial definition of the micro-ops of the instructions in ThunderX3T110 is included. Differential Revision: https://reviews.llvm.org/D78129
1 parent 9ed9860 commit 382d3a8

22 files changed

+2101
-16
lines changed

clang/test/Driver/aarch64-cpus.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,15 @@
261261
// THUNDERX2T99-TUNE: "-cc1"{{.*}} "-triple" "aarch64{{(--)?}}"{{.*}} "-target-cpu" "generic"
262262
// THUNDERX2T99-TUNE-NOT: +v8.1a
263263

264+
// RUN: %clang -target aarch64 -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110 %s
265+
// RUN: %clang -target aarch64 -mlittle-endian -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110 %s
266+
// RUN: %clang -target aarch64_be -mlittle-endian -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110 %s
267+
// RUN: %clang -target aarch64 -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-TUNE %s
268+
// RUN: %clang -target aarch64 -mlittle-endian -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-TUNE %s
269+
// RUN: %clang -target aarch64_be -mlittle-endian -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-TUNE %s
270+
// THUNDERX3T110: "-cc1"{{.*}} "-triple" "aarch64{{(--)?}}"{{.*}} "-target-cpu" "thunderx3t110" "-target-feature" "+v8.3a"
271+
// THUNDERX3T110-TUNE: "-cc1"{{.*}} "-triple" "aarch64{{(--)?}}"{{.*}} "-target-cpu" "generic"
272+
264273
// RUN: %clang -target arm64 -mcpu=thunderx2t99 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX2T99 %s
265274
// RUN: %clang -target arm64 -mlittle-endian -mcpu=thunderx2t99 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX2T99 %s
266275
// RUN: %clang -target arm64 -mtune=thunderx2t99 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX2T99-TUNE %s
@@ -269,6 +278,13 @@
269278
// ARM64-THUNDERX2T99-TUNE: "-cc1"{{.*}} "-triple" "arm64{{.*}}" "-target-cpu" "generic"
270279
// ARM64-THUNDERX2T99-TUNE-NOT: +v8.1a
271280

281+
// RUN: %clang -target arm64 -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX3T110 %s
282+
// RUN: %clang -target arm64 -mlittle-endian -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX3T110 %s
283+
// RUN: %clang -target arm64 -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX3T110-TUNE %s
284+
// RUN: %clang -target arm64 -mlittle-endian -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=ARM64-THUNDERX3T110-TUNE %s
285+
// ARM64-THUNDERX3T110: "-cc1"{{.*}} "-triple" "arm64{{.*}}" "-target-cpu" "thunderx3t110" "-target-feature" "+v8.3a"
286+
// ARM64-THUNDERX3T110-TUNE: "-cc1"{{.*}} "-triple" "arm64{{.*}}" "-target-cpu" "generic"
287+
272288
// RUN: %clang -target aarch64 -mcpu=a64fx -### -c %s 2>&1 | FileCheck -check-prefix=A64FX %s
273289
// RUN: %clang -target aarch64 -mlittle-endian -mcpu=a64fx -### -c %s 2>&1 | FileCheck -check-prefix=A64FX %s
274290
// RUN: %clang -target aarch64 -mtune=a64fx -### -c %s 2>&1 | FileCheck -check-prefix=A64FX-TUNE %s
@@ -403,17 +419,29 @@
403419
// THUNDERX2T99-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "thunderx2t99"
404420
// THUNDERX2T99-BE-TUNE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic"
405421

422+
// RUN: %clang -target aarch64_be -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE %s
423+
// RUN: %clang -target aarch64 -mbig-endian -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE %s
424+
// RUN: %clang -target aarch64_be -mbig-endian -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE %s
425+
// RUN: %clang -target aarch64_be -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE-TUNE %s
426+
// RUN: %clang -target aarch64 -mbig-endian -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE-TUNE %s
427+
// RUN: %clang -target aarch64_be -mbig-endian -mtune=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=THUNDERX3T110-BE-TUNE %s
428+
// THUNDERX3T110-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "thunderx3t110"
429+
// THUNDERX3T110-BE-TUNE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic"
430+
406431
// RUN: %clang -target aarch64 -mcpu=cortex-a57 -mtune=cortex-a53 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-A57 %s
407432
// RUN: %clang -target aarch64 -mtune=cortex-a53 -mcpu=cortex-a57 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-A57 %s
408433
// RUN: %clang -target aarch64 -mcpu=cortex-a72 -mtune=cortex-a53 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-A72 %s
409434
// RUN: %clang -target aarch64 -mtune=cortex-a53 -mcpu=cortex-a72 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-A72 %s
410435
// RUN: %clang -target aarch64 -mtune=cortex-a53 -mcpu=cortex-a73 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-A73 %s
411436
// RUN: %clang -target aarch64 -mcpu=thunderx2t99 -mtune=cortex-a53 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-THUNDERX2T99 %s
412437
// RUN: %clang -target aarch64 -mtune=cortex-a53 -mcpu=thunderx2t99 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-THUNDERX2T99 %s
438+
// RUN: %clang -target aarch64 -mcpu=thunderx3t110 -mtune=cortex-a53 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-THUNDERX3T110 %s
439+
// RUN: %clang -target aarch64 -mtune=cortex-a53 -mcpu=thunderx3t110 -### -c %s 2>&1 | FileCheck -check-prefix=MCPU-MTUNE-THUNDERX3T110 %s
413440
// MCPU-MTUNE-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a57"
414441
// MCPU-MTUNE-A72: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a72"
415442
// MCPU-MTUNE-A73: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a73"
416443
// MCPU-MTUNE-THUNDERX2T99: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "thunderx2t99"
444+
// MCPU-MTUNE-THUNDERX3T110: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "thunderx3t110"
417445

418446
// RUN: %clang -target aarch64 -march=armv8.1a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV81A %s
419447
// RUN: %clang -target aarch64 -march=armv8.1-a -### -c %s 2>&1 | FileCheck -check-prefix=GENERICV81A %s

llvm/include/llvm/Support/AArch64TargetParser.def

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ AARCH64_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
165165
(AArch64::AEK_CRC))
166166
AARCH64_CPU_NAME("thunderx2t99", ARMV8_1A, FK_CRYPTO_NEON_FP_ARMV8, false,
167167
(AArch64::AEK_NONE))
168+
AARCH64_CPU_NAME("thunderx3t110", ARMV8_3A, FK_CRYPTO_NEON_FP_ARMV8, false,
169+
(AArch64::AEK_CRC | AEK_CRYPTO | AEK_FP | AEK_SIMD |
170+
AEK_LSE | AEK_RAND | AArch64::AEK_PROFILE |
171+
AArch64::AEK_RAS))
168172
AARCH64_CPU_NAME("thunderx", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
169173
(AArch64::AEK_CRC | AArch64::AEK_PROFILE))
170174
AARCH64_CPU_NAME("thunderxt88", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,10 @@ def SVEUnsupported : AArch64Unsupported {
472472
HasSVE2BitPerm];
473473
}
474474

475+
def PAUnsupported : AArch64Unsupported {
476+
let F = [HasPA];
477+
}
478+
475479
include "AArch64SchedA53.td"
476480
include "AArch64SchedA57.td"
477481
include "AArch64SchedCyclone.td"
@@ -482,6 +486,7 @@ include "AArch64SchedExynosM4.td"
482486
include "AArch64SchedExynosM5.td"
483487
include "AArch64SchedThunderX.td"
484488
include "AArch64SchedThunderX2T99.td"
489+
include "AArch64SchedThunderX3T110.td"
485490

486491
def ProcA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
487492
"Cortex-A35 ARM processors", [
@@ -830,6 +835,25 @@ def ProcThunderX2T99 : SubtargetFeature<"thunderx2t99", "ARMProcFamily",
830835
FeatureLSE,
831836
HasV8_1aOps]>;
832837

838+
def ProcThunderX3T110 : SubtargetFeature<"thunderx3t110", "ARMProcFamily",
839+
"ThunderX3T110",
840+
"Marvell ThunderX3 processors", [
841+
FeatureAggressiveFMA,
842+
FeatureCRC,
843+
FeatureCrypto,
844+
FeatureFPARMv8,
845+
FeatureArithmeticBccFusion,
846+
FeatureNEON,
847+
FeaturePostRAScheduler,
848+
FeaturePredictableSelectIsExpensive,
849+
FeatureLSE,
850+
FeaturePA,
851+
FeatureUseAA,
852+
FeatureBalanceFPOps,
853+
FeaturePerfMon,
854+
FeatureStrictAlign,
855+
HasV8_3aOps]>;
856+
833857
def ProcThunderX : SubtargetFeature<"thunderx", "ARMProcFamily", "ThunderX",
834858
"Cavium ThunderX processors", [
835859
FeatureCRC,
@@ -929,6 +953,8 @@ def : ProcessorModel<"thunderxt81", ThunderXT8XModel, [ProcThunderXT81]>;
929953
def : ProcessorModel<"thunderxt83", ThunderXT8XModel, [ProcThunderXT83]>;
930954
// Cavium ThunderX2T9X Processors. Formerly Broadcom Vulcan.
931955
def : ProcessorModel<"thunderx2t99", ThunderX2T99Model, [ProcThunderX2T99]>;
956+
// Marvell ThunderX3T110 Processors.
957+
def : ProcessorModel<"thunderx3t110", ThunderX3T110Model, [ProcThunderX3T110]>;
932958
// FIXME: HiSilicon TSV110 is currently modeled as a Cortex-A57.
933959
def : ProcessorModel<"tsv110", CortexA57Model, [ProcTSV110]>;
934960

llvm/lib/Target/AArch64/AArch64SchedA53.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def CortexA53Model : SchedMachineModel {
2626
// v 1.0 Spreadsheet
2727
let CompleteModel = 1;
2828

29-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
29+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
30+
PAUnsupported.F);
3031
}
3132

3233

llvm/lib/Target/AArch64/AArch64SchedA57.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ def CortexA57Model : SchedMachineModel {
3131
let LoopMicroOpBufferSize = 16;
3232
let CompleteModel = 1;
3333

34-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
34+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
35+
PAUnsupported.F);
3536
}
3637

3738
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/AArch64SchedCyclone.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ def CycloneModel : SchedMachineModel {
1818
let MispredictPenalty = 16; // 14-19 cycles are typical.
1919
let CompleteModel = 1;
2020

21-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
21+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
22+
PAUnsupported.F);
2223
}
2324

2425
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/AArch64SchedExynosM3.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def ExynosM3Model : SchedMachineModel {
2424
let MispredictPenalty = 16; // Minimum branch misprediction penalty.
2525
let CompleteModel = 1; // Use the default model otherwise.
2626

27-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
27+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
28+
PAUnsupported.F);
2829
}
2930

3031
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/AArch64SchedExynosM4.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def ExynosM4Model : SchedMachineModel {
2424
let MispredictPenalty = 16; // Minimum branch misprediction penalty.
2525
let CompleteModel = 1; // Use the default model otherwise.
2626

27-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
27+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
28+
PAUnsupported.F);
2829
}
2930

3031
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/AArch64SchedExynosM5.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ def ExynosM5Model : SchedMachineModel {
2424
let MispredictPenalty = 15; // Minimum branch misprediction penalty.
2525
let CompleteModel = 1; // Use the default model otherwise.
2626

27-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
27+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
28+
PAUnsupported.F);
2829
}
2930

3031
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/AArch64SchedFalkor.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ def FalkorModel : SchedMachineModel {
2323
let MispredictPenalty = 11; // Minimum branch misprediction penalty.
2424
let CompleteModel = 1;
2525

26-
list<Predicate> UnsupportedFeatures = SVEUnsupported.F;
27-
26+
list<Predicate> UnsupportedFeatures = !listconcat(SVEUnsupported.F,
27+
PAUnsupported.F);
2828
// FIXME: Remove when all errors have been fixed.
2929
let FullInstRWOverlapCheck = 0;
3030
}

0 commit comments

Comments
 (0)