mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-12 05:56:28 +00:00
[TargetParser][AArch64] Add support for RDM feature in the target parser.
Differential Revision: https://reviews.llvm.org/D37081 llvm-svn: 311659
This commit is contained in:
parent
acc2786097
commit
51ff968fb1
@ -24,16 +24,17 @@ AARCH64_ARCH("armv8-a", ARMV8A, "8-A", "v8", ARMBuildAttrs::CPUArch::v8_A,
|
||||
AARCH64_ARCH("armv8.1-a", ARMV8_1A, "8.1-A", "v8.1a",
|
||||
ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
|
||||
(AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_LSE))
|
||||
AArch64::AEK_SIMD | AArch64::AEK_LSE | AArch64::AEK_RDM))
|
||||
AARCH64_ARCH("armv8.2-a", ARMV8_2A, "8.2-A", "v8.2a",
|
||||
ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
|
||||
(AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE))
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
|
||||
AArch64::AEK_RDM))
|
||||
AARCH64_ARCH("armv8.3-a", ARMV8_3A, "8.3-A", "v8.3a",
|
||||
ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
|
||||
(AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
|
||||
AArch64::AEK_RCPC))
|
||||
AArch64::AEK_RDM | AArch64::AEK_RCPC))
|
||||
#undef AARCH64_ARCH
|
||||
|
||||
#ifndef AARCH64_ARCH_EXT_NAME
|
||||
@ -44,6 +45,7 @@ AARCH64_ARCH_EXT_NAME("invalid", AArch64::AEK_INVALID, nullptr, nullptr)
|
||||
AARCH64_ARCH_EXT_NAME("none", AArch64::AEK_NONE, nullptr, nullptr)
|
||||
AARCH64_ARCH_EXT_NAME("crc", AArch64::AEK_CRC, "+crc", "-crc")
|
||||
AARCH64_ARCH_EXT_NAME("lse", AArch64::AEK_LSE, "+lse", "-lse")
|
||||
AARCH64_ARCH_EXT_NAME("rdm", AArch64::AEK_RDM, "+rdm", "-rdm")
|
||||
AARCH64_ARCH_EXT_NAME("crypto", AArch64::AEK_CRYPTO, "+crypto","-crypto")
|
||||
AARCH64_ARCH_EXT_NAME("dotprod", AArch64::AEK_DOTPROD, "+dotprod","-dotprod")
|
||||
AARCH64_ARCH_EXT_NAME("fp", AArch64::AEK_FP, "+fp-armv8", "-fp-armv8")
|
||||
@ -81,7 +83,7 @@ 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("falkor", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||
(AArch64::AEK_CRC))
|
||||
(AArch64::AEK_CRC | AArch64::AEK_RDM))
|
||||
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,
|
||||
|
@ -167,9 +167,10 @@ enum ArchExtKind : unsigned {
|
||||
AEK_PROFILE = 1 << 6,
|
||||
AEK_RAS = 1 << 7,
|
||||
AEK_LSE = 1 << 8,
|
||||
AEK_SVE = 1 << 9,
|
||||
AEK_DOTPROD = 1 << 10,
|
||||
AEK_RCPC = 1 << 11
|
||||
AEK_RDM = 1 << 9,
|
||||
AEK_SVE = 1 << 10,
|
||||
AEK_DOTPROD = 1 << 11,
|
||||
AEK_RCPC = 1 << 12
|
||||
};
|
||||
|
||||
StringRef getCanonicalArchName(StringRef Arch);
|
||||
|
@ -458,6 +458,8 @@ bool llvm::AArch64::getExtensionFeatures(unsigned Extensions,
|
||||
Features.push_back("+ras");
|
||||
if (Extensions & AArch64::AEK_LSE)
|
||||
Features.push_back("+lse");
|
||||
if (Extensions & AArch64::AEK_RDM)
|
||||
Features.push_back("+rdm");
|
||||
if (Extensions & AArch64::AEK_SVE)
|
||||
Features.push_back("+sve");
|
||||
if (Extensions & AArch64::AEK_RCPC)
|
||||
|
@ -1,5 +1,6 @@
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -aarch64-neon-syntax=generic | FileCheck %s --check-prefix=CHECK-V8a
|
||||
; 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 -mattr=+v8.1a -aarch64-neon-syntax=apple | FileCheck %s --check-prefix=CHECK-V81a-apple
|
||||
|
||||
|
@ -671,8 +671,8 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
"cortex-a55", "armv8.2-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
|
||||
AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC,
|
||||
"8.2-A"));
|
||||
AArch64::AEK_RDM | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD |
|
||||
AArch64::AEK_RCPC, "8.2-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"cortex-a57", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
@ -689,8 +689,8 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
"cortex-a75", "armv8.2-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
|
||||
AArch64::AEK_FP16 | AArch64::AEK_DOTPROD | AArch64::AEK_RCPC,
|
||||
"8.2-A"));
|
||||
AArch64::AEK_RDM | AArch64::AEK_FP16 | AArch64::AEK_DOTPROD |
|
||||
AArch64::AEK_RCPC, "8.2-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"cyclone", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_SIMD, "8-A"));
|
||||
@ -709,7 +709,7 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"falkor", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
AArch64::AEK_SIMD, "8-A"));
|
||||
AArch64::AEK_SIMD | AArch64::AEK_RDM, "8-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"kryo", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||
@ -717,7 +717,7 @@ TEST(TargetParserTest, testAArch64CPU) {
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE |
|
||||
AArch64::AEK_FP | AArch64::AEK_SIMD, "8.1-A"));
|
||||
AArch64::AEK_RDM | AArch64::AEK_FP | AArch64::AEK_SIMD, "8.1-A"));
|
||||
EXPECT_TRUE(testAArch64CPU(
|
||||
"thunderx", "armv8-a", "crypto-neon-fp-armv8",
|
||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD |
|
||||
@ -785,6 +785,8 @@ TEST(TargetParserTest, testAArch64Extension) {
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_FALSE(testAArch64Extension("exynos-m1",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_TRUE(testAArch64Extension("falkor",
|
||||
AArch64::ArchKind::INVALID, "rdm"));
|
||||
EXPECT_FALSE(testAArch64Extension("kryo",
|
||||
AArch64::ArchKind::INVALID, "ras"));
|
||||
EXPECT_FALSE(testAArch64Extension("thunderx2t99",
|
||||
@ -811,7 +813,8 @@ TEST(TargetParserTest, AArch64ExtensionFeatures) {
|
||||
unsigned Extensions = AArch64::AEK_CRC | AArch64::AEK_CRYPTO |
|
||||
AArch64::AEK_FP | AArch64::AEK_SIMD |
|
||||
AArch64::AEK_FP16 | AArch64::AEK_PROFILE |
|
||||
AArch64::AEK_RAS | AArch64::AEK_SVE |
|
||||
AArch64::AEK_RAS | AArch64::AEK_LSE |
|
||||
AArch64::AEK_RDM | AArch64::AEK_SVE |
|
||||
AArch64::AEK_DOTPROD | AArch64::AEK_RCPC;
|
||||
|
||||
for (unsigned i = 0; i <= Extensions; i++)
|
||||
@ -841,6 +844,8 @@ TEST(TargetParserTest, AArch64ArchExtFeature) {
|
||||
{"fp16", "nofp16", "+fullfp16", "-fullfp16"},
|
||||
{"profile", "noprofile", "+spe", "-spe"},
|
||||
{"ras", "noras", "+ras", "-ras"},
|
||||
{"lse", "nolse", "+lse", "-lse"},
|
||||
{"rdm", "nordm", "+rdm", "-rdm"},
|
||||
{"sve", "nosve", "+sve", "-sve"},
|
||||
{"dotprod", "nodotprod", "+dotprod", "-dotprod"},
|
||||
{"rcpc", "norcpc", "+rcpc", "-rcpc" }};
|
||||
|
Loading…
Reference in New Issue
Block a user