mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[AArch64] Add basic support for Qualcomm's Saphira CPU.
llvm-svn: 314105
This commit is contained in:
parent
42fcce654e
commit
78be6742d5
@ -84,6 +84,8 @@ AARCH64_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_CRC))
|
||||
AARCH64_CPU_NAME("falkor", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_CRC | AArch64::AEK_RDM))
|
||||
AARCH64_CPU_NAME("saphira", ARMV8_3A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_PROFILE))
|
||||
AARCH64_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_CRC))
|
||||
AARCH64_CPU_NAME("thunderx2t99", ARMV8_1A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
|
@ -212,6 +212,7 @@ StringRef sys::detail::getHostCPUNameForARM(
|
||||
.Case("0x800", "cortex-a73")
|
||||
.Case("0x801", "cortex-a73")
|
||||
.Case("0xc00", "falkor")
|
||||
.Case("0xc01", "saphira")
|
||||
.Default("generic");
|
||||
|
||||
return "generic";
|
||||
|
@ -348,6 +348,20 @@ def ProcFalkor : SubtargetFeature<"falkor", "ARMProcFamily", "Falkor",
|
||||
FeatureSlowSTRQro
|
||||
]>;
|
||||
|
||||
def ProcSaphira : SubtargetFeature<"saphira", "ARMProcFamily", "Saphira",
|
||||
"Qualcomm Saphira processors", [
|
||||
FeatureCrypto,
|
||||
FeatureCustomCheapAsMoveHandling,
|
||||
FeatureFPARMv8,
|
||||
FeatureNEON,
|
||||
FeatureSPE,
|
||||
FeaturePerfMon,
|
||||
FeaturePostRAScheduler,
|
||||
FeaturePredictableSelectIsExpensive,
|
||||
FeatureZCZeroing,
|
||||
FeatureLSLFast,
|
||||
HasV8_3aOps]>;
|
||||
|
||||
def ProcThunderX2T99 : SubtargetFeature<"thunderx2t99", "ARMProcFamily",
|
||||
"ThunderX2T99",
|
||||
"Cavium ThunderX2 processors", [
|
||||
@ -426,6 +440,7 @@ def : ProcessorModel<"exynos-m1", ExynosM1Model, [ProcExynosM1]>;
|
||||
def : ProcessorModel<"exynos-m2", ExynosM1Model, [ProcExynosM2]>;
|
||||
def : ProcessorModel<"exynos-m3", ExynosM1Model, [ProcExynosM2]>;
|
||||
def : ProcessorModel<"falkor", FalkorModel, [ProcFalkor]>;
|
||||
def : ProcessorModel<"saphira", FalkorModel, [ProcSaphira]>;
|
||||
def : ProcessorModel<"kryo", KryoModel, [ProcKryo]>;
|
||||
// Cavium ThunderX/ThunderX T8X Processors
|
||||
def : ProcessorModel<"thunderx", ThunderXT8XModel, [ProcThunderX]>;
|
||||
|
@ -95,6 +95,11 @@ void AArch64Subtarget::initializeProperties() {
|
||||
MinPrefetchStride = 2048;
|
||||
MaxPrefetchIterationsAhead = 8;
|
||||
break;
|
||||
case Saphira:
|
||||
MaxInterleaveFactor = 4;
|
||||
// FIXME: remove this to enable 64-bit SLP if performance looks good.
|
||||
MinVectorRegisterBitWidth = 128;
|
||||
break;
|
||||
case Kryo:
|
||||
MaxInterleaveFactor = 4;
|
||||
VectorInsertExtractBaseCost = 2;
|
||||
|
@ -50,6 +50,7 @@ public:
|
||||
ExynosM1,
|
||||
Falkor,
|
||||
Kryo,
|
||||
Saphira,
|
||||
ThunderX2T99,
|
||||
ThunderX,
|
||||
ThunderXT81,
|
||||
|
@ -2,6 +2,7 @@
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm -aarch64-neon-syntax=generic | FileCheck %s --check-prefix=CHECK-V81a
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mcpu=falkor -aarch64-neon-syntax=generic | FileCheck %s --check-prefix=CHECK-V81a
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+v8.1a -aarch64-neon-syntax=generic | FileCheck %s --check-prefix=CHECK-V81a
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mcpu=saphira -aarch64-neon-syntax=generic | FileCheck %s --check-prefix=CHECK-V81a
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+v8.1a -aarch64-neon-syntax=apple | FileCheck %s --check-prefix=CHECK-V81a-apple
|
||||
|
||||
declare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>)
|
||||
|
@ -1,5 +1,6 @@
|
||||
; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-post-ra -verify-machineinstrs -mattr=+lse < %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-post-ra -verify-machineinstrs -mattr=+lse < %s | FileCheck %s --check-prefix=CHECK-REG
|
||||
; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-post-ra -verify-machineinstrs -mcpu=saphira < %s | FileCheck %s
|
||||
|
||||
; Point of CHECK-REG is to make sure UNPREDICTABLE instructions aren't created
|
||||
; (i.e. reusing a register for status & data in store exclusive).
|
||||
|
@ -13,6 +13,7 @@
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=exynos-m2 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=exynos-m3 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=falkor 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=saphira 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=kryo 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=thunderx2t99 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=invalidcpu 2>&1 | FileCheck %s --check-prefix=INVALID
|
||||
|
@ -9,6 +9,7 @@
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=exynos-m2 -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=exynos-m3 -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=falkor -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=saphira -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=kryo -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=thunderx2t99 -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mattr=+custom-cheap-as-move -o - %s | FileCheck %s
|
||||
|
@ -114,6 +114,9 @@ TEST(getLinuxHostCPUName, AArch64) {
|
||||
EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x51\n"
|
||||
"CPU part : 0xc00"),
|
||||
"falkor");
|
||||
EXPECT_EQ(sys::detail::getHostCPUNameForARM("CPU implementer : 0x51\n"
|
||||
"CPU part : 0xc01"),
|
||||
"saphira");
|
||||
|
||||
// MSM8992/4 weirdness
|
||||
StringRef MSM8992ProcCpuInfo = R"(
|
||||
|
@ -789,6 +789,20 @@ TEST(TargetParserTest, testAArch64Extension) {
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_FALSE(testAArch64Extension("kryo",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "crc"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "lse"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "rcpc"));
|
||||
EXPECT_TRUE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "profile"));
|
||||
EXPECT_FALSE(testAArch64Extension("saphira",
|
||||
AArch64::ArchKind::INVALID, "fullfp16"));
|
||||
EXPECT_FALSE(testAArch64Extension("thunderx2t99",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_FALSE(testAArch64Extension("thunderx",
|
||||
|
Loading…
x
Reference in New Issue
Block a user