summaryrefslogtreecommitdiff
path: root/lib/Support/Triple.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-12-18 20:10:56 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-12-18 20:10:56 +0000
commit044eb2f6afba375a914ac9d8024f8f5142bb912e (patch)
tree1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /lib/Support/Triple.cpp
parenteb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff)
Notes
Diffstat (limited to 'lib/Support/Triple.cpp')
-rw-r--r--lib/Support/Triple.cpp108
1 files changed, 65 insertions, 43 deletions
diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp
index 2687a67556d3..4f0a30042b76 100644
--- a/lib/Support/Triple.cpp
+++ b/lib/Support/Triple.cpp
@@ -25,6 +25,7 @@ StringRef Triple::getArchTypeName(ArchType Kind) {
case aarch64_be: return "aarch64_be";
case arm: return "arm";
case armeb: return "armeb";
+ case arc: return "arc";
case avr: return "avr";
case bpfel: return "bpfel";
case bpfeb: return "bpfeb";
@@ -83,6 +84,8 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) {
case aarch64:
case aarch64_be: return "aarch64";
+ case arc: return "arc";
+
case arm:
case armeb:
case thumb:
@@ -194,7 +197,6 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case RTEMS: return "rtems";
case NaCl: return "nacl";
case CNK: return "cnk";
- case Bitrig: return "bitrig";
case AIX: return "aix";
case CUDA: return "cuda";
case NVCL: return "nvcl";
@@ -205,6 +207,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case WatchOS: return "watchos";
case Mesa3D: return "mesa3d";
case Contiki: return "contiki";
+ case AMDPAL: return "amdpal";
}
llvm_unreachable("Invalid OSType");
@@ -214,6 +217,7 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
switch (Kind) {
case UnknownEnvironment: return "unknown";
case GNU: return "gnu";
+ case GNUABIN32: return "gnuabin32";
case GNUABI64: return "gnuabi64";
case GNUEABIHF: return "gnueabihf";
case GNUEABI: return "gnueabi";
@@ -231,6 +235,7 @@ StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
case AMDOpenCL: return "amdopencl";
case CoreCLR: return "coreclr";
case OpenCL: return "opencl";
+ case Simulator: return "simulator";
}
llvm_unreachable("Invalid EnvironmentType!");
@@ -256,6 +261,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
return StringSwitch<Triple::ArchType>(Name)
.Case("aarch64", aarch64)
.Case("aarch64_be", aarch64_be)
+ .Case("arc", arc)
.Case("arm64", aarch64) // "arm64" is an alias for "aarch64"
.Case("arm", arm)
.Case("armeb", armeb)
@@ -308,39 +314,46 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
}
static Triple::ArchType parseARMArch(StringRef ArchName) {
- unsigned ISA = ARM::parseArchISA(ArchName);
- unsigned ENDIAN = ARM::parseArchEndian(ArchName);
+ ARM::ISAKind ISA = ARM::parseArchISA(ArchName);
+ ARM::EndianKind ENDIAN = ARM::parseArchEndian(ArchName);
Triple::ArchType arch = Triple::UnknownArch;
switch (ENDIAN) {
- case ARM::EK_LITTLE: {
+ case ARM::EndianKind::LITTLE: {
switch (ISA) {
- case ARM::IK_ARM:
+ case ARM::ISAKind::ARM:
arch = Triple::arm;
break;
- case ARM::IK_THUMB:
+ case ARM::ISAKind::THUMB:
arch = Triple::thumb;
break;
- case ARM::IK_AARCH64:
+ case ARM::ISAKind::AARCH64:
arch = Triple::aarch64;
break;
+ case ARM::ISAKind::INVALID:
+ break;
}
break;
}
- case ARM::EK_BIG: {
+ case ARM::EndianKind::BIG: {
switch (ISA) {
- case ARM::IK_ARM:
+ case ARM::ISAKind::ARM:
arch = Triple::armeb;
break;
- case ARM::IK_THUMB:
+ case ARM::ISAKind::THUMB:
arch = Triple::thumbeb;
break;
- case ARM::IK_AARCH64:
+ case ARM::ISAKind::AARCH64:
arch = Triple::aarch64_be;
break;
+ case ARM::ISAKind::INVALID:
+ break;
}
break;
}
+ case ARM::EndianKind::INVALID: {
+ break;
+ }
}
ArchName = ARM::getCanonicalArchName(ArchName);
@@ -348,15 +361,15 @@ static Triple::ArchType parseARMArch(StringRef ArchName) {
return Triple::UnknownArch;
// Thumb only exists in v4+
- if (ISA == ARM::IK_THUMB &&
+ if (ISA == ARM::ISAKind::THUMB &&
(ArchName.startswith("v2") || ArchName.startswith("v3")))
return Triple::UnknownArch;
// Thumb only for v6m
- unsigned Profile = ARM::parseArchProfile(ArchName);
+ ARM::ProfileKind Profile = ARM::parseArchProfile(ArchName);
unsigned Version = ARM::parseArchVersion(ArchName);
- if (Profile == ARM::PK_M && Version == 6) {
- if (ENDIAN == ARM::EK_BIG)
+ if (Profile == ARM::ProfileKind::M && Version == 6) {
+ if (ENDIAN == ARM::EndianKind::BIG)
return Triple::thumbeb;
else
return Triple::thumb;
@@ -378,6 +391,7 @@ static Triple::ArchType parseArch(StringRef ArchName) {
.Case("xscaleeb", Triple::armeb)
.Case("aarch64", Triple::aarch64)
.Case("aarch64_be", Triple::aarch64_be)
+ .Case("arc", Triple::arc)
.Case("arm64", Triple::aarch64)
.Case("arm", Triple::arm)
.Case("armeb", Triple::armeb)
@@ -477,7 +491,6 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("rtems", Triple::RTEMS)
.StartsWith("nacl", Triple::NaCl)
.StartsWith("cnk", Triple::CNK)
- .StartsWith("bitrig", Triple::Bitrig)
.StartsWith("aix", Triple::AIX)
.StartsWith("cuda", Triple::CUDA)
.StartsWith("nvcl", Triple::NVCL)
@@ -488,6 +501,7 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("watchos", Triple::WatchOS)
.StartsWith("mesa3d", Triple::Mesa3D)
.StartsWith("contiki", Triple::Contiki)
+ .StartsWith("amdpal", Triple::AMDPAL)
.Default(Triple::UnknownOS);
}
@@ -495,6 +509,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
return StringSwitch<Triple::EnvironmentType>(EnvironmentName)
.StartsWith("eabihf", Triple::EABIHF)
.StartsWith("eabi", Triple::EABI)
+ .StartsWith("gnuabin32", Triple::GNUABIN32)
.StartsWith("gnuabi64", Triple::GNUABI64)
.StartsWith("gnueabihf", Triple::GNUEABIHF)
.StartsWith("gnueabi", Triple::GNUEABI)
@@ -511,6 +526,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
.StartsWith("amdopencl", Triple::AMDOpenCL)
.StartsWith("coreclr", Triple::CoreCLR)
.StartsWith("opencl", Triple::OpenCL)
+ .StartsWith("simulator", Triple::Simulator)
.Default(Triple::UnknownEnvironment);
}
@@ -536,51 +552,53 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {
// ARM sub arch.
switch(ARM::parseArch(ARMSubArch)) {
- case ARM::AK_ARMV4:
+ case ARM::ArchKind::ARMV4:
return Triple::NoSubArch;
- case ARM::AK_ARMV4T:
+ case ARM::ArchKind::ARMV4T:
return Triple::ARMSubArch_v4t;
- case ARM::AK_ARMV5T:
+ case ARM::ArchKind::ARMV5T:
return Triple::ARMSubArch_v5;
- case ARM::AK_ARMV5TE:
- case ARM::AK_IWMMXT:
- case ARM::AK_IWMMXT2:
- case ARM::AK_XSCALE:
- case ARM::AK_ARMV5TEJ:
+ case ARM::ArchKind::ARMV5TE:
+ case ARM::ArchKind::IWMMXT:
+ case ARM::ArchKind::IWMMXT2:
+ case ARM::ArchKind::XSCALE:
+ case ARM::ArchKind::ARMV5TEJ:
return Triple::ARMSubArch_v5te;
- case ARM::AK_ARMV6:
+ case ARM::ArchKind::ARMV6:
return Triple::ARMSubArch_v6;
- case ARM::AK_ARMV6K:
- case ARM::AK_ARMV6KZ:
+ case ARM::ArchKind::ARMV6K:
+ case ARM::ArchKind::ARMV6KZ:
return Triple::ARMSubArch_v6k;
- case ARM::AK_ARMV6T2:
+ case ARM::ArchKind::ARMV6T2:
return Triple::ARMSubArch_v6t2;
- case ARM::AK_ARMV6M:
+ case ARM::ArchKind::ARMV6M:
return Triple::ARMSubArch_v6m;
- case ARM::AK_ARMV7A:
- case ARM::AK_ARMV7R:
+ case ARM::ArchKind::ARMV7A:
+ case ARM::ArchKind::ARMV7R:
return Triple::ARMSubArch_v7;
- case ARM::AK_ARMV7VE:
+ case ARM::ArchKind::ARMV7VE:
return Triple::ARMSubArch_v7ve;
- case ARM::AK_ARMV7K:
+ case ARM::ArchKind::ARMV7K:
return Triple::ARMSubArch_v7k;
- case ARM::AK_ARMV7M:
+ case ARM::ArchKind::ARMV7M:
return Triple::ARMSubArch_v7m;
- case ARM::AK_ARMV7S:
+ case ARM::ArchKind::ARMV7S:
return Triple::ARMSubArch_v7s;
- case ARM::AK_ARMV7EM:
+ case ARM::ArchKind::ARMV7EM:
return Triple::ARMSubArch_v7em;
- case ARM::AK_ARMV8A:
+ case ARM::ArchKind::ARMV8A:
return Triple::ARMSubArch_v8;
- case ARM::AK_ARMV8_1A:
+ case ARM::ArchKind::ARMV8_1A:
return Triple::ARMSubArch_v8_1a;
- case ARM::AK_ARMV8_2A:
+ case ARM::ArchKind::ARMV8_2A:
return Triple::ARMSubArch_v8_2a;
- case ARM::AK_ARMV8R:
+ case ARM::ArchKind::ARMV8_3A:
+ return Triple::ARMSubArch_v8_3a;
+ case ARM::ArchKind::ARMV8R:
return Triple::ARMSubArch_v8r;
- case ARM::AK_ARMV8MBaseline:
+ case ARM::ArchKind::ARMV8MBaseline:
return Triple::ARMSubArch_v8m_baseline;
- case ARM::AK_ARMV8MMainline:
+ case ARM::ArchKind::ARMV8MMainline:
return Triple::ARMSubArch_v8m_mainline;
default:
return Triple::NoSubArch;
@@ -613,6 +631,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
return Triple::ELF;
case Triple::aarch64_be:
+ case Triple::arc:
case Triple::amdgcn:
case Triple::amdil:
case Triple::amdil64:
@@ -1166,6 +1185,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
case llvm::Triple::msp430:
return 16;
+ case llvm::Triple::arc:
case llvm::Triple::arm:
case llvm::Triple::armeb:
case llvm::Triple::hexagon:
@@ -1249,6 +1269,7 @@ Triple Triple::get32BitArchVariant() const {
case Triple::amdil:
case Triple::hsail:
case Triple::spir:
+ case Triple::arc:
case Triple::arm:
case Triple::armeb:
case Triple::hexagon:
@@ -1299,6 +1320,7 @@ Triple Triple::get64BitArchVariant() const {
Triple T(*this);
switch (getArch()) {
case Triple::UnknownArch:
+ case Triple::arc:
case Triple::avr:
case Triple::hexagon:
case Triple::kalimba:
@@ -1552,7 +1574,7 @@ StringRef Triple::getARMCPUForArch(StringRef MArch) const {
return StringRef();
StringRef CPU = ARM::getDefaultCPU(MArch);
- if (!CPU.empty())
+ if (!CPU.empty() && !CPU.equals("invalid"))
return CPU;
// If no specific architecture version is requested, return the minimum CPU