1 //===----------- 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 13 using namespace llvm; 14 15 namespace { 16 17 TEST(TripleTest, BasicParsing) { 18 Triple T; 19 20 T = Triple(""); 21 EXPECT_EQ("", T.getArchName().str()); 22 EXPECT_EQ("", T.getVendorName().str()); 23 EXPECT_EQ("", T.getOSName().str()); 24 EXPECT_EQ("", T.getEnvironmentName().str()); 25 26 T = Triple("-"); 27 EXPECT_EQ("", T.getArchName().str()); 28 EXPECT_EQ("", T.getVendorName().str()); 29 EXPECT_EQ("", T.getOSName().str()); 30 EXPECT_EQ("", T.getEnvironmentName().str()); 31 32 T = Triple("--"); 33 EXPECT_EQ("", T.getArchName().str()); 34 EXPECT_EQ("", T.getVendorName().str()); 35 EXPECT_EQ("", T.getOSName().str()); 36 EXPECT_EQ("", T.getEnvironmentName().str()); 37 38 T = Triple("---"); 39 EXPECT_EQ("", T.getArchName().str()); 40 EXPECT_EQ("", T.getVendorName().str()); 41 EXPECT_EQ("", T.getOSName().str()); 42 EXPECT_EQ("", T.getEnvironmentName().str()); 43 44 T = Triple("----"); 45 EXPECT_EQ("", T.getArchName().str()); 46 EXPECT_EQ("", T.getVendorName().str()); 47 EXPECT_EQ("", T.getOSName().str()); 48 EXPECT_EQ("-", T.getEnvironmentName().str()); 49 50 T = Triple("a"); 51 EXPECT_EQ("a", T.getArchName().str()); 52 EXPECT_EQ("", T.getVendorName().str()); 53 EXPECT_EQ("", T.getOSName().str()); 54 EXPECT_EQ("", T.getEnvironmentName().str()); 55 56 T = Triple("a-b"); 57 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()); 61 62 T = Triple("a-b-c"); 63 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()); 67 68 T = Triple("a-b-c-d"); 69 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()); 73 } 74 75 TEST(TripleTest, ParsedIDs) { 76 Triple T; 77 78 T = Triple("i386-apple-darwin"); 79 EXPECT_EQ(Triple::x86, T.getArch()); 80 EXPECT_EQ(Triple::Apple, T.getVendor()); 81 EXPECT_EQ(Triple::Darwin, T.getOS()); 82 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 83 84 T = Triple("i386-pc-elfiamcu"); 85 EXPECT_EQ(Triple::x86, T.getArch()); 86 EXPECT_EQ(Triple::PC, T.getVendor()); 87 EXPECT_EQ(Triple::ELFIAMCU, T.getOS()); 88 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 89 90 T = Triple("x86_64-pc-linux-gnu"); 91 EXPECT_EQ(Triple::x86_64, T.getArch()); 92 EXPECT_EQ(Triple::PC, T.getVendor()); 93 EXPECT_EQ(Triple::Linux, T.getOS()); 94 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 95 96 T = Triple("powerpc-bgp-linux"); 97 EXPECT_EQ(Triple::ppc, T.getArch()); 98 EXPECT_EQ(Triple::BGP, T.getVendor()); 99 EXPECT_EQ(Triple::Linux, T.getOS()); 100 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 101 102 T = Triple("powerpc-bgp-cnk"); 103 EXPECT_EQ(Triple::ppc, T.getArch()); 104 EXPECT_EQ(Triple::BGP, T.getVendor()); 105 EXPECT_EQ(Triple::CNK, T.getOS()); 106 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 107 108 T = Triple("powerpc64-bgq-linux"); 109 EXPECT_EQ(Triple::ppc64, T.getArch()); 110 EXPECT_EQ(Triple::BGQ, T.getVendor()); 111 EXPECT_EQ(Triple::Linux, T.getOS()); 112 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 113 114 T = Triple("powerpc-ibm-aix"); 115 EXPECT_EQ(Triple::ppc, T.getArch()); 116 EXPECT_EQ(Triple::IBM, T.getVendor()); 117 EXPECT_EQ(Triple::AIX, T.getOS()); 118 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 119 120 T = Triple("powerpc64-ibm-aix"); 121 EXPECT_EQ(Triple::ppc64, 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("powerpc-dunno-notsure"); 127 EXPECT_EQ(Triple::ppc, T.getArch()); 128 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 129 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 130 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 131 132 T = Triple("arm-none-none-eabi"); 133 EXPECT_EQ(Triple::arm, T.getArch()); 134 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 135 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 136 EXPECT_EQ(Triple::EABI, T.getEnvironment()); 137 138 T = Triple("armv6hl-none-linux-gnueabi"); 139 EXPECT_EQ(Triple::arm, T.getArch()); 140 EXPECT_EQ(Triple::Linux, T.getOS()); 141 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 142 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 143 144 T = Triple("armv7hl-none-linux-gnueabi"); 145 EXPECT_EQ(Triple::arm, T.getArch()); 146 EXPECT_EQ(Triple::Linux, T.getOS()); 147 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 148 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 149 150 T = Triple("amdil-unknown-unknown"); 151 EXPECT_EQ(Triple::amdil, T.getArch()); 152 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 153 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 154 155 T = Triple("amdil64-unknown-unknown"); 156 EXPECT_EQ(Triple::amdil64, T.getArch()); 157 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 158 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 159 160 T = Triple("hsail-unknown-unknown"); 161 EXPECT_EQ(Triple::hsail, T.getArch()); 162 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 163 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 164 165 T = Triple("hsail64-unknown-unknown"); 166 EXPECT_EQ(Triple::hsail64, T.getArch()); 167 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 168 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 169 170 T = Triple("sparcel-unknown-unknown"); 171 EXPECT_EQ(Triple::sparcel, T.getArch()); 172 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 173 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 174 175 T = Triple("spir-unknown-unknown"); 176 EXPECT_EQ(Triple::spir, T.getArch()); 177 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 178 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 179 180 T = Triple("spir64-unknown-unknown"); 181 EXPECT_EQ(Triple::spir64, T.getArch()); 182 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 183 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 184 185 T = Triple("x86_64-unknown-cloudabi"); 186 EXPECT_EQ(Triple::x86_64, T.getArch()); 187 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 188 EXPECT_EQ(Triple::CloudABI, T.getOS()); 189 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 190 191 T = Triple("wasm32-unknown-unknown"); 192 EXPECT_EQ(Triple::wasm32, T.getArch()); 193 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 194 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 195 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 196 197 T = Triple("wasm64-unknown-unknown"); 198 EXPECT_EQ(Triple::wasm64, T.getArch()); 199 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 200 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 201 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 202 203 T = Triple("avr-unknown-unknown"); 204 EXPECT_EQ(Triple::avr, T.getArch()); 205 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 206 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 207 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 208 209 T = Triple("avr"); 210 EXPECT_EQ(Triple::avr, T.getArch()); 211 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 212 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 213 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 214 215 T = Triple("lanai-unknown-unknown"); 216 EXPECT_EQ(Triple::lanai, 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("lanai"); 222 EXPECT_EQ(Triple::lanai, T.getArch()); 223 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 224 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 225 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 226 227 T = Triple("amdgcn-mesa-mesa3d"); 228 EXPECT_EQ(Triple::amdgcn, T.getArch()); 229 EXPECT_EQ(Triple::Mesa, T.getVendor()); 230 EXPECT_EQ(Triple::Mesa3D, T.getOS()); 231 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 232 233 T = Triple("amdgcn-amd-amdhsa"); 234 EXPECT_EQ(Triple::amdgcn, T.getArch()); 235 EXPECT_EQ(Triple::AMD, T.getVendor()); 236 EXPECT_EQ(Triple::AMDHSA, T.getOS()); 237 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 238 239 T = Triple("huh"); 240 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 241 } 242 243 static std::string Join(StringRef A, StringRef B, StringRef C) { 244 std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; 245 return Str; 246 } 247 248 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 249 std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-'; 250 Str += D; return Str; 251 } 252 253 TEST(TripleTest, Normalization) { 254 255 EXPECT_EQ("", Triple::normalize("")); 256 EXPECT_EQ("-", Triple::normalize("-")); 257 EXPECT_EQ("--", Triple::normalize("--")); 258 EXPECT_EQ("---", Triple::normalize("---")); 259 EXPECT_EQ("----", Triple::normalize("----")); 260 261 EXPECT_EQ("a", Triple::normalize("a")); 262 EXPECT_EQ("a-b", Triple::normalize("a-b")); 263 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 264 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 265 266 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 267 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 268 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 269 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 270 271 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 272 EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c")); 273 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 274 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 275 276 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 277 EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c")); 278 EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c")); 279 280 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 281 EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386")); 282 EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c")); 283 EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-")); 284 285 EXPECT_EQ("i386", Triple::normalize("i386")); 286 EXPECT_EQ("-pc", Triple::normalize("pc")); 287 EXPECT_EQ("--linux", Triple::normalize("linux")); 288 289 EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux")); 290 291 // Check that normalizing a permutated set of valid components returns a 292 // triple with the unpermuted components. 293 StringRef C[4]; 294 for (int Arch = 1+Triple::UnknownArch; Arch <= Triple::LastArchType; ++Arch) { 295 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 296 for (int Vendor = 1+Triple::UnknownVendor; Vendor <= Triple::LastVendorType; 297 ++Vendor) { 298 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 299 for (int OS = 1+Triple::UnknownOS; OS <= Triple::LastOSType; ++OS) { 300 if (OS == Triple::Win32) 301 continue; 302 303 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 304 305 std::string E = Join(C[0], C[1], C[2]); 306 EXPECT_EQ(E, Triple::normalize(Join(C[0], C[1], C[2]))); 307 308 EXPECT_EQ(E, Triple::normalize(Join(C[0], C[2], C[1]))); 309 EXPECT_EQ(E, Triple::normalize(Join(C[1], C[2], C[0]))); 310 EXPECT_EQ(E, Triple::normalize(Join(C[1], C[0], C[2]))); 311 EXPECT_EQ(E, Triple::normalize(Join(C[2], C[0], C[1]))); 312 EXPECT_EQ(E, Triple::normalize(Join(C[2], C[1], C[0]))); 313 314 for (int Env = 1 + Triple::UnknownEnvironment; Env <= Triple::LastEnvironmentType; 315 ++Env) { 316 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 317 318 std::string F = Join(C[0], C[1], C[2], C[3]); 319 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[2], C[3]))); 320 321 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[3], C[2]))); 322 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[3], C[1]))); 323 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[1], C[3]))); 324 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[1], C[2]))); 325 EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[2], C[1]))); 326 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[3], C[0]))); 327 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[0], C[3]))); 328 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[0], C[2]))); 329 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[2], C[0]))); 330 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[2], C[3]))); 331 EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[3], C[2]))); 332 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[0], C[1]))); 333 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[1], C[0]))); 334 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[1], C[3]))); 335 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[3], C[1]))); 336 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[3], C[0]))); 337 EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[0], C[3]))); 338 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[1], C[2]))); 339 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[2], C[1]))); 340 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[2], C[0]))); 341 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[0], C[2]))); 342 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[0], C[1]))); 343 EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[1], C[0]))); 344 } 345 } 346 } 347 } 348 349 // Various real-world funky triples. The value returned by GCC's config.sub 350 // is given in the comment. 351 EXPECT_EQ("i386--windows-gnu", Triple::normalize("i386-mingw32")); // i386-pc-mingw32 352 EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 353 EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 354 EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 355 EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu 356 EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi 357 } 358 359 TEST(TripleTest, MutateName) { 360 Triple T; 361 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 362 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 363 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 364 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 365 366 T.setArchName("i386"); 367 EXPECT_EQ(Triple::x86, T.getArch()); 368 EXPECT_EQ("i386--", T.getTriple()); 369 370 T.setVendorName("pc"); 371 EXPECT_EQ(Triple::x86, T.getArch()); 372 EXPECT_EQ(Triple::PC, T.getVendor()); 373 EXPECT_EQ("i386-pc-", T.getTriple()); 374 375 T.setOSName("linux"); 376 EXPECT_EQ(Triple::x86, T.getArch()); 377 EXPECT_EQ(Triple::PC, T.getVendor()); 378 EXPECT_EQ(Triple::Linux, T.getOS()); 379 EXPECT_EQ("i386-pc-linux", T.getTriple()); 380 381 T.setEnvironmentName("gnu"); 382 EXPECT_EQ(Triple::x86, T.getArch()); 383 EXPECT_EQ(Triple::PC, T.getVendor()); 384 EXPECT_EQ(Triple::Linux, T.getOS()); 385 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 386 387 T.setOSName("freebsd"); 388 EXPECT_EQ(Triple::x86, T.getArch()); 389 EXPECT_EQ(Triple::PC, T.getVendor()); 390 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 391 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 392 393 T.setOSAndEnvironmentName("darwin"); 394 EXPECT_EQ(Triple::x86, T.getArch()); 395 EXPECT_EQ(Triple::PC, T.getVendor()); 396 EXPECT_EQ(Triple::Darwin, T.getOS()); 397 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 398 399 T.setEnvironmentName("amdopencl"); 400 EXPECT_EQ(Triple::AMDOpenCL, T.getEnvironment()); 401 } 402 403 TEST(TripleTest, BitWidthPredicates) { 404 Triple T; 405 EXPECT_FALSE(T.isArch16Bit()); 406 EXPECT_FALSE(T.isArch32Bit()); 407 EXPECT_FALSE(T.isArch64Bit()); 408 409 T.setArch(Triple::arm); 410 EXPECT_FALSE(T.isArch16Bit()); 411 EXPECT_TRUE(T.isArch32Bit()); 412 EXPECT_FALSE(T.isArch64Bit()); 413 414 T.setArch(Triple::hexagon); 415 EXPECT_FALSE(T.isArch16Bit()); 416 EXPECT_TRUE(T.isArch32Bit()); 417 EXPECT_FALSE(T.isArch64Bit()); 418 419 T.setArch(Triple::mips); 420 EXPECT_FALSE(T.isArch16Bit()); 421 EXPECT_TRUE(T.isArch32Bit()); 422 EXPECT_FALSE(T.isArch64Bit()); 423 424 T.setArch(Triple::mips64); 425 EXPECT_FALSE(T.isArch16Bit()); 426 EXPECT_FALSE(T.isArch32Bit()); 427 EXPECT_TRUE(T.isArch64Bit()); 428 429 T.setArch(Triple::msp430); 430 EXPECT_TRUE(T.isArch16Bit()); 431 EXPECT_FALSE(T.isArch32Bit()); 432 EXPECT_FALSE(T.isArch64Bit()); 433 434 T.setArch(Triple::ppc); 435 EXPECT_FALSE(T.isArch16Bit()); 436 EXPECT_TRUE(T.isArch32Bit()); 437 EXPECT_FALSE(T.isArch64Bit()); 438 439 T.setArch(Triple::ppc64); 440 EXPECT_FALSE(T.isArch16Bit()); 441 EXPECT_FALSE(T.isArch32Bit()); 442 EXPECT_TRUE(T.isArch64Bit()); 443 444 T.setArch(Triple::x86); 445 EXPECT_FALSE(T.isArch16Bit()); 446 EXPECT_TRUE(T.isArch32Bit()); 447 EXPECT_FALSE(T.isArch64Bit()); 448 449 T.setArch(Triple::x86_64); 450 EXPECT_FALSE(T.isArch16Bit()); 451 EXPECT_FALSE(T.isArch32Bit()); 452 EXPECT_TRUE(T.isArch64Bit()); 453 454 T.setArch(Triple::amdil); 455 EXPECT_FALSE(T.isArch16Bit()); 456 EXPECT_TRUE(T.isArch32Bit()); 457 EXPECT_FALSE(T.isArch64Bit()); 458 459 T.setArch(Triple::amdil64); 460 EXPECT_FALSE(T.isArch16Bit()); 461 EXPECT_FALSE(T.isArch32Bit()); 462 EXPECT_TRUE(T.isArch64Bit()); 463 464 T.setArch(Triple::hsail); 465 EXPECT_FALSE(T.isArch16Bit()); 466 EXPECT_TRUE(T.isArch32Bit()); 467 EXPECT_FALSE(T.isArch64Bit()); 468 469 T.setArch(Triple::hsail64); 470 EXPECT_FALSE(T.isArch16Bit()); 471 EXPECT_FALSE(T.isArch32Bit()); 472 EXPECT_TRUE(T.isArch64Bit()); 473 474 T.setArch(Triple::spir); 475 EXPECT_FALSE(T.isArch16Bit()); 476 EXPECT_TRUE(T.isArch32Bit()); 477 EXPECT_FALSE(T.isArch64Bit()); 478 479 T.setArch(Triple::spir64); 480 EXPECT_FALSE(T.isArch16Bit()); 481 EXPECT_FALSE(T.isArch32Bit()); 482 EXPECT_TRUE(T.isArch64Bit()); 483 484 T.setArch(Triple::sparc); 485 EXPECT_FALSE(T.isArch16Bit()); 486 EXPECT_TRUE(T.isArch32Bit()); 487 EXPECT_FALSE(T.isArch64Bit()); 488 489 T.setArch(Triple::sparcel); 490 EXPECT_FALSE(T.isArch16Bit()); 491 EXPECT_TRUE(T.isArch32Bit()); 492 EXPECT_FALSE(T.isArch64Bit()); 493 494 T.setArch(Triple::sparcv9); 495 EXPECT_FALSE(T.isArch16Bit()); 496 EXPECT_FALSE(T.isArch32Bit()); 497 EXPECT_TRUE(T.isArch64Bit()); 498 499 T.setArch(Triple::wasm32); 500 EXPECT_FALSE(T.isArch16Bit()); 501 EXPECT_TRUE(T.isArch32Bit()); 502 EXPECT_FALSE(T.isArch64Bit()); 503 504 T.setArch(Triple::wasm64); 505 EXPECT_FALSE(T.isArch16Bit()); 506 EXPECT_FALSE(T.isArch32Bit()); 507 EXPECT_TRUE(T.isArch64Bit()); 508 509 T.setArch(Triple::avr); 510 EXPECT_TRUE(T.isArch16Bit()); 511 EXPECT_FALSE(T.isArch32Bit()); 512 EXPECT_FALSE(T.isArch64Bit()); 513 514 T.setArch(Triple::lanai); 515 EXPECT_FALSE(T.isArch16Bit()); 516 EXPECT_TRUE(T.isArch32Bit()); 517 EXPECT_FALSE(T.isArch64Bit()); 518 } 519 520 TEST(TripleTest, BitWidthArchVariants) { 521 Triple T; 522 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 523 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 524 525 T.setArch(Triple::UnknownArch); 526 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 527 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 528 529 T.setArch(Triple::mips); 530 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 531 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 532 533 T.setArch(Triple::mipsel); 534 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 535 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 536 537 T.setArch(Triple::ppc); 538 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 539 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 540 541 T.setArch(Triple::nvptx); 542 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 543 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 544 545 T.setArch(Triple::sparc); 546 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 547 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 548 549 T.setArch(Triple::x86); 550 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 551 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 552 553 T.setArch(Triple::mips64); 554 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 555 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 556 557 T.setArch(Triple::mips64el); 558 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 559 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 560 561 T.setArch(Triple::ppc64); 562 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 563 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 564 565 T.setArch(Triple::nvptx64); 566 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 567 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 568 569 T.setArch(Triple::sparcv9); 570 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 571 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 572 573 T.setArch(Triple::x86_64); 574 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 575 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 576 577 T.setArch(Triple::amdil); 578 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 579 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 580 581 T.setArch(Triple::amdil64); 582 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 583 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 584 585 T.setArch(Triple::hsail); 586 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 587 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 588 589 T.setArch(Triple::hsail64); 590 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 591 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 592 593 T.setArch(Triple::spir); 594 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 595 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 596 597 T.setArch(Triple::spir64); 598 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 599 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 600 601 T.setArch(Triple::wasm32); 602 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 603 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 604 605 T.setArch(Triple::wasm64); 606 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 607 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 608 } 609 610 TEST(TripleTest, EndianArchVariants) { 611 Triple T; 612 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 613 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 614 615 T.setArch(Triple::UnknownArch); 616 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 617 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 618 619 T.setArch(Triple::aarch64_be); 620 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 621 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 622 623 T.setArch(Triple::aarch64); 624 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 625 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 626 627 T.setArch(Triple::armeb); 628 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 629 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 630 631 T.setArch(Triple::arm); 632 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 633 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 634 635 T.setArch(Triple::bpfeb); 636 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 637 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 638 639 T.setArch(Triple::bpfel); 640 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 641 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 642 643 T.setArch(Triple::mips64); 644 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 645 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 646 647 T.setArch(Triple::mips64el); 648 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 649 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 650 651 T.setArch(Triple::mips); 652 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 653 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 654 655 T.setArch(Triple::mipsel); 656 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 657 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 658 659 T.setArch(Triple::ppc); 660 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 661 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 662 663 T.setArch(Triple::ppc64); 664 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 665 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 666 667 T.setArch(Triple::ppc64le); 668 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 669 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 670 671 T.setArch(Triple::sparc); 672 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 673 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 674 675 T.setArch(Triple::sparcel); 676 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 677 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 678 679 T.setArch(Triple::thumb); 680 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 681 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 682 683 T.setArch(Triple::thumbeb); 684 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 685 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 686 687 T.setArch(Triple::lanai); 688 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 689 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 690 } 691 692 TEST(TripleTest, getOSVersion) { 693 Triple T; 694 unsigned Major, Minor, Micro; 695 696 T = Triple("i386-apple-darwin9"); 697 EXPECT_TRUE(T.isMacOSX()); 698 EXPECT_FALSE(T.isiOS()); 699 EXPECT_FALSE(T.isArch16Bit()); 700 EXPECT_TRUE(T.isArch32Bit()); 701 EXPECT_FALSE(T.isArch64Bit()); 702 T.getMacOSXVersion(Major, Minor, Micro); 703 EXPECT_EQ((unsigned)10, Major); 704 EXPECT_EQ((unsigned)5, Minor); 705 EXPECT_EQ((unsigned)0, Micro); 706 T.getiOSVersion(Major, Minor, Micro); 707 EXPECT_EQ((unsigned)5, Major); 708 EXPECT_EQ((unsigned)0, Minor); 709 EXPECT_EQ((unsigned)0, Micro); 710 711 T = Triple("x86_64-apple-darwin9"); 712 EXPECT_TRUE(T.isMacOSX()); 713 EXPECT_FALSE(T.isiOS()); 714 EXPECT_FALSE(T.isArch16Bit()); 715 EXPECT_FALSE(T.isArch32Bit()); 716 EXPECT_TRUE(T.isArch64Bit()); 717 T.getMacOSXVersion(Major, Minor, Micro); 718 EXPECT_EQ((unsigned)10, Major); 719 EXPECT_EQ((unsigned)5, Minor); 720 EXPECT_EQ((unsigned)0, Micro); 721 T.getiOSVersion(Major, Minor, Micro); 722 EXPECT_EQ((unsigned)5, Major); 723 EXPECT_EQ((unsigned)0, Minor); 724 EXPECT_EQ((unsigned)0, Micro); 725 726 T = Triple("x86_64-apple-macosx"); 727 EXPECT_TRUE(T.isMacOSX()); 728 EXPECT_FALSE(T.isiOS()); 729 EXPECT_FALSE(T.isArch16Bit()); 730 EXPECT_FALSE(T.isArch32Bit()); 731 EXPECT_TRUE(T.isArch64Bit()); 732 T.getMacOSXVersion(Major, Minor, Micro); 733 EXPECT_EQ((unsigned)10, Major); 734 EXPECT_EQ((unsigned)4, Minor); 735 EXPECT_EQ((unsigned)0, Micro); 736 T.getiOSVersion(Major, Minor, Micro); 737 EXPECT_EQ((unsigned)5, Major); 738 EXPECT_EQ((unsigned)0, Minor); 739 EXPECT_EQ((unsigned)0, Micro); 740 741 T = Triple("x86_64-apple-macosx10.7"); 742 EXPECT_TRUE(T.isMacOSX()); 743 EXPECT_FALSE(T.isiOS()); 744 EXPECT_FALSE(T.isArch16Bit()); 745 EXPECT_FALSE(T.isArch32Bit()); 746 EXPECT_TRUE(T.isArch64Bit()); 747 T.getMacOSXVersion(Major, Minor, Micro); 748 EXPECT_EQ((unsigned)10, Major); 749 EXPECT_EQ((unsigned)7, Minor); 750 EXPECT_EQ((unsigned)0, Micro); 751 T.getiOSVersion(Major, Minor, Micro); 752 EXPECT_EQ((unsigned)5, Major); 753 EXPECT_EQ((unsigned)0, Minor); 754 EXPECT_EQ((unsigned)0, Micro); 755 756 T = Triple("armv7-apple-ios"); 757 EXPECT_FALSE(T.isMacOSX()); 758 EXPECT_TRUE(T.isiOS()); 759 EXPECT_FALSE(T.isArch16Bit()); 760 EXPECT_TRUE(T.isArch32Bit()); 761 EXPECT_FALSE(T.isArch64Bit()); 762 T.getMacOSXVersion(Major, Minor, Micro); 763 EXPECT_EQ((unsigned)10, Major); 764 EXPECT_EQ((unsigned)4, Minor); 765 EXPECT_EQ((unsigned)0, Micro); 766 T.getiOSVersion(Major, Minor, Micro); 767 EXPECT_EQ((unsigned)5, Major); 768 EXPECT_EQ((unsigned)0, Minor); 769 EXPECT_EQ((unsigned)0, Micro); 770 771 T = Triple("armv7-apple-ios7.0"); 772 EXPECT_FALSE(T.isMacOSX()); 773 EXPECT_TRUE(T.isiOS()); 774 EXPECT_FALSE(T.isArch16Bit()); 775 EXPECT_TRUE(T.isArch32Bit()); 776 EXPECT_FALSE(T.isArch64Bit()); 777 T.getMacOSXVersion(Major, Minor, Micro); 778 EXPECT_EQ((unsigned)10, Major); 779 EXPECT_EQ((unsigned)4, Minor); 780 EXPECT_EQ((unsigned)0, Micro); 781 T.getiOSVersion(Major, Minor, Micro); 782 EXPECT_EQ((unsigned)7, Major); 783 EXPECT_EQ((unsigned)0, Minor); 784 EXPECT_EQ((unsigned)0, Micro); 785 } 786 787 TEST(TripleTest, FileFormat) { 788 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 789 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 790 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 791 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 792 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 793 794 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 795 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 796 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 797 798 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 799 800 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 801 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 802 803 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 804 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 805 806 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 807 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 808 809 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 810 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 811 812 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 813 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 814 815 Triple T = Triple(""); 816 T.setObjectFormat(Triple::ELF); 817 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 818 } 819 820 TEST(TripleTest, NormalizeWindows) { 821 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 822 EXPECT_EQ("i686--windows-msvc", Triple::normalize("i686-win32")); 823 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 824 EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32")); 825 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 826 EXPECT_EQ("i686--windows-gnu", Triple::normalize("i686-mingw32-w64")); 827 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 828 EXPECT_EQ("i686--windows-cygnus", Triple::normalize("i686-cygwin")); 829 830 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 831 EXPECT_EQ("x86_64--windows-msvc", Triple::normalize("x86_64-win32")); 832 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 833 EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32")); 834 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32-w64")); 835 EXPECT_EQ("x86_64--windows-gnu", Triple::normalize("x86_64-mingw32-w64")); 836 837 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 838 EXPECT_EQ("i686--windows-elf", Triple::normalize("i686-win32-elf")); 839 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 840 EXPECT_EQ("i686--windows-macho", Triple::normalize("i686-win32-macho")); 841 842 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 843 EXPECT_EQ("x86_64--windows-elf", Triple::normalize("x86_64-win32-elf")); 844 EXPECT_EQ("x86_64-pc-windows-macho", Triple::normalize("x86_64-pc-win32-macho")); 845 EXPECT_EQ("x86_64--windows-macho", Triple::normalize("x86_64-win32-macho")); 846 847 EXPECT_EQ("i686-pc-windows-cygnus", 848 Triple::normalize("i686-pc-windows-cygnus")); 849 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 850 EXPECT_EQ("i686-pc-windows-itanium", Triple::normalize("i686-pc-windows-itanium")); 851 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 852 853 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-windows-elf-elf")); 854 } 855 856 TEST(TripleTest, getARMCPUForArch) { 857 // Standard ARM Architectures. 858 { 859 llvm::Triple Triple("armv4-unknown-eabi"); 860 EXPECT_EQ("strongarm", Triple.getARMCPUForArch()); 861 } 862 { 863 llvm::Triple Triple("armv4t-unknown-eabi"); 864 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch()); 865 } 866 { 867 llvm::Triple Triple("armv5-unknown-eabi"); 868 EXPECT_EQ("arm10tdmi", Triple.getARMCPUForArch()); 869 } 870 { 871 llvm::Triple Triple("armv5t-unknown-eabi"); 872 EXPECT_EQ("arm10tdmi", Triple.getARMCPUForArch()); 873 } 874 { 875 llvm::Triple Triple("armv5e-unknown-eabi"); 876 EXPECT_EQ("arm1022e", Triple.getARMCPUForArch()); 877 } 878 { 879 llvm::Triple Triple("armv5tej-unknown-eabi"); 880 EXPECT_EQ("arm926ej-s", Triple.getARMCPUForArch()); 881 } 882 { 883 llvm::Triple Triple("armv6-unknown-eabi"); 884 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch()); 885 } 886 { 887 llvm::Triple Triple("armv6j-unknown-eabi"); 888 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch()); 889 } 890 { 891 llvm::Triple Triple("armv6k-unknown-eabi"); 892 EXPECT_EQ("arm1176j-s", Triple.getARMCPUForArch()); 893 } 894 { 895 llvm::Triple Triple("armv6kz-unknown-eabi"); 896 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 897 } 898 { 899 llvm::Triple Triple("armv6zk-unknown-eabi"); 900 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 901 } 902 { 903 llvm::Triple Triple("armv6t2-unknown-eabi"); 904 EXPECT_EQ("arm1156t2-s", Triple.getARMCPUForArch()); 905 } 906 { 907 llvm::Triple Triple("armv6m-unknown-eabi"); 908 EXPECT_EQ("cortex-m0", Triple.getARMCPUForArch()); 909 } 910 { 911 llvm::Triple Triple("armv7-unknown-eabi"); 912 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 913 } 914 { 915 llvm::Triple Triple("armv7a-unknown-eabi"); 916 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 917 } 918 { 919 llvm::Triple Triple("armv7m-unknown-eabi"); 920 EXPECT_EQ("cortex-m3", Triple.getARMCPUForArch()); 921 } 922 { 923 llvm::Triple Triple("armv7r-unknown-eabi"); 924 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch()); 925 } 926 { 927 llvm::Triple Triple("armv7r-unknown-eabi"); 928 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch()); 929 } 930 { 931 llvm::Triple Triple("armv7r-unknown-eabi"); 932 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch()); 933 } 934 { 935 llvm::Triple Triple("armv7r-unknown-eabi"); 936 EXPECT_EQ("cortex-r4", Triple.getARMCPUForArch()); 937 } 938 { 939 llvm::Triple Triple("armv8a-unknown-eabi"); 940 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch()); 941 } 942 { 943 llvm::Triple Triple("armv8.1a-unknown-eabi"); 944 EXPECT_EQ("generic", Triple.getARMCPUForArch()); 945 } 946 // Non-synonym names, using -march style, not default arch. 947 { 948 llvm::Triple Triple("arm"); 949 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch("armv7-a")); 950 } 951 { 952 llvm::Triple Triple("arm"); 953 EXPECT_EQ("cortex-m3", Triple.getARMCPUForArch("armv7-m")); 954 } 955 { 956 llvm::Triple Triple("arm"); 957 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch("armv8")); 958 } 959 { 960 llvm::Triple Triple("arm"); 961 EXPECT_EQ("cortex-a53", Triple.getARMCPUForArch("armv8-a")); 962 } 963 // Platform specific defaults. 964 { 965 llvm::Triple Triple("arm--nacl"); 966 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 967 } 968 { 969 llvm::Triple Triple("armv6-unknown-freebsd"); 970 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 971 } 972 { 973 llvm::Triple Triple("thumbv6-unknown-freebsd"); 974 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 975 } 976 { 977 llvm::Triple Triple("armebv6-unknown-freebsd"); 978 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 979 } 980 { 981 llvm::Triple Triple("arm--win32"); 982 EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch()); 983 } 984 // Some alternative architectures 985 { 986 llvm::Triple Triple("xscale-unknown-eabi"); 987 EXPECT_EQ("xscale", Triple.getARMCPUForArch()); 988 } 989 { 990 llvm::Triple Triple("iwmmxt-unknown-eabi"); 991 EXPECT_EQ("iwmmxt", Triple.getARMCPUForArch()); 992 } 993 { 994 llvm::Triple Triple("armv7s-apple-ios7"); 995 EXPECT_EQ("swift", Triple.getARMCPUForArch()); 996 } 997 { 998 llvm::Triple Triple("armv7k-apple-ios9"); 999 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1000 } 1001 { 1002 llvm::Triple Triple("armv7k-apple-watchos3"); 1003 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1004 } 1005 { 1006 llvm::Triple Triple("armv7k-apple-tvos9"); 1007 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1008 } 1009 { 1010 llvm::Triple Triple("armv7em-apple-ios7"); 1011 EXPECT_EQ("cortex-m4", Triple.getARMCPUForArch()); 1012 } 1013 { 1014 llvm::Triple Triple("armv7l-linux-gnueabihf"); 1015 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 1016 } 1017 { 1018 llvm::Triple Triple("armv6sm-apple-ios7"); 1019 EXPECT_EQ("cortex-m0", Triple.getARMCPUForArch()); 1020 } 1021 // armeb is permitted, but armebeb is not 1022 { 1023 llvm::Triple Triple("armeb-none-eabi"); 1024 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch()); 1025 } 1026 { 1027 llvm::Triple Triple("armebeb-none-eabi"); 1028 EXPECT_EQ("", Triple.getARMCPUForArch()); 1029 } 1030 { 1031 llvm::Triple Triple("armebv6eb-none-eabi"); 1032 EXPECT_EQ("", Triple.getARMCPUForArch()); 1033 } 1034 // armebv6 and armv6eb are permitted, but armebv6eb is not 1035 { 1036 llvm::Triple Triple("armebv6-non-eabi"); 1037 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch()); 1038 } 1039 { 1040 llvm::Triple Triple("armv6eb-none-eabi"); 1041 EXPECT_EQ("arm1136jf-s", Triple.getARMCPUForArch()); 1042 } 1043 // xscaleeb is permitted, but armebxscale is not 1044 { 1045 llvm::Triple Triple("xscaleeb-none-eabi"); 1046 EXPECT_EQ("xscale", Triple.getARMCPUForArch()); 1047 } 1048 { 1049 llvm::Triple Triple("armebxscale-none-eabi"); 1050 EXPECT_EQ("", Triple.getARMCPUForArch()); 1051 } 1052 } 1053 1054 TEST(TripleTest, NormalizeARM) { 1055 EXPECT_EQ("armv6--netbsd-eabi", Triple::normalize("armv6-netbsd-eabi")); 1056 EXPECT_EQ("armv7--netbsd-eabi", Triple::normalize("armv7-netbsd-eabi")); 1057 EXPECT_EQ("armv6eb--netbsd-eabi", Triple::normalize("armv6eb-netbsd-eabi")); 1058 EXPECT_EQ("armv7eb--netbsd-eabi", Triple::normalize("armv7eb-netbsd-eabi")); 1059 EXPECT_EQ("armv6--netbsd-eabihf", Triple::normalize("armv6-netbsd-eabihf")); 1060 EXPECT_EQ("armv7--netbsd-eabihf", Triple::normalize("armv7-netbsd-eabihf")); 1061 EXPECT_EQ("armv6eb--netbsd-eabihf", Triple::normalize("armv6eb-netbsd-eabihf")); 1062 EXPECT_EQ("armv7eb--netbsd-eabihf", Triple::normalize("armv7eb-netbsd-eabihf")); 1063 1064 Triple T; 1065 T = Triple("armv6--netbsd-eabi"); 1066 EXPECT_EQ(Triple::arm, T.getArch()); 1067 T = Triple("armv6eb--netbsd-eabi"); 1068 EXPECT_EQ(Triple::armeb, T.getArch()); 1069 } 1070 1071 TEST(TripleTest, ParseARMArch) { 1072 // ARM 1073 { 1074 Triple T = Triple("arm"); 1075 EXPECT_EQ(Triple::arm, T.getArch()); 1076 } 1077 { 1078 Triple T = Triple("armv6t2"); 1079 EXPECT_EQ(Triple::arm, T.getArch()); 1080 } 1081 { 1082 Triple T = Triple("armv8"); 1083 EXPECT_EQ(Triple::arm, T.getArch()); 1084 } 1085 { 1086 Triple T = Triple("armeb"); 1087 EXPECT_EQ(Triple::armeb, T.getArch()); 1088 } 1089 { 1090 Triple T = Triple("armv5eb"); 1091 EXPECT_EQ(Triple::armeb, T.getArch()); 1092 } 1093 { 1094 Triple T = Triple("armebv7m"); 1095 EXPECT_EQ(Triple::armeb, T.getArch()); 1096 } 1097 { 1098 Triple T = Triple("armv7eb"); 1099 EXPECT_EQ(Triple::armeb, T.getArch()); 1100 } 1101 // THUMB 1102 { 1103 Triple T = Triple("thumb"); 1104 EXPECT_EQ(Triple::thumb, T.getArch()); 1105 } 1106 { 1107 Triple T = Triple("thumbv7a"); 1108 EXPECT_EQ(Triple::thumb, T.getArch()); 1109 } 1110 { 1111 Triple T = Triple("thumbeb"); 1112 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1113 } 1114 { 1115 Triple T = Triple("thumbv4teb"); 1116 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1117 } 1118 { 1119 Triple T = Triple("thumbebv7"); 1120 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1121 } 1122 { 1123 Triple T = Triple("armv6m"); 1124 EXPECT_EQ(Triple::thumb, T.getArch()); 1125 } 1126 { 1127 Triple T = Triple("thumbv2"); 1128 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1129 } 1130 { 1131 Triple T = Triple("thumbebv6eb"); 1132 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1133 } 1134 // AARCH64 1135 { 1136 Triple T = Triple("arm64"); 1137 EXPECT_EQ(Triple::aarch64, T.getArch()); 1138 } 1139 { 1140 Triple T = Triple("aarch64"); 1141 EXPECT_EQ(Triple::aarch64, T.getArch()); 1142 } 1143 { 1144 Triple T = Triple("aarch64_be"); 1145 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 1146 } 1147 { 1148 Triple T = Triple("aarch64be"); 1149 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1150 } 1151 { 1152 Triple T = Triple("arm64be"); 1153 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1154 } 1155 } 1156 } // end anonymous namespace 1157