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 "llvm/ADT/Triple.h" 11 #include "gtest/gtest.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("i386-pc-contiki-unknown"); 91 EXPECT_EQ(Triple::x86, T.getArch()); 92 EXPECT_EQ(Triple::PC, T.getVendor()); 93 EXPECT_EQ(Triple::Contiki, T.getOS()); 94 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 95 96 T = Triple("i386-pc-hurd-gnu"); 97 EXPECT_EQ(Triple::x86, T.getArch()); 98 EXPECT_EQ(Triple::PC, T.getVendor()); 99 EXPECT_EQ(Triple::Hurd, T.getOS()); 100 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 101 102 T = Triple("x86_64-pc-linux-gnu"); 103 EXPECT_EQ(Triple::x86_64, T.getArch()); 104 EXPECT_EQ(Triple::PC, T.getVendor()); 105 EXPECT_EQ(Triple::Linux, T.getOS()); 106 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 107 108 T = Triple("x86_64-pc-linux-musl"); 109 EXPECT_EQ(Triple::x86_64, T.getArch()); 110 EXPECT_EQ(Triple::PC, T.getVendor()); 111 EXPECT_EQ(Triple::Linux, T.getOS()); 112 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 113 114 T = Triple("powerpc-bgp-linux"); 115 EXPECT_EQ(Triple::ppc, T.getArch()); 116 EXPECT_EQ(Triple::BGP, T.getVendor()); 117 EXPECT_EQ(Triple::Linux, T.getOS()); 118 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 119 120 T = Triple("powerpc-bgp-cnk"); 121 EXPECT_EQ(Triple::ppc, T.getArch()); 122 EXPECT_EQ(Triple::BGP, T.getVendor()); 123 EXPECT_EQ(Triple::CNK, T.getOS()); 124 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 125 126 T = Triple("ppc-bgp-linux"); 127 EXPECT_EQ(Triple::ppc, T.getArch()); 128 EXPECT_EQ(Triple::BGP, T.getVendor()); 129 EXPECT_EQ(Triple::Linux, T.getOS()); 130 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 131 132 T = Triple("ppc32-bgp-linux"); 133 EXPECT_EQ(Triple::ppc, T.getArch()); 134 EXPECT_EQ(Triple::BGP, T.getVendor()); 135 EXPECT_EQ(Triple::Linux, T.getOS()); 136 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 137 138 T = Triple("powerpc64-bgq-linux"); 139 EXPECT_EQ(Triple::ppc64, T.getArch()); 140 EXPECT_EQ(Triple::BGQ, T.getVendor()); 141 EXPECT_EQ(Triple::Linux, T.getOS()); 142 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 143 144 T = Triple("ppc64-bgq-linux"); 145 EXPECT_EQ(Triple::ppc64, T.getArch()); 146 EXPECT_EQ(Triple::BGQ, T.getVendor()); 147 EXPECT_EQ(Triple::Linux, T.getOS()); 148 149 T = Triple("powerpc-ibm-aix"); 150 EXPECT_EQ(Triple::ppc, T.getArch()); 151 EXPECT_EQ(Triple::IBM, T.getVendor()); 152 EXPECT_EQ(Triple::AIX, T.getOS()); 153 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 154 155 T = Triple("powerpc64-ibm-aix"); 156 EXPECT_EQ(Triple::ppc64, T.getArch()); 157 EXPECT_EQ(Triple::IBM, T.getVendor()); 158 EXPECT_EQ(Triple::AIX, T.getOS()); 159 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 160 161 T = Triple("powerpc-dunno-notsure"); 162 EXPECT_EQ(Triple::ppc, T.getArch()); 163 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 164 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 165 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 166 167 T = Triple("arm-none-none-eabi"); 168 EXPECT_EQ(Triple::arm, T.getArch()); 169 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 170 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 171 EXPECT_EQ(Triple::EABI, T.getEnvironment()); 172 173 T = Triple("arm-none-linux-musleabi"); 174 EXPECT_EQ(Triple::arm, T.getArch()); 175 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 176 EXPECT_EQ(Triple::Linux, T.getOS()); 177 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment()); 178 179 T = Triple("armv6hl-none-linux-gnueabi"); 180 EXPECT_EQ(Triple::arm, T.getArch()); 181 EXPECT_EQ(Triple::Linux, T.getOS()); 182 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 183 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 184 185 T = Triple("armv7hl-none-linux-gnueabi"); 186 EXPECT_EQ(Triple::arm, T.getArch()); 187 EXPECT_EQ(Triple::Linux, T.getOS()); 188 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 189 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 190 191 T = Triple("amdil-unknown-unknown"); 192 EXPECT_EQ(Triple::amdil, T.getArch()); 193 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 194 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 195 196 T = Triple("amdil64-unknown-unknown"); 197 EXPECT_EQ(Triple::amdil64, T.getArch()); 198 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 199 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 200 201 T = Triple("hsail-unknown-unknown"); 202 EXPECT_EQ(Triple::hsail, T.getArch()); 203 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 204 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 205 206 T = Triple("hsail64-unknown-unknown"); 207 EXPECT_EQ(Triple::hsail64, T.getArch()); 208 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 209 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 210 211 T = Triple("sparcel-unknown-unknown"); 212 EXPECT_EQ(Triple::sparcel, T.getArch()); 213 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 214 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 215 216 T = Triple("spir-unknown-unknown"); 217 EXPECT_EQ(Triple::spir, T.getArch()); 218 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 219 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 220 221 T = Triple("spir64-unknown-unknown"); 222 EXPECT_EQ(Triple::spir64, T.getArch()); 223 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 224 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 225 226 T = Triple("x86_64-unknown-ananas"); 227 EXPECT_EQ(Triple::x86_64, T.getArch()); 228 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 229 EXPECT_EQ(Triple::Ananas, T.getOS()); 230 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 231 232 T = Triple("x86_64-unknown-cloudabi"); 233 EXPECT_EQ(Triple::x86_64, T.getArch()); 234 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 235 EXPECT_EQ(Triple::CloudABI, T.getOS()); 236 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 237 238 T = Triple("x86_64-unknown-fuchsia"); 239 EXPECT_EQ(Triple::x86_64, T.getArch()); 240 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 241 EXPECT_EQ(Triple::Fuchsia, T.getOS()); 242 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 243 244 T = Triple("x86_64-unknown-hermit"); 245 EXPECT_EQ(Triple::x86_64, T.getArch()); 246 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 247 EXPECT_EQ(Triple::HermitCore, T.getOS()); 248 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 249 250 T = Triple("wasm32-unknown-unknown"); 251 EXPECT_EQ(Triple::wasm32, T.getArch()); 252 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 253 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 254 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 255 256 T = Triple("wasm64-unknown-unknown"); 257 EXPECT_EQ(Triple::wasm64, T.getArch()); 258 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 259 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 260 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 261 262 T = Triple("avr-unknown-unknown"); 263 EXPECT_EQ(Triple::avr, T.getArch()); 264 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 265 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 266 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 267 268 T = Triple("avr"); 269 EXPECT_EQ(Triple::avr, T.getArch()); 270 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 271 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 272 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 273 274 T = Triple("lanai-unknown-unknown"); 275 EXPECT_EQ(Triple::lanai, T.getArch()); 276 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 277 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 278 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 279 280 T = Triple("lanai"); 281 EXPECT_EQ(Triple::lanai, T.getArch()); 282 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 283 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 284 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 285 286 T = Triple("amdgcn-mesa-mesa3d"); 287 EXPECT_EQ(Triple::amdgcn, T.getArch()); 288 EXPECT_EQ(Triple::Mesa, T.getVendor()); 289 EXPECT_EQ(Triple::Mesa3D, T.getOS()); 290 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 291 292 T = Triple("amdgcn-amd-amdhsa"); 293 EXPECT_EQ(Triple::amdgcn, T.getArch()); 294 EXPECT_EQ(Triple::AMD, T.getVendor()); 295 EXPECT_EQ(Triple::AMDHSA, T.getOS()); 296 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 297 298 T = Triple("amdgcn-amd-amdpal"); 299 EXPECT_EQ(Triple::amdgcn, T.getArch()); 300 EXPECT_EQ(Triple::AMD, T.getVendor()); 301 EXPECT_EQ(Triple::AMDPAL, T.getOS()); 302 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 303 304 T = Triple("riscv32-unknown-unknown"); 305 EXPECT_EQ(Triple::riscv32, T.getArch()); 306 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 307 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 308 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 309 310 T = Triple("riscv64-unknown-linux"); 311 EXPECT_EQ(Triple::riscv64, T.getArch()); 312 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 313 EXPECT_EQ(Triple::Linux, T.getOS()); 314 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 315 316 T = Triple("riscv64-unknown-freebsd"); 317 EXPECT_EQ(Triple::riscv64, T.getArch()); 318 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 319 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 320 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 321 322 T = Triple("armv7hl-suse-linux-gnueabi"); 323 EXPECT_EQ(Triple::arm, T.getArch()); 324 EXPECT_EQ(Triple::SUSE, T.getVendor()); 325 EXPECT_EQ(Triple::Linux, T.getOS()); 326 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 327 328 T = Triple("i586-pc-haiku"); 329 EXPECT_EQ(Triple::x86, T.getArch()); 330 EXPECT_EQ(Triple::PC, T.getVendor()); 331 EXPECT_EQ(Triple::Haiku, T.getOS()); 332 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 333 334 T = Triple("x86_64-unknown-haiku"); 335 EXPECT_EQ(Triple::x86_64, T.getArch()); 336 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 337 EXPECT_EQ(Triple::Haiku, T.getOS()); 338 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 339 340 T = Triple("mips-mti-linux-gnu"); 341 EXPECT_EQ(Triple::mips, T.getArch()); 342 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 343 EXPECT_EQ(Triple::Linux, T.getOS()); 344 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 345 346 T = Triple("mipsel-img-linux-gnu"); 347 EXPECT_EQ(Triple::mipsel, T.getArch()); 348 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 349 EXPECT_EQ(Triple::Linux, T.getOS()); 350 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 351 352 T = Triple("mips64-mti-linux-gnu"); 353 EXPECT_EQ(Triple::mips64, T.getArch()); 354 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 355 EXPECT_EQ(Triple::Linux, T.getOS()); 356 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 357 358 T = Triple("mips64el-img-linux-gnu"); 359 EXPECT_EQ(Triple::mips64el, T.getArch()); 360 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 361 EXPECT_EQ(Triple::Linux, T.getOS()); 362 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 363 364 T = Triple("mips64el-img-linux-gnuabin32"); 365 EXPECT_EQ(Triple::mips64el, T.getArch()); 366 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 367 EXPECT_EQ(Triple::Linux, T.getOS()); 368 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 369 370 T = Triple("mips64el-unknown-linux-gnuabi64"); 371 EXPECT_EQ(Triple::mips64el, T.getArch()); 372 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 373 EXPECT_EQ(Triple::Linux, T.getOS()); 374 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 375 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 376 T = Triple("mips64el"); 377 EXPECT_EQ(Triple::mips64el, T.getArch()); 378 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 379 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 380 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 381 382 T = Triple("mips64-unknown-linux-gnuabi64"); 383 EXPECT_EQ(Triple::mips64, T.getArch()); 384 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 385 EXPECT_EQ(Triple::Linux, T.getOS()); 386 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 387 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 388 T = Triple("mips64"); 389 EXPECT_EQ(Triple::mips64, T.getArch()); 390 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 391 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 392 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 393 394 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64"); 395 EXPECT_EQ(Triple::mips64el, T.getArch()); 396 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 397 EXPECT_EQ(Triple::Linux, T.getOS()); 398 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 399 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 400 T = Triple("mips64r6el"); 401 EXPECT_EQ(Triple::mips64el, T.getArch()); 402 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 403 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 404 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 405 T = Triple("mipsisa64r6el"); 406 EXPECT_EQ(Triple::mips64el, T.getArch()); 407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 408 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 409 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 410 411 T = Triple("mipsisa64r6-unknown-linux-gnuabi64"); 412 EXPECT_EQ(Triple::mips64, T.getArch()); 413 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 414 EXPECT_EQ(Triple::Linux, T.getOS()); 415 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 416 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 417 T = Triple("mips64r6"); 418 EXPECT_EQ(Triple::mips64, T.getArch()); 419 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 420 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 421 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 422 T = Triple("mipsisa64r6"); 423 EXPECT_EQ(Triple::mips64, T.getArch()); 424 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 425 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 426 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 427 428 T = Triple("mips64el-unknown-linux-gnuabin32"); 429 EXPECT_EQ(Triple::mips64el, T.getArch()); 430 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 431 EXPECT_EQ(Triple::Linux, T.getOS()); 432 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 433 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 434 T = Triple("mipsn32el"); 435 EXPECT_EQ(Triple::mips64el, T.getArch()); 436 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 437 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 438 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 439 440 T = Triple("mips64-unknown-linux-gnuabin32"); 441 EXPECT_EQ(Triple::mips64, T.getArch()); 442 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 443 EXPECT_EQ(Triple::Linux, T.getOS()); 444 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 445 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 446 T = Triple("mipsn32"); 447 EXPECT_EQ(Triple::mips64, T.getArch()); 448 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 449 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 450 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 451 452 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32"); 453 EXPECT_EQ(Triple::mips64el, T.getArch()); 454 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 455 EXPECT_EQ(Triple::Linux, T.getOS()); 456 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 457 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 458 T = Triple("mipsn32r6el"); 459 EXPECT_EQ(Triple::mips64el, T.getArch()); 460 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 461 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 462 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 463 464 T = Triple("mipsisa64r6-unknown-linux-gnuabin32"); 465 EXPECT_EQ(Triple::mips64, T.getArch()); 466 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 467 EXPECT_EQ(Triple::Linux, T.getOS()); 468 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 469 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 470 T = Triple("mipsn32r6"); 471 EXPECT_EQ(Triple::mips64, T.getArch()); 472 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 473 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 474 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 475 476 T = Triple("mipsel-unknown-linux-gnu"); 477 EXPECT_EQ(Triple::mipsel, T.getArch()); 478 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 479 EXPECT_EQ(Triple::Linux, T.getOS()); 480 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 481 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 482 T = Triple("mipsel"); 483 EXPECT_EQ(Triple::mipsel, T.getArch()); 484 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 485 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 486 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 487 488 T = Triple("mips-unknown-linux-gnu"); 489 EXPECT_EQ(Triple::mips, T.getArch()); 490 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 491 EXPECT_EQ(Triple::Linux, T.getOS()); 492 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 493 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 494 T = Triple("mips"); 495 EXPECT_EQ(Triple::mips, T.getArch()); 496 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 497 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 498 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 499 500 T = Triple("mipsisa32r6el-unknown-linux-gnu"); 501 EXPECT_EQ(Triple::mipsel, T.getArch()); 502 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 503 EXPECT_EQ(Triple::Linux, T.getOS()); 504 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 505 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 506 T = Triple("mipsr6el"); 507 EXPECT_EQ(Triple::mipsel, T.getArch()); 508 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 509 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 510 T = Triple("mipsisa32r6el"); 511 EXPECT_EQ(Triple::mipsel, T.getArch()); 512 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 513 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 514 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 515 516 T = Triple("mipsisa32r6-unknown-linux-gnu"); 517 EXPECT_EQ(Triple::mips, T.getArch()); 518 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 519 EXPECT_EQ(Triple::Linux, T.getOS()); 520 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 521 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 522 T = Triple("mipsr6"); 523 EXPECT_EQ(Triple::mips, T.getArch()); 524 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 525 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 526 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 527 T = Triple("mipsisa32r6"); 528 EXPECT_EQ(Triple::mips, T.getArch()); 529 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 530 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 531 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 532 533 T = Triple("arm-oe-linux-gnueabi"); 534 EXPECT_EQ(Triple::arm, T.getArch()); 535 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 536 EXPECT_EQ(Triple::Linux, T.getOS()); 537 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 538 539 T = Triple("aarch64-oe-linux"); 540 EXPECT_EQ(Triple::aarch64, T.getArch()); 541 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 542 EXPECT_EQ(Triple::Linux, T.getOS()); 543 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 544 545 T = Triple("huh"); 546 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 547 } 548 549 static std::string Join(StringRef A, StringRef B, StringRef C) { 550 std::string Str = A; 551 Str += '-'; 552 Str += B; 553 Str += '-'; 554 Str += C; 555 return Str; 556 } 557 558 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 559 std::string Str = A; 560 Str += '-'; 561 Str += B; 562 Str += '-'; 563 Str += C; 564 Str += '-'; 565 Str += D; 566 return Str; 567 } 568 569 TEST(TripleTest, Normalization) { 570 571 EXPECT_EQ("unknown", Triple::normalize("")); 572 EXPECT_EQ("unknown-unknown", Triple::normalize("-")); 573 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--")); 574 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---")); 575 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown", 576 Triple::normalize("----")); 577 578 EXPECT_EQ("a", Triple::normalize("a")); 579 EXPECT_EQ("a-b", Triple::normalize("a-b")); 580 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 581 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 582 583 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 584 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 585 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 586 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 587 588 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 589 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c")); 590 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 591 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 592 593 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 594 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c")); 595 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c")); 596 597 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 598 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386")); 599 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c")); 600 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-")); 601 602 EXPECT_EQ("i386", Triple::normalize("i386")); 603 EXPECT_EQ("unknown-pc", Triple::normalize("pc")); 604 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux")); 605 606 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux")); 607 608 // Check that normalizing a permutated set of valid components returns a 609 // triple with the unpermuted components. 610 // 611 // We don't check every possible combination. For the set of architectures A, 612 // vendors V, operating systems O, and environments E, that would require |A| 613 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given 614 // slot and make sure it gets normalized to the correct position from every 615 // permutation. This should cover the core logic while being a tractable 616 // number of tests at (|A| + |V| + |O| + |E|) * 4!. 617 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1); 618 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1); 619 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1); 620 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1); 621 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType), 622 Triple::getVendorTypeName(FirstVendorType), 623 Triple::getOSTypeName(FirstOSType), 624 Triple::getEnvironmentTypeName(FirstEnvType)}; 625 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) { 626 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 627 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 628 std::string E = Join(C[0], C[1], C[2]); 629 int I[] = {0, 1, 2}; 630 do { 631 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 632 } while (std::next_permutation(std::begin(I), std::end(I))); 633 std::string F = Join(C[0], C[1], C[2], C[3]); 634 int J[] = {0, 1, 2, 3}; 635 do { 636 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 637 } while (std::next_permutation(std::begin(J), std::end(J))); 638 } 639 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType; 640 ++Vendor) { 641 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 642 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 643 std::string E = Join(C[0], C[1], C[2]); 644 int I[] = {0, 1, 2}; 645 do { 646 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 647 } while (std::next_permutation(std::begin(I), std::end(I))); 648 std::string F = Join(C[0], C[1], C[2], C[3]); 649 int J[] = {0, 1, 2, 3}; 650 do { 651 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 652 } while (std::next_permutation(std::begin(J), std::end(J))); 653 } 654 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) { 655 if (OS == Triple::Win32) 656 continue; 657 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 658 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 659 std::string E = Join(C[0], C[1], C[2]); 660 int I[] = {0, 1, 2}; 661 do { 662 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 663 } while (std::next_permutation(std::begin(I), std::end(I))); 664 std::string F = Join(C[0], C[1], C[2], C[3]); 665 int J[] = {0, 1, 2, 3}; 666 do { 667 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 668 } while (std::next_permutation(std::begin(J), std::end(J))); 669 } 670 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) { 671 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 672 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 673 std::string F = Join(C[0], C[1], C[2], C[3]); 674 int J[] = {0, 1, 2, 3}; 675 do { 676 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 677 } while (std::next_permutation(std::begin(J), std::end(J))); 678 } 679 680 // Various real-world funky triples. The value returned by GCC's config.sub 681 // is given in the comment. 682 EXPECT_EQ("i386-unknown-windows-gnu", 683 Triple::normalize("i386-mingw32")); // i386-pc-mingw32 684 EXPECT_EQ("x86_64-unknown-linux-gnu", 685 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 686 EXPECT_EQ("i486-unknown-linux-gnu", 687 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 688 EXPECT_EQ("i386-redhat-linux", 689 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 690 EXPECT_EQ("i686-unknown-linux", 691 Triple::normalize("i686-linux")); // i686-pc-linux-gnu 692 EXPECT_EQ("arm-none-unknown-eabi", 693 Triple::normalize("arm-none-eabi")); // arm-none-eabi 694 } 695 696 TEST(TripleTest, MutateName) { 697 Triple T; 698 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 699 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 700 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 701 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 702 703 T.setArchName("i386"); 704 EXPECT_EQ(Triple::x86, T.getArch()); 705 EXPECT_EQ("i386--", T.getTriple()); 706 707 T.setVendorName("pc"); 708 EXPECT_EQ(Triple::x86, T.getArch()); 709 EXPECT_EQ(Triple::PC, T.getVendor()); 710 EXPECT_EQ("i386-pc-", T.getTriple()); 711 712 T.setOSName("linux"); 713 EXPECT_EQ(Triple::x86, T.getArch()); 714 EXPECT_EQ(Triple::PC, T.getVendor()); 715 EXPECT_EQ(Triple::Linux, T.getOS()); 716 EXPECT_EQ("i386-pc-linux", T.getTriple()); 717 718 T.setEnvironmentName("gnu"); 719 EXPECT_EQ(Triple::x86, T.getArch()); 720 EXPECT_EQ(Triple::PC, T.getVendor()); 721 EXPECT_EQ(Triple::Linux, T.getOS()); 722 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 723 724 T.setOSName("freebsd"); 725 EXPECT_EQ(Triple::x86, T.getArch()); 726 EXPECT_EQ(Triple::PC, T.getVendor()); 727 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 728 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 729 730 T.setOSAndEnvironmentName("darwin"); 731 EXPECT_EQ(Triple::x86, T.getArch()); 732 EXPECT_EQ(Triple::PC, T.getVendor()); 733 EXPECT_EQ(Triple::Darwin, T.getOS()); 734 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 735 } 736 737 TEST(TripleTest, BitWidthPredicates) { 738 Triple T; 739 EXPECT_FALSE(T.isArch16Bit()); 740 EXPECT_FALSE(T.isArch32Bit()); 741 EXPECT_FALSE(T.isArch64Bit()); 742 743 T.setArch(Triple::arm); 744 EXPECT_FALSE(T.isArch16Bit()); 745 EXPECT_TRUE(T.isArch32Bit()); 746 EXPECT_FALSE(T.isArch64Bit()); 747 748 T.setArch(Triple::hexagon); 749 EXPECT_FALSE(T.isArch16Bit()); 750 EXPECT_TRUE(T.isArch32Bit()); 751 EXPECT_FALSE(T.isArch64Bit()); 752 753 T.setArch(Triple::mips); 754 EXPECT_FALSE(T.isArch16Bit()); 755 EXPECT_TRUE(T.isArch32Bit()); 756 EXPECT_FALSE(T.isArch64Bit()); 757 758 T.setArch(Triple::mips64); 759 EXPECT_FALSE(T.isArch16Bit()); 760 EXPECT_FALSE(T.isArch32Bit()); 761 EXPECT_TRUE(T.isArch64Bit()); 762 763 T.setArch(Triple::msp430); 764 EXPECT_TRUE(T.isArch16Bit()); 765 EXPECT_FALSE(T.isArch32Bit()); 766 EXPECT_FALSE(T.isArch64Bit()); 767 768 T.setArch(Triple::ppc); 769 EXPECT_FALSE(T.isArch16Bit()); 770 EXPECT_TRUE(T.isArch32Bit()); 771 EXPECT_FALSE(T.isArch64Bit()); 772 773 T.setArch(Triple::ppc64); 774 EXPECT_FALSE(T.isArch16Bit()); 775 EXPECT_FALSE(T.isArch32Bit()); 776 EXPECT_TRUE(T.isArch64Bit()); 777 778 T.setArch(Triple::x86); 779 EXPECT_FALSE(T.isArch16Bit()); 780 EXPECT_TRUE(T.isArch32Bit()); 781 EXPECT_FALSE(T.isArch64Bit()); 782 783 T.setArch(Triple::x86_64); 784 EXPECT_FALSE(T.isArch16Bit()); 785 EXPECT_FALSE(T.isArch32Bit()); 786 EXPECT_TRUE(T.isArch64Bit()); 787 788 T.setArch(Triple::amdil); 789 EXPECT_FALSE(T.isArch16Bit()); 790 EXPECT_TRUE(T.isArch32Bit()); 791 EXPECT_FALSE(T.isArch64Bit()); 792 793 T.setArch(Triple::amdil64); 794 EXPECT_FALSE(T.isArch16Bit()); 795 EXPECT_FALSE(T.isArch32Bit()); 796 EXPECT_TRUE(T.isArch64Bit()); 797 798 T.setArch(Triple::hsail); 799 EXPECT_FALSE(T.isArch16Bit()); 800 EXPECT_TRUE(T.isArch32Bit()); 801 EXPECT_FALSE(T.isArch64Bit()); 802 803 T.setArch(Triple::hsail64); 804 EXPECT_FALSE(T.isArch16Bit()); 805 EXPECT_FALSE(T.isArch32Bit()); 806 EXPECT_TRUE(T.isArch64Bit()); 807 808 T.setArch(Triple::spir); 809 EXPECT_FALSE(T.isArch16Bit()); 810 EXPECT_TRUE(T.isArch32Bit()); 811 EXPECT_FALSE(T.isArch64Bit()); 812 813 T.setArch(Triple::spir64); 814 EXPECT_FALSE(T.isArch16Bit()); 815 EXPECT_FALSE(T.isArch32Bit()); 816 EXPECT_TRUE(T.isArch64Bit()); 817 818 T.setArch(Triple::sparc); 819 EXPECT_FALSE(T.isArch16Bit()); 820 EXPECT_TRUE(T.isArch32Bit()); 821 EXPECT_FALSE(T.isArch64Bit()); 822 823 T.setArch(Triple::sparcel); 824 EXPECT_FALSE(T.isArch16Bit()); 825 EXPECT_TRUE(T.isArch32Bit()); 826 EXPECT_FALSE(T.isArch64Bit()); 827 828 T.setArch(Triple::sparcv9); 829 EXPECT_FALSE(T.isArch16Bit()); 830 EXPECT_FALSE(T.isArch32Bit()); 831 EXPECT_TRUE(T.isArch64Bit()); 832 833 T.setArch(Triple::wasm32); 834 EXPECT_FALSE(T.isArch16Bit()); 835 EXPECT_TRUE(T.isArch32Bit()); 836 EXPECT_FALSE(T.isArch64Bit()); 837 838 T.setArch(Triple::wasm64); 839 EXPECT_FALSE(T.isArch16Bit()); 840 EXPECT_FALSE(T.isArch32Bit()); 841 EXPECT_TRUE(T.isArch64Bit()); 842 843 T.setArch(Triple::avr); 844 EXPECT_TRUE(T.isArch16Bit()); 845 EXPECT_FALSE(T.isArch32Bit()); 846 EXPECT_FALSE(T.isArch64Bit()); 847 848 T.setArch(Triple::lanai); 849 EXPECT_FALSE(T.isArch16Bit()); 850 EXPECT_TRUE(T.isArch32Bit()); 851 EXPECT_FALSE(T.isArch64Bit()); 852 853 T.setArch(Triple::riscv32); 854 EXPECT_FALSE(T.isArch16Bit()); 855 EXPECT_TRUE(T.isArch32Bit()); 856 EXPECT_FALSE(T.isArch64Bit()); 857 858 T.setArch(Triple::riscv64); 859 EXPECT_FALSE(T.isArch16Bit()); 860 EXPECT_FALSE(T.isArch32Bit()); 861 EXPECT_TRUE(T.isArch64Bit()); 862 } 863 864 TEST(TripleTest, BitWidthArchVariants) { 865 Triple T; 866 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 867 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 868 869 T.setArch(Triple::UnknownArch); 870 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 871 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 872 873 T.setArch(Triple::mips); 874 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 875 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 876 877 T.setArch(Triple::mipsel); 878 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 879 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 880 881 T.setArch(Triple::ppc); 882 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 883 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 884 885 T.setArch(Triple::nvptx); 886 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 887 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 888 889 T.setArch(Triple::sparc); 890 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 891 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 892 893 T.setArch(Triple::x86); 894 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 895 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 896 897 T.setArch(Triple::mips64); 898 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 899 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 900 901 T.setArch(Triple::mips64el); 902 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 903 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 904 905 T.setArch(Triple::ppc64); 906 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 907 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 908 909 T.setArch(Triple::nvptx64); 910 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 911 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 912 913 T.setArch(Triple::sparcv9); 914 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 915 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 916 917 T.setArch(Triple::x86_64); 918 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 919 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 920 921 T.setArch(Triple::amdil); 922 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 923 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 924 925 T.setArch(Triple::amdil64); 926 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 927 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 928 929 T.setArch(Triple::hsail); 930 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 931 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 932 933 T.setArch(Triple::hsail64); 934 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 935 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 936 937 T.setArch(Triple::spir); 938 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 939 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 940 941 T.setArch(Triple::spir64); 942 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 943 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 944 945 T.setArch(Triple::wasm32); 946 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 947 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 948 949 T.setArch(Triple::wasm64); 950 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 951 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 952 953 T.setArch(Triple::riscv32); 954 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 955 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 956 957 T.setArch(Triple::riscv64); 958 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 959 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 960 961 T.setArch(Triple::thumbeb); 962 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); 963 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 964 965 T.setArch(Triple::thumb); 966 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch()); 967 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 968 969 T.setArch(Triple::aarch64); 970 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 971 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 972 973 T.setArch(Triple::aarch64_be); 974 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 975 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 976 977 T.setArch(Triple::renderscript32); 978 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 979 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 980 981 T.setArch(Triple::renderscript64); 982 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 983 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 984 985 T.setArch(Triple::le32); 986 EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch()); 987 EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch()); 988 989 T.setArch(Triple::le64); 990 EXPECT_EQ(Triple::le32, T.get32BitArchVariant().getArch()); 991 EXPECT_EQ(Triple::le64, T.get64BitArchVariant().getArch()); 992 993 T.setArch(Triple::armeb); 994 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 995 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 996 997 T.setArch(Triple::arm); 998 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 999 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1000 1001 T.setArch(Triple::systemz); 1002 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1003 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch()); 1004 1005 T.setArch(Triple::xcore); 1006 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch()); 1007 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1008 } 1009 1010 TEST(TripleTest, EndianArchVariants) { 1011 Triple T; 1012 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1013 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1014 1015 T.setArch(Triple::UnknownArch); 1016 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1017 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1018 1019 T.setArch(Triple::aarch64_be); 1020 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1021 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1022 1023 T.setArch(Triple::aarch64); 1024 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1025 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1026 1027 T.setArch(Triple::armeb); 1028 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 1029 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1030 1031 T.setArch(Triple::arm); 1032 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1033 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 1034 T = Triple("arm"); 1035 EXPECT_TRUE(T.isLittleEndian()); 1036 T = Triple("thumb"); 1037 EXPECT_TRUE(T.isLittleEndian()); 1038 T = Triple("armeb"); 1039 EXPECT_FALSE(T.isLittleEndian()); 1040 T = Triple("thumbeb"); 1041 EXPECT_FALSE(T.isLittleEndian()); 1042 1043 T.setArch(Triple::bpfeb); 1044 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1045 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1046 1047 T.setArch(Triple::bpfel); 1048 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1049 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1050 1051 T.setArch(Triple::mips64); 1052 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1053 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1054 1055 T.setArch(Triple::mips64el); 1056 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1057 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1058 1059 T.setArch(Triple::mips); 1060 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1061 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1062 1063 T.setArch(Triple::mipsel); 1064 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1065 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1066 1067 T.setArch(Triple::ppc); 1068 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 1069 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1070 1071 T.setArch(Triple::ppc64); 1072 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1073 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1074 1075 T.setArch(Triple::ppc64le); 1076 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1077 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1078 1079 T.setArch(Triple::sparc); 1080 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1081 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1082 1083 T.setArch(Triple::sparcel); 1084 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1085 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1086 1087 T.setArch(Triple::thumb); 1088 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1089 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 1090 1091 T.setArch(Triple::thumbeb); 1092 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 1093 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1094 1095 T.setArch(Triple::lanai); 1096 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 1097 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1098 1099 T.setArch(Triple::tcele); 1100 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1101 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1102 1103 T.setArch(Triple::tce); 1104 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1105 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1106 1107 T.setArch(Triple::le32); 1108 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1109 EXPECT_EQ(Triple::le32, T.getLittleEndianArchVariant().getArch()); 1110 1111 T.setArch(Triple::le64); 1112 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1113 EXPECT_EQ(Triple::le64, T.getLittleEndianArchVariant().getArch()); 1114 } 1115 1116 TEST(TripleTest, getOSVersion) { 1117 Triple T; 1118 unsigned Major, Minor, Micro; 1119 1120 T = Triple("i386-apple-darwin9"); 1121 EXPECT_TRUE(T.isMacOSX()); 1122 EXPECT_FALSE(T.isiOS()); 1123 EXPECT_FALSE(T.isArch16Bit()); 1124 EXPECT_TRUE(T.isArch32Bit()); 1125 EXPECT_FALSE(T.isArch64Bit()); 1126 T.getMacOSXVersion(Major, Minor, Micro); 1127 EXPECT_EQ((unsigned)10, Major); 1128 EXPECT_EQ((unsigned)5, Minor); 1129 EXPECT_EQ((unsigned)0, Micro); 1130 T.getiOSVersion(Major, Minor, Micro); 1131 EXPECT_EQ((unsigned)5, Major); 1132 EXPECT_EQ((unsigned)0, Minor); 1133 EXPECT_EQ((unsigned)0, Micro); 1134 1135 T = Triple("x86_64-apple-darwin9"); 1136 EXPECT_TRUE(T.isMacOSX()); 1137 EXPECT_FALSE(T.isiOS()); 1138 EXPECT_FALSE(T.isArch16Bit()); 1139 EXPECT_FALSE(T.isArch32Bit()); 1140 EXPECT_TRUE(T.isArch64Bit()); 1141 T.getMacOSXVersion(Major, Minor, Micro); 1142 EXPECT_EQ((unsigned)10, Major); 1143 EXPECT_EQ((unsigned)5, Minor); 1144 EXPECT_EQ((unsigned)0, Micro); 1145 T.getiOSVersion(Major, Minor, Micro); 1146 EXPECT_EQ((unsigned)5, Major); 1147 EXPECT_EQ((unsigned)0, Minor); 1148 EXPECT_EQ((unsigned)0, Micro); 1149 1150 T = Triple("x86_64-apple-macosx"); 1151 EXPECT_TRUE(T.isMacOSX()); 1152 EXPECT_FALSE(T.isiOS()); 1153 EXPECT_FALSE(T.isArch16Bit()); 1154 EXPECT_FALSE(T.isArch32Bit()); 1155 EXPECT_TRUE(T.isArch64Bit()); 1156 T.getMacOSXVersion(Major, Minor, Micro); 1157 EXPECT_EQ((unsigned)10, Major); 1158 EXPECT_EQ((unsigned)4, Minor); 1159 EXPECT_EQ((unsigned)0, Micro); 1160 T.getiOSVersion(Major, Minor, Micro); 1161 EXPECT_EQ((unsigned)5, Major); 1162 EXPECT_EQ((unsigned)0, Minor); 1163 EXPECT_EQ((unsigned)0, Micro); 1164 1165 T = Triple("x86_64-apple-macosx10.7"); 1166 EXPECT_TRUE(T.isMacOSX()); 1167 EXPECT_FALSE(T.isiOS()); 1168 EXPECT_FALSE(T.isArch16Bit()); 1169 EXPECT_FALSE(T.isArch32Bit()); 1170 EXPECT_TRUE(T.isArch64Bit()); 1171 T.getMacOSXVersion(Major, Minor, Micro); 1172 EXPECT_EQ((unsigned)10, Major); 1173 EXPECT_EQ((unsigned)7, Minor); 1174 EXPECT_EQ((unsigned)0, Micro); 1175 T.getiOSVersion(Major, Minor, Micro); 1176 EXPECT_EQ((unsigned)5, Major); 1177 EXPECT_EQ((unsigned)0, Minor); 1178 EXPECT_EQ((unsigned)0, Micro); 1179 1180 T = Triple("armv7-apple-ios"); 1181 EXPECT_FALSE(T.isMacOSX()); 1182 EXPECT_TRUE(T.isiOS()); 1183 EXPECT_FALSE(T.isArch16Bit()); 1184 EXPECT_TRUE(T.isArch32Bit()); 1185 EXPECT_FALSE(T.isArch64Bit()); 1186 T.getMacOSXVersion(Major, Minor, Micro); 1187 EXPECT_EQ((unsigned)10, Major); 1188 EXPECT_EQ((unsigned)4, Minor); 1189 EXPECT_EQ((unsigned)0, Micro); 1190 T.getiOSVersion(Major, Minor, Micro); 1191 EXPECT_EQ((unsigned)5, Major); 1192 EXPECT_EQ((unsigned)0, Minor); 1193 EXPECT_EQ((unsigned)0, Micro); 1194 1195 T = Triple("armv7-apple-ios7.0"); 1196 EXPECT_FALSE(T.isMacOSX()); 1197 EXPECT_TRUE(T.isiOS()); 1198 EXPECT_FALSE(T.isArch16Bit()); 1199 EXPECT_TRUE(T.isArch32Bit()); 1200 EXPECT_FALSE(T.isArch64Bit()); 1201 T.getMacOSXVersion(Major, Minor, Micro); 1202 EXPECT_EQ((unsigned)10, Major); 1203 EXPECT_EQ((unsigned)4, Minor); 1204 EXPECT_EQ((unsigned)0, Micro); 1205 T.getiOSVersion(Major, Minor, Micro); 1206 EXPECT_EQ((unsigned)7, Major); 1207 EXPECT_EQ((unsigned)0, Minor); 1208 EXPECT_EQ((unsigned)0, Micro); 1209 EXPECT_FALSE(T.isSimulatorEnvironment()); 1210 1211 T = Triple("x86_64-apple-ios10.3-simulator"); 1212 EXPECT_TRUE(T.isiOS()); 1213 T.getiOSVersion(Major, Minor, Micro); 1214 EXPECT_EQ((unsigned)10, Major); 1215 EXPECT_EQ((unsigned)3, Minor); 1216 EXPECT_EQ((unsigned)0, Micro); 1217 EXPECT_TRUE(T.isSimulatorEnvironment()); 1218 } 1219 1220 TEST(TripleTest, FileFormat) { 1221 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 1222 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 1223 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 1224 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 1225 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 1226 1227 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 1228 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 1229 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 1230 1231 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 1232 1233 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 1234 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 1235 1236 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); 1237 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); 1238 1239 EXPECT_EQ(Triple::Wasm, 1240 Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); 1241 EXPECT_EQ(Triple::Wasm, 1242 Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); 1243 1244 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 1245 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 1246 1247 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 1248 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 1249 1250 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 1251 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 1252 1253 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 1254 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 1255 1256 Triple T = Triple(""); 1257 T.setObjectFormat(Triple::ELF); 1258 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 1259 1260 T.setObjectFormat(Triple::MachO); 1261 EXPECT_EQ(Triple::MachO, T.getObjectFormat()); 1262 } 1263 1264 TEST(TripleTest, NormalizeWindows) { 1265 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 1266 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32")); 1267 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 1268 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32")); 1269 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 1270 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64")); 1271 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 1272 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin")); 1273 1274 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 1275 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32")); 1276 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 1277 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32")); 1278 EXPECT_EQ("x86_64-pc-windows-gnu", 1279 Triple::normalize("x86_64-pc-mingw32-w64")); 1280 EXPECT_EQ("x86_64-unknown-windows-gnu", 1281 Triple::normalize("x86_64-mingw32-w64")); 1282 1283 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 1284 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf")); 1285 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 1286 EXPECT_EQ("i686-unknown-windows-macho", 1287 Triple::normalize("i686-win32-macho")); 1288 1289 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 1290 EXPECT_EQ("x86_64-unknown-windows-elf", 1291 Triple::normalize("x86_64-win32-elf")); 1292 EXPECT_EQ("x86_64-pc-windows-macho", 1293 Triple::normalize("x86_64-pc-win32-macho")); 1294 EXPECT_EQ("x86_64-unknown-windows-macho", 1295 Triple::normalize("x86_64-win32-macho")); 1296 1297 EXPECT_EQ("i686-pc-windows-cygnus", 1298 Triple::normalize("i686-pc-windows-cygnus")); 1299 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 1300 EXPECT_EQ("i686-pc-windows-itanium", 1301 Triple::normalize("i686-pc-windows-itanium")); 1302 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 1303 1304 EXPECT_EQ("i686-pc-windows-elf", 1305 Triple::normalize("i686-pc-windows-elf-elf")); 1306 } 1307 1308 TEST(TripleTest, getARMCPUForArch) { 1309 // Platform specific defaults. 1310 { 1311 llvm::Triple Triple("arm--nacl"); 1312 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 1313 } 1314 { 1315 llvm::Triple Triple("arm--openbsd"); 1316 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 1317 } 1318 { 1319 llvm::Triple Triple("armv6-unknown-freebsd"); 1320 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1321 } 1322 { 1323 llvm::Triple Triple("thumbv6-unknown-freebsd"); 1324 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1325 } 1326 { 1327 llvm::Triple Triple("armebv6-unknown-freebsd"); 1328 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1329 } 1330 { 1331 llvm::Triple Triple("arm--win32"); 1332 EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch()); 1333 } 1334 // Some alternative architectures 1335 { 1336 llvm::Triple Triple("armv7k-apple-ios9"); 1337 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1338 } 1339 { 1340 llvm::Triple Triple("armv7k-apple-watchos3"); 1341 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1342 } 1343 { 1344 llvm::Triple Triple("armv7k-apple-tvos9"); 1345 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1346 } 1347 // armeb is permitted, but armebeb is not 1348 { 1349 llvm::Triple Triple("armeb-none-eabi"); 1350 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch()); 1351 } 1352 { 1353 llvm::Triple Triple("armebeb-none-eabi"); 1354 EXPECT_EQ("", Triple.getARMCPUForArch()); 1355 } 1356 { 1357 llvm::Triple Triple("armebv6eb-none-eabi"); 1358 EXPECT_EQ("", Triple.getARMCPUForArch()); 1359 } 1360 // xscaleeb is permitted, but armebxscale is not 1361 { 1362 llvm::Triple Triple("xscaleeb-none-eabi"); 1363 EXPECT_EQ("xscale", Triple.getARMCPUForArch()); 1364 } 1365 { 1366 llvm::Triple Triple("armebxscale-none-eabi"); 1367 EXPECT_EQ("", Triple.getARMCPUForArch()); 1368 } 1369 } 1370 1371 TEST(TripleTest, NormalizeARM) { 1372 EXPECT_EQ("armv6-unknown-netbsd-eabi", 1373 Triple::normalize("armv6-netbsd-eabi")); 1374 EXPECT_EQ("armv7-unknown-netbsd-eabi", 1375 Triple::normalize("armv7-netbsd-eabi")); 1376 EXPECT_EQ("armv6eb-unknown-netbsd-eabi", 1377 Triple::normalize("armv6eb-netbsd-eabi")); 1378 EXPECT_EQ("armv7eb-unknown-netbsd-eabi", 1379 Triple::normalize("armv7eb-netbsd-eabi")); 1380 EXPECT_EQ("armv6-unknown-netbsd-eabihf", 1381 Triple::normalize("armv6-netbsd-eabihf")); 1382 EXPECT_EQ("armv7-unknown-netbsd-eabihf", 1383 Triple::normalize("armv7-netbsd-eabihf")); 1384 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf", 1385 Triple::normalize("armv6eb-netbsd-eabihf")); 1386 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf", 1387 Triple::normalize("armv7eb-netbsd-eabihf")); 1388 1389 EXPECT_EQ("armv7-suse-linux-gnueabihf", 1390 Triple::normalize("armv7-suse-linux-gnueabi")); 1391 1392 Triple T; 1393 T = Triple("armv6--netbsd-eabi"); 1394 EXPECT_EQ(Triple::arm, T.getArch()); 1395 T = Triple("armv6eb--netbsd-eabi"); 1396 EXPECT_EQ(Triple::armeb, T.getArch()); 1397 T = Triple("armv7-suse-linux-gnueabihf"); 1398 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 1399 } 1400 1401 TEST(TripleTest, ParseARMArch) { 1402 // ARM 1403 { 1404 Triple T = Triple("arm"); 1405 EXPECT_EQ(Triple::arm, T.getArch()); 1406 } 1407 { 1408 Triple T = Triple("armeb"); 1409 EXPECT_EQ(Triple::armeb, T.getArch()); 1410 } 1411 // THUMB 1412 { 1413 Triple T = Triple("thumb"); 1414 EXPECT_EQ(Triple::thumb, T.getArch()); 1415 } 1416 { 1417 Triple T = Triple("thumbeb"); 1418 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1419 } 1420 // AARCH64 1421 { 1422 Triple T = Triple("arm64"); 1423 EXPECT_EQ(Triple::aarch64, T.getArch()); 1424 } 1425 { 1426 Triple T = Triple("aarch64"); 1427 EXPECT_EQ(Triple::aarch64, T.getArch()); 1428 } 1429 { 1430 Triple T = Triple("aarch64_be"); 1431 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 1432 } 1433 } 1434 } // end anonymous namespace 1435