diff options
Diffstat (limited to 'unittests/Support/TargetParserTest.cpp')
-rw-r--r-- | unittests/Support/TargetParserTest.cpp | 92 |
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()); +} +} + |