1 //===--- TargetTuple.cpp - Target tuple class -----------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/ADT/StringSwitch.h"
11 #include "llvm/ADT/TargetTuple.h"
12 #include "llvm/Support/TargetParser.h"
16 // FIXME: These should be removed as soon as the Triple member is replaced.
17 static TargetTuple::ArchType
18 convertTripleArchToTupleArch(Triple::ArchType Arch) {
20 case Triple::UnknownArch:
21 return TargetTuple::UnknownArch;
23 return TargetTuple::arm;
25 return TargetTuple::armeb;
27 return TargetTuple::aarch64;
28 case Triple::aarch64_be:
29 return TargetTuple::aarch64_be;
31 return TargetTuple::bpfel;
33 return TargetTuple::bpfeb;
35 return TargetTuple::hexagon;
37 return TargetTuple::mips;
39 return TargetTuple::mipsel;
41 return TargetTuple::mips64;
42 case Triple::mips64el:
43 return TargetTuple::mips64el;
45 return TargetTuple::msp430;
47 return TargetTuple::ppc;
49 return TargetTuple::ppc64;
51 return TargetTuple::ppc64le;
53 return TargetTuple::r600;
55 return TargetTuple::amdgcn;
57 return TargetTuple::sparc;
59 return TargetTuple::sparcv9;
61 return TargetTuple::sparcel;
63 return TargetTuple::systemz;
65 return TargetTuple::tce;
67 return TargetTuple::thumb;
69 return TargetTuple::thumbeb;
71 return TargetTuple::x86;
73 return TargetTuple::x86_64;
75 return TargetTuple::xcore;
77 return TargetTuple::nvptx;
79 return TargetTuple::nvptx64;
81 return TargetTuple::le32;
83 return TargetTuple::le64;
85 return TargetTuple::amdil;
87 return TargetTuple::amdil64;
89 return TargetTuple::hsail;
91 return TargetTuple::hsail64;
93 return TargetTuple::spir;
95 return TargetTuple::spir64;
97 return TargetTuple::kalimba;
99 return TargetTuple::shave;
101 return TargetTuple::wasm32;
103 return TargetTuple::wasm64;
105 llvm_unreachable("Unmapped architecture.");
108 // FIXME: These should be removed as soon as the Triple member is replaced.
109 static TargetTuple::SubArchType
110 convertTripleSubArchToTupleSubArch(Triple::SubArchType SubArch) {
112 case Triple::NoSubArch:
113 return TargetTuple::NoSubArch;
114 case Triple::ARMSubArch_v8_1a:
115 return TargetTuple::ARMSubArch_v8_1a;
116 case Triple::ARMSubArch_v8:
117 return TargetTuple::ARMSubArch_v8;
118 case Triple::ARMSubArch_v7:
119 return TargetTuple::ARMSubArch_v7;
120 case Triple::ARMSubArch_v7em:
121 return TargetTuple::ARMSubArch_v7em;
122 case Triple::ARMSubArch_v7m:
123 return TargetTuple::ARMSubArch_v7m;
124 case Triple::ARMSubArch_v7s:
125 return TargetTuple::ARMSubArch_v7s;
126 case Triple::ARMSubArch_v6:
127 return TargetTuple::ARMSubArch_v6;
128 case Triple::ARMSubArch_v6m:
129 return TargetTuple::ARMSubArch_v6m;
130 case Triple::ARMSubArch_v6k:
131 return TargetTuple::ARMSubArch_v6k;
132 case Triple::ARMSubArch_v6t2:
133 return TargetTuple::ARMSubArch_v6t2;
134 case Triple::ARMSubArch_v5:
135 return TargetTuple::ARMSubArch_v5;
136 case Triple::ARMSubArch_v5te:
137 return TargetTuple::ARMSubArch_v5te;
138 case Triple::ARMSubArch_v4t:
139 return TargetTuple::ARMSubArch_v4t;
140 case Triple::KalimbaSubArch_v3:
141 return TargetTuple::KalimbaSubArch_v3;
142 case Triple::KalimbaSubArch_v4:
143 return TargetTuple::KalimbaSubArch_v4;
144 case Triple::KalimbaSubArch_v5:
145 return TargetTuple::KalimbaSubArch_v5;
147 llvm_unreachable("Unmapped subarchitecture.");
150 // FIXME: These should be removed as soon as the Triple member is replaced.
151 static TargetTuple::VendorType
152 convertTripleVendorToTupleVendor(Triple::VendorType Vendor) {
154 case Triple::UnknownVendor:
155 return TargetTuple::UnknownVendor;
157 return TargetTuple::Apple;
159 return TargetTuple::PC;
161 return TargetTuple::SCEI;
163 return TargetTuple::BGP;
165 return TargetTuple::BGQ;
166 case Triple::Freescale:
167 return TargetTuple::Freescale;
169 return TargetTuple::IBM;
170 case Triple::ImaginationTechnologies:
171 return TargetTuple::ImaginationTechnologies;
172 case Triple::MipsTechnologies:
173 return TargetTuple::MipsTechnologies;
175 return TargetTuple::NVIDIA;
177 return TargetTuple::CSR;
179 return TargetTuple::Myriad;
181 llvm_unreachable("Unmapped vendor.");
184 // FIXME: These should be removed as soon as the Triple member is replaced.
185 static TargetTuple::OSType convertTripleOSToTupleOS(Triple::OSType OS) {
187 case Triple::UnknownOS:
188 return TargetTuple::UnknownOS;
189 case Triple::CloudABI:
190 return TargetTuple::CloudABI;
192 return TargetTuple::Darwin;
193 case Triple::DragonFly:
194 return TargetTuple::DragonFly;
195 case Triple::FreeBSD:
196 return TargetTuple::FreeBSD;
198 return TargetTuple::IOS;
199 case Triple::KFreeBSD:
200 return TargetTuple::KFreeBSD;
202 return TargetTuple::Linux;
204 return TargetTuple::Lv2;
206 return TargetTuple::MacOSX;
208 return TargetTuple::NetBSD;
209 case Triple::OpenBSD:
210 return TargetTuple::OpenBSD;
211 case Triple::Solaris:
212 return TargetTuple::Solaris;
214 return TargetTuple::Win32;
216 return TargetTuple::Haiku;
218 return TargetTuple::Minix;
220 return TargetTuple::RTEMS;
222 return TargetTuple::NaCl;
224 return TargetTuple::CNK;
226 return TargetTuple::Bitrig;
228 return TargetTuple::AIX;
230 return TargetTuple::CUDA;
232 return TargetTuple::NVCL;
234 return TargetTuple::AMDHSA;
236 return TargetTuple::PS4;
238 llvm_unreachable("Unmapped OS.");
241 // FIXME: These should be removed as soon as the Triple member is replaced.
242 static TargetTuple::EnvironmentType
243 convertTripleEnvToTupleEnv(Triple::EnvironmentType Env) {
245 case Triple::UnknownEnvironment:
246 return TargetTuple::UnknownEnvironment;
248 return TargetTuple::GNU;
249 case Triple::GNUEABI:
250 return TargetTuple::GNUEABI;
251 case Triple::GNUEABIHF:
252 return TargetTuple::GNUEABIHF;
254 return TargetTuple::GNUX32;
256 return TargetTuple::CODE16;
258 return TargetTuple::EABI;
260 return TargetTuple::EABIHF;
261 case Triple::Android:
262 return TargetTuple::Android;
264 return TargetTuple::MSVC;
265 case Triple::Itanium:
266 return TargetTuple::Itanium;
268 return TargetTuple::Cygnus;
269 case Triple::AMDOpenCL:
270 return TargetTuple::AMDOpenCL;
271 case Triple::CoreCLR:
272 return TargetTuple::CoreCLR;
274 llvm_unreachable("Unmapped Environment.");
277 // FIXME: These should be removed as soon as the Triple member is replaced.
278 static TargetTuple::ObjectFormatType
279 convertTripleObjFmtToTupleObjFmt(Triple::ObjectFormatType ObjFmt) {
281 case Triple::UnknownObjectFormat:
282 return TargetTuple::UnknownObjectFormat;
284 return TargetTuple::COFF;
286 return TargetTuple::ELF;
288 return TargetTuple::MachO;
290 llvm_unreachable("Unmapped Object Format.");
293 TargetTuple::ArchType TargetTuple::getArch() const {
294 return convertTripleArchToTupleArch(GnuTT.getArch());
297 TargetTuple::SubArchType TargetTuple::getSubArch() const {
298 return convertTripleSubArchToTupleSubArch(GnuTT.getSubArch());
301 TargetTuple::VendorType TargetTuple::getVendor() const {
302 return convertTripleVendorToTupleVendor(GnuTT.getVendor());
305 TargetTuple::OSType TargetTuple::getOS() const {
306 return convertTripleOSToTupleOS(GnuTT.getOS());
309 TargetTuple::EnvironmentType TargetTuple::getEnvironment() const {
310 return convertTripleEnvToTupleEnv(GnuTT.getEnvironment());
313 TargetTuple::ObjectFormatType TargetTuple::getObjectFormat() const {
314 return convertTripleObjFmtToTupleObjFmt(GnuTT.getObjectFormat());