[clang][bytecode][NFC] Only get expr when checking for UB (#125397)
[llvm-project.git] / llvm / unittests / TargetParser / TripleTest.cpp
blob61b3637bb48e2e1d09d1adc2506a1f24982a38de
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 //===----------------------------------------------------------------------===//
9 #include "llvm/TargetParser/Triple.h"
10 #include "llvm/Support/FormatVariadic.h"
11 #include "llvm/Support/VersionTuple.h"
12 #include "gtest/gtest.h"
14 using namespace llvm;
16 namespace {
18 TEST(TripleTest, BasicParsing) {
19 Triple T;
21 T = Triple("");
22 EXPECT_EQ("", T.getArchName().str());
23 EXPECT_EQ("", T.getVendorName().str());
24 EXPECT_EQ("", T.getOSName().str());
25 EXPECT_EQ("", T.getEnvironmentName().str());
27 T = Triple("-");
28 EXPECT_EQ("", T.getArchName().str());
29 EXPECT_EQ("", T.getVendorName().str());
30 EXPECT_EQ("", T.getOSName().str());
31 EXPECT_EQ("", T.getEnvironmentName().str());
33 T = Triple("--");
34 EXPECT_EQ("", T.getArchName().str());
35 EXPECT_EQ("", T.getVendorName().str());
36 EXPECT_EQ("", T.getOSName().str());
37 EXPECT_EQ("", T.getEnvironmentName().str());
39 T = Triple("---");
40 EXPECT_EQ("", T.getArchName().str());
41 EXPECT_EQ("", T.getVendorName().str());
42 EXPECT_EQ("", T.getOSName().str());
43 EXPECT_EQ("", T.getEnvironmentName().str());
45 T = Triple("----");
46 EXPECT_EQ("", T.getArchName().str());
47 EXPECT_EQ("", T.getVendorName().str());
48 EXPECT_EQ("", T.getOSName().str());
49 EXPECT_EQ("-", T.getEnvironmentName().str());
51 T = Triple("a");
52 EXPECT_EQ("a", T.getArchName().str());
53 EXPECT_EQ("", T.getVendorName().str());
54 EXPECT_EQ("", T.getOSName().str());
55 EXPECT_EQ("", T.getEnvironmentName().str());
57 T = Triple("a-b");
58 EXPECT_EQ("a", T.getArchName().str());
59 EXPECT_EQ("b", T.getVendorName().str());
60 EXPECT_EQ("", T.getOSName().str());
61 EXPECT_EQ("", T.getEnvironmentName().str());
63 T = Triple("a-b-c");
64 EXPECT_EQ("a", T.getArchName().str());
65 EXPECT_EQ("b", T.getVendorName().str());
66 EXPECT_EQ("c", T.getOSName().str());
67 EXPECT_EQ("", T.getEnvironmentName().str());
69 T = Triple("a-b-c-d");
70 EXPECT_EQ("a", T.getArchName().str());
71 EXPECT_EQ("b", T.getVendorName().str());
72 EXPECT_EQ("c", T.getOSName().str());
73 EXPECT_EQ("d", T.getEnvironmentName().str());
76 TEST(TripleTest, ParsedIDs) {
77 Triple T;
79 T = Triple("i386-apple-darwin");
80 EXPECT_EQ(Triple::x86, T.getArch());
81 EXPECT_EQ(Triple::Apple, T.getVendor());
82 EXPECT_EQ(Triple::Darwin, T.getOS());
83 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
85 T = Triple("i386-pc-elfiamcu");
86 EXPECT_EQ(Triple::x86, T.getArch());
87 EXPECT_EQ(Triple::PC, T.getVendor());
88 EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
89 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
91 T = Triple("i386-pc-hurd-gnu");
92 EXPECT_EQ(Triple::x86, T.getArch());
93 EXPECT_EQ(Triple::PC, T.getVendor());
94 EXPECT_EQ(Triple::Hurd, T.getOS());
95 EXPECT_EQ(Triple::GNU, T.getEnvironment());
97 T = Triple("i686-pc-linux-gnu");
98 EXPECT_EQ(Triple::x86, T.getArch());
99 EXPECT_EQ(Triple::PC, T.getVendor());
100 EXPECT_EQ(Triple::Linux, T.getOS());
101 EXPECT_EQ(Triple::GNU, T.getEnvironment());
102 EXPECT_FALSE(T.isTime64ABI());
104 T = Triple("x86_64-pc-linux-gnu");
105 EXPECT_EQ(Triple::x86_64, T.getArch());
106 EXPECT_EQ(Triple::PC, T.getVendor());
107 EXPECT_EQ(Triple::Linux, T.getOS());
108 EXPECT_EQ(Triple::GNU, T.getEnvironment());
110 T = Triple("x86_64-pc-linux-musl");
111 EXPECT_EQ(Triple::x86_64, T.getArch());
112 EXPECT_EQ(Triple::PC, T.getVendor());
113 EXPECT_EQ(Triple::Linux, T.getOS());
114 EXPECT_EQ(Triple::Musl, T.getEnvironment());
116 T = Triple("x86_64-pc-linux-muslx32");
117 EXPECT_EQ(Triple::x86_64, T.getArch());
118 EXPECT_EQ(Triple::PC, T.getVendor());
119 EXPECT_EQ(Triple::Linux, T.getOS());
120 EXPECT_EQ(Triple::MuslX32, T.getEnvironment());
122 T = Triple("x86_64-pc-hurd-gnu");
123 EXPECT_EQ(Triple::x86_64, T.getArch());
124 EXPECT_EQ(Triple::PC, T.getVendor());
125 EXPECT_EQ(Triple::Hurd, T.getOS());
126 EXPECT_EQ(Triple::GNU, T.getEnvironment());
128 T = Triple("arm-unknown-linux-android16");
129 EXPECT_EQ(Triple::arm, T.getArch());
130 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
131 EXPECT_EQ(Triple::Linux, T.getOS());
132 EXPECT_EQ(Triple::Android, T.getEnvironment());
134 T = Triple("aarch64-unknown-linux-android21");
135 EXPECT_EQ(Triple::aarch64, T.getArch());
136 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
137 EXPECT_EQ(Triple::Linux, T.getOS());
138 EXPECT_EQ(Triple::Android, T.getEnvironment());
140 // PS4 has two spellings for the vendor.
141 T = Triple("x86_64-scei-ps4");
142 EXPECT_EQ(Triple::x86_64, T.getArch());
143 EXPECT_EQ(Triple::SCEI, T.getVendor());
144 EXPECT_EQ(Triple::PS4, T.getOS());
146 T = Triple("x86_64-sie-ps4");
147 EXPECT_EQ(Triple::x86_64, T.getArch());
148 EXPECT_EQ(Triple::SCEI, T.getVendor());
149 EXPECT_EQ(Triple::PS4, T.getOS());
151 T = Triple("x86_64-sie-ps5");
152 EXPECT_EQ(Triple::x86_64, T.getArch());
153 EXPECT_EQ(Triple::SCEI, T.getVendor());
154 EXPECT_EQ(Triple::PS5, T.getOS());
156 T = Triple("powerpc-ibm-aix");
157 EXPECT_EQ(Triple::ppc, T.getArch());
158 EXPECT_EQ(Triple::IBM, T.getVendor());
159 EXPECT_EQ(Triple::AIX, T.getOS());
160 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
162 T = Triple("powerpc64-ibm-aix");
163 EXPECT_EQ(Triple::ppc64, T.getArch());
164 EXPECT_EQ(Triple::IBM, T.getVendor());
165 EXPECT_EQ(Triple::AIX, T.getOS());
166 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
168 T = Triple("powerpc-dunno-notsure");
169 EXPECT_EQ(Triple::ppc, T.getArch());
170 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
171 EXPECT_EQ(Triple::UnknownOS, T.getOS());
172 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
174 T = Triple("powerpcspe-unknown-freebsd");
175 EXPECT_EQ(Triple::ppc, T.getArch());
176 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch());
177 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
178 EXPECT_EQ(Triple::FreeBSD, T.getOS());
179 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
181 T = Triple("s390x-ibm-zos");
182 EXPECT_EQ(Triple::systemz, T.getArch());
183 EXPECT_EQ(Triple::IBM, T.getVendor());
184 EXPECT_EQ(Triple::ZOS, T.getOS());
185 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
187 T = Triple("systemz-ibm-zos");
188 EXPECT_EQ(Triple::systemz, T.getArch());
189 EXPECT_EQ(Triple::IBM, T.getVendor());
190 EXPECT_EQ(Triple::ZOS, T.getOS());
191 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
193 T = Triple("arm-none-none-eabi");
194 EXPECT_EQ(Triple::arm, T.getArch());
195 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
196 EXPECT_EQ(Triple::UnknownOS, T.getOS());
197 EXPECT_EQ(Triple::EABI, T.getEnvironment());
198 EXPECT_FALSE(T.isHardFloatABI());
200 T = Triple("arm-none-none-eabihf");
201 EXPECT_EQ(Triple::arm, T.getArch());
202 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
203 EXPECT_EQ(Triple::UnknownOS, T.getOS());
204 EXPECT_EQ(Triple::EABIHF, T.getEnvironment());
205 EXPECT_TRUE(T.isHardFloatABI());
207 T = Triple("arm-none-linux-musleabi");
208 EXPECT_EQ(Triple::arm, T.getArch());
209 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
210 EXPECT_EQ(Triple::Linux, T.getOS());
211 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
212 EXPECT_FALSE(T.isHardFloatABI());
214 T = Triple("arm-none-linux-musleabihf");
215 EXPECT_EQ(Triple::arm, T.getArch());
216 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
217 EXPECT_EQ(Triple::Linux, T.getOS());
218 EXPECT_EQ(Triple::MuslEABIHF, T.getEnvironment());
219 EXPECT_TRUE(T.isHardFloatABI());
221 T = Triple("armv6hl-none-linux-gnueabi");
222 EXPECT_EQ(Triple::arm, T.getArch());
223 EXPECT_EQ(Triple::Linux, T.getOS());
224 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
225 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
226 EXPECT_FALSE(T.isTime64ABI());
227 EXPECT_FALSE(T.isHardFloatABI());
229 T = Triple("armv7hl-none-linux-gnueabi");
230 EXPECT_EQ(Triple::arm, T.getArch());
231 EXPECT_EQ(Triple::Linux, T.getOS());
232 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
233 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
234 EXPECT_FALSE(T.isTime64ABI());
235 EXPECT_FALSE(T.isHardFloatABI());
237 T = Triple("armv7hl-none-linux-gnueabihf");
238 EXPECT_EQ(Triple::arm, T.getArch());
239 EXPECT_EQ(Triple::Linux, T.getOS());
240 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
241 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
242 EXPECT_FALSE(T.isTime64ABI());
243 EXPECT_TRUE(T.isHardFloatABI());
245 T = Triple("amdil-unknown-unknown");
246 EXPECT_EQ(Triple::amdil, T.getArch());
247 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
248 EXPECT_EQ(Triple::UnknownOS, T.getOS());
250 T = Triple("amdil64-unknown-unknown");
251 EXPECT_EQ(Triple::amdil64, T.getArch());
252 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
253 EXPECT_EQ(Triple::UnknownOS, T.getOS());
255 T = Triple("hsail-unknown-unknown");
256 EXPECT_EQ(Triple::hsail, T.getArch());
257 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
258 EXPECT_EQ(Triple::UnknownOS, T.getOS());
260 T = Triple("hsail64-unknown-unknown");
261 EXPECT_EQ(Triple::hsail64, T.getArch());
262 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
263 EXPECT_EQ(Triple::UnknownOS, T.getOS());
265 T = Triple("sparcel-unknown-unknown");
266 EXPECT_EQ(Triple::sparcel, T.getArch());
267 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
268 EXPECT_EQ(Triple::UnknownOS, T.getOS());
270 T = Triple("spir-unknown-unknown");
271 EXPECT_EQ(Triple::spir, T.getArch());
272 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
273 EXPECT_EQ(Triple::UnknownOS, T.getOS());
275 T = Triple("spir64-unknown-unknown");
276 EXPECT_EQ(Triple::spir64, T.getArch());
277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
278 EXPECT_EQ(Triple::UnknownOS, T.getOS());
280 T = Triple("spirv32-unknown-unknown");
281 EXPECT_EQ(Triple::spirv32, T.getArch());
282 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
283 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
284 EXPECT_EQ(Triple::UnknownOS, T.getOS());
286 T = Triple("spirv32v1.0-unknown-unknown");
287 EXPECT_EQ(Triple::spirv32, T.getArch());
288 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());
289 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
290 EXPECT_EQ(Triple::UnknownOS, T.getOS());
292 T = Triple("spirv32v1.1-unknown-unknown");
293 EXPECT_EQ(Triple::spirv32, T.getArch());
294 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());
295 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
296 EXPECT_EQ(Triple::UnknownOS, T.getOS());
298 T = Triple("spirv32v1.2-unknown-unknown");
299 EXPECT_EQ(Triple::spirv32, T.getArch());
300 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());
301 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
302 EXPECT_EQ(Triple::UnknownOS, T.getOS());
304 T = Triple("spirv32v1.3-unknown-unknown");
305 EXPECT_EQ(Triple::spirv32, T.getArch());
306 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());
307 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
308 EXPECT_EQ(Triple::UnknownOS, T.getOS());
310 T = Triple("spirv32v1.4-unknown-unknown");
311 EXPECT_EQ(Triple::spirv32, T.getArch());
312 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());
313 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
314 EXPECT_EQ(Triple::UnknownOS, T.getOS());
316 T = Triple("spirv32v1.5-unknown-unknown");
317 EXPECT_EQ(Triple::spirv32, T.getArch());
318 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
319 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
320 EXPECT_EQ(Triple::UnknownOS, T.getOS());
322 T = Triple("spirv64-unknown-unknown");
323 EXPECT_EQ(Triple::spirv64, T.getArch());
324 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
325 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
326 EXPECT_EQ(Triple::UnknownOS, T.getOS());
328 T = Triple("spirv64v1.0-unknown-unknown");
329 EXPECT_EQ(Triple::spirv64, T.getArch());
330 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());
331 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
332 EXPECT_EQ(Triple::UnknownOS, T.getOS());
334 T = Triple("spirv64v1.1-unknown-unknown");
335 EXPECT_EQ(Triple::spirv64, T.getArch());
336 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());
337 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
338 EXPECT_EQ(Triple::UnknownOS, T.getOS());
340 T = Triple("spirv64v1.2-unknown-unknown");
341 EXPECT_EQ(Triple::spirv64, T.getArch());
342 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());
343 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
344 EXPECT_EQ(Triple::UnknownOS, T.getOS());
346 T = Triple("spirv64v1.3-unknown-unknown");
347 EXPECT_EQ(Triple::spirv64, T.getArch());
348 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());
349 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
350 EXPECT_EQ(Triple::UnknownOS, T.getOS());
352 T = Triple("spirv64v1.4-unknown-unknown");
353 EXPECT_EQ(Triple::spirv64, T.getArch());
354 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());
355 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
356 EXPECT_EQ(Triple::UnknownOS, T.getOS());
358 T = Triple("spirv64v1.5-unknown-unknown");
359 EXPECT_EQ(Triple::spirv64, T.getArch());
360 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
361 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
362 EXPECT_EQ(Triple::UnknownOS, T.getOS());
364 T = Triple("spirv-unknown-vulkan-pixel");
365 EXPECT_EQ(Triple::spirv, T.getArch());
366 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
367 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
368 EXPECT_EQ(Triple::Vulkan, T.getOS());
369 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
370 EXPECT_EQ(Triple::Pixel, T.getEnvironment());
372 T = Triple("spirv-unknown-vulkan-vertex");
373 EXPECT_EQ(Triple::spirv, T.getArch());
374 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
375 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
376 EXPECT_EQ(Triple::Vulkan, T.getOS());
377 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
378 EXPECT_EQ(Triple::Vertex, T.getEnvironment());
380 T = Triple("spirv-unknown-vulkan-geometry");
381 EXPECT_EQ(Triple::spirv, T.getArch());
382 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
383 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
384 EXPECT_EQ(Triple::Vulkan, T.getOS());
385 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
386 EXPECT_EQ(Triple::Geometry, T.getEnvironment());
388 T = Triple("spirv-unknown-vulkan-library");
389 EXPECT_EQ(Triple::spirv, T.getArch());
390 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
391 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
392 EXPECT_EQ(Triple::Vulkan, T.getOS());
393 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
394 EXPECT_EQ(Triple::Library, T.getEnvironment());
396 T = Triple("spirv-unknown-vulkan-raygeneration");
397 EXPECT_EQ(Triple::spirv, T.getArch());
398 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
399 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
400 EXPECT_EQ(Triple::Vulkan, T.getOS());
401 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
402 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
404 T = Triple("spirv-unknown-vulkan-intersection");
405 EXPECT_EQ(Triple::spirv, T.getArch());
406 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
408 EXPECT_EQ(Triple::Vulkan, T.getOS());
409 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
410 EXPECT_EQ(Triple::Intersection, T.getEnvironment());
412 T = Triple("spirv-unknown-vulkan-anyhit");
413 EXPECT_EQ(Triple::spirv, T.getArch());
414 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
415 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
416 EXPECT_EQ(Triple::Vulkan, T.getOS());
417 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
418 EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
420 T = Triple("spirv-unknown-vulkan-closesthit");
421 EXPECT_EQ(Triple::spirv, T.getArch());
422 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
423 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
424 EXPECT_EQ(Triple::Vulkan, T.getOS());
425 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
426 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
428 T = Triple("spirv-unknown-vulkan-miss");
429 EXPECT_EQ(Triple::spirv, T.getArch());
430 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
431 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
432 EXPECT_EQ(Triple::Vulkan, T.getOS());
433 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
434 EXPECT_EQ(Triple::Miss, T.getEnvironment());
436 T = Triple("spirv-unknown-vulkan-callable");
437 EXPECT_EQ(Triple::spirv, T.getArch());
438 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
439 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
440 EXPECT_EQ(Triple::Vulkan, T.getOS());
441 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
442 EXPECT_EQ(Triple::Callable, T.getEnvironment());
444 T = Triple("spirv-unknown-vulkan-mesh");
445 EXPECT_EQ(Triple::spirv, T.getArch());
446 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
447 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
448 EXPECT_EQ(Triple::Vulkan, T.getOS());
449 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
450 EXPECT_EQ(Triple::Mesh, T.getEnvironment());
452 T = Triple("spirv-unknown-vulkan-amplification");
453 EXPECT_EQ(Triple::spirv, T.getArch());
454 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
455 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
456 EXPECT_EQ(Triple::Vulkan, T.getOS());
457 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
458 EXPECT_EQ(Triple::Amplification, T.getEnvironment());
460 T = Triple("spirv1.5-unknown-vulkan1.2-compute");
461 EXPECT_EQ(Triple::spirv, T.getArch());
462 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
463 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
464 EXPECT_EQ(Triple::Vulkan, T.getOS());
465 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
466 EXPECT_EQ(Triple::Compute, T.getEnvironment());
468 T = Triple("spirv1.6-unknown-vulkan1.3-compute");
469 EXPECT_EQ(Triple::spirv, T.getArch());
470 EXPECT_EQ(Triple::SPIRVSubArch_v16, T.getSubArch());
471 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
472 EXPECT_EQ(Triple::Vulkan, T.getOS());
473 EXPECT_EQ(VersionTuple(1, 3), T.getVulkanVersion());
474 EXPECT_EQ(Triple::Compute, T.getEnvironment());
476 T = Triple("dxilv1.0--shadermodel6.0-pixel");
477 EXPECT_EQ(Triple::dxil, T.getArch());
478 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());
479 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
480 EXPECT_EQ(Triple::ShaderModel, T.getOS());
481 EXPECT_EQ(VersionTuple(1, 0), T.getDXILVersion());
482 EXPECT_EQ(Triple::Pixel, T.getEnvironment());
484 T = Triple("dxilv1.1--shadermodel6.1-vertex");
485 EXPECT_EQ(Triple::dxil, T.getArch());
486 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());
487 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
488 EXPECT_EQ(Triple::ShaderModel, T.getOS());
489 EXPECT_EQ(VersionTuple(1, 1), T.getDXILVersion());
490 EXPECT_EQ(Triple::Vertex, T.getEnvironment());
492 T = Triple("dxilv1.2--shadermodel6.2-geometry");
493 EXPECT_EQ(Triple::dxil, T.getArch());
494 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());
495 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
496 EXPECT_EQ(Triple::ShaderModel, T.getOS());
497 EXPECT_EQ(VersionTuple(1, 2), T.getDXILVersion());
498 EXPECT_EQ(Triple::Geometry, T.getEnvironment());
500 T = Triple("dxilv1.3--shadermodel6.3-library");
501 EXPECT_EQ(Triple::dxil, T.getArch());
502 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());
503 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
504 EXPECT_EQ(Triple::ShaderModel, T.getOS());
505 EXPECT_EQ(VersionTuple(1, 3), T.getDXILVersion());
506 EXPECT_EQ(Triple::Library, T.getEnvironment());
508 T = Triple("dxilv1.4--shadermodel6.4-hull");
509 EXPECT_EQ(Triple::dxil, T.getArch());
510 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());
511 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
512 EXPECT_EQ(Triple::ShaderModel, T.getOS());
513 EXPECT_EQ(VersionTuple(1, 4), T.getDXILVersion());
514 EXPECT_EQ(Triple::Hull, T.getEnvironment());
516 T = Triple("dxilv1.5--shadermodel6.5-domain");
517 EXPECT_EQ(Triple::dxil, T.getArch());
518 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());
519 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
520 EXPECT_EQ(Triple::ShaderModel, T.getOS());
521 EXPECT_EQ(VersionTuple(1, 5), T.getDXILVersion());
522 EXPECT_EQ(Triple::Domain, T.getEnvironment());
524 T = Triple("dxilv1.6--shadermodel6.6-compute");
525 EXPECT_EQ(Triple::dxil, T.getArch());
526 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());
527 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
528 EXPECT_EQ(Triple::ShaderModel, T.getOS());
529 EXPECT_EQ(VersionTuple(1, 6), T.getDXILVersion());
530 EXPECT_EQ(Triple::Compute, T.getEnvironment());
532 T = Triple("dxilv1.7-unknown-shadermodel6.7-mesh");
533 EXPECT_EQ(Triple::dxil, T.getArch());
534 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());
535 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
536 EXPECT_EQ(Triple::ShaderModel, T.getOS());
537 EXPECT_EQ(VersionTuple(1, 7), T.getDXILVersion());
538 EXPECT_EQ(Triple::Mesh, T.getEnvironment());
540 T = Triple("dxilv1.8-unknown-shadermodel6.8-amplification");
541 EXPECT_EQ(Triple::dxil, T.getArch());
542 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
543 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
544 EXPECT_EQ(Triple::ShaderModel, T.getOS());
545 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());
546 EXPECT_EQ(Triple::Amplification, T.getEnvironment());
548 T = Triple("dxilv1.8-unknown-shadermodel6.15-library");
549 EXPECT_EQ(Triple::dxil, T.getArch());
550 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
551 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
552 EXPECT_EQ(Triple::ShaderModel, T.getOS());
553 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());
555 T = Triple("x86_64-unknown-fuchsia");
556 EXPECT_EQ(Triple::x86_64, T.getArch());
557 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
558 EXPECT_EQ(Triple::Fuchsia, T.getOS());
559 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
561 T = Triple("x86_64-unknown-hermit");
562 EXPECT_EQ(Triple::x86_64, T.getArch());
563 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
564 EXPECT_EQ(Triple::HermitCore, T.getOS());
565 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
567 T = Triple("x86_64-unknown-uefi");
568 EXPECT_EQ(Triple::x86_64, T.getArch());
569 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
570 EXPECT_EQ(Triple::UEFI, T.getOS());
571 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
572 EXPECT_EQ(Triple::COFF, T.getObjectFormat());
574 T = Triple("wasm32-unknown-unknown");
575 EXPECT_EQ(Triple::wasm32, T.getArch());
576 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
577 EXPECT_EQ(Triple::UnknownOS, T.getOS());
578 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
580 T = Triple("wasm32-unknown-wasi");
581 EXPECT_EQ(Triple::wasm32, T.getArch());
582 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
583 EXPECT_EQ(Triple::WASI, T.getOS());
584 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
586 T = Triple("wasm64-unknown-unknown");
587 EXPECT_EQ(Triple::wasm64, T.getArch());
588 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
589 EXPECT_EQ(Triple::UnknownOS, T.getOS());
590 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
592 T = Triple("wasm64-unknown-wasi");
593 EXPECT_EQ(Triple::wasm64, T.getArch());
594 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
595 EXPECT_EQ(Triple::WASI, T.getOS());
596 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
598 T = Triple("avr-unknown-unknown");
599 EXPECT_EQ(Triple::avr, T.getArch());
600 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
601 EXPECT_EQ(Triple::UnknownOS, T.getOS());
602 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
604 T = Triple("avr");
605 EXPECT_EQ(Triple::avr, T.getArch());
606 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
607 EXPECT_EQ(Triple::UnknownOS, T.getOS());
608 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
610 T = Triple("lanai-unknown-unknown");
611 EXPECT_EQ(Triple::lanai, T.getArch());
612 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
613 EXPECT_EQ(Triple::UnknownOS, T.getOS());
614 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
616 T = Triple("lanai");
617 EXPECT_EQ(Triple::lanai, T.getArch());
618 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
619 EXPECT_EQ(Triple::UnknownOS, T.getOS());
620 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
622 T = Triple("amdgcn-mesa-mesa3d");
623 EXPECT_EQ(Triple::amdgcn, T.getArch());
624 EXPECT_EQ(Triple::Mesa, T.getVendor());
625 EXPECT_EQ(Triple::Mesa3D, T.getOS());
626 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
628 T = Triple("amdgcn-amd-amdhsa");
629 EXPECT_EQ(Triple::amdgcn, T.getArch());
630 EXPECT_EQ(Triple::AMD, T.getVendor());
631 EXPECT_EQ(Triple::AMDHSA, T.getOS());
632 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
634 T = Triple("amdgcn-amd-amdpal");
635 EXPECT_EQ(Triple::amdgcn, T.getArch());
636 EXPECT_EQ(Triple::AMD, T.getVendor());
637 EXPECT_EQ(Triple::AMDPAL, T.getOS());
638 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
640 T = Triple("ve-unknown-linux");
641 EXPECT_EQ(Triple::ve, T.getArch());
642 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
643 EXPECT_EQ(Triple::Linux, T.getOS());
644 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
646 T = Triple("csky-unknown-unknown");
647 EXPECT_EQ(Triple::csky, T.getArch());
648 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
649 EXPECT_EQ(Triple::UnknownOS, T.getOS());
650 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
652 T = Triple("csky-unknown-linux");
653 EXPECT_EQ(Triple::csky, T.getArch());
654 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
655 EXPECT_EQ(Triple::Linux, T.getOS());
656 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
658 T = Triple("loongarch32-unknown-unknown");
659 EXPECT_EQ(Triple::loongarch32, T.getArch());
660 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
661 EXPECT_EQ(Triple::UnknownOS, T.getOS());
662 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
664 T = Triple("loongarch32-unknown-linux-gnu");
665 EXPECT_EQ(Triple::loongarch32, T.getArch());
666 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
667 EXPECT_EQ(Triple::Linux, T.getOS());
668 EXPECT_EQ(Triple::GNU, T.getEnvironment());
670 T = Triple("loongarch32-unknown-linux-gnuf32");
671 EXPECT_EQ(Triple::loongarch32, T.getArch());
672 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
673 EXPECT_EQ(Triple::Linux, T.getOS());
674 EXPECT_EQ(Triple::GNUF32, T.getEnvironment());
676 T = Triple("loongarch32-unknown-linux-gnuf64");
677 EXPECT_EQ(Triple::loongarch32, T.getArch());
678 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
679 EXPECT_EQ(Triple::Linux, T.getOS());
680 EXPECT_EQ(Triple::GNUF64, T.getEnvironment());
682 T = Triple("loongarch32-unknown-linux-gnusf");
683 EXPECT_EQ(Triple::loongarch32, T.getArch());
684 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
685 EXPECT_EQ(Triple::Linux, T.getOS());
686 EXPECT_EQ(Triple::GNUSF, T.getEnvironment());
688 T = Triple("loongarch32-unknown-linux-musl");
689 EXPECT_EQ(Triple::loongarch32, T.getArch());
690 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
691 EXPECT_EQ(Triple::Linux, T.getOS());
692 EXPECT_EQ(Triple::Musl, T.getEnvironment());
694 T = Triple("loongarch32-unknown-linux-muslf32");
695 EXPECT_EQ(Triple::loongarch32, T.getArch());
696 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
697 EXPECT_EQ(Triple::Linux, T.getOS());
698 EXPECT_EQ(Triple::MuslF32, T.getEnvironment());
700 T = Triple("loongarch32-unknown-linux-muslsf");
701 EXPECT_EQ(Triple::loongarch32, T.getArch());
702 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
703 EXPECT_EQ(Triple::Linux, T.getOS());
704 EXPECT_EQ(Triple::MuslSF, T.getEnvironment());
706 T = Triple("loongarch64-unknown-linux");
707 EXPECT_EQ(Triple::loongarch64, T.getArch());
708 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
709 EXPECT_EQ(Triple::Linux, T.getOS());
710 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
712 T = Triple("loongarch64-unknown-linux-gnu");
713 EXPECT_EQ(Triple::loongarch64, T.getArch());
714 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
715 EXPECT_EQ(Triple::Linux, T.getOS());
716 EXPECT_EQ(Triple::GNU, T.getEnvironment());
718 T = Triple("loongarch64-unknown-linux-gnuf32");
719 EXPECT_EQ(Triple::loongarch64, T.getArch());
720 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
721 EXPECT_EQ(Triple::Linux, T.getOS());
722 EXPECT_EQ(Triple::GNUF32, T.getEnvironment());
724 T = Triple("loongarch64-unknown-linux-gnuf64");
725 EXPECT_EQ(Triple::loongarch64, T.getArch());
726 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
727 EXPECT_EQ(Triple::Linux, T.getOS());
728 EXPECT_EQ(Triple::GNUF64, T.getEnvironment());
730 T = Triple("loongarch64-unknown-linux-gnusf");
731 EXPECT_EQ(Triple::loongarch64, T.getArch());
732 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
733 EXPECT_EQ(Triple::Linux, T.getOS());
734 EXPECT_EQ(Triple::GNUSF, T.getEnvironment());
736 T = Triple("loongarch64-unknown-linux-musl");
737 EXPECT_EQ(Triple::loongarch64, T.getArch());
738 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
739 EXPECT_EQ(Triple::Linux, T.getOS());
740 EXPECT_EQ(Triple::Musl, T.getEnvironment());
742 T = Triple("loongarch64-unknown-linux-muslf32");
743 EXPECT_EQ(Triple::loongarch64, T.getArch());
744 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
745 EXPECT_EQ(Triple::Linux, T.getOS());
746 EXPECT_EQ(Triple::MuslF32, T.getEnvironment());
748 T = Triple("loongarch64-unknown-linux-muslsf");
749 EXPECT_EQ(Triple::loongarch64, T.getArch());
750 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
751 EXPECT_EQ(Triple::Linux, T.getOS());
752 EXPECT_EQ(Triple::MuslSF, T.getEnvironment());
754 T = Triple("riscv32-unknown-unknown");
755 EXPECT_EQ(Triple::riscv32, T.getArch());
756 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
757 EXPECT_EQ(Triple::UnknownOS, T.getOS());
758 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
760 T = Triple("riscv64-unknown-linux");
761 EXPECT_EQ(Triple::riscv64, T.getArch());
762 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
763 EXPECT_EQ(Triple::Linux, T.getOS());
764 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
766 T = Triple("riscv64-unknown-freebsd");
767 EXPECT_EQ(Triple::riscv64, T.getArch());
768 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
769 EXPECT_EQ(Triple::FreeBSD, T.getOS());
770 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
772 T = Triple("riscv64-suse-linux");
773 EXPECT_EQ(Triple::riscv64, T.getArch());
774 EXPECT_EQ(Triple::SUSE, T.getVendor());
775 EXPECT_EQ(Triple::Linux, T.getOS());
776 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
778 T = Triple("armv7hl-suse-linux-gnueabi");
779 EXPECT_EQ(Triple::arm, T.getArch());
780 EXPECT_EQ(Triple::SUSE, T.getVendor());
781 EXPECT_EQ(Triple::Linux, T.getOS());
782 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
784 T = Triple("i586-pc-haiku");
785 EXPECT_EQ(Triple::x86, T.getArch());
786 EXPECT_EQ(Triple::PC, T.getVendor());
787 EXPECT_EQ(Triple::Haiku, T.getOS());
788 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
790 T = Triple("x86_64-unknown-haiku");
791 EXPECT_EQ(Triple::x86_64, T.getArch());
792 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
793 EXPECT_EQ(Triple::Haiku, T.getOS());
794 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
796 T = Triple("mips-mti-linux-gnu");
797 EXPECT_EQ(Triple::mips, T.getArch());
798 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
799 EXPECT_EQ(Triple::Linux, T.getOS());
800 EXPECT_EQ(Triple::GNU, T.getEnvironment());
802 T = Triple("mipsel-img-linux-gnu");
803 EXPECT_EQ(Triple::mipsel, T.getArch());
804 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
805 EXPECT_EQ(Triple::Linux, T.getOS());
806 EXPECT_EQ(Triple::GNU, T.getEnvironment());
808 T = Triple("mips64-mti-linux-gnu");
809 EXPECT_EQ(Triple::mips64, T.getArch());
810 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
811 EXPECT_EQ(Triple::Linux, T.getOS());
812 EXPECT_EQ(Triple::GNU, T.getEnvironment());
814 T = Triple("mips64el-img-linux-gnu");
815 EXPECT_EQ(Triple::mips64el, T.getArch());
816 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
817 EXPECT_EQ(Triple::Linux, T.getOS());
818 EXPECT_EQ(Triple::GNU, T.getEnvironment());
820 T = Triple("mips64el-img-linux-gnuabin32");
821 EXPECT_EQ(Triple::mips64el, T.getArch());
822 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
823 EXPECT_EQ(Triple::Linux, T.getOS());
824 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
826 T = Triple("mips64el-unknown-linux-gnuabi64");
827 EXPECT_EQ(Triple::mips64el, T.getArch());
828 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
829 EXPECT_EQ(Triple::Linux, T.getOS());
830 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
831 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
832 T = Triple("mips64el");
833 EXPECT_EQ(Triple::mips64el, T.getArch());
834 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
835 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
836 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
838 T = Triple("mips64-unknown-linux-gnuabi64");
839 EXPECT_EQ(Triple::mips64, T.getArch());
840 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
841 EXPECT_EQ(Triple::Linux, T.getOS());
842 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
843 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
844 T = Triple("mips64");
845 EXPECT_EQ(Triple::mips64, T.getArch());
846 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
847 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
848 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
850 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64");
851 EXPECT_EQ(Triple::mips64el, T.getArch());
852 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
853 EXPECT_EQ(Triple::Linux, T.getOS());
854 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
855 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
856 T = Triple("mips64r6el");
857 EXPECT_EQ(Triple::mips64el, T.getArch());
858 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
859 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
860 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
861 T = Triple("mipsisa64r6el");
862 EXPECT_EQ(Triple::mips64el, T.getArch());
863 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
864 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
865 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
867 T = Triple("mipsisa64r6-unknown-linux-gnuabi64");
868 EXPECT_EQ(Triple::mips64, T.getArch());
869 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
870 EXPECT_EQ(Triple::Linux, T.getOS());
871 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
872 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
873 T = Triple("mips64r6");
874 EXPECT_EQ(Triple::mips64, T.getArch());
875 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
876 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
877 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
878 T = Triple("mipsisa64r6");
879 EXPECT_EQ(Triple::mips64, T.getArch());
880 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
881 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
882 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
884 T = Triple("mips64el-unknown-linux-gnuabin32");
885 EXPECT_EQ(Triple::mips64el, T.getArch());
886 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
887 EXPECT_EQ(Triple::Linux, T.getOS());
888 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
889 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
890 T = Triple("mipsn32el");
891 EXPECT_EQ(Triple::mips64el, T.getArch());
892 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
893 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
894 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
896 T = Triple("mips64-unknown-linux-gnuabin32");
897 EXPECT_EQ(Triple::mips64, T.getArch());
898 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
899 EXPECT_EQ(Triple::Linux, T.getOS());
900 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
901 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
902 T = Triple("mipsn32");
903 EXPECT_EQ(Triple::mips64, T.getArch());
904 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
905 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
906 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
908 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32");
909 EXPECT_EQ(Triple::mips64el, T.getArch());
910 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
911 EXPECT_EQ(Triple::Linux, T.getOS());
912 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
913 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
914 T = Triple("mipsn32r6el");
915 EXPECT_EQ(Triple::mips64el, T.getArch());
916 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
917 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
918 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
920 T = Triple("mipsisa64r6-unknown-linux-gnuabin32");
921 EXPECT_EQ(Triple::mips64, T.getArch());
922 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
923 EXPECT_EQ(Triple::Linux, T.getOS());
924 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
925 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
926 T = Triple("mipsn32r6");
927 EXPECT_EQ(Triple::mips64, T.getArch());
928 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
929 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
930 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
932 T = Triple("mipsel-unknown-linux-gnu");
933 EXPECT_EQ(Triple::mipsel, T.getArch());
934 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
935 EXPECT_EQ(Triple::Linux, T.getOS());
936 EXPECT_EQ(Triple::GNU, T.getEnvironment());
937 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
938 T = Triple("mipsel");
939 EXPECT_EQ(Triple::mipsel, T.getArch());
940 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
941 EXPECT_EQ(Triple::GNU, T.getEnvironment());
942 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
944 T = Triple("mips-unknown-linux-gnu");
945 EXPECT_EQ(Triple::mips, T.getArch());
946 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
947 EXPECT_EQ(Triple::Linux, T.getOS());
948 EXPECT_EQ(Triple::GNU, T.getEnvironment());
949 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
950 T = Triple("mips");
951 EXPECT_EQ(Triple::mips, T.getArch());
952 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
953 EXPECT_EQ(Triple::GNU, T.getEnvironment());
954 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
956 T = Triple("mipsisa32r6el-unknown-linux-gnu");
957 EXPECT_EQ(Triple::mipsel, T.getArch());
958 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
959 EXPECT_EQ(Triple::Linux, T.getOS());
960 EXPECT_EQ(Triple::GNU, T.getEnvironment());
961 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
962 T = Triple("mipsr6el");
963 EXPECT_EQ(Triple::mipsel, T.getArch());
964 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
965 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
966 T = Triple("mipsisa32r6el");
967 EXPECT_EQ(Triple::mipsel, T.getArch());
968 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
969 EXPECT_EQ(Triple::GNU, T.getEnvironment());
970 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
972 T = Triple("mipsisa32r6-unknown-linux-gnu");
973 EXPECT_EQ(Triple::mips, T.getArch());
974 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
975 EXPECT_EQ(Triple::Linux, T.getOS());
976 EXPECT_EQ(Triple::GNU, T.getEnvironment());
977 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
978 T = Triple("mipsr6");
979 EXPECT_EQ(Triple::mips, T.getArch());
980 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
981 EXPECT_EQ(Triple::GNU, T.getEnvironment());
982 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
983 T = Triple("mipsisa32r6");
984 EXPECT_EQ(Triple::mips, T.getArch());
985 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
986 EXPECT_EQ(Triple::GNU, T.getEnvironment());
987 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
989 T = Triple("mips64el-unknown-linux-muslabi64");
990 EXPECT_EQ(Triple::mips64el, T.getArch());
991 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
992 EXPECT_EQ(Triple::Linux, T.getOS());
993 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
994 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
996 T = Triple("mips64-unknown-linux-muslabi64");
997 EXPECT_EQ(Triple::mips64, T.getArch());
998 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
999 EXPECT_EQ(Triple::Linux, T.getOS());
1000 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
1001 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1003 T = Triple("mipsisa64r6el-unknown-linux-muslabi64");
1004 EXPECT_EQ(Triple::mips64el, T.getArch());
1005 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1006 EXPECT_EQ(Triple::Linux, T.getOS());
1007 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
1008 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1010 T = Triple("mipsisa64r6-unknown-linux-muslabi64");
1011 EXPECT_EQ(Triple::mips64, T.getArch());
1012 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1013 EXPECT_EQ(Triple::Linux, T.getOS());
1014 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
1015 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1017 T = Triple("mips64el-unknown-linux-muslabin32");
1018 EXPECT_EQ(Triple::mips64el, T.getArch());
1019 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1020 EXPECT_EQ(Triple::Linux, T.getOS());
1021 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
1022 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1024 T = Triple("mips64-unknown-linux-muslabin32");
1025 EXPECT_EQ(Triple::mips64, T.getArch());
1026 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1027 EXPECT_EQ(Triple::Linux, T.getOS());
1028 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
1029 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1031 T = Triple("mipsisa64r6el-unknown-linux-muslabin32");
1032 EXPECT_EQ(Triple::mips64el, T.getArch());
1033 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1034 EXPECT_EQ(Triple::Linux, T.getOS());
1035 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
1036 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1038 T = Triple("mipsisa64r6-unknown-linux-muslabin32");
1039 EXPECT_EQ(Triple::mips64, T.getArch());
1040 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1041 EXPECT_EQ(Triple::Linux, T.getOS());
1042 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
1043 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1045 T = Triple("mipsel-unknown-linux-musl");
1046 EXPECT_EQ(Triple::mipsel, T.getArch());
1047 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1048 EXPECT_EQ(Triple::Linux, T.getOS());
1049 EXPECT_EQ(Triple::Musl, T.getEnvironment());
1050 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1052 T = Triple("mips-unknown-linux-musl");
1053 EXPECT_EQ(Triple::mips, T.getArch());
1054 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1055 EXPECT_EQ(Triple::Linux, T.getOS());
1056 EXPECT_EQ(Triple::Musl, T.getEnvironment());
1057 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1059 T = Triple("mipsisa32r6el-unknown-linux-musl");
1060 EXPECT_EQ(Triple::mipsel, T.getArch());
1061 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1062 EXPECT_EQ(Triple::Linux, T.getOS());
1063 EXPECT_EQ(Triple::Musl, T.getEnvironment());
1064 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1066 T = Triple("mipsisa32r6-unknown-linux-musl");
1067 EXPECT_EQ(Triple::mips, T.getArch());
1068 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1069 EXPECT_EQ(Triple::Linux, T.getOS());
1070 EXPECT_EQ(Triple::Musl, T.getEnvironment());
1071 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
1073 T = Triple("arm-oe-linux-gnueabi");
1074 EXPECT_EQ(Triple::arm, T.getArch());
1075 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
1076 EXPECT_EQ(Triple::Linux, T.getOS());
1077 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
1079 T = Triple("aarch64-oe-linux");
1080 EXPECT_EQ(Triple::aarch64, T.getArch());
1081 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
1082 EXPECT_EQ(Triple::Linux, T.getOS());
1083 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1084 EXPECT_TRUE(T.isArch64Bit());
1086 T = Triple("arm64_32-apple-ios");
1087 EXPECT_EQ(Triple::aarch64_32, T.getArch());
1088 EXPECT_EQ(Triple::IOS, T.getOS());
1089 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1090 EXPECT_TRUE(T.isArch32Bit());
1092 T = Triple("dxil-unknown-shadermodel-pixel");
1093 EXPECT_EQ(Triple::dxil, T.getArch());
1094 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1095 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1096 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1097 EXPECT_EQ(Triple::Pixel, T.getEnvironment());
1098 EXPECT_FALSE(T.supportsCOMDAT());
1100 T = Triple("dxil-unknown-shadermodel-vertex");
1101 EXPECT_EQ(Triple::dxil, T.getArch());
1102 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1103 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1104 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1105 EXPECT_EQ(Triple::Vertex, T.getEnvironment());
1106 EXPECT_FALSE(T.supportsCOMDAT());
1108 T = Triple("dxil-unknown-shadermodel-geometry");
1109 EXPECT_EQ(Triple::dxil, T.getArch());
1110 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1111 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1112 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1113 EXPECT_EQ(Triple::Geometry, T.getEnvironment());
1114 EXPECT_FALSE(T.supportsCOMDAT());
1116 T = Triple("dxil-unknown-shadermodel-hull");
1117 EXPECT_EQ(Triple::dxil, T.getArch());
1118 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1119 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1120 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1121 EXPECT_EQ(Triple::Hull, T.getEnvironment());
1122 EXPECT_FALSE(T.supportsCOMDAT());
1124 T = Triple("dxil-unknown-shadermodel-domain");
1125 EXPECT_EQ(Triple::dxil, T.getArch());
1126 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1127 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1128 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1129 EXPECT_EQ(Triple::Domain, T.getEnvironment());
1130 EXPECT_FALSE(T.supportsCOMDAT());
1132 T = Triple("dxil-unknown-shadermodel-compute");
1133 EXPECT_EQ(Triple::dxil, T.getArch());
1134 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1135 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1136 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1137 EXPECT_EQ(Triple::Compute, T.getEnvironment());
1138 EXPECT_FALSE(T.supportsCOMDAT());
1140 T = Triple("dxil-unknown-shadermodel-library");
1141 EXPECT_EQ(Triple::dxil, T.getArch());
1142 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1143 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1144 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1145 EXPECT_EQ(Triple::Library, T.getEnvironment());
1146 EXPECT_FALSE(T.supportsCOMDAT());
1148 T = Triple("dxil-unknown-shadermodel-raygeneration");
1149 EXPECT_EQ(Triple::dxil, T.getArch());
1150 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1151 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1152 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1153 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
1154 EXPECT_FALSE(T.supportsCOMDAT());
1156 T = Triple("dxil-unknown-shadermodel-intersection");
1157 EXPECT_EQ(Triple::dxil, T.getArch());
1158 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1159 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1160 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1161 EXPECT_EQ(Triple::Intersection, T.getEnvironment());
1162 EXPECT_FALSE(T.supportsCOMDAT());
1164 T = Triple("dxil-unknown-shadermodel-anyhit");
1165 EXPECT_EQ(Triple::dxil, T.getArch());
1166 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1167 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1168 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1169 EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
1170 EXPECT_FALSE(T.supportsCOMDAT());
1172 T = Triple("dxil-unknown-shadermodel-closesthit");
1173 EXPECT_EQ(Triple::dxil, T.getArch());
1174 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1175 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1176 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1177 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
1178 EXPECT_FALSE(T.supportsCOMDAT());
1180 T = Triple("dxil-unknown-shadermodel-miss");
1181 EXPECT_EQ(Triple::dxil, T.getArch());
1182 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1183 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1184 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1185 EXPECT_EQ(Triple::Miss, T.getEnvironment());
1186 EXPECT_FALSE(T.supportsCOMDAT());
1188 T = Triple("dxil-unknown-shadermodel-callable");
1189 EXPECT_EQ(Triple::dxil, T.getArch());
1190 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1191 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1192 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1193 EXPECT_EQ(Triple::Callable, T.getEnvironment());
1194 EXPECT_FALSE(T.supportsCOMDAT());
1196 T = Triple("dxil-unknown-shadermodel-mesh");
1197 EXPECT_EQ(Triple::dxil, T.getArch());
1198 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1199 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1200 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1201 EXPECT_EQ(Triple::Mesh, T.getEnvironment());
1202 EXPECT_FALSE(T.supportsCOMDAT());
1204 T = Triple("dxil-unknown-shadermodel-amplification");
1205 EXPECT_EQ(Triple::dxil, T.getArch());
1206 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1207 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1208 EXPECT_EQ(Triple::ShaderModel, T.getOS());
1209 EXPECT_EQ(Triple::Amplification, T.getEnvironment());
1210 EXPECT_FALSE(T.supportsCOMDAT());
1212 T = Triple("dxilv1.0-unknown-unknown");
1213 EXPECT_EQ(Triple::dxil, T.getArch());
1214 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());
1215 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1216 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1218 T = Triple("dxilv1.1-unknown-unknown");
1219 EXPECT_EQ(Triple::dxil, T.getArch());
1220 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());
1221 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1222 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1224 T = Triple("dxilv1.2-unknown-unknown");
1225 EXPECT_EQ(Triple::dxil, T.getArch());
1226 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());
1227 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1228 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1230 T = Triple("dxilv1.3-unknown-unknown");
1231 EXPECT_EQ(Triple::dxil, T.getArch());
1232 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());
1233 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1234 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1236 T = Triple("dxilv1.4-unknown-unknown");
1237 EXPECT_EQ(Triple::dxil, T.getArch());
1238 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());
1239 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1240 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1242 T = Triple("dxilv1.5-unknown-unknown");
1243 EXPECT_EQ(Triple::dxil, T.getArch());
1244 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());
1245 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1246 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1248 T = Triple("dxilv1.6-unknown-unknown");
1249 EXPECT_EQ(Triple::dxil, T.getArch());
1250 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());
1251 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1252 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1254 T = Triple("dxilv1.7-unknown-unknown");
1255 EXPECT_EQ(Triple::dxil, T.getArch());
1256 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());
1257 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1258 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1260 T = Triple("dxilv1.8-unknown-unknown");
1261 EXPECT_EQ(Triple::dxil, T.getArch());
1262 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
1263 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1264 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1266 // Check specification of unknown SubArch results in
1267 // unknown architecture.
1268 T = Triple("dxilv1.999-unknown-unknown");
1269 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1270 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1271 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1272 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1274 T = Triple("dxil-unknown-unknown");
1275 EXPECT_EQ(Triple::dxil, T.getArch());
1276 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1278 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1280 T = Triple("xtensa");
1281 EXPECT_EQ(Triple::xtensa, T.getArch());
1282 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1283 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1284 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1286 T = Triple("xtensa-unknown-unknown");
1287 EXPECT_EQ(Triple::xtensa, T.getArch());
1288 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1289 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1290 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1292 T = Triple("arm-unknown-linux-ohos");
1293 EXPECT_EQ(Triple::arm, T.getArch());
1294 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1295 EXPECT_EQ(Triple::Linux, T.getOS());
1296 EXPECT_EQ(Triple::OpenHOS, T.getEnvironment());
1298 T = Triple("arm-unknown-liteos");
1299 EXPECT_EQ(Triple::arm, T.getArch());
1300 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1301 EXPECT_EQ(Triple::LiteOS, T.getOS());
1302 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1304 T = Triple("x86_64-pc-serenity");
1305 EXPECT_EQ(Triple::x86_64, T.getArch());
1306 EXPECT_EQ(Triple::PC, T.getVendor());
1307 EXPECT_EQ(Triple::Serenity, T.getOS());
1308 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1310 T = Triple("aarch64-pc-serenity");
1311 EXPECT_EQ(Triple::aarch64, T.getArch());
1312 EXPECT_EQ(Triple::PC, T.getVendor());
1313 EXPECT_EQ(Triple::Serenity, T.getOS());
1314 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1316 T = Triple("aarch64-unknown-linux-pauthtest");
1317 EXPECT_EQ(Triple::aarch64, T.getArch());
1318 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1319 EXPECT_EQ(Triple::Linux, T.getOS());
1320 EXPECT_EQ(Triple::PAuthTest, T.getEnvironment());
1322 // Gentoo time64 triples
1323 T = Triple("i686-pc-linux-gnut64");
1324 EXPECT_EQ(Triple::x86, T.getArch());
1325 EXPECT_EQ(Triple::PC, T.getVendor());
1326 EXPECT_EQ(Triple::Linux, T.getOS());
1327 EXPECT_EQ(Triple::GNUT64, T.getEnvironment());
1328 EXPECT_TRUE(T.isTime64ABI());
1330 T = Triple("armv5tel-softfloat-linux-gnueabit64");
1331 EXPECT_EQ(Triple::arm, T.getArch());
1332 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1333 EXPECT_EQ(Triple::Linux, T.getOS());
1334 EXPECT_EQ(Triple::GNUEABIT64, T.getEnvironment());
1335 EXPECT_TRUE(T.isTime64ABI());
1337 T = Triple("armv7a-unknown-linux-gnueabihft64");
1338 EXPECT_EQ(Triple::arm, T.getArch());
1339 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1340 EXPECT_EQ(Triple::Linux, T.getOS());
1341 EXPECT_EQ(Triple::GNUEABIHFT64, T.getEnvironment());
1342 EXPECT_TRUE(T.isTime64ABI());
1343 EXPECT_TRUE(T.isHardFloatABI());
1345 T = Triple("x86_64-pc-linux-llvm");
1346 EXPECT_EQ(Triple::x86_64, T.getArch());
1347 EXPECT_EQ(Triple::PC, T.getVendor());
1348 EXPECT_EQ(Triple::Linux, T.getOS());
1349 EXPECT_EQ(Triple::LLVM, T.getEnvironment());
1351 T = Triple("spirv64-intel-unknown");
1352 EXPECT_EQ(Triple::spirv64, T.getArch());
1353 EXPECT_EQ(Triple::Intel, T.getVendor());
1354 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1355 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1357 T = Triple("huh");
1358 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1361 static std::string Join(StringRef A, StringRef B, StringRef C) {
1362 std::string Str = std::string(A);
1363 Str += '-';
1364 Str += B;
1365 Str += '-';
1366 Str += C;
1367 return Str;
1370 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
1371 std::string Str = std::string(A);
1372 Str += '-';
1373 Str += B;
1374 Str += '-';
1375 Str += C;
1376 Str += '-';
1377 Str += D;
1378 return Str;
1381 TEST(TripleTest, Normalization) {
1383 EXPECT_EQ("unknown", Triple::normalize(""));
1384 EXPECT_EQ("unknown-unknown", Triple::normalize("-"));
1385 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--"));
1386 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---"));
1387 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown",
1388 Triple::normalize("----"));
1390 EXPECT_EQ("a", Triple::normalize("a"));
1391 EXPECT_EQ("a-b", Triple::normalize("a-b"));
1392 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
1393 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
1395 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
1396 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
1397 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
1398 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
1400 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
1401 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c"));
1402 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
1403 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
1405 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
1406 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c"));
1407 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c"));
1409 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
1410 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386"));
1411 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c"));
1412 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-"));
1414 EXPECT_EQ("i386", Triple::normalize("i386"));
1415 EXPECT_EQ("unknown-pc", Triple::normalize("pc"));
1416 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux"));
1418 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux"));
1420 EXPECT_EQ("a-unknown-unknown",
1421 Triple::normalize("a", Triple::CanonicalForm::THREE_IDENT));
1422 EXPECT_EQ("a-b-unknown",
1423 Triple::normalize("a-b", Triple::CanonicalForm::THREE_IDENT));
1424 EXPECT_EQ("a-b-c",
1425 Triple::normalize("a-b-c", Triple::CanonicalForm::THREE_IDENT));
1426 EXPECT_EQ("a-b-c",
1427 Triple::normalize("a-b-c-d", Triple::CanonicalForm::THREE_IDENT));
1428 EXPECT_EQ("a-b-c",
1429 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::THREE_IDENT));
1431 EXPECT_EQ("a-unknown-unknown-unknown",
1432 Triple::normalize("a", Triple::CanonicalForm::FOUR_IDENT));
1433 EXPECT_EQ("a-b-unknown-unknown",
1434 Triple::normalize("a-b", Triple::CanonicalForm::FOUR_IDENT));
1435 EXPECT_EQ("a-b-c-unknown",
1436 Triple::normalize("a-b-c", Triple::CanonicalForm::FOUR_IDENT));
1437 EXPECT_EQ("a-b-c-d",
1438 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FOUR_IDENT));
1439 EXPECT_EQ("a-b-c-d",
1440 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FOUR_IDENT));
1442 EXPECT_EQ("a-unknown-unknown-unknown-unknown",
1443 Triple::normalize("a", Triple::CanonicalForm::FIVE_IDENT));
1444 EXPECT_EQ("a-b-unknown-unknown-unknown",
1445 Triple::normalize("a-b", Triple::CanonicalForm::FIVE_IDENT));
1446 EXPECT_EQ("a-b-c-unknown-unknown",
1447 Triple::normalize("a-b-c", Triple::CanonicalForm::FIVE_IDENT));
1448 EXPECT_EQ("a-b-c-d-unknown",
1449 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FIVE_IDENT));
1450 EXPECT_EQ("a-b-c-d-e",
1451 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FIVE_IDENT));
1453 EXPECT_EQ("i386-b-c-unknown",
1454 Triple::normalize("i386-b-c", Triple::CanonicalForm::FOUR_IDENT));
1455 EXPECT_EQ("i386-b-c-unknown-unknown",
1456 Triple::normalize("i386-b-c", Triple::CanonicalForm::FIVE_IDENT));
1458 EXPECT_EQ("i386-a-c-unknown",
1459 Triple::normalize("a-i386-c", Triple::CanonicalForm::FOUR_IDENT));
1460 EXPECT_EQ("i386-a-c-unknown-unknown",
1461 Triple::normalize("a-i386-c", Triple::CanonicalForm::FIVE_IDENT));
1463 EXPECT_EQ("i386-a-b-unknown",
1464 Triple::normalize("a-b-i386", Triple::CanonicalForm::FOUR_IDENT));
1465 EXPECT_EQ("i386-a-b-c",
1466 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FOUR_IDENT));
1468 EXPECT_EQ("a-pc-c-unknown",
1469 Triple::normalize("a-pc-c", Triple::CanonicalForm::FOUR_IDENT));
1470 EXPECT_EQ("unknown-pc-b-c",
1471 Triple::normalize("pc-b-c", Triple::CanonicalForm::FOUR_IDENT));
1472 EXPECT_EQ("a-pc-b-unknown",
1473 Triple::normalize("a-b-pc", Triple::CanonicalForm::FOUR_IDENT));
1474 EXPECT_EQ("a-pc-b-c",
1475 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FOUR_IDENT));
1477 EXPECT_EQ("a-b-linux-unknown",
1478 Triple::normalize("a-b-linux", Triple::CanonicalForm::FOUR_IDENT));
1479 // We lose `-c` here as expected.
1480 EXPECT_EQ("unknown-unknown-linux-b",
1481 Triple::normalize("linux-b-c", Triple::CanonicalForm::FOUR_IDENT));
1482 EXPECT_EQ("a-unknown-linux-c",
1483 Triple::normalize("a-linux-c", Triple::CanonicalForm::FOUR_IDENT));
1485 EXPECT_EQ("i386-pc-a-unknown",
1486 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FOUR_IDENT));
1487 EXPECT_EQ("i386-pc-unknown-unknown",
1488 Triple::normalize("-pc-i386", Triple::CanonicalForm::FOUR_IDENT));
1489 EXPECT_EQ("unknown-pc-linux-c",
1490 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FOUR_IDENT));
1491 EXPECT_EQ("unknown-pc-linux-unknown",
1492 Triple::normalize("linux-pc-", Triple::CanonicalForm::FOUR_IDENT));
1494 EXPECT_EQ("i386-unknown-unknown-unknown",
1495 Triple::normalize("i386", Triple::CanonicalForm::FOUR_IDENT));
1496 EXPECT_EQ("unknown-pc-unknown-unknown",
1497 Triple::normalize("pc", Triple::CanonicalForm::FOUR_IDENT));
1498 EXPECT_EQ("unknown-unknown-linux-unknown",
1499 Triple::normalize("linux", Triple::CanonicalForm::FOUR_IDENT));
1501 EXPECT_EQ(
1502 "x86_64-unknown-linux-gnu",
1503 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FOUR_IDENT));
1505 EXPECT_EQ("i386-a-b-unknown-unknown",
1506 Triple::normalize("a-b-i386", Triple::CanonicalForm::FIVE_IDENT));
1507 EXPECT_EQ("i386-a-b-c-unknown",
1508 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FIVE_IDENT));
1510 EXPECT_EQ("a-pc-c-unknown-unknown",
1511 Triple::normalize("a-pc-c", Triple::CanonicalForm::FIVE_IDENT));
1512 EXPECT_EQ("unknown-pc-b-c-unknown",
1513 Triple::normalize("pc-b-c", Triple::CanonicalForm::FIVE_IDENT));
1514 EXPECT_EQ("a-pc-b-unknown-unknown",
1515 Triple::normalize("a-b-pc", Triple::CanonicalForm::FIVE_IDENT));
1516 EXPECT_EQ("a-pc-b-c-unknown",
1517 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FIVE_IDENT));
1519 EXPECT_EQ("a-b-linux-unknown-unknown",
1520 Triple::normalize("a-b-linux", Triple::CanonicalForm::FIVE_IDENT));
1521 EXPECT_EQ("unknown-unknown-linux-b-c",
1522 Triple::normalize("linux-b-c", Triple::CanonicalForm::FIVE_IDENT));
1523 EXPECT_EQ("a-unknown-linux-c-unknown",
1524 Triple::normalize("a-linux-c", Triple::CanonicalForm::FIVE_IDENT));
1526 EXPECT_EQ("i386-pc-a-unknown-unknown",
1527 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FIVE_IDENT));
1528 EXPECT_EQ("i386-pc-unknown-unknown-unknown",
1529 Triple::normalize("-pc-i386", Triple::CanonicalForm::FIVE_IDENT));
1530 EXPECT_EQ("unknown-pc-linux-c-unknown",
1531 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FIVE_IDENT));
1532 EXPECT_EQ("unknown-pc-linux-unknown-unknown",
1533 Triple::normalize("linux-pc-", Triple::CanonicalForm::FIVE_IDENT));
1535 EXPECT_EQ("i386-unknown-unknown-unknown-unknown",
1536 Triple::normalize("i386", Triple::CanonicalForm::FIVE_IDENT));
1537 EXPECT_EQ("unknown-pc-unknown-unknown-unknown",
1538 Triple::normalize("pc", Triple::CanonicalForm::FIVE_IDENT));
1539 EXPECT_EQ("unknown-unknown-linux-unknown-unknown",
1540 Triple::normalize("linux", Triple::CanonicalForm::FIVE_IDENT));
1542 EXPECT_EQ(
1543 "x86_64-unknown-linux-gnu-unknown",
1544 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FIVE_IDENT));
1546 // Check that normalizing a permutated set of valid components returns a
1547 // triple with the unpermuted components.
1549 // We don't check every possible combination. For the set of architectures A,
1550 // vendors V, operating systems O, and environments E, that would require |A|
1551 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given
1552 // slot and make sure it gets normalized to the correct position from every
1553 // permutation. This should cover the core logic while being a tractable
1554 // number of tests at (|A| + |V| + |O| + |E|) * 4!.
1555 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);
1556 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);
1557 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);
1558 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);
1559 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),
1560 Triple::getVendorTypeName(FirstVendorType),
1561 Triple::getOSTypeName(FirstOSType),
1562 Triple::getEnvironmentTypeName(FirstEnvType)};
1563 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {
1564 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1565 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
1566 std::string E = Join(C[0], C[1], C[2]);
1567 int I[] = {0, 1, 2};
1568 do {
1569 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1570 } while (std::next_permutation(std::begin(I), std::end(I)));
1571 std::string F = Join(C[0], C[1], C[2], C[3]);
1572 int J[] = {0, 1, 2, 3};
1573 do {
1574 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1575 } while (std::next_permutation(std::begin(J), std::end(J)));
1577 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;
1578 ++Vendor) {
1579 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1580 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
1581 std::string E = Join(C[0], C[1], C[2]);
1582 int I[] = {0, 1, 2};
1583 do {
1584 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1585 } while (std::next_permutation(std::begin(I), std::end(I)));
1586 std::string F = Join(C[0], C[1], C[2], C[3]);
1587 int J[] = {0, 1, 2, 3};
1588 do {
1589 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1590 } while (std::next_permutation(std::begin(J), std::end(J)));
1592 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {
1593 if (OS == Triple::Win32)
1594 continue;
1595 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1596 C[2] = Triple::getOSTypeName(Triple::OSType(OS));
1597 std::string E = Join(C[0], C[1], C[2]);
1598 int I[] = {0, 1, 2};
1599 do {
1600 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1601 } while (std::next_permutation(std::begin(I), std::end(I)));
1602 std::string F = Join(C[0], C[1], C[2], C[3]);
1603 int J[] = {0, 1, 2, 3};
1604 do {
1605 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1606 } while (std::next_permutation(std::begin(J), std::end(J)));
1608 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {
1609 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1610 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
1611 std::string F = Join(C[0], C[1], C[2], C[3]);
1612 int J[] = {0, 1, 2, 3};
1613 do {
1614 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1615 } while (std::next_permutation(std::begin(J), std::end(J)));
1618 // Various real-world funky triples. The value returned by GCC's config.sub
1619 // is given in the comment.
1620 EXPECT_EQ("i386-unknown-windows-gnu",
1621 Triple::normalize("i386-mingw32")); // i386-pc-mingw32
1622 EXPECT_EQ("x86_64-unknown-linux-gnu",
1623 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
1624 EXPECT_EQ("i486-unknown-linux-gnu",
1625 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
1626 EXPECT_EQ("i386-redhat-linux",
1627 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
1628 EXPECT_EQ("i686-unknown-linux",
1629 Triple::normalize("i686-linux")); // i686-pc-linux-gnu
1630 EXPECT_EQ("arm-unknown-none-eabi",
1631 Triple::normalize("arm-none-eabi")); // arm-none-eabi
1632 EXPECT_EQ("ve-unknown-linux",
1633 Triple::normalize("ve-linux")); // ve-linux
1634 EXPECT_EQ("wasm32-unknown-wasi",
1635 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi
1636 EXPECT_EQ("wasm64-unknown-wasi",
1637 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi
1640 TEST(TripleTest, MutateName) {
1641 Triple T;
1642 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1643 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1644 EXPECT_EQ(Triple::UnknownOS, T.getOS());
1645 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1647 T.setArchName("i386");
1648 EXPECT_EQ(Triple::x86, T.getArch());
1649 EXPECT_EQ("i386--", T.getTriple());
1651 T.setVendorName("pc");
1652 EXPECT_EQ(Triple::x86, T.getArch());
1653 EXPECT_EQ(Triple::PC, T.getVendor());
1654 EXPECT_EQ("i386-pc-", T.getTriple());
1656 T.setOSName("linux");
1657 EXPECT_EQ(Triple::x86, T.getArch());
1658 EXPECT_EQ(Triple::PC, T.getVendor());
1659 EXPECT_EQ(Triple::Linux, T.getOS());
1660 EXPECT_EQ("i386-pc-linux", T.getTriple());
1662 T.setEnvironmentName("gnu");
1663 EXPECT_EQ(Triple::x86, T.getArch());
1664 EXPECT_EQ(Triple::PC, T.getVendor());
1665 EXPECT_EQ(Triple::Linux, T.getOS());
1666 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
1668 T.setOSName("freebsd");
1669 EXPECT_EQ(Triple::x86, T.getArch());
1670 EXPECT_EQ(Triple::PC, T.getVendor());
1671 EXPECT_EQ(Triple::FreeBSD, T.getOS());
1672 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
1674 T.setOSAndEnvironmentName("darwin");
1675 EXPECT_EQ(Triple::x86, T.getArch());
1676 EXPECT_EQ(Triple::PC, T.getVendor());
1677 EXPECT_EQ(Triple::Darwin, T.getOS());
1678 EXPECT_EQ("i386-pc-darwin", T.getTriple());
1681 TEST(TripleTest, BitWidthChecks) {
1682 Triple T;
1683 EXPECT_FALSE(T.isArch16Bit());
1684 EXPECT_FALSE(T.isArch32Bit());
1685 EXPECT_FALSE(T.isArch64Bit());
1686 EXPECT_EQ(T.getArchPointerBitWidth(), 0U);
1688 T.setArch(Triple::arm);
1689 EXPECT_FALSE(T.isArch16Bit());
1690 EXPECT_TRUE(T.isArch32Bit());
1691 EXPECT_FALSE(T.isArch64Bit());
1692 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1694 T.setArch(Triple::hexagon);
1695 EXPECT_FALSE(T.isArch16Bit());
1696 EXPECT_TRUE(T.isArch32Bit());
1697 EXPECT_FALSE(T.isArch64Bit());
1698 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1700 T.setArch(Triple::mips);
1701 EXPECT_FALSE(T.isArch16Bit());
1702 EXPECT_TRUE(T.isArch32Bit());
1703 EXPECT_FALSE(T.isArch64Bit());
1704 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1706 T.setArch(Triple::mips64);
1707 EXPECT_FALSE(T.isArch16Bit());
1708 EXPECT_FALSE(T.isArch32Bit());
1709 EXPECT_TRUE(T.isArch64Bit());
1710 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1712 T.setArch(Triple::msp430);
1713 EXPECT_TRUE(T.isArch16Bit());
1714 EXPECT_FALSE(T.isArch32Bit());
1715 EXPECT_FALSE(T.isArch64Bit());
1716 EXPECT_EQ(T.getArchPointerBitWidth(), 16U);
1718 T.setArch(Triple::ppc);
1719 EXPECT_FALSE(T.isArch16Bit());
1720 EXPECT_TRUE(T.isArch32Bit());
1721 EXPECT_FALSE(T.isArch64Bit());
1722 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1724 T.setArch(Triple::ppc64);
1725 EXPECT_FALSE(T.isArch16Bit());
1726 EXPECT_FALSE(T.isArch32Bit());
1727 EXPECT_TRUE(T.isArch64Bit());
1728 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1730 T.setArch(Triple::x86);
1731 EXPECT_FALSE(T.isArch16Bit());
1732 EXPECT_TRUE(T.isArch32Bit());
1733 EXPECT_FALSE(T.isArch64Bit());
1734 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1736 T.setArch(Triple::x86_64);
1737 EXPECT_FALSE(T.isArch16Bit());
1738 EXPECT_FALSE(T.isArch32Bit());
1739 EXPECT_TRUE(T.isArch64Bit());
1740 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1742 T.setArch(Triple::amdil);
1743 EXPECT_FALSE(T.isArch16Bit());
1744 EXPECT_TRUE(T.isArch32Bit());
1745 EXPECT_FALSE(T.isArch64Bit());
1746 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1748 T.setArch(Triple::amdil64);
1749 EXPECT_FALSE(T.isArch16Bit());
1750 EXPECT_FALSE(T.isArch32Bit());
1751 EXPECT_TRUE(T.isArch64Bit());
1752 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1754 T.setArch(Triple::hsail);
1755 EXPECT_FALSE(T.isArch16Bit());
1756 EXPECT_TRUE(T.isArch32Bit());
1757 EXPECT_FALSE(T.isArch64Bit());
1758 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1760 T.setArch(Triple::hsail64);
1761 EXPECT_FALSE(T.isArch16Bit());
1762 EXPECT_FALSE(T.isArch32Bit());
1763 EXPECT_TRUE(T.isArch64Bit());
1764 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1766 T.setArch(Triple::spir);
1767 EXPECT_FALSE(T.isArch16Bit());
1768 EXPECT_TRUE(T.isArch32Bit());
1769 EXPECT_FALSE(T.isArch64Bit());
1770 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1772 T.setArch(Triple::spir64);
1773 EXPECT_FALSE(T.isArch16Bit());
1774 EXPECT_FALSE(T.isArch32Bit());
1775 EXPECT_TRUE(T.isArch64Bit());
1776 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1778 T.setArch(Triple::spirv);
1779 EXPECT_FALSE(T.isArch16Bit());
1780 EXPECT_FALSE(T.isArch32Bit());
1781 EXPECT_TRUE(T.isArch64Bit());
1782 EXPECT_TRUE(T.isSPIRV());
1784 T.setArch(Triple::spirv32);
1785 EXPECT_FALSE(T.isArch16Bit());
1786 EXPECT_TRUE(T.isArch32Bit());
1787 EXPECT_FALSE(T.isArch64Bit());
1788 EXPECT_TRUE(T.isSPIRV());
1790 T.setArch(Triple::spirv64);
1791 EXPECT_FALSE(T.isArch16Bit());
1792 EXPECT_FALSE(T.isArch32Bit());
1793 EXPECT_TRUE(T.isArch64Bit());
1794 EXPECT_TRUE(T.isSPIRV());
1796 T.setArch(Triple::sparc);
1797 EXPECT_FALSE(T.isArch16Bit());
1798 EXPECT_TRUE(T.isArch32Bit());
1799 EXPECT_FALSE(T.isArch64Bit());
1801 T.setArch(Triple::sparcel);
1802 EXPECT_FALSE(T.isArch16Bit());
1803 EXPECT_TRUE(T.isArch32Bit());
1804 EXPECT_FALSE(T.isArch64Bit());
1806 T.setArch(Triple::sparcv9);
1807 EXPECT_FALSE(T.isArch16Bit());
1808 EXPECT_FALSE(T.isArch32Bit());
1809 EXPECT_TRUE(T.isArch64Bit());
1811 T.setArch(Triple::wasm32);
1812 EXPECT_FALSE(T.isArch16Bit());
1813 EXPECT_TRUE(T.isArch32Bit());
1814 EXPECT_FALSE(T.isArch64Bit());
1816 T.setArch(Triple::wasm64);
1817 EXPECT_FALSE(T.isArch16Bit());
1818 EXPECT_FALSE(T.isArch32Bit());
1819 EXPECT_TRUE(T.isArch64Bit());
1821 T.setArch(Triple::avr);
1822 EXPECT_TRUE(T.isArch16Bit());
1823 EXPECT_FALSE(T.isArch32Bit());
1824 EXPECT_FALSE(T.isArch64Bit());
1826 T.setArch(Triple::lanai);
1827 EXPECT_FALSE(T.isArch16Bit());
1828 EXPECT_TRUE(T.isArch32Bit());
1829 EXPECT_FALSE(T.isArch64Bit());
1831 T.setArch(Triple::riscv32);
1832 EXPECT_FALSE(T.isArch16Bit());
1833 EXPECT_TRUE(T.isArch32Bit());
1834 EXPECT_FALSE(T.isArch64Bit());
1835 EXPECT_TRUE(T.isRISCV());
1837 T.setArch(Triple::riscv64);
1838 EXPECT_FALSE(T.isArch16Bit());
1839 EXPECT_FALSE(T.isArch32Bit());
1840 EXPECT_TRUE(T.isArch64Bit());
1841 EXPECT_TRUE(T.isRISCV());
1843 T.setArch(Triple::csky);
1844 EXPECT_FALSE(T.isArch16Bit());
1845 EXPECT_TRUE(T.isArch32Bit());
1846 EXPECT_FALSE(T.isArch64Bit());
1847 EXPECT_TRUE(T.isCSKY());
1849 T.setArch(Triple::loongarch32);
1850 EXPECT_FALSE(T.isArch16Bit());
1851 EXPECT_TRUE(T.isArch32Bit());
1852 EXPECT_FALSE(T.isArch64Bit());
1853 EXPECT_TRUE(T.isLoongArch());
1854 EXPECT_TRUE(T.isLoongArch32());
1856 T.setArch(Triple::loongarch64);
1857 EXPECT_FALSE(T.isArch16Bit());
1858 EXPECT_FALSE(T.isArch32Bit());
1859 EXPECT_TRUE(T.isArch64Bit());
1860 EXPECT_TRUE(T.isLoongArch());
1861 EXPECT_TRUE(T.isLoongArch64());
1863 T.setArch(Triple::dxil);
1864 EXPECT_FALSE(T.isArch16Bit());
1865 EXPECT_TRUE(T.isArch32Bit());
1866 EXPECT_FALSE(T.isArch64Bit());
1867 EXPECT_TRUE(T.isDXIL());
1869 T.setArch(Triple::xtensa);
1870 EXPECT_FALSE(T.isArch16Bit());
1871 EXPECT_TRUE(T.isArch32Bit());
1872 EXPECT_FALSE(T.isArch64Bit());
1875 TEST(TripleTest, BitWidthArchVariants) {
1876 Triple T;
1877 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1878 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1880 T.setArch(Triple::UnknownArch);
1881 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1882 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1884 T.setArch(Triple::mips);
1885 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1886 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1887 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1888 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1890 T.setArch(Triple::mips, Triple::MipsSubArch_r6);
1891 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1892 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1893 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1894 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1896 T.setArch(Triple::mipsel);
1897 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1898 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1899 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1900 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1902 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);
1903 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1904 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1905 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1906 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1908 T.setArch(Triple::ppc);
1909 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
1910 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
1912 T.setArch(Triple::nvptx);
1913 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
1914 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
1916 T.setArch(Triple::sparc);
1917 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
1918 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
1920 T.setArch(Triple::x86);
1921 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
1922 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
1924 T.setArch(Triple::mips64);
1925 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1926 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1927 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1928 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1930 T.setArch(Triple::mips64, Triple::MipsSubArch_r6);
1931 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1932 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1933 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1934 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1936 T.setArch(Triple::mips64el);
1937 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1938 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1939 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1940 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1942 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);
1943 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1944 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1945 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1946 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1948 T.setArch(Triple::ppc64);
1949 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
1950 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
1952 T.setArch(Triple::nvptx64);
1953 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
1954 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
1956 T.setArch(Triple::sparcv9);
1957 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
1958 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
1960 T.setArch(Triple::x86_64);
1961 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
1962 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
1964 T.setArch(Triple::amdil);
1965 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
1966 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
1968 T.setArch(Triple::amdil64);
1969 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
1970 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
1972 T.setArch(Triple::hsail);
1973 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
1974 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
1976 T.setArch(Triple::hsail64);
1977 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
1978 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
1980 T.setArch(Triple::spir);
1981 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
1982 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
1984 T.setArch(Triple::spir64);
1985 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
1986 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
1988 T.setArch(Triple::spirv);
1989 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
1990 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
1992 T.setArch(Triple::spirv32);
1993 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
1994 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
1996 T.setArch(Triple::spirv64);
1997 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
1998 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
2000 T.setArch(Triple::wasm32);
2001 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
2002 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
2004 T.setArch(Triple::wasm64);
2005 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
2006 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
2008 T.setArch(Triple::riscv32);
2009 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
2010 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
2012 T.setArch(Triple::riscv64);
2013 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
2014 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
2016 T.setArch(Triple::csky);
2017 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch());
2018 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2020 T.setArch(Triple::loongarch32);
2021 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());
2022 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());
2024 T.setArch(Triple::loongarch64);
2025 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());
2026 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());
2028 T.setArch(Triple::thumbeb);
2029 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch());
2030 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2032 T.setArch(Triple::thumb);
2033 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch());
2034 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2036 T.setArch(Triple::aarch64);
2037 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
2038 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2040 T.setArch(Triple::aarch64_be);
2041 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
2042 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2044 T.setArch(Triple::renderscript32);
2045 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
2046 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
2048 T.setArch(Triple::renderscript64);
2049 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
2050 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
2052 T.setArch(Triple::armeb);
2053 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
2054 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2056 T.setArch(Triple::arm);
2057 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
2058 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2060 T.setArch(Triple::systemz);
2061 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
2062 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch());
2064 T.setArch(Triple::xcore);
2065 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch());
2066 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2068 T.setArch(Triple::dxil);
2069 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch());
2070 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2072 T.setArch(Triple::xtensa);
2073 EXPECT_EQ(Triple::xtensa, T.get32BitArchVariant().getArch());
2074 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2077 TEST(TripleTest, EndianArchVariants) {
2078 Triple T;
2079 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2080 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2082 T.setArch(Triple::UnknownArch);
2083 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2084 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2086 T.setArch(Triple::aarch64_be);
2087 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
2088 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
2090 T.setArch(Triple::aarch64);
2091 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
2092 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
2094 T.setArch(Triple::armeb);
2095 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());
2096 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2098 T.setArch(Triple::arm);
2099 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2100 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());
2101 T = Triple("arm");
2102 EXPECT_TRUE(T.isLittleEndian());
2103 T = Triple("thumb");
2104 EXPECT_TRUE(T.isLittleEndian());
2105 T = Triple("armeb");
2106 EXPECT_FALSE(T.isLittleEndian());
2107 T = Triple("thumbeb");
2108 EXPECT_FALSE(T.isLittleEndian());
2110 T.setArch(Triple::bpfeb);
2111 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
2112 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
2114 T.setArch(Triple::bpfel);
2115 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
2116 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
2118 T.setArch(Triple::mips64);
2119 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2120 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2121 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2122 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2124 T.setArch(Triple::mips64, Triple::MipsSubArch_r6);
2125 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2126 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2127 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2128 EXPECT_EQ(Triple::MipsSubArch_r6,
2129 T.getLittleEndianArchVariant().getSubArch());
2131 T.setArch(Triple::mips64el);
2132 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2133 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2134 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2135 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2137 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);
2138 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2139 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2140 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2141 EXPECT_EQ(Triple::MipsSubArch_r6,
2142 T.getLittleEndianArchVariant().getSubArch());
2144 T.setArch(Triple::mips);
2145 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2146 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2147 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2148 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2150 T.setArch(Triple::mips, Triple::MipsSubArch_r6);
2151 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2152 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2153 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2154 EXPECT_EQ(Triple::MipsSubArch_r6,
2155 T.getLittleEndianArchVariant().getSubArch());
2157 T.setArch(Triple::mipsel);
2158 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2159 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2160 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2161 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2163 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);
2164 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2165 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2166 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2167 EXPECT_EQ(Triple::MipsSubArch_r6,
2168 T.getLittleEndianArchVariant().getSubArch());
2170 T.setArch(Triple::ppc);
2171 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());
2172 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch());
2174 T.setArch(Triple::ppc64);
2175 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
2176 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
2178 T.setArch(Triple::ppc64le);
2179 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
2180 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
2182 T.setArch(Triple::sparc);
2183 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
2184 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
2186 T.setArch(Triple::sparcel);
2187 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
2188 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
2190 T.setArch(Triple::thumb);
2191 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2192 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());
2194 T.setArch(Triple::thumbeb);
2195 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());
2196 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2198 T.setArch(Triple::lanai);
2199 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());
2200 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2202 T.setArch(Triple::tcele);
2203 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
2204 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
2206 T.setArch(Triple::tce);
2207 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
2208 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
2210 T.setArch(Triple::csky);
2211 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2212 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch());
2214 T.setArch(Triple::loongarch32);
2215 EXPECT_TRUE(T.isLittleEndian());
2216 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2217 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch());
2219 T.setArch(Triple::loongarch64);
2220 EXPECT_TRUE(T.isLittleEndian());
2221 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2222 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch());
2224 T.setArch(Triple::dxil);
2225 EXPECT_TRUE(T.isLittleEndian());
2226 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2227 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());
2230 TEST(TripleTest, XROS) {
2231 Triple T;
2232 VersionTuple Version;
2234 T = Triple("arm64-apple-xros");
2235 EXPECT_TRUE(T.isXROS());
2236 EXPECT_TRUE(T.isOSDarwin());
2237 EXPECT_FALSE(T.isiOS());
2238 EXPECT_FALSE(T.isMacOSX());
2239 EXPECT_FALSE(T.isSimulatorEnvironment());
2240 EXPECT_EQ(T.getOSName(), "xros");
2241 Version = T.getOSVersion();
2242 EXPECT_EQ(VersionTuple(0), Version);
2244 T = Triple("arm64-apple-visionos1.2");
2245 EXPECT_TRUE(T.isXROS());
2246 EXPECT_TRUE(T.isOSDarwin());
2247 EXPECT_FALSE(T.isiOS());
2248 EXPECT_FALSE(T.isMacOSX());
2249 EXPECT_FALSE(T.isSimulatorEnvironment());
2250 EXPECT_EQ(T.getOSName(), "visionos1.2");
2251 Version = T.getOSVersion();
2252 EXPECT_EQ(VersionTuple(1, 2), Version);
2254 T = Triple("arm64-apple-xros1-simulator");
2255 EXPECT_TRUE(T.isXROS());
2256 EXPECT_TRUE(T.isOSDarwin());
2257 EXPECT_FALSE(T.isiOS());
2258 EXPECT_FALSE(T.isMacOSX());
2259 EXPECT_TRUE(T.isSimulatorEnvironment());
2260 Version = T.getOSVersion();
2261 EXPECT_EQ(VersionTuple(1), Version);
2262 Version = T.getiOSVersion();
2263 EXPECT_EQ(VersionTuple(17), Version);
2266 TEST(TripleTest, getOSVersion) {
2267 Triple T;
2268 VersionTuple Version;
2270 T = Triple("i386-apple-darwin9");
2271 EXPECT_TRUE(T.isMacOSX());
2272 EXPECT_FALSE(T.isiOS());
2273 EXPECT_FALSE(T.isArch16Bit());
2274 EXPECT_TRUE(T.isArch32Bit());
2275 EXPECT_FALSE(T.isArch64Bit());
2276 T.getMacOSXVersion(Version);
2277 EXPECT_EQ(VersionTuple(10, 5), Version);
2278 Version = T.getiOSVersion();
2279 EXPECT_EQ(VersionTuple(5), Version);
2281 T = Triple("x86_64-apple-darwin9");
2282 EXPECT_TRUE(T.isMacOSX());
2283 EXPECT_FALSE(T.isiOS());
2284 EXPECT_FALSE(T.isArch16Bit());
2285 EXPECT_FALSE(T.isArch32Bit());
2286 EXPECT_TRUE(T.isArch64Bit());
2287 T.getMacOSXVersion(Version);
2288 EXPECT_EQ(VersionTuple(10, 5), Version);
2289 Version = T.getiOSVersion();
2290 EXPECT_EQ(VersionTuple(5), Version);
2292 T = Triple("x86_64-apple-macosx");
2293 EXPECT_TRUE(T.isMacOSX());
2294 EXPECT_FALSE(T.isiOS());
2295 EXPECT_FALSE(T.isArch16Bit());
2296 EXPECT_FALSE(T.isArch32Bit());
2297 EXPECT_TRUE(T.isArch64Bit());
2298 T.getMacOSXVersion(Version);
2299 EXPECT_EQ(VersionTuple(10, 4), Version);
2300 Version = T.getiOSVersion();
2301 EXPECT_EQ(VersionTuple(5), Version);
2303 T = Triple("x86_64-apple-macosx10.7");
2304 EXPECT_TRUE(T.isMacOSX());
2305 EXPECT_FALSE(T.isiOS());
2306 EXPECT_FALSE(T.isArch16Bit());
2307 EXPECT_FALSE(T.isArch32Bit());
2308 EXPECT_TRUE(T.isArch64Bit());
2309 T.getMacOSXVersion(Version);
2310 EXPECT_EQ(VersionTuple(10, 7), Version);
2311 Version = T.getiOSVersion();
2312 EXPECT_EQ(VersionTuple(5), Version);
2314 T = Triple("x86_64-apple-macos11.0");
2315 EXPECT_TRUE(T.isMacOSX());
2316 EXPECT_FALSE(T.isiOS());
2317 EXPECT_FALSE(T.isArch16Bit());
2318 EXPECT_FALSE(T.isArch32Bit());
2319 EXPECT_TRUE(T.isArch64Bit());
2320 T.getMacOSXVersion(Version);
2321 EXPECT_EQ(VersionTuple(11, 0), Version);
2323 T = Triple("arm64-apple-macosx11.5.8");
2324 EXPECT_TRUE(T.isMacOSX());
2325 EXPECT_FALSE(T.isiOS());
2326 EXPECT_FALSE(T.isArch16Bit());
2327 EXPECT_FALSE(T.isArch32Bit());
2328 EXPECT_TRUE(T.isArch64Bit());
2329 T.getMacOSXVersion(Version);
2330 EXPECT_EQ(VersionTuple(11, 5, 8), Version);
2332 // 10.16 forms a valid triple, even though it's not
2333 // a version of a macOS.
2334 T = Triple("x86_64-apple-macos10.16");
2335 EXPECT_TRUE(T.isMacOSX());
2336 T.getMacOSXVersion(Version);
2337 EXPECT_EQ(VersionTuple(10, 16), Version);
2339 T = Triple("x86_64-apple-darwin20");
2340 EXPECT_TRUE(T.isMacOSX());
2341 T.getMacOSXVersion(Version);
2342 EXPECT_EQ(VersionTuple(11), Version);
2344 // For darwin triples on macOS 11, only compare the major version.
2345 T = Triple("x86_64-apple-darwin20.2");
2346 EXPECT_TRUE(T.isMacOSX());
2347 T.getMacOSXVersion(Version);
2348 EXPECT_EQ(VersionTuple(11), Version);
2350 T = Triple("armv7-apple-ios");
2351 EXPECT_FALSE(T.isMacOSX());
2352 EXPECT_TRUE(T.isiOS());
2353 EXPECT_FALSE(T.isArch16Bit());
2354 EXPECT_TRUE(T.isArch32Bit());
2355 EXPECT_FALSE(T.isArch64Bit());
2356 T.getMacOSXVersion(Version);
2357 EXPECT_EQ(VersionTuple(10, 4), Version);
2358 Version = T.getiOSVersion();
2359 EXPECT_EQ(VersionTuple(5), Version);
2361 T = Triple("armv7-apple-ios7.0");
2362 EXPECT_FALSE(T.isMacOSX());
2363 EXPECT_TRUE(T.isiOS());
2364 EXPECT_FALSE(T.isArch16Bit());
2365 EXPECT_TRUE(T.isArch32Bit());
2366 EXPECT_FALSE(T.isArch64Bit());
2367 T.getMacOSXVersion(Version);
2368 EXPECT_EQ(VersionTuple(10, 4), Version);
2369 Version = T.getiOSVersion();
2370 EXPECT_EQ(VersionTuple(7, 0), Version);
2371 EXPECT_FALSE(T.isSimulatorEnvironment());
2373 T = Triple("x86_64-apple-ios10.3-simulator");
2374 EXPECT_TRUE(T.isiOS());
2375 Version = T.getiOSVersion();
2376 EXPECT_EQ(VersionTuple(10, 3), Version);
2377 EXPECT_TRUE(T.isSimulatorEnvironment());
2378 EXPECT_FALSE(T.isMacCatalystEnvironment());
2380 T = Triple("x86_64-apple-ios13.0-macabi");
2381 EXPECT_TRUE(T.isiOS());
2382 Version = T.getiOSVersion();
2383 EXPECT_EQ(VersionTuple(13, 0), Version);
2384 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI);
2385 EXPECT_TRUE(T.isMacCatalystEnvironment());
2386 EXPECT_FALSE(T.isSimulatorEnvironment());
2388 T = Triple("x86_64-apple-driverkit20.1.0");
2389 EXPECT_TRUE(T.isDriverKit());
2390 EXPECT_TRUE(T.isOSDarwin());
2391 EXPECT_FALSE(T.isMacOSX());
2392 EXPECT_FALSE(T.isiOS());
2393 Version = T.getDriverKitVersion();
2394 EXPECT_EQ(VersionTuple(20, 1), Version);
2396 T = Triple("x86_64-apple-driverkit20");
2397 Version = T.getDriverKitVersion();
2398 EXPECT_EQ(VersionTuple(20, 0), Version);
2400 // DriverKit version should default to 19.0.
2401 T = Triple("x86_64-apple-driverkit");
2402 Version = T.getDriverKitVersion();
2403 EXPECT_EQ(VersionTuple(19, 0), Version);
2405 T = Triple("dxil-unknown-shadermodel6.6-pixel");
2406 EXPECT_EQ(Triple::dxil, T.getArch());
2407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
2408 EXPECT_EQ(Triple::ShaderModel, T.getOS());
2409 Version = T.getOSVersion();
2410 EXPECT_EQ(VersionTuple(6, 6), Version);
2411 EXPECT_EQ(Triple::Pixel, T.getEnvironment());
2413 T = Triple("dxil-unknown-shadermodel6.0-pixel");
2414 EXPECT_EQ(Triple::dxil, T.getArch());
2415 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
2416 EXPECT_EQ(Triple::ShaderModel, T.getOS());
2417 Version = T.getOSVersion();
2418 EXPECT_EQ(VersionTuple(6, 0), Version);
2419 EXPECT_EQ(Triple::Pixel, T.getEnvironment());
2422 TEST(TripleTest, getEnvironmentVersion) {
2423 Triple T;
2424 VersionTuple Version;
2426 T = Triple("arm-unknown-linux-android16");
2427 EXPECT_TRUE(T.isAndroid());
2428 Version = T.getEnvironmentVersion();
2429 EXPECT_EQ(VersionTuple(16), Version);
2430 EXPECT_EQ(Triple::Android, T.getEnvironment());
2432 T = Triple("aarch64-unknown-linux-android21");
2433 EXPECT_TRUE(T.isAndroid());
2434 Version = T.getEnvironmentVersion();
2435 EXPECT_EQ(VersionTuple(21), Version);
2436 EXPECT_EQ(Triple::Android, T.getEnvironment());
2439 TEST(TripleTest, isMacOSVersionLT) {
2440 Triple T = Triple("x86_64-apple-macos11");
2441 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));
2442 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));
2444 T = Triple("x86_64-apple-darwin20");
2445 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));
2446 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0));
2447 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));
2450 TEST(TripleTest, CanonicalizeOSVersion) {
2451 EXPECT_EQ(VersionTuple(10, 15, 4),
2452 Triple::getCanonicalVersionForOS(Triple::MacOSX,
2453 VersionTuple(10, 15, 4)));
2454 EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS(
2455 Triple::MacOSX, VersionTuple(10, 16)));
2456 EXPECT_EQ(VersionTuple(20),
2457 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20)));
2460 TEST(TripleTest, FileFormat) {
2461 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
2462 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
2463 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
2464 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
2465 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
2467 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
2468 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
2469 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
2470 EXPECT_EQ(Triple::MachO, Triple("powerpc-apple-macosx").getObjectFormat());
2472 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
2474 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
2475 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
2477 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat());
2478 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat());
2480 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat());
2481 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat());
2482 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat());
2483 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat());
2484 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat());
2486 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
2487 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
2488 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());
2489 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat());
2490 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat());
2491 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat());
2493 EXPECT_EQ(Triple::Wasm,
2494 Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
2495 EXPECT_EQ(Triple::Wasm,
2496 Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
2497 EXPECT_EQ(Triple::Wasm,
2498 Triple("wasm32-wasi-wasm").getObjectFormat());
2499 EXPECT_EQ(Triple::Wasm,
2500 Triple("wasm64-wasi-wasm").getObjectFormat());
2501 EXPECT_EQ(Triple::Wasm,
2502 Triple("wasm32-unknown-wasi-wasm").getObjectFormat());
2503 EXPECT_EQ(Triple::Wasm,
2504 Triple("wasm64-unknown-wasi-wasm").getObjectFormat());
2506 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat());
2507 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat());
2508 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat());
2509 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat());
2511 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat());
2512 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat());
2514 EXPECT_EQ(Triple::SPIRV, Triple("spirv-unknown-unknown").getObjectFormat());
2515 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat());
2516 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat());
2518 EXPECT_EQ(Triple::ELF,
2519 Triple("loongarch32-unknown-unknown").getObjectFormat());
2520 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat());
2522 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
2523 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
2525 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
2526 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
2528 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
2529 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
2531 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
2532 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
2534 EXPECT_EQ(Triple::DXContainer,
2535 Triple("dxil-unknown-shadermodel").getObjectFormat());
2537 Triple T = Triple("");
2538 T.setObjectFormat(Triple::ELF);
2539 EXPECT_EQ(Triple::ELF, T.getObjectFormat());
2540 EXPECT_EQ("elf", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2542 T.setObjectFormat(Triple::MachO);
2543 EXPECT_EQ(Triple::MachO, T.getObjectFormat());
2544 EXPECT_EQ("macho", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2546 T.setObjectFormat(Triple::XCOFF);
2547 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());
2548 EXPECT_EQ("xcoff", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2550 T.setObjectFormat(Triple::GOFF);
2551 EXPECT_EQ(Triple::GOFF, T.getObjectFormat());
2552 EXPECT_EQ("goff", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2554 T.setObjectFormat(Triple::SPIRV);
2555 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat());
2556 EXPECT_EQ("spirv", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2558 EXPECT_EQ(Triple::ELF, Triple("amdgcn-apple-macosx").getObjectFormat());
2559 EXPECT_EQ(Triple::ELF, Triple("r600-apple-macosx").getObjectFormat());
2560 EXPECT_EQ(Triple::SPIRV, Triple("spirv-apple-macosx").getObjectFormat());
2561 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-apple-macosx").getObjectFormat());
2562 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-apple-macosx").getObjectFormat());
2563 EXPECT_EQ(Triple::DXContainer, Triple("dxil-apple-macosx").getObjectFormat());
2566 TEST(TripleTest, NormalizeWindows) {
2567 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
2568 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32"));
2569 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
2570 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32"));
2571 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
2572 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64"));
2573 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
2574 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin"));
2576 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
2577 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32"));
2578 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
2579 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32"));
2580 EXPECT_EQ("x86_64-pc-windows-gnu",
2581 Triple::normalize("x86_64-pc-mingw32-w64"));
2582 EXPECT_EQ("x86_64-unknown-windows-gnu",
2583 Triple::normalize("x86_64-mingw32-w64"));
2585 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
2586 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf"));
2587 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
2588 EXPECT_EQ("i686-unknown-windows-macho",
2589 Triple::normalize("i686-win32-macho"));
2591 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
2592 EXPECT_EQ("x86_64-unknown-windows-elf",
2593 Triple::normalize("x86_64-win32-elf"));
2594 EXPECT_EQ("x86_64-pc-windows-macho",
2595 Triple::normalize("x86_64-pc-win32-macho"));
2596 EXPECT_EQ("x86_64-unknown-windows-macho",
2597 Triple::normalize("x86_64-win32-macho"));
2599 EXPECT_EQ("i686-pc-windows-cygnus",
2600 Triple::normalize("i686-pc-windows-cygnus"));
2601 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
2602 EXPECT_EQ("i686-pc-windows-itanium",
2603 Triple::normalize("i686-pc-windows-itanium"));
2604 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
2606 EXPECT_EQ("i686-pc-windows-elf",
2607 Triple::normalize("i686-pc-windows-elf-elf"));
2609 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment());
2611 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvccoff")).isOSBinFormatCOFF());
2612 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvc")).isOSBinFormatCOFF());
2613 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-gnu")).isOSBinFormatCOFF());
2616 TEST(TripleTest, NormalizeAndroid) {
2617 EXPECT_EQ("arm-unknown-linux-android16",
2618 Triple::normalize("arm-linux-androideabi16"));
2619 EXPECT_EQ("armv7a-unknown-linux-android",
2620 Triple::normalize("armv7a-linux-androideabi"));
2621 EXPECT_EQ("aarch64-unknown-linux-android21",
2622 Triple::normalize("aarch64-linux-android21"));
2625 TEST(TripleTest, NormalizeARM) {
2626 EXPECT_EQ("armv6-unknown-netbsd-eabi",
2627 Triple::normalize("armv6-netbsd-eabi"));
2628 EXPECT_EQ("armv7-unknown-netbsd-eabi",
2629 Triple::normalize("armv7-netbsd-eabi"));
2630 EXPECT_EQ("armv6eb-unknown-netbsd-eabi",
2631 Triple::normalize("armv6eb-netbsd-eabi"));
2632 EXPECT_EQ("armv7eb-unknown-netbsd-eabi",
2633 Triple::normalize("armv7eb-netbsd-eabi"));
2634 EXPECT_EQ("armv6-unknown-netbsd-eabihf",
2635 Triple::normalize("armv6-netbsd-eabihf"));
2636 EXPECT_EQ("armv7-unknown-netbsd-eabihf",
2637 Triple::normalize("armv7-netbsd-eabihf"));
2638 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf",
2639 Triple::normalize("armv6eb-netbsd-eabihf"));
2640 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf",
2641 Triple::normalize("armv7eb-netbsd-eabihf"));
2643 EXPECT_EQ("armv7-suse-linux-gnueabihf",
2644 Triple::normalize("armv7-suse-linux-gnueabi"));
2646 Triple T;
2647 T = Triple("armv6--netbsd-eabi");
2648 EXPECT_EQ(Triple::arm, T.getArch());
2649 T = Triple("armv6eb--netbsd-eabi");
2650 EXPECT_EQ(Triple::armeb, T.getArch());
2651 T = Triple("armv7-suse-linux-gnueabihf");
2652 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
2655 TEST(TripleTest, ParseARMArch) {
2656 // ARM
2658 Triple T = Triple("arm");
2659 EXPECT_EQ(Triple::arm, T.getArch());
2662 Triple T = Triple("armeb");
2663 EXPECT_EQ(Triple::armeb, T.getArch());
2665 // THUMB
2667 Triple T = Triple("thumb");
2668 EXPECT_EQ(Triple::thumb, T.getArch());
2671 Triple T = Triple("thumbeb");
2672 EXPECT_EQ(Triple::thumbeb, T.getArch());
2674 // AARCH64
2676 Triple T = Triple("arm64");
2677 EXPECT_EQ(Triple::aarch64, T.getArch());
2680 Triple T = Triple("arm64_32");
2681 EXPECT_EQ(Triple::aarch64_32, T.getArch());
2684 Triple T = Triple("aarch64");
2685 EXPECT_EQ(Triple::aarch64, T.getArch());
2688 Triple T = Triple("aarch64_be");
2689 EXPECT_EQ(Triple::aarch64_be, T.getArch());
2692 Triple T = Triple("arm64e");
2693 EXPECT_EQ(Triple::aarch64, T.getArch());
2694 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch());
2697 Triple T = Triple("arm64ec");
2698 EXPECT_EQ(Triple::aarch64, T.getArch());
2699 EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch());
2702 Triple T;
2703 T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec);
2704 EXPECT_EQ("arm64ec", T.getArchName());
2708 TEST(TripleTest, isArmT32) {
2709 // Not isArmT32
2711 Triple T = Triple("thumbv6m");
2712 EXPECT_FALSE(T.isArmT32());
2715 Triple T = Triple("armv8m.base");
2716 EXPECT_FALSE(T.isArmT32());
2719 Triple T = Triple("armv7s");
2720 EXPECT_FALSE(T.isArmT32());
2723 Triple T = Triple("armv7k");
2724 EXPECT_FALSE(T.isArmT32());
2727 Triple T = Triple("armv7ve");
2728 EXPECT_FALSE(T.isArmT32());
2731 Triple T = Triple("armv6");
2732 EXPECT_FALSE(T.isArmT32());
2735 Triple T = Triple("armv6m");
2736 EXPECT_FALSE(T.isArmT32());
2739 Triple T = Triple("armv6k");
2740 EXPECT_FALSE(T.isArmT32());
2743 Triple T = Triple("armv6t2");
2744 EXPECT_FALSE(T.isArmT32());
2747 Triple T = Triple("armv5");
2748 EXPECT_FALSE(T.isArmT32());
2751 Triple T = Triple("armv5te");
2752 EXPECT_FALSE(T.isArmT32());
2755 Triple T = Triple("armv4t");
2756 EXPECT_FALSE(T.isArmT32());
2759 // isArmT32
2761 Triple T = Triple("arm");
2762 EXPECT_TRUE(T.isArmT32());
2765 Triple T = Triple("armv7m");
2766 EXPECT_TRUE(T.isArmT32());
2769 Triple T = Triple("armv7em");
2770 EXPECT_TRUE(T.isArmT32());
2773 Triple T = Triple("armv8m.main");
2774 EXPECT_TRUE(T.isArmT32());
2777 Triple T = Triple("armv8.1m.main");
2778 EXPECT_TRUE(T.isArmT32());
2782 TEST(TripleTest, isArmMClass) {
2783 // not M-class
2785 Triple T = Triple("armv7s");
2786 EXPECT_FALSE(T.isArmMClass());
2789 Triple T = Triple("armv7k");
2790 EXPECT_FALSE(T.isArmMClass());
2793 Triple T = Triple("armv7ve");
2794 EXPECT_FALSE(T.isArmMClass());
2797 Triple T = Triple("armv6");
2798 EXPECT_FALSE(T.isArmMClass());
2801 Triple T = Triple("armv6k");
2802 EXPECT_FALSE(T.isArmMClass());
2805 Triple T = Triple("armv6t2");
2806 EXPECT_FALSE(T.isArmMClass());
2809 Triple T = Triple("armv5");
2810 EXPECT_FALSE(T.isArmMClass());
2813 Triple T = Triple("armv5te");
2814 EXPECT_FALSE(T.isArmMClass());
2817 Triple T = Triple("armv4t");
2818 EXPECT_FALSE(T.isArmMClass());
2821 Triple T = Triple("arm");
2822 EXPECT_FALSE(T.isArmMClass());
2825 // is M-class
2827 Triple T = Triple("armv6m");
2828 EXPECT_TRUE(T.isArmMClass());
2831 Triple T = Triple("armv7m");
2832 EXPECT_TRUE(T.isArmMClass());
2835 Triple T = Triple("armv7em");
2836 EXPECT_TRUE(T.isArmMClass());
2839 Triple T = Triple("armv8m.base");
2840 EXPECT_TRUE(T.isArmMClass());
2843 Triple T = Triple("armv8m.main");
2844 EXPECT_TRUE(T.isArmMClass());
2847 Triple T = Triple("armv8.1m.main");
2848 EXPECT_TRUE(T.isArmMClass());
2852 TEST(TripleTest, DXILNormaizeWithVersion) {
2853 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",
2854 Triple::normalize("dxilv1.0--shadermodel6.0"));
2855 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",
2856 Triple::normalize("dxil--shadermodel6.0"));
2857 EXPECT_EQ("dxilv1.1-unknown-shadermodel6.1-library",
2858 Triple::normalize("dxil-shadermodel6.1-unknown-library"));
2859 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown",
2860 Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));
2861 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown",
2862 Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));
2863 EXPECT_EQ("dxil-unknown-unknown-unknown", Triple::normalize("dxil---"));
2864 EXPECT_EQ("dxilv1.0-pc-shadermodel5.0-compute",
2865 Triple::normalize("dxil-shadermodel5.0-pc-compute"));
2868 TEST(TripleTest, isCompatibleWith) {
2869 struct {
2870 const char *A;
2871 const char *B;
2872 bool Result;
2873 } Cases[] = {
2874 {"armv7-linux-gnueabihf", "thumbv7-linux-gnueabihf", true},
2875 {"armv4-none-unknown-eabi", "thumbv6-unknown-linux-gnueabihf", false},
2876 {"x86_64-apple-macosx10.9.0", "x86_64-apple-macosx10.10.0", true},
2877 {"x86_64-apple-macosx10.9.0", "i386-apple-macosx10.9.0", false},
2878 {"x86_64-apple-macosx10.9.0", "x86_64h-apple-macosx10.9.0", true},
2879 {"x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", true},
2880 {"x86_64-unknown-linux-gnu", "i386-unknown-linux-gnu", false},
2881 {"x86_64-unknown-linux-gnu", "x86_64h-unknown-linux-gnu", true},
2882 {"x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", false},
2883 {"x86_64-pc-windows-msvc", "x86_64-pc-windows-msvc-elf", false},
2884 {"i686-w64-windows-gnu", "i386-w64-windows-gnu", true},
2885 {"x86_64-w64-windows-gnu", "x86_64-pc-windows-gnu", true},
2886 {"armv7-w64-windows-gnu", "thumbv7-pc-windows-gnu", true},
2889 auto DoTest = [](const char *A, const char *B,
2890 bool Result) -> testing::AssertionResult {
2891 if (Triple(A).isCompatibleWith(Triple(B)) != Result) {
2892 return testing::AssertionFailure()
2893 << llvm::formatv("Triple {0} and {1} were expected to be {2}", A,
2894 B, Result ? "compatible" : "incompatible");
2896 return testing::AssertionSuccess();
2898 for (const auto &C : Cases) {
2899 EXPECT_TRUE(DoTest(C.A, C.B, C.Result));
2900 // Test that the comparison is commutative.
2901 EXPECT_TRUE(DoTest(C.B, C.A, C.Result));
2904 } // end anonymous namespace