blob: 21994f27b73cd8396cc16803a5f5d86a12456e6a [file] [log] [blame]
Saleem Abdulrasool11bf1ac2016-03-06 04:50:55 +00001//===----------- 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
13using namespace llvm;
14
15namespace {
Saleem Abdulrasool1ef925f2016-06-08 14:30:00 +000016static 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
24template <typename T, size_t N>
25bool 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
Saleem Abdulrasool11bf1ac2016-03-06 04:50:55 +000030TEST(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
38TEST(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
47TEST(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
57TEST(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}
Saleem Abdulrasool1ef925f2016-06-08 14:30:00 +000064
65TEST(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
74TEST(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
83TEST(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}
Saleem Abdulrasool11bf1ac2016-03-06 04:50:55 +000091}
92