Skip to content

Commit 111f55e

Browse files
committed
[AArch64] Support HiSilicon's hip10c subtarget
1 parent f586021 commit 111f55e

File tree

11 files changed

+62
-4
lines changed

11 files changed

+62
-4
lines changed

clang/test/Driver/aarch64-hip10c.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: %clang -target aarch64_be -mcpu=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE %s
2+
// RUN: %clang -target aarch64 -mbig-endian -mcpu=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE %s
3+
// RUN: %clang -target aarch64_be -mbig-endian -mcpu=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE %s
4+
// RUN: %clang -target aarch64_be -mtune=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE-TUNE %s
5+
// RUN: %clang -target aarch64 -mbig-endian -mtune=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE-TUNE %s
6+
// RUN: %clang -target aarch64_be -mbig-endian -mtune=hip10c -### -c %s 2>&1 | FileCheck -check-prefix=hip10c-BE-TUNE %s
7+
// hip10c-BE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "hip10c"
8+
// hip10c-BE-TUNE: "-cc1"{{.*}} "-triple" "aarch64_be{{.*}}" "-target-cpu" "generic"

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-a715, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, 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, hip09, grace{{$}}
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-a715, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, 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, hip09, hip10c, 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-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-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, 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, hip09, grace{{$}}
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-a715, cortex-r82, cortex-x1, cortex-x1c, cortex-x2, cortex-x3, 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, hip09, hip10c, 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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,13 @@ inline constexpr CpuInfo CpuInfos[] = {
549549
AArch64::AEK_SHA3 | AArch64::AEK_FP16 | AArch64::AEK_PROFILE |
550550
AArch64::AEK_FP16FML | AArch64::AEK_SVE | AArch64::AEK_I8MM |
551551
AArch64::AEK_F32MM | AArch64::AEK_F64MM | AArch64::AEK_BF16)},
552+
{"hip10c", ARMV8_5A,
553+
(AArch64::AEK_F32MM | AArch64::AEK_F64MM | AArch64::AEK_FLAGM |
554+
AArch64::AEK_FP16 | AArch64::AEK_FP16FML | AArch64::AEK_MTE |
555+
AArch64::AEK_PAUTH | AArch64::AEK_PERFMON | AArch64::AEK_PROFILE |
556+
AArch64::AEK_RAND | AArch64::AEK_SB | AArch64::AEK_SHA2 |
557+
AArch64::AEK_SHA3 | AArch64::AEK_SM4 | AArch64::AEK_SSBS |
558+
AArch64::AEK_SVE | AArch64::AEK_BF16 | AArch64::AEK_I8MM)},
552559
};
553560

554561
// An alias for a CPU.

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,6 +1226,16 @@ def TuneHIP09 : SubtargetFeature<"hip09", "ARMProcFamily", "HIP09",
12261226
FeatureFuseMvnClz,
12271227
FeaturePostRAScheduler]>;
12281228

1229+
def TuneHIP10C : SubtargetFeature<"hip10c", "ARMProcFamily", "HIP10C",
1230+
"HiSilicon HIP10C processors", [
1231+
FeatureCustomCheapAsMoveHandling,
1232+
FeatureCmpBccFusion,
1233+
FeatureExperimentalZeroingPseudos,
1234+
FeatureFuseAES,
1235+
FeatureLSLFast,
1236+
FeatureAscendStoreAddress,
1237+
FeaturePostRAScheduler]>;
1238+
12291239
def TuneAmpere1 : SubtargetFeature<"ampere1", "ARMProcFamily", "Ampere1",
12301240
"Ampere Computing Ampere-1 processors", [
12311241
FeaturePostRAScheduler,
@@ -1386,6 +1396,10 @@ def ProcessorFeatures {
13861396
FeatureFullFP16, FeatureFP16FML, FeatureDotProd,
13871397
FeatureJS, FeatureComplxNum, FeatureSHA3, FeatureSM4,
13881398
FeatureSVE];
1399+
list<SubtargetFeature> HIP10C = [HasV8_5aOps, FeatureAES, FeatureFP16FML, FeatureFullFP16,
1400+
FeatureMatMulFP32, FeatureMatMulFP64, FeatureMTE, FeaturePerfMon,
1401+
FeatureRandGen, FeatureSHA2, FeatureSHA3, FeatureSM4, FeatureWFxT,
1402+
FeatureBF16, FeatureMatMulInt8];
13891403
list<SubtargetFeature> Ampere1 = [HasV8_6aOps, FeatureNEON, FeaturePerfMon,
13901404
FeatureSSBS, FeatureRandGen, FeatureSB,
13911405
FeatureSHA2, FeatureSHA3, FeatureAES];
@@ -1497,6 +1511,9 @@ def : ProcessorModel<"tsv110", TSV110Model, ProcessorFeatures.TSV110,
14971511
[TuneTSV110]>;
14981512
def : ProcessorModel<"hip09", HIP09Model, ProcessorFeatures.HIP09,
14991513
[TuneHIP09]>;
1514+
// FIXME: Hisilicon HIP10C is currently modeled as a Cortex-A57
1515+
def : ProcessorModel<"hip10c", CortexA57Model, ProcessorFeatures.HIP10C,
1516+
[TuneHIP10C]>;
15001517

15011518
// Support cyclone as an alias for apple-a7 so we can still LTO old bitcode.
15021519
def : ProcessorModel<"cyclone", CycloneModel, ProcessorFeatures.AppleA7,

llvm/lib/Target/AArch64/AArch64Subtarget.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,13 @@ void AArch64Subtarget::initializeProperties() {
273273
VScaleForTuning = 2;
274274
DefaultSVETFOpts = TailFoldingOpts::Simple;
275275
break;
276+
case HIP10C:
277+
CacheLineSize = 64;
278+
PrefFunctionAlignment = Align(16);
279+
PrefLoopAlignment = Align(4);
280+
VScaleForTuning = 2;
281+
DefaultSVETFOpts = TailFoldingOpts::Simple;
282+
break;
276283
case ThunderX3T110:
277284
CacheLineSize = 64;
278285
PrefFunctionAlignment = Align(16);

llvm/lib/Target/AArch64/AArch64Subtarget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
8888
ThunderXT88,
8989
ThunderX3T110,
9090
TSV110,
91-
HIP09
91+
HIP09,
92+
HIP10C
9293
};
9394

9495
protected:

llvm/lib/TargetParser/Host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ StringRef sys::detail::getHostCPUNameForARM(StringRef ProcCpuinfoContent) {
258258
return StringSwitch<const char *>(Part)
259259
.Case("0xd01", "tsv110")
260260
.Case("0xd02", "hip09")
261+
.Case("0xd45", "hip10c")
261262
.Default("generic");
262263

263264
if (Implementer == "0x51") // Qualcomm Technologies, Inc.

llvm/test/CodeGen/AArch64/cpus.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=thunderx3t110 2>&1 | FileCheck %s
3535
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=tsv110 2>&1 | FileCheck %s
3636
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=hip09 2>&1 | FileCheck %s
37+
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=hip10c 2>&1 | FileCheck %s
3738
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=apple-latest 2>&1 | FileCheck %s
3839
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=a64fx 2>&1 | FileCheck %s
3940
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=ampere1 2>&1 | FileCheck %s

llvm/test/CodeGen/AArch64/remat.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=thunderx2t99 -o - %s | FileCheck %s
2424
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=tsv110 -o - %s | FileCheck %s
2525
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=hip09 -o - %s | FileCheck %s
26+
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=hip10c -o - %s | FileCheck %s
2627
; RUN: llc -mtriple=aarch64-linux-gnuabi -mattr=+custom-cheap-as-move -o - %s | FileCheck %s
2728
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=thunderx3t110 -o - %s | FileCheck %s
2829
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=ampere1 -o - %s | FileCheck %s

llvm/unittests/TargetParser/Host.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ CPU part : 0x0a1
253253
EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x48\n"
254254
"CPU part : 0xd02"),
255255
"hip09");
256+
EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x48\n"
257+
"CPU part : 0xd45"),
258+
"hip10c");
256259

257260
// Verify A64FX.
258261
const std::string A64FXProcCpuInfo = R"(

0 commit comments

Comments
 (0)