1 //===----------- Triple.cpp - Triple unit tests ---------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "llvm/ADT/Triple.h"
10 #include "gtest/gtest.h"
11
12 using namespace llvm;
13
14 namespace {
15
TEST(TripleTest,BasicParsing)16 TEST(TripleTest, BasicParsing) {
17 Triple T;
18
19 T = Triple("");
20 EXPECT_EQ("", T.getArchName().str());
21 EXPECT_EQ("", T.getVendorName().str());
22 EXPECT_EQ("", T.getOSName().str());
23 EXPECT_EQ("", T.getEnvironmentName().str());
24
25 T = Triple("-");
26 EXPECT_EQ("", T.getArchName().str());
27 EXPECT_EQ("", T.getVendorName().str());
28 EXPECT_EQ("", T.getOSName().str());
29 EXPECT_EQ("", T.getEnvironmentName().str());
30
31 T = Triple("--");
32 EXPECT_EQ("", T.getArchName().str());
33 EXPECT_EQ("", T.getVendorName().str());
34 EXPECT_EQ("", T.getOSName().str());
35 EXPECT_EQ("", T.getEnvironmentName().str());
36
37 T = Triple("---");
38 EXPECT_EQ("", T.getArchName().str());
39 EXPECT_EQ("", T.getVendorName().str());
40 EXPECT_EQ("", T.getOSName().str());
41 EXPECT_EQ("", T.getEnvironmentName().str());
42
43 T = Triple("----");
44 EXPECT_EQ("", T.getArchName().str());
45 EXPECT_EQ("", T.getVendorName().str());
46 EXPECT_EQ("", T.getOSName().str());
47 EXPECT_EQ("-", T.getEnvironmentName().str());
48
49 T = Triple("a");
50 EXPECT_EQ("a", T.getArchName().str());
51 EXPECT_EQ("", T.getVendorName().str());
52 EXPECT_EQ("", T.getOSName().str());
53 EXPECT_EQ("", T.getEnvironmentName().str());
54
55 T = Triple("a-b");
56 EXPECT_EQ("a", T.getArchName().str());
57 EXPECT_EQ("b", T.getVendorName().str());
58 EXPECT_EQ("", T.getOSName().str());
59 EXPECT_EQ("", T.getEnvironmentName().str());
60
61 T = Triple("a-b-c");
62 EXPECT_EQ("a", T.getArchName().str());
63 EXPECT_EQ("b", T.getVendorName().str());
64 EXPECT_EQ("c", T.getOSName().str());
65 EXPECT_EQ("", T.getEnvironmentName().str());
66
67 T = Triple("a-b-c-d");
68 EXPECT_EQ("a", T.getArchName().str());
69 EXPECT_EQ("b", T.getVendorName().str());
70 EXPECT_EQ("c", T.getOSName().str());
71 EXPECT_EQ("d", T.getEnvironmentName().str());
72 }
73
TEST(TripleTest,ParsedIDs)74 TEST(TripleTest, ParsedIDs) {
75 Triple T;
76
77 T = Triple("i386-apple-darwin");
78 EXPECT_EQ(Triple::x86, T.getArch());
79 EXPECT_EQ(Triple::Apple, T.getVendor());
80 EXPECT_EQ(Triple::Darwin, T.getOS());
81 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
82
83 T = Triple("i386-pc-elfiamcu");
84 EXPECT_EQ(Triple::x86, T.getArch());
85 EXPECT_EQ(Triple::PC, T.getVendor());
86 EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
87 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
88
89 T = Triple("i386-pc-contiki-unknown");
90 EXPECT_EQ(Triple::x86, T.getArch());
91 EXPECT_EQ(Triple::PC, T.getVendor());
92 EXPECT_EQ(Triple::Contiki, T.getOS());
93 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
94
95 T = Triple("i386-pc-hurd-gnu");
96 EXPECT_EQ(Triple::x86, T.getArch());
97 EXPECT_EQ(Triple::PC, T.getVendor());
98 EXPECT_EQ(Triple::Hurd, T.getOS());
99 EXPECT_EQ(Triple::GNU, T.getEnvironment());
100
101 T = Triple("x86_64-pc-linux-gnu");
102 EXPECT_EQ(Triple::x86_64, T.getArch());
103 EXPECT_EQ(Triple::PC, T.getVendor());
104 EXPECT_EQ(Triple::Linux, T.getOS());
105 EXPECT_EQ(Triple::GNU, T.getEnvironment());
106
107 T = Triple("x86_64-pc-linux-musl");
108 EXPECT_EQ(Triple::x86_64, T.getArch());
109 EXPECT_EQ(Triple::PC, T.getVendor());
110 EXPECT_EQ(Triple::Linux, T.getOS());
111 EXPECT_EQ(Triple::Musl, T.getEnvironment());
112
113 T = Triple("powerpc-bgp-linux");
114 EXPECT_EQ(Triple::ppc, T.getArch());
115 EXPECT_EQ(Triple::BGP, T.getVendor());
116 EXPECT_EQ(Triple::Linux, T.getOS());
117 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
118
119 T = Triple("powerpc-bgp-cnk");
120 EXPECT_EQ(Triple::ppc, T.getArch());
121 EXPECT_EQ(Triple::BGP, T.getVendor());
122 EXPECT_EQ(Triple::CNK, T.getOS());
123 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
124
125 T = Triple("ppc-bgp-linux");
126 EXPECT_EQ(Triple::ppc, T.getArch());
127 EXPECT_EQ(Triple::BGP, T.getVendor());
128 EXPECT_EQ(Triple::Linux, T.getOS());
129 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
130
131 T = Triple("ppc32-bgp-linux");
132 EXPECT_EQ(Triple::ppc, T.getArch());
133 EXPECT_EQ(Triple::BGP, T.getVendor());
134 EXPECT_EQ(Triple::Linux, T.getOS());
135 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
136
137 T = Triple("powerpc64-bgq-linux");
138 EXPECT_EQ(Triple::ppc64, T.getArch());
139 EXPECT_EQ(Triple::BGQ, T.getVendor());
140 EXPECT_EQ(Triple::Linux, T.getOS());
141 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
142
143 T = Triple("ppc64-bgq-linux");
144 EXPECT_EQ(Triple::ppc64, T.getArch());
145 EXPECT_EQ(Triple::BGQ, T.getVendor());
146 EXPECT_EQ(Triple::Linux, T.getOS());
147
148 T = Triple("powerpc-ibm-aix");
149 EXPECT_EQ(Triple::ppc, T.getArch());
150 EXPECT_EQ(Triple::IBM, T.getVendor());
151 EXPECT_EQ(Triple::AIX, T.getOS());
152 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
153
154 T = Triple("powerpc64-ibm-aix");
155 EXPECT_EQ(Triple::ppc64, T.getArch());
156 EXPECT_EQ(Triple::IBM, T.getVendor());
157 EXPECT_EQ(Triple::AIX, T.getOS());
158 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
159
160 T = Triple("powerpc-dunno-notsure");
161 EXPECT_EQ(Triple::ppc, T.getArch());
162 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
163 EXPECT_EQ(Triple::UnknownOS, T.getOS());
164 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
165
166 T = Triple("powerpcspe-unknown-freebsd");
167 EXPECT_EQ(Triple::ppc, T.getArch());
168 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch());
169 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
170 EXPECT_EQ(Triple::FreeBSD, T.getOS());
171 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
172
173 T = Triple("arm-none-none-eabi");
174 EXPECT_EQ(Triple::arm, T.getArch());
175 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
176 EXPECT_EQ(Triple::UnknownOS, T.getOS());
177 EXPECT_EQ(Triple::EABI, T.getEnvironment());
178
179 T = Triple("arm-none-linux-musleabi");
180 EXPECT_EQ(Triple::arm, T.getArch());
181 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
182 EXPECT_EQ(Triple::Linux, T.getOS());
183 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
184
185 T = Triple("armv6hl-none-linux-gnueabi");
186 EXPECT_EQ(Triple::arm, T.getArch());
187 EXPECT_EQ(Triple::Linux, T.getOS());
188 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
189 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
190
191 T = Triple("armv7hl-none-linux-gnueabi");
192 EXPECT_EQ(Triple::arm, T.getArch());
193 EXPECT_EQ(Triple::Linux, T.getOS());
194 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
195 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
196
197 T = Triple("amdil-unknown-unknown");
198 EXPECT_EQ(Triple::amdil, T.getArch());
199 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
200 EXPECT_EQ(Triple::UnknownOS, T.getOS());
201
202 T = Triple("amdil64-unknown-unknown");
203 EXPECT_EQ(Triple::amdil64, T.getArch());
204 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
205 EXPECT_EQ(Triple::UnknownOS, T.getOS());
206
207 T = Triple("hsail-unknown-unknown");
208 EXPECT_EQ(Triple::hsail, T.getArch());
209 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
210 EXPECT_EQ(Triple::UnknownOS, T.getOS());
211
212 T = Triple("hsail64-unknown-unknown");
213 EXPECT_EQ(Triple::hsail64, T.getArch());
214 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
215 EXPECT_EQ(Triple::UnknownOS, T.getOS());
216
217 T = Triple("sparcel-unknown-unknown");
218 EXPECT_EQ(Triple::sparcel, T.getArch());
219 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
220 EXPECT_EQ(Triple::UnknownOS, T.getOS());
221
222 T = Triple("spir-unknown-unknown");
223 EXPECT_EQ(Triple::spir, T.getArch());
224 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
225 EXPECT_EQ(Triple::UnknownOS, T.getOS());
226
227 T = Triple("spir64-unknown-unknown");
228 EXPECT_EQ(Triple::spir64, T.getArch());
229 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
230 EXPECT_EQ(Triple::UnknownOS, T.getOS());
231
232 T = Triple("x86_64-unknown-ananas");
233 EXPECT_EQ(Triple::x86_64, T.getArch());
234 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
235 EXPECT_EQ(Triple::Ananas, T.getOS());
236 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
237
238 T = Triple("x86_64-unknown-cloudabi");
239 EXPECT_EQ(Triple::x86_64, T.getArch());
240 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
241 EXPECT_EQ(Triple::CloudABI, T.getOS());
242 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
243
244 T = Triple("x86_64-unknown-fuchsia");
245 EXPECT_EQ(Triple::x86_64, T.getArch());
246 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
247 EXPECT_EQ(Triple::Fuchsia, T.getOS());
248 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
249
250 T = Triple("x86_64-unknown-hermit");
251 EXPECT_EQ(Triple::x86_64, T.getArch());
252 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
253 EXPECT_EQ(Triple::HermitCore, T.getOS());
254 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
255
256 T = Triple("wasm32-unknown-unknown");
257 EXPECT_EQ(Triple::wasm32, T.getArch());
258 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
259 EXPECT_EQ(Triple::UnknownOS, T.getOS());
260 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
261
262 T = Triple("wasm32-unknown-wasi");
263 EXPECT_EQ(Triple::wasm32, T.getArch());
264 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
265 EXPECT_EQ(Triple::WASI, T.getOS());
266 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
267
268 T = Triple("wasm64-unknown-unknown");
269 EXPECT_EQ(Triple::wasm64, T.getArch());
270 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
271 EXPECT_EQ(Triple::UnknownOS, T.getOS());
272 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
273
274 T = Triple("wasm64-unknown-wasi");
275 EXPECT_EQ(Triple::wasm64, T.getArch());
276 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
277 EXPECT_EQ(Triple::WASI, T.getOS());
278 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
279
280 T = Triple("avr-unknown-unknown");
281 EXPECT_EQ(Triple::avr, T.getArch());
282 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
283 EXPECT_EQ(Triple::UnknownOS, T.getOS());
284 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
285
286 T = Triple("avr");
287 EXPECT_EQ(Triple::avr, T.getArch());
288 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
289 EXPECT_EQ(Triple::UnknownOS, T.getOS());
290 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
291
292 T = Triple("lanai-unknown-unknown");
293 EXPECT_EQ(Triple::lanai, T.getArch());
294 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
295 EXPECT_EQ(Triple::UnknownOS, T.getOS());
296 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
297
298 T = Triple("lanai");
299 EXPECT_EQ(Triple::lanai, T.getArch());
300 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
301 EXPECT_EQ(Triple::UnknownOS, T.getOS());
302 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
303
304 T = Triple("amdgcn-mesa-mesa3d");
305 EXPECT_EQ(Triple::amdgcn, T.getArch());
306 EXPECT_EQ(Triple::Mesa, T.getVendor());
307 EXPECT_EQ(Triple::Mesa3D, T.getOS());
308 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
309
310 T = Triple("amdgcn-amd-amdhsa");
311 EXPECT_EQ(Triple::amdgcn, T.getArch());
312 EXPECT_EQ(Triple::AMD, T.getVendor());
313 EXPECT_EQ(Triple::AMDHSA, T.getOS());
314 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
315
316 T = Triple("amdgcn-amd-amdpal");
317 EXPECT_EQ(Triple::amdgcn, T.getArch());
318 EXPECT_EQ(Triple::AMD, T.getVendor());
319 EXPECT_EQ(Triple::AMDPAL, T.getOS());
320 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
321
322 T = Triple("ve-unknown-linux");
323 EXPECT_EQ(Triple::ve, T.getArch());
324 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
325 EXPECT_EQ(Triple::Linux, T.getOS());
326 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
327
328 T = Triple("riscv32-unknown-unknown");
329 EXPECT_EQ(Triple::riscv32, T.getArch());
330 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
331 EXPECT_EQ(Triple::UnknownOS, T.getOS());
332 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
333
334 T = Triple("riscv64-unknown-linux");
335 EXPECT_EQ(Triple::riscv64, T.getArch());
336 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
337 EXPECT_EQ(Triple::Linux, T.getOS());
338 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
339
340 T = Triple("riscv64-unknown-freebsd");
341 EXPECT_EQ(Triple::riscv64, T.getArch());
342 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
343 EXPECT_EQ(Triple::FreeBSD, T.getOS());
344 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
345
346 T = Triple("riscv64-suse-linux");
347 EXPECT_EQ(Triple::riscv64, T.getArch());
348 EXPECT_EQ(Triple::SUSE, T.getVendor());
349 EXPECT_EQ(Triple::Linux, T.getOS());
350 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
351
352 T = Triple("armv7hl-suse-linux-gnueabi");
353 EXPECT_EQ(Triple::arm, T.getArch());
354 EXPECT_EQ(Triple::SUSE, T.getVendor());
355 EXPECT_EQ(Triple::Linux, T.getOS());
356 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
357
358 T = Triple("i586-pc-haiku");
359 EXPECT_EQ(Triple::x86, T.getArch());
360 EXPECT_EQ(Triple::PC, T.getVendor());
361 EXPECT_EQ(Triple::Haiku, T.getOS());
362 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
363
364 T = Triple("x86_64-unknown-haiku");
365 EXPECT_EQ(Triple::x86_64, T.getArch());
366 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
367 EXPECT_EQ(Triple::Haiku, T.getOS());
368 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
369
370 T = Triple("mips-mti-linux-gnu");
371 EXPECT_EQ(Triple::mips, T.getArch());
372 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
373 EXPECT_EQ(Triple::Linux, T.getOS());
374 EXPECT_EQ(Triple::GNU, T.getEnvironment());
375
376 T = Triple("mipsel-img-linux-gnu");
377 EXPECT_EQ(Triple::mipsel, T.getArch());
378 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
379 EXPECT_EQ(Triple::Linux, T.getOS());
380 EXPECT_EQ(Triple::GNU, T.getEnvironment());
381
382 T = Triple("mips64-mti-linux-gnu");
383 EXPECT_EQ(Triple::mips64, T.getArch());
384 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
385 EXPECT_EQ(Triple::Linux, T.getOS());
386 EXPECT_EQ(Triple::GNU, T.getEnvironment());
387
388 T = Triple("mips64el-img-linux-gnu");
389 EXPECT_EQ(Triple::mips64el, T.getArch());
390 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
391 EXPECT_EQ(Triple::Linux, T.getOS());
392 EXPECT_EQ(Triple::GNU, T.getEnvironment());
393
394 T = Triple("mips64el-img-linux-gnuabin32");
395 EXPECT_EQ(Triple::mips64el, T.getArch());
396 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
397 EXPECT_EQ(Triple::Linux, T.getOS());
398 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
399
400 T = Triple("mips64el-unknown-linux-gnuabi64");
401 EXPECT_EQ(Triple::mips64el, T.getArch());
402 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
403 EXPECT_EQ(Triple::Linux, T.getOS());
404 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
405 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
406 T = Triple("mips64el");
407 EXPECT_EQ(Triple::mips64el, T.getArch());
408 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
409 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
410 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
411
412 T = Triple("mips64-unknown-linux-gnuabi64");
413 EXPECT_EQ(Triple::mips64, T.getArch());
414 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
415 EXPECT_EQ(Triple::Linux, T.getOS());
416 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
417 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
418 T = Triple("mips64");
419 EXPECT_EQ(Triple::mips64, T.getArch());
420 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
421 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
422 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
423
424 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64");
425 EXPECT_EQ(Triple::mips64el, T.getArch());
426 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
427 EXPECT_EQ(Triple::Linux, T.getOS());
428 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
429 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
430 T = Triple("mips64r6el");
431 EXPECT_EQ(Triple::mips64el, T.getArch());
432 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
433 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
434 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
435 T = Triple("mipsisa64r6el");
436 EXPECT_EQ(Triple::mips64el, T.getArch());
437 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
438 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
439 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
440
441 T = Triple("mipsisa64r6-unknown-linux-gnuabi64");
442 EXPECT_EQ(Triple::mips64, T.getArch());
443 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
444 EXPECT_EQ(Triple::Linux, T.getOS());
445 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
446 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
447 T = Triple("mips64r6");
448 EXPECT_EQ(Triple::mips64, T.getArch());
449 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
450 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
451 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
452 T = Triple("mipsisa64r6");
453 EXPECT_EQ(Triple::mips64, T.getArch());
454 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
455 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
456 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
457
458 T = Triple("mips64el-unknown-linux-gnuabin32");
459 EXPECT_EQ(Triple::mips64el, T.getArch());
460 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
461 EXPECT_EQ(Triple::Linux, T.getOS());
462 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
463 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
464 T = Triple("mipsn32el");
465 EXPECT_EQ(Triple::mips64el, T.getArch());
466 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
467 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
468 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
469
470 T = Triple("mips64-unknown-linux-gnuabin32");
471 EXPECT_EQ(Triple::mips64, T.getArch());
472 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
473 EXPECT_EQ(Triple::Linux, T.getOS());
474 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
475 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
476 T = Triple("mipsn32");
477 EXPECT_EQ(Triple::mips64, T.getArch());
478 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
479 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
480 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
481
482 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32");
483 EXPECT_EQ(Triple::mips64el, T.getArch());
484 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
485 EXPECT_EQ(Triple::Linux, T.getOS());
486 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
487 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
488 T = Triple("mipsn32r6el");
489 EXPECT_EQ(Triple::mips64el, T.getArch());
490 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
491 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
492 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
493
494 T = Triple("mipsisa64r6-unknown-linux-gnuabin32");
495 EXPECT_EQ(Triple::mips64, T.getArch());
496 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
497 EXPECT_EQ(Triple::Linux, T.getOS());
498 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
499 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
500 T = Triple("mipsn32r6");
501 EXPECT_EQ(Triple::mips64, T.getArch());
502 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
503 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
504 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
505
506 T = Triple("mipsel-unknown-linux-gnu");
507 EXPECT_EQ(Triple::mipsel, T.getArch());
508 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
509 EXPECT_EQ(Triple::Linux, T.getOS());
510 EXPECT_EQ(Triple::GNU, T.getEnvironment());
511 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
512 T = Triple("mipsel");
513 EXPECT_EQ(Triple::mipsel, T.getArch());
514 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
515 EXPECT_EQ(Triple::GNU, T.getEnvironment());
516 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
517
518 T = Triple("mips-unknown-linux-gnu");
519 EXPECT_EQ(Triple::mips, T.getArch());
520 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
521 EXPECT_EQ(Triple::Linux, T.getOS());
522 EXPECT_EQ(Triple::GNU, T.getEnvironment());
523 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
524 T = Triple("mips");
525 EXPECT_EQ(Triple::mips, T.getArch());
526 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
527 EXPECT_EQ(Triple::GNU, T.getEnvironment());
528 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
529
530 T = Triple("mipsisa32r6el-unknown-linux-gnu");
531 EXPECT_EQ(Triple::mipsel, T.getArch());
532 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
533 EXPECT_EQ(Triple::Linux, T.getOS());
534 EXPECT_EQ(Triple::GNU, T.getEnvironment());
535 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
536 T = Triple("mipsr6el");
537 EXPECT_EQ(Triple::mipsel, T.getArch());
538 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
539 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
540 T = Triple("mipsisa32r6el");
541 EXPECT_EQ(Triple::mipsel, T.getArch());
542 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
543 EXPECT_EQ(Triple::GNU, T.getEnvironment());
544 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
545
546 T = Triple("mipsisa32r6-unknown-linux-gnu");
547 EXPECT_EQ(Triple::mips, T.getArch());
548 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
549 EXPECT_EQ(Triple::Linux, T.getOS());
550 EXPECT_EQ(Triple::GNU, T.getEnvironment());
551 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
552 T = Triple("mipsr6");
553 EXPECT_EQ(Triple::mips, T.getArch());
554 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
555 EXPECT_EQ(Triple::GNU, T.getEnvironment());
556 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
557 T = Triple("mipsisa32r6");
558 EXPECT_EQ(Triple::mips, T.getArch());
559 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
560 EXPECT_EQ(Triple::GNU, T.getEnvironment());
561 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
562
563 T = Triple("arm-oe-linux-gnueabi");
564 EXPECT_EQ(Triple::arm, T.getArch());
565 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
566 EXPECT_EQ(Triple::Linux, T.getOS());
567 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
568
569 T = Triple("aarch64-oe-linux");
570 EXPECT_EQ(Triple::aarch64, T.getArch());
571 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
572 EXPECT_EQ(Triple::Linux, T.getOS());
573 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
574 EXPECT_TRUE(T.isArch64Bit());
575
576 T = Triple("arm64_32-apple-ios");
577 EXPECT_EQ(Triple::aarch64_32, T.getArch());
578 EXPECT_EQ(Triple::IOS, T.getOS());
579 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
580 EXPECT_TRUE(T.isArch32Bit());
581
582 T = Triple("huh");
583 EXPECT_EQ(Triple::UnknownArch, T.getArch());
584 }
585
Join(StringRef A,StringRef B,StringRef C)586 static std::string Join(StringRef A, StringRef B, StringRef C) {
587 std::string Str = A;
588 Str += '-';
589 Str += B;
590 Str += '-';
591 Str += C;
592 return Str;
593 }
594
Join(StringRef A,StringRef B,StringRef C,StringRef D)595 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
596 std::string Str = A;
597 Str += '-';
598 Str += B;
599 Str += '-';
600 Str += C;
601 Str += '-';
602 Str += D;
603 return Str;
604 }
605
TEST(TripleTest,Normalization)606 TEST(TripleTest, Normalization) {
607
608 EXPECT_EQ("unknown", Triple::normalize(""));
609 EXPECT_EQ("unknown-unknown", Triple::normalize("-"));
610 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--"));
611 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---"));
612 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown",
613 Triple::normalize("----"));
614
615 EXPECT_EQ("a", Triple::normalize("a"));
616 EXPECT_EQ("a-b", Triple::normalize("a-b"));
617 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
618 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
619
620 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
621 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
622 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
623 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
624
625 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
626 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c"));
627 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
628 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
629
630 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
631 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c"));
632 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c"));
633
634 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
635 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386"));
636 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c"));
637 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-"));
638
639 EXPECT_EQ("i386", Triple::normalize("i386"));
640 EXPECT_EQ("unknown-pc", Triple::normalize("pc"));
641 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux"));
642
643 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux"));
644
645 // Check that normalizing a permutated set of valid components returns a
646 // triple with the unpermuted components.
647 //
648 // We don't check every possible combination. For the set of architectures A,
649 // vendors V, operating systems O, and environments E, that would require |A|
650 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given
651 // slot and make sure it gets normalized to the correct position from every
652 // permutation. This should cover the core logic while being a tractable
653 // number of tests at (|A| + |V| + |O| + |E|) * 4!.
654 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);
655 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);
656 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);
657 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);
658 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),
659 Triple::getVendorTypeName(FirstVendorType),
660 Triple::getOSTypeName(FirstOSType),
661 Triple::getEnvironmentTypeName(FirstEnvType)};
662 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {
663 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
664 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
665 std::string E = Join(C[0], C[1], C[2]);
666 int I[] = {0, 1, 2};
667 do {
668 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
669 } while (std::next_permutation(std::begin(I), std::end(I)));
670 std::string F = Join(C[0], C[1], C[2], C[3]);
671 int J[] = {0, 1, 2, 3};
672 do {
673 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
674 } while (std::next_permutation(std::begin(J), std::end(J)));
675 }
676 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;
677 ++Vendor) {
678 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
679 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
680 std::string E = Join(C[0], C[1], C[2]);
681 int I[] = {0, 1, 2};
682 do {
683 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
684 } while (std::next_permutation(std::begin(I), std::end(I)));
685 std::string F = Join(C[0], C[1], C[2], C[3]);
686 int J[] = {0, 1, 2, 3};
687 do {
688 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
689 } while (std::next_permutation(std::begin(J), std::end(J)));
690 }
691 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {
692 if (OS == Triple::Win32)
693 continue;
694 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
695 C[2] = Triple::getOSTypeName(Triple::OSType(OS));
696 std::string E = Join(C[0], C[1], C[2]);
697 int I[] = {0, 1, 2};
698 do {
699 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
700 } while (std::next_permutation(std::begin(I), std::end(I)));
701 std::string F = Join(C[0], C[1], C[2], C[3]);
702 int J[] = {0, 1, 2, 3};
703 do {
704 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
705 } while (std::next_permutation(std::begin(J), std::end(J)));
706 }
707 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {
708 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
709 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
710 std::string F = Join(C[0], C[1], C[2], C[3]);
711 int J[] = {0, 1, 2, 3};
712 do {
713 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
714 } while (std::next_permutation(std::begin(J), std::end(J)));
715 }
716
717 // Various real-world funky triples. The value returned by GCC's config.sub
718 // is given in the comment.
719 EXPECT_EQ("i386-unknown-windows-gnu",
720 Triple::normalize("i386-mingw32")); // i386-pc-mingw32
721 EXPECT_EQ("x86_64-unknown-linux-gnu",
722 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
723 EXPECT_EQ("i486-unknown-linux-gnu",
724 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
725 EXPECT_EQ("i386-redhat-linux",
726 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
727 EXPECT_EQ("i686-unknown-linux",
728 Triple::normalize("i686-linux")); // i686-pc-linux-gnu
729 EXPECT_EQ("arm-none-unknown-eabi",
730 Triple::normalize("arm-none-eabi")); // arm-none-eabi
731 EXPECT_EQ("ve-unknown-linux",
732 Triple::normalize("ve-linux")); // ve-linux
733 EXPECT_EQ("wasm32-unknown-wasi",
734 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi
735 EXPECT_EQ("wasm64-unknown-wasi",
736 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi
737 }
738
TEST(TripleTest,MutateName)739 TEST(TripleTest, MutateName) {
740 Triple T;
741 EXPECT_EQ(Triple::UnknownArch, T.getArch());
742 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
743 EXPECT_EQ(Triple::UnknownOS, T.getOS());
744 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
745
746 T.setArchName("i386");
747 EXPECT_EQ(Triple::x86, T.getArch());
748 EXPECT_EQ("i386--", T.getTriple());
749
750 T.setVendorName("pc");
751 EXPECT_EQ(Triple::x86, T.getArch());
752 EXPECT_EQ(Triple::PC, T.getVendor());
753 EXPECT_EQ("i386-pc-", T.getTriple());
754
755 T.setOSName("linux");
756 EXPECT_EQ(Triple::x86, T.getArch());
757 EXPECT_EQ(Triple::PC, T.getVendor());
758 EXPECT_EQ(Triple::Linux, T.getOS());
759 EXPECT_EQ("i386-pc-linux", T.getTriple());
760
761 T.setEnvironmentName("gnu");
762 EXPECT_EQ(Triple::x86, T.getArch());
763 EXPECT_EQ(Triple::PC, T.getVendor());
764 EXPECT_EQ(Triple::Linux, T.getOS());
765 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
766
767 T.setOSName("freebsd");
768 EXPECT_EQ(Triple::x86, T.getArch());
769 EXPECT_EQ(Triple::PC, T.getVendor());
770 EXPECT_EQ(Triple::FreeBSD, T.getOS());
771 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
772
773 T.setOSAndEnvironmentName("darwin");
774 EXPECT_EQ(Triple::x86, T.getArch());
775 EXPECT_EQ(Triple::PC, T.getVendor());
776 EXPECT_EQ(Triple::Darwin, T.getOS());
777 EXPECT_EQ("i386-pc-darwin", T.getTriple());
778 }
779
TEST(TripleTest,BitWidthPredicates)780 TEST(TripleTest, BitWidthPredicates) {
781 Triple T;
782 EXPECT_FALSE(T.isArch16Bit());
783 EXPECT_FALSE(T.isArch32Bit());
784 EXPECT_FALSE(T.isArch64Bit());
785
786 T.setArch(Triple::arm);
787 EXPECT_FALSE(T.isArch16Bit());
788 EXPECT_TRUE(T.isArch32Bit());
789 EXPECT_FALSE(T.isArch64Bit());
790
791 T.setArch(Triple::hexagon);
792 EXPECT_FALSE(T.isArch16Bit());
793 EXPECT_TRUE(T.isArch32Bit());
794 EXPECT_FALSE(T.isArch64Bit());
795
796 T.setArch(Triple::mips);
797 EXPECT_FALSE(T.isArch16Bit());
798 EXPECT_TRUE(T.isArch32Bit());
799 EXPECT_FALSE(T.isArch64Bit());
800
801 T.setArch(Triple::mips64);
802 EXPECT_FALSE(T.isArch16Bit());
803 EXPECT_FALSE(T.isArch32Bit());
804 EXPECT_TRUE(T.isArch64Bit());
805
806 T.setArch(Triple::msp430);
807 EXPECT_TRUE(T.isArch16Bit());
808 EXPECT_FALSE(T.isArch32Bit());
809 EXPECT_FALSE(T.isArch64Bit());
810
811 T.setArch(Triple::ppc);
812 EXPECT_FALSE(T.isArch16Bit());
813 EXPECT_TRUE(T.isArch32Bit());
814 EXPECT_FALSE(T.isArch64Bit());
815
816 T.setArch(Triple::ppc64);
817 EXPECT_FALSE(T.isArch16Bit());
818 EXPECT_FALSE(T.isArch32Bit());
819 EXPECT_TRUE(T.isArch64Bit());
820
821 T.setArch(Triple::x86);
822 EXPECT_FALSE(T.isArch16Bit());
823 EXPECT_TRUE(T.isArch32Bit());
824 EXPECT_FALSE(T.isArch64Bit());
825
826 T.setArch(Triple::x86_64);
827 EXPECT_FALSE(T.isArch16Bit());
828 EXPECT_FALSE(T.isArch32Bit());
829 EXPECT_TRUE(T.isArch64Bit());
830
831 T.setArch(Triple::amdil);
832 EXPECT_FALSE(T.isArch16Bit());
833 EXPECT_TRUE(T.isArch32Bit());
834 EXPECT_FALSE(T.isArch64Bit());
835
836 T.setArch(Triple::amdil64);
837 EXPECT_FALSE(T.isArch16Bit());
838 EXPECT_FALSE(T.isArch32Bit());
839 EXPECT_TRUE(T.isArch64Bit());
840
841 T.setArch(Triple::hsail);
842 EXPECT_FALSE(T.isArch16Bit());
843 EXPECT_TRUE(T.isArch32Bit());
844 EXPECT_FALSE(T.isArch64Bit());
845
846 T.setArch(Triple::hsail64);
847 EXPECT_FALSE(T.isArch16Bit());
848 EXPECT_FALSE(T.isArch32Bit());
849 EXPECT_TRUE(T.isArch64Bit());
850
851 T.setArch(Triple::spir);
852 EXPECT_FALSE(T.isArch16Bit());
853 EXPECT_TRUE(T.isArch32Bit());
854 EXPECT_FALSE(T.isArch64Bit());
855
856 T.setArch(Triple::spir64);
857 EXPECT_FALSE(T.isArch16Bit());
858 EXPECT_FALSE(T.isArch32Bit());
859 EXPECT_TRUE(T.isArch64Bit());
860
861 T.setArch(Triple::sparc);
862 EXPECT_FALSE(T.isArch16Bit());
863 EXPECT_TRUE(T.isArch32Bit());
864 EXPECT_FALSE(T.isArch64Bit());
865
866 T.setArch(Triple::sparcel);
867 EXPECT_FALSE(T.isArch16Bit());
868 EXPECT_TRUE(T.isArch32Bit());
869 EXPECT_FALSE(T.isArch64Bit());
870
871 T.setArch(Triple::sparcv9);
872 EXPECT_FALSE(T.isArch16Bit());
873 EXPECT_FALSE(T.isArch32Bit());
874 EXPECT_TRUE(T.isArch64Bit());
875
876 T.setArch(Triple::wasm32);
877 EXPECT_FALSE(T.isArch16Bit());
878 EXPECT_TRUE(T.isArch32Bit());
879 EXPECT_FALSE(T.isArch64Bit());
880
881 T.setArch(Triple::wasm64);
882 EXPECT_FALSE(T.isArch16Bit());
883 EXPECT_FALSE(T.isArch32Bit());
884 EXPECT_TRUE(T.isArch64Bit());
885
886 T.setArch(Triple::avr);
887 EXPECT_TRUE(T.isArch16Bit());
888 EXPECT_FALSE(T.isArch32Bit());
889 EXPECT_FALSE(T.isArch64Bit());
890
891 T.setArch(Triple::lanai);
892 EXPECT_FALSE(T.isArch16Bit());
893 EXPECT_TRUE(T.isArch32Bit());
894 EXPECT_FALSE(T.isArch64Bit());
895
896 T.setArch(Triple::riscv32);
897 EXPECT_FALSE(T.isArch16Bit());
898 EXPECT_TRUE(T.isArch32Bit());
899 EXPECT_FALSE(T.isArch64Bit());
900 EXPECT_TRUE(T.isRISCV());
901
902 T.setArch(Triple::riscv64);
903 EXPECT_FALSE(T.isArch16Bit());
904 EXPECT_FALSE(T.isArch32Bit());
905 EXPECT_TRUE(T.isArch64Bit());
906 EXPECT_TRUE(T.isRISCV());
907 }
908
TEST(TripleTest,BitWidthArchVariants)909 TEST(TripleTest, BitWidthArchVariants) {
910 Triple T;
911 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
912 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
913
914 T.setArch(Triple::UnknownArch);
915 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
916 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
917
918 T.setArch(Triple::mips);
919 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
920 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
921
922 T.setArch(Triple::mipsel);
923 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
924 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
925
926 T.setArch(Triple::ppc);
927 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
928 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
929
930 T.setArch(Triple::nvptx);
931 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
932 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
933
934 T.setArch(Triple::sparc);
935 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
936 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
937
938 T.setArch(Triple::x86);
939 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
940 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
941
942 T.setArch(Triple::mips64);
943 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
944 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
945
946 T.setArch(Triple::mips64el);
947 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
948 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
949
950 T.setArch(Triple::ppc64);
951 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
952 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
953
954 T.setArch(Triple::nvptx64);
955 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
956 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
957
958 T.setArch(Triple::sparcv9);
959 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
960 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
961
962 T.setArch(Triple::x86_64);
963 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
964 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
965
966 T.setArch(Triple::amdil);
967 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
968 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
969
970 T.setArch(Triple::amdil64);
971 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
972 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
973
974 T.setArch(Triple::hsail);
975 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
976 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
977
978 T.setArch(Triple::hsail64);
979 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
980 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
981
982 T.setArch(Triple::spir);
983 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
984 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
985
986 T.setArch(Triple::spir64);
987 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
988 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
989
990 T.setArch(Triple::wasm32);
991 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
992 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
993
994 T.setArch(Triple::wasm64);
995 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
996 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
997
998 T.setArch(Triple::riscv32);
999 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
1000 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
1001
1002 T.setArch(Triple::riscv64);
1003 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
1004 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
1005
1006 T.setArch(Triple::thumbeb);
1007 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch());
1008 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
1009
1010 T.setArch(Triple::thumb);
1011 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch());
1012 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
1013
1014 T.setArch(Triple::aarch64);
1015 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
1016 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
1017
1018 T.setArch(Triple::aarch64_be);
1019 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
1020 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
1021
1022 T.setArch(Triple::renderscript32);
1023 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
1024 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
1025
1026 T.setArch(Triple::renderscript64);
1027 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
1028 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
1029
1030 T.setArch(Triple::le32);
1031 EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch());
1032 EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch());
1033
1034 T.setArch(Triple::le64);
1035 EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch());
1036 EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch());
1037
1038 T.setArch(Triple::armeb);
1039 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
1040 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
1041
1042 T.setArch(Triple::arm);
1043 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
1044 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
1045
1046 T.setArch(Triple::systemz);
1047 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1048 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch());
1049
1050 T.setArch(Triple::xcore);
1051 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch());
1052 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1053 }
1054
TEST(TripleTest,EndianArchVariants)1055 TEST(TripleTest, EndianArchVariants) {
1056 Triple T;
1057 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1058 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1059
1060 T.setArch(Triple::UnknownArch);
1061 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1062 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1063
1064 T.setArch(Triple::aarch64_be);
1065 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
1066 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
1067
1068 T.setArch(Triple::aarch64);
1069 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
1070 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
1071
1072 T.setArch(Triple::armeb);
1073 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());
1074 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1075
1076 T.setArch(Triple::arm);
1077 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1078 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());
1079 T = Triple("arm");
1080 EXPECT_TRUE(T.isLittleEndian());
1081 T = Triple("thumb");
1082 EXPECT_TRUE(T.isLittleEndian());
1083 T = Triple("armeb");
1084 EXPECT_FALSE(T.isLittleEndian());
1085 T = Triple("thumbeb");
1086 EXPECT_FALSE(T.isLittleEndian());
1087
1088 T.setArch(Triple::bpfeb);
1089 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
1090 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
1091
1092 T.setArch(Triple::bpfel);
1093 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
1094 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
1095
1096 T.setArch(Triple::mips64);
1097 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
1098 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
1099
1100 T.setArch(Triple::mips64el);
1101 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
1102 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
1103
1104 T.setArch(Triple::mips);
1105 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
1106 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
1107
1108 T.setArch(Triple::mipsel);
1109 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
1110 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
1111
1112 T.setArch(Triple::ppc);
1113 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());
1114 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1115
1116 T.setArch(Triple::ppc64);
1117 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
1118 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
1119
1120 T.setArch(Triple::ppc64le);
1121 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
1122 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
1123
1124 T.setArch(Triple::sparc);
1125 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
1126 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
1127
1128 T.setArch(Triple::sparcel);
1129 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
1130 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
1131
1132 T.setArch(Triple::thumb);
1133 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1134 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());
1135
1136 T.setArch(Triple::thumbeb);
1137 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());
1138 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1139
1140 T.setArch(Triple::lanai);
1141 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());
1142 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
1143
1144 T.setArch(Triple::tcele);
1145 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
1146 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
1147
1148 T.setArch(Triple::tce);
1149 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
1150 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
1151
1152 T.setArch(Triple::le32);
1153 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1154 EXPECT_EQ(Triple::le32, T.getLittleEndianArchVariant().getArch());
1155
1156 T.setArch(Triple::le64);
1157 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
1158 EXPECT_EQ(Triple::le64, T.getLittleEndianArchVariant().getArch());
1159 }
1160
TEST(TripleTest,getOSVersion)1161 TEST(TripleTest, getOSVersion) {
1162 Triple T;
1163 unsigned Major, Minor, Micro;
1164
1165 T = Triple("i386-apple-darwin9");
1166 EXPECT_TRUE(T.isMacOSX());
1167 EXPECT_FALSE(T.isiOS());
1168 EXPECT_FALSE(T.isArch16Bit());
1169 EXPECT_TRUE(T.isArch32Bit());
1170 EXPECT_FALSE(T.isArch64Bit());
1171 T.getMacOSXVersion(Major, Minor, Micro);
1172 EXPECT_EQ((unsigned)10, Major);
1173 EXPECT_EQ((unsigned)5, Minor);
1174 EXPECT_EQ((unsigned)0, Micro);
1175 T.getiOSVersion(Major, Minor, Micro);
1176 EXPECT_EQ((unsigned)5, Major);
1177 EXPECT_EQ((unsigned)0, Minor);
1178 EXPECT_EQ((unsigned)0, Micro);
1179
1180 T = Triple("x86_64-apple-darwin9");
1181 EXPECT_TRUE(T.isMacOSX());
1182 EXPECT_FALSE(T.isiOS());
1183 EXPECT_FALSE(T.isArch16Bit());
1184 EXPECT_FALSE(T.isArch32Bit());
1185 EXPECT_TRUE(T.isArch64Bit());
1186 T.getMacOSXVersion(Major, Minor, Micro);
1187 EXPECT_EQ((unsigned)10, Major);
1188 EXPECT_EQ((unsigned)5, Minor);
1189 EXPECT_EQ((unsigned)0, Micro);
1190 T.getiOSVersion(Major, Minor, Micro);
1191 EXPECT_EQ((unsigned)5, Major);
1192 EXPECT_EQ((unsigned)0, Minor);
1193 EXPECT_EQ((unsigned)0, Micro);
1194
1195 T = Triple("x86_64-apple-macosx");
1196 EXPECT_TRUE(T.isMacOSX());
1197 EXPECT_FALSE(T.isiOS());
1198 EXPECT_FALSE(T.isArch16Bit());
1199 EXPECT_FALSE(T.isArch32Bit());
1200 EXPECT_TRUE(T.isArch64Bit());
1201 T.getMacOSXVersion(Major, Minor, Micro);
1202 EXPECT_EQ((unsigned)10, Major);
1203 EXPECT_EQ((unsigned)4, Minor);
1204 EXPECT_EQ((unsigned)0, Micro);
1205 T.getiOSVersion(Major, Minor, Micro);
1206 EXPECT_EQ((unsigned)5, Major);
1207 EXPECT_EQ((unsigned)0, Minor);
1208 EXPECT_EQ((unsigned)0, Micro);
1209
1210 T = Triple("x86_64-apple-macosx10.7");
1211 EXPECT_TRUE(T.isMacOSX());
1212 EXPECT_FALSE(T.isiOS());
1213 EXPECT_FALSE(T.isArch16Bit());
1214 EXPECT_FALSE(T.isArch32Bit());
1215 EXPECT_TRUE(T.isArch64Bit());
1216 T.getMacOSXVersion(Major, Minor, Micro);
1217 EXPECT_EQ((unsigned)10, Major);
1218 EXPECT_EQ((unsigned)7, Minor);
1219 EXPECT_EQ((unsigned)0, Micro);
1220 T.getiOSVersion(Major, Minor, Micro);
1221 EXPECT_EQ((unsigned)5, Major);
1222 EXPECT_EQ((unsigned)0, Minor);
1223 EXPECT_EQ((unsigned)0, Micro);
1224
1225 T = Triple("armv7-apple-ios");
1226 EXPECT_FALSE(T.isMacOSX());
1227 EXPECT_TRUE(T.isiOS());
1228 EXPECT_FALSE(T.isArch16Bit());
1229 EXPECT_TRUE(T.isArch32Bit());
1230 EXPECT_FALSE(T.isArch64Bit());
1231 T.getMacOSXVersion(Major, Minor, Micro);
1232 EXPECT_EQ((unsigned)10, Major);
1233 EXPECT_EQ((unsigned)4, Minor);
1234 EXPECT_EQ((unsigned)0, Micro);
1235 T.getiOSVersion(Major, Minor, Micro);
1236 EXPECT_EQ((unsigned)5, Major);
1237 EXPECT_EQ((unsigned)0, Minor);
1238 EXPECT_EQ((unsigned)0, Micro);
1239
1240 T = Triple("armv7-apple-ios7.0");
1241 EXPECT_FALSE(T.isMacOSX());
1242 EXPECT_TRUE(T.isiOS());
1243 EXPECT_FALSE(T.isArch16Bit());
1244 EXPECT_TRUE(T.isArch32Bit());
1245 EXPECT_FALSE(T.isArch64Bit());
1246 T.getMacOSXVersion(Major, Minor, Micro);
1247 EXPECT_EQ((unsigned)10, Major);
1248 EXPECT_EQ((unsigned)4, Minor);
1249 EXPECT_EQ((unsigned)0, Micro);
1250 T.getiOSVersion(Major, Minor, Micro);
1251 EXPECT_EQ((unsigned)7, Major);
1252 EXPECT_EQ((unsigned)0, Minor);
1253 EXPECT_EQ((unsigned)0, Micro);
1254 EXPECT_FALSE(T.isSimulatorEnvironment());
1255
1256 T = Triple("x86_64-apple-ios10.3-simulator");
1257 EXPECT_TRUE(T.isiOS());
1258 T.getiOSVersion(Major, Minor, Micro);
1259 EXPECT_EQ((unsigned)10, Major);
1260 EXPECT_EQ((unsigned)3, Minor);
1261 EXPECT_EQ((unsigned)0, Micro);
1262 EXPECT_TRUE(T.isSimulatorEnvironment());
1263 EXPECT_FALSE(T.isMacCatalystEnvironment());
1264
1265 T = Triple("x86_64-apple-ios13.0-macabi");
1266 EXPECT_TRUE(T.isiOS());
1267 T.getiOSVersion(Major, Minor, Micro);
1268 EXPECT_EQ((unsigned)13, Major);
1269 EXPECT_EQ((unsigned)0, Minor);
1270 EXPECT_EQ((unsigned)0, Micro);
1271 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI);
1272 EXPECT_TRUE(T.isMacCatalystEnvironment());
1273 EXPECT_FALSE(T.isSimulatorEnvironment());
1274 }
1275
TEST(TripleTest,FileFormat)1276 TEST(TripleTest, FileFormat) {
1277 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
1278 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
1279 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
1280 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
1281 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
1282
1283 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
1284 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
1285 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
1286
1287 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
1288
1289 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
1290 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
1291
1292 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
1293 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
1294 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());
1295 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat());
1296 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat());
1297 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat());
1298
1299 EXPECT_EQ(Triple::Wasm,
1300 Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
1301 EXPECT_EQ(Triple::Wasm,
1302 Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
1303 EXPECT_EQ(Triple::Wasm,
1304 Triple("wasm32-wasi-wasm").getObjectFormat());
1305 EXPECT_EQ(Triple::Wasm,
1306 Triple("wasm64-wasi-wasm").getObjectFormat());
1307 EXPECT_EQ(Triple::Wasm,
1308 Triple("wasm32-unknown-wasi-wasm").getObjectFormat());
1309 EXPECT_EQ(Triple::Wasm,
1310 Triple("wasm64-unknown-wasi-wasm").getObjectFormat());
1311
1312 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat());
1313 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat());
1314 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat());
1315 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat());
1316
1317 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
1318 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
1319
1320 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
1321 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
1322
1323 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
1324 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
1325
1326 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
1327 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
1328
1329 Triple T = Triple("");
1330 T.setObjectFormat(Triple::ELF);
1331 EXPECT_EQ(Triple::ELF, T.getObjectFormat());
1332
1333 T.setObjectFormat(Triple::MachO);
1334 EXPECT_EQ(Triple::MachO, T.getObjectFormat());
1335
1336 T.setObjectFormat(Triple::XCOFF);
1337 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());
1338 }
1339
TEST(TripleTest,NormalizeWindows)1340 TEST(TripleTest, NormalizeWindows) {
1341 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
1342 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32"));
1343 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
1344 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32"));
1345 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
1346 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64"));
1347 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
1348 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin"));
1349
1350 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
1351 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32"));
1352 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
1353 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32"));
1354 EXPECT_EQ("x86_64-pc-windows-gnu",
1355 Triple::normalize("x86_64-pc-mingw32-w64"));
1356 EXPECT_EQ("x86_64-unknown-windows-gnu",
1357 Triple::normalize("x86_64-mingw32-w64"));
1358
1359 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
1360 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf"));
1361 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
1362 EXPECT_EQ("i686-unknown-windows-macho",
1363 Triple::normalize("i686-win32-macho"));
1364
1365 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
1366 EXPECT_EQ("x86_64-unknown-windows-elf",
1367 Triple::normalize("x86_64-win32-elf"));
1368 EXPECT_EQ("x86_64-pc-windows-macho",
1369 Triple::normalize("x86_64-pc-win32-macho"));
1370 EXPECT_EQ("x86_64-unknown-windows-macho",
1371 Triple::normalize("x86_64-win32-macho"));
1372
1373 EXPECT_EQ("i686-pc-windows-cygnus",
1374 Triple::normalize("i686-pc-windows-cygnus"));
1375 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
1376 EXPECT_EQ("i686-pc-windows-itanium",
1377 Triple::normalize("i686-pc-windows-itanium"));
1378 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
1379
1380 EXPECT_EQ("i686-pc-windows-elf",
1381 Triple::normalize("i686-pc-windows-elf-elf"));
1382
1383 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment());
1384 }
1385
TEST(TripleTest,getARMCPUForArch)1386 TEST(TripleTest, getARMCPUForArch) {
1387 // Platform specific defaults.
1388 {
1389 llvm::Triple Triple("arm--nacl");
1390 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
1391 }
1392 {
1393 llvm::Triple Triple("arm--openbsd");
1394 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
1395 }
1396 {
1397 llvm::Triple Triple("armv6-unknown-freebsd");
1398 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1399 }
1400 {
1401 llvm::Triple Triple("thumbv6-unknown-freebsd");
1402 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1403 }
1404 {
1405 llvm::Triple Triple("armebv6-unknown-freebsd");
1406 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
1407 }
1408 {
1409 llvm::Triple Triple("arm--win32");
1410 EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch());
1411 }
1412 // Some alternative architectures
1413 {
1414 llvm::Triple Triple("armv7k-apple-ios9");
1415 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1416 }
1417 {
1418 llvm::Triple Triple("armv7k-apple-watchos3");
1419 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1420 }
1421 {
1422 llvm::Triple Triple("armv7k-apple-tvos9");
1423 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1424 }
1425 // armeb is permitted, but armebeb is not
1426 {
1427 llvm::Triple Triple("armeb-none-eabi");
1428 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch());
1429 }
1430 {
1431 llvm::Triple Triple("armebeb-none-eabi");
1432 EXPECT_EQ("", Triple.getARMCPUForArch());
1433 }
1434 {
1435 llvm::Triple Triple("armebv6eb-none-eabi");
1436 EXPECT_EQ("", Triple.getARMCPUForArch());
1437 }
1438 // xscaleeb is permitted, but armebxscale is not
1439 {
1440 llvm::Triple Triple("xscaleeb-none-eabi");
1441 EXPECT_EQ("xscale", Triple.getARMCPUForArch());
1442 }
1443 {
1444 llvm::Triple Triple("armebxscale-none-eabi");
1445 EXPECT_EQ("", Triple.getARMCPUForArch());
1446 }
1447 }
1448
TEST(TripleTest,NormalizeARM)1449 TEST(TripleTest, NormalizeARM) {
1450 EXPECT_EQ("armv6-unknown-netbsd-eabi",
1451 Triple::normalize("armv6-netbsd-eabi"));
1452 EXPECT_EQ("armv7-unknown-netbsd-eabi",
1453 Triple::normalize("armv7-netbsd-eabi"));
1454 EXPECT_EQ("armv6eb-unknown-netbsd-eabi",
1455 Triple::normalize("armv6eb-netbsd-eabi"));
1456 EXPECT_EQ("armv7eb-unknown-netbsd-eabi",
1457 Triple::normalize("armv7eb-netbsd-eabi"));
1458 EXPECT_EQ("armv6-unknown-netbsd-eabihf",
1459 Triple::normalize("armv6-netbsd-eabihf"));
1460 EXPECT_EQ("armv7-unknown-netbsd-eabihf",
1461 Triple::normalize("armv7-netbsd-eabihf"));
1462 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf",
1463 Triple::normalize("armv6eb-netbsd-eabihf"));
1464 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf",
1465 Triple::normalize("armv7eb-netbsd-eabihf"));
1466
1467 EXPECT_EQ("armv7-suse-linux-gnueabihf",
1468 Triple::normalize("armv7-suse-linux-gnueabi"));
1469
1470 Triple T;
1471 T = Triple("armv6--netbsd-eabi");
1472 EXPECT_EQ(Triple::arm, T.getArch());
1473 T = Triple("armv6eb--netbsd-eabi");
1474 EXPECT_EQ(Triple::armeb, T.getArch());
1475 T = Triple("armv7-suse-linux-gnueabihf");
1476 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
1477 }
1478
TEST(TripleTest,ParseARMArch)1479 TEST(TripleTest, ParseARMArch) {
1480 // ARM
1481 {
1482 Triple T = Triple("arm");
1483 EXPECT_EQ(Triple::arm, T.getArch());
1484 }
1485 {
1486 Triple T = Triple("armeb");
1487 EXPECT_EQ(Triple::armeb, T.getArch());
1488 }
1489 // THUMB
1490 {
1491 Triple T = Triple("thumb");
1492 EXPECT_EQ(Triple::thumb, T.getArch());
1493 }
1494 {
1495 Triple T = Triple("thumbeb");
1496 EXPECT_EQ(Triple::thumbeb, T.getArch());
1497 }
1498 // AARCH64
1499 {
1500 Triple T = Triple("arm64");
1501 EXPECT_EQ(Triple::aarch64, T.getArch());
1502 }
1503 {
1504 Triple T = Triple("arm64_32");
1505 EXPECT_EQ(Triple::aarch64_32, T.getArch());
1506 }
1507 {
1508 Triple T = Triple("aarch64");
1509 EXPECT_EQ(Triple::aarch64, T.getArch());
1510 }
1511 {
1512 Triple T = Triple("aarch64_be");
1513 EXPECT_EQ(Triple::aarch64_be, T.getArch());
1514 }
1515 }
1516 } // end anonymous namespace
1517