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