80-cols; NFC80-cols; NFC80-cols; NFC80-cols; NFC80-cols; NFC80-cols; NFC80-cols;...
[oota-llvm.git] / lib / Support / TargetTuple.cpp
1 //===--- TargetTuple.cpp - Target tuple class -----------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "llvm/ADT/StringSwitch.h"
11 #include "llvm/ADT/TargetTuple.h"
12 #include "llvm/Support/TargetParser.h"
13
14 using namespace llvm;
15
16 // FIXME: These should be removed as soon as the Triple member is replaced.
17 static TargetTuple::ArchType
18 convertTripleArchToTupleArch(Triple::ArchType Arch) {
19   switch (Arch) {
20   case Triple::UnknownArch:
21     return TargetTuple::UnknownArch;
22   case Triple::arm:
23     return TargetTuple::arm;
24   case Triple::armeb:
25     return TargetTuple::armeb;
26   case Triple::aarch64:
27     return TargetTuple::aarch64;
28   case Triple::aarch64_be:
29     return TargetTuple::aarch64_be;
30   case Triple::bpfel:
31     return TargetTuple::bpfel;
32   case Triple::bpfeb:
33     return TargetTuple::bpfeb;
34   case Triple::hexagon:
35     return TargetTuple::hexagon;
36   case Triple::mips:
37     return TargetTuple::mips;
38   case Triple::mipsel:
39     return TargetTuple::mipsel;
40   case Triple::mips64:
41     return TargetTuple::mips64;
42   case Triple::mips64el:
43     return TargetTuple::mips64el;
44   case Triple::msp430:
45     return TargetTuple::msp430;
46   case Triple::ppc:
47     return TargetTuple::ppc;
48   case Triple::ppc64:
49     return TargetTuple::ppc64;
50   case Triple::ppc64le:
51     return TargetTuple::ppc64le;
52   case Triple::r600:
53     return TargetTuple::r600;
54   case Triple::amdgcn:
55     return TargetTuple::amdgcn;
56   case Triple::sparc:
57     return TargetTuple::sparc;
58   case Triple::sparcv9:
59     return TargetTuple::sparcv9;
60   case Triple::sparcel:
61     return TargetTuple::sparcel;
62   case Triple::systemz:
63     return TargetTuple::systemz;
64   case Triple::tce:
65     return TargetTuple::tce;
66   case Triple::thumb:
67     return TargetTuple::thumb;
68   case Triple::thumbeb:
69     return TargetTuple::thumbeb;
70   case Triple::x86:
71     return TargetTuple::x86;
72   case Triple::x86_64:
73     return TargetTuple::x86_64;
74   case Triple::xcore:
75     return TargetTuple::xcore;
76   case Triple::nvptx:
77     return TargetTuple::nvptx;
78   case Triple::nvptx64:
79     return TargetTuple::nvptx64;
80   case Triple::le32:
81     return TargetTuple::le32;
82   case Triple::le64:
83     return TargetTuple::le64;
84   case Triple::amdil:
85     return TargetTuple::amdil;
86   case Triple::amdil64:
87     return TargetTuple::amdil64;
88   case Triple::hsail:
89     return TargetTuple::hsail;
90   case Triple::hsail64:
91     return TargetTuple::hsail64;
92   case Triple::spir:
93     return TargetTuple::spir;
94   case Triple::spir64:
95     return TargetTuple::spir64;
96   case Triple::kalimba:
97     return TargetTuple::kalimba;
98   case Triple::shave:
99     return TargetTuple::shave;
100   case Triple::wasm32:
101     return TargetTuple::wasm32;
102   case Triple::wasm64:
103     return TargetTuple::wasm64;
104   }
105   llvm_unreachable("Unmapped architecture.");
106 }
107
108 // FIXME: These should be removed as soon as the Triple member is replaced.
109 static TargetTuple::SubArchType
110 convertTripleSubArchToTupleSubArch(Triple::SubArchType SubArch) {
111   switch (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;
146   }
147   llvm_unreachable("Unmapped subarchitecture.");
148 }
149
150 // FIXME: These should be removed as soon as the Triple member is replaced.
151 static TargetTuple::VendorType
152 convertTripleVendorToTupleVendor(Triple::VendorType Vendor) {
153   switch (Vendor) {
154   case Triple::UnknownVendor:
155     return TargetTuple::UnknownVendor;
156   case Triple::Apple:
157     return TargetTuple::Apple;
158   case Triple::PC:
159     return TargetTuple::PC;
160   case Triple::SCEI:
161     return TargetTuple::SCEI;
162   case Triple::BGP:
163     return TargetTuple::BGP;
164   case Triple::BGQ:
165     return TargetTuple::BGQ;
166   case Triple::Freescale:
167     return TargetTuple::Freescale;
168   case Triple::IBM:
169     return TargetTuple::IBM;
170   case Triple::ImaginationTechnologies:
171     return TargetTuple::ImaginationTechnologies;
172   case Triple::MipsTechnologies:
173     return TargetTuple::MipsTechnologies;
174   case Triple::NVIDIA:
175     return TargetTuple::NVIDIA;
176   case Triple::CSR:
177     return TargetTuple::CSR;
178   case Triple::Myriad:
179     return TargetTuple::Myriad;
180   }
181   llvm_unreachable("Unmapped vendor.");
182 }
183
184 // FIXME: These should be removed as soon as the Triple member is replaced.
185 static TargetTuple::OSType convertTripleOSToTupleOS(Triple::OSType OS) {
186   switch (OS) {
187   case Triple::UnknownOS:
188     return TargetTuple::UnknownOS;
189   case Triple::CloudABI:
190     return TargetTuple::CloudABI;
191   case Triple::Darwin:
192     return TargetTuple::Darwin;
193   case Triple::DragonFly:
194     return TargetTuple::DragonFly;
195   case Triple::FreeBSD:
196     return TargetTuple::FreeBSD;
197   case Triple::IOS:
198     return TargetTuple::IOS;
199   case Triple::KFreeBSD:
200     return TargetTuple::KFreeBSD;
201   case Triple::Linux:
202     return TargetTuple::Linux;
203   case Triple::Lv2:
204     return TargetTuple::Lv2;
205   case Triple::MacOSX:
206     return TargetTuple::MacOSX;
207   case Triple::NetBSD:
208     return TargetTuple::NetBSD;
209   case Triple::OpenBSD:
210     return TargetTuple::OpenBSD;
211   case Triple::Solaris:
212     return TargetTuple::Solaris;
213   case Triple::Win32:
214     return TargetTuple::Win32;
215   case Triple::Haiku:
216     return TargetTuple::Haiku;
217   case Triple::Minix:
218     return TargetTuple::Minix;
219   case Triple::RTEMS:
220     return TargetTuple::RTEMS;
221   case Triple::NaCl:
222     return TargetTuple::NaCl;
223   case Triple::CNK:
224     return TargetTuple::CNK;
225   case Triple::Bitrig:
226     return TargetTuple::Bitrig;
227   case Triple::AIX:
228     return TargetTuple::AIX;
229   case Triple::CUDA:
230     return TargetTuple::CUDA;
231   case Triple::NVCL:
232     return TargetTuple::NVCL;
233   case Triple::AMDHSA:
234     return TargetTuple::AMDHSA;
235   case Triple::PS4:
236     return TargetTuple::PS4;
237   }
238   llvm_unreachable("Unmapped OS.");
239 }
240
241 // FIXME: These should be removed as soon as the Triple member is replaced.
242 static TargetTuple::EnvironmentType
243 convertTripleEnvToTupleEnv(Triple::EnvironmentType Env) {
244   switch (Env) {
245   case Triple::UnknownEnvironment:
246     return TargetTuple::UnknownEnvironment;
247   case Triple::GNU:
248     return TargetTuple::GNU;
249   case Triple::GNUEABI:
250     return TargetTuple::GNUEABI;
251   case Triple::GNUEABIHF:
252     return TargetTuple::GNUEABIHF;
253   case Triple::GNUX32:
254     return TargetTuple::GNUX32;
255   case Triple::CODE16:
256     return TargetTuple::CODE16;
257   case Triple::EABI:
258     return TargetTuple::EABI;
259   case Triple::EABIHF:
260     return TargetTuple::EABIHF;
261   case Triple::Android:
262     return TargetTuple::Android;
263   case Triple::MSVC:
264     return TargetTuple::MSVC;
265   case Triple::Itanium:
266     return TargetTuple::Itanium;
267   case Triple::Cygnus:
268     return TargetTuple::Cygnus;
269   case Triple::AMDOpenCL:
270     return TargetTuple::AMDOpenCL;
271   case Triple::CoreCLR:
272     return TargetTuple::CoreCLR;
273   }
274   llvm_unreachable("Unmapped Environment.");
275 }
276
277 // FIXME: These should be removed as soon as the Triple member is replaced.
278 static TargetTuple::ObjectFormatType
279 convertTripleObjFmtToTupleObjFmt(Triple::ObjectFormatType ObjFmt) {
280   switch (ObjFmt) {
281   case Triple::UnknownObjectFormat:
282     return TargetTuple::UnknownObjectFormat;
283   case Triple::COFF:
284     return TargetTuple::COFF;
285   case Triple::ELF:
286     return TargetTuple::ELF;
287   case Triple::MachO:
288     return TargetTuple::MachO;
289   }
290   llvm_unreachable("Unmapped Object Format.");
291 }
292
293 TargetTuple::ArchType TargetTuple::getArch() const {
294   return convertTripleArchToTupleArch(GnuTT.getArch());
295 }
296
297 TargetTuple::SubArchType TargetTuple::getSubArch() const {
298   return convertTripleSubArchToTupleSubArch(GnuTT.getSubArch());
299 }
300
301 TargetTuple::VendorType TargetTuple::getVendor() const {
302   return convertTripleVendorToTupleVendor(GnuTT.getVendor());
303 }
304
305 TargetTuple::OSType TargetTuple::getOS() const {
306   return convertTripleOSToTupleOS(GnuTT.getOS());
307 }
308
309 TargetTuple::EnvironmentType TargetTuple::getEnvironment() const {
310   return convertTripleEnvToTupleEnv(GnuTT.getEnvironment());
311 }
312
313 TargetTuple::ObjectFormatType TargetTuple::getObjectFormat() const {
314   return convertTripleObjFmtToTupleObjFmt(GnuTT.getObjectFormat());
315 }