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>
contains(const T (& array)[N],const T element)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
TEST(TargetParserTest,ARMArchName)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
TEST(TargetParserTest,ARMCPUAttr)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
TEST(TargetParserTest,ARMSubArch)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
TEST(TargetParserTest,ARMFPUName)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
TEST(TargetParserTest,AArch64ArchName)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
TEST(TargetParserTest,AArch64CPUAttr)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
TEST(TargetParserTest,AArch64SubArch)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