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