forked from OSchip/llvm-project
93 lines
3.5 KiB
C++
93 lines
3.5 KiB
C++
//===----------- 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());
|
|
}
|
|
}
|
|
|