Changeset View
Changeset View
Standalone View
Standalone View
unittests/Support/TargetParserTest.cpp
Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("cortex-a53", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("cortex-a53", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("cortex-a55", "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_FP16 | | |||||
ARM::AEK_RAS | ARM::AEK_DOTPROD, | |||||
"8.2-A")); | |||||
EXPECT_TRUE(testARMCPU("cortex-a57", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("cortex-a57", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("cortex-a72", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("cortex-a72", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("cortex-a73", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("cortex-a73", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("cortex-a75", "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_FP16 | | |||||
ARM::AEK_RAS | ARM::AEK_DOTPROD, | |||||
"8.2-A")); | |||||
EXPECT_TRUE(testARMCPU("cyclone", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("cyclone", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP, | ||||
"8-A")); | "8-A")); | ||||
EXPECT_TRUE(testARMCPU("exynos-m1", "armv8-a", "crypto-neon-fp-armv8", | EXPECT_TRUE(testARMCPU("exynos-m1", "armv8-a", "crypto-neon-fp-armv8", | ||||
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP | | ||||
ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | | ||||
▲ Show 20 Lines • Show All 184 Lines • ▼ Show 20 Lines | |||||
{"fp", "nofp", nullptr, nullptr}, | {"fp", "nofp", nullptr, nullptr}, | ||||
{"idiv", "noidiv", nullptr, nullptr}, | {"idiv", "noidiv", nullptr, nullptr}, | ||||
{"mp", "nomp", nullptr, nullptr}, | {"mp", "nomp", nullptr, nullptr}, | ||||
{"simd", "nosimd", nullptr, nullptr}, | {"simd", "nosimd", nullptr, nullptr}, | ||||
{"sec", "nosec", nullptr, nullptr}, | {"sec", "nosec", nullptr, nullptr}, | ||||
{"virt", "novirt", nullptr, nullptr}, | {"virt", "novirt", nullptr, nullptr}, | ||||
{"fp16", "nofp16", "+fullfp16", "-fullfp16"}, | {"fp16", "nofp16", "+fullfp16", "-fullfp16"}, | ||||
{"ras", "noras", "+ras", "-ras"}, | {"ras", "noras", "+ras", "-ras"}, | ||||
{"dotprod", "nodotprod", "+dotprod", "-dotprod"}, | |||||
{"os", "noos", nullptr, nullptr}, | {"os", "noos", nullptr, nullptr}, | ||||
{"iwmmxt", "noiwmmxt", nullptr, nullptr}, | {"iwmmxt", "noiwmmxt", nullptr, nullptr}, | ||||
{"iwmmxt2", "noiwmmxt2", nullptr, nullptr}, | {"iwmmxt2", "noiwmmxt2", nullptr, nullptr}, | ||||
{"maverick", "maverick", nullptr, nullptr}, | {"maverick", "maverick", nullptr, nullptr}, | ||||
{"xscale", "noxscale", nullptr, nullptr}}; | {"xscale", "noxscale", nullptr, nullptr}}; | ||||
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) { | for (unsigned i = 0; i < array_lengthof(ArchExt); i++) { | ||||
EXPECT_EQ(StringRef(ArchExt[i][2]), ARM::getArchExtFeature(ArchExt[i][0])); | EXPECT_EQ(StringRef(ArchExt[i][2]), ARM::getArchExtFeature(ArchExt[i][0])); | ||||
▲ Show 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | |||||
"cortex-a35", "armv8-a", "crypto-neon-fp-armv8", | "cortex-a35", "armv8-a", "crypto-neon-fp-armv8", | ||||
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | 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_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | AArch64::AEK_SIMD, "8-A")); | ||||
EXPECT_TRUE(testAArch64CPU( | EXPECT_TRUE(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")); | |||||
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_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | 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_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | 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_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | AArch64::AEK_SIMD, "8-A")); | ||||
EXPECT_TRUE(testAArch64CPU( | EXPECT_TRUE(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")); | |||||
EXPECT_TRUE(testAArch64CPU( | |||||
"cyclone", "armv8-a", "crypto-neon-fp-armv8", | "cyclone", "armv8-a", "crypto-neon-fp-armv8", | ||||
AArch64::AEK_CRYPTO | AArch64::AEK_FP | 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_FP | | AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP | | ||||
AArch64::AEK_SIMD, "8-A")); | 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", | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | |||||
AArch64::parseArchExt(ArchExt); | AArch64::parseArchExt(ArchExt); | ||||
} | } | ||||
TEST(TargetParserTest, testAArch64Extension) { | TEST(TargetParserTest, testAArch64Extension) { | ||||
EXPECT_FALSE(testAArch64Extension("cortex-a35", | EXPECT_FALSE(testAArch64Extension("cortex-a35", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("cortex-a53", | EXPECT_FALSE(testAArch64Extension("cortex-a53", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_TRUE(testAArch64Extension("cortex-a55", | |||||
AArch64::ArchKind::INVALID, "ras")); | |||||
EXPECT_FALSE(testAArch64Extension("cortex-a57", | EXPECT_FALSE(testAArch64Extension("cortex-a57", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("cortex-a72", | EXPECT_FALSE(testAArch64Extension("cortex-a72", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("cortex-a73", | EXPECT_FALSE(testAArch64Extension("cortex-a73", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_TRUE(testAArch64Extension("cortex-a75", | |||||
AArch64::ArchKind::INVALID, "ras")); | |||||
EXPECT_FALSE(testAArch64Extension("cyclone", | EXPECT_FALSE(testAArch64Extension("cyclone", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("exynos-m1", | EXPECT_FALSE(testAArch64Extension("exynos-m1", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("kryo", | EXPECT_FALSE(testAArch64Extension("kryo", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
EXPECT_FALSE(testAArch64Extension("thunderx2t99", | EXPECT_FALSE(testAArch64Extension("thunderx2t99", | ||||
AArch64::ArchKind::INVALID, "ras")); | AArch64::ArchKind::INVALID, "ras")); | ||||
Show All 14 Lines | |||||
"generic", AArch64::ArchKind::ARMV8_2A, "spe")); | "generic", AArch64::ArchKind::ARMV8_2A, "spe")); | ||||
} | } | ||||
TEST(TargetParserTest, AArch64ExtensionFeatures) { | TEST(TargetParserTest, AArch64ExtensionFeatures) { | ||||
std::vector<StringRef> Features; | std::vector<StringRef> Features; | ||||
unsigned Extensions = AArch64::AEK_CRC | AArch64::AEK_CRYPTO | | unsigned Extensions = AArch64::AEK_CRC | AArch64::AEK_CRYPTO | | ||||
AArch64::AEK_FP | AArch64::AEK_SIMD | | AArch64::AEK_FP | AArch64::AEK_SIMD | | ||||
AArch64::AEK_FP16 | AArch64::AEK_PROFILE | | AArch64::AEK_FP16 | AArch64::AEK_PROFILE | | ||||
AArch64::AEK_RAS | AArch64::AEK_SVE; | AArch64::AEK_RAS | AArch64::AEK_SVE | | ||||
AArch64::AEK_DOTPROD | AArch64::AEK_RCPC; | |||||
for (unsigned i = 0; i <= Extensions; i++) | for (unsigned i = 0; i <= Extensions; i++) | ||||
EXPECT_TRUE(i == 0 ? !AArch64::getExtensionFeatures(i, Features) | EXPECT_TRUE(i == 0 ? !AArch64::getExtensionFeatures(i, Features) | ||||
: AArch64::getExtensionFeatures(i, Features)); | : AArch64::getExtensionFeatures(i, Features)); | ||||
} | } | ||||
TEST(TargetParserTest, AArch64ArchFeatures) { | TEST(TargetParserTest, AArch64ArchFeatures) { | ||||
std::vector<StringRef> Features; | std::vector<StringRef> Features; | ||||
Show All 12 Lines | |||||
TEST(TargetParserTest, AArch64ArchExtFeature) { | TEST(TargetParserTest, AArch64ArchExtFeature) { | ||||
const char *ArchExt[][4] = {{"crc", "nocrc", "+crc", "-crc"}, | const char *ArchExt[][4] = {{"crc", "nocrc", "+crc", "-crc"}, | ||||
{"crypto", "nocrypto", "+crypto", "-crypto"}, | {"crypto", "nocrypto", "+crypto", "-crypto"}, | ||||
{"fp", "nofp", "+fp-armv8", "-fp-armv8"}, | {"fp", "nofp", "+fp-armv8", "-fp-armv8"}, | ||||
{"simd", "nosimd", "+neon", "-neon"}, | {"simd", "nosimd", "+neon", "-neon"}, | ||||
{"fp16", "nofp16", "+fullfp16", "-fullfp16"}, | {"fp16", "nofp16", "+fullfp16", "-fullfp16"}, | ||||
{"profile", "noprofile", "+spe", "-spe"}, | {"profile", "noprofile", "+spe", "-spe"}, | ||||
{"ras", "noras", "+ras", "-ras"}, | {"ras", "noras", "+ras", "-ras"}, | ||||
{"sve", "nosve", "+sve", "-sve"}}; | {"sve", "nosve", "+sve", "-sve"}, | ||||
{"dotprod", "nodotprod", "+dotprod", "-dotprod"}, | |||||
{"rcpc", "norcpc", "+rcpc", "-rcpc" }}; | |||||
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) { | for (unsigned i = 0; i < array_lengthof(ArchExt); i++) { | ||||
EXPECT_EQ(StringRef(ArchExt[i][2]), | EXPECT_EQ(StringRef(ArchExt[i][2]), | ||||
AArch64::getArchExtFeature(ArchExt[i][0])); | AArch64::getArchExtFeature(ArchExt[i][0])); | ||||
EXPECT_EQ(StringRef(ArchExt[i][3]), | EXPECT_EQ(StringRef(ArchExt[i][3]), | ||||
AArch64::getArchExtFeature(ArchExt[i][1])); | AArch64::getArchExtFeature(ArchExt[i][1])); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
Context not available. |