summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/TargetTuple.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Support/TargetTuple.cpp')
-rw-r--r--llvm/lib/Support/TargetTuple.cpp315
1 files changed, 315 insertions, 0 deletions
diff --git a/llvm/lib/Support/TargetTuple.cpp b/llvm/lib/Support/TargetTuple.cpp
new file mode 100644
index 00000000000..3db21f91785
--- /dev/null
+++ b/llvm/lib/Support/TargetTuple.cpp
@@ -0,0 +1,315 @@
+//===--- TargetTuple.cpp - Target tuple class -----------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/StringSwitch.h"
+#include "llvm/ADT/TargetTuple.h"
+#include "llvm/Support/TargetParser.h"
+
+using namespace llvm;
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::ArchType
+convertTripleArchToTupleArch(Triple::ArchType Arch) {
+ switch (Arch) {
+ case Triple::UnknownArch:
+ return TargetTuple::UnknownArch;
+ case Triple::arm:
+ return TargetTuple::arm;
+ case Triple::armeb:
+ return TargetTuple::armeb;
+ case Triple::aarch64:
+ return TargetTuple::aarch64;
+ case Triple::aarch64_be:
+ return TargetTuple::aarch64_be;
+ case Triple::bpfel:
+ return TargetTuple::bpfel;
+ case Triple::bpfeb:
+ return TargetTuple::bpfeb;
+ case Triple::hexagon:
+ return TargetTuple::hexagon;
+ case Triple::mips:
+ return TargetTuple::mips;
+ case Triple::mipsel:
+ return TargetTuple::mipsel;
+ case Triple::mips64:
+ return TargetTuple::mips64;
+ case Triple::mips64el:
+ return TargetTuple::mips64el;
+ case Triple::msp430:
+ return TargetTuple::msp430;
+ case Triple::ppc:
+ return TargetTuple::ppc;
+ case Triple::ppc64:
+ return TargetTuple::ppc64;
+ case Triple::ppc64le:
+ return TargetTuple::ppc64le;
+ case Triple::r600:
+ return TargetTuple::r600;
+ case Triple::amdgcn:
+ return TargetTuple::amdgcn;
+ case Triple::sparc:
+ return TargetTuple::sparc;
+ case Triple::sparcv9:
+ return TargetTuple::sparcv9;
+ case Triple::sparcel:
+ return TargetTuple::sparcel;
+ case Triple::systemz:
+ return TargetTuple::systemz;
+ case Triple::tce:
+ return TargetTuple::tce;
+ case Triple::thumb:
+ return TargetTuple::thumb;
+ case Triple::thumbeb:
+ return TargetTuple::thumbeb;
+ case Triple::x86:
+ return TargetTuple::x86;
+ case Triple::x86_64:
+ return TargetTuple::x86_64;
+ case Triple::xcore:
+ return TargetTuple::xcore;
+ case Triple::nvptx:
+ return TargetTuple::nvptx;
+ case Triple::nvptx64:
+ return TargetTuple::nvptx64;
+ case Triple::le32:
+ return TargetTuple::le32;
+ case Triple::le64:
+ return TargetTuple::le64;
+ case Triple::amdil:
+ return TargetTuple::amdil;
+ case Triple::amdil64:
+ return TargetTuple::amdil64;
+ case Triple::hsail:
+ return TargetTuple::hsail;
+ case Triple::hsail64:
+ return TargetTuple::hsail64;
+ case Triple::spir:
+ return TargetTuple::spir;
+ case Triple::spir64:
+ return TargetTuple::spir64;
+ case Triple::kalimba:
+ return TargetTuple::kalimba;
+ case Triple::shave:
+ return TargetTuple::shave;
+ case Triple::wasm32:
+ return TargetTuple::wasm32;
+ case Triple::wasm64:
+ return TargetTuple::wasm64;
+ }
+ llvm_unreachable("Unmapped architecture.");
+}
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::SubArchType
+convertTripleSubArchToTupleSubArch(Triple::SubArchType SubArch) {
+ switch (SubArch) {
+ case Triple::NoSubArch:
+ return TargetTuple::NoSubArch;
+ case Triple::ARMSubArch_v8_1a:
+ return TargetTuple::ARMSubArch_v8_1a;
+ case Triple::ARMSubArch_v8:
+ return TargetTuple::ARMSubArch_v8;
+ case Triple::ARMSubArch_v7:
+ return TargetTuple::ARMSubArch_v7;
+ case Triple::ARMSubArch_v7em:
+ return TargetTuple::ARMSubArch_v7em;
+ case Triple::ARMSubArch_v7m:
+ return TargetTuple::ARMSubArch_v7m;
+ case Triple::ARMSubArch_v7s:
+ return TargetTuple::ARMSubArch_v7s;
+ case Triple::ARMSubArch_v6:
+ return TargetTuple::ARMSubArch_v6;
+ case Triple::ARMSubArch_v6m:
+ return TargetTuple::ARMSubArch_v6m;
+ case Triple::ARMSubArch_v6k:
+ return TargetTuple::ARMSubArch_v6k;
+ case Triple::ARMSubArch_v6t2:
+ return TargetTuple::ARMSubArch_v6t2;
+ case Triple::ARMSubArch_v5:
+ return TargetTuple::ARMSubArch_v5;
+ case Triple::ARMSubArch_v5te:
+ return TargetTuple::ARMSubArch_v5te;
+ case Triple::ARMSubArch_v4t:
+ return TargetTuple::ARMSubArch_v4t;
+ case Triple::KalimbaSubArch_v3:
+ return TargetTuple::KalimbaSubArch_v3;
+ case Triple::KalimbaSubArch_v4:
+ return TargetTuple::KalimbaSubArch_v4;
+ case Triple::KalimbaSubArch_v5:
+ return TargetTuple::KalimbaSubArch_v5;
+ }
+ llvm_unreachable("Unmapped subarchitecture.");
+}
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::VendorType
+convertTripleVendorToTupleVendor(Triple::VendorType Vendor) {
+ switch (Vendor) {
+ case Triple::UnknownVendor:
+ return TargetTuple::UnknownVendor;
+ case Triple::Apple:
+ return TargetTuple::Apple;
+ case Triple::PC:
+ return TargetTuple::PC;
+ case Triple::SCEI:
+ return TargetTuple::SCEI;
+ case Triple::BGP:
+ return TargetTuple::BGP;
+ case Triple::BGQ:
+ return TargetTuple::BGQ;
+ case Triple::Freescale:
+ return TargetTuple::Freescale;
+ case Triple::IBM:
+ return TargetTuple::IBM;
+ case Triple::ImaginationTechnologies:
+ return TargetTuple::ImaginationTechnologies;
+ case Triple::MipsTechnologies:
+ return TargetTuple::MipsTechnologies;
+ case Triple::NVIDIA:
+ return TargetTuple::NVIDIA;
+ case Triple::CSR:
+ return TargetTuple::CSR;
+ case Triple::Myriad:
+ return TargetTuple::Myriad;
+ }
+ llvm_unreachable("Unmapped vendor.");
+}
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::OSType convertTripleOSToTupleOS(Triple::OSType OS) {
+ switch (OS) {
+ case Triple::UnknownOS:
+ return TargetTuple::UnknownOS;
+ case Triple::CloudABI:
+ return TargetTuple::CloudABI;
+ case Triple::Darwin:
+ return TargetTuple::Darwin;
+ case Triple::DragonFly:
+ return TargetTuple::DragonFly;
+ case Triple::FreeBSD:
+ return TargetTuple::FreeBSD;
+ case Triple::IOS:
+ return TargetTuple::IOS;
+ case Triple::KFreeBSD:
+ return TargetTuple::KFreeBSD;
+ case Triple::Linux:
+ return TargetTuple::Linux;
+ case Triple::Lv2:
+ return TargetTuple::Lv2;
+ case Triple::MacOSX:
+ return TargetTuple::MacOSX;
+ case Triple::NetBSD:
+ return TargetTuple::NetBSD;
+ case Triple::OpenBSD:
+ return TargetTuple::OpenBSD;
+ case Triple::Solaris:
+ return TargetTuple::Solaris;
+ case Triple::Win32:
+ return TargetTuple::Win32;
+ case Triple::Haiku:
+ return TargetTuple::Haiku;
+ case Triple::Minix:
+ return TargetTuple::Minix;
+ case Triple::RTEMS:
+ return TargetTuple::RTEMS;
+ case Triple::NaCl:
+ return TargetTuple::NaCl;
+ case Triple::CNK:
+ return TargetTuple::CNK;
+ case Triple::Bitrig:
+ return TargetTuple::Bitrig;
+ case Triple::AIX:
+ return TargetTuple::AIX;
+ case Triple::CUDA:
+ return TargetTuple::CUDA;
+ case Triple::NVCL:
+ return TargetTuple::NVCL;
+ case Triple::AMDHSA:
+ return TargetTuple::AMDHSA;
+ case Triple::PS4:
+ return TargetTuple::PS4;
+ }
+ llvm_unreachable("Unmapped OS.");
+}
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::EnvironmentType
+convertTripleEnvToTupleEnv(Triple::EnvironmentType Env) {
+ switch (Env) {
+ case Triple::UnknownEnvironment:
+ return TargetTuple::UnknownEnvironment;
+ case Triple::GNU:
+ return TargetTuple::GNU;
+ case Triple::GNUEABI:
+ return TargetTuple::GNUEABI;
+ case Triple::GNUEABIHF:
+ return TargetTuple::GNUEABIHF;
+ case Triple::GNUX32:
+ return TargetTuple::GNUX32;
+ case Triple::CODE16:
+ return TargetTuple::CODE16;
+ case Triple::EABI:
+ return TargetTuple::EABI;
+ case Triple::EABIHF:
+ return TargetTuple::EABIHF;
+ case Triple::Android:
+ return TargetTuple::Android;
+ case Triple::MSVC:
+ return TargetTuple::MSVC;
+ case Triple::Itanium:
+ return TargetTuple::Itanium;
+ case Triple::Cygnus:
+ return TargetTuple::Cygnus;
+ case Triple::AMDOpenCL:
+ return TargetTuple::AMDOpenCL;
+ case Triple::CoreCLR:
+ return TargetTuple::CoreCLR;
+ }
+ llvm_unreachable("Unmapped Environment.");
+}
+
+// FIXME: These should be removed as soon as the Triple member is replaced.
+static TargetTuple::ObjectFormatType
+convertTripleObjFmtToTupleObjFmt(Triple::ObjectFormatType ObjFmt) {
+ switch (ObjFmt) {
+ case Triple::UnknownObjectFormat:
+ return TargetTuple::UnknownObjectFormat;
+ case Triple::COFF:
+ return TargetTuple::COFF;
+ case Triple::ELF:
+ return TargetTuple::ELF;
+ case Triple::MachO:
+ return TargetTuple::MachO;
+ }
+ llvm_unreachable("Unmapped Object Format.");
+}
+
+TargetTuple::ArchType TargetTuple::getArch() const {
+ return convertTripleArchToTupleArch(GnuTT.getArch());
+}
+
+TargetTuple::SubArchType TargetTuple::getSubArch() const {
+ return convertTripleSubArchToTupleSubArch(GnuTT.getSubArch());
+}
+
+TargetTuple::VendorType TargetTuple::getVendor() const {
+ return convertTripleVendorToTupleVendor(GnuTT.getVendor());
+}
+
+TargetTuple::OSType TargetTuple::getOS() const {
+ return convertTripleOSToTupleOS(GnuTT.getOS());
+}
+
+TargetTuple::EnvironmentType TargetTuple::getEnvironment() const {
+ return convertTripleEnvToTupleEnv(GnuTT.getEnvironment());
+}
+
+TargetTuple::ObjectFormatType TargetTuple::getObjectFormat() const {
+ return convertTripleObjFmtToTupleObjFmt(GnuTT.getObjectFormat());
+}
OpenPOWER on IntegriCloud