mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[AArch64] Make the TargetParser add CPU exts provided by the arch.
Otherwise, each CPU has to manually specify the extensions it supports, even though they have to be a superset of the base arch extensions. And when there's redundant data there's stale data, so most of the CPUs lie about the features they support (almost none lists AEK_FP). Instead, do the saner thing: add the optional extensions on top of the base extensions provided by the architecture. The ARM TargetParser has the same behavior. Differential Revision: https://reviews.llvm.org/D32780 llvm-svn: 302078
This commit is contained in:
parent
019ae7d515
commit
64c0163225
@ -51,38 +51,37 @@ AARCH64_ARCH_EXT_NAME("ras", AArch64::AEK_RAS, "+ras", "-ras")
|
|||||||
#define AARCH64_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT)
|
#define AARCH64_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT)
|
||||||
#endif
|
#endif
|
||||||
AARCH64_CPU_NAME("cortex-a35", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("cortex-a35", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("cortex-a53", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, true,
|
AARCH64_CPU_NAME("cortex-a53", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, true,
|
||||||
( AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("cortex-a57", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("cortex-a57", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("cortex-a72", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("cortex-a72", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("cortex-a73", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("cortex-a73", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("cyclone", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("cyclone", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_NONE))
|
||||||
AARCH64_CPU_NAME("exynos-m1", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("exynos-m1", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("exynos-m2", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("exynos-m2", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("exynos-m3", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("exynos-m3", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("falkor", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("falkor", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("kryo", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("kryo", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO))
|
(AArch64::AEK_CRC))
|
||||||
AARCH64_CPU_NAME("thunderx2t99", AK_ARMV8_1A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("thunderx2t99", AK_ARMV8_1A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_LSE | AArch64::AEK_CRC |
|
(AArch64::AEK_NONE))
|
||||||
AArch64::AEK_CRYPTO))
|
|
||||||
AARCH64_CPU_NAME("thunderx", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("thunderx", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_PROFILE))
|
(AArch64::AEK_CRC | AArch64::AEK_PROFILE))
|
||||||
AARCH64_CPU_NAME("thunderxt88", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("thunderxt88", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_PROFILE))
|
(AArch64::AEK_CRC | AArch64::AEK_PROFILE))
|
||||||
AARCH64_CPU_NAME("thunderxt81", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("thunderxt81", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_PROFILE))
|
(AArch64::AEK_CRC | AArch64::AEK_PROFILE))
|
||||||
AARCH64_CPU_NAME("thunderxt83", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
AARCH64_CPU_NAME("thunderxt83", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
|
||||||
(AArch64::AEK_SIMD | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_PROFILE))
|
(AArch64::AEK_CRC | AArch64::AEK_PROFILE))
|
||||||
// Invalid CPU
|
// Invalid CPU
|
||||||
AARCH64_CPU_NAME("invalid", AK_INVALID, FK_INVALID, true, AArch64::AEK_INVALID)
|
AARCH64_CPU_NAME("invalid", AK_INVALID, FK_INVALID, true, AArch64::AEK_INVALID)
|
||||||
#undef AARCH64_CPU_NAME
|
#undef AARCH64_CPU_NAME
|
||||||
|
@ -423,7 +423,7 @@ unsigned llvm::AArch64::getDefaultExtensions(StringRef CPU, unsigned ArchKind) {
|
|||||||
|
|
||||||
return StringSwitch<unsigned>(CPU)
|
return StringSwitch<unsigned>(CPU)
|
||||||
#define AARCH64_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) \
|
#define AARCH64_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) \
|
||||||
.Case(NAME, DEFAULT_EXT)
|
.Case(NAME, AArch64ARCHNames[(unsigned)ArchKind::ID].ArchBaseExtensions | DEFAULT_EXT)
|
||||||
#include "llvm/Support/AArch64TargetParser.def"
|
#include "llvm/Support/AArch64TargetParser.def"
|
||||||
.Default(AArch64::AEK_INVALID);
|
.Default(AArch64::AEK_INVALID);
|
||||||
}
|
}
|
||||||
|
@ -611,48 +611,58 @@ bool testAArch64CPU(StringRef CPUName, StringRef ExpectedArch,
|
|||||||
TEST(TargetParserTest, testAArch64CPU) {
|
TEST(TargetParserTest, testAArch64CPU) {
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"invalid", "invalid", "invalid",
|
"invalid", "invalid", "invalid",
|
||||||
AArch64::AEK_INVALID, ""));
|
AArch64::AEK_NONE, ""));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"generic", "invalid", "none",
|
"generic", "invalid", "none",
|
||||||
AArch64::AEK_NONE, ""));
|
AArch64::AEK_NONE, ""));
|
||||||
|
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cortex-a35", "armv8-a", "crypto-neon-fp-armv8",
|
"cortex-a35", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cortex-a53", "armv8-a", "crypto-neon-fp-armv8",
|
"cortex-a53", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cortex-a57", "armv8-a", "crypto-neon-fp-armv8",
|
"cortex-a57", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cortex-a72", "armv8-a", "crypto-neon-fp-armv8",
|
"cortex-a72", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cortex-a73", "armv8-a", "crypto-neon-fp-armv8",
|
"cortex-a73", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"cyclone", "armv8-a", "crypto-neon-fp-armv8",
|
"cyclone", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRYPTO | AArch64::AEK_FP | AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"exynos-m1", "armv8-a", "crypto-neon-fp-armv8",
|
"exynos-m1", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"exynos-m2", "armv8-a", "crypto-neon-fp-armv8",
|
"exynos-m2", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"exynos-m3", "armv8-a", "crypto-neon-fp-armv8",
|
"exynos-m3", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"falkor", "armv8-a", "crypto-neon-fp-armv8",
|
"falkor", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"kryo", "armv8-a", "crypto-neon-fp-armv8",
|
"kryo", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD, "8-A"));
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
|
||||||
|
AArch64::AEK_SIMD, "8-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8",
|
"thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE |
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE |
|
||||||
AArch64::AEK_SIMD, "8.1-A"));
|
AArch64::AEK_FP | AArch64::AEK_SIMD, "8.1-A"));
|
||||||
EXPECT_TRUE(testAArch64CPU(
|
EXPECT_TRUE(testAArch64CPU(
|
||||||
"thunderx", "armv8-a", "crypto-neon-fp-armv8",
|
"thunderx", "armv8-a", "crypto-neon-fp-armv8",
|
||||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD |
|
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_SIMD |
|
||||||
|
Loading…
Reference in New Issue
Block a user