aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/TargetParserTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/TargetParserTest.cpp')
-rw-r--r--llvm/unittests/Support/TargetParserTest.cpp292
1 files changed, 161 insertions, 131 deletions
diff --git a/llvm/unittests/Support/TargetParserTest.cpp b/llvm/unittests/Support/TargetParserTest.cpp
index a99df08..5bcb131 100644
--- a/llvm/unittests/Support/TargetParserTest.cpp
+++ b/llvm/unittests/Support/TargetParserTest.cpp
@@ -952,11 +952,11 @@ class AArch64CPUTestFixture
TEST_P(AArch64CPUTestFixture, testAArch64CPU) {
ARMCPUTestParams params = GetParam();
- const AArch64::ArchInfo &AI = AArch64::parseCpu(params.CPUName).Arch;
- EXPECT_EQ(params.ExpectedArch, AI.Name);
+ AArch64::ArchKind AK = AArch64::parseCPUArch(params.CPUName);
+ EXPECT_EQ(params.ExpectedArch, AArch64::getArchName(AK));
uint64_t default_extensions =
- AArch64::getDefaultExtensions(params.CPUName, AI);
+ AArch64::getDefaultExtensions(params.CPUName, AK);
EXPECT_PRED_FORMAT2(AssertSameExtensionFlags<ARM::ISAKind::AARCH64>,
params.ExpectedFlags, default_extensions);
}
@@ -1402,14 +1402,14 @@ TEST(TargetParserTest, testAArch64CPUArchList) {
// valid, and match the expected 'magic' count.
EXPECT_EQ(List.size(), NumAArch64CPUArchs);
for(StringRef CPU : List) {
- EXPECT_NE(AArch64::parseCpu(CPU).Arch, AArch64::INVALID);
+ EXPECT_NE(AArch64::parseCPUArch(CPU), AArch64::ArchKind::INVALID);
}
}
bool testAArch64Arch(StringRef Arch, StringRef DefaultCPU, StringRef SubArch,
unsigned ArchAttr) {
- const AArch64::ArchInfo &AI = AArch64::parseArch(Arch);
- return AI != AArch64::INVALID;
+ AArch64::ArchKind AK = AArch64::parseArch(Arch);
+ return AK != AArch64::ArchKind::INVALID;
}
TEST(TargetParserTest, testAArch64Arch) {
@@ -1445,81 +1445,148 @@ TEST(TargetParserTest, testAArch64Arch) {
ARMBuildAttrs::CPUArch::v8_A));
}
-bool testAArch64Extension(StringRef CPUName, const AArch64::ArchInfo &AI,
+bool testAArch64Extension(StringRef CPUName, AArch64::ArchKind AK,
StringRef ArchExt) {
- return AArch64::getDefaultExtensions(CPUName, AI) &
+ return AArch64::getDefaultExtensions(CPUName, AK) &
AArch64::parseArchExt(ArchExt);
}
TEST(TargetParserTest, testAArch64Extension) {
- EXPECT_FALSE(testAArch64Extension("cortex-a34", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("cortex-a35", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("cortex-a53", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("cortex-a55", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("cortex-a55", AArch64::INVALID, "fp16"));
- EXPECT_FALSE(testAArch64Extension("cortex-a55", AArch64::INVALID, "fp16fml"));
- EXPECT_TRUE(testAArch64Extension("cortex-a55", AArch64::INVALID, "dotprod"));
- EXPECT_FALSE(testAArch64Extension("cortex-a57", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("cortex-a72", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("cortex-a73", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("cortex-a75", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("cortex-a75", AArch64::INVALID, "fp16"));
- EXPECT_FALSE(testAArch64Extension("cortex-a75", AArch64::INVALID, "fp16fml"));
- EXPECT_TRUE(testAArch64Extension("cortex-a75", AArch64::INVALID, "dotprod"));
- EXPECT_TRUE(testAArch64Extension("cortex-r82", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("cortex-r82", AArch64::INVALID, "fp16"));
- EXPECT_TRUE(testAArch64Extension("cortex-r82", AArch64::INVALID, "fp16fml"));
- EXPECT_TRUE(testAArch64Extension("cortex-r82", AArch64::INVALID, "dotprod"));
- EXPECT_TRUE(testAArch64Extension("cortex-r82", AArch64::INVALID, "lse"));
- EXPECT_FALSE(testAArch64Extension("cyclone", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("exynos-m3", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("exynos-m4", AArch64::INVALID, "dotprod"));
- EXPECT_TRUE(testAArch64Extension("exynos-m4", AArch64::INVALID, "fp16"));
- EXPECT_TRUE(testAArch64Extension("exynos-m4", AArch64::INVALID, "lse"));
- EXPECT_TRUE(testAArch64Extension("exynos-m4", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("exynos-m4", AArch64::INVALID, "rdm"));
- EXPECT_TRUE(testAArch64Extension("exynos-m5", AArch64::INVALID, "dotprod"));
- EXPECT_TRUE(testAArch64Extension("exynos-m5", AArch64::INVALID, "fp16"));
- EXPECT_TRUE(testAArch64Extension("exynos-m5", AArch64::INVALID, "lse"));
- EXPECT_TRUE(testAArch64Extension("exynos-m5", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("exynos-m5", AArch64::INVALID, "rdm"));
- EXPECT_TRUE(testAArch64Extension("falkor", AArch64::INVALID, "rdm"));
- EXPECT_FALSE(testAArch64Extension("kryo", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "crc"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "lse"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "rdm"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "rcpc"));
- EXPECT_TRUE(testAArch64Extension("saphira", AArch64::INVALID, "profile"));
- EXPECT_FALSE(testAArch64Extension("saphira", AArch64::INVALID, "fp16"));
- EXPECT_FALSE(testAArch64Extension("thunderx2t99", AArch64::INVALID, "ras"));
- EXPECT_FALSE(testAArch64Extension("thunderx", AArch64::INVALID, "lse"));
- EXPECT_FALSE(testAArch64Extension("thunderxt81", AArch64::INVALID, "lse"));
- EXPECT_FALSE(testAArch64Extension("thunderxt83", AArch64::INVALID, "lse"));
- EXPECT_FALSE(testAArch64Extension("thunderxt88", AArch64::INVALID, "lse"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "crypto"));
- EXPECT_FALSE(testAArch64Extension("tsv110", AArch64::INVALID, "sha3"));
- EXPECT_FALSE(testAArch64Extension("tsv110", AArch64::INVALID, "sm4"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "ras"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "profile"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "fp16"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "fp16fml"));
- EXPECT_TRUE(testAArch64Extension("tsv110", AArch64::INVALID, "dotprod"));
- EXPECT_TRUE(testAArch64Extension("a64fx", AArch64::INVALID, "fp16"));
- EXPECT_TRUE(testAArch64Extension("a64fx", AArch64::INVALID, "sve"));
- EXPECT_FALSE(testAArch64Extension("a64fx", AArch64::INVALID, "sve2"));
- EXPECT_TRUE(testAArch64Extension("carmel", AArch64::INVALID, "crypto"));
- EXPECT_TRUE(testAArch64Extension("carmel", AArch64::INVALID, "fp16"));
-
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8A, "ras"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_1A, "ras"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_2A, "profile"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_2A, "fp16"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_2A, "fp16fml"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_3A, "fp16"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_3A, "fp16fml"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_4A, "fp16"));
- EXPECT_FALSE(testAArch64Extension("generic", AArch64::ARMV8_4A, "fp16fml"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a34",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a35",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a53",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a55",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a55",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a55",
+ AArch64::ArchKind::INVALID, "fp16fml"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a55",
+ AArch64::ArchKind::INVALID, "dotprod"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a57",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a72",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a73",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a75",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a75",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_FALSE(testAArch64Extension("cortex-a75",
+ AArch64::ArchKind::INVALID, "fp16fml"));
+ EXPECT_TRUE(testAArch64Extension("cortex-a75",
+ AArch64::ArchKind::INVALID, "dotprod"));
+ EXPECT_TRUE(testAArch64Extension("cortex-r82",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("cortex-r82",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_TRUE(testAArch64Extension("cortex-r82",
+ AArch64::ArchKind::INVALID, "fp16fml"));
+ EXPECT_TRUE(testAArch64Extension("cortex-r82",
+ AArch64::ArchKind::INVALID, "dotprod"));
+ EXPECT_TRUE(testAArch64Extension("cortex-r82",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_FALSE(testAArch64Extension("cyclone",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("exynos-m3",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("exynos-m4",
+ AArch64::ArchKind::INVALID, "dotprod"));
+ EXPECT_TRUE(testAArch64Extension("exynos-m4",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_TRUE(testAArch64Extension("exynos-m4",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_TRUE(testAArch64Extension("exynos-m4",
+ 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",
+ 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, "fp16"));
+ EXPECT_FALSE(testAArch64Extension("thunderx2t99",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_FALSE(testAArch64Extension("thunderx",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_FALSE(testAArch64Extension("thunderxt81",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_FALSE(testAArch64Extension("thunderxt83",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_FALSE(testAArch64Extension("thunderxt88",
+ AArch64::ArchKind::INVALID, "lse"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "crypto"));
+ EXPECT_FALSE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "sha3"));
+ EXPECT_FALSE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "sm4"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "ras"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "profile"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "fp16fml"));
+ EXPECT_TRUE(testAArch64Extension("tsv110",
+ AArch64::ArchKind::INVALID, "dotprod"));
+ EXPECT_TRUE(testAArch64Extension("a64fx",
+ AArch64::ArchKind::INVALID, "fp16"));
+ EXPECT_TRUE(testAArch64Extension("a64fx",
+ AArch64::ArchKind::INVALID, "sve"));
+ EXPECT_FALSE(testAArch64Extension("a64fx",
+ AArch64::ArchKind::INVALID, "sve2"));
+ EXPECT_TRUE(
+ testAArch64Extension("carmel", AArch64::ArchKind::INVALID, "crypto"));
+ EXPECT_TRUE(
+ testAArch64Extension("carmel", AArch64::ArchKind::INVALID, "fp16"));
+
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8A, "ras"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_1A, "ras"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_2A, "profile"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_2A, "fp16"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_2A, "fp16fml"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_3A, "fp16"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_3A, "fp16fml"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_4A, "fp16"));
+ EXPECT_FALSE(testAArch64Extension(
+ "generic", AArch64::ArchKind::ARMV8_4A, "fp16fml"));
}
TEST(TargetParserTest, AArch64ExtensionFeatures) {
@@ -1641,62 +1708,25 @@ TEST(TargetParserTest, AArch64ArchFeatures) {
EXPECT_EQ(AArch64::getArchFeature(AArch64::ArchKind::ARMV8R), "+v8r");
}
-TEST(TargetParserTest, AArch64ArchPartialOrder) {
- EXPECT_FALSE(AArch64::INVALID.implies(AArch64::INVALID));
-
- for (const auto *A : AArch64::ArchInfos) {
- EXPECT_EQ(*A, *A);
- if (!(*A == *A)) {
- EXPECT_NE(*A, *A);
- }
- // Comparison with invalid is always false
- EXPECT_FALSE(A->implies(AArch64::INVALID));
- EXPECT_FALSE(AArch64::INVALID.implies(*A));
-
- // v8r has no relation to other valid architectures
- if (*A != AArch64::ARMV8R) {
- EXPECT_FALSE(A->implies(AArch64::ARMV8R));
- EXPECT_FALSE(AArch64::ARMV8R.implies(*A));
- }
+TEST(TargetParserTest, AArch64ArchV9toV8Conversion) {
+ for (auto AK : AArch64::ArchKinds) {
+ if (AK == AArch64::ArchKind::INVALID)
+ EXPECT_EQ(AK, AArch64::convertV9toV8(AK));
+ else if (AK < AArch64::ArchKind::ARMV9A)
+ EXPECT_EQ(AK, AArch64::convertV9toV8(AK));
+ else if (AK >= AArch64::ArchKind::ARMV8R)
+ EXPECT_EQ(AArch64::ArchKind::INVALID, AArch64::convertV9toV8(AK));
+ else
+ EXPECT_TRUE(AArch64::convertV9toV8(AK) < AArch64::ArchKind::ARMV9A);
}
-
- for (const auto *A : {
- &AArch64::ARMV8_1A,
- &AArch64::ARMV8_2A,
- &AArch64::ARMV8_3A,
- &AArch64::ARMV8_4A,
- &AArch64::ARMV8_5A,
- &AArch64::ARMV8_6A,
- &AArch64::ARMV8_7A,
- &AArch64::ARMV8_8A,
- &AArch64::ARMV8_9A,
- })
- EXPECT_TRUE(A->implies(AArch64::ARMV8A));
-
- for (const auto *A : {&AArch64::ARMV9_1A, &AArch64::ARMV9_2A,
- &AArch64::ARMV9_3A, &AArch64::ARMV9_4A})
- EXPECT_TRUE(A->implies(AArch64::ARMV9A));
-
- EXPECT_TRUE(AArch64::ARMV8_1A.implies(AArch64::ARMV8A));
- EXPECT_TRUE(AArch64::ARMV8_2A.implies(AArch64::ARMV8_1A));
- EXPECT_TRUE(AArch64::ARMV8_3A.implies(AArch64::ARMV8_2A));
- EXPECT_TRUE(AArch64::ARMV8_4A.implies(AArch64::ARMV8_3A));
- EXPECT_TRUE(AArch64::ARMV8_5A.implies(AArch64::ARMV8_4A));
- EXPECT_TRUE(AArch64::ARMV8_6A.implies(AArch64::ARMV8_5A));
- EXPECT_TRUE(AArch64::ARMV8_7A.implies(AArch64::ARMV8_6A));
- EXPECT_TRUE(AArch64::ARMV8_8A.implies(AArch64::ARMV8_7A));
- EXPECT_TRUE(AArch64::ARMV8_9A.implies(AArch64::ARMV8_8A));
-
- EXPECT_TRUE(AArch64::ARMV9_1A.implies(AArch64::ARMV9A));
- EXPECT_TRUE(AArch64::ARMV9_2A.implies(AArch64::ARMV9_1A));
- EXPECT_TRUE(AArch64::ARMV9_3A.implies(AArch64::ARMV9_2A));
- EXPECT_TRUE(AArch64::ARMV9_4A.implies(AArch64::ARMV9_3A));
-
- EXPECT_TRUE(AArch64::ARMV9A.implies(AArch64::ARMV8_5A));
- EXPECT_TRUE(AArch64::ARMV9_1A.implies(AArch64::ARMV8_6A));
- EXPECT_TRUE(AArch64::ARMV9_2A.implies(AArch64::ARMV8_7A));
- EXPECT_TRUE(AArch64::ARMV9_3A.implies(AArch64::ARMV8_8A));
- EXPECT_TRUE(AArch64::ARMV9_4A.implies(AArch64::ARMV8_9A));
+ EXPECT_EQ(AArch64::ArchKind::ARMV8_5A,
+ AArch64::convertV9toV8(AArch64::ArchKind::ARMV9A));
+ EXPECT_EQ(AArch64::ArchKind::ARMV8_6A,
+ AArch64::convertV9toV8(AArch64::ArchKind::ARMV9_1A));
+ EXPECT_EQ(AArch64::ArchKind::ARMV8_7A,
+ AArch64::convertV9toV8(AArch64::ArchKind::ARMV9_2A));
+ EXPECT_EQ(AArch64::ArchKind::ARMV8_8A,
+ AArch64::convertV9toV8(AArch64::ArchKind::ARMV9_3A));
}
TEST(TargetParserTest, AArch64ArchExtFeature) {