blob: 31cbba514fb6c95453a280f1154821610dc04e9e [file] [log] [blame]
Daniel Dunbar4abd5662009-04-01 21:53:23 +00001//===----------- Triple.cpp - Triple unit tests ---------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "gtest/gtest.h"
11#include "llvm/ADT/Triple.h"
12
13using namespace llvm;
14
15namespace {
16
17TEST(TripleTest, BasicParsing) {
18 Triple T;
19
20 T = Triple("");
Daniel Dunbar19e70762009-07-26 03:31:47 +000021 EXPECT_EQ("", T.getArchName().str());
22 EXPECT_EQ("", T.getVendorName().str());
23 EXPECT_EQ("", T.getOSName().str());
24 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000025
26 T = Triple("-");
Daniel Dunbar19e70762009-07-26 03:31:47 +000027 EXPECT_EQ("", T.getArchName().str());
28 EXPECT_EQ("", T.getVendorName().str());
29 EXPECT_EQ("", T.getOSName().str());
30 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000031
32 T = Triple("--");
Daniel Dunbar19e70762009-07-26 03:31:47 +000033 EXPECT_EQ("", T.getArchName().str());
34 EXPECT_EQ("", T.getVendorName().str());
35 EXPECT_EQ("", T.getOSName().str());
36 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000037
38 T = Triple("---");
Daniel Dunbar19e70762009-07-26 03:31:47 +000039 EXPECT_EQ("", T.getArchName().str());
40 EXPECT_EQ("", T.getVendorName().str());
41 EXPECT_EQ("", T.getOSName().str());
42 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000043
44 T = Triple("----");
Daniel Dunbar19e70762009-07-26 03:31:47 +000045 EXPECT_EQ("", T.getArchName().str());
46 EXPECT_EQ("", T.getVendorName().str());
47 EXPECT_EQ("", T.getOSName().str());
48 EXPECT_EQ("-", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000049
50 T = Triple("a");
Daniel Dunbar19e70762009-07-26 03:31:47 +000051 EXPECT_EQ("a", T.getArchName().str());
52 EXPECT_EQ("", T.getVendorName().str());
53 EXPECT_EQ("", T.getOSName().str());
54 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000055
56 T = Triple("a-b");
Daniel Dunbar19e70762009-07-26 03:31:47 +000057 EXPECT_EQ("a", T.getArchName().str());
58 EXPECT_EQ("b", T.getVendorName().str());
59 EXPECT_EQ("", T.getOSName().str());
60 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000061
62 T = Triple("a-b-c");
Daniel Dunbar19e70762009-07-26 03:31:47 +000063 EXPECT_EQ("a", T.getArchName().str());
64 EXPECT_EQ("b", T.getVendorName().str());
65 EXPECT_EQ("c", T.getOSName().str());
66 EXPECT_EQ("", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000067
68 T = Triple("a-b-c-d");
Daniel Dunbar19e70762009-07-26 03:31:47 +000069 EXPECT_EQ("a", T.getArchName().str());
70 EXPECT_EQ("b", T.getVendorName().str());
71 EXPECT_EQ("c", T.getOSName().str());
72 EXPECT_EQ("d", T.getEnvironmentName().str());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000073}
74
75TEST(TripleTest, ParsedIDs) {
76 Triple T;
77
78 T = Triple("i386-apple-darwin");
Misha Brukman67a1ffa2009-06-09 21:48:57 +000079 EXPECT_EQ(Triple::x86, T.getArch());
80 EXPECT_EQ(Triple::Apple, T.getVendor());
81 EXPECT_EQ(Triple::Darwin, T.getOS());
Duncan Sands84a3bdd2010-09-16 08:25:48 +000082 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000083
Michael Kupersteine1194bd2015-10-27 07:23:59 +000084 T = Triple("i386-pc-elfiamcu");
Michael Kupersteinfe897622015-10-25 08:07:37 +000085 EXPECT_EQ(Triple::x86, T.getArch());
86 EXPECT_EQ(Triple::PC, T.getVendor());
Michael Kupersteine1194bd2015-10-27 07:23:59 +000087 EXPECT_EQ(Triple::ELFIAMCU, T.getOS());
88 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
Michael Kupersteinfe897622015-10-25 08:07:37 +000089
Daniel Dunbar4abd5662009-04-01 21:53:23 +000090 T = Triple("x86_64-pc-linux-gnu");
Misha Brukman67a1ffa2009-06-09 21:48:57 +000091 EXPECT_EQ(Triple::x86_64, T.getArch());
92 EXPECT_EQ(Triple::PC, T.getVendor());
93 EXPECT_EQ(Triple::Linux, T.getOS());
Renato Golin83758d5c2011-01-21 18:25:47 +000094 EXPECT_EQ(Triple::GNU, T.getEnvironment());
Daniel Dunbar4abd5662009-04-01 21:53:23 +000095
Rafael Espindola9768b0a2016-06-14 12:45:33 +000096 T = Triple("x86_64-pc-linux-musl");
97 EXPECT_EQ(Triple::x86_64, T.getArch());
98 EXPECT_EQ(Triple::PC, T.getVendor());
99 EXPECT_EQ(Triple::Linux, T.getOS());
100 EXPECT_EQ(Triple::Musl, T.getEnvironment());
101
Hal Finkelf208af02012-04-02 18:31:33 +0000102 T = Triple("powerpc-bgp-linux");
103 EXPECT_EQ(Triple::ppc, T.getArch());
104 EXPECT_EQ(Triple::BGP, T.getVendor());
105 EXPECT_EQ(Triple::Linux, T.getOS());
106 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
107
108 T = Triple("powerpc-bgp-cnk");
109 EXPECT_EQ(Triple::ppc, T.getArch());
110 EXPECT_EQ(Triple::BGP, T.getVendor());
111 EXPECT_EQ(Triple::CNK, T.getOS());
112 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
113
114 T = Triple("powerpc64-bgq-linux");
115 EXPECT_EQ(Triple::ppc64, T.getArch());
116 EXPECT_EQ(Triple::BGQ, T.getVendor());
117 EXPECT_EQ(Triple::Linux, T.getOS());
118 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
119
Duncan Sandsd5772de2012-10-12 11:08:57 +0000120 T = Triple("powerpc-ibm-aix");
121 EXPECT_EQ(Triple::ppc, T.getArch());
122 EXPECT_EQ(Triple::IBM, T.getVendor());
123 EXPECT_EQ(Triple::AIX, T.getOS());
124 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
125
126 T = Triple("powerpc64-ibm-aix");
127 EXPECT_EQ(Triple::ppc64, T.getArch());
128 EXPECT_EQ(Triple::IBM, T.getVendor());
129 EXPECT_EQ(Triple::AIX, T.getOS());
130 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
131
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000132 T = Triple("powerpc-dunno-notsure");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000133 EXPECT_EQ(Triple::ppc, T.getArch());
134 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
135 EXPECT_EQ(Triple::UnknownOS, T.getOS());
Duncan Sands84a3bdd2010-09-16 08:25:48 +0000136 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000137
Duncan Sandsfdfdbd02011-02-02 10:08:38 +0000138 T = Triple("arm-none-none-eabi");
Renato Golin83758d5c2011-01-21 18:25:47 +0000139 EXPECT_EQ(Triple::arm, T.getArch());
Duncan Sandsfdfdbd02011-02-02 10:08:38 +0000140 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
141 EXPECT_EQ(Triple::UnknownOS, T.getOS());
Renato Golin83758d5c2011-01-21 18:25:47 +0000142 EXPECT_EQ(Triple::EABI, T.getEnvironment());
143
Rafael Espindolaa895a0c2016-06-24 21:14:33 +0000144 T = Triple("arm-none-linux-musleabi");
145 EXPECT_EQ(Triple::arm, T.getArch());
146 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
147 EXPECT_EQ(Triple::Linux, T.getOS());
148 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());
149
Ismail Donmez5eb52b72015-05-05 09:29:43 +0000150 T = Triple("armv6hl-none-linux-gnueabi");
151 EXPECT_EQ(Triple::arm, T.getArch());
152 EXPECT_EQ(Triple::Linux, T.getOS());
153 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
154 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
155
156 T = Triple("armv7hl-none-linux-gnueabi");
157 EXPECT_EQ(Triple::arm, T.getArch());
158 EXPECT_EQ(Triple::Linux, T.getOS());
159 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
160 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());
161
Matt Arsenault3f9b0212014-09-19 19:52:11 +0000162 T = Triple("amdil-unknown-unknown");
163 EXPECT_EQ(Triple::amdil, T.getArch());
164 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
165 EXPECT_EQ(Triple::UnknownOS, T.getOS());
166
167 T = Triple("amdil64-unknown-unknown");
168 EXPECT_EQ(Triple::amdil64, T.getArch());
169 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
170 EXPECT_EQ(Triple::UnknownOS, T.getOS());
171
172 T = Triple("hsail-unknown-unknown");
173 EXPECT_EQ(Triple::hsail, T.getArch());
174 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
175 EXPECT_EQ(Triple::UnknownOS, T.getOS());
176
177 T = Triple("hsail64-unknown-unknown");
178 EXPECT_EQ(Triple::hsail64, T.getArch());
179 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
180 EXPECT_EQ(Triple::UnknownOS, T.getOS());
181
Douglas Katzmane0ff2822015-04-29 19:15:08 +0000182 T = Triple("sparcel-unknown-unknown");
183 EXPECT_EQ(Triple::sparcel, T.getArch());
184 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
185 EXPECT_EQ(Triple::UnknownOS, T.getOS());
186
Matt Arsenault3f9b0212014-09-19 19:52:11 +0000187 T = Triple("spir-unknown-unknown");
188 EXPECT_EQ(Triple::spir, T.getArch());
189 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
190 EXPECT_EQ(Triple::UnknownOS, T.getOS());
191
192 T = Triple("spir64-unknown-unknown");
193 EXPECT_EQ(Triple::spir64, T.getArch());
194 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
195 EXPECT_EQ(Triple::UnknownOS, T.getOS());
196
Ed Schoutendae71892015-03-09 18:40:45 +0000197 T = Triple("x86_64-unknown-cloudabi");
198 EXPECT_EQ(Triple::x86_64, T.getArch());
199 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
200 EXPECT_EQ(Triple::CloudABI, T.getOS());
201 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
202
Dan Gohman8465c002015-06-30 03:52:25 +0000203 T = Triple("wasm32-unknown-unknown");
Dan Gohman10e730a2015-06-29 23:51:55 +0000204 EXPECT_EQ(Triple::wasm32, T.getArch());
205 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
Dan Gohman8465c002015-06-30 03:52:25 +0000206 EXPECT_EQ(Triple::UnknownOS, T.getOS());
Dan Gohman10e730a2015-06-29 23:51:55 +0000207 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
208
Dan Gohman8465c002015-06-30 03:52:25 +0000209 T = Triple("wasm64-unknown-unknown");
Dan Gohman10e730a2015-06-29 23:51:55 +0000210 EXPECT_EQ(Triple::wasm64, T.getArch());
211 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
Dan Gohman8465c002015-06-30 03:52:25 +0000212 EXPECT_EQ(Triple::UnknownOS, T.getOS());
Dan Gohman10e730a2015-06-29 23:51:55 +0000213 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
214
Dylan McKayb1d469c2015-10-16 03:10:30 +0000215 T = Triple("avr-unknown-unknown");
216 EXPECT_EQ(Triple::avr, T.getArch());
217 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
218 EXPECT_EQ(Triple::UnknownOS, T.getOS());
219 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
220
221 T = Triple("avr");
222 EXPECT_EQ(Triple::avr, T.getArch());
223 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
224 EXPECT_EQ(Triple::UnknownOS, T.getOS());
225 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
226
Jacques Pienaardbfe8702016-02-11 17:16:20 +0000227 T = Triple("lanai-unknown-unknown");
228 EXPECT_EQ(Triple::lanai, T.getArch());
229 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
230 EXPECT_EQ(Triple::UnknownOS, T.getOS());
231 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
232
233 T = Triple("lanai");
234 EXPECT_EQ(Triple::lanai, T.getArch());
235 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
236 EXPECT_EQ(Triple::UnknownOS, T.getOS());
237 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
238
Matt Arsenault5e845e52016-02-13 01:56:21 +0000239 T = Triple("amdgcn-mesa-mesa3d");
240 EXPECT_EQ(Triple::amdgcn, T.getArch());
241 EXPECT_EQ(Triple::Mesa, T.getVendor());
242 EXPECT_EQ(Triple::Mesa3D, T.getOS());
243 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
244
245 T = Triple("amdgcn-amd-amdhsa");
246 EXPECT_EQ(Triple::amdgcn, T.getArch());
247 EXPECT_EQ(Triple::AMD, T.getVendor());
248 EXPECT_EQ(Triple::AMDHSA, T.getOS());
249 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
250
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000251 T = Triple("huh");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000252 EXPECT_EQ(Triple::UnknownArch, T.getArch());
Duncan Sands501dff72010-08-12 11:31:39 +0000253}
Daniel Dunbar959323a2009-08-18 19:26:55 +0000254
Duncan Sands501dff72010-08-12 11:31:39 +0000255static std::string Join(StringRef A, StringRef B, StringRef C) {
256 std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C;
257 return Str;
258}
Daniel Dunbar959323a2009-08-18 19:26:55 +0000259
Duncan Sands501dff72010-08-12 11:31:39 +0000260static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
261 std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-';
262 Str += D; return Str;
263}
Daniel Dunbar959323a2009-08-18 19:26:55 +0000264
Duncan Sands501dff72010-08-12 11:31:39 +0000265TEST(TripleTest, Normalization) {
Renato Golin83758d5c2011-01-21 18:25:47 +0000266
Duncan Sands501dff72010-08-12 11:31:39 +0000267 EXPECT_EQ("", Triple::normalize(""));
268 EXPECT_EQ("-", Triple::normalize("-"));
269 EXPECT_EQ("--", Triple::normalize("--"));
270 EXPECT_EQ("---", Triple::normalize("---"));
271 EXPECT_EQ("----", Triple::normalize("----"));
272
273 EXPECT_EQ("a", Triple::normalize("a"));
274 EXPECT_EQ("a-b", Triple::normalize("a-b"));
275 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
276 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
277
278 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
279 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
280 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
Duncan Sands84a3bdd2010-09-16 08:25:48 +0000281 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
Duncan Sands501dff72010-08-12 11:31:39 +0000282
283 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
284 EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c"));
285 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
Duncan Sands84a3bdd2010-09-16 08:25:48 +0000286 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
Duncan Sands501dff72010-08-12 11:31:39 +0000287
288 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
289 EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c"));
290 EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c"));
291
292 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
293 EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386"));
294 EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c"));
295 EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-"));
296
297 EXPECT_EQ("i386", Triple::normalize("i386"));
298 EXPECT_EQ("-pc", Triple::normalize("pc"));
299 EXPECT_EQ("--linux", Triple::normalize("linux"));
300
Renato Golin83758d5c2011-01-21 18:25:47 +0000301 EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux"));
302
Duncan Sands501dff72010-08-12 11:31:39 +0000303 // Check that normalizing a permutated set of valid components returns a
304 // triple with the unpermuted components.
Chandler Carruth9dd96d72016-08-06 06:00:50 +0000305 //
306 // We don't check every possible combination. For the set of architectures A,
307 // vendors V, operating systems O, and environments E, that would require |A|
308 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given
309 // slot and make sure it gets normalized to the correct position from every
310 // permutation. This should cover the core logic while being a tractable
311 // number of tests at (|A| + |V| + |O| + |E|) * 4!.
312 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);
313 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);
314 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);
315 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);
316 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),
317 Triple::getVendorTypeName(FirstVendorType),
318 Triple::getOSTypeName(FirstOSType),
319 Triple::getEnvironmentTypeName(FirstEnvType)};
320 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {
321 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
Duncan Sands501dff72010-08-12 11:31:39 +0000322 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
Chandler Carruth9dd96d72016-08-06 06:00:50 +0000323 std::string E = Join(C[0], C[1], C[2]);
324 int I[] = {0, 1, 2};
325 do {
326 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
327 } while (std::next_permutation(std::begin(I), std::end(I)));
328 std::string F = Join(C[0], C[1], C[2], C[3]);
329 int J[] = {0, 1, 2, 3};
330 do {
331 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
332 } while (std::next_permutation(std::begin(J), std::end(J)));
333 }
334 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;
335 ++Vendor) {
336 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
337 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
338 std::string E = Join(C[0], C[1], C[2]);
339 int I[] = {0, 1, 2};
340 do {
341 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
342 } while (std::next_permutation(std::begin(I), std::end(I)));
343 std::string F = Join(C[0], C[1], C[2], C[3]);
344 int J[] = {0, 1, 2, 3};
345 do {
346 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
347 } while (std::next_permutation(std::begin(J), std::end(J)));
348 }
349 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {
350 if (OS == Triple::Win32)
351 continue;
352 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
353 C[2] = Triple::getOSTypeName(Triple::OSType(OS));
354 std::string E = Join(C[0], C[1], C[2]);
355 int I[] = {0, 1, 2};
356 do {
357 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));
358 } while (std::next_permutation(std::begin(I), std::end(I)));
359 std::string F = Join(C[0], C[1], C[2], C[3]);
360 int J[] = {0, 1, 2, 3};
361 do {
362 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
363 } while (std::next_permutation(std::begin(J), std::end(J)));
364 }
365 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {
366 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};
367 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
368 std::string F = Join(C[0], C[1], C[2], C[3]);
369 int J[] = {0, 1, 2, 3};
370 do {
371 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));
372 } while (std::next_permutation(std::begin(J), std::end(J)));
Duncan Sands501dff72010-08-12 11:31:39 +0000373 }
374
Duncan Sands501dff72010-08-12 11:31:39 +0000375 // Various real-world funky triples. The value returned by GCC's config.sub
376 // is given in the comment.
Saleem Abdulrasooledbdd2e2014-03-27 22:50:05 +0000377 EXPECT_EQ("i386--windows-gnu", Triple::normalize("i386-mingw32")); // i386-pc-mingw32
Duncan Sands501dff72010-08-12 11:31:39 +0000378 EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
379 EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
380 EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
381 EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu
Duncan Sandsfdfdbd02011-02-02 10:08:38 +0000382 EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000383}
384
385TEST(TripleTest, MutateName) {
386 Triple T;
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000387 EXPECT_EQ(Triple::UnknownArch, T.getArch());
388 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
389 EXPECT_EQ(Triple::UnknownOS, T.getOS());
Duncan Sands84a3bdd2010-09-16 08:25:48 +0000390 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000391
392 T.setArchName("i386");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000393 EXPECT_EQ(Triple::x86, T.getArch());
394 EXPECT_EQ("i386--", T.getTriple());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000395
396 T.setVendorName("pc");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000397 EXPECT_EQ(Triple::x86, T.getArch());
398 EXPECT_EQ(Triple::PC, T.getVendor());
399 EXPECT_EQ("i386-pc-", T.getTriple());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000400
401 T.setOSName("linux");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000402 EXPECT_EQ(Triple::x86, T.getArch());
403 EXPECT_EQ(Triple::PC, T.getVendor());
404 EXPECT_EQ(Triple::Linux, T.getOS());
405 EXPECT_EQ("i386-pc-linux", T.getTriple());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000406
407 T.setEnvironmentName("gnu");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000408 EXPECT_EQ(Triple::x86, T.getArch());
409 EXPECT_EQ(Triple::PC, T.getVendor());
410 EXPECT_EQ(Triple::Linux, T.getOS());
411 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000412
413 T.setOSName("freebsd");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000414 EXPECT_EQ(Triple::x86, T.getArch());
415 EXPECT_EQ(Triple::PC, T.getVendor());
416 EXPECT_EQ(Triple::FreeBSD, T.getOS());
417 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000418
419 T.setOSAndEnvironmentName("darwin");
Misha Brukman67a1ffa2009-06-09 21:48:57 +0000420 EXPECT_EQ(Triple::x86, T.getArch());
421 EXPECT_EQ(Triple::PC, T.getVendor());
422 EXPECT_EQ(Triple::Darwin, T.getOS());
423 EXPECT_EQ("i386-pc-darwin", T.getTriple());
Renato Golin83758d5c2011-01-21 18:25:47 +0000424
Matt Arsenaultf1ffbe72015-07-30 08:16:51 +0000425 T.setEnvironmentName("amdopencl");
426 EXPECT_EQ(Triple::AMDOpenCL, T.getEnvironment());
Daniel Dunbar4abd5662009-04-01 21:53:23 +0000427}
428
Chandler Carruthb90c1022012-01-31 04:52:32 +0000429TEST(TripleTest, BitWidthPredicates) {
430 Triple T;
431 EXPECT_FALSE(T.isArch16Bit());
432 EXPECT_FALSE(T.isArch32Bit());
433 EXPECT_FALSE(T.isArch64Bit());
434
Chandler Carruthb90c1022012-01-31 04:52:32 +0000435 T.setArch(Triple::arm);
436 EXPECT_FALSE(T.isArch16Bit());
437 EXPECT_TRUE(T.isArch32Bit());
438 EXPECT_FALSE(T.isArch64Bit());
439
440 T.setArch(Triple::hexagon);
441 EXPECT_FALSE(T.isArch16Bit());
442 EXPECT_TRUE(T.isArch32Bit());
443 EXPECT_FALSE(T.isArch64Bit());
444
445 T.setArch(Triple::mips);
446 EXPECT_FALSE(T.isArch16Bit());
447 EXPECT_TRUE(T.isArch32Bit());
448 EXPECT_FALSE(T.isArch64Bit());
449
450 T.setArch(Triple::mips64);
451 EXPECT_FALSE(T.isArch16Bit());
452 EXPECT_FALSE(T.isArch32Bit());
453 EXPECT_TRUE(T.isArch64Bit());
454
455 T.setArch(Triple::msp430);
456 EXPECT_TRUE(T.isArch16Bit());
457 EXPECT_FALSE(T.isArch32Bit());
458 EXPECT_FALSE(T.isArch64Bit());
459
460 T.setArch(Triple::ppc);
461 EXPECT_FALSE(T.isArch16Bit());
462 EXPECT_TRUE(T.isArch32Bit());
463 EXPECT_FALSE(T.isArch64Bit());
464
465 T.setArch(Triple::ppc64);
466 EXPECT_FALSE(T.isArch16Bit());
467 EXPECT_FALSE(T.isArch32Bit());
468 EXPECT_TRUE(T.isArch64Bit());
469
470 T.setArch(Triple::x86);
471 EXPECT_FALSE(T.isArch16Bit());
472 EXPECT_TRUE(T.isArch32Bit());
473 EXPECT_FALSE(T.isArch64Bit());
474
475 T.setArch(Triple::x86_64);
476 EXPECT_FALSE(T.isArch16Bit());
477 EXPECT_FALSE(T.isArch32Bit());
478 EXPECT_TRUE(T.isArch64Bit());
Matt Arsenault3f9b0212014-09-19 19:52:11 +0000479
480 T.setArch(Triple::amdil);
481 EXPECT_FALSE(T.isArch16Bit());
482 EXPECT_TRUE(T.isArch32Bit());
483 EXPECT_FALSE(T.isArch64Bit());
484
485 T.setArch(Triple::amdil64);
486 EXPECT_FALSE(T.isArch16Bit());
487 EXPECT_FALSE(T.isArch32Bit());
488 EXPECT_TRUE(T.isArch64Bit());
489
490 T.setArch(Triple::hsail);
491 EXPECT_FALSE(T.isArch16Bit());
492 EXPECT_TRUE(T.isArch32Bit());
493 EXPECT_FALSE(T.isArch64Bit());
494
495 T.setArch(Triple::hsail64);
496 EXPECT_FALSE(T.isArch16Bit());
497 EXPECT_FALSE(T.isArch32Bit());
498 EXPECT_TRUE(T.isArch64Bit());
499
500 T.setArch(Triple::spir);
501 EXPECT_FALSE(T.isArch16Bit());
502 EXPECT_TRUE(T.isArch32Bit());
503 EXPECT_FALSE(T.isArch64Bit());
504
505 T.setArch(Triple::spir64);
506 EXPECT_FALSE(T.isArch16Bit());
507 EXPECT_FALSE(T.isArch32Bit());
508 EXPECT_TRUE(T.isArch64Bit());
Douglas Katzmane0ff2822015-04-29 19:15:08 +0000509
510 T.setArch(Triple::sparc);
511 EXPECT_FALSE(T.isArch16Bit());
512 EXPECT_TRUE(T.isArch32Bit());
513 EXPECT_FALSE(T.isArch64Bit());
514
515 T.setArch(Triple::sparcel);
516 EXPECT_FALSE(T.isArch16Bit());
517 EXPECT_TRUE(T.isArch32Bit());
518 EXPECT_FALSE(T.isArch64Bit());
519
520 T.setArch(Triple::sparcv9);
521 EXPECT_FALSE(T.isArch16Bit());
522 EXPECT_FALSE(T.isArch32Bit());
523 EXPECT_TRUE(T.isArch64Bit());
Dan Gohman10e730a2015-06-29 23:51:55 +0000524
525 T.setArch(Triple::wasm32);
526 EXPECT_FALSE(T.isArch16Bit());
527 EXPECT_TRUE(T.isArch32Bit());
528 EXPECT_FALSE(T.isArch64Bit());
529
530 T.setArch(Triple::wasm64);
531 EXPECT_FALSE(T.isArch16Bit());
532 EXPECT_FALSE(T.isArch32Bit());
533 EXPECT_TRUE(T.isArch64Bit());
Dylan McKayb1d469c2015-10-16 03:10:30 +0000534
535 T.setArch(Triple::avr);
536 EXPECT_TRUE(T.isArch16Bit());
537 EXPECT_FALSE(T.isArch32Bit());
538 EXPECT_FALSE(T.isArch64Bit());
Jacques Pienaardbfe8702016-02-11 17:16:20 +0000539
540 T.setArch(Triple::lanai);
541 EXPECT_FALSE(T.isArch16Bit());
542 EXPECT_TRUE(T.isArch32Bit());
543 EXPECT_FALSE(T.isArch64Bit());
Chandler Carruthb90c1022012-01-31 04:52:32 +0000544}
545
Chandler Carruth07cfb4b2012-02-06 20:46:33 +0000546TEST(TripleTest, BitWidthArchVariants) {
547 Triple T;
548 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
549 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
550
551 T.setArch(Triple::UnknownArch);
552 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
553 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
554
Chandler Carruth07cfb4b2012-02-06 20:46:33 +0000555 T.setArch(Triple::mips);
556 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
557 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
558
559 T.setArch(Triple::mipsel);
560 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
561 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
562
563 T.setArch(Triple::ppc);
564 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
565 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
566
Justin Holewinski907f7602012-05-24 21:38:21 +0000567 T.setArch(Triple::nvptx);
568 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
569 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
Chandler Carruth07cfb4b2012-02-06 20:46:33 +0000570
571 T.setArch(Triple::sparc);
572 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
573 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
574
575 T.setArch(Triple::x86);
576 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
577 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
578
579 T.setArch(Triple::mips64);
580 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
581 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
582
583 T.setArch(Triple::mips64el);
584 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
585 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
586
587 T.setArch(Triple::ppc64);
588 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
589 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
590
Justin Holewinski907f7602012-05-24 21:38:21 +0000591 T.setArch(Triple::nvptx64);
592 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());
593 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());
Chandler Carruth07cfb4b2012-02-06 20:46:33 +0000594
595 T.setArch(Triple::sparcv9);
596 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
597 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
598
599 T.setArch(Triple::x86_64);
600 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
601 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
Matt Arsenault3f9b0212014-09-19 19:52:11 +0000602
603 T.setArch(Triple::amdil);
604 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
605 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
606
607 T.setArch(Triple::amdil64);
608 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());
609 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());
610
611 T.setArch(Triple::hsail);
612 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
613 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
614
615 T.setArch(Triple::hsail64);
616 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());
617 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());
618
619 T.setArch(Triple::spir);
620 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
621 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
622
623 T.setArch(Triple::spir64);
624 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());
625 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());
Dan Gohman10e730a2015-06-29 23:51:55 +0000626
627 T.setArch(Triple::wasm32);
628 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
629 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
630
631 T.setArch(Triple::wasm64);
632 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());
633 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());
Chandler Carruth07cfb4b2012-02-06 20:46:33 +0000634}
635
Benjamin Kramer4ea14a62015-07-06 23:58:14 +0000636TEST(TripleTest, EndianArchVariants) {
637 Triple T;
638 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
639 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
640
641 T.setArch(Triple::UnknownArch);
642 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
643 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
644
645 T.setArch(Triple::aarch64_be);
646 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
647 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
648
649 T.setArch(Triple::aarch64);
650 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());
651 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());
652
653 T.setArch(Triple::armeb);
654 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());
655 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
656
657 T.setArch(Triple::arm);
658 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
659 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());
Davide Italiano901269c2016-06-29 20:01:39 +0000660 T = Triple("arm");
661 EXPECT_TRUE(T.isLittleEndian());
662 T = Triple("thumb");
663 EXPECT_TRUE(T.isLittleEndian());
664 T = Triple("armeb");
665 EXPECT_FALSE(T.isLittleEndian());
666 T = Triple("thumbeb");
667 EXPECT_FALSE(T.isLittleEndian());
Benjamin Kramer4ea14a62015-07-06 23:58:14 +0000668
669 T.setArch(Triple::bpfeb);
670 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
671 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
672
673 T.setArch(Triple::bpfel);
674 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());
675 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());
676
677 T.setArch(Triple::mips64);
678 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
679 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
680
681 T.setArch(Triple::mips64el);
682 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());
683 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());
684
685 T.setArch(Triple::mips);
686 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
687 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
688
689 T.setArch(Triple::mipsel);
690 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());
691 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());
692
693 T.setArch(Triple::ppc);
694 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());
695 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
696
697 T.setArch(Triple::ppc64);
698 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
699 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
700
701 T.setArch(Triple::ppc64le);
702 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());
703 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());
704
705 T.setArch(Triple::sparc);
706 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
707 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
708
709 T.setArch(Triple::sparcel);
710 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());
711 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());
712
713 T.setArch(Triple::thumb);
714 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());
715 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());
716
717 T.setArch(Triple::thumbeb);
718 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());
719 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
Jacques Pienaardbfe8702016-02-11 17:16:20 +0000720
721 T.setArch(Triple::lanai);
722 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());
723 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());
Benjamin Kramer4ea14a62015-07-06 23:58:14 +0000724}
725
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000726TEST(TripleTest, getOSVersion) {
727 Triple T;
728 unsigned Major, Minor, Micro;
729
730 T = Triple("i386-apple-darwin9");
Michael Gottesman606acb72013-01-30 23:48:13 +0000731 EXPECT_TRUE(T.isMacOSX());
732 EXPECT_FALSE(T.isiOS());
733 EXPECT_FALSE(T.isArch16Bit());
734 EXPECT_TRUE(T.isArch32Bit());
735 EXPECT_FALSE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000736 T.getMacOSXVersion(Major, Minor, Micro);
737 EXPECT_EQ((unsigned)10, Major);
738 EXPECT_EQ((unsigned)5, Minor);
739 EXPECT_EQ((unsigned)0, Micro);
740 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000741 EXPECT_EQ((unsigned)5, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000742 EXPECT_EQ((unsigned)0, Minor);
743 EXPECT_EQ((unsigned)0, Micro);
744
745 T = Triple("x86_64-apple-darwin9");
Michael Gottesman606acb72013-01-30 23:48:13 +0000746 EXPECT_TRUE(T.isMacOSX());
747 EXPECT_FALSE(T.isiOS());
748 EXPECT_FALSE(T.isArch16Bit());
749 EXPECT_FALSE(T.isArch32Bit());
750 EXPECT_TRUE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000751 T.getMacOSXVersion(Major, Minor, Micro);
752 EXPECT_EQ((unsigned)10, Major);
753 EXPECT_EQ((unsigned)5, Minor);
754 EXPECT_EQ((unsigned)0, Micro);
755 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000756 EXPECT_EQ((unsigned)5, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000757 EXPECT_EQ((unsigned)0, Minor);
758 EXPECT_EQ((unsigned)0, Micro);
759
760 T = Triple("x86_64-apple-macosx");
Michael Gottesman606acb72013-01-30 23:48:13 +0000761 EXPECT_TRUE(T.isMacOSX());
762 EXPECT_FALSE(T.isiOS());
763 EXPECT_FALSE(T.isArch16Bit());
764 EXPECT_FALSE(T.isArch32Bit());
765 EXPECT_TRUE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000766 T.getMacOSXVersion(Major, Minor, Micro);
767 EXPECT_EQ((unsigned)10, Major);
768 EXPECT_EQ((unsigned)4, Minor);
769 EXPECT_EQ((unsigned)0, Micro);
770 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000771 EXPECT_EQ((unsigned)5, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000772 EXPECT_EQ((unsigned)0, Minor);
773 EXPECT_EQ((unsigned)0, Micro);
774
775 T = Triple("x86_64-apple-macosx10.7");
Michael Gottesman606acb72013-01-30 23:48:13 +0000776 EXPECT_TRUE(T.isMacOSX());
777 EXPECT_FALSE(T.isiOS());
778 EXPECT_FALSE(T.isArch16Bit());
779 EXPECT_FALSE(T.isArch32Bit());
780 EXPECT_TRUE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000781 T.getMacOSXVersion(Major, Minor, Micro);
782 EXPECT_EQ((unsigned)10, Major);
783 EXPECT_EQ((unsigned)7, Minor);
784 EXPECT_EQ((unsigned)0, Micro);
785 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000786 EXPECT_EQ((unsigned)5, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000787 EXPECT_EQ((unsigned)0, Minor);
788 EXPECT_EQ((unsigned)0, Micro);
789
790 T = Triple("armv7-apple-ios");
Michael Gottesman606acb72013-01-30 23:48:13 +0000791 EXPECT_FALSE(T.isMacOSX());
792 EXPECT_TRUE(T.isiOS());
793 EXPECT_FALSE(T.isArch16Bit());
794 EXPECT_TRUE(T.isArch32Bit());
795 EXPECT_FALSE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000796 T.getMacOSXVersion(Major, Minor, Micro);
797 EXPECT_EQ((unsigned)10, Major);
798 EXPECT_EQ((unsigned)4, Minor);
799 EXPECT_EQ((unsigned)0, Micro);
800 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000801 EXPECT_EQ((unsigned)5, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000802 EXPECT_EQ((unsigned)0, Minor);
803 EXPECT_EQ((unsigned)0, Micro);
804
Tim Northover3e8df692013-12-10 11:53:16 +0000805 T = Triple("armv7-apple-ios7.0");
Michael Gottesman606acb72013-01-30 23:48:13 +0000806 EXPECT_FALSE(T.isMacOSX());
807 EXPECT_TRUE(T.isiOS());
808 EXPECT_FALSE(T.isArch16Bit());
809 EXPECT_TRUE(T.isArch32Bit());
810 EXPECT_FALSE(T.isArch64Bit());
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000811 T.getMacOSXVersion(Major, Minor, Micro);
812 EXPECT_EQ((unsigned)10, Major);
813 EXPECT_EQ((unsigned)4, Minor);
814 EXPECT_EQ((unsigned)0, Micro);
815 T.getiOSVersion(Major, Minor, Micro);
Tim Northover3e8df692013-12-10 11:53:16 +0000816 EXPECT_EQ((unsigned)7, Major);
Chad Rosier1cdb85e2012-05-09 19:31:41 +0000817 EXPECT_EQ((unsigned)0, Minor);
818 EXPECT_EQ((unsigned)0, Micro);
819}
820
Saleem Abdulrasool35476332014-03-06 20:47:11 +0000821TEST(TripleTest, FileFormat) {
822 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());
823 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());
824 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());
825 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());
826 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());
827
828 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());
829 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());
830 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());
831
832 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());
833
Saleem Abdulrasoolf80b49b2014-03-30 07:19:31 +0000834 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
Saleem Abdulrasool28b82bc2014-03-31 16:34:41 +0000835 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
Saleem Abdulrasoolf80b49b2014-03-30 07:19:31 +0000836
Saleem Abdulrasool28b82bc2014-03-31 16:34:41 +0000837 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));
838 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());
839
840 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));
841 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());
842
843 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));
844 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());
845
846 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));
847 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());
Saleem Abdulrasoolf80b49b2014-03-30 07:19:31 +0000848
Saleem Abdulrasool35476332014-03-06 20:47:11 +0000849 Triple T = Triple("");
850 T.setObjectFormat(Triple::ELF);
851 EXPECT_EQ(Triple::ELF, T.getObjectFormat());
852}
853
Saleem Abdulrasooledbdd2e2014-03-27 22:50:05 +0000854TEST(TripleTest, NormalizeWindows) {
855 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));
856 EXPECT_EQ("i686--windows-msvc", Triple::normalize("i686-win32"));
857 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));
858 EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32"));
859 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));
860 EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32-w64"));
861 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));
862 EXPECT_EQ("i686--windows-cygnus", Triple::normalize("i686-cygwin"));
863
864 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));
865 EXPECT_EQ("x86_64--windows-msvc", Triple::normalize("x86_64-win32"));
866 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));
867 EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32"));
868 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32-w64"));
869 EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32-w64"));
870
871 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));
872 EXPECT_EQ("i686--windows-elf", Triple::normalize("i686-win32-elf"));
873 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));
874 EXPECT_EQ("i686--windows-macho", Triple::normalize("i686-win32-macho"));
875
876 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));
877 EXPECT_EQ("x86_64--windows-elf", Triple::normalize("x86_64-win32-elf"));
878 EXPECT_EQ("x86_64-pc-windows-macho", Triple::normalize("x86_64-pc-win32-macho"));
879 EXPECT_EQ("x86_64--windows-macho", Triple::normalize("x86_64-win32-macho"));
880
Saleem Abdulrasool28b82bc2014-03-31 16:34:41 +0000881 EXPECT_EQ("i686-pc-windows-cygnus",
882 Triple::normalize("i686-pc-windows-cygnus"));
883 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));
Saleem Abdulrasooledbdd2e2014-03-27 22:50:05 +0000884 EXPECT_EQ("i686-pc-windows-itanium", Triple::normalize("i686-pc-windows-itanium"));
Saleem Abdulrasoolf80b49b2014-03-30 07:19:31 +0000885 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));
Saleem Abdulrasool28b82bc2014-03-31 16:34:41 +0000886
887 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-windows-elf-elf"));
Saleem Abdulrasooledbdd2e2014-03-27 22:50:05 +0000888}
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +0000889
890TEST(TripleTest, getARMCPUForArch) {
Renato Goline8048f02015-05-20 15:05:07 +0000891 // Standard ARM Architectures.
892 {
893 llvm::Triple Triple("armv4-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000894 EXPECT_EQ("strongarm", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000895 }
896 {
897 llvm::Triple Triple("armv4t-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000898 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000899 }
900 {
901 llvm::Triple Triple("armv5-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000902 EXPECT_EQ("arm10tdmi", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000903 }
904 {
905 llvm::Triple Triple("armv5t-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000906 EXPECT_EQ("arm10tdmi", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000907 }
908 {
909 llvm::Triple Triple("armv5e-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000910 EXPECT_EQ("arm1022e", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000911 }
912 {
913 llvm::Triple Triple("armv5tej-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000914 EXPECT_EQ("arm926ej-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000915 }
916 {
917 llvm::Triple Triple("armv6-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000918 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000919 }
920 {
921 llvm::Triple Triple("armv6j-unknown-eabi");
Artyom Skrobov91f339a2015-11-20 16:46:09 +0000922 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000923 }
924 {
925 llvm::Triple Triple("armv6k-unknown-eabi");
Artyom Skrobovf187a652015-11-16 14:05:32 +0000926 EXPECT_EQ("arm1176j-s", Triple.getARMCPUForArch());
927 }
928 {
929 llvm::Triple Triple("armv6kz-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000930 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000931 }
932 {
933 llvm::Triple Triple("armv6zk-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000934 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000935 }
936 {
937 llvm::Triple Triple("armv6t2-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000938 EXPECT_EQ("arm1156t2-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000939 }
940 {
941 llvm::Triple Triple("armv6m-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000942 EXPECT_EQ("cortex-m0", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000943 }
944 {
945 llvm::Triple Triple("armv7-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000946 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000947 }
948 {
949 llvm::Triple Triple("armv7a-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000950 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000951 }
952 {
953 llvm::Triple Triple("armv7m-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000954 EXPECT_EQ("cortex-m3", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000955 }
956 {
957 llvm::Triple Triple("armv7r-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000958 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000959 }
960 {
961 llvm::Triple Triple("armv7r-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000962 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000963 }
964 {
965 llvm::Triple Triple("armv7r-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000966 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000967 }
968 {
969 llvm::Triple Triple("armv7r-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000970 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000971 }
972 {
973 llvm::Triple Triple("armv8a-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000974 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000975 }
976 {
977 llvm::Triple Triple("armv8.1a-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000978 EXPECT_EQ("generic", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +0000979 }
980 // Non-synonym names, using -march style, not default arch.
981 {
982 llvm::Triple Triple("arm");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000983 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch("armv7-a"));
Renato Goline8048f02015-05-20 15:05:07 +0000984 }
985 {
986 llvm::Triple Triple("arm");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000987 EXPECT_EQ("cortex-m3", Triple.getARMCPUForArch("armv7-m"));
Renato Goline8048f02015-05-20 15:05:07 +0000988 }
989 {
990 llvm::Triple Triple("arm");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000991 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch("armv8"));
Renato Goline8048f02015-05-20 15:05:07 +0000992 }
993 {
994 llvm::Triple Triple("arm");
Chandler Carruth3309ef62015-08-30 07:51:04 +0000995 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch("armv8-a"));
Renato Goline8048f02015-05-20 15:05:07 +0000996 }
997 // Platform specific defaults.
998 {
999 llvm::Triple Triple("arm--nacl");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001000 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001001 }
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +00001002 {
Ed Masted81a2212014-09-15 16:57:12 +00001003 llvm::Triple Triple("armv6-unknown-freebsd");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001004 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
Ed Masted81a2212014-09-15 16:57:12 +00001005 }
1006 {
Renato Golin66b682a2015-05-27 19:49:53 +00001007 llvm::Triple Triple("thumbv6-unknown-freebsd");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001008 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
Renato Golin66b682a2015-05-27 19:49:53 +00001009 }
1010 {
1011 llvm::Triple Triple("armebv6-unknown-freebsd");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001012 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch());
Renato Golin66b682a2015-05-27 19:49:53 +00001013 }
1014 {
Renato Goline8048f02015-05-20 15:05:07 +00001015 llvm::Triple Triple("arm--win32");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001016 EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001017 }
1018 // Some alternative architectures
1019 {
1020 llvm::Triple Triple("xscale-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001021 EXPECT_EQ("xscale", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001022 }
1023 {
1024 llvm::Triple Triple("iwmmxt-unknown-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001025 EXPECT_EQ("iwmmxt", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001026 }
1027 {
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +00001028 llvm::Triple Triple("armv7s-apple-ios7");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001029 EXPECT_EQ("swift", Triple.getARMCPUForArch());
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +00001030 }
1031 {
Tim Northover94bdbd02016-02-11 23:49:08 +00001032 llvm::Triple Triple("armv7k-apple-ios9");
1033 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1034 }
1035 {
1036 llvm::Triple Triple("armv7k-apple-watchos3");
1037 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1038 }
1039 {
1040 llvm::Triple Triple("armv7k-apple-tvos9");
1041 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch());
1042 }
1043 {
Renato Goline8048f02015-05-20 15:05:07 +00001044 llvm::Triple Triple("armv7em-apple-ios7");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001045 EXPECT_EQ("cortex-m4", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001046 }
1047 {
1048 llvm::Triple Triple("armv7l-linux-gnueabihf");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001049 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch());
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +00001050 }
Derek Schuffa3b594c2015-03-26 21:58:46 +00001051 {
Renato Goline8048f02015-05-20 15:05:07 +00001052 llvm::Triple Triple("armv6sm-apple-ios7");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001053 EXPECT_EQ("cortex-m0", Triple.getARMCPUForArch());
John Brawn50ed9472015-05-08 12:52:02 +00001054 }
1055 // armeb is permitted, but armebeb is not
1056 {
1057 llvm::Triple Triple("armeb-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001058 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch());
John Brawn50ed9472015-05-08 12:52:02 +00001059 }
1060 {
1061 llvm::Triple Triple("armebeb-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001062 EXPECT_EQ("", Triple.getARMCPUForArch());
John Brawn50ed9472015-05-08 12:52:02 +00001063 }
Renato Goline8048f02015-05-20 15:05:07 +00001064 {
1065 llvm::Triple Triple("armebv6eb-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001066 EXPECT_EQ("", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001067 }
1068 // armebv6 and armv6eb are permitted, but armebv6eb is not
1069 {
1070 llvm::Triple Triple("armebv6-non-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001071 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001072 }
1073 {
1074 llvm::Triple Triple("armv6eb-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001075 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch());
Renato Goline8048f02015-05-20 15:05:07 +00001076 }
John Brawn50ed9472015-05-08 12:52:02 +00001077 // xscaleeb is permitted, but armebxscale is not
1078 {
1079 llvm::Triple Triple("xscaleeb-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001080 EXPECT_EQ("xscale", Triple.getARMCPUForArch());
John Brawn50ed9472015-05-08 12:52:02 +00001081 }
1082 {
1083 llvm::Triple Triple("armebxscale-none-eabi");
Chandler Carruth3309ef62015-08-30 07:51:04 +00001084 EXPECT_EQ("", Triple.getARMCPUForArch());
John Brawn50ed9472015-05-08 12:52:02 +00001085 }
Argyrios Kyrtzidis730abd22014-07-11 21:44:54 +00001086}
Joerg Sonnenberger429edc12015-01-26 11:41:48 +00001087
1088TEST(TripleTest, NormalizeARM) {
1089 EXPECT_EQ("armv6--netbsd-eabi", Triple::normalize("armv6-netbsd-eabi"));
1090 EXPECT_EQ("armv7--netbsd-eabi", Triple::normalize("armv7-netbsd-eabi"));
1091 EXPECT_EQ("armv6eb--netbsd-eabi", Triple::normalize("armv6eb-netbsd-eabi"));
1092 EXPECT_EQ("armv7eb--netbsd-eabi", Triple::normalize("armv7eb-netbsd-eabi"));
1093 EXPECT_EQ("armv6--netbsd-eabihf", Triple::normalize("armv6-netbsd-eabihf"));
1094 EXPECT_EQ("armv7--netbsd-eabihf", Triple::normalize("armv7-netbsd-eabihf"));
1095 EXPECT_EQ("armv6eb--netbsd-eabihf", Triple::normalize("armv6eb-netbsd-eabihf"));
1096 EXPECT_EQ("armv7eb--netbsd-eabihf", Triple::normalize("armv7eb-netbsd-eabihf"));
1097
1098 Triple T;
1099 T = Triple("armv6--netbsd-eabi");
1100 EXPECT_EQ(Triple::arm, T.getArch());
1101 T = Triple("armv6eb--netbsd-eabi");
1102 EXPECT_EQ(Triple::armeb, T.getArch());
1103}
Douglas Katzmane2e72382015-05-01 18:51:06 +00001104
Renato Golinb6b9e052015-05-21 13:52:20 +00001105TEST(TripleTest, ParseARMArch) {
1106 // ARM
1107 {
1108 Triple T = Triple("arm");
1109 EXPECT_EQ(Triple::arm, T.getArch());
1110 }
1111 {
1112 Triple T = Triple("armv6t2");
1113 EXPECT_EQ(Triple::arm, T.getArch());
1114 }
1115 {
1116 Triple T = Triple("armv8");
1117 EXPECT_EQ(Triple::arm, T.getArch());
1118 }
1119 {
1120 Triple T = Triple("armeb");
1121 EXPECT_EQ(Triple::armeb, T.getArch());
1122 }
1123 {
1124 Triple T = Triple("armv5eb");
1125 EXPECT_EQ(Triple::armeb, T.getArch());
1126 }
Renato Golinfadc2102015-05-22 18:17:55 +00001127 {
1128 Triple T = Triple("armebv7m");
1129 EXPECT_EQ(Triple::armeb, T.getArch());
1130 }
1131 {
1132 Triple T = Triple("armv7eb");
1133 EXPECT_EQ(Triple::armeb, T.getArch());
1134 }
Renato Golinb6b9e052015-05-21 13:52:20 +00001135 // THUMB
1136 {
1137 Triple T = Triple("thumb");
1138 EXPECT_EQ(Triple::thumb, T.getArch());
1139 }
1140 {
1141 Triple T = Triple("thumbv7a");
1142 EXPECT_EQ(Triple::thumb, T.getArch());
1143 }
1144 {
1145 Triple T = Triple("thumbeb");
1146 EXPECT_EQ(Triple::thumbeb, T.getArch());
1147 }
1148 {
1149 Triple T = Triple("thumbv4teb");
1150 EXPECT_EQ(Triple::thumbeb, T.getArch());
1151 }
1152 {
Renato Golinfadc2102015-05-22 18:17:55 +00001153 Triple T = Triple("thumbebv7");
1154 EXPECT_EQ(Triple::thumbeb, T.getArch());
1155 }
1156 {
1157 Triple T = Triple("armv6m");
1158 EXPECT_EQ(Triple::thumb, T.getArch());
1159 }
1160 {
Renato Golinb6b9e052015-05-21 13:52:20 +00001161 Triple T = Triple("thumbv2");
1162 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1163 }
Renato Golinfadc2102015-05-22 18:17:55 +00001164 {
1165 Triple T = Triple("thumbebv6eb");
1166 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1167 }
Renato Golinb6b9e052015-05-21 13:52:20 +00001168 // AARCH64
1169 {
1170 Triple T = Triple("arm64");
1171 EXPECT_EQ(Triple::aarch64, T.getArch());
1172 }
1173 {
1174 Triple T = Triple("aarch64");
1175 EXPECT_EQ(Triple::aarch64, T.getArch());
1176 }
1177 {
1178 Triple T = Triple("aarch64_be");
1179 EXPECT_EQ(Triple::aarch64_be, T.getArch());
1180 }
1181 {
1182 Triple T = Triple("aarch64be");
1183 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1184 }
1185 {
1186 Triple T = Triple("arm64be");
1187 EXPECT_EQ(Triple::UnknownArch, T.getArch());
1188 }
1189}
Douglas Katzmane2e72382015-05-01 18:51:06 +00001190} // end anonymous namespace