xref: /llvm-project/llvm/unittests/TargetParser/TripleTest.cpp (revision ebef44067bd0a2cd776b8baea39cffa7f602ce7b)
1f09cf34dSArchibald Elliott //===----------- Triple.cpp - Triple unit tests ---------------------------===//
2f09cf34dSArchibald Elliott //
3f09cf34dSArchibald Elliott // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f09cf34dSArchibald Elliott // See https://llvm.org/LICENSE.txt for license information.
5f09cf34dSArchibald Elliott // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f09cf34dSArchibald Elliott //
7f09cf34dSArchibald Elliott //===----------------------------------------------------------------------===//
8f09cf34dSArchibald Elliott 
9f09cf34dSArchibald Elliott #include "llvm/TargetParser/Triple.h"
10a829ebadSMartin Storsjö #include "llvm/Support/FormatVariadic.h"
11f09cf34dSArchibald Elliott #include "llvm/Support/VersionTuple.h"
12f09cf34dSArchibald Elliott #include "gtest/gtest.h"
13f09cf34dSArchibald Elliott 
14f09cf34dSArchibald Elliott using namespace llvm;
15f09cf34dSArchibald Elliott 
16f09cf34dSArchibald Elliott namespace {
17f09cf34dSArchibald Elliott 
18f09cf34dSArchibald Elliott TEST(TripleTest, BasicParsing) {
19f09cf34dSArchibald Elliott   Triple T;
20f09cf34dSArchibald Elliott 
21f09cf34dSArchibald Elliott   T = Triple("");
22f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getArchName().str());
23f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
24f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
25f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
26f09cf34dSArchibald Elliott 
27f09cf34dSArchibald Elliott   T = Triple("-");
28f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getArchName().str());
29f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
30f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
31f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
32f09cf34dSArchibald Elliott 
33f09cf34dSArchibald Elliott   T = Triple("--");
34f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getArchName().str());
35f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
36f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
37f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
38f09cf34dSArchibald Elliott 
39f09cf34dSArchibald Elliott   T = Triple("---");
40f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getArchName().str());
41f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
42f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
43f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
44f09cf34dSArchibald Elliott 
45f09cf34dSArchibald Elliott   T = Triple("----");
46f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getArchName().str());
47f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
48f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
49f09cf34dSArchibald Elliott   EXPECT_EQ("-", T.getEnvironmentName().str());
50f09cf34dSArchibald Elliott 
51f09cf34dSArchibald Elliott   T = Triple("a");
52f09cf34dSArchibald Elliott   EXPECT_EQ("a", T.getArchName().str());
53f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getVendorName().str());
54f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
55f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
56f09cf34dSArchibald Elliott 
57f09cf34dSArchibald Elliott   T = Triple("a-b");
58f09cf34dSArchibald Elliott   EXPECT_EQ("a", T.getArchName().str());
59f09cf34dSArchibald Elliott   EXPECT_EQ("b", T.getVendorName().str());
60f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getOSName().str());
61f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
62f09cf34dSArchibald Elliott 
63f09cf34dSArchibald Elliott   T = Triple("a-b-c");
64f09cf34dSArchibald Elliott   EXPECT_EQ("a", T.getArchName().str());
65f09cf34dSArchibald Elliott   EXPECT_EQ("b", T.getVendorName().str());
66f09cf34dSArchibald Elliott   EXPECT_EQ("c", T.getOSName().str());
67f09cf34dSArchibald Elliott   EXPECT_EQ("", T.getEnvironmentName().str());
68f09cf34dSArchibald Elliott 
69f09cf34dSArchibald Elliott   T = Triple("a-b-c-d");
70f09cf34dSArchibald Elliott   EXPECT_EQ("a", T.getArchName().str());
71f09cf34dSArchibald Elliott   EXPECT_EQ("b", T.getVendorName().str());
72f09cf34dSArchibald Elliott   EXPECT_EQ("c", T.getOSName().str());
73f09cf34dSArchibald Elliott   EXPECT_EQ("d", T.getEnvironmentName().str());
74f09cf34dSArchibald Elliott }
75f09cf34dSArchibald Elliott 
76f09cf34dSArchibald Elliott TEST(TripleTest, ParsedIDs) {
77f09cf34dSArchibald Elliott   Triple T;
78f09cf34dSArchibald Elliott 
79f09cf34dSArchibald Elliott   T = Triple("i386-apple-darwin");
80f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
81f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Apple, T.getVendor());
82f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Darwin, T.getOS());
83f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
84f09cf34dSArchibald Elliott 
85f09cf34dSArchibald Elliott   T = Triple("i386-pc-elfiamcu");
86f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
87f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
88f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
89f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
90f09cf34dSArchibald Elliott 
91f09cf34dSArchibald Elliott   T = Triple("i386-pc-hurd-gnu");
92f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
93f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
94f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Hurd, T.getOS());
95f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
96f09cf34dSArchibald Elliott 
97387b37afSMichał Górny   T = Triple("i686-pc-linux-gnu");
98387b37afSMichał Górny   EXPECT_EQ(Triple::x86, T.getArch());
99387b37afSMichał Górny   EXPECT_EQ(Triple::PC, T.getVendor());
100387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
101387b37afSMichał Górny   EXPECT_EQ(Triple::GNU, T.getEnvironment());
102387b37afSMichał Górny   EXPECT_FALSE(T.isTime64ABI());
103387b37afSMichał Górny 
104f09cf34dSArchibald Elliott   T = Triple("x86_64-pc-linux-gnu");
105f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
106f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
107f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
108f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
109f09cf34dSArchibald Elliott 
110f09cf34dSArchibald Elliott   T = Triple("x86_64-pc-linux-musl");
111f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
112f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
113f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
114f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Musl, T.getEnvironment());
115f09cf34dSArchibald Elliott 
116f09cf34dSArchibald Elliott   T = Triple("x86_64-pc-linux-muslx32");
117f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
118f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
119f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
120f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MuslX32, T.getEnvironment());
121f09cf34dSArchibald Elliott 
1224fffb040SSamuel Thibault   T = Triple("x86_64-pc-hurd-gnu");
1234fffb040SSamuel Thibault   EXPECT_EQ(Triple::x86_64, T.getArch());
1244fffb040SSamuel Thibault   EXPECT_EQ(Triple::PC, T.getVendor());
1254fffb040SSamuel Thibault   EXPECT_EQ(Triple::Hurd, T.getOS());
1264fffb040SSamuel Thibault   EXPECT_EQ(Triple::GNU, T.getEnvironment());
1274fffb040SSamuel Thibault 
128f09cf34dSArchibald Elliott   T = Triple("arm-unknown-linux-android16");
129f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
130f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
131f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
132f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Android, T.getEnvironment());
133f09cf34dSArchibald Elliott 
134f09cf34dSArchibald Elliott   T = Triple("aarch64-unknown-linux-android21");
135f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.getArch());
136f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
137f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
138f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Android, T.getEnvironment());
139f09cf34dSArchibald Elliott 
140f09cf34dSArchibald Elliott   // PS4 has two spellings for the vendor.
141f09cf34dSArchibald Elliott   T = Triple("x86_64-scei-ps4");
142f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
143f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SCEI, T.getVendor());
144f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PS4, T.getOS());
145f09cf34dSArchibald Elliott 
146f09cf34dSArchibald Elliott   T = Triple("x86_64-sie-ps4");
147f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
148f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SCEI, T.getVendor());
149f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PS4, T.getOS());
150f09cf34dSArchibald Elliott 
151f09cf34dSArchibald Elliott   T = Triple("x86_64-sie-ps5");
152f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
153f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SCEI, T.getVendor());
154f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PS5, T.getOS());
155f09cf34dSArchibald Elliott 
156f09cf34dSArchibald Elliott   T = Triple("powerpc-ibm-aix");
157f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.getArch());
158f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::IBM, T.getVendor());
159f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AIX, T.getOS());
160f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
161f09cf34dSArchibald Elliott 
162f09cf34dSArchibald Elliott   T = Triple("powerpc64-ibm-aix");
163f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64, T.getArch());
164f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::IBM, T.getVendor());
165f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AIX, T.getOS());
166f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
167f09cf34dSArchibald Elliott 
168f09cf34dSArchibald Elliott   T = Triple("powerpc-dunno-notsure");
169f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.getArch());
170f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
171f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
172f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
173f09cf34dSArchibald Elliott 
174f09cf34dSArchibald Elliott   T = Triple("powerpcspe-unknown-freebsd");
175f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.getArch());
176f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch());
177f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
178f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::FreeBSD, T.getOS());
179f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
180f09cf34dSArchibald Elliott 
181f09cf34dSArchibald Elliott   T = Triple("s390x-ibm-zos");
182f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::systemz, T.getArch());
183f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::IBM, T.getVendor());
184f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ZOS, T.getOS());
185f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
186f09cf34dSArchibald Elliott 
187f09cf34dSArchibald Elliott   T = Triple("systemz-ibm-zos");
188f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::systemz, T.getArch());
189f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::IBM, T.getVendor());
190f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ZOS, T.getOS());
191f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
192f09cf34dSArchibald Elliott 
193f09cf34dSArchibald Elliott   T = Triple("arm-none-none-eabi");
194f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
195f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
196f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
197f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::EABI, T.getEnvironment());
198387b37afSMichał Górny   EXPECT_FALSE(T.isHardFloatABI());
199387b37afSMichał Górny 
200387b37afSMichał Górny   T = Triple("arm-none-none-eabihf");
201387b37afSMichał Górny   EXPECT_EQ(Triple::arm, T.getArch());
202387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
203387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownOS, T.getOS());
204387b37afSMichał Górny   EXPECT_EQ(Triple::EABIHF, T.getEnvironment());
205387b37afSMichał Górny   EXPECT_TRUE(T.isHardFloatABI());
206f09cf34dSArchibald Elliott 
207f09cf34dSArchibald Elliott   T = Triple("arm-none-linux-musleabi");
208f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
209f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
210f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
211f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
212387b37afSMichał Górny   EXPECT_FALSE(T.isHardFloatABI());
213387b37afSMichał Górny 
214387b37afSMichał Górny   T = Triple("arm-none-linux-musleabihf");
215387b37afSMichał Górny   EXPECT_EQ(Triple::arm, T.getArch());
216387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
217387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
218387b37afSMichał Górny   EXPECT_EQ(Triple::MuslEABIHF, T.getEnvironment());
219387b37afSMichał Górny   EXPECT_TRUE(T.isHardFloatABI());
220f09cf34dSArchibald Elliott 
221f09cf34dSArchibald Elliott   T = Triple("armv6hl-none-linux-gnueabi");
222f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
223f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
224f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
225f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
226387b37afSMichał Górny   EXPECT_FALSE(T.isTime64ABI());
227387b37afSMichał Górny   EXPECT_FALSE(T.isHardFloatABI());
228f09cf34dSArchibald Elliott 
229f09cf34dSArchibald Elliott   T = Triple("armv7hl-none-linux-gnueabi");
230f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
231f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
232f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
233f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
234387b37afSMichał Górny   EXPECT_FALSE(T.isTime64ABI());
235387b37afSMichał Górny   EXPECT_FALSE(T.isHardFloatABI());
236387b37afSMichał Górny 
237387b37afSMichał Górny   T = Triple("armv7hl-none-linux-gnueabihf");
238387b37afSMichał Górny   EXPECT_EQ(Triple::arm, T.getArch());
239387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
240387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
241387b37afSMichał Górny   EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
242387b37afSMichał Górny   EXPECT_FALSE(T.isTime64ABI());
243387b37afSMichał Górny   EXPECT_TRUE(T.isHardFloatABI());
244f09cf34dSArchibald Elliott 
245f09cf34dSArchibald Elliott   T = Triple("amdil-unknown-unknown");
246f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil, T.getArch());
247f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
248f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
249f09cf34dSArchibald Elliott 
250f09cf34dSArchibald Elliott   T = Triple("amdil64-unknown-unknown");
251f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil64, T.getArch());
252f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
253f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
254f09cf34dSArchibald Elliott 
255f09cf34dSArchibald Elliott   T = Triple("hsail-unknown-unknown");
256f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail, T.getArch());
257f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
258f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
259f09cf34dSArchibald Elliott 
260f09cf34dSArchibald Elliott   T = Triple("hsail64-unknown-unknown");
261f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail64, T.getArch());
262f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
263f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
264f09cf34dSArchibald Elliott 
265f09cf34dSArchibald Elliott   T = Triple("sparcel-unknown-unknown");
266f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparcel, T.getArch());
267f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
268f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
269f09cf34dSArchibald Elliott 
270f09cf34dSArchibald Elliott   T = Triple("spir-unknown-unknown");
271f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir, T.getArch());
272f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
273f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
274f09cf34dSArchibald Elliott 
275f09cf34dSArchibald Elliott   T = Triple("spir64-unknown-unknown");
276f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir64, T.getArch());
277f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
278f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
279f09cf34dSArchibald Elliott 
280f09cf34dSArchibald Elliott   T = Triple("spirv32-unknown-unknown");
281f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
282f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
283f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
284f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
285f09cf34dSArchibald Elliott 
286f09cf34dSArchibald Elliott   T = Triple("spirv32v1.0-unknown-unknown");
287f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
288f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());
289f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
290f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
291f09cf34dSArchibald Elliott 
292f09cf34dSArchibald Elliott   T = Triple("spirv32v1.1-unknown-unknown");
293f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
294f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());
295f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
296f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
297f09cf34dSArchibald Elliott 
298f09cf34dSArchibald Elliott   T = Triple("spirv32v1.2-unknown-unknown");
299f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
300f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());
301f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
302f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
303f09cf34dSArchibald Elliott 
304f09cf34dSArchibald Elliott   T = Triple("spirv32v1.3-unknown-unknown");
305f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
306f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());
307f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
308f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
309f09cf34dSArchibald Elliott 
310f09cf34dSArchibald Elliott   T = Triple("spirv32v1.4-unknown-unknown");
311f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
312f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());
313f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
314f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
315f09cf34dSArchibald Elliott 
316f09cf34dSArchibald Elliott   T = Triple("spirv32v1.5-unknown-unknown");
317f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.getArch());
318f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
319f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
320f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
321f09cf34dSArchibald Elliott 
322f09cf34dSArchibald Elliott   T = Triple("spirv64-unknown-unknown");
323f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
324f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
325f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
326f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
327f09cf34dSArchibald Elliott 
328f09cf34dSArchibald Elliott   T = Triple("spirv64v1.0-unknown-unknown");
329f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
330f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());
331f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
332f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
333f09cf34dSArchibald Elliott 
334f09cf34dSArchibald Elliott   T = Triple("spirv64v1.1-unknown-unknown");
335f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
336f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());
337f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
338f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
339f09cf34dSArchibald Elliott 
340f09cf34dSArchibald Elliott   T = Triple("spirv64v1.2-unknown-unknown");
341f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
342f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());
343f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
344f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
345f09cf34dSArchibald Elliott 
346f09cf34dSArchibald Elliott   T = Triple("spirv64v1.3-unknown-unknown");
347f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
348f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());
349f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
350f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
351f09cf34dSArchibald Elliott 
352f09cf34dSArchibald Elliott   T = Triple("spirv64v1.4-unknown-unknown");
353f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
354f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());
355f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
356f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
357f09cf34dSArchibald Elliott 
358f09cf34dSArchibald Elliott   T = Triple("spirv64v1.5-unknown-unknown");
359f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.getArch());
360f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
361f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
362f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
363f09cf34dSArchibald Elliott 
364c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-pixel");
36553b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
36653b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
36753b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
368c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
369c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
37053b6a169SNathan Gauër   EXPECT_EQ(Triple::Pixel, T.getEnvironment());
37153b6a169SNathan Gauër 
372c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-vertex");
37353b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
37453b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
37553b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
376c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
377c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
37853b6a169SNathan Gauër   EXPECT_EQ(Triple::Vertex, T.getEnvironment());
37953b6a169SNathan Gauër 
380c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-geometry");
38153b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
38253b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
38353b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
384c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
385c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
38653b6a169SNathan Gauër   EXPECT_EQ(Triple::Geometry, T.getEnvironment());
38753b6a169SNathan Gauër 
388c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-library");
38953b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
39053b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
39153b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
392c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
393c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
39453b6a169SNathan Gauër   EXPECT_EQ(Triple::Library, T.getEnvironment());
39553b6a169SNathan Gauër 
396c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-raygeneration");
39753b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
39853b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
39953b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
400c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
401c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
40253b6a169SNathan Gauër   EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
40353b6a169SNathan Gauër 
404c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-intersection");
40553b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
40653b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
40753b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
408c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
409c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
41053b6a169SNathan Gauër   EXPECT_EQ(Triple::Intersection, T.getEnvironment());
41153b6a169SNathan Gauër 
412c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-anyhit");
41353b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
41453b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
41553b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
416c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
417c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
41853b6a169SNathan Gauër   EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
41953b6a169SNathan Gauër 
420c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-closesthit");
42153b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
42253b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
42353b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
424c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
425c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
42653b6a169SNathan Gauër   EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
42753b6a169SNathan Gauër 
428c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-miss");
42953b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
43053b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
43153b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
432c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
433c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
43453b6a169SNathan Gauër   EXPECT_EQ(Triple::Miss, T.getEnvironment());
43553b6a169SNathan Gauër 
436c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-callable");
43753b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
43853b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
43953b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
440c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
441c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
44253b6a169SNathan Gauër   EXPECT_EQ(Triple::Callable, T.getEnvironment());
44353b6a169SNathan Gauër 
444c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-mesh");
44553b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
44653b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
44753b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
448c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
449c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
45053b6a169SNathan Gauër   EXPECT_EQ(Triple::Mesh, T.getEnvironment());
45153b6a169SNathan Gauër 
452c21f48e5SNatalie Chouinard   T = Triple("spirv-unknown-vulkan-amplification");
45353b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
45453b6a169SNathan Gauër   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
45553b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
456c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
457c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
45853b6a169SNathan Gauër   EXPECT_EQ(Triple::Amplification, T.getEnvironment());
45953b6a169SNathan Gauër 
460c21f48e5SNatalie Chouinard   T = Triple("spirv1.5-unknown-vulkan1.2-compute");
46153b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv, T.getArch());
46253b6a169SNathan Gauër   EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());
46353b6a169SNathan Gauër   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
464c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
465c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());
466c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Compute, T.getEnvironment());
467c21f48e5SNatalie Chouinard 
468c21f48e5SNatalie Chouinard   T = Triple("spirv1.6-unknown-vulkan1.3-compute");
469c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::spirv, T.getArch());
470c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::SPIRVSubArch_v16, T.getSubArch());
471c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
472c21f48e5SNatalie Chouinard   EXPECT_EQ(Triple::Vulkan, T.getOS());
473c21f48e5SNatalie Chouinard   EXPECT_EQ(VersionTuple(1, 3), T.getVulkanVersion());
47453b6a169SNathan Gauër   EXPECT_EQ(Triple::Compute, T.getEnvironment());
47553b6a169SNathan Gauër 
476665af09aSXiang Li   T = Triple("dxilv1.0--shadermodel6.0-pixel");
477665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
478665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());
479665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
480665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
481665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 0), T.getDXILVersion());
482665af09aSXiang Li   EXPECT_EQ(Triple::Pixel, T.getEnvironment());
483665af09aSXiang Li 
484665af09aSXiang Li   T = Triple("dxilv1.1--shadermodel6.1-vertex");
485665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
486665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());
487665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
488665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
489665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 1), T.getDXILVersion());
490665af09aSXiang Li   EXPECT_EQ(Triple::Vertex, T.getEnvironment());
491665af09aSXiang Li 
492665af09aSXiang Li   T = Triple("dxilv1.2--shadermodel6.2-geometry");
493665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
494665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());
495665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
496665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
497665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 2), T.getDXILVersion());
498665af09aSXiang Li   EXPECT_EQ(Triple::Geometry, T.getEnvironment());
499665af09aSXiang Li 
500665af09aSXiang Li   T = Triple("dxilv1.3--shadermodel6.3-library");
501665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
502665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());
503665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
504665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
505665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 3), T.getDXILVersion());
506665af09aSXiang Li   EXPECT_EQ(Triple::Library, T.getEnvironment());
507665af09aSXiang Li 
508665af09aSXiang Li   T = Triple("dxilv1.4--shadermodel6.4-hull");
509665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
510665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());
511665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
512665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
513665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 4), T.getDXILVersion());
514665af09aSXiang Li   EXPECT_EQ(Triple::Hull, T.getEnvironment());
515665af09aSXiang Li 
516665af09aSXiang Li   T = Triple("dxilv1.5--shadermodel6.5-domain");
517665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
518665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());
519665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
520665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
521665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 5), T.getDXILVersion());
522665af09aSXiang Li   EXPECT_EQ(Triple::Domain, T.getEnvironment());
523665af09aSXiang Li 
524665af09aSXiang Li   T = Triple("dxilv1.6--shadermodel6.6-compute");
525665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
526665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());
527665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
528665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
529665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 6), T.getDXILVersion());
530665af09aSXiang Li   EXPECT_EQ(Triple::Compute, T.getEnvironment());
531665af09aSXiang Li 
532665af09aSXiang Li   T = Triple("dxilv1.7-unknown-shadermodel6.7-mesh");
533665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
534665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());
535665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
536665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
537665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 7), T.getDXILVersion());
538665af09aSXiang Li   EXPECT_EQ(Triple::Mesh, T.getEnvironment());
539665af09aSXiang Li 
540665af09aSXiang Li   T = Triple("dxilv1.8-unknown-shadermodel6.8-amplification");
541665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
542665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
543665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
544665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
545665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());
546665af09aSXiang Li   EXPECT_EQ(Triple::Amplification, T.getEnvironment());
547665af09aSXiang Li 
548665af09aSXiang Li   T = Triple("dxilv1.8-unknown-shadermodel6.15-library");
549665af09aSXiang Li   EXPECT_EQ(Triple::dxil, T.getArch());
550665af09aSXiang Li   EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
551665af09aSXiang Li   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
552665af09aSXiang Li   EXPECT_EQ(Triple::ShaderModel, T.getOS());
553665af09aSXiang Li   EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());
554665af09aSXiang Li 
555f09cf34dSArchibald Elliott   T = Triple("x86_64-unknown-fuchsia");
556f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
557f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
558f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Fuchsia, T.getOS());
559f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
560f09cf34dSArchibald Elliott 
561f09cf34dSArchibald Elliott   T = Triple("x86_64-unknown-hermit");
562f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
563f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
564f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::HermitCore, T.getOS());
565f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
566f09cf34dSArchibald Elliott 
56730198bd7Sprabhukr   T = Triple("x86_64-unknown-uefi");
56830198bd7Sprabhukr   EXPECT_EQ(Triple::x86_64, T.getArch());
56930198bd7Sprabhukr   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
57030198bd7Sprabhukr   EXPECT_EQ(Triple::UEFI, T.getOS());
57130198bd7Sprabhukr   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
572720e3bacSprabhukr   EXPECT_EQ(Triple::COFF, T.getObjectFormat());
57330198bd7Sprabhukr 
574f09cf34dSArchibald Elliott   T = Triple("wasm32-unknown-unknown");
575f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm32, T.getArch());
576f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
577f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
578f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
579f09cf34dSArchibald Elliott 
580f09cf34dSArchibald Elliott   T = Triple("wasm32-unknown-wasi");
581f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm32, T.getArch());
582f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
583f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::WASI, T.getOS());
584f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
585f09cf34dSArchibald Elliott 
586f09cf34dSArchibald Elliott   T = Triple("wasm64-unknown-unknown");
587f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm64, T.getArch());
588f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
589f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
590f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
591f09cf34dSArchibald Elliott 
592f09cf34dSArchibald Elliott   T = Triple("wasm64-unknown-wasi");
593f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm64, T.getArch());
594f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
595f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::WASI, T.getOS());
596f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
597f09cf34dSArchibald Elliott 
598f09cf34dSArchibald Elliott   T = Triple("avr-unknown-unknown");
599f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::avr, T.getArch());
600f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
601f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
602f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
603f09cf34dSArchibald Elliott 
604f09cf34dSArchibald Elliott   T = Triple("avr");
605f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::avr, T.getArch());
606f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
607f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
608f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
609f09cf34dSArchibald Elliott 
610f09cf34dSArchibald Elliott   T = Triple("lanai-unknown-unknown");
611f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::lanai, T.getArch());
612f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
613f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
614f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
615f09cf34dSArchibald Elliott 
616f09cf34dSArchibald Elliott   T = Triple("lanai");
617f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::lanai, T.getArch());
618f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
619f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
620f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
621f09cf34dSArchibald Elliott 
622f09cf34dSArchibald Elliott   T = Triple("amdgcn-mesa-mesa3d");
623f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdgcn, T.getArch());
624f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Mesa, T.getVendor());
625f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Mesa3D, T.getOS());
626f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
627f09cf34dSArchibald Elliott 
628f09cf34dSArchibald Elliott   T = Triple("amdgcn-amd-amdhsa");
629f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdgcn, T.getArch());
630f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AMD, T.getVendor());
631f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AMDHSA, T.getOS());
632f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
633f09cf34dSArchibald Elliott 
634f09cf34dSArchibald Elliott   T = Triple("amdgcn-amd-amdpal");
635f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdgcn, T.getArch());
636f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AMD, T.getVendor());
637f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AMDPAL, T.getOS());
638f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
639f09cf34dSArchibald Elliott 
640f09cf34dSArchibald Elliott   T = Triple("ve-unknown-linux");
641f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ve, T.getArch());
642f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
643f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
644f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
645f09cf34dSArchibald Elliott 
646f09cf34dSArchibald Elliott   T = Triple("csky-unknown-unknown");
647f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::csky, T.getArch());
648f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
649f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
650f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
651f09cf34dSArchibald Elliott 
652f09cf34dSArchibald Elliott   T = Triple("csky-unknown-linux");
653f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::csky, T.getArch());
654f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
655f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
656f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
657f09cf34dSArchibald Elliott 
658f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-unknown");
659f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
660f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
661f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
662f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
663f09cf34dSArchibald Elliott 
664f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-linux-gnu");
665f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
666f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
667f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
668f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
669f09cf34dSArchibald Elliott 
670f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-linux-gnuf32");
671f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
672f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
673f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
674f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUF32, T.getEnvironment());
675f09cf34dSArchibald Elliott 
676f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-linux-gnuf64");
677f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
678f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
679f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
680f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUF64, T.getEnvironment());
681f09cf34dSArchibald Elliott 
682f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-linux-gnusf");
683f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
684f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
685f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
686f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUSF, T.getEnvironment());
687f09cf34dSArchibald Elliott 
688f09cf34dSArchibald Elliott   T = Triple("loongarch32-unknown-linux-musl");
689f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getArch());
690f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
691f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
692f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Musl, T.getEnvironment());
693f09cf34dSArchibald Elliott 
69472a21805SAlex Rønne Petersen   T = Triple("loongarch32-unknown-linux-muslf32");
69572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::loongarch32, T.getArch());
69672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
69772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
69872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslF32, T.getEnvironment());
69972a21805SAlex Rønne Petersen 
70072a21805SAlex Rønne Petersen   T = Triple("loongarch32-unknown-linux-muslsf");
70172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::loongarch32, T.getArch());
70272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
70372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
70472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslSF, T.getEnvironment());
70572a21805SAlex Rønne Petersen 
706f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux");
707f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
708f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
709f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
710f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
711f09cf34dSArchibald Elliott 
712f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux-gnu");
713f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
714f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
715f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
716f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
717f09cf34dSArchibald Elliott 
718f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux-gnuf32");
719f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
720f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
721f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
722f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUF32, T.getEnvironment());
723f09cf34dSArchibald Elliott 
724f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux-gnuf64");
725f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
726f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
727f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
728f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUF64, T.getEnvironment());
729f09cf34dSArchibald Elliott 
730f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux-gnusf");
731f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
732f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
733f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
734f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUSF, T.getEnvironment());
735f09cf34dSArchibald Elliott 
736f09cf34dSArchibald Elliott   T = Triple("loongarch64-unknown-linux-musl");
737f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getArch());
738f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
739f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
740f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Musl, T.getEnvironment());
741f09cf34dSArchibald Elliott 
74272a21805SAlex Rønne Petersen   T = Triple("loongarch64-unknown-linux-muslf32");
74372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::loongarch64, T.getArch());
74472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
74572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
74672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslF32, T.getEnvironment());
74772a21805SAlex Rønne Petersen 
74872a21805SAlex Rønne Petersen   T = Triple("loongarch64-unknown-linux-muslsf");
74972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::loongarch64, T.getArch());
75072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
75172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
75272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslSF, T.getEnvironment());
75372a21805SAlex Rønne Petersen 
754f09cf34dSArchibald Elliott   T = Triple("riscv32-unknown-unknown");
755f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv32, T.getArch());
756f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
757f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
758f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
759f09cf34dSArchibald Elliott 
760f09cf34dSArchibald Elliott   T = Triple("riscv64-unknown-linux");
761f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv64, T.getArch());
762f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
763f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
764f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
765f09cf34dSArchibald Elliott 
766f09cf34dSArchibald Elliott   T = Triple("riscv64-unknown-freebsd");
767f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv64, T.getArch());
768f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
769f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::FreeBSD, T.getOS());
770f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
771f09cf34dSArchibald Elliott 
772f09cf34dSArchibald Elliott   T = Triple("riscv64-suse-linux");
773f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv64, T.getArch());
774f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SUSE, T.getVendor());
775f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
776f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
777f09cf34dSArchibald Elliott 
778f09cf34dSArchibald Elliott   T = Triple("armv7hl-suse-linux-gnueabi");
779f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
780f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SUSE, T.getVendor());
781f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
782f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
783f09cf34dSArchibald Elliott 
784f09cf34dSArchibald Elliott   T = Triple("i586-pc-haiku");
785f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
786f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
787f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Haiku, T.getOS());
788f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
789f09cf34dSArchibald Elliott 
790f09cf34dSArchibald Elliott   T = Triple("x86_64-unknown-haiku");
791f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.getArch());
792f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
793f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Haiku, T.getOS());
794f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
795f09cf34dSArchibald Elliott 
796f09cf34dSArchibald Elliott   T = Triple("mips-mti-linux-gnu");
797f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
798f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
799f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
800f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
801f09cf34dSArchibald Elliott 
802f09cf34dSArchibald Elliott   T = Triple("mipsel-img-linux-gnu");
803f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
804f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
805f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
806f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
807f09cf34dSArchibald Elliott 
808f09cf34dSArchibald Elliott   T = Triple("mips64-mti-linux-gnu");
809f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
810f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());
811f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
812f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
813f09cf34dSArchibald Elliott 
814f09cf34dSArchibald Elliott   T = Triple("mips64el-img-linux-gnu");
815f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
816f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
817f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
818f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
819f09cf34dSArchibald Elliott 
820f09cf34dSArchibald Elliott   T = Triple("mips64el-img-linux-gnuabin32");
821f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
822f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());
823f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
824f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
825f09cf34dSArchibald Elliott 
826f09cf34dSArchibald Elliott   T = Triple("mips64el-unknown-linux-gnuabi64");
827f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
828f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
829f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
830f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
831f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
832f09cf34dSArchibald Elliott   T = Triple("mips64el");
833f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
834f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
835f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
836f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
837f09cf34dSArchibald Elliott 
838f09cf34dSArchibald Elliott   T = Triple("mips64-unknown-linux-gnuabi64");
839f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
840f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
841f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
842f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
843f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
844f09cf34dSArchibald Elliott   T = Triple("mips64");
845f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
846f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
847f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
848f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
849f09cf34dSArchibald Elliott 
850f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6el-unknown-linux-gnuabi64");
851f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
852f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
853f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
854f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
855f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
856f09cf34dSArchibald Elliott   T = Triple("mips64r6el");
857f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
858f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
859f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
860f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
861f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6el");
862f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
863f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
864f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
865f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
866f09cf34dSArchibald Elliott 
867f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6-unknown-linux-gnuabi64");
868f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
869f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
870f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
871f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
872f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
873f09cf34dSArchibald Elliott   T = Triple("mips64r6");
874f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
875f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
876f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
877f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
878f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6");
879f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
880f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
881f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());
882f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
883f09cf34dSArchibald Elliott 
884f09cf34dSArchibald Elliott   T = Triple("mips64el-unknown-linux-gnuabin32");
885f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
886f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
887f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
888f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
889f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
890f09cf34dSArchibald Elliott   T = Triple("mipsn32el");
891f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
892f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
893f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
894f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
895f09cf34dSArchibald Elliott 
896f09cf34dSArchibald Elliott   T = Triple("mips64-unknown-linux-gnuabin32");
897f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
898f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
899f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
900f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
901f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
902f09cf34dSArchibald Elliott   T = Triple("mipsn32");
903f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
904f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
905f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
906f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
907f09cf34dSArchibald Elliott 
908f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6el-unknown-linux-gnuabin32");
909f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
910f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
911f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
912f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
913f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
914f09cf34dSArchibald Elliott   T = Triple("mipsn32r6el");
915f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getArch());
916f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
917f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
918f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
919f09cf34dSArchibald Elliott 
920f09cf34dSArchibald Elliott   T = Triple("mipsisa64r6-unknown-linux-gnuabin32");
921f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
922f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
923f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
924f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
925f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
926f09cf34dSArchibald Elliott   T = Triple("mipsn32r6");
927f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getArch());
928f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
929f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());
930f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
931f09cf34dSArchibald Elliott 
932f09cf34dSArchibald Elliott   T = Triple("mipsel-unknown-linux-gnu");
933f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
934f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
935f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
936f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
937f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
938f09cf34dSArchibald Elliott   T = Triple("mipsel");
939f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
940f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
941f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
942f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
943f09cf34dSArchibald Elliott 
944f09cf34dSArchibald Elliott   T = Triple("mips-unknown-linux-gnu");
945f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
946f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
947f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
948f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
949f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
950f09cf34dSArchibald Elliott   T = Triple("mips");
951f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
952f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
953f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
954f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
955f09cf34dSArchibald Elliott 
956f09cf34dSArchibald Elliott   T = Triple("mipsisa32r6el-unknown-linux-gnu");
957f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
958f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
959f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
960f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
961f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
962f09cf34dSArchibald Elliott   T = Triple("mipsr6el");
963f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
964f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
965f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
966f09cf34dSArchibald Elliott   T = Triple("mipsisa32r6el");
967f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getArch());
968f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
969f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
970f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
971f09cf34dSArchibald Elliott 
972f09cf34dSArchibald Elliott   T = Triple("mipsisa32r6-unknown-linux-gnu");
973f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
974f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
975f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
976f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
977f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
978f09cf34dSArchibald Elliott   T = Triple("mipsr6");
979f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
980f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
981f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
982f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
983f09cf34dSArchibald Elliott   T = Triple("mipsisa32r6");
984f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getArch());
985f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
986f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNU, T.getEnvironment());
987f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
988f09cf34dSArchibald Elliott 
98972a21805SAlex Rønne Petersen   T = Triple("mips64el-unknown-linux-muslabi64");
99072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64el, T.getArch());
99172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
99272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
99372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
99472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
99572a21805SAlex Rønne Petersen 
99672a21805SAlex Rønne Petersen   T = Triple("mips64-unknown-linux-muslabi64");
99772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64, T.getArch());
99872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
99972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
100072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
100172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
100272a21805SAlex Rønne Petersen 
100372a21805SAlex Rønne Petersen   T = Triple("mipsisa64r6el-unknown-linux-muslabi64");
100472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64el, T.getArch());
100572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
100672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
100772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
100872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
100972a21805SAlex Rønne Petersen 
101072a21805SAlex Rønne Petersen   T = Triple("mipsisa64r6-unknown-linux-muslabi64");
101172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64, T.getArch());
101272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
101372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
101472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());
101572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
101672a21805SAlex Rønne Petersen 
101772a21805SAlex Rønne Petersen   T = Triple("mips64el-unknown-linux-muslabin32");
101872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64el, T.getArch());
101972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
102072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
102172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
102272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
102372a21805SAlex Rønne Petersen 
102472a21805SAlex Rønne Petersen   T = Triple("mips64-unknown-linux-muslabin32");
102572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64, T.getArch());
102672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
102772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
102872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
102972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
103072a21805SAlex Rønne Petersen 
103172a21805SAlex Rønne Petersen   T = Triple("mipsisa64r6el-unknown-linux-muslabin32");
103272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64el, T.getArch());
103372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
103472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
103572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
103672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
103772a21805SAlex Rønne Petersen 
103872a21805SAlex Rønne Petersen   T = Triple("mipsisa64r6-unknown-linux-muslabin32");
103972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips64, T.getArch());
104072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
104172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
104272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());
104372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
104472a21805SAlex Rønne Petersen 
104572a21805SAlex Rønne Petersen   T = Triple("mipsel-unknown-linux-musl");
104672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mipsel, T.getArch());
104772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
104872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
104972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Musl, T.getEnvironment());
105072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
105172a21805SAlex Rønne Petersen 
105272a21805SAlex Rønne Petersen   T = Triple("mips-unknown-linux-musl");
105372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips, T.getArch());
105472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
105572a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
105672a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Musl, T.getEnvironment());
105772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
105872a21805SAlex Rønne Petersen 
105972a21805SAlex Rønne Petersen   T = Triple("mipsisa32r6el-unknown-linux-musl");
106072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mipsel, T.getArch());
106172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
106272a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
106372a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Musl, T.getEnvironment());
106472a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
106572a21805SAlex Rønne Petersen 
106672a21805SAlex Rønne Petersen   T = Triple("mipsisa32r6-unknown-linux-musl");
106772a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::mips, T.getArch());
106872a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
106972a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Linux, T.getOS());
107072a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::Musl, T.getEnvironment());
107172a21805SAlex Rønne Petersen   EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());
107272a21805SAlex Rønne Petersen 
1073f09cf34dSArchibald Elliott   T = Triple("arm-oe-linux-gnueabi");
1074f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
1075f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
1076f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
1077f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
1078f09cf34dSArchibald Elliott 
1079f09cf34dSArchibald Elliott   T = Triple("aarch64-oe-linux");
1080f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.getArch());
1081f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());
1082f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
1083f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1084f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1085f09cf34dSArchibald Elliott 
1086f09cf34dSArchibald Elliott   T = Triple("arm64_32-apple-ios");
1087f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_32, T.getArch());
1088f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::IOS, T.getOS());
1089f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1090f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1091f09cf34dSArchibald Elliott 
1092f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-pixel");
1093f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1094a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1095f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1096f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1097f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Pixel, T.getEnvironment());
1098f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1099f09cf34dSArchibald Elliott 
1100f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-vertex");
1101f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1102a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1103f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1104f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1105f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Vertex, T.getEnvironment());
1106f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1107f09cf34dSArchibald Elliott 
1108f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-geometry");
1109f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1110a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1111f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1112f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1113f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Geometry, T.getEnvironment());
1114f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1115f09cf34dSArchibald Elliott 
1116f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-hull");
1117f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1118a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1119f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1120f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1121f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Hull, T.getEnvironment());
1122f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1123f09cf34dSArchibald Elliott 
1124f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-domain");
1125f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1126a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1127f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1128f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1129f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Domain, T.getEnvironment());
1130f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1131f09cf34dSArchibald Elliott 
1132f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-compute");
1133f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1134a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1135f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1136f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1137f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Compute, T.getEnvironment());
1138f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1139f09cf34dSArchibald Elliott 
1140f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-library");
1141f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1142a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1143f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1144f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1145f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Library, T.getEnvironment());
1146f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1147f09cf34dSArchibald Elliott 
1148f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-raygeneration");
1149f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1150a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1151f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1152f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1153f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());
1154f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1155f09cf34dSArchibald Elliott 
1156f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-intersection");
1157f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1158a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1159f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1160f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1161f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Intersection, T.getEnvironment());
1162f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1163f09cf34dSArchibald Elliott 
1164f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-anyhit");
1165f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1166a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1167f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1168f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1169f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::AnyHit, T.getEnvironment());
1170f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1171f09cf34dSArchibald Elliott 
1172f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-closesthit");
1173f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1174a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1175f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1176f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1177f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());
1178f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1179f09cf34dSArchibald Elliott 
1180f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-miss");
1181f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1182a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1183f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1184f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1185f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Miss, T.getEnvironment());
1186f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1187f09cf34dSArchibald Elliott 
1188f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-callable");
1189f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1190a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1191f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1192f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1193f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Callable, T.getEnvironment());
1194f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1195f09cf34dSArchibald Elliott 
1196f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-mesh");
1197f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1198a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1199f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1200f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1201f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Mesh, T.getEnvironment());
1202f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1203f09cf34dSArchibald Elliott 
1204f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel-amplification");
1205f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
1206a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1207f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1208f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
1209f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Amplification, T.getEnvironment());
1210f09cf34dSArchibald Elliott   EXPECT_FALSE(T.supportsCOMDAT());
1211f09cf34dSArchibald Elliott 
1212a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.0-unknown-unknown");
1213a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1214a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());
1215a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1216a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1217a2face49SS. Bharadwaj Yadavalli 
1218a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.1-unknown-unknown");
1219a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1220a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());
1221a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1222a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1223a2face49SS. Bharadwaj Yadavalli 
1224a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.2-unknown-unknown");
1225a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1226a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());
1227a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1228a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1229a2face49SS. Bharadwaj Yadavalli 
1230a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.3-unknown-unknown");
1231a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1232a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());
1233a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1234a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1235a2face49SS. Bharadwaj Yadavalli 
1236a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.4-unknown-unknown");
1237a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1238a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());
1239a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1240a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1241a2face49SS. Bharadwaj Yadavalli 
1242a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.5-unknown-unknown");
1243a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1244a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());
1245a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1246a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1247a2face49SS. Bharadwaj Yadavalli 
1248a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.6-unknown-unknown");
1249a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1250a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());
1251a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1252a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1253a2face49SS. Bharadwaj Yadavalli 
1254a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.7-unknown-unknown");
1255a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1256a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());
1257a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1258a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1259a2face49SS. Bharadwaj Yadavalli 
1260a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.8-unknown-unknown");
1261a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1262a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());
1263a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1264a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1265a2face49SS. Bharadwaj Yadavalli 
1266a2face49SS. Bharadwaj Yadavalli   // Check specification of unknown SubArch results in
1267a2face49SS. Bharadwaj Yadavalli   // unknown architecture.
1268a2face49SS. Bharadwaj Yadavalli   T = Triple("dxilv1.999-unknown-unknown");
1269a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownArch, T.getArch());
1270a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1271a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1272a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1273a2face49SS. Bharadwaj Yadavalli 
1274a2face49SS. Bharadwaj Yadavalli   T = Triple("dxil-unknown-unknown");
1275a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::dxil, T.getArch());
1276a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::NoSubArch, T.getSubArch());
1277a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1278a2face49SS. Bharadwaj Yadavalli   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1279a2face49SS. Bharadwaj Yadavalli 
12808c618e8fSAndrei Safronov   T = Triple("xtensa");
12818c618e8fSAndrei Safronov   EXPECT_EQ(Triple::xtensa, T.getArch());
12828c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
12838c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownOS, T.getOS());
12848c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
12858c618e8fSAndrei Safronov 
12868c618e8fSAndrei Safronov   T = Triple("xtensa-unknown-unknown");
12878c618e8fSAndrei Safronov   EXPECT_EQ(Triple::xtensa, T.getArch());
12888c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
12898c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownOS, T.getOS());
12908c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
12918c618e8fSAndrei Safronov 
1292c417b7a6SPavel Kosov   T = Triple("arm-unknown-linux-ohos");
1293c417b7a6SPavel Kosov   EXPECT_EQ(Triple::arm, T.getArch());
1294c417b7a6SPavel Kosov   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1295c417b7a6SPavel Kosov   EXPECT_EQ(Triple::Linux, T.getOS());
1296c417b7a6SPavel Kosov   EXPECT_EQ(Triple::OpenHOS, T.getEnvironment());
1297c417b7a6SPavel Kosov 
1298c417b7a6SPavel Kosov   T = Triple("arm-unknown-liteos");
1299c417b7a6SPavel Kosov   EXPECT_EQ(Triple::arm, T.getArch());
1300c417b7a6SPavel Kosov   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1301c417b7a6SPavel Kosov   EXPECT_EQ(Triple::LiteOS, T.getOS());
1302c417b7a6SPavel Kosov   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1303c417b7a6SPavel Kosov 
13047ef6b21cSAndrew Kaster   T = Triple("x86_64-pc-serenity");
13057ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::x86_64, T.getArch());
13067ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::PC, T.getVendor());
13077ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::Serenity, T.getOS());
13087ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
13097ef6b21cSAndrew Kaster 
13107ef6b21cSAndrew Kaster   T = Triple("aarch64-pc-serenity");
13117ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::aarch64, T.getArch());
13127ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::PC, T.getVendor());
13137ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::Serenity, T.getOS());
13147ef6b21cSAndrew Kaster   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
13157ef6b21cSAndrew Kaster 
1316146fd7cdSDaniil Kovalev   T = Triple("aarch64-unknown-linux-pauthtest");
1317146fd7cdSDaniil Kovalev   EXPECT_EQ(Triple::aarch64, T.getArch());
1318146fd7cdSDaniil Kovalev   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1319146fd7cdSDaniil Kovalev   EXPECT_EQ(Triple::Linux, T.getOS());
1320146fd7cdSDaniil Kovalev   EXPECT_EQ(Triple::PAuthTest, T.getEnvironment());
1321146fd7cdSDaniil Kovalev 
1322387b37afSMichał Górny   // Gentoo time64 triples
1323387b37afSMichał Górny   T = Triple("i686-pc-linux-gnut64");
1324387b37afSMichał Górny   EXPECT_EQ(Triple::x86, T.getArch());
1325387b37afSMichał Górny   EXPECT_EQ(Triple::PC, T.getVendor());
1326387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
1327387b37afSMichał Górny   EXPECT_EQ(Triple::GNUT64, T.getEnvironment());
1328387b37afSMichał Górny   EXPECT_TRUE(T.isTime64ABI());
1329387b37afSMichał Górny 
1330387b37afSMichał Górny   T = Triple("armv5tel-softfloat-linux-gnueabit64");
1331387b37afSMichał Górny   EXPECT_EQ(Triple::arm, T.getArch());
1332387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1333387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
1334387b37afSMichał Górny   EXPECT_EQ(Triple::GNUEABIT64, T.getEnvironment());
1335387b37afSMichał Górny   EXPECT_TRUE(T.isTime64ABI());
1336387b37afSMichał Górny 
1337387b37afSMichał Górny   T = Triple("armv7a-unknown-linux-gnueabihft64");
1338387b37afSMichał Górny   EXPECT_EQ(Triple::arm, T.getArch());
1339387b37afSMichał Górny   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1340387b37afSMichał Górny   EXPECT_EQ(Triple::Linux, T.getOS());
1341387b37afSMichał Górny   EXPECT_EQ(Triple::GNUEABIHFT64, T.getEnvironment());
1342387b37afSMichał Górny   EXPECT_TRUE(T.isTime64ABI());
1343387b37afSMichał Górny   EXPECT_TRUE(T.isHardFloatABI());
1344387b37afSMichał Górny 
13457672216eSJoseph Huber   T = Triple("x86_64-pc-linux-llvm");
13467672216eSJoseph Huber   EXPECT_EQ(Triple::x86_64, T.getArch());
13477672216eSJoseph Huber   EXPECT_EQ(Triple::PC, T.getVendor());
13487672216eSJoseph Huber   EXPECT_EQ(Triple::Linux, T.getOS());
13497672216eSJoseph Huber   EXPECT_EQ(Triple::LLVM, T.getEnvironment());
13507672216eSJoseph Huber 
13511c16807dSNick Sarnie   T = Triple("spirv64-intel-unknown");
13521c16807dSNick Sarnie   EXPECT_EQ(Triple::spirv64, T.getArch());
13531c16807dSNick Sarnie   EXPECT_EQ(Triple::Intel, T.getVendor());
13541c16807dSNick Sarnie   EXPECT_EQ(Triple::UnknownOS, T.getOS());
13551c16807dSNick Sarnie   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
13561c16807dSNick Sarnie 
1357f09cf34dSArchibald Elliott   T = Triple("huh");
1358f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getArch());
1359f09cf34dSArchibald Elliott }
1360f09cf34dSArchibald Elliott 
1361f09cf34dSArchibald Elliott static std::string Join(StringRef A, StringRef B, StringRef C) {
1362f09cf34dSArchibald Elliott   std::string Str = std::string(A);
1363f09cf34dSArchibald Elliott   Str += '-';
1364f09cf34dSArchibald Elliott   Str += B;
1365f09cf34dSArchibald Elliott   Str += '-';
1366f09cf34dSArchibald Elliott   Str += C;
1367f09cf34dSArchibald Elliott   return Str;
1368f09cf34dSArchibald Elliott }
1369f09cf34dSArchibald Elliott 
1370f09cf34dSArchibald Elliott static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
1371f09cf34dSArchibald Elliott   std::string Str = std::string(A);
1372f09cf34dSArchibald Elliott   Str += '-';
1373f09cf34dSArchibald Elliott   Str += B;
1374f09cf34dSArchibald Elliott   Str += '-';
1375f09cf34dSArchibald Elliott   Str += C;
1376f09cf34dSArchibald Elliott   Str += '-';
1377f09cf34dSArchibald Elliott   Str += D;
1378f09cf34dSArchibald Elliott   return Str;
1379f09cf34dSArchibald Elliott }
1380f09cf34dSArchibald Elliott 
1381f09cf34dSArchibald Elliott TEST(TripleTest, Normalization) {
1382f09cf34dSArchibald Elliott 
1383f09cf34dSArchibald Elliott   EXPECT_EQ("unknown", Triple::normalize(""));
1384f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown", Triple::normalize("-"));
1385f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--"));
1386f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---"));
1387f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown-unknown-unknown-unknown",
1388f09cf34dSArchibald Elliott             Triple::normalize("----"));
1389f09cf34dSArchibald Elliott 
1390f09cf34dSArchibald Elliott   EXPECT_EQ("a", Triple::normalize("a"));
1391f09cf34dSArchibald Elliott   EXPECT_EQ("a-b", Triple::normalize("a-b"));
1392f09cf34dSArchibald Elliott   EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
1393f09cf34dSArchibald Elliott   EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
1394f09cf34dSArchibald Elliott 
1395f09cf34dSArchibald Elliott   EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
1396f09cf34dSArchibald Elliott   EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
1397f09cf34dSArchibald Elliott   EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
1398f09cf34dSArchibald Elliott   EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
1399f09cf34dSArchibald Elliott 
1400f09cf34dSArchibald Elliott   EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
1401f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c"));
1402f09cf34dSArchibald Elliott   EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
1403f09cf34dSArchibald Elliott   EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
1404f09cf34dSArchibald Elliott 
1405f09cf34dSArchibald Elliott   EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
1406f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c"));
1407f09cf34dSArchibald Elliott   EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c"));
1408f09cf34dSArchibald Elliott 
1409f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
1410f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386"));
1411f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c"));
1412f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-"));
1413f09cf34dSArchibald Elliott 
1414f09cf34dSArchibald Elliott   EXPECT_EQ("i386", Triple::normalize("i386"));
1415f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-pc", Triple::normalize("pc"));
1416f09cf34dSArchibald Elliott   EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux"));
1417f09cf34dSArchibald Elliott 
1418f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux"));
1419f09cf34dSArchibald Elliott 
1420*ebef4406SShilei Tian   EXPECT_EQ("a-unknown-unknown",
1421*ebef4406SShilei Tian             Triple::normalize("a", Triple::CanonicalForm::THREE_IDENT));
1422*ebef4406SShilei Tian   EXPECT_EQ("a-b-unknown",
1423*ebef4406SShilei Tian             Triple::normalize("a-b", Triple::CanonicalForm::THREE_IDENT));
1424*ebef4406SShilei Tian   EXPECT_EQ("a-b-c",
1425*ebef4406SShilei Tian             Triple::normalize("a-b-c", Triple::CanonicalForm::THREE_IDENT));
1426*ebef4406SShilei Tian   EXPECT_EQ("a-b-c",
1427*ebef4406SShilei Tian             Triple::normalize("a-b-c-d", Triple::CanonicalForm::THREE_IDENT));
1428*ebef4406SShilei Tian   EXPECT_EQ("a-b-c",
1429*ebef4406SShilei Tian             Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::THREE_IDENT));
1430*ebef4406SShilei Tian 
1431*ebef4406SShilei Tian   EXPECT_EQ("a-unknown-unknown-unknown",
1432*ebef4406SShilei Tian             Triple::normalize("a", Triple::CanonicalForm::FOUR_IDENT));
1433*ebef4406SShilei Tian   EXPECT_EQ("a-b-unknown-unknown",
1434*ebef4406SShilei Tian             Triple::normalize("a-b", Triple::CanonicalForm::FOUR_IDENT));
1435*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-unknown",
1436*ebef4406SShilei Tian             Triple::normalize("a-b-c", Triple::CanonicalForm::FOUR_IDENT));
1437*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-d",
1438*ebef4406SShilei Tian             Triple::normalize("a-b-c-d", Triple::CanonicalForm::FOUR_IDENT));
1439*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-d",
1440*ebef4406SShilei Tian             Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FOUR_IDENT));
1441*ebef4406SShilei Tian 
1442*ebef4406SShilei Tian   EXPECT_EQ("a-unknown-unknown-unknown-unknown",
1443*ebef4406SShilei Tian             Triple::normalize("a", Triple::CanonicalForm::FIVE_IDENT));
1444*ebef4406SShilei Tian   EXPECT_EQ("a-b-unknown-unknown-unknown",
1445*ebef4406SShilei Tian             Triple::normalize("a-b", Triple::CanonicalForm::FIVE_IDENT));
1446*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-unknown-unknown",
1447*ebef4406SShilei Tian             Triple::normalize("a-b-c", Triple::CanonicalForm::FIVE_IDENT));
1448*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-d-unknown",
1449*ebef4406SShilei Tian             Triple::normalize("a-b-c-d", Triple::CanonicalForm::FIVE_IDENT));
1450*ebef4406SShilei Tian   EXPECT_EQ("a-b-c-d-e",
1451*ebef4406SShilei Tian             Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FIVE_IDENT));
1452*ebef4406SShilei Tian 
1453*ebef4406SShilei Tian   EXPECT_EQ("i386-b-c-unknown",
1454*ebef4406SShilei Tian             Triple::normalize("i386-b-c", Triple::CanonicalForm::FOUR_IDENT));
1455*ebef4406SShilei Tian   EXPECT_EQ("i386-b-c-unknown-unknown",
1456*ebef4406SShilei Tian             Triple::normalize("i386-b-c", Triple::CanonicalForm::FIVE_IDENT));
1457*ebef4406SShilei Tian 
1458*ebef4406SShilei Tian   EXPECT_EQ("i386-a-c-unknown",
1459*ebef4406SShilei Tian             Triple::normalize("a-i386-c", Triple::CanonicalForm::FOUR_IDENT));
1460*ebef4406SShilei Tian   EXPECT_EQ("i386-a-c-unknown-unknown",
1461*ebef4406SShilei Tian             Triple::normalize("a-i386-c", Triple::CanonicalForm::FIVE_IDENT));
1462*ebef4406SShilei Tian 
1463*ebef4406SShilei Tian   EXPECT_EQ("i386-a-b-unknown",
1464*ebef4406SShilei Tian             Triple::normalize("a-b-i386", Triple::CanonicalForm::FOUR_IDENT));
1465*ebef4406SShilei Tian   EXPECT_EQ("i386-a-b-c",
1466*ebef4406SShilei Tian             Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FOUR_IDENT));
1467*ebef4406SShilei Tian 
1468*ebef4406SShilei Tian   EXPECT_EQ("a-pc-c-unknown",
1469*ebef4406SShilei Tian             Triple::normalize("a-pc-c", Triple::CanonicalForm::FOUR_IDENT));
1470*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-b-c",
1471*ebef4406SShilei Tian             Triple::normalize("pc-b-c", Triple::CanonicalForm::FOUR_IDENT));
1472*ebef4406SShilei Tian   EXPECT_EQ("a-pc-b-unknown",
1473*ebef4406SShilei Tian             Triple::normalize("a-b-pc", Triple::CanonicalForm::FOUR_IDENT));
1474*ebef4406SShilei Tian   EXPECT_EQ("a-pc-b-c",
1475*ebef4406SShilei Tian             Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FOUR_IDENT));
1476*ebef4406SShilei Tian 
1477*ebef4406SShilei Tian   EXPECT_EQ("a-b-linux-unknown",
1478*ebef4406SShilei Tian             Triple::normalize("a-b-linux", Triple::CanonicalForm::FOUR_IDENT));
1479*ebef4406SShilei Tian   // We lose `-c` here as expected.
1480*ebef4406SShilei Tian   EXPECT_EQ("unknown-unknown-linux-b",
1481*ebef4406SShilei Tian             Triple::normalize("linux-b-c", Triple::CanonicalForm::FOUR_IDENT));
1482*ebef4406SShilei Tian   EXPECT_EQ("a-unknown-linux-c",
1483*ebef4406SShilei Tian             Triple::normalize("a-linux-c", Triple::CanonicalForm::FOUR_IDENT));
1484*ebef4406SShilei Tian 
1485*ebef4406SShilei Tian   EXPECT_EQ("i386-pc-a-unknown",
1486*ebef4406SShilei Tian             Triple::normalize("a-pc-i386", Triple::CanonicalForm::FOUR_IDENT));
1487*ebef4406SShilei Tian   EXPECT_EQ("i386-pc-unknown-unknown",
1488*ebef4406SShilei Tian             Triple::normalize("-pc-i386", Triple::CanonicalForm::FOUR_IDENT));
1489*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-linux-c",
1490*ebef4406SShilei Tian             Triple::normalize("linux-pc-c", Triple::CanonicalForm::FOUR_IDENT));
1491*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-linux-unknown",
1492*ebef4406SShilei Tian             Triple::normalize("linux-pc-", Triple::CanonicalForm::FOUR_IDENT));
1493*ebef4406SShilei Tian 
1494*ebef4406SShilei Tian   EXPECT_EQ("i386-unknown-unknown-unknown",
1495*ebef4406SShilei Tian             Triple::normalize("i386", Triple::CanonicalForm::FOUR_IDENT));
1496*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-unknown-unknown",
1497*ebef4406SShilei Tian             Triple::normalize("pc", Triple::CanonicalForm::FOUR_IDENT));
1498*ebef4406SShilei Tian   EXPECT_EQ("unknown-unknown-linux-unknown",
1499*ebef4406SShilei Tian             Triple::normalize("linux", Triple::CanonicalForm::FOUR_IDENT));
1500*ebef4406SShilei Tian 
1501*ebef4406SShilei Tian   EXPECT_EQ(
1502*ebef4406SShilei Tian       "x86_64-unknown-linux-gnu",
1503*ebef4406SShilei Tian       Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FOUR_IDENT));
1504*ebef4406SShilei Tian 
1505*ebef4406SShilei Tian   EXPECT_EQ("i386-a-b-unknown-unknown",
1506*ebef4406SShilei Tian             Triple::normalize("a-b-i386", Triple::CanonicalForm::FIVE_IDENT));
1507*ebef4406SShilei Tian   EXPECT_EQ("i386-a-b-c-unknown",
1508*ebef4406SShilei Tian             Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FIVE_IDENT));
1509*ebef4406SShilei Tian 
1510*ebef4406SShilei Tian   EXPECT_EQ("a-pc-c-unknown-unknown",
1511*ebef4406SShilei Tian             Triple::normalize("a-pc-c", Triple::CanonicalForm::FIVE_IDENT));
1512*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-b-c-unknown",
1513*ebef4406SShilei Tian             Triple::normalize("pc-b-c", Triple::CanonicalForm::FIVE_IDENT));
1514*ebef4406SShilei Tian   EXPECT_EQ("a-pc-b-unknown-unknown",
1515*ebef4406SShilei Tian             Triple::normalize("a-b-pc", Triple::CanonicalForm::FIVE_IDENT));
1516*ebef4406SShilei Tian   EXPECT_EQ("a-pc-b-c-unknown",
1517*ebef4406SShilei Tian             Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FIVE_IDENT));
1518*ebef4406SShilei Tian 
1519*ebef4406SShilei Tian   EXPECT_EQ("a-b-linux-unknown-unknown",
1520*ebef4406SShilei Tian             Triple::normalize("a-b-linux", Triple::CanonicalForm::FIVE_IDENT));
1521*ebef4406SShilei Tian   EXPECT_EQ("unknown-unknown-linux-b-c",
1522*ebef4406SShilei Tian             Triple::normalize("linux-b-c", Triple::CanonicalForm::FIVE_IDENT));
1523*ebef4406SShilei Tian   EXPECT_EQ("a-unknown-linux-c-unknown",
1524*ebef4406SShilei Tian             Triple::normalize("a-linux-c", Triple::CanonicalForm::FIVE_IDENT));
1525*ebef4406SShilei Tian 
1526*ebef4406SShilei Tian   EXPECT_EQ("i386-pc-a-unknown-unknown",
1527*ebef4406SShilei Tian             Triple::normalize("a-pc-i386", Triple::CanonicalForm::FIVE_IDENT));
1528*ebef4406SShilei Tian   EXPECT_EQ("i386-pc-unknown-unknown-unknown",
1529*ebef4406SShilei Tian             Triple::normalize("-pc-i386", Triple::CanonicalForm::FIVE_IDENT));
1530*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-linux-c-unknown",
1531*ebef4406SShilei Tian             Triple::normalize("linux-pc-c", Triple::CanonicalForm::FIVE_IDENT));
1532*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-linux-unknown-unknown",
1533*ebef4406SShilei Tian             Triple::normalize("linux-pc-", Triple::CanonicalForm::FIVE_IDENT));
1534*ebef4406SShilei Tian 
1535*ebef4406SShilei Tian   EXPECT_EQ("i386-unknown-unknown-unknown-unknown",
1536*ebef4406SShilei Tian             Triple::normalize("i386", Triple::CanonicalForm::FIVE_IDENT));
1537*ebef4406SShilei Tian   EXPECT_EQ("unknown-pc-unknown-unknown-unknown",
1538*ebef4406SShilei Tian             Triple::normalize("pc", Triple::CanonicalForm::FIVE_IDENT));
1539*ebef4406SShilei Tian   EXPECT_EQ("unknown-unknown-linux-unknown-unknown",
1540*ebef4406SShilei Tian             Triple::normalize("linux", Triple::CanonicalForm::FIVE_IDENT));
1541*ebef4406SShilei Tian 
1542*ebef4406SShilei Tian   EXPECT_EQ(
1543*ebef4406SShilei Tian       "x86_64-unknown-linux-gnu-unknown",
1544*ebef4406SShilei Tian       Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FIVE_IDENT));
1545*ebef4406SShilei Tian 
1546f09cf34dSArchibald Elliott   // Check that normalizing a permutated set of valid components returns a
1547f09cf34dSArchibald Elliott   // triple with the unpermuted components.
1548f09cf34dSArchibald Elliott   //
1549f09cf34dSArchibald Elliott   // We don't check every possible combination. For the set of architectures A,
1550f09cf34dSArchibald Elliott   // vendors V, operating systems O, and environments E, that would require |A|
1551f09cf34dSArchibald Elliott   // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given
1552f09cf34dSArchibald Elliott   // slot and make sure it gets normalized to the correct position from every
1553f09cf34dSArchibald Elliott   // permutation. This should cover the core logic while being a tractable
1554f09cf34dSArchibald Elliott   // number of tests at (|A| + |V| + |O| + |E|) * 4!.
1555f09cf34dSArchibald Elliott   auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);
1556f09cf34dSArchibald Elliott   auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);
1557f09cf34dSArchibald Elliott   auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);
1558f09cf34dSArchibald Elliott   auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);
1559f09cf34dSArchibald Elliott   StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),
1560f09cf34dSArchibald Elliott                           Triple::getVendorTypeName(FirstVendorType),
1561f09cf34dSArchibald Elliott                           Triple::getOSTypeName(FirstOSType),
1562f09cf34dSArchibald Elliott                           Triple::getEnvironmentTypeName(FirstEnvType)};
1563f09cf34dSArchibald Elliott   for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {
1564f09cf34dSArchibald Elliott     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1565f09cf34dSArchibald Elliott     C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
1566f09cf34dSArchibald Elliott     std::string E = Join(C[0], C[1], C[2]);
1567f09cf34dSArchibald Elliott     int I[] = {0, 1, 2};
1568f09cf34dSArchibald Elliott     do {
1569f09cf34dSArchibald Elliott       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1570f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(I), std::end(I)));
1571f09cf34dSArchibald Elliott     std::string F = Join(C[0], C[1], C[2], C[3]);
1572f09cf34dSArchibald Elliott     int J[] = {0, 1, 2, 3};
1573f09cf34dSArchibald Elliott     do {
1574f09cf34dSArchibald Elliott       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1575f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(J), std::end(J)));
1576f09cf34dSArchibald Elliott   }
1577f09cf34dSArchibald Elliott   for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;
1578f09cf34dSArchibald Elliott        ++Vendor) {
1579f09cf34dSArchibald Elliott     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1580f09cf34dSArchibald Elliott     C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
1581f09cf34dSArchibald Elliott     std::string E = Join(C[0], C[1], C[2]);
1582f09cf34dSArchibald Elliott     int I[] = {0, 1, 2};
1583f09cf34dSArchibald Elliott     do {
1584f09cf34dSArchibald Elliott       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1585f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(I), std::end(I)));
1586f09cf34dSArchibald Elliott     std::string F = Join(C[0], C[1], C[2], C[3]);
1587f09cf34dSArchibald Elliott     int J[] = {0, 1, 2, 3};
1588f09cf34dSArchibald Elliott     do {
1589f09cf34dSArchibald Elliott       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1590f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(J), std::end(J)));
1591f09cf34dSArchibald Elliott   }
1592f09cf34dSArchibald Elliott   for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {
1593f09cf34dSArchibald Elliott     if (OS == Triple::Win32)
1594f09cf34dSArchibald Elliott       continue;
1595f09cf34dSArchibald Elliott     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1596f09cf34dSArchibald Elliott     C[2] = Triple::getOSTypeName(Triple::OSType(OS));
1597f09cf34dSArchibald Elliott     std::string E = Join(C[0], C[1], C[2]);
1598f09cf34dSArchibald Elliott     int I[] = {0, 1, 2};
1599f09cf34dSArchibald Elliott     do {
1600f09cf34dSArchibald Elliott       EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
1601f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(I), std::end(I)));
1602f09cf34dSArchibald Elliott     std::string F = Join(C[0], C[1], C[2], C[3]);
1603f09cf34dSArchibald Elliott     int J[] = {0, 1, 2, 3};
1604f09cf34dSArchibald Elliott     do {
1605f09cf34dSArchibald Elliott       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1606f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(J), std::end(J)));
1607f09cf34dSArchibald Elliott   }
1608f09cf34dSArchibald Elliott   for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {
1609f09cf34dSArchibald Elliott     StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
1610f09cf34dSArchibald Elliott     C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
1611f09cf34dSArchibald Elliott     std::string F = Join(C[0], C[1], C[2], C[3]);
1612f09cf34dSArchibald Elliott     int J[] = {0, 1, 2, 3};
1613f09cf34dSArchibald Elliott     do {
1614f09cf34dSArchibald Elliott       EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
1615f09cf34dSArchibald Elliott     } while (std::next_permutation(std::begin(J), std::end(J)));
1616f09cf34dSArchibald Elliott   }
1617f09cf34dSArchibald Elliott 
1618f09cf34dSArchibald Elliott   // Various real-world funky triples.  The value returned by GCC's config.sub
1619f09cf34dSArchibald Elliott   // is given in the comment.
1620f09cf34dSArchibald Elliott   EXPECT_EQ("i386-unknown-windows-gnu",
1621f09cf34dSArchibald Elliott             Triple::normalize("i386-mingw32")); // i386-pc-mingw32
1622f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-linux-gnu",
1623f09cf34dSArchibald Elliott             Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
1624f09cf34dSArchibald Elliott   EXPECT_EQ("i486-unknown-linux-gnu",
1625f09cf34dSArchibald Elliott             Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
1626f09cf34dSArchibald Elliott   EXPECT_EQ("i386-redhat-linux",
1627f09cf34dSArchibald Elliott             Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
1628f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-linux",
1629f09cf34dSArchibald Elliott             Triple::normalize("i686-linux")); // i686-pc-linux-gnu
16304b75fcf0SYunQiang Su   EXPECT_EQ("arm-unknown-none-eabi",
1631f09cf34dSArchibald Elliott             Triple::normalize("arm-none-eabi")); // arm-none-eabi
1632f09cf34dSArchibald Elliott   EXPECT_EQ("ve-unknown-linux",
1633f09cf34dSArchibald Elliott             Triple::normalize("ve-linux")); // ve-linux
1634f09cf34dSArchibald Elliott   EXPECT_EQ("wasm32-unknown-wasi",
1635f09cf34dSArchibald Elliott             Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi
1636f09cf34dSArchibald Elliott   EXPECT_EQ("wasm64-unknown-wasi",
1637f09cf34dSArchibald Elliott             Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi
1638f09cf34dSArchibald Elliott }
1639f09cf34dSArchibald Elliott 
1640f09cf34dSArchibald Elliott TEST(TripleTest, MutateName) {
1641f09cf34dSArchibald Elliott   Triple T;
1642f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getArch());
1643f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
1644f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownOS, T.getOS());
1645f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
1646f09cf34dSArchibald Elliott 
1647f09cf34dSArchibald Elliott   T.setArchName("i386");
1648f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1649f09cf34dSArchibald Elliott   EXPECT_EQ("i386--", T.getTriple());
1650f09cf34dSArchibald Elliott 
1651f09cf34dSArchibald Elliott   T.setVendorName("pc");
1652f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1653f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
1654f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-", T.getTriple());
1655f09cf34dSArchibald Elliott 
1656f09cf34dSArchibald Elliott   T.setOSName("linux");
1657f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1658f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
1659f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
1660f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-linux", T.getTriple());
1661f09cf34dSArchibald Elliott 
1662f09cf34dSArchibald Elliott   T.setEnvironmentName("gnu");
1663f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1664f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
1665f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Linux, T.getOS());
1666f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
1667f09cf34dSArchibald Elliott 
1668f09cf34dSArchibald Elliott   T.setOSName("freebsd");
1669f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1670f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
1671f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::FreeBSD, T.getOS());
1672f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
1673f09cf34dSArchibald Elliott 
1674f09cf34dSArchibald Elliott   T.setOSAndEnvironmentName("darwin");
1675f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.getArch());
1676f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::PC, T.getVendor());
1677f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Darwin, T.getOS());
1678f09cf34dSArchibald Elliott   EXPECT_EQ("i386-pc-darwin", T.getTriple());
1679f09cf34dSArchibald Elliott }
1680f09cf34dSArchibald Elliott 
168180c25dacSLang Hames TEST(TripleTest, BitWidthChecks) {
1682f09cf34dSArchibald Elliott   Triple T;
1683f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1684f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1685f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
168680c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 0U);
1687f09cf34dSArchibald Elliott 
1688f09cf34dSArchibald Elliott   T.setArch(Triple::arm);
1689f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1690f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1691f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
169280c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1693f09cf34dSArchibald Elliott 
1694f09cf34dSArchibald Elliott   T.setArch(Triple::hexagon);
1695f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1696f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1697f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
169880c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1699f09cf34dSArchibald Elliott 
1700f09cf34dSArchibald Elliott   T.setArch(Triple::mips);
1701f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1702f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1703f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
170480c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1705f09cf34dSArchibald Elliott 
1706f09cf34dSArchibald Elliott   T.setArch(Triple::mips64);
1707f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1708f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1709f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
171080c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1711f09cf34dSArchibald Elliott 
1712f09cf34dSArchibald Elliott   T.setArch(Triple::msp430);
1713f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch16Bit());
1714f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1715f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
171680c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 16U);
1717f09cf34dSArchibald Elliott 
1718f09cf34dSArchibald Elliott   T.setArch(Triple::ppc);
1719f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1720f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1721f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
172280c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1723f09cf34dSArchibald Elliott 
1724f09cf34dSArchibald Elliott   T.setArch(Triple::ppc64);
1725f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1726f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1727f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
172880c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1729f09cf34dSArchibald Elliott 
1730f09cf34dSArchibald Elliott   T.setArch(Triple::x86);
1731f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1732f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1733f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
173480c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1735f09cf34dSArchibald Elliott 
1736f09cf34dSArchibald Elliott   T.setArch(Triple::x86_64);
1737f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1738f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1739f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
174080c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1741f09cf34dSArchibald Elliott 
1742f09cf34dSArchibald Elliott   T.setArch(Triple::amdil);
1743f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1744f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1745f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
174680c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1747f09cf34dSArchibald Elliott 
1748f09cf34dSArchibald Elliott   T.setArch(Triple::amdil64);
1749f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1750f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1751f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
175280c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1753f09cf34dSArchibald Elliott 
1754f09cf34dSArchibald Elliott   T.setArch(Triple::hsail);
1755f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1756f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1757f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
175880c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1759f09cf34dSArchibald Elliott 
1760f09cf34dSArchibald Elliott   T.setArch(Triple::hsail64);
1761f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1762f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1763f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
176480c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1765f09cf34dSArchibald Elliott 
1766f09cf34dSArchibald Elliott   T.setArch(Triple::spir);
1767f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1768f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1769f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
177080c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 32U);
1771f09cf34dSArchibald Elliott 
1772f09cf34dSArchibald Elliott   T.setArch(Triple::spir64);
1773f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1774f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1775f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
177680c25dacSLang Hames   EXPECT_EQ(T.getArchPointerBitWidth(), 64U);
1777f09cf34dSArchibald Elliott 
177853b6a169SNathan Gauër   T.setArch(Triple::spirv);
177953b6a169SNathan Gauër   EXPECT_FALSE(T.isArch16Bit());
178053b6a169SNathan Gauër   EXPECT_FALSE(T.isArch32Bit());
178153b6a169SNathan Gauër   EXPECT_TRUE(T.isArch64Bit());
178253b6a169SNathan Gauër   EXPECT_TRUE(T.isSPIRV());
178353b6a169SNathan Gauër 
1784f09cf34dSArchibald Elliott   T.setArch(Triple::spirv32);
1785f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1786f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1787f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1788f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isSPIRV());
1789f09cf34dSArchibald Elliott 
1790f09cf34dSArchibald Elliott   T.setArch(Triple::spirv64);
1791f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1792f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1793f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1794f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isSPIRV());
1795f09cf34dSArchibald Elliott 
1796f09cf34dSArchibald Elliott   T.setArch(Triple::sparc);
1797f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1798f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1799f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1800f09cf34dSArchibald Elliott 
1801f09cf34dSArchibald Elliott   T.setArch(Triple::sparcel);
1802f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1803f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1804f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1805f09cf34dSArchibald Elliott 
1806f09cf34dSArchibald Elliott   T.setArch(Triple::sparcv9);
1807f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1808f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1809f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1810f09cf34dSArchibald Elliott 
1811f09cf34dSArchibald Elliott   T.setArch(Triple::wasm32);
1812f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1813f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1814f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1815f09cf34dSArchibald Elliott 
1816f09cf34dSArchibald Elliott   T.setArch(Triple::wasm64);
1817f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1818f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1819f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1820f09cf34dSArchibald Elliott 
1821f09cf34dSArchibald Elliott   T.setArch(Triple::avr);
1822f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch16Bit());
1823f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1824f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1825f09cf34dSArchibald Elliott 
1826f09cf34dSArchibald Elliott   T.setArch(Triple::lanai);
1827f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1828f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1829f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1830f09cf34dSArchibald Elliott 
1831f09cf34dSArchibald Elliott   T.setArch(Triple::riscv32);
1832f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1833f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1834f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1835f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isRISCV());
1836f09cf34dSArchibald Elliott 
1837f09cf34dSArchibald Elliott   T.setArch(Triple::riscv64);
1838f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1839f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1840f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1841f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isRISCV());
1842f09cf34dSArchibald Elliott 
1843f09cf34dSArchibald Elliott   T.setArch(Triple::csky);
1844f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1845f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1846f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1847f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isCSKY());
1848f09cf34dSArchibald Elliott 
1849f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch32);
1850f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1851f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1852f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1853f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLoongArch());
1854a926a266SWeining Lu   EXPECT_TRUE(T.isLoongArch32());
1855f09cf34dSArchibald Elliott 
1856f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch64);
1857f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1858f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
1859f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
1860f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLoongArch());
1861a926a266SWeining Lu   EXPECT_TRUE(T.isLoongArch64());
1862f09cf34dSArchibald Elliott 
1863f09cf34dSArchibald Elliott   T.setArch(Triple::dxil);
1864f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
1865f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
1866f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
1867f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isDXIL());
18688c618e8fSAndrei Safronov 
18698c618e8fSAndrei Safronov   T.setArch(Triple::xtensa);
18708c618e8fSAndrei Safronov   EXPECT_FALSE(T.isArch16Bit());
18718c618e8fSAndrei Safronov   EXPECT_TRUE(T.isArch32Bit());
18728c618e8fSAndrei Safronov   EXPECT_FALSE(T.isArch64Bit());
1873f09cf34dSArchibald Elliott }
1874f09cf34dSArchibald Elliott 
1875f09cf34dSArchibald Elliott TEST(TripleTest, BitWidthArchVariants) {
1876f09cf34dSArchibald Elliott   Triple T;
1877f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1878f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1879f09cf34dSArchibald Elliott 
1880f09cf34dSArchibald Elliott   T.setArch(Triple::UnknownArch);
1881f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
1882f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
1883f09cf34dSArchibald Elliott 
1884f09cf34dSArchibald Elliott   T.setArch(Triple::mips);
1885f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1886f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1887f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1888f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1889f09cf34dSArchibald Elliott 
1890f09cf34dSArchibald Elliott   T.setArch(Triple::mips, Triple::MipsSubArch_r6);
1891f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1892f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1893f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1894f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1895f09cf34dSArchibald Elliott 
1896f09cf34dSArchibald Elliott   T.setArch(Triple::mipsel);
1897f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1898f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1899f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1900f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1901f09cf34dSArchibald Elliott 
1902f09cf34dSArchibald Elliott   T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);
1903f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1904f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1905f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1906f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1907f09cf34dSArchibald Elliott 
1908f09cf34dSArchibald Elliott   T.setArch(Triple::ppc);
1909f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
1910f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
1911f09cf34dSArchibald Elliott 
1912f09cf34dSArchibald Elliott   T.setArch(Triple::nvptx);
1913f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
1914f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
1915f09cf34dSArchibald Elliott 
1916f09cf34dSArchibald Elliott   T.setArch(Triple::sparc);
1917f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
1918f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
1919f09cf34dSArchibald Elliott 
1920f09cf34dSArchibald Elliott   T.setArch(Triple::x86);
1921f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
1922f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
1923f09cf34dSArchibald Elliott 
1924f09cf34dSArchibald Elliott   T.setArch(Triple::mips64);
1925f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1926f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1927f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1928f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1929f09cf34dSArchibald Elliott 
1930f09cf34dSArchibald Elliott   T.setArch(Triple::mips64, Triple::MipsSubArch_r6);
1931f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
1932f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1933f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
1934f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1935f09cf34dSArchibald Elliott 
1936f09cf34dSArchibald Elliott   T.setArch(Triple::mips64el);
1937f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1938f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());
1939f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1940f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());
1941f09cf34dSArchibald Elliott 
1942f09cf34dSArchibald Elliott   T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);
1943f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
1944f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());
1945f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
1946f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());
1947f09cf34dSArchibald Elliott 
1948f09cf34dSArchibald Elliott   T.setArch(Triple::ppc64);
1949f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
1950f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
1951f09cf34dSArchibald Elliott 
1952f09cf34dSArchibald Elliott   T.setArch(Triple::nvptx64);
1953f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
1954f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
1955f09cf34dSArchibald Elliott 
1956f09cf34dSArchibald Elliott   T.setArch(Triple::sparcv9);
1957f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
1958f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
1959f09cf34dSArchibald Elliott 
1960f09cf34dSArchibald Elliott   T.setArch(Triple::x86_64);
1961f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
1962f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
1963f09cf34dSArchibald Elliott 
1964f09cf34dSArchibald Elliott   T.setArch(Triple::amdil);
1965f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
1966f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
1967f09cf34dSArchibald Elliott 
1968f09cf34dSArchibald Elliott   T.setArch(Triple::amdil64);
1969f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
1970f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
1971f09cf34dSArchibald Elliott 
1972f09cf34dSArchibald Elliott   T.setArch(Triple::hsail);
1973f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
1974f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
1975f09cf34dSArchibald Elliott 
1976f09cf34dSArchibald Elliott   T.setArch(Triple::hsail64);
1977f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
1978f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
1979f09cf34dSArchibald Elliott 
1980f09cf34dSArchibald Elliott   T.setArch(Triple::spir);
1981f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
1982f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
1983f09cf34dSArchibald Elliott 
1984f09cf34dSArchibald Elliott   T.setArch(Triple::spir64);
1985f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
1986f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
1987f09cf34dSArchibald Elliott 
198853b6a169SNathan Gauër   T.setArch(Triple::spirv);
198953b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
199053b6a169SNathan Gauër   EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
199153b6a169SNathan Gauër 
1992f09cf34dSArchibald Elliott   T.setArch(Triple::spirv32);
1993f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
1994f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
1995f09cf34dSArchibald Elliott 
1996f09cf34dSArchibald Elliott   T.setArch(Triple::spirv64);
1997f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());
1998f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());
1999f09cf34dSArchibald Elliott 
2000f09cf34dSArchibald Elliott   T.setArch(Triple::wasm32);
2001f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
2002f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
2003f09cf34dSArchibald Elliott 
2004f09cf34dSArchibald Elliott   T.setArch(Triple::wasm64);
2005f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
2006f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
2007f09cf34dSArchibald Elliott 
2008f09cf34dSArchibald Elliott   T.setArch(Triple::riscv32);
2009f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
2010f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
2011f09cf34dSArchibald Elliott 
2012f09cf34dSArchibald Elliott   T.setArch(Triple::riscv64);
2013f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());
2014f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());
2015f09cf34dSArchibald Elliott 
2016f09cf34dSArchibald Elliott   T.setArch(Triple::csky);
2017f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch());
2018f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2019f09cf34dSArchibald Elliott 
2020f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch32);
2021f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());
2022f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());
2023f09cf34dSArchibald Elliott 
2024f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch64);
2025f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());
2026f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());
2027f09cf34dSArchibald Elliott 
2028f09cf34dSArchibald Elliott   T.setArch(Triple::thumbeb);
2029f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch());
2030f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2031f09cf34dSArchibald Elliott 
2032f09cf34dSArchibald Elliott   T.setArch(Triple::thumb);
2033f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch());
2034f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2035f09cf34dSArchibald Elliott 
2036f09cf34dSArchibald Elliott   T.setArch(Triple::aarch64);
2037f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
2038f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2039f09cf34dSArchibald Elliott 
2040f09cf34dSArchibald Elliott   T.setArch(Triple::aarch64_be);
2041f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
2042f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2043f09cf34dSArchibald Elliott 
2044f09cf34dSArchibald Elliott   T.setArch(Triple::renderscript32);
2045f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
2046f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
2047f09cf34dSArchibald Elliott 
2048f09cf34dSArchibald Elliott   T.setArch(Triple::renderscript64);
2049f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());
2050f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());
2051f09cf34dSArchibald Elliott 
2052f09cf34dSArchibald Elliott   T.setArch(Triple::armeb);
2053f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());
2054f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());
2055f09cf34dSArchibald Elliott 
2056f09cf34dSArchibald Elliott   T.setArch(Triple::arm);
2057f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
2058f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());
2059f09cf34dSArchibald Elliott 
2060f09cf34dSArchibald Elliott   T.setArch(Triple::systemz);
2061f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
2062f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch());
2063f09cf34dSArchibald Elliott 
2064f09cf34dSArchibald Elliott   T.setArch(Triple::xcore);
2065f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch());
2066f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2067f09cf34dSArchibald Elliott 
2068f09cf34dSArchibald Elliott   T.setArch(Triple::dxil);
2069f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch());
2070f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
20718c618e8fSAndrei Safronov 
20728c618e8fSAndrei Safronov   T.setArch(Triple::xtensa);
20738c618e8fSAndrei Safronov   EXPECT_EQ(Triple::xtensa, T.get32BitArchVariant().getArch());
20748c618e8fSAndrei Safronov   EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
2075f09cf34dSArchibald Elliott }
2076f09cf34dSArchibald Elliott 
2077f09cf34dSArchibald Elliott TEST(TripleTest, EndianArchVariants) {
2078f09cf34dSArchibald Elliott   Triple T;
2079f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2080f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2081f09cf34dSArchibald Elliott 
2082f09cf34dSArchibald Elliott   T.setArch(Triple::UnknownArch);
2083f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2084f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2085f09cf34dSArchibald Elliott 
2086f09cf34dSArchibald Elliott   T.setArch(Triple::aarch64_be);
2087f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
2088f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
2089f09cf34dSArchibald Elliott 
2090f09cf34dSArchibald Elliott   T.setArch(Triple::aarch64);
2091f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
2092f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
2093f09cf34dSArchibald Elliott 
2094f09cf34dSArchibald Elliott   T.setArch(Triple::armeb);
2095f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());
2096f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2097f09cf34dSArchibald Elliott 
2098f09cf34dSArchibald Elliott   T.setArch(Triple::arm);
2099f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2100f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());
2101f09cf34dSArchibald Elliott   T = Triple("arm");
2102f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLittleEndian());
2103f09cf34dSArchibald Elliott   T = Triple("thumb");
2104f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLittleEndian());
2105f09cf34dSArchibald Elliott   T = Triple("armeb");
2106f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isLittleEndian());
2107f09cf34dSArchibald Elliott   T = Triple("thumbeb");
2108f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isLittleEndian());
2109f09cf34dSArchibald Elliott 
2110f09cf34dSArchibald Elliott   T.setArch(Triple::bpfeb);
2111f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
2112f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
2113f09cf34dSArchibald Elliott 
2114f09cf34dSArchibald Elliott   T.setArch(Triple::bpfel);
2115f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
2116f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
2117f09cf34dSArchibald Elliott 
2118f09cf34dSArchibald Elliott   T.setArch(Triple::mips64);
2119f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2120f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2121f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2122f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2123f09cf34dSArchibald Elliott 
2124f09cf34dSArchibald Elliott   T.setArch(Triple::mips64, Triple::MipsSubArch_r6);
2125f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2126f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2127f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2128f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6,
2129f09cf34dSArchibald Elliott             T.getLittleEndianArchVariant().getSubArch());
2130f09cf34dSArchibald Elliott 
2131f09cf34dSArchibald Elliott   T.setArch(Triple::mips64el);
2132f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2133f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2134f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2135f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2136f09cf34dSArchibald Elliott 
2137f09cf34dSArchibald Elliott   T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);
2138f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
2139f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2140f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
2141f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6,
2142f09cf34dSArchibald Elliott             T.getLittleEndianArchVariant().getSubArch());
2143f09cf34dSArchibald Elliott 
2144f09cf34dSArchibald Elliott   T.setArch(Triple::mips);
2145f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2146f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2147f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2148f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2149f09cf34dSArchibald Elliott 
2150f09cf34dSArchibald Elliott   T.setArch(Triple::mips, Triple::MipsSubArch_r6);
2151f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2152f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2153f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2154f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6,
2155f09cf34dSArchibald Elliott             T.getLittleEndianArchVariant().getSubArch());
2156f09cf34dSArchibald Elliott 
2157f09cf34dSArchibald Elliott   T.setArch(Triple::mipsel);
2158f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2159f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());
2160f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2161f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());
2162f09cf34dSArchibald Elliott 
2163f09cf34dSArchibald Elliott   T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);
2164f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
2165f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());
2166f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
2167f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MipsSubArch_r6,
2168f09cf34dSArchibald Elliott             T.getLittleEndianArchVariant().getSubArch());
2169f09cf34dSArchibald Elliott 
2170f09cf34dSArchibald Elliott   T.setArch(Triple::ppc);
2171f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());
2172f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch());
2173f09cf34dSArchibald Elliott 
2174f09cf34dSArchibald Elliott   T.setArch(Triple::ppc64);
2175f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
2176f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
2177f09cf34dSArchibald Elliott 
2178f09cf34dSArchibald Elliott   T.setArch(Triple::ppc64le);
2179f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
2180f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
2181f09cf34dSArchibald Elliott 
2182f09cf34dSArchibald Elliott   T.setArch(Triple::sparc);
2183f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
2184f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
2185f09cf34dSArchibald Elliott 
2186f09cf34dSArchibald Elliott   T.setArch(Triple::sparcel);
2187f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
2188f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
2189f09cf34dSArchibald Elliott 
2190f09cf34dSArchibald Elliott   T.setArch(Triple::thumb);
2191f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2192f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());
2193f09cf34dSArchibald Elliott 
2194f09cf34dSArchibald Elliott   T.setArch(Triple::thumbeb);
2195f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());
2196f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2197f09cf34dSArchibald Elliott 
2198f09cf34dSArchibald Elliott   T.setArch(Triple::lanai);
2199f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());
2200f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
2201f09cf34dSArchibald Elliott 
2202f09cf34dSArchibald Elliott   T.setArch(Triple::tcele);
2203f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
2204f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
2205f09cf34dSArchibald Elliott 
2206f09cf34dSArchibald Elliott   T.setArch(Triple::tce);
2207f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());
2208f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());
2209f09cf34dSArchibald Elliott 
2210f09cf34dSArchibald Elliott   T.setArch(Triple::csky);
2211f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2212f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch());
2213f09cf34dSArchibald Elliott 
2214f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch32);
2215f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLittleEndian());
2216f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2217f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch());
2218f09cf34dSArchibald Elliott 
2219f09cf34dSArchibald Elliott   T.setArch(Triple::loongarch64);
2220f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLittleEndian());
2221f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2222f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch());
2223f09cf34dSArchibald Elliott 
2224f09cf34dSArchibald Elliott   T.setArch(Triple::dxil);
2225f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isLittleEndian());
2226f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
2227f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());
2228f09cf34dSArchibald Elliott }
2229f09cf34dSArchibald Elliott 
22307d3466b5SCyndy Ishida TEST(TripleTest, XROS) {
22317d3466b5SCyndy Ishida   Triple T;
22327d3466b5SCyndy Ishida   VersionTuple Version;
22337d3466b5SCyndy Ishida 
22347d3466b5SCyndy Ishida   T = Triple("arm64-apple-xros");
22357d3466b5SCyndy Ishida   EXPECT_TRUE(T.isXROS());
22367d3466b5SCyndy Ishida   EXPECT_TRUE(T.isOSDarwin());
22377d3466b5SCyndy Ishida   EXPECT_FALSE(T.isiOS());
22387d3466b5SCyndy Ishida   EXPECT_FALSE(T.isMacOSX());
22397d3466b5SCyndy Ishida   EXPECT_FALSE(T.isSimulatorEnvironment());
22407d3466b5SCyndy Ishida   EXPECT_EQ(T.getOSName(), "xros");
22417d3466b5SCyndy Ishida   Version = T.getOSVersion();
22427d3466b5SCyndy Ishida   EXPECT_EQ(VersionTuple(0), Version);
22437d3466b5SCyndy Ishida 
22447d3466b5SCyndy Ishida   T = Triple("arm64-apple-visionos1.2");
22457d3466b5SCyndy Ishida   EXPECT_TRUE(T.isXROS());
22467d3466b5SCyndy Ishida   EXPECT_TRUE(T.isOSDarwin());
22477d3466b5SCyndy Ishida   EXPECT_FALSE(T.isiOS());
22487d3466b5SCyndy Ishida   EXPECT_FALSE(T.isMacOSX());
22497d3466b5SCyndy Ishida   EXPECT_FALSE(T.isSimulatorEnvironment());
22507d3466b5SCyndy Ishida   EXPECT_EQ(T.getOSName(), "visionos1.2");
22517d3466b5SCyndy Ishida   Version = T.getOSVersion();
22527d3466b5SCyndy Ishida   EXPECT_EQ(VersionTuple(1, 2), Version);
22537d3466b5SCyndy Ishida 
22547d3466b5SCyndy Ishida   T = Triple("arm64-apple-xros1-simulator");
22557d3466b5SCyndy Ishida   EXPECT_TRUE(T.isXROS());
22567d3466b5SCyndy Ishida   EXPECT_TRUE(T.isOSDarwin());
22577d3466b5SCyndy Ishida   EXPECT_FALSE(T.isiOS());
22587d3466b5SCyndy Ishida   EXPECT_FALSE(T.isMacOSX());
22597d3466b5SCyndy Ishida   EXPECT_TRUE(T.isSimulatorEnvironment());
22607d3466b5SCyndy Ishida   Version = T.getOSVersion();
22617d3466b5SCyndy Ishida   EXPECT_EQ(VersionTuple(1), Version);
22627d3466b5SCyndy Ishida   Version = T.getiOSVersion();
22637d3466b5SCyndy Ishida   EXPECT_EQ(VersionTuple(17), Version);
22647d3466b5SCyndy Ishida }
22657d3466b5SCyndy Ishida 
2266f09cf34dSArchibald Elliott TEST(TripleTest, getOSVersion) {
2267f09cf34dSArchibald Elliott   Triple T;
2268f09cf34dSArchibald Elliott   VersionTuple Version;
2269f09cf34dSArchibald Elliott 
2270f09cf34dSArchibald Elliott   T = Triple("i386-apple-darwin9");
2271f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2272f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2273f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2274f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
2275f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
2276f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2277f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 5), Version);
2278f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2279f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(5), Version);
2280f09cf34dSArchibald Elliott 
2281f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-darwin9");
2282f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2283f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2284f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2285f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
2286f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
2287f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2288f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 5), Version);
2289f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2290f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(5), Version);
2291f09cf34dSArchibald Elliott 
2292f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-macosx");
2293f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2294f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2295f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2296f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
2297f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
2298f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2299f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 4), Version);
2300f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2301f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(5), Version);
2302f09cf34dSArchibald Elliott 
2303f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-macosx10.7");
2304f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2305f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2306f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2307f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
2308f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
2309f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2310f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 7), Version);
2311f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2312f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(5), Version);
2313f09cf34dSArchibald Elliott 
2314f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-macos11.0");
2315f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2316f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2317f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2318f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
2319f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
2320f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2321f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(11, 0), Version);
2322f09cf34dSArchibald Elliott 
2323f09cf34dSArchibald Elliott   T = Triple("arm64-apple-macosx11.5.8");
2324f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2325f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2326f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2327f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch32Bit());
2328f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch64Bit());
2329f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2330f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(11, 5, 8), Version);
2331f09cf34dSArchibald Elliott 
2332f09cf34dSArchibald Elliott   // 10.16 forms a valid triple, even though it's not
2333f09cf34dSArchibald Elliott   // a version of a macOS.
2334f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-macos10.16");
2335f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2336f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2337f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 16), Version);
2338f09cf34dSArchibald Elliott 
2339f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-darwin20");
2340f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2341f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2342f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(11), Version);
2343f09cf34dSArchibald Elliott 
2344f09cf34dSArchibald Elliott   // For darwin triples on macOS 11, only compare the major version.
2345f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-darwin20.2");
2346f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSX());
2347f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2348f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(11), Version);
2349f09cf34dSArchibald Elliott 
2350f09cf34dSArchibald Elliott   T = Triple("armv7-apple-ios");
2351f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSX());
2352f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isiOS());
2353f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2354f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
2355f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
2356f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2357f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 4), Version);
2358f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2359f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(5), Version);
2360f09cf34dSArchibald Elliott 
2361f09cf34dSArchibald Elliott   T = Triple("armv7-apple-ios7.0");
2362f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSX());
2363f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isiOS());
2364f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch16Bit());
2365f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isArch32Bit());
2366f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isArch64Bit());
2367f09cf34dSArchibald Elliott   T.getMacOSXVersion(Version);
2368f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 4), Version);
2369f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2370f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(7, 0), Version);
2371f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isSimulatorEnvironment());
2372f09cf34dSArchibald Elliott 
2373f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-ios10.3-simulator");
2374f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isiOS());
2375f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2376f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 3), Version);
2377f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isSimulatorEnvironment());
2378f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacCatalystEnvironment());
2379f09cf34dSArchibald Elliott 
2380f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-ios13.0-macabi");
2381f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isiOS());
2382f09cf34dSArchibald Elliott   Version = T.getiOSVersion();
2383f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(13, 0), Version);
2384f09cf34dSArchibald Elliott   EXPECT_TRUE(T.getEnvironment() == Triple::MacABI);
2385f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacCatalystEnvironment());
2386f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isSimulatorEnvironment());
2387f09cf34dSArchibald Elliott 
2388f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-driverkit20.1.0");
2389f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isDriverKit());
2390f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isOSDarwin());
2391f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSX());
2392f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isiOS());
2393f09cf34dSArchibald Elliott   Version = T.getDriverKitVersion();
2394f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(20, 1), Version);
2395f09cf34dSArchibald Elliott 
2396f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-driverkit20");
2397f09cf34dSArchibald Elliott   Version = T.getDriverKitVersion();
2398f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(20, 0), Version);
2399f09cf34dSArchibald Elliott 
2400f09cf34dSArchibald Elliott   // DriverKit version should default to 19.0.
2401f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-driverkit");
2402f09cf34dSArchibald Elliott   Version = T.getDriverKitVersion();
2403f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(19, 0), Version);
2404f09cf34dSArchibald Elliott 
2405f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel6.6-pixel");
2406f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
2407f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
2408f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
2409f09cf34dSArchibald Elliott   Version = T.getOSVersion();
2410f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(6, 6), Version);
2411f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Pixel, T.getEnvironment());
2412f09cf34dSArchibald Elliott 
2413f09cf34dSArchibald Elliott   T = Triple("dxil-unknown-shadermodel6.0-pixel");
2414f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::dxil, T.getArch());
2415f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
2416f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ShaderModel, T.getOS());
2417f09cf34dSArchibald Elliott   Version = T.getOSVersion();
2418f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(6, 0), Version);
2419f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Pixel, T.getEnvironment());
2420f09cf34dSArchibald Elliott }
2421f09cf34dSArchibald Elliott 
2422f09cf34dSArchibald Elliott TEST(TripleTest, getEnvironmentVersion) {
2423f09cf34dSArchibald Elliott   Triple T;
2424f09cf34dSArchibald Elliott   VersionTuple Version;
2425f09cf34dSArchibald Elliott 
2426f09cf34dSArchibald Elliott   T = Triple("arm-unknown-linux-android16");
2427f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isAndroid());
2428f09cf34dSArchibald Elliott   Version = T.getEnvironmentVersion();
2429f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(16), Version);
2430f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Android, T.getEnvironment());
2431f09cf34dSArchibald Elliott 
2432f09cf34dSArchibald Elliott   T = Triple("aarch64-unknown-linux-android21");
2433f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isAndroid());
2434f09cf34dSArchibald Elliott   Version = T.getEnvironmentVersion();
2435f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(21), Version);
2436f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Android, T.getEnvironment());
2437f09cf34dSArchibald Elliott }
2438f09cf34dSArchibald Elliott 
2439f09cf34dSArchibald Elliott TEST(TripleTest, isMacOSVersionLT) {
2440f09cf34dSArchibald Elliott   Triple T = Triple("x86_64-apple-macos11");
2441f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));
2442f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));
2443f09cf34dSArchibald Elliott 
2444f09cf34dSArchibald Elliott   T = Triple("x86_64-apple-darwin20");
2445f09cf34dSArchibald Elliott   EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));
2446f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0));
2447f09cf34dSArchibald Elliott   EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));
2448f09cf34dSArchibald Elliott }
2449f09cf34dSArchibald Elliott 
2450f09cf34dSArchibald Elliott TEST(TripleTest, CanonicalizeOSVersion) {
2451f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(10, 15, 4),
2452f09cf34dSArchibald Elliott             Triple::getCanonicalVersionForOS(Triple::MacOSX,
2453f09cf34dSArchibald Elliott                                              VersionTuple(10, 15, 4)));
2454f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS(
2455f09cf34dSArchibald Elliott                                      Triple::MacOSX, VersionTuple(10, 16)));
2456f09cf34dSArchibald Elliott   EXPECT_EQ(VersionTuple(20),
2457f09cf34dSArchibald Elliott             Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20)));
2458f09cf34dSArchibald Elliott }
2459f09cf34dSArchibald Elliott 
2460f09cf34dSArchibald Elliott TEST(TripleTest, FileFormat) {
2461f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
2462f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
2463f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
2464f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
2465f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
2466f09cf34dSArchibald Elliott 
2467f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
2468f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
2469f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
24702bdf5aa5SFangrui Song   EXPECT_EQ(Triple::MachO, Triple("powerpc-apple-macosx").getObjectFormat());
2471f09cf34dSArchibald Elliott 
2472f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
2473f09cf34dSArchibald Elliott 
2474f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
2475f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
2476f09cf34dSArchibald Elliott 
2477f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat());
2478f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat());
2479f09cf34dSArchibald Elliott 
2480f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat());
2481f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat());
2482f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat());
2483f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat());
2484f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat());
2485f09cf34dSArchibald Elliott 
2486f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
2487f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
2488f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());
2489f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat());
2490f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat());
2491f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat());
2492f09cf34dSArchibald Elliott 
2493f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2494f09cf34dSArchibald Elliott             Triple("wasm32-unknown-unknown-wasm").getObjectFormat());
2495f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2496f09cf34dSArchibald Elliott             Triple("wasm64-unknown-unknown-wasm").getObjectFormat());
2497f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2498f09cf34dSArchibald Elliott             Triple("wasm32-wasi-wasm").getObjectFormat());
2499f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2500f09cf34dSArchibald Elliott             Triple("wasm64-wasi-wasm").getObjectFormat());
2501f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2502f09cf34dSArchibald Elliott             Triple("wasm32-unknown-wasi-wasm").getObjectFormat());
2503f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::Wasm,
2504f09cf34dSArchibald Elliott             Triple("wasm64-unknown-wasi-wasm").getObjectFormat());
2505f09cf34dSArchibald Elliott 
2506f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat());
2507f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat());
2508f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat());
2509f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat());
2510f09cf34dSArchibald Elliott 
2511f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat());
2512f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat());
2513f09cf34dSArchibald Elliott 
251453b6a169SNathan Gauër   EXPECT_EQ(Triple::SPIRV, Triple("spirv-unknown-unknown").getObjectFormat());
2515f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat());
2516f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat());
2517f09cf34dSArchibald Elliott 
2518f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF,
2519f09cf34dSArchibald Elliott             Triple("loongarch32-unknown-unknown").getObjectFormat());
2520f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat());
2521f09cf34dSArchibald Elliott 
2522f09cf34dSArchibald Elliott   Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
2523f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
2524f09cf34dSArchibald Elliott 
2525f09cf34dSArchibald Elliott   Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
2526f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
2527f09cf34dSArchibald Elliott 
2528f09cf34dSArchibald Elliott   Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
2529f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
2530f09cf34dSArchibald Elliott 
2531f09cf34dSArchibald Elliott   Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
2532f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
2533f09cf34dSArchibald Elliott 
2534f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::DXContainer,
2535f09cf34dSArchibald Elliott             Triple("dxil-unknown-shadermodel").getObjectFormat());
2536f09cf34dSArchibald Elliott 
2537f09cf34dSArchibald Elliott   Triple T = Triple("");
2538f09cf34dSArchibald Elliott   T.setObjectFormat(Triple::ELF);
2539f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::ELF, T.getObjectFormat());
2540887d6ab1SLang Hames   EXPECT_EQ("elf", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2541f09cf34dSArchibald Elliott 
2542f09cf34dSArchibald Elliott   T.setObjectFormat(Triple::MachO);
2543f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::MachO, T.getObjectFormat());
2544887d6ab1SLang Hames   EXPECT_EQ("macho", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2545f09cf34dSArchibald Elliott 
2546f09cf34dSArchibald Elliott   T.setObjectFormat(Triple::XCOFF);
2547f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());
2548887d6ab1SLang Hames   EXPECT_EQ("xcoff", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2549f09cf34dSArchibald Elliott 
2550f09cf34dSArchibald Elliott   T.setObjectFormat(Triple::GOFF);
2551f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GOFF, T.getObjectFormat());
2552887d6ab1SLang Hames   EXPECT_EQ("goff", Triple::getObjectFormatTypeName(T.getObjectFormat()));
2553f09cf34dSArchibald Elliott 
2554f09cf34dSArchibald Elliott   T.setObjectFormat(Triple::SPIRV);
2555f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::SPIRV, T.getObjectFormat());
2556887d6ab1SLang Hames   EXPECT_EQ("spirv", Triple::getObjectFormatTypeName(T.getObjectFormat()));
255762941293SMatt Arsenault 
255862941293SMatt Arsenault   EXPECT_EQ(Triple::ELF, Triple("amdgcn-apple-macosx").getObjectFormat());
255962941293SMatt Arsenault   EXPECT_EQ(Triple::ELF, Triple("r600-apple-macosx").getObjectFormat());
256062941293SMatt Arsenault   EXPECT_EQ(Triple::SPIRV, Triple("spirv-apple-macosx").getObjectFormat());
256162941293SMatt Arsenault   EXPECT_EQ(Triple::SPIRV, Triple("spirv32-apple-macosx").getObjectFormat());
256262941293SMatt Arsenault   EXPECT_EQ(Triple::SPIRV, Triple("spirv64-apple-macosx").getObjectFormat());
256362941293SMatt Arsenault   EXPECT_EQ(Triple::DXContainer, Triple("dxil-apple-macosx").getObjectFormat());
2564f09cf34dSArchibald Elliott }
2565f09cf34dSArchibald Elliott 
2566f09cf34dSArchibald Elliott TEST(TripleTest, NormalizeWindows) {
2567f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
2568f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32"));
2569f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
2570f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32"));
2571f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
2572f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64"));
2573f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
2574f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin"));
2575f09cf34dSArchibald Elliott 
2576f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
2577f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32"));
2578f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
2579f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32"));
2580f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-pc-windows-gnu",
2581f09cf34dSArchibald Elliott             Triple::normalize("x86_64-pc-mingw32-w64"));
2582f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-windows-gnu",
2583f09cf34dSArchibald Elliott             Triple::normalize("x86_64-mingw32-w64"));
2584f09cf34dSArchibald Elliott 
2585f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
2586f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf"));
2587f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
2588f09cf34dSArchibald Elliott   EXPECT_EQ("i686-unknown-windows-macho",
2589f09cf34dSArchibald Elliott             Triple::normalize("i686-win32-macho"));
2590f09cf34dSArchibald Elliott 
2591f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
2592f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-windows-elf",
2593f09cf34dSArchibald Elliott             Triple::normalize("x86_64-win32-elf"));
2594f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-pc-windows-macho",
2595f09cf34dSArchibald Elliott             Triple::normalize("x86_64-pc-win32-macho"));
2596f09cf34dSArchibald Elliott   EXPECT_EQ("x86_64-unknown-windows-macho",
2597f09cf34dSArchibald Elliott             Triple::normalize("x86_64-win32-macho"));
2598f09cf34dSArchibald Elliott 
2599f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-cygnus",
2600f09cf34dSArchibald Elliott             Triple::normalize("i686-pc-windows-cygnus"));
2601f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
2602f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-itanium",
2603f09cf34dSArchibald Elliott             Triple::normalize("i686-pc-windows-itanium"));
2604f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
2605f09cf34dSArchibald Elliott 
2606f09cf34dSArchibald Elliott   EXPECT_EQ("i686-pc-windows-elf",
2607f09cf34dSArchibald Elliott             Triple::normalize("i686-pc-windows-elf-elf"));
2608f09cf34dSArchibald Elliott 
2609f09cf34dSArchibald Elliott   EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment());
2610c6ba7b38Shpoussin 
2611c6ba7b38Shpoussin   EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvccoff")).isOSBinFormatCOFF());
2612c6ba7b38Shpoussin   EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvc")).isOSBinFormatCOFF());
2613c6ba7b38Shpoussin   EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-gnu")).isOSBinFormatCOFF());
2614f09cf34dSArchibald Elliott }
2615f09cf34dSArchibald Elliott 
2616f09cf34dSArchibald Elliott TEST(TripleTest, NormalizeAndroid) {
2617f09cf34dSArchibald Elliott   EXPECT_EQ("arm-unknown-linux-android16",
2618f09cf34dSArchibald Elliott             Triple::normalize("arm-linux-androideabi16"));
2619f09cf34dSArchibald Elliott   EXPECT_EQ("armv7a-unknown-linux-android",
2620f09cf34dSArchibald Elliott             Triple::normalize("armv7a-linux-androideabi"));
2621f09cf34dSArchibald Elliott   EXPECT_EQ("aarch64-unknown-linux-android21",
2622f09cf34dSArchibald Elliott             Triple::normalize("aarch64-linux-android21"));
2623f09cf34dSArchibald Elliott }
2624f09cf34dSArchibald Elliott 
2625f09cf34dSArchibald Elliott TEST(TripleTest, NormalizeARM) {
2626f09cf34dSArchibald Elliott   EXPECT_EQ("armv6-unknown-netbsd-eabi",
2627f09cf34dSArchibald Elliott             Triple::normalize("armv6-netbsd-eabi"));
2628f09cf34dSArchibald Elliott   EXPECT_EQ("armv7-unknown-netbsd-eabi",
2629f09cf34dSArchibald Elliott             Triple::normalize("armv7-netbsd-eabi"));
2630f09cf34dSArchibald Elliott   EXPECT_EQ("armv6eb-unknown-netbsd-eabi",
2631f09cf34dSArchibald Elliott             Triple::normalize("armv6eb-netbsd-eabi"));
2632f09cf34dSArchibald Elliott   EXPECT_EQ("armv7eb-unknown-netbsd-eabi",
2633f09cf34dSArchibald Elliott             Triple::normalize("armv7eb-netbsd-eabi"));
2634f09cf34dSArchibald Elliott   EXPECT_EQ("armv6-unknown-netbsd-eabihf",
2635f09cf34dSArchibald Elliott             Triple::normalize("armv6-netbsd-eabihf"));
2636f09cf34dSArchibald Elliott   EXPECT_EQ("armv7-unknown-netbsd-eabihf",
2637f09cf34dSArchibald Elliott             Triple::normalize("armv7-netbsd-eabihf"));
2638f09cf34dSArchibald Elliott   EXPECT_EQ("armv6eb-unknown-netbsd-eabihf",
2639f09cf34dSArchibald Elliott             Triple::normalize("armv6eb-netbsd-eabihf"));
2640f09cf34dSArchibald Elliott   EXPECT_EQ("armv7eb-unknown-netbsd-eabihf",
2641f09cf34dSArchibald Elliott             Triple::normalize("armv7eb-netbsd-eabihf"));
2642f09cf34dSArchibald Elliott 
2643f09cf34dSArchibald Elliott   EXPECT_EQ("armv7-suse-linux-gnueabihf",
2644f09cf34dSArchibald Elliott             Triple::normalize("armv7-suse-linux-gnueabi"));
2645f09cf34dSArchibald Elliott 
2646f09cf34dSArchibald Elliott   Triple T;
2647f09cf34dSArchibald Elliott   T = Triple("armv6--netbsd-eabi");
2648f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::arm, T.getArch());
2649f09cf34dSArchibald Elliott   T = Triple("armv6eb--netbsd-eabi");
2650f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::armeb, T.getArch());
2651f09cf34dSArchibald Elliott   T = Triple("armv7-suse-linux-gnueabihf");
2652f09cf34dSArchibald Elliott   EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());
2653f09cf34dSArchibald Elliott }
2654f09cf34dSArchibald Elliott 
2655f09cf34dSArchibald Elliott TEST(TripleTest, ParseARMArch) {
2656f09cf34dSArchibald Elliott   // ARM
2657f09cf34dSArchibald Elliott   {
2658f09cf34dSArchibald Elliott     Triple T = Triple("arm");
2659f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::arm, T.getArch());
2660f09cf34dSArchibald Elliott   }
2661f09cf34dSArchibald Elliott   {
2662f09cf34dSArchibald Elliott     Triple T = Triple("armeb");
2663f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::armeb, T.getArch());
2664f09cf34dSArchibald Elliott   }
2665f09cf34dSArchibald Elliott   // THUMB
2666f09cf34dSArchibald Elliott   {
2667f09cf34dSArchibald Elliott     Triple T = Triple("thumb");
2668f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::thumb, T.getArch());
2669f09cf34dSArchibald Elliott   }
2670f09cf34dSArchibald Elliott   {
2671f09cf34dSArchibald Elliott     Triple T = Triple("thumbeb");
2672f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::thumbeb, T.getArch());
2673f09cf34dSArchibald Elliott   }
2674f09cf34dSArchibald Elliott   // AARCH64
2675f09cf34dSArchibald Elliott   {
2676f09cf34dSArchibald Elliott     Triple T = Triple("arm64");
2677f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64, T.getArch());
2678f09cf34dSArchibald Elliott   }
2679f09cf34dSArchibald Elliott   {
2680f09cf34dSArchibald Elliott     Triple T = Triple("arm64_32");
2681f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64_32, T.getArch());
2682f09cf34dSArchibald Elliott   }
2683f09cf34dSArchibald Elliott   {
2684f09cf34dSArchibald Elliott     Triple T = Triple("aarch64");
2685f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64, T.getArch());
2686f09cf34dSArchibald Elliott   }
2687f09cf34dSArchibald Elliott   {
2688f09cf34dSArchibald Elliott     Triple T = Triple("aarch64_be");
2689f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64_be, T.getArch());
2690f09cf34dSArchibald Elliott   }
2691f09cf34dSArchibald Elliott   {
2692f09cf34dSArchibald Elliott     Triple T = Triple("arm64e");
2693f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64, T.getArch());
2694f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch());
2695f09cf34dSArchibald Elliott   }
2696f09cf34dSArchibald Elliott   {
2697f09cf34dSArchibald Elliott     Triple T = Triple("arm64ec");
2698f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::aarch64, T.getArch());
2699f09cf34dSArchibald Elliott     EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch());
2700f09cf34dSArchibald Elliott   }
2701f09cf34dSArchibald Elliott   {
2702f09cf34dSArchibald Elliott     Triple T;
2703f09cf34dSArchibald Elliott     T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec);
2704f09cf34dSArchibald Elliott     EXPECT_EQ("arm64ec", T.getArchName());
2705f09cf34dSArchibald Elliott   }
2706f09cf34dSArchibald Elliott }
2707f09cf34dSArchibald Elliott 
2708f09cf34dSArchibald Elliott TEST(TripleTest, isArmT32) {
2709f09cf34dSArchibald Elliott   // Not isArmT32
2710f09cf34dSArchibald Elliott   {
2711f09cf34dSArchibald Elliott     Triple T = Triple("thumbv6m");
2712f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2713f09cf34dSArchibald Elliott   }
2714f09cf34dSArchibald Elliott   {
2715f09cf34dSArchibald Elliott     Triple T = Triple("armv8m.base");
2716f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2717f09cf34dSArchibald Elliott   }
2718f09cf34dSArchibald Elliott   {
2719f09cf34dSArchibald Elliott     Triple T = Triple("armv7s");
2720f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2721f09cf34dSArchibald Elliott   }
2722f09cf34dSArchibald Elliott   {
2723f09cf34dSArchibald Elliott     Triple T = Triple("armv7k");
2724f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2725f09cf34dSArchibald Elliott   }
2726f09cf34dSArchibald Elliott   {
2727f09cf34dSArchibald Elliott     Triple T = Triple("armv7ve");
2728f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2729f09cf34dSArchibald Elliott   }
2730f09cf34dSArchibald Elliott   {
2731f09cf34dSArchibald Elliott     Triple T = Triple("armv6");
2732f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2733f09cf34dSArchibald Elliott   }
2734f09cf34dSArchibald Elliott   {
2735f09cf34dSArchibald Elliott     Triple T = Triple("armv6m");
2736f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2737f09cf34dSArchibald Elliott   }
2738f09cf34dSArchibald Elliott   {
2739f09cf34dSArchibald Elliott     Triple T = Triple("armv6k");
2740f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2741f09cf34dSArchibald Elliott   }
2742f09cf34dSArchibald Elliott   {
2743f09cf34dSArchibald Elliott     Triple T = Triple("armv6t2");
2744f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2745f09cf34dSArchibald Elliott   }
2746f09cf34dSArchibald Elliott   {
2747f09cf34dSArchibald Elliott     Triple T = Triple("armv5");
2748f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2749f09cf34dSArchibald Elliott   }
2750f09cf34dSArchibald Elliott   {
2751f09cf34dSArchibald Elliott     Triple T = Triple("armv5te");
2752f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2753f09cf34dSArchibald Elliott   }
2754f09cf34dSArchibald Elliott   {
2755f09cf34dSArchibald Elliott     Triple T = Triple("armv4t");
2756f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmT32());
2757f09cf34dSArchibald Elliott   }
2758f09cf34dSArchibald Elliott 
2759f09cf34dSArchibald Elliott   // isArmT32
2760f09cf34dSArchibald Elliott   {
2761f09cf34dSArchibald Elliott     Triple T = Triple("arm");
2762f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmT32());
2763f09cf34dSArchibald Elliott   }
2764f09cf34dSArchibald Elliott   {
2765f09cf34dSArchibald Elliott     Triple T = Triple("armv7m");
2766f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmT32());
2767f09cf34dSArchibald Elliott   }
2768f09cf34dSArchibald Elliott   {
2769f09cf34dSArchibald Elliott     Triple T = Triple("armv7em");
2770f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmT32());
2771f09cf34dSArchibald Elliott   }
2772f09cf34dSArchibald Elliott   {
2773f09cf34dSArchibald Elliott     Triple T = Triple("armv8m.main");
2774f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmT32());
2775f09cf34dSArchibald Elliott   }
2776f09cf34dSArchibald Elliott   {
2777f09cf34dSArchibald Elliott     Triple T = Triple("armv8.1m.main");
2778f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmT32());
2779f09cf34dSArchibald Elliott   }
2780f09cf34dSArchibald Elliott }
2781f09cf34dSArchibald Elliott 
2782f09cf34dSArchibald Elliott TEST(TripleTest, isArmMClass) {
2783f09cf34dSArchibald Elliott   // not M-class
2784f09cf34dSArchibald Elliott   {
2785f09cf34dSArchibald Elliott     Triple T = Triple("armv7s");
2786f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2787f09cf34dSArchibald Elliott   }
2788f09cf34dSArchibald Elliott   {
2789f09cf34dSArchibald Elliott     Triple T = Triple("armv7k");
2790f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2791f09cf34dSArchibald Elliott   }
2792f09cf34dSArchibald Elliott   {
2793f09cf34dSArchibald Elliott     Triple T = Triple("armv7ve");
2794f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2795f09cf34dSArchibald Elliott   }
2796f09cf34dSArchibald Elliott   {
2797f09cf34dSArchibald Elliott     Triple T = Triple("armv6");
2798f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2799f09cf34dSArchibald Elliott   }
2800f09cf34dSArchibald Elliott   {
2801f09cf34dSArchibald Elliott     Triple T = Triple("armv6k");
2802f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2803f09cf34dSArchibald Elliott   }
2804f09cf34dSArchibald Elliott   {
2805f09cf34dSArchibald Elliott     Triple T = Triple("armv6t2");
2806f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2807f09cf34dSArchibald Elliott   }
2808f09cf34dSArchibald Elliott   {
2809f09cf34dSArchibald Elliott     Triple T = Triple("armv5");
2810f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2811f09cf34dSArchibald Elliott   }
2812f09cf34dSArchibald Elliott   {
2813f09cf34dSArchibald Elliott     Triple T = Triple("armv5te");
2814f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2815f09cf34dSArchibald Elliott   }
2816f09cf34dSArchibald Elliott   {
2817f09cf34dSArchibald Elliott     Triple T = Triple("armv4t");
2818f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2819f09cf34dSArchibald Elliott   }
2820f09cf34dSArchibald Elliott   {
2821f09cf34dSArchibald Elliott     Triple T = Triple("arm");
2822f09cf34dSArchibald Elliott     EXPECT_FALSE(T.isArmMClass());
2823f09cf34dSArchibald Elliott   }
2824f09cf34dSArchibald Elliott 
2825f09cf34dSArchibald Elliott   // is M-class
2826f09cf34dSArchibald Elliott   {
2827f09cf34dSArchibald Elliott     Triple T = Triple("armv6m");
2828f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2829f09cf34dSArchibald Elliott   }
2830f09cf34dSArchibald Elliott   {
2831f09cf34dSArchibald Elliott     Triple T = Triple("armv7m");
2832f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2833f09cf34dSArchibald Elliott   }
2834f09cf34dSArchibald Elliott   {
2835f09cf34dSArchibald Elliott     Triple T = Triple("armv7em");
2836f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2837f09cf34dSArchibald Elliott   }
2838f09cf34dSArchibald Elliott   {
2839f09cf34dSArchibald Elliott     Triple T = Triple("armv8m.base");
2840f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2841f09cf34dSArchibald Elliott   }
2842f09cf34dSArchibald Elliott   {
2843f09cf34dSArchibald Elliott     Triple T = Triple("armv8m.main");
2844f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2845f09cf34dSArchibald Elliott   }
2846f09cf34dSArchibald Elliott   {
2847f09cf34dSArchibald Elliott     Triple T = Triple("armv8.1m.main");
2848f09cf34dSArchibald Elliott     EXPECT_TRUE(T.isArmMClass());
2849f09cf34dSArchibald Elliott   }
2850f09cf34dSArchibald Elliott }
28516d890148SS. Bharadwaj Yadavalli 
28526d890148SS. Bharadwaj Yadavalli TEST(TripleTest, DXILNormaizeWithVersion) {
28536d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",
28546d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxilv1.0--shadermodel6.0"));
28556d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",
28566d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxil--shadermodel6.0"));
28576d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.1-unknown-shadermodel6.1-library",
28586d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxil-shadermodel6.1-unknown-library"));
28596d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown",
28606d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));
28616d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown",
28626d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));
28636d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxil-unknown-unknown-unknown", Triple::normalize("dxil---"));
28646d890148SS. Bharadwaj Yadavalli   EXPECT_EQ("dxilv1.0-pc-shadermodel5.0-compute",
28656d890148SS. Bharadwaj Yadavalli             Triple::normalize("dxil-shadermodel5.0-pc-compute"));
28666d890148SS. Bharadwaj Yadavalli }
2867a829ebadSMartin Storsjö 
2868a829ebadSMartin Storsjö TEST(TripleTest, isCompatibleWith) {
2869a829ebadSMartin Storsjö   struct {
2870a829ebadSMartin Storsjö     const char *A;
2871a829ebadSMartin Storsjö     const char *B;
2872a829ebadSMartin Storsjö     bool Result;
2873a829ebadSMartin Storsjö   } Cases[] = {
2874a829ebadSMartin Storsjö       {"armv7-linux-gnueabihf", "thumbv7-linux-gnueabihf", true},
2875a829ebadSMartin Storsjö       {"armv4-none-unknown-eabi", "thumbv6-unknown-linux-gnueabihf", false},
2876a829ebadSMartin Storsjö       {"x86_64-apple-macosx10.9.0", "x86_64-apple-macosx10.10.0", true},
2877a829ebadSMartin Storsjö       {"x86_64-apple-macosx10.9.0", "i386-apple-macosx10.9.0", false},
2878a829ebadSMartin Storsjö       {"x86_64-apple-macosx10.9.0", "x86_64h-apple-macosx10.9.0", true},
2879a829ebadSMartin Storsjö       {"x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", true},
2880a829ebadSMartin Storsjö       {"x86_64-unknown-linux-gnu", "i386-unknown-linux-gnu", false},
2881a829ebadSMartin Storsjö       {"x86_64-unknown-linux-gnu", "x86_64h-unknown-linux-gnu", true},
2882a829ebadSMartin Storsjö       {"x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", false},
2883a829ebadSMartin Storsjö       {"x86_64-pc-windows-msvc", "x86_64-pc-windows-msvc-elf", false},
2884a829ebadSMartin Storsjö       {"i686-w64-windows-gnu", "i386-w64-windows-gnu", true},
2885a829ebadSMartin Storsjö       {"x86_64-w64-windows-gnu", "x86_64-pc-windows-gnu", true},
2886a829ebadSMartin Storsjö       {"armv7-w64-windows-gnu", "thumbv7-pc-windows-gnu", true},
2887a829ebadSMartin Storsjö   };
2888a829ebadSMartin Storsjö 
2889a829ebadSMartin Storsjö   auto DoTest = [](const char *A, const char *B,
2890a829ebadSMartin Storsjö                    bool Result) -> testing::AssertionResult {
2891a829ebadSMartin Storsjö     if (Triple(A).isCompatibleWith(Triple(B)) != Result) {
2892a829ebadSMartin Storsjö       return testing::AssertionFailure()
2893a829ebadSMartin Storsjö              << llvm::formatv("Triple {0} and {1} were expected to be {2}", A,
2894a829ebadSMartin Storsjö                               B, Result ? "compatible" : "incompatible");
2895a829ebadSMartin Storsjö     }
2896a829ebadSMartin Storsjö     return testing::AssertionSuccess();
2897a829ebadSMartin Storsjö   };
2898a829ebadSMartin Storsjö   for (const auto &C : Cases) {
2899a829ebadSMartin Storsjö     EXPECT_TRUE(DoTest(C.A, C.B, C.Result));
2900a829ebadSMartin Storsjö     // Test that the comparison is commutative.
2901a829ebadSMartin Storsjö     EXPECT_TRUE(DoTest(C.B, C.A, C.Result));
2902a829ebadSMartin Storsjö   }
2903a829ebadSMartin Storsjö }
2904f09cf34dSArchibald Elliott } // end anonymous namespace
2905