39 changes: 36 additions & 3 deletions llvm/unittests/Support/TargetParserTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ bool testARMCPU(StringRef CPUName, StringRef ExpectedArch,
pass &= ((ExtKind ^ ARM::AEK_NONE) == ExpectedFlags);
else
pass &= (ExtKind == ExpectedFlags);

pass &= ARM::getCPUAttr(AK).equals(CPUAttr);

return pass;
Expand Down Expand Up @@ -257,6 +256,12 @@ TEST(TargetParserTest, testARMCPU) {
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_FP16 |
ARM::AEK_RAS | ARM::AEK_DOTPROD,
"8.2-A"));
EXPECT_TRUE(testARMCPU("neoverse-n1", "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",
ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP |
ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
Expand Down Expand Up @@ -304,7 +309,7 @@ TEST(TargetParserTest, testARMCPU) {
"7-S"));
}

static constexpr unsigned NumARMCPUArchs = 86;
static constexpr unsigned NumARMCPUArchs = 87;

TEST(TargetParserTest, testARMCPUArchList) {
SmallVector<StringRef, NumARMCPUArchs> List;
Expand Down Expand Up @@ -781,6 +786,20 @@ TEST(TargetParserTest, testAArch64CPU) {
"cortex-a57", "armv8-a", "crypto-neon-fp-armv8",
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
AArch64::AEK_SIMD, "8-A"));
EXPECT_TRUE(testAArch64CPU(
"cortex-a65", "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_RCPC | AArch64::AEK_RDM |
AArch64::AEK_SIMD | AArch64::AEK_SSBS,
"8.2-A"));
EXPECT_TRUE(testAArch64CPU(
"cortex-a65ae", "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_RCPC | AArch64::AEK_RDM |
AArch64::AEK_SIMD | AArch64::AEK_SSBS,
"8.2-A"));
EXPECT_TRUE(testAArch64CPU(
"cortex-a72", "armv8-a", "crypto-neon-fp-armv8",
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
Expand Down Expand Up @@ -842,6 +861,20 @@ TEST(TargetParserTest, testAArch64CPU) {
"kryo", "armv8-a", "crypto-neon-fp-armv8",
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
AArch64::AEK_SIMD, "8-A"));
EXPECT_TRUE(testAArch64CPU(
"neoverse-e1", "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_RCPC | AArch64::AEK_RDM |
AArch64::AEK_SIMD | AArch64::AEK_SSBS,
"8.2-A"));
EXPECT_TRUE(testAArch64CPU(
"neoverse-n1", "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_PROFILE | AArch64::AEK_RAS | AArch64::AEK_RCPC |
AArch64::AEK_RDM | AArch64::AEK_SIMD | AArch64::AEK_SSBS,
"8.2-A"));
EXPECT_TRUE(testAArch64CPU(
"thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8",
AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_LSE |
Expand Down Expand Up @@ -875,7 +908,7 @@ TEST(TargetParserTest, testAArch64CPU) {
"8.2-A"));
}

static constexpr unsigned NumAArch64CPUArchs = 24;
static constexpr unsigned NumAArch64CPUArchs = 28;

TEST(TargetParserTest, testAArch64CPUArchList) {
SmallVector<StringRef, NumAArch64CPUArchs> List;
Expand Down