1 //===----------- Triple.cpp - Triple unit tests ---------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 #include "llvm/TargetParser/Triple.h"
10 #include "llvm/Support/FormatVariadic.h"
11 #include "llvm/Support/VersionTuple.h"
12 #include "gtest/gtest.h"
18 TEST(TripleTest
, BasicParsing
) {
22 EXPECT_EQ("", T
.getArchName().str());
23 EXPECT_EQ("", T
.getVendorName().str());
24 EXPECT_EQ("", T
.getOSName().str());
25 EXPECT_EQ("", T
.getEnvironmentName().str());
28 EXPECT_EQ("", T
.getArchName().str());
29 EXPECT_EQ("", T
.getVendorName().str());
30 EXPECT_EQ("", T
.getOSName().str());
31 EXPECT_EQ("", T
.getEnvironmentName().str());
34 EXPECT_EQ("", T
.getArchName().str());
35 EXPECT_EQ("", T
.getVendorName().str());
36 EXPECT_EQ("", T
.getOSName().str());
37 EXPECT_EQ("", T
.getEnvironmentName().str());
40 EXPECT_EQ("", T
.getArchName().str());
41 EXPECT_EQ("", T
.getVendorName().str());
42 EXPECT_EQ("", T
.getOSName().str());
43 EXPECT_EQ("", T
.getEnvironmentName().str());
46 EXPECT_EQ("", T
.getArchName().str());
47 EXPECT_EQ("", T
.getVendorName().str());
48 EXPECT_EQ("", T
.getOSName().str());
49 EXPECT_EQ("-", T
.getEnvironmentName().str());
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());
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());
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
) {
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());
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());
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());
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());
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
);
1370 static std::string
Join(StringRef A
, StringRef B
, StringRef C
, StringRef D
) {
1371 std::string Str
= std::string(A
);
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
));
1425 Triple::normalize("a-b-c", Triple::CanonicalForm::THREE_IDENT
));
1427 Triple::normalize("a-b-c-d", Triple::CanonicalForm::THREE_IDENT
));
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
));
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
));
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};
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};
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
;
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};
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};
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
)
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};
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};
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};
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
) {
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
) {
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
) {
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
) {
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());
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
) {
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
) {
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
) {
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"));
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
) {
2658 Triple T
= Triple("arm");
2659 EXPECT_EQ(Triple::arm
, T
.getArch());
2662 Triple T
= Triple("armeb");
2663 EXPECT_EQ(Triple::armeb
, T
.getArch());
2667 Triple T
= Triple("thumb");
2668 EXPECT_EQ(Triple::thumb
, T
.getArch());
2671 Triple T
= Triple("thumbeb");
2672 EXPECT_EQ(Triple::thumbeb
, T
.getArch());
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());
2703 T
.setArch(Triple::aarch64
, Triple::AArch64SubArch_arm64ec
);
2704 EXPECT_EQ("arm64ec", T
.getArchName());
2708 TEST(TripleTest
, 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());
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
) {
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());
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
) {
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