| //===--- 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()); |
| } |