1 //===----------- TargetParser.cpp - Target Parser -------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "gtest/gtest.h" 11 #include "llvm/Support/TargetParser.h" 12 13 using namespace llvm; 14 15 namespace { 16 static const unsigned kAArch64ArchKinds[] = { 17 #define AARCH64_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR, ARCH_FPU, \ 18 ARCH_BASE_EXT) \ 19 llvm::ARM::ID, 20 #include "llvm/Support/AArch64TargetParser.def" 21 #undef AARCH64_ARCH 22 }; 23 24 template <typename T, size_t N> 25 bool contains(const T (&array)[N], const T element) { 26 return std::find(std::begin(array), std::end(array), element) != 27 std::end(array); 28 } 29 30 TEST(TargetParserTest, ARMArchName) { 31 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 32 AK <= ARM::ArchKind::AK_LAST; 33 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 34 EXPECT_TRUE(AK == ARM::AK_LAST ? ARM::getArchName(AK).empty() 35 : !ARM::getArchName(AK).empty()); 36 } 37 38 TEST(TargetParserTest, ARMCPUAttr) { 39 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 40 AK <= ARM::ArchKind::AK_LAST; 41 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 42 EXPECT_TRUE((AK == ARM::AK_INVALID || AK == ARM::AK_LAST) 43 ? ARM::getCPUAttr(AK).empty() 44 : !ARM::getCPUAttr(AK).empty()); 45 } 46 47 TEST(TargetParserTest, ARMSubArch) { 48 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 49 AK <= ARM::ArchKind::AK_LAST; 50 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 51 EXPECT_TRUE((AK == ARM::AK_INVALID || AK == ARM::AK_IWMMXT || 52 AK == ARM::AK_IWMMXT2 || AK == ARM::AK_LAST) 53 ? ARM::getSubArch(AK).empty() 54 : !ARM::getSubArch(AK).empty()); 55 } 56 57 TEST(TargetParserTest, ARMFPUName) { 58 for (ARM::FPUKind FK = static_cast<ARM::FPUKind>(0); 59 FK <= ARM::FPUKind::FK_LAST; 60 FK = static_cast<ARM::FPUKind>(static_cast<unsigned>(FK) + 1)) 61 EXPECT_TRUE(FK == ARM::FK_LAST ? ARM::getFPUName(FK).empty() 62 : !ARM::getFPUName(FK).empty()); 63 } 64 65 TEST(TargetParserTest, AArch64ArchName) { 66 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 67 AK <= ARM::ArchKind::AK_LAST; 68 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 69 EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK)) 70 ? !AArch64::getArchName(AK).empty() 71 : AArch64::getArchName(AK).empty()); 72 } 73 74 TEST(TargetParserTest, AArch64CPUAttr) { 75 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 76 AK <= ARM::ArchKind::AK_LAST; 77 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 78 EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK)) 79 ? !AArch64::getCPUAttr(AK).empty() 80 : AArch64::getCPUAttr(AK).empty()); 81 } 82 83 TEST(TargetParserTest, AArch64SubArch) { 84 for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0); 85 AK <= ARM::ArchKind::AK_LAST; 86 AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1)) 87 EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK)) 88 ? !AArch64::getSubArch(AK).empty() 89 : AArch64::getSubArch(AK).empty()); 90 } 91 } 92 93