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("x86_64-sie-ps5"); 144 EXPECT_EQ(Triple::x86_64, T.getArch()); 145 EXPECT_EQ(Triple::SCEI, T.getVendor()); 146 EXPECT_EQ(Triple::PS5, T.getOS()); 147 148 T = Triple("powerpc-ibm-aix"); 149 EXPECT_EQ(Triple::ppc, T.getArch()); 150 EXPECT_EQ(Triple::IBM, T.getVendor()); 151 EXPECT_EQ(Triple::AIX, T.getOS()); 152 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 153 154 T = Triple("powerpc64-ibm-aix"); 155 EXPECT_EQ(Triple::ppc64, T.getArch()); 156 EXPECT_EQ(Triple::IBM, T.getVendor()); 157 EXPECT_EQ(Triple::AIX, T.getOS()); 158 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 159 160 T = Triple("powerpc-dunno-notsure"); 161 EXPECT_EQ(Triple::ppc, T.getArch()); 162 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 163 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 164 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 165 166 T = Triple("powerpcspe-unknown-freebsd"); 167 EXPECT_EQ(Triple::ppc, T.getArch()); 168 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch()); 169 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 170 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 171 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 172 173 T = Triple("s390x-ibm-zos"); 174 EXPECT_EQ(Triple::systemz, T.getArch()); 175 EXPECT_EQ(Triple::IBM, T.getVendor()); 176 EXPECT_EQ(Triple::ZOS, T.getOS()); 177 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 178 179 T = Triple("systemz-ibm-zos"); 180 EXPECT_EQ(Triple::systemz, T.getArch()); 181 EXPECT_EQ(Triple::IBM, T.getVendor()); 182 EXPECT_EQ(Triple::ZOS, T.getOS()); 183 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 184 185 T = Triple("arm-none-none-eabi"); 186 EXPECT_EQ(Triple::arm, T.getArch()); 187 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 188 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 189 EXPECT_EQ(Triple::EABI, T.getEnvironment()); 190 191 T = Triple("arm-none-linux-musleabi"); 192 EXPECT_EQ(Triple::arm, T.getArch()); 193 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 194 EXPECT_EQ(Triple::Linux, T.getOS()); 195 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment()); 196 197 T = Triple("armv6hl-none-linux-gnueabi"); 198 EXPECT_EQ(Triple::arm, T.getArch()); 199 EXPECT_EQ(Triple::Linux, T.getOS()); 200 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 201 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 202 203 T = Triple("armv7hl-none-linux-gnueabi"); 204 EXPECT_EQ(Triple::arm, T.getArch()); 205 EXPECT_EQ(Triple::Linux, T.getOS()); 206 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 207 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 208 209 T = Triple("amdil-unknown-unknown"); 210 EXPECT_EQ(Triple::amdil, T.getArch()); 211 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 212 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 213 214 T = Triple("amdil64-unknown-unknown"); 215 EXPECT_EQ(Triple::amdil64, T.getArch()); 216 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 217 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 218 219 T = Triple("hsail-unknown-unknown"); 220 EXPECT_EQ(Triple::hsail, T.getArch()); 221 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 222 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 223 224 T = Triple("hsail64-unknown-unknown"); 225 EXPECT_EQ(Triple::hsail64, T.getArch()); 226 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 227 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 228 229 T = Triple("sparcel-unknown-unknown"); 230 EXPECT_EQ(Triple::sparcel, T.getArch()); 231 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 232 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 233 234 T = Triple("spir-unknown-unknown"); 235 EXPECT_EQ(Triple::spir, T.getArch()); 236 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 237 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 238 239 T = Triple("spir64-unknown-unknown"); 240 EXPECT_EQ(Triple::spir64, T.getArch()); 241 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 242 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 243 244 T = Triple("spirv32-unknown-unknown"); 245 EXPECT_EQ(Triple::spirv32, T.getArch()); 246 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 247 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 248 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 249 250 T = Triple("spirv32v1.0-unknown-unknown"); 251 EXPECT_EQ(Triple::spirv32, T.getArch()); 252 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 253 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 254 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 255 256 T = Triple("spirv32v1.1-unknown-unknown"); 257 EXPECT_EQ(Triple::spirv32, T.getArch()); 258 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 259 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 260 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 261 262 T = Triple("spirv32v1.2-unknown-unknown"); 263 EXPECT_EQ(Triple::spirv32, T.getArch()); 264 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 265 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 266 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 267 268 T = Triple("spirv32v1.3-unknown-unknown"); 269 EXPECT_EQ(Triple::spirv32, T.getArch()); 270 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 271 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 272 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 273 274 T = Triple("spirv32v1.4-unknown-unknown"); 275 EXPECT_EQ(Triple::spirv32, T.getArch()); 276 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 278 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 279 280 T = Triple("spirv32v1.5-unknown-unknown"); 281 EXPECT_EQ(Triple::spirv32, T.getArch()); 282 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 283 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 284 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 285 286 T = Triple("spirv64-unknown-unknown"); 287 EXPECT_EQ(Triple::spirv64, T.getArch()); 288 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 289 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 290 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 291 292 T = Triple("spirv64v1.0-unknown-unknown"); 293 EXPECT_EQ(Triple::spirv64, T.getArch()); 294 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 295 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 296 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 297 298 T = Triple("spirv64v1.1-unknown-unknown"); 299 EXPECT_EQ(Triple::spirv64, T.getArch()); 300 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 301 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 302 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 303 304 T = Triple("spirv64v1.2-unknown-unknown"); 305 EXPECT_EQ(Triple::spirv64, T.getArch()); 306 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 307 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 308 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 309 310 T = Triple("spirv64v1.3-unknown-unknown"); 311 EXPECT_EQ(Triple::spirv64, T.getArch()); 312 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 313 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 314 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 315 316 T = Triple("spirv64v1.4-unknown-unknown"); 317 EXPECT_EQ(Triple::spirv64, T.getArch()); 318 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 319 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 320 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 321 322 T = Triple("spirv64v1.5-unknown-unknown"); 323 EXPECT_EQ(Triple::spirv64, T.getArch()); 324 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 325 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 326 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 327 328 T = Triple("x86_64-unknown-ananas"); 329 EXPECT_EQ(Triple::x86_64, T.getArch()); 330 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 331 EXPECT_EQ(Triple::Ananas, T.getOS()); 332 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 333 334 T = Triple("x86_64-unknown-cloudabi"); 335 EXPECT_EQ(Triple::x86_64, T.getArch()); 336 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 337 EXPECT_EQ(Triple::CloudABI, T.getOS()); 338 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 339 340 T = Triple("x86_64-unknown-fuchsia"); 341 EXPECT_EQ(Triple::x86_64, T.getArch()); 342 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 343 EXPECT_EQ(Triple::Fuchsia, T.getOS()); 344 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 345 346 T = Triple("x86_64-unknown-hermit"); 347 EXPECT_EQ(Triple::x86_64, T.getArch()); 348 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 349 EXPECT_EQ(Triple::HermitCore, T.getOS()); 350 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 351 352 T = Triple("wasm32-unknown-unknown"); 353 EXPECT_EQ(Triple::wasm32, T.getArch()); 354 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 355 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 356 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 357 358 T = Triple("wasm32-unknown-wasi"); 359 EXPECT_EQ(Triple::wasm32, T.getArch()); 360 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 361 EXPECT_EQ(Triple::WASI, T.getOS()); 362 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 363 364 T = Triple("wasm64-unknown-unknown"); 365 EXPECT_EQ(Triple::wasm64, T.getArch()); 366 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 367 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 368 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 369 370 T = Triple("wasm64-unknown-wasi"); 371 EXPECT_EQ(Triple::wasm64, T.getArch()); 372 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 373 EXPECT_EQ(Triple::WASI, T.getOS()); 374 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 375 376 T = Triple("avr-unknown-unknown"); 377 EXPECT_EQ(Triple::avr, T.getArch()); 378 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 379 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 380 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 381 382 T = Triple("avr"); 383 EXPECT_EQ(Triple::avr, T.getArch()); 384 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 385 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 386 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 387 388 T = Triple("lanai-unknown-unknown"); 389 EXPECT_EQ(Triple::lanai, T.getArch()); 390 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 391 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 392 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 393 394 T = Triple("lanai"); 395 EXPECT_EQ(Triple::lanai, T.getArch()); 396 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 397 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 398 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 399 400 T = Triple("amdgcn-mesa-mesa3d"); 401 EXPECT_EQ(Triple::amdgcn, T.getArch()); 402 EXPECT_EQ(Triple::Mesa, T.getVendor()); 403 EXPECT_EQ(Triple::Mesa3D, T.getOS()); 404 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 405 406 T = Triple("amdgcn-amd-amdhsa"); 407 EXPECT_EQ(Triple::amdgcn, T.getArch()); 408 EXPECT_EQ(Triple::AMD, T.getVendor()); 409 EXPECT_EQ(Triple::AMDHSA, T.getOS()); 410 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 411 412 T = Triple("amdgcn-amd-amdpal"); 413 EXPECT_EQ(Triple::amdgcn, T.getArch()); 414 EXPECT_EQ(Triple::AMD, T.getVendor()); 415 EXPECT_EQ(Triple::AMDPAL, T.getOS()); 416 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 417 418 T = Triple("ve-unknown-linux"); 419 EXPECT_EQ(Triple::ve, T.getArch()); 420 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 421 EXPECT_EQ(Triple::Linux, T.getOS()); 422 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 423 424 T = Triple("csky-unknown-unknown"); 425 EXPECT_EQ(Triple::csky, T.getArch()); 426 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 427 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 428 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 429 430 T = Triple("csky-unknown-linux"); 431 EXPECT_EQ(Triple::csky, T.getArch()); 432 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 433 EXPECT_EQ(Triple::Linux, T.getOS()); 434 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 435 436 T = Triple("loongarch32-unknown-unknown"); 437 EXPECT_EQ(Triple::loongarch32, T.getArch()); 438 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 439 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 440 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 441 442 T = Triple("loongarch64-unknown-linux"); 443 EXPECT_EQ(Triple::loongarch64, T.getArch()); 444 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 445 EXPECT_EQ(Triple::Linux, T.getOS()); 446 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 447 448 T = Triple("riscv32-unknown-unknown"); 449 EXPECT_EQ(Triple::riscv32, T.getArch()); 450 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 451 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 452 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 453 454 T = Triple("riscv64-unknown-linux"); 455 EXPECT_EQ(Triple::riscv64, T.getArch()); 456 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 457 EXPECT_EQ(Triple::Linux, T.getOS()); 458 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 459 460 T = Triple("riscv64-unknown-freebsd"); 461 EXPECT_EQ(Triple::riscv64, T.getArch()); 462 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 463 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 464 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 465 466 T = Triple("riscv64-suse-linux"); 467 EXPECT_EQ(Triple::riscv64, T.getArch()); 468 EXPECT_EQ(Triple::SUSE, T.getVendor()); 469 EXPECT_EQ(Triple::Linux, T.getOS()); 470 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 471 472 T = Triple("armv7hl-suse-linux-gnueabi"); 473 EXPECT_EQ(Triple::arm, T.getArch()); 474 EXPECT_EQ(Triple::SUSE, T.getVendor()); 475 EXPECT_EQ(Triple::Linux, T.getOS()); 476 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 477 478 T = Triple("i586-pc-haiku"); 479 EXPECT_EQ(Triple::x86, T.getArch()); 480 EXPECT_EQ(Triple::PC, T.getVendor()); 481 EXPECT_EQ(Triple::Haiku, T.getOS()); 482 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 483 484 T = Triple("x86_64-unknown-haiku"); 485 EXPECT_EQ(Triple::x86_64, T.getArch()); 486 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 487 EXPECT_EQ(Triple::Haiku, T.getOS()); 488 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 489 490 T = Triple("mips-mti-linux-gnu"); 491 EXPECT_EQ(Triple::mips, T.getArch()); 492 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 493 EXPECT_EQ(Triple::Linux, T.getOS()); 494 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 495 496 T = Triple("mipsel-img-linux-gnu"); 497 EXPECT_EQ(Triple::mipsel, T.getArch()); 498 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 499 EXPECT_EQ(Triple::Linux, T.getOS()); 500 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 501 502 T = Triple("mips64-mti-linux-gnu"); 503 EXPECT_EQ(Triple::mips64, T.getArch()); 504 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 505 EXPECT_EQ(Triple::Linux, T.getOS()); 506 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 507 508 T = Triple("mips64el-img-linux-gnu"); 509 EXPECT_EQ(Triple::mips64el, T.getArch()); 510 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 511 EXPECT_EQ(Triple::Linux, T.getOS()); 512 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 513 514 T = Triple("mips64el-img-linux-gnuabin32"); 515 EXPECT_EQ(Triple::mips64el, T.getArch()); 516 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 517 EXPECT_EQ(Triple::Linux, T.getOS()); 518 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 519 520 T = Triple("mips64el-unknown-linux-gnuabi64"); 521 EXPECT_EQ(Triple::mips64el, T.getArch()); 522 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 523 EXPECT_EQ(Triple::Linux, T.getOS()); 524 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 525 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 526 T = Triple("mips64el"); 527 EXPECT_EQ(Triple::mips64el, T.getArch()); 528 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 529 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 530 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 531 532 T = Triple("mips64-unknown-linux-gnuabi64"); 533 EXPECT_EQ(Triple::mips64, T.getArch()); 534 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 535 EXPECT_EQ(Triple::Linux, T.getOS()); 536 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 537 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 538 T = Triple("mips64"); 539 EXPECT_EQ(Triple::mips64, T.getArch()); 540 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 541 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 542 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 543 544 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64"); 545 EXPECT_EQ(Triple::mips64el, T.getArch()); 546 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 547 EXPECT_EQ(Triple::Linux, T.getOS()); 548 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 549 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 550 T = Triple("mips64r6el"); 551 EXPECT_EQ(Triple::mips64el, T.getArch()); 552 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 553 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 554 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 555 T = Triple("mipsisa64r6el"); 556 EXPECT_EQ(Triple::mips64el, T.getArch()); 557 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 558 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 559 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 560 561 T = Triple("mipsisa64r6-unknown-linux-gnuabi64"); 562 EXPECT_EQ(Triple::mips64, T.getArch()); 563 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 564 EXPECT_EQ(Triple::Linux, T.getOS()); 565 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 566 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 567 T = Triple("mips64r6"); 568 EXPECT_EQ(Triple::mips64, T.getArch()); 569 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 570 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 571 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 572 T = Triple("mipsisa64r6"); 573 EXPECT_EQ(Triple::mips64, T.getArch()); 574 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 575 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 576 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 577 578 T = Triple("mips64el-unknown-linux-gnuabin32"); 579 EXPECT_EQ(Triple::mips64el, T.getArch()); 580 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 581 EXPECT_EQ(Triple::Linux, T.getOS()); 582 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 583 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 584 T = Triple("mipsn32el"); 585 EXPECT_EQ(Triple::mips64el, T.getArch()); 586 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 587 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 588 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 589 590 T = Triple("mips64-unknown-linux-gnuabin32"); 591 EXPECT_EQ(Triple::mips64, T.getArch()); 592 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 593 EXPECT_EQ(Triple::Linux, T.getOS()); 594 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 595 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 596 T = Triple("mipsn32"); 597 EXPECT_EQ(Triple::mips64, T.getArch()); 598 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 599 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 600 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 601 602 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32"); 603 EXPECT_EQ(Triple::mips64el, T.getArch()); 604 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 605 EXPECT_EQ(Triple::Linux, T.getOS()); 606 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 607 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 608 T = Triple("mipsn32r6el"); 609 EXPECT_EQ(Triple::mips64el, T.getArch()); 610 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 611 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 612 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 613 614 T = Triple("mipsisa64r6-unknown-linux-gnuabin32"); 615 EXPECT_EQ(Triple::mips64, T.getArch()); 616 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 617 EXPECT_EQ(Triple::Linux, T.getOS()); 618 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 619 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 620 T = Triple("mipsn32r6"); 621 EXPECT_EQ(Triple::mips64, T.getArch()); 622 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 623 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 624 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 625 626 T = Triple("mipsel-unknown-linux-gnu"); 627 EXPECT_EQ(Triple::mipsel, T.getArch()); 628 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 629 EXPECT_EQ(Triple::Linux, T.getOS()); 630 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 631 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 632 T = Triple("mipsel"); 633 EXPECT_EQ(Triple::mipsel, T.getArch()); 634 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 635 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 636 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 637 638 T = Triple("mips-unknown-linux-gnu"); 639 EXPECT_EQ(Triple::mips, T.getArch()); 640 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 641 EXPECT_EQ(Triple::Linux, T.getOS()); 642 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 643 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 644 T = Triple("mips"); 645 EXPECT_EQ(Triple::mips, T.getArch()); 646 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 647 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 648 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 649 650 T = Triple("mipsisa32r6el-unknown-linux-gnu"); 651 EXPECT_EQ(Triple::mipsel, T.getArch()); 652 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 653 EXPECT_EQ(Triple::Linux, T.getOS()); 654 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 655 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 656 T = Triple("mipsr6el"); 657 EXPECT_EQ(Triple::mipsel, T.getArch()); 658 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 659 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 660 T = Triple("mipsisa32r6el"); 661 EXPECT_EQ(Triple::mipsel, T.getArch()); 662 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 663 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 664 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 665 666 T = Triple("mipsisa32r6-unknown-linux-gnu"); 667 EXPECT_EQ(Triple::mips, T.getArch()); 668 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 669 EXPECT_EQ(Triple::Linux, T.getOS()); 670 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 671 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 672 T = Triple("mipsr6"); 673 EXPECT_EQ(Triple::mips, T.getArch()); 674 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 675 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 676 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 677 T = Triple("mipsisa32r6"); 678 EXPECT_EQ(Triple::mips, T.getArch()); 679 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 680 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 681 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 682 683 T = Triple("arm-oe-linux-gnueabi"); 684 EXPECT_EQ(Triple::arm, T.getArch()); 685 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 686 EXPECT_EQ(Triple::Linux, T.getOS()); 687 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 688 689 T = Triple("aarch64-oe-linux"); 690 EXPECT_EQ(Triple::aarch64, T.getArch()); 691 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 692 EXPECT_EQ(Triple::Linux, T.getOS()); 693 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 694 EXPECT_TRUE(T.isArch64Bit()); 695 696 T = Triple("arm64_32-apple-ios"); 697 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 698 EXPECT_EQ(Triple::IOS, T.getOS()); 699 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 700 EXPECT_TRUE(T.isArch32Bit()); 701 702 T = Triple("dxil-unknown-shadermodel-pixel"); 703 EXPECT_EQ(Triple::dxil, T.getArch()); 704 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 705 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 706 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 707 708 T = Triple("dxil-unknown-shadermodel-vertex"); 709 EXPECT_EQ(Triple::dxil, T.getArch()); 710 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 711 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 712 EXPECT_EQ(Triple::Vertex, T.getEnvironment()); 713 714 T = Triple("dxil-unknown-shadermodel-geometry"); 715 EXPECT_EQ(Triple::dxil, T.getArch()); 716 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 717 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 718 EXPECT_EQ(Triple::Geometry, T.getEnvironment()); 719 720 721 T = Triple("dxil-unknown-shadermodel-hull"); 722 EXPECT_EQ(Triple::dxil, T.getArch()); 723 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 724 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 725 EXPECT_EQ(Triple::Hull, T.getEnvironment()); 726 727 T = Triple("dxil-unknown-shadermodel-domain"); 728 EXPECT_EQ(Triple::dxil, T.getArch()); 729 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 730 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 731 EXPECT_EQ(Triple::Domain, T.getEnvironment()); 732 733 T = Triple("dxil-unknown-shadermodel-compute"); 734 EXPECT_EQ(Triple::dxil, T.getArch()); 735 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 736 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 737 EXPECT_EQ(Triple::Compute, T.getEnvironment()); 738 739 T = Triple("dxil-unknown-shadermodel-library"); 740 EXPECT_EQ(Triple::dxil, T.getArch()); 741 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 742 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 743 EXPECT_EQ(Triple::Library, T.getEnvironment()); 744 745 T = Triple("dxil-unknown-shadermodel-raygeneration"); 746 EXPECT_EQ(Triple::dxil, T.getArch()); 747 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 748 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 749 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment()); 750 751 T = Triple("dxil-unknown-shadermodel-intersection"); 752 EXPECT_EQ(Triple::dxil, T.getArch()); 753 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 754 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 755 EXPECT_EQ(Triple::Intersection, T.getEnvironment()); 756 757 T = Triple("dxil-unknown-shadermodel-anyhit"); 758 EXPECT_EQ(Triple::dxil, T.getArch()); 759 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 760 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 761 EXPECT_EQ(Triple::AnyHit, T.getEnvironment()); 762 763 T = Triple("dxil-unknown-shadermodel-closesthit"); 764 EXPECT_EQ(Triple::dxil, T.getArch()); 765 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 766 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 767 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment()); 768 769 T = Triple("dxil-unknown-shadermodel-miss"); 770 EXPECT_EQ(Triple::dxil, T.getArch()); 771 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 772 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 773 EXPECT_EQ(Triple::Miss, T.getEnvironment()); 774 775 T = Triple("dxil-unknown-shadermodel-callable"); 776 EXPECT_EQ(Triple::dxil, T.getArch()); 777 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 778 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 779 EXPECT_EQ(Triple::Callable, T.getEnvironment()); 780 781 T = Triple("dxil-unknown-shadermodel-mesh"); 782 EXPECT_EQ(Triple::dxil, T.getArch()); 783 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 784 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 785 EXPECT_EQ(Triple::Mesh, T.getEnvironment()); 786 787 T = Triple("dxil-unknown-shadermodel-amplification"); 788 EXPECT_EQ(Triple::dxil, T.getArch()); 789 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 790 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 791 EXPECT_EQ(Triple::Amplification, T.getEnvironment()); 792 793 T = Triple("huh"); 794 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 795 } 796 797 static std::string Join(StringRef A, StringRef B, StringRef C) { 798 std::string Str = std::string(A); 799 Str += '-'; 800 Str += B; 801 Str += '-'; 802 Str += C; 803 return Str; 804 } 805 806 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 807 std::string Str = std::string(A); 808 Str += '-'; 809 Str += B; 810 Str += '-'; 811 Str += C; 812 Str += '-'; 813 Str += D; 814 return Str; 815 } 816 817 TEST(TripleTest, Normalization) { 818 819 EXPECT_EQ("unknown", Triple::normalize("")); 820 EXPECT_EQ("unknown-unknown", Triple::normalize("-")); 821 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--")); 822 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---")); 823 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown", 824 Triple::normalize("----")); 825 826 EXPECT_EQ("a", Triple::normalize("a")); 827 EXPECT_EQ("a-b", Triple::normalize("a-b")); 828 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 829 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 830 831 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 832 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 833 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 834 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 835 836 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 837 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c")); 838 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 839 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 840 841 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 842 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c")); 843 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c")); 844 845 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 846 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386")); 847 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c")); 848 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-")); 849 850 EXPECT_EQ("i386", Triple::normalize("i386")); 851 EXPECT_EQ("unknown-pc", Triple::normalize("pc")); 852 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux")); 853 854 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux")); 855 856 // Check that normalizing a permutated set of valid components returns a 857 // triple with the unpermuted components. 858 // 859 // We don't check every possible combination. For the set of architectures A, 860 // vendors V, operating systems O, and environments E, that would require |A| 861 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given 862 // slot and make sure it gets normalized to the correct position from every 863 // permutation. This should cover the core logic while being a tractable 864 // number of tests at (|A| + |V| + |O| + |E|) * 4!. 865 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1); 866 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1); 867 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1); 868 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1); 869 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType), 870 Triple::getVendorTypeName(FirstVendorType), 871 Triple::getOSTypeName(FirstOSType), 872 Triple::getEnvironmentTypeName(FirstEnvType)}; 873 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) { 874 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 875 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 876 std::string E = Join(C[0], C[1], C[2]); 877 int I[] = {0, 1, 2}; 878 do { 879 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 880 } while (std::next_permutation(std::begin(I), std::end(I))); 881 std::string F = Join(C[0], C[1], C[2], C[3]); 882 int J[] = {0, 1, 2, 3}; 883 do { 884 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 885 } while (std::next_permutation(std::begin(J), std::end(J))); 886 } 887 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType; 888 ++Vendor) { 889 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 890 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 891 std::string E = Join(C[0], C[1], C[2]); 892 int I[] = {0, 1, 2}; 893 do { 894 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 895 } while (std::next_permutation(std::begin(I), std::end(I))); 896 std::string F = Join(C[0], C[1], C[2], C[3]); 897 int J[] = {0, 1, 2, 3}; 898 do { 899 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 900 } while (std::next_permutation(std::begin(J), std::end(J))); 901 } 902 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) { 903 if (OS == Triple::Win32) 904 continue; 905 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 906 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 907 std::string E = Join(C[0], C[1], C[2]); 908 int I[] = {0, 1, 2}; 909 do { 910 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 911 } while (std::next_permutation(std::begin(I), std::end(I))); 912 std::string F = Join(C[0], C[1], C[2], C[3]); 913 int J[] = {0, 1, 2, 3}; 914 do { 915 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 916 } while (std::next_permutation(std::begin(J), std::end(J))); 917 } 918 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) { 919 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 920 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 921 std::string F = Join(C[0], C[1], C[2], C[3]); 922 int J[] = {0, 1, 2, 3}; 923 do { 924 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 925 } while (std::next_permutation(std::begin(J), std::end(J))); 926 } 927 928 // Various real-world funky triples. The value returned by GCC's config.sub 929 // is given in the comment. 930 EXPECT_EQ("i386-unknown-windows-gnu", 931 Triple::normalize("i386-mingw32")); // i386-pc-mingw32 932 EXPECT_EQ("x86_64-unknown-linux-gnu", 933 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 934 EXPECT_EQ("i486-unknown-linux-gnu", 935 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 936 EXPECT_EQ("i386-redhat-linux", 937 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 938 EXPECT_EQ("i686-unknown-linux", 939 Triple::normalize("i686-linux")); // i686-pc-linux-gnu 940 EXPECT_EQ("arm-none-unknown-eabi", 941 Triple::normalize("arm-none-eabi")); // arm-none-eabi 942 EXPECT_EQ("ve-unknown-linux", 943 Triple::normalize("ve-linux")); // ve-linux 944 EXPECT_EQ("wasm32-unknown-wasi", 945 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi 946 EXPECT_EQ("wasm64-unknown-wasi", 947 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi 948 } 949 950 TEST(TripleTest, MutateName) { 951 Triple T; 952 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 953 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 954 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 955 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 956 957 T.setArchName("i386"); 958 EXPECT_EQ(Triple::x86, T.getArch()); 959 EXPECT_EQ("i386--", T.getTriple()); 960 961 T.setVendorName("pc"); 962 EXPECT_EQ(Triple::x86, T.getArch()); 963 EXPECT_EQ(Triple::PC, T.getVendor()); 964 EXPECT_EQ("i386-pc-", T.getTriple()); 965 966 T.setOSName("linux"); 967 EXPECT_EQ(Triple::x86, T.getArch()); 968 EXPECT_EQ(Triple::PC, T.getVendor()); 969 EXPECT_EQ(Triple::Linux, T.getOS()); 970 EXPECT_EQ("i386-pc-linux", T.getTriple()); 971 972 T.setEnvironmentName("gnu"); 973 EXPECT_EQ(Triple::x86, T.getArch()); 974 EXPECT_EQ(Triple::PC, T.getVendor()); 975 EXPECT_EQ(Triple::Linux, T.getOS()); 976 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 977 978 T.setOSName("freebsd"); 979 EXPECT_EQ(Triple::x86, T.getArch()); 980 EXPECT_EQ(Triple::PC, T.getVendor()); 981 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 982 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 983 984 T.setOSAndEnvironmentName("darwin"); 985 EXPECT_EQ(Triple::x86, T.getArch()); 986 EXPECT_EQ(Triple::PC, T.getVendor()); 987 EXPECT_EQ(Triple::Darwin, T.getOS()); 988 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 989 } 990 991 TEST(TripleTest, BitWidthPredicates) { 992 Triple T; 993 EXPECT_FALSE(T.isArch16Bit()); 994 EXPECT_FALSE(T.isArch32Bit()); 995 EXPECT_FALSE(T.isArch64Bit()); 996 997 T.setArch(Triple::arm); 998 EXPECT_FALSE(T.isArch16Bit()); 999 EXPECT_TRUE(T.isArch32Bit()); 1000 EXPECT_FALSE(T.isArch64Bit()); 1001 1002 T.setArch(Triple::hexagon); 1003 EXPECT_FALSE(T.isArch16Bit()); 1004 EXPECT_TRUE(T.isArch32Bit()); 1005 EXPECT_FALSE(T.isArch64Bit()); 1006 1007 T.setArch(Triple::mips); 1008 EXPECT_FALSE(T.isArch16Bit()); 1009 EXPECT_TRUE(T.isArch32Bit()); 1010 EXPECT_FALSE(T.isArch64Bit()); 1011 1012 T.setArch(Triple::mips64); 1013 EXPECT_FALSE(T.isArch16Bit()); 1014 EXPECT_FALSE(T.isArch32Bit()); 1015 EXPECT_TRUE(T.isArch64Bit()); 1016 1017 T.setArch(Triple::msp430); 1018 EXPECT_TRUE(T.isArch16Bit()); 1019 EXPECT_FALSE(T.isArch32Bit()); 1020 EXPECT_FALSE(T.isArch64Bit()); 1021 1022 T.setArch(Triple::ppc); 1023 EXPECT_FALSE(T.isArch16Bit()); 1024 EXPECT_TRUE(T.isArch32Bit()); 1025 EXPECT_FALSE(T.isArch64Bit()); 1026 1027 T.setArch(Triple::ppc64); 1028 EXPECT_FALSE(T.isArch16Bit()); 1029 EXPECT_FALSE(T.isArch32Bit()); 1030 EXPECT_TRUE(T.isArch64Bit()); 1031 1032 T.setArch(Triple::x86); 1033 EXPECT_FALSE(T.isArch16Bit()); 1034 EXPECT_TRUE(T.isArch32Bit()); 1035 EXPECT_FALSE(T.isArch64Bit()); 1036 1037 T.setArch(Triple::x86_64); 1038 EXPECT_FALSE(T.isArch16Bit()); 1039 EXPECT_FALSE(T.isArch32Bit()); 1040 EXPECT_TRUE(T.isArch64Bit()); 1041 1042 T.setArch(Triple::amdil); 1043 EXPECT_FALSE(T.isArch16Bit()); 1044 EXPECT_TRUE(T.isArch32Bit()); 1045 EXPECT_FALSE(T.isArch64Bit()); 1046 1047 T.setArch(Triple::amdil64); 1048 EXPECT_FALSE(T.isArch16Bit()); 1049 EXPECT_FALSE(T.isArch32Bit()); 1050 EXPECT_TRUE(T.isArch64Bit()); 1051 1052 T.setArch(Triple::hsail); 1053 EXPECT_FALSE(T.isArch16Bit()); 1054 EXPECT_TRUE(T.isArch32Bit()); 1055 EXPECT_FALSE(T.isArch64Bit()); 1056 1057 T.setArch(Triple::hsail64); 1058 EXPECT_FALSE(T.isArch16Bit()); 1059 EXPECT_FALSE(T.isArch32Bit()); 1060 EXPECT_TRUE(T.isArch64Bit()); 1061 1062 T.setArch(Triple::spir); 1063 EXPECT_FALSE(T.isArch16Bit()); 1064 EXPECT_TRUE(T.isArch32Bit()); 1065 EXPECT_FALSE(T.isArch64Bit()); 1066 1067 T.setArch(Triple::spir64); 1068 EXPECT_FALSE(T.isArch16Bit()); 1069 EXPECT_FALSE(T.isArch32Bit()); 1070 EXPECT_TRUE(T.isArch64Bit()); 1071 1072 T.setArch(Triple::spirv32); 1073 EXPECT_FALSE(T.isArch16Bit()); 1074 EXPECT_TRUE(T.isArch32Bit()); 1075 EXPECT_FALSE(T.isArch64Bit()); 1076 EXPECT_TRUE(T.isSPIRV()); 1077 1078 T.setArch(Triple::spirv64); 1079 EXPECT_FALSE(T.isArch16Bit()); 1080 EXPECT_FALSE(T.isArch32Bit()); 1081 EXPECT_TRUE(T.isArch64Bit()); 1082 EXPECT_TRUE(T.isSPIRV()); 1083 1084 T.setArch(Triple::sparc); 1085 EXPECT_FALSE(T.isArch16Bit()); 1086 EXPECT_TRUE(T.isArch32Bit()); 1087 EXPECT_FALSE(T.isArch64Bit()); 1088 1089 T.setArch(Triple::sparcel); 1090 EXPECT_FALSE(T.isArch16Bit()); 1091 EXPECT_TRUE(T.isArch32Bit()); 1092 EXPECT_FALSE(T.isArch64Bit()); 1093 1094 T.setArch(Triple::sparcv9); 1095 EXPECT_FALSE(T.isArch16Bit()); 1096 EXPECT_FALSE(T.isArch32Bit()); 1097 EXPECT_TRUE(T.isArch64Bit()); 1098 1099 T.setArch(Triple::wasm32); 1100 EXPECT_FALSE(T.isArch16Bit()); 1101 EXPECT_TRUE(T.isArch32Bit()); 1102 EXPECT_FALSE(T.isArch64Bit()); 1103 1104 T.setArch(Triple::wasm64); 1105 EXPECT_FALSE(T.isArch16Bit()); 1106 EXPECT_FALSE(T.isArch32Bit()); 1107 EXPECT_TRUE(T.isArch64Bit()); 1108 1109 T.setArch(Triple::avr); 1110 EXPECT_TRUE(T.isArch16Bit()); 1111 EXPECT_FALSE(T.isArch32Bit()); 1112 EXPECT_FALSE(T.isArch64Bit()); 1113 1114 T.setArch(Triple::lanai); 1115 EXPECT_FALSE(T.isArch16Bit()); 1116 EXPECT_TRUE(T.isArch32Bit()); 1117 EXPECT_FALSE(T.isArch64Bit()); 1118 1119 T.setArch(Triple::riscv32); 1120 EXPECT_FALSE(T.isArch16Bit()); 1121 EXPECT_TRUE(T.isArch32Bit()); 1122 EXPECT_FALSE(T.isArch64Bit()); 1123 EXPECT_TRUE(T.isRISCV()); 1124 1125 T.setArch(Triple::riscv64); 1126 EXPECT_FALSE(T.isArch16Bit()); 1127 EXPECT_FALSE(T.isArch32Bit()); 1128 EXPECT_TRUE(T.isArch64Bit()); 1129 EXPECT_TRUE(T.isRISCV()); 1130 1131 T.setArch(Triple::csky); 1132 EXPECT_FALSE(T.isArch16Bit()); 1133 EXPECT_TRUE(T.isArch32Bit()); 1134 EXPECT_FALSE(T.isArch64Bit()); 1135 EXPECT_TRUE(T.isCSKY()); 1136 1137 T.setArch(Triple::loongarch32); 1138 EXPECT_FALSE(T.isArch16Bit()); 1139 EXPECT_TRUE(T.isArch32Bit()); 1140 EXPECT_FALSE(T.isArch64Bit()); 1141 EXPECT_TRUE(T.isLoongArch()); 1142 1143 T.setArch(Triple::loongarch64); 1144 EXPECT_FALSE(T.isArch16Bit()); 1145 EXPECT_FALSE(T.isArch32Bit()); 1146 EXPECT_TRUE(T.isArch64Bit()); 1147 EXPECT_TRUE(T.isLoongArch()); 1148 1149 T.setArch(Triple::dxil); 1150 EXPECT_FALSE(T.isArch16Bit()); 1151 EXPECT_TRUE(T.isArch32Bit()); 1152 EXPECT_FALSE(T.isArch64Bit()); 1153 EXPECT_TRUE(T.isDXIL()); 1154 } 1155 1156 TEST(TripleTest, BitWidthArchVariants) { 1157 Triple T; 1158 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1159 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1160 1161 T.setArch(Triple::UnknownArch); 1162 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1163 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1164 1165 T.setArch(Triple::mips); 1166 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1167 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1168 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1169 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1170 1171 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1172 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1173 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1174 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1175 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1176 1177 T.setArch(Triple::mipsel); 1178 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1179 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1180 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1181 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1182 1183 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1184 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1185 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1186 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1187 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1188 1189 T.setArch(Triple::ppc); 1190 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1191 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1192 1193 T.setArch(Triple::nvptx); 1194 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1195 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1196 1197 T.setArch(Triple::sparc); 1198 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1199 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1200 1201 T.setArch(Triple::x86); 1202 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1203 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1204 1205 T.setArch(Triple::mips64); 1206 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1207 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1208 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1209 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1210 1211 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1212 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1213 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1214 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1215 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1216 1217 T.setArch(Triple::mips64el); 1218 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1219 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1220 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1221 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1222 1223 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1224 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1225 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1226 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1227 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1228 1229 T.setArch(Triple::ppc64); 1230 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1231 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1232 1233 T.setArch(Triple::nvptx64); 1234 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1235 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1236 1237 T.setArch(Triple::sparcv9); 1238 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1239 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1240 1241 T.setArch(Triple::x86_64); 1242 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1243 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1244 1245 T.setArch(Triple::amdil); 1246 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1247 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1248 1249 T.setArch(Triple::amdil64); 1250 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1251 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1252 1253 T.setArch(Triple::hsail); 1254 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1255 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1256 1257 T.setArch(Triple::hsail64); 1258 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1259 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1260 1261 T.setArch(Triple::spir); 1262 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1263 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1264 1265 T.setArch(Triple::spir64); 1266 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1267 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1268 1269 T.setArch(Triple::spirv32); 1270 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1271 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1272 1273 T.setArch(Triple::spirv64); 1274 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1275 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1276 1277 T.setArch(Triple::wasm32); 1278 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1279 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1280 1281 T.setArch(Triple::wasm64); 1282 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1283 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1284 1285 T.setArch(Triple::riscv32); 1286 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1287 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1288 1289 T.setArch(Triple::riscv64); 1290 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1291 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1292 1293 T.setArch(Triple::csky); 1294 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch()); 1295 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1296 1297 T.setArch(Triple::loongarch32); 1298 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1299 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1300 1301 T.setArch(Triple::loongarch64); 1302 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1303 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1304 1305 T.setArch(Triple::thumbeb); 1306 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); 1307 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1308 1309 T.setArch(Triple::thumb); 1310 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch()); 1311 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1312 1313 T.setArch(Triple::aarch64); 1314 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1315 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1316 1317 T.setArch(Triple::aarch64_be); 1318 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1319 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1320 1321 T.setArch(Triple::renderscript32); 1322 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1323 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1324 1325 T.setArch(Triple::renderscript64); 1326 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1327 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1328 1329 T.setArch(Triple::armeb); 1330 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1331 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1332 1333 T.setArch(Triple::arm); 1334 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1335 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1336 1337 T.setArch(Triple::systemz); 1338 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1339 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch()); 1340 1341 T.setArch(Triple::xcore); 1342 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch()); 1343 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1344 1345 T.setArch(Triple::dxil); 1346 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch()); 1347 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1348 } 1349 1350 TEST(TripleTest, EndianArchVariants) { 1351 Triple T; 1352 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1353 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1354 1355 T.setArch(Triple::UnknownArch); 1356 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1357 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1358 1359 T.setArch(Triple::aarch64_be); 1360 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1361 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1362 1363 T.setArch(Triple::aarch64); 1364 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1365 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1366 1367 T.setArch(Triple::armeb); 1368 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 1369 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1370 1371 T.setArch(Triple::arm); 1372 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1373 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 1374 T = Triple("arm"); 1375 EXPECT_TRUE(T.isLittleEndian()); 1376 T = Triple("thumb"); 1377 EXPECT_TRUE(T.isLittleEndian()); 1378 T = Triple("armeb"); 1379 EXPECT_FALSE(T.isLittleEndian()); 1380 T = Triple("thumbeb"); 1381 EXPECT_FALSE(T.isLittleEndian()); 1382 1383 T.setArch(Triple::bpfeb); 1384 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1385 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1386 1387 T.setArch(Triple::bpfel); 1388 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1389 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1390 1391 T.setArch(Triple::mips64); 1392 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1393 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1394 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1395 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1396 1397 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1398 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1399 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1400 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1401 EXPECT_EQ(Triple::MipsSubArch_r6, 1402 T.getLittleEndianArchVariant().getSubArch()); 1403 1404 T.setArch(Triple::mips64el); 1405 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1406 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1407 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1408 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1409 1410 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1411 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1412 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1413 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1414 EXPECT_EQ(Triple::MipsSubArch_r6, 1415 T.getLittleEndianArchVariant().getSubArch()); 1416 1417 T.setArch(Triple::mips); 1418 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1419 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1420 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1421 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1422 1423 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1424 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1425 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1426 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1427 EXPECT_EQ(Triple::MipsSubArch_r6, 1428 T.getLittleEndianArchVariant().getSubArch()); 1429 1430 T.setArch(Triple::mipsel); 1431 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1432 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1433 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1434 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1435 1436 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1437 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1438 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1439 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1440 EXPECT_EQ(Triple::MipsSubArch_r6, 1441 T.getLittleEndianArchVariant().getSubArch()); 1442 1443 T.setArch(Triple::ppc); 1444 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 1445 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch()); 1446 1447 T.setArch(Triple::ppc64); 1448 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1449 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1450 1451 T.setArch(Triple::ppc64le); 1452 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1453 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1454 1455 T.setArch(Triple::sparc); 1456 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1457 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1458 1459 T.setArch(Triple::sparcel); 1460 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1461 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1462 1463 T.setArch(Triple::thumb); 1464 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1465 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 1466 1467 T.setArch(Triple::thumbeb); 1468 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 1469 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1470 1471 T.setArch(Triple::lanai); 1472 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 1473 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1474 1475 T.setArch(Triple::tcele); 1476 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1477 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1478 1479 T.setArch(Triple::tce); 1480 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1481 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1482 1483 T.setArch(Triple::csky); 1484 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1485 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch()); 1486 1487 T.setArch(Triple::loongarch32); 1488 EXPECT_TRUE(T.isLittleEndian()); 1489 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1490 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch()); 1491 1492 T.setArch(Triple::loongarch64); 1493 EXPECT_TRUE(T.isLittleEndian()); 1494 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1495 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch()); 1496 1497 T.setArch(Triple::dxil); 1498 EXPECT_TRUE(T.isLittleEndian()); 1499 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1500 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch()); 1501 } 1502 1503 TEST(TripleTest, getOSVersion) { 1504 Triple T; 1505 VersionTuple Version; 1506 1507 T = Triple("i386-apple-darwin9"); 1508 EXPECT_TRUE(T.isMacOSX()); 1509 EXPECT_FALSE(T.isiOS()); 1510 EXPECT_FALSE(T.isArch16Bit()); 1511 EXPECT_TRUE(T.isArch32Bit()); 1512 EXPECT_FALSE(T.isArch64Bit()); 1513 T.getMacOSXVersion(Version); 1514 EXPECT_EQ(VersionTuple(10, 5), Version); 1515 Version = T.getiOSVersion(); 1516 EXPECT_EQ(VersionTuple(5), Version); 1517 1518 T = Triple("x86_64-apple-darwin9"); 1519 EXPECT_TRUE(T.isMacOSX()); 1520 EXPECT_FALSE(T.isiOS()); 1521 EXPECT_FALSE(T.isArch16Bit()); 1522 EXPECT_FALSE(T.isArch32Bit()); 1523 EXPECT_TRUE(T.isArch64Bit()); 1524 T.getMacOSXVersion(Version); 1525 EXPECT_EQ(VersionTuple(10, 5), Version); 1526 Version = T.getiOSVersion(); 1527 EXPECT_EQ(VersionTuple(5), Version); 1528 1529 T = Triple("x86_64-apple-macosx"); 1530 EXPECT_TRUE(T.isMacOSX()); 1531 EXPECT_FALSE(T.isiOS()); 1532 EXPECT_FALSE(T.isArch16Bit()); 1533 EXPECT_FALSE(T.isArch32Bit()); 1534 EXPECT_TRUE(T.isArch64Bit()); 1535 T.getMacOSXVersion(Version); 1536 EXPECT_EQ(VersionTuple(10, 4), Version); 1537 Version = T.getiOSVersion(); 1538 EXPECT_EQ(VersionTuple(5), Version); 1539 1540 T = Triple("x86_64-apple-macosx10.7"); 1541 EXPECT_TRUE(T.isMacOSX()); 1542 EXPECT_FALSE(T.isiOS()); 1543 EXPECT_FALSE(T.isArch16Bit()); 1544 EXPECT_FALSE(T.isArch32Bit()); 1545 EXPECT_TRUE(T.isArch64Bit()); 1546 T.getMacOSXVersion(Version); 1547 EXPECT_EQ(VersionTuple(10, 7), Version); 1548 Version = T.getiOSVersion(); 1549 EXPECT_EQ(VersionTuple(5), Version); 1550 1551 T = Triple("x86_64-apple-macos11.0"); 1552 EXPECT_TRUE(T.isMacOSX()); 1553 EXPECT_FALSE(T.isiOS()); 1554 EXPECT_FALSE(T.isArch16Bit()); 1555 EXPECT_FALSE(T.isArch32Bit()); 1556 EXPECT_TRUE(T.isArch64Bit()); 1557 T.getMacOSXVersion(Version); 1558 EXPECT_EQ(VersionTuple(11, 0), Version); 1559 1560 T = Triple("arm64-apple-macosx11.5.8"); 1561 EXPECT_TRUE(T.isMacOSX()); 1562 EXPECT_FALSE(T.isiOS()); 1563 EXPECT_FALSE(T.isArch16Bit()); 1564 EXPECT_FALSE(T.isArch32Bit()); 1565 EXPECT_TRUE(T.isArch64Bit()); 1566 T.getMacOSXVersion(Version); 1567 EXPECT_EQ(VersionTuple(11, 5, 8), Version); 1568 1569 // 10.16 forms a valid triple, even though it's not 1570 // a version of a macOS. 1571 T = Triple("x86_64-apple-macos10.16"); 1572 EXPECT_TRUE(T.isMacOSX()); 1573 T.getMacOSXVersion(Version); 1574 EXPECT_EQ(VersionTuple(10, 16), Version); 1575 1576 T = Triple("x86_64-apple-darwin20"); 1577 EXPECT_TRUE(T.isMacOSX()); 1578 T.getMacOSXVersion(Version); 1579 EXPECT_EQ(VersionTuple(11), Version); 1580 1581 // For darwin triples on macOS 11, only compare the major version. 1582 T = Triple("x86_64-apple-darwin20.2"); 1583 EXPECT_TRUE(T.isMacOSX()); 1584 T.getMacOSXVersion(Version); 1585 EXPECT_EQ(VersionTuple(11), Version); 1586 1587 T = Triple("armv7-apple-ios"); 1588 EXPECT_FALSE(T.isMacOSX()); 1589 EXPECT_TRUE(T.isiOS()); 1590 EXPECT_FALSE(T.isArch16Bit()); 1591 EXPECT_TRUE(T.isArch32Bit()); 1592 EXPECT_FALSE(T.isArch64Bit()); 1593 T.getMacOSXVersion(Version); 1594 EXPECT_EQ(VersionTuple(10, 4), Version); 1595 Version = T.getiOSVersion(); 1596 EXPECT_EQ(VersionTuple(5), Version); 1597 1598 T = Triple("armv7-apple-ios7.0"); 1599 EXPECT_FALSE(T.isMacOSX()); 1600 EXPECT_TRUE(T.isiOS()); 1601 EXPECT_FALSE(T.isArch16Bit()); 1602 EXPECT_TRUE(T.isArch32Bit()); 1603 EXPECT_FALSE(T.isArch64Bit()); 1604 T.getMacOSXVersion(Version); 1605 EXPECT_EQ(VersionTuple(10, 4), Version); 1606 Version = T.getiOSVersion(); 1607 EXPECT_EQ(VersionTuple(7, 0), Version); 1608 EXPECT_FALSE(T.isSimulatorEnvironment()); 1609 1610 T = Triple("x86_64-apple-ios10.3-simulator"); 1611 EXPECT_TRUE(T.isiOS()); 1612 Version = T.getiOSVersion(); 1613 EXPECT_EQ(VersionTuple(10, 3), Version); 1614 EXPECT_TRUE(T.isSimulatorEnvironment()); 1615 EXPECT_FALSE(T.isMacCatalystEnvironment()); 1616 1617 T = Triple("x86_64-apple-ios13.0-macabi"); 1618 EXPECT_TRUE(T.isiOS()); 1619 Version = T.getiOSVersion(); 1620 EXPECT_EQ(VersionTuple(13, 0), Version); 1621 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI); 1622 EXPECT_TRUE(T.isMacCatalystEnvironment()); 1623 EXPECT_FALSE(T.isSimulatorEnvironment()); 1624 1625 T = Triple("x86_64-apple-driverkit20.1.0"); 1626 EXPECT_TRUE(T.isDriverKit()); 1627 EXPECT_TRUE(T.isOSDarwin()); 1628 EXPECT_FALSE(T.isMacOSX()); 1629 EXPECT_FALSE(T.isiOS()); 1630 Version = T.getDriverKitVersion(); 1631 EXPECT_EQ(VersionTuple(20, 1), Version); 1632 1633 T = Triple("x86_64-apple-driverkit20"); 1634 Version = T.getDriverKitVersion(); 1635 EXPECT_EQ(VersionTuple(20, 0), Version); 1636 1637 // DriverKit version should default to 19.0. 1638 T = Triple("x86_64-apple-driverkit"); 1639 Version = T.getDriverKitVersion(); 1640 EXPECT_EQ(VersionTuple(19, 0), Version); 1641 1642 T = Triple("dxil-unknown-shadermodel6.6-pixel"); 1643 EXPECT_EQ(Triple::dxil, T.getArch()); 1644 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1645 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1646 Version = T.getOSVersion(); 1647 EXPECT_EQ(VersionTuple(6, 6), Version); 1648 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 1649 1650 T = Triple("dxil-unknown-shadermodel6.0-pixel"); 1651 EXPECT_EQ(Triple::dxil, T.getArch()); 1652 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1653 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1654 Version = T.getOSVersion(); 1655 EXPECT_EQ(VersionTuple(6, 0), Version); 1656 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 1657 } 1658 1659 TEST(TripleTest, getEnvironmentVersion) { 1660 Triple T; 1661 VersionTuple Version; 1662 1663 T = Triple("arm-unknown-linux-android16"); 1664 EXPECT_TRUE(T.isAndroid()); 1665 Version = T.getEnvironmentVersion(); 1666 EXPECT_EQ(VersionTuple(16), Version); 1667 EXPECT_EQ(Triple::Android, T.getEnvironment()); 1668 1669 T = Triple("aarch64-unknown-linux-android21"); 1670 EXPECT_TRUE(T.isAndroid()); 1671 Version = T.getEnvironmentVersion(); 1672 EXPECT_EQ(VersionTuple(21), Version); 1673 EXPECT_EQ(Triple::Android, T.getEnvironment()); 1674 } 1675 1676 TEST(TripleTest, isMacOSVersionLT) { 1677 Triple T = Triple("x86_64-apple-macos11"); 1678 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 1679 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 1680 1681 T = Triple("x86_64-apple-darwin20"); 1682 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 1683 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0)); 1684 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 1685 } 1686 1687 TEST(TripleTest, CanonicalizeOSVersion) { 1688 EXPECT_EQ(VersionTuple(10, 15, 4), 1689 Triple::getCanonicalVersionForOS(Triple::MacOSX, 1690 VersionTuple(10, 15, 4))); 1691 EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS( 1692 Triple::MacOSX, VersionTuple(10, 16))); 1693 EXPECT_EQ(VersionTuple(20), 1694 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20))); 1695 } 1696 1697 TEST(TripleTest, FileFormat) { 1698 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 1699 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 1700 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 1701 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 1702 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 1703 1704 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 1705 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 1706 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 1707 1708 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 1709 1710 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 1711 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 1712 1713 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat()); 1714 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat()); 1715 1716 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat()); 1717 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat()); 1718 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat()); 1719 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat()); 1720 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat()); 1721 1722 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); 1723 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); 1724 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat()); 1725 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat()); 1726 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat()); 1727 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat()); 1728 1729 EXPECT_EQ(Triple::Wasm, 1730 Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); 1731 EXPECT_EQ(Triple::Wasm, 1732 Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); 1733 EXPECT_EQ(Triple::Wasm, 1734 Triple("wasm32-wasi-wasm").getObjectFormat()); 1735 EXPECT_EQ(Triple::Wasm, 1736 Triple("wasm64-wasi-wasm").getObjectFormat()); 1737 EXPECT_EQ(Triple::Wasm, 1738 Triple("wasm32-unknown-wasi-wasm").getObjectFormat()); 1739 EXPECT_EQ(Triple::Wasm, 1740 Triple("wasm64-unknown-wasi-wasm").getObjectFormat()); 1741 1742 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat()); 1743 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat()); 1744 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat()); 1745 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat()); 1746 1747 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat()); 1748 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat()); 1749 1750 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat()); 1751 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat()); 1752 1753 EXPECT_EQ(Triple::ELF, 1754 Triple("loongarch32-unknown-unknown").getObjectFormat()); 1755 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat()); 1756 1757 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 1758 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 1759 1760 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 1761 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 1762 1763 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 1764 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 1765 1766 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 1767 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 1768 1769 EXPECT_EQ(Triple::DXContainer, 1770 Triple("dxil-unknown-shadermodel").getObjectFormat()); 1771 1772 Triple T = Triple(""); 1773 T.setObjectFormat(Triple::ELF); 1774 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 1775 1776 T.setObjectFormat(Triple::MachO); 1777 EXPECT_EQ(Triple::MachO, T.getObjectFormat()); 1778 1779 T.setObjectFormat(Triple::XCOFF); 1780 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat()); 1781 1782 T.setObjectFormat(Triple::GOFF); 1783 EXPECT_EQ(Triple::GOFF, T.getObjectFormat()); 1784 1785 T.setObjectFormat(Triple::SPIRV); 1786 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat()); 1787 } 1788 1789 TEST(TripleTest, NormalizeWindows) { 1790 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 1791 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32")); 1792 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 1793 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32")); 1794 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 1795 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64")); 1796 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 1797 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin")); 1798 1799 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 1800 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32")); 1801 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 1802 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32")); 1803 EXPECT_EQ("x86_64-pc-windows-gnu", 1804 Triple::normalize("x86_64-pc-mingw32-w64")); 1805 EXPECT_EQ("x86_64-unknown-windows-gnu", 1806 Triple::normalize("x86_64-mingw32-w64")); 1807 1808 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 1809 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf")); 1810 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 1811 EXPECT_EQ("i686-unknown-windows-macho", 1812 Triple::normalize("i686-win32-macho")); 1813 1814 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 1815 EXPECT_EQ("x86_64-unknown-windows-elf", 1816 Triple::normalize("x86_64-win32-elf")); 1817 EXPECT_EQ("x86_64-pc-windows-macho", 1818 Triple::normalize("x86_64-pc-win32-macho")); 1819 EXPECT_EQ("x86_64-unknown-windows-macho", 1820 Triple::normalize("x86_64-win32-macho")); 1821 1822 EXPECT_EQ("i686-pc-windows-cygnus", 1823 Triple::normalize("i686-pc-windows-cygnus")); 1824 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 1825 EXPECT_EQ("i686-pc-windows-itanium", 1826 Triple::normalize("i686-pc-windows-itanium")); 1827 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 1828 1829 EXPECT_EQ("i686-pc-windows-elf", 1830 Triple::normalize("i686-pc-windows-elf-elf")); 1831 1832 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment()); 1833 } 1834 1835 TEST(TripleTest, NormalizeAndroid) { 1836 EXPECT_EQ("arm-unknown-linux-android16", 1837 Triple::normalize("arm-linux-androideabi16")); 1838 EXPECT_EQ("armv7a-unknown-linux-android", 1839 Triple::normalize("armv7a-linux-androideabi")); 1840 EXPECT_EQ("aarch64-unknown-linux-android21", 1841 Triple::normalize("aarch64-linux-android21")); 1842 } 1843 1844 TEST(TripleTest, getARMCPUForArch) { 1845 // Platform specific defaults. 1846 { 1847 llvm::Triple Triple("arm--nacl"); 1848 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 1849 } 1850 { 1851 llvm::Triple Triple("arm--openbsd"); 1852 EXPECT_EQ("cortex-a8", Triple.getARMCPUForArch()); 1853 } 1854 { 1855 llvm::Triple Triple("armv6-unknown-freebsd"); 1856 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1857 } 1858 { 1859 llvm::Triple Triple("thumbv6-unknown-freebsd"); 1860 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1861 } 1862 { 1863 llvm::Triple Triple("armebv6-unknown-freebsd"); 1864 EXPECT_EQ("arm1176jzf-s", Triple.getARMCPUForArch()); 1865 } 1866 { 1867 llvm::Triple Triple("arm--win32"); 1868 EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch()); 1869 EXPECT_EQ("generic", Triple.getARMCPUForArch("armv8-a")); 1870 } 1871 // Some alternative architectures 1872 { 1873 llvm::Triple Triple("armv7k-apple-ios9"); 1874 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1875 } 1876 { 1877 llvm::Triple Triple("armv7k-apple-watchos3"); 1878 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1879 } 1880 { 1881 llvm::Triple Triple("armv7k-apple-tvos9"); 1882 EXPECT_EQ("cortex-a7", Triple.getARMCPUForArch()); 1883 } 1884 // armeb is permitted, but armebeb is not 1885 { 1886 llvm::Triple Triple("armeb-none-eabi"); 1887 EXPECT_EQ("arm7tdmi", Triple.getARMCPUForArch()); 1888 } 1889 { 1890 llvm::Triple Triple("armebeb-none-eabi"); 1891 EXPECT_EQ("", Triple.getARMCPUForArch()); 1892 } 1893 { 1894 llvm::Triple Triple("armebv6eb-none-eabi"); 1895 EXPECT_EQ("", Triple.getARMCPUForArch()); 1896 } 1897 // xscaleeb is permitted, but armebxscale is not 1898 { 1899 llvm::Triple Triple("xscaleeb-none-eabi"); 1900 EXPECT_EQ("xscale", Triple.getARMCPUForArch()); 1901 } 1902 { 1903 llvm::Triple Triple("armebxscale-none-eabi"); 1904 EXPECT_EQ("", Triple.getARMCPUForArch()); 1905 } 1906 } 1907 1908 TEST(TripleTest, NormalizeARM) { 1909 EXPECT_EQ("armv6-unknown-netbsd-eabi", 1910 Triple::normalize("armv6-netbsd-eabi")); 1911 EXPECT_EQ("armv7-unknown-netbsd-eabi", 1912 Triple::normalize("armv7-netbsd-eabi")); 1913 EXPECT_EQ("armv6eb-unknown-netbsd-eabi", 1914 Triple::normalize("armv6eb-netbsd-eabi")); 1915 EXPECT_EQ("armv7eb-unknown-netbsd-eabi", 1916 Triple::normalize("armv7eb-netbsd-eabi")); 1917 EXPECT_EQ("armv6-unknown-netbsd-eabihf", 1918 Triple::normalize("armv6-netbsd-eabihf")); 1919 EXPECT_EQ("armv7-unknown-netbsd-eabihf", 1920 Triple::normalize("armv7-netbsd-eabihf")); 1921 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf", 1922 Triple::normalize("armv6eb-netbsd-eabihf")); 1923 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf", 1924 Triple::normalize("armv7eb-netbsd-eabihf")); 1925 1926 EXPECT_EQ("armv7-suse-linux-gnueabihf", 1927 Triple::normalize("armv7-suse-linux-gnueabi")); 1928 1929 Triple T; 1930 T = Triple("armv6--netbsd-eabi"); 1931 EXPECT_EQ(Triple::arm, T.getArch()); 1932 T = Triple("armv6eb--netbsd-eabi"); 1933 EXPECT_EQ(Triple::armeb, T.getArch()); 1934 T = Triple("armv7-suse-linux-gnueabihf"); 1935 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 1936 } 1937 1938 TEST(TripleTest, ParseARMArch) { 1939 // ARM 1940 { 1941 Triple T = Triple("arm"); 1942 EXPECT_EQ(Triple::arm, T.getArch()); 1943 } 1944 { 1945 Triple T = Triple("armeb"); 1946 EXPECT_EQ(Triple::armeb, T.getArch()); 1947 } 1948 // THUMB 1949 { 1950 Triple T = Triple("thumb"); 1951 EXPECT_EQ(Triple::thumb, T.getArch()); 1952 } 1953 { 1954 Triple T = Triple("thumbeb"); 1955 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1956 } 1957 // AARCH64 1958 { 1959 Triple T = Triple("arm64"); 1960 EXPECT_EQ(Triple::aarch64, T.getArch()); 1961 } 1962 { 1963 Triple T = Triple("arm64_32"); 1964 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 1965 } 1966 { 1967 Triple T = Triple("aarch64"); 1968 EXPECT_EQ(Triple::aarch64, T.getArch()); 1969 } 1970 { 1971 Triple T = Triple("aarch64_be"); 1972 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 1973 } 1974 { 1975 Triple T = Triple("arm64e"); 1976 EXPECT_EQ(Triple::aarch64, T.getArch()); 1977 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch()); 1978 } 1979 } 1980 1981 TEST(TripleTest, isArmT32) { 1982 // Not isArmT32 1983 { 1984 Triple T = Triple("thumbv6m"); 1985 EXPECT_FALSE(T.isArmT32()); 1986 } 1987 { 1988 Triple T = Triple("armv8m.base"); 1989 EXPECT_FALSE(T.isArmT32()); 1990 } 1991 { 1992 Triple T = Triple("armv7s"); 1993 EXPECT_FALSE(T.isArmT32()); 1994 } 1995 { 1996 Triple T = Triple("armv7k"); 1997 EXPECT_FALSE(T.isArmT32()); 1998 } 1999 { 2000 Triple T = Triple("armv7ve"); 2001 EXPECT_FALSE(T.isArmT32()); 2002 } 2003 { 2004 Triple T = Triple("armv6"); 2005 EXPECT_FALSE(T.isArmT32()); 2006 } 2007 { 2008 Triple T = Triple("armv6m"); 2009 EXPECT_FALSE(T.isArmT32()); 2010 } 2011 { 2012 Triple T = Triple("armv6k"); 2013 EXPECT_FALSE(T.isArmT32()); 2014 } 2015 { 2016 Triple T = Triple("armv6t2"); 2017 EXPECT_FALSE(T.isArmT32()); 2018 } 2019 { 2020 Triple T = Triple("armv5"); 2021 EXPECT_FALSE(T.isArmT32()); 2022 } 2023 { 2024 Triple T = Triple("armv5te"); 2025 EXPECT_FALSE(T.isArmT32()); 2026 } 2027 { 2028 Triple T = Triple("armv4t"); 2029 EXPECT_FALSE(T.isArmT32()); 2030 } 2031 2032 // isArmT32 2033 { 2034 Triple T = Triple("arm"); 2035 EXPECT_TRUE(T.isArmT32()); 2036 } 2037 { 2038 Triple T = Triple("armv7m"); 2039 EXPECT_TRUE(T.isArmT32()); 2040 } 2041 { 2042 Triple T = Triple("armv7em"); 2043 EXPECT_TRUE(T.isArmT32()); 2044 } 2045 { 2046 Triple T = Triple("armv8m.main"); 2047 EXPECT_TRUE(T.isArmT32()); 2048 } 2049 { 2050 Triple T = Triple("armv8.1m.main"); 2051 EXPECT_TRUE(T.isArmT32()); 2052 } 2053 } 2054 2055 TEST(TripleTest, isArmMClass) { 2056 // not M-class 2057 { 2058 Triple T = Triple("armv7s"); 2059 EXPECT_FALSE(T.isArmMClass()); 2060 } 2061 { 2062 Triple T = Triple("armv7k"); 2063 EXPECT_FALSE(T.isArmMClass()); 2064 } 2065 { 2066 Triple T = Triple("armv7ve"); 2067 EXPECT_FALSE(T.isArmMClass()); 2068 } 2069 { 2070 Triple T = Triple("armv6"); 2071 EXPECT_FALSE(T.isArmMClass()); 2072 } 2073 { 2074 Triple T = Triple("armv6k"); 2075 EXPECT_FALSE(T.isArmMClass()); 2076 } 2077 { 2078 Triple T = Triple("armv6t2"); 2079 EXPECT_FALSE(T.isArmMClass()); 2080 } 2081 { 2082 Triple T = Triple("armv5"); 2083 EXPECT_FALSE(T.isArmMClass()); 2084 } 2085 { 2086 Triple T = Triple("armv5te"); 2087 EXPECT_FALSE(T.isArmMClass()); 2088 } 2089 { 2090 Triple T = Triple("armv4t"); 2091 EXPECT_FALSE(T.isArmMClass()); 2092 } 2093 { 2094 Triple T = Triple("arm"); 2095 EXPECT_FALSE(T.isArmMClass()); 2096 } 2097 2098 // is M-class 2099 { 2100 Triple T = Triple("armv6m"); 2101 EXPECT_TRUE(T.isArmMClass()); 2102 } 2103 { 2104 Triple T = Triple("armv7m"); 2105 EXPECT_TRUE(T.isArmMClass()); 2106 } 2107 { 2108 Triple T = Triple("armv7em"); 2109 EXPECT_TRUE(T.isArmMClass()); 2110 } 2111 { 2112 Triple T = Triple("armv8m.base"); 2113 EXPECT_TRUE(T.isArmMClass()); 2114 } 2115 { 2116 Triple T = Triple("armv8m.main"); 2117 EXPECT_TRUE(T.isArmMClass()); 2118 } 2119 { 2120 Triple T = Triple("armv8.1m.main"); 2121 EXPECT_TRUE(T.isArmMClass()); 2122 } 2123 } 2124 } // end anonymous namespace 2125