summaryrefslogtreecommitdiff
path: root/unittests/Support/TargetParserTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/Support/TargetParserTest.cpp')
-rw-r--r--unittests/Support/TargetParserTest.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/unittests/Support/TargetParserTest.cpp b/unittests/Support/TargetParserTest.cpp
new file mode 100644
index 0000000000000..21994f27b73cd
--- /dev/null
+++ b/unittests/Support/TargetParserTest.cpp
@@ -0,0 +1,92 @@
+//===----------- TargetParser.cpp - Target Parser -------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "gtest/gtest.h"
+#include "llvm/Support/TargetParser.h"
+
+using namespace llvm;
+
+namespace {
+static const unsigned kAArch64ArchKinds[] = {
+#define AARCH64_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR, ARCH_FPU, \
+ ARCH_BASE_EXT) \
+ llvm::ARM::ID,
+#include "llvm/Support/AArch64TargetParser.def"
+#undef AARCH64_ARCH
+};
+
+template <typename T, size_t N>
+bool contains(const T (&array)[N], const T element) {
+ return std::find(std::begin(array), std::end(array), element) !=
+ std::end(array);
+}
+
+TEST(TargetParserTest, ARMArchName) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE(AK == ARM::AK_LAST ? ARM::getArchName(AK).empty()
+ : !ARM::getArchName(AK).empty());
+}
+
+TEST(TargetParserTest, ARMCPUAttr) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE((AK == ARM::AK_INVALID || AK == ARM::AK_LAST)
+ ? ARM::getCPUAttr(AK).empty()
+ : !ARM::getCPUAttr(AK).empty());
+}
+
+TEST(TargetParserTest, ARMSubArch) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE((AK == ARM::AK_INVALID || AK == ARM::AK_IWMMXT ||
+ AK == ARM::AK_IWMMXT2 || AK == ARM::AK_LAST)
+ ? ARM::getSubArch(AK).empty()
+ : !ARM::getSubArch(AK).empty());
+}
+
+TEST(TargetParserTest, ARMFPUName) {
+ for (ARM::FPUKind FK = static_cast<ARM::FPUKind>(0);
+ FK <= ARM::FPUKind::FK_LAST;
+ FK = static_cast<ARM::FPUKind>(static_cast<unsigned>(FK) + 1))
+ EXPECT_TRUE(FK == ARM::FK_LAST ? ARM::getFPUName(FK).empty()
+ : !ARM::getFPUName(FK).empty());
+}
+
+TEST(TargetParserTest, AArch64ArchName) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK))
+ ? !AArch64::getArchName(AK).empty()
+ : AArch64::getArchName(AK).empty());
+}
+
+TEST(TargetParserTest, AArch64CPUAttr) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK))
+ ? !AArch64::getCPUAttr(AK).empty()
+ : AArch64::getCPUAttr(AK).empty());
+}
+
+TEST(TargetParserTest, AArch64SubArch) {
+ for (ARM::ArchKind AK = static_cast<ARM::ArchKind>(0);
+ AK <= ARM::ArchKind::AK_LAST;
+ AK = static_cast<ARM::ArchKind>(static_cast<unsigned>(AK) + 1))
+ EXPECT_TRUE(contains(kAArch64ArchKinds, static_cast<unsigned>(AK))
+ ? !AArch64::getSubArch(AK).empty()
+ : AArch64::getSubArch(AK).empty());
+}
+}
+