mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-18 18:42:46 +02:00
[AArch64, ARM] Add support for Exynos M5
Add Exynos M5 support and test cases. llvm-svn: 356793
This commit is contained in:
parent
9f63b16d94
commit
c19776dc48
@ -108,7 +108,9 @@ AARCH64_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
AARCH64_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_CRC))
|
||||
AARCH64_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_FP16 | AArch64::AEK_DOTPROD))
|
||||
(AArch64::AEK_DOTPROD | AArch64::AEK_FP16))
|
||||
AARCH64_CPU_NAME("exynos-m5", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_DOTPROD | AArch64::AEK_FP16))
|
||||
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,
|
||||
|
@ -272,6 +272,8 @@ ARM_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
|
||||
ARM_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
|
||||
ARM_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(ARM::AEK_FP16 | ARM::AEK_DOTPROD))
|
||||
ARM_CPU_NAME("exynos-m5", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(ARM::AEK_FP16 | ARM::AEK_DOTPROD))
|
||||
ARM_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
|
||||
// Non-standard Arch names.
|
||||
ARM_CPU_NAME("iwmmxt", IWMMXT, FK_NONE, true, ARM::AEK_NONE)
|
||||
|
@ -723,6 +723,7 @@ def : ProcessorModel<"exynos-m1", ExynosM1Model, [ProcExynosM1]>;
|
||||
def : ProcessorModel<"exynos-m2", ExynosM1Model, [ProcExynosM2]>;
|
||||
def : ProcessorModel<"exynos-m3", ExynosM3Model, [ProcExynosM3]>;
|
||||
def : ProcessorModel<"exynos-m4", ExynosM4Model, [ProcExynosM4]>;
|
||||
def : ProcessorModel<"exynos-m5", ExynosM4Model, [ProcExynosM4]>;
|
||||
def : ProcessorModel<"falkor", FalkorModel, [ProcFalkor]>;
|
||||
def : ProcessorModel<"saphira", FalkorModel, [ProcSaphira]>;
|
||||
def : ProcessorModel<"kryo", KryoModel, [ProcKryo]>;
|
||||
|
@ -1108,6 +1108,9 @@ def : ProcNoItin<"exynos-m3", [ARMv8a, ProcExynos]>;
|
||||
def : ProcNoItin<"exynos-m4", [ARMv82a, ProcExynos,
|
||||
FeatureFullFP16,
|
||||
FeatureDotProd]>;
|
||||
def : ProcNoItin<"exynos-m5", [ARMv82a, ProcExynos,
|
||||
FeatureFullFP16,
|
||||
FeatureDotProd]>;
|
||||
|
||||
def : ProcNoItin<"kryo", [ARMv8a, ProcKryo,
|
||||
FeatureHWDivThumb,
|
||||
|
@ -15,6 +15,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=exynos-m4 2>&1 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=arm64-unknown-unknown -mcpu=exynos-m5 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
|
||||
|
@ -1,6 +1,7 @@
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mattr=fuse-address | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m3 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m4 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m5 | FileCheck %s
|
||||
|
||||
target triple = "aarch64-unknown"
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m2 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m3 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m4 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m5 | FileCheck %s
|
||||
|
||||
declare <16 x i8> @llvm.aarch64.crypto.aese(<16 x i8> %d, <16 x i8> %k)
|
||||
declare <16 x i8> @llvm.aarch64.crypto.aesmc(<16 x i8> %d)
|
||||
|
@ -1,6 +1,7 @@
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mattr=fuse-csel | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m3 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m4 | FileCheck %s
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m5 | FileCheck %s
|
||||
|
||||
target triple = "aarch64-unknown"
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a57 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSE
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m3 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSE
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSE
|
||||
; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m5 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSE
|
||||
|
||||
@g = common local_unnamed_addr global i8* null, align 8
|
||||
|
||||
|
@ -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=exynos-m4 -o - %s | FileCheck %s
|
||||
; RUN: llc -mtriple=aarch64-linux-gnuabi -mcpu=exynos-m5 -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
|
||||
|
@ -150,6 +150,9 @@
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m4 | FileCheck %s --check-prefix=EXYNOS-M4
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m4 -enable-unsafe-fp-math -frame-pointer=all -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=EXYNOS-M1-FAST
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m4 -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m5 | FileCheck %s --check-prefix=EXYNOS-M5
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m5 -enable-unsafe-fp-math -frame-pointer=all -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=EXYNOS-M1-FAST
|
||||
; RUN: llc < %s -mtriple=armv8-linux-gnueabi -mcpu=exynos-m5 -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
|
||||
; RUN: llc < %s -mtriple=armv8.1a-linux-gnueabi -enable-unsafe-fp-math -frame-pointer=all -enable-no-infs-fp-math -enable-no-nans-fp-math -fp-contract=fast | FileCheck %s --check-prefix=GENERIC-ARMV8_1-A-FAST
|
||||
; RUN: llc < %s -mtriple=armv8.1a-linux-gnueabi -enable-sign-dependent-rounding-fp-math | FileCheck %s --check-prefix=DYN-ROUNDING
|
||||
; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mcpu=cortex-a7 | FileCheck %s --check-prefix=CORTEX-A7-CHECK
|
||||
@ -191,6 +194,8 @@
|
||||
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=exynos-m3 -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
|
||||
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=exynos-m4 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
|
||||
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=exynos-m4 -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
|
||||
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=exynos-m5 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
|
||||
; RUN: llc < %s -mtriple=armv8-none-linux-gnueabi -mcpu=exynos-m5 -mattr=+strict-align | FileCheck %s --check-prefix=STRICT-ALIGN
|
||||
|
||||
; ARMv7a
|
||||
; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mcpu=cortex-a7 | FileCheck %s --check-prefix=NO-STRICT-ALIGN
|
||||
@ -1667,6 +1672,29 @@
|
||||
; EXYNOS-M4-NOT: .eabi_attribute 28
|
||||
; EXYNOS-M4: .eabi_attribute 38, 1
|
||||
|
||||
; EXYNOS-M5: .cpu exynos-m5
|
||||
; EXYNOS-M5: .eabi_attribute 6, 14
|
||||
; EXYNOS-M5: .eabi_attribute 7, 65
|
||||
; EXYNOS-M5: .eabi_attribute 8, 1
|
||||
; EXYNOS-M5: .eabi_attribute 9, 2
|
||||
; EXYNOS-M5: .fpu crypto-neon-fp-armv8
|
||||
; EXYNOS-M5: .eabi_attribute 12, 4
|
||||
; EXYNOS-M5-NOT: .eabi_attribute 27
|
||||
; EXYNOS-M5: .eabi_attribute 36, 1
|
||||
; EXYNOS-M5: .eabi_attribute 42, 1
|
||||
; EXYNOS-M5-NOT: .eabi_attribute 44
|
||||
; EXYNOS-M5: .eabi_attribute 68, 3
|
||||
; EXYNOS-M5-NOT: .eabi_attribute 19
|
||||
;; We default to IEEE 754 compliance
|
||||
; EXYNOS-M5: .eabi_attribute 20, 1
|
||||
; EXYNOS-M5: .eabi_attribute 21, 1
|
||||
; EXYNOS-M5-NOT: .eabi_attribute 22
|
||||
; EXYNOS-M5: .eabi_attribute 23, 3
|
||||
; EXYNOS-M5: .eabi_attribute 24, 1
|
||||
; EXYNOS-M5: .eabi_attribute 25, 1
|
||||
; EXYNOS-M5-NOT: .eabi_attribute 28
|
||||
; EXYNOS-M5: .eabi_attribute 38, 1
|
||||
|
||||
; GENERIC-FPU-VFPV3-FP16: .fpu vfpv3-fp16
|
||||
; GENERIC-FPU-VFPV3-D16-FP16: .fpu vfpv3-d16-fp16
|
||||
; GENERIC-FPU-VFPV3XD: .fpu vfpv3xd
|
||||
|
@ -282,6 +282,12 @@ TEST(TargetParserTest, testARMCPU) {
|
||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_DOTPROD |
|
||||
ARM::AEK_FP16 | ARM::AEK_RAS,
|
||||
"8.2-A"));
|
||||
EXPECT_TRUE(testARMCPU("exynos-m5", "armv8.2-a", "crypto-neon-fp-armv8",
|
||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP |
|
||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
|
||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_DOTPROD |
|
||||
ARM::AEK_FP16 | ARM::AEK_RAS,
|
||||
"8.2-A"));
|
||||
EXPECT_TRUE(testARMCPU("cortex-m23", "armv8-m.base", "none",
|
||||
ARM::AEK_HWDIVTHUMB, "8-M.Baseline"));
|
||||
EXPECT_TRUE(testARMCPU("cortex-m33", "armv8-m.main", "fpv5-sp-d16",
|
||||
@ -297,7 +303,7 @@ TEST(TargetParserTest, testARMCPU) {
|
||||
"7-S"));
|
||||
}
|
||||
|
||||
static constexpr unsigned NumARMCPUArchs = 85;
|
||||
static constexpr unsigned NumARMCPUArchs = 86;
|
||||
|
||||
TEST(TargetParserTest, testARMCPUArchList) {
|
||||
SmallVector<StringRef, NumARMCPUArchs> List;
|
||||
@ -790,6 +796,12 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
AArch64::AEK_DOTPROD | AArch64::AEK_FP | AArch64::AEK_FP16 |
|
||||
AArch64::AEK_LSE | AArch64::AEK_RAS | AArch64::AEK_RDM |
|
||||
AArch64::AEK_SIMD, "8.2-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"exynos-m5", "armv8.2-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO |
|
||||
AArch64::AEK_DOTPROD | AArch64::AEK_FP | AArch64::AEK_FP16 |
|
||||
AArch64::AEK_LSE | AArch64::AEK_RAS | AArch64::AEK_RDM |
|
||||
AArch64::AEK_SIMD, "8.2-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"falkor", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
@ -831,7 +843,7 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
"8.2-A"));
|
||||
}
|
||||
|
||||
static constexpr unsigned NumAArch64CPUArchs = 23;
|
||||
static constexpr unsigned NumAArch64CPUArchs = 24;
|
||||
|
||||
TEST(TargetParserTest, testAArch64CPUArchList) {
|
||||
SmallVector<StringRef, NumAArch64CPUArchs> List;
|
||||
@ -908,6 +920,16 @@ TEST(TargetParserTest, testAArch64Extension) {
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m4",
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m5",
|
||||
AArch64::ArchKind::INVALID, "dotprod"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m5",
|
||||
AArch64::ArchKind::INVALID, "fp16"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m5",
|
||||
AArch64::ArchKind::INVALID, "lse"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m5",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_TRUE(testAArch64Extension("exynos-m5",
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_TRUE(testAArch64Extension("falkor",
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_FALSE(testAArch64Extension("kryo",
|
||||
|
Loading…
Reference in New Issue
Block a user