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/TargetParser/Triple.h" 10 #include "llvm/Support/FormatVariadic.h" 11 #include "llvm/Support/VersionTuple.h" 12 #include "gtest/gtest.h" 13 14 using namespace llvm; 15 16 namespace { 17 18 TEST(TripleTest, BasicParsing) { 19 Triple T; 20 21 T = Triple(""); 22 EXPECT_EQ("", T.getArchName().str()); 23 EXPECT_EQ("", T.getVendorName().str()); 24 EXPECT_EQ("", T.getOSName().str()); 25 EXPECT_EQ("", T.getEnvironmentName().str()); 26 27 T = Triple("-"); 28 EXPECT_EQ("", T.getArchName().str()); 29 EXPECT_EQ("", T.getVendorName().str()); 30 EXPECT_EQ("", T.getOSName().str()); 31 EXPECT_EQ("", T.getEnvironmentName().str()); 32 33 T = Triple("--"); 34 EXPECT_EQ("", T.getArchName().str()); 35 EXPECT_EQ("", T.getVendorName().str()); 36 EXPECT_EQ("", T.getOSName().str()); 37 EXPECT_EQ("", T.getEnvironmentName().str()); 38 39 T = Triple("---"); 40 EXPECT_EQ("", T.getArchName().str()); 41 EXPECT_EQ("", T.getVendorName().str()); 42 EXPECT_EQ("", T.getOSName().str()); 43 EXPECT_EQ("", T.getEnvironmentName().str()); 44 45 T = Triple("----"); 46 EXPECT_EQ("", T.getArchName().str()); 47 EXPECT_EQ("", T.getVendorName().str()); 48 EXPECT_EQ("", T.getOSName().str()); 49 EXPECT_EQ("-", T.getEnvironmentName().str()); 50 51 T = Triple("a"); 52 EXPECT_EQ("a", T.getArchName().str()); 53 EXPECT_EQ("", T.getVendorName().str()); 54 EXPECT_EQ("", T.getOSName().str()); 55 EXPECT_EQ("", T.getEnvironmentName().str()); 56 57 T = Triple("a-b"); 58 EXPECT_EQ("a", T.getArchName().str()); 59 EXPECT_EQ("b", T.getVendorName().str()); 60 EXPECT_EQ("", T.getOSName().str()); 61 EXPECT_EQ("", T.getEnvironmentName().str()); 62 63 T = Triple("a-b-c"); 64 EXPECT_EQ("a", T.getArchName().str()); 65 EXPECT_EQ("b", T.getVendorName().str()); 66 EXPECT_EQ("c", T.getOSName().str()); 67 EXPECT_EQ("", T.getEnvironmentName().str()); 68 69 T = Triple("a-b-c-d"); 70 EXPECT_EQ("a", T.getArchName().str()); 71 EXPECT_EQ("b", T.getVendorName().str()); 72 EXPECT_EQ("c", T.getOSName().str()); 73 EXPECT_EQ("d", T.getEnvironmentName().str()); 74 } 75 76 TEST(TripleTest, ParsedIDs) { 77 Triple T; 78 79 T = Triple("i386-apple-darwin"); 80 EXPECT_EQ(Triple::x86, T.getArch()); 81 EXPECT_EQ(Triple::Apple, T.getVendor()); 82 EXPECT_EQ(Triple::Darwin, T.getOS()); 83 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 84 85 T = Triple("i386-pc-elfiamcu"); 86 EXPECT_EQ(Triple::x86, T.getArch()); 87 EXPECT_EQ(Triple::PC, T.getVendor()); 88 EXPECT_EQ(Triple::ELFIAMCU, T.getOS()); 89 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 90 91 T = Triple("i386-pc-hurd-gnu"); 92 EXPECT_EQ(Triple::x86, T.getArch()); 93 EXPECT_EQ(Triple::PC, T.getVendor()); 94 EXPECT_EQ(Triple::Hurd, T.getOS()); 95 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 96 97 T = Triple("i686-pc-linux-gnu"); 98 EXPECT_EQ(Triple::x86, T.getArch()); 99 EXPECT_EQ(Triple::PC, T.getVendor()); 100 EXPECT_EQ(Triple::Linux, T.getOS()); 101 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 102 EXPECT_FALSE(T.isTime64ABI()); 103 104 T = Triple("x86_64-pc-linux-gnu"); 105 EXPECT_EQ(Triple::x86_64, T.getArch()); 106 EXPECT_EQ(Triple::PC, T.getVendor()); 107 EXPECT_EQ(Triple::Linux, T.getOS()); 108 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 109 110 T = Triple("x86_64-pc-linux-musl"); 111 EXPECT_EQ(Triple::x86_64, T.getArch()); 112 EXPECT_EQ(Triple::PC, T.getVendor()); 113 EXPECT_EQ(Triple::Linux, T.getOS()); 114 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 115 116 T = Triple("x86_64-pc-linux-muslx32"); 117 EXPECT_EQ(Triple::x86_64, T.getArch()); 118 EXPECT_EQ(Triple::PC, T.getVendor()); 119 EXPECT_EQ(Triple::Linux, T.getOS()); 120 EXPECT_EQ(Triple::MuslX32, T.getEnvironment()); 121 122 T = Triple("x86_64-pc-hurd-gnu"); 123 EXPECT_EQ(Triple::x86_64, T.getArch()); 124 EXPECT_EQ(Triple::PC, T.getVendor()); 125 EXPECT_EQ(Triple::Hurd, T.getOS()); 126 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 127 128 T = Triple("arm-unknown-linux-android16"); 129 EXPECT_EQ(Triple::arm, T.getArch()); 130 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 131 EXPECT_EQ(Triple::Linux, T.getOS()); 132 EXPECT_EQ(Triple::Android, T.getEnvironment()); 133 134 T = Triple("aarch64-unknown-linux-android21"); 135 EXPECT_EQ(Triple::aarch64, T.getArch()); 136 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 137 EXPECT_EQ(Triple::Linux, T.getOS()); 138 EXPECT_EQ(Triple::Android, T.getEnvironment()); 139 140 // PS4 has two spellings for the vendor. 141 T = Triple("x86_64-scei-ps4"); 142 EXPECT_EQ(Triple::x86_64, T.getArch()); 143 EXPECT_EQ(Triple::SCEI, T.getVendor()); 144 EXPECT_EQ(Triple::PS4, T.getOS()); 145 146 T = Triple("x86_64-sie-ps4"); 147 EXPECT_EQ(Triple::x86_64, T.getArch()); 148 EXPECT_EQ(Triple::SCEI, T.getVendor()); 149 EXPECT_EQ(Triple::PS4, T.getOS()); 150 151 T = Triple("x86_64-sie-ps5"); 152 EXPECT_EQ(Triple::x86_64, T.getArch()); 153 EXPECT_EQ(Triple::SCEI, T.getVendor()); 154 EXPECT_EQ(Triple::PS5, T.getOS()); 155 156 T = Triple("powerpc-ibm-aix"); 157 EXPECT_EQ(Triple::ppc, T.getArch()); 158 EXPECT_EQ(Triple::IBM, T.getVendor()); 159 EXPECT_EQ(Triple::AIX, T.getOS()); 160 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 161 162 T = Triple("powerpc64-ibm-aix"); 163 EXPECT_EQ(Triple::ppc64, T.getArch()); 164 EXPECT_EQ(Triple::IBM, T.getVendor()); 165 EXPECT_EQ(Triple::AIX, T.getOS()); 166 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 167 168 T = Triple("powerpc-dunno-notsure"); 169 EXPECT_EQ(Triple::ppc, T.getArch()); 170 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 171 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 172 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 173 174 T = Triple("powerpcspe-unknown-freebsd"); 175 EXPECT_EQ(Triple::ppc, T.getArch()); 176 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch()); 177 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 178 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 179 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 180 181 T = Triple("s390x-ibm-zos"); 182 EXPECT_EQ(Triple::systemz, T.getArch()); 183 EXPECT_EQ(Triple::IBM, T.getVendor()); 184 EXPECT_EQ(Triple::ZOS, T.getOS()); 185 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 186 187 T = Triple("systemz-ibm-zos"); 188 EXPECT_EQ(Triple::systemz, T.getArch()); 189 EXPECT_EQ(Triple::IBM, T.getVendor()); 190 EXPECT_EQ(Triple::ZOS, T.getOS()); 191 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 192 193 T = Triple("arm-none-none-eabi"); 194 EXPECT_EQ(Triple::arm, T.getArch()); 195 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 196 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 197 EXPECT_EQ(Triple::EABI, T.getEnvironment()); 198 EXPECT_FALSE(T.isHardFloatABI()); 199 200 T = Triple("arm-none-none-eabihf"); 201 EXPECT_EQ(Triple::arm, T.getArch()); 202 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 203 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 204 EXPECT_EQ(Triple::EABIHF, T.getEnvironment()); 205 EXPECT_TRUE(T.isHardFloatABI()); 206 207 T = Triple("arm-none-linux-musleabi"); 208 EXPECT_EQ(Triple::arm, T.getArch()); 209 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 210 EXPECT_EQ(Triple::Linux, T.getOS()); 211 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment()); 212 EXPECT_FALSE(T.isHardFloatABI()); 213 214 T = Triple("arm-none-linux-musleabihf"); 215 EXPECT_EQ(Triple::arm, T.getArch()); 216 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 217 EXPECT_EQ(Triple::Linux, T.getOS()); 218 EXPECT_EQ(Triple::MuslEABIHF, T.getEnvironment()); 219 EXPECT_TRUE(T.isHardFloatABI()); 220 221 T = Triple("armv6hl-none-linux-gnueabi"); 222 EXPECT_EQ(Triple::arm, T.getArch()); 223 EXPECT_EQ(Triple::Linux, T.getOS()); 224 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 225 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 226 EXPECT_FALSE(T.isTime64ABI()); 227 EXPECT_FALSE(T.isHardFloatABI()); 228 229 T = Triple("armv7hl-none-linux-gnueabi"); 230 EXPECT_EQ(Triple::arm, T.getArch()); 231 EXPECT_EQ(Triple::Linux, T.getOS()); 232 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 233 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 234 EXPECT_FALSE(T.isTime64ABI()); 235 EXPECT_FALSE(T.isHardFloatABI()); 236 237 T = Triple("armv7hl-none-linux-gnueabihf"); 238 EXPECT_EQ(Triple::arm, T.getArch()); 239 EXPECT_EQ(Triple::Linux, T.getOS()); 240 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 241 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 242 EXPECT_FALSE(T.isTime64ABI()); 243 EXPECT_TRUE(T.isHardFloatABI()); 244 245 T = Triple("amdil-unknown-unknown"); 246 EXPECT_EQ(Triple::amdil, T.getArch()); 247 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 248 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 249 250 T = Triple("amdil64-unknown-unknown"); 251 EXPECT_EQ(Triple::amdil64, T.getArch()); 252 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 253 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 254 255 T = Triple("hsail-unknown-unknown"); 256 EXPECT_EQ(Triple::hsail, T.getArch()); 257 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 258 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 259 260 T = Triple("hsail64-unknown-unknown"); 261 EXPECT_EQ(Triple::hsail64, T.getArch()); 262 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 263 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 264 265 T = Triple("sparcel-unknown-unknown"); 266 EXPECT_EQ(Triple::sparcel, T.getArch()); 267 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 268 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 269 270 T = Triple("spir-unknown-unknown"); 271 EXPECT_EQ(Triple::spir, T.getArch()); 272 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 273 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 274 275 T = Triple("spir64-unknown-unknown"); 276 EXPECT_EQ(Triple::spir64, T.getArch()); 277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 278 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 279 280 T = Triple("spirv32-unknown-unknown"); 281 EXPECT_EQ(Triple::spirv32, T.getArch()); 282 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 283 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 284 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 285 286 T = Triple("spirv32v1.0-unknown-unknown"); 287 EXPECT_EQ(Triple::spirv32, T.getArch()); 288 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 289 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 290 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 291 292 T = Triple("spirv32v1.1-unknown-unknown"); 293 EXPECT_EQ(Triple::spirv32, T.getArch()); 294 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 295 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 296 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 297 298 T = Triple("spirv32v1.2-unknown-unknown"); 299 EXPECT_EQ(Triple::spirv32, T.getArch()); 300 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 301 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 302 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 303 304 T = Triple("spirv32v1.3-unknown-unknown"); 305 EXPECT_EQ(Triple::spirv32, T.getArch()); 306 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 307 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 308 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 309 310 T = Triple("spirv32v1.4-unknown-unknown"); 311 EXPECT_EQ(Triple::spirv32, T.getArch()); 312 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 313 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 314 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 315 316 T = Triple("spirv32v1.5-unknown-unknown"); 317 EXPECT_EQ(Triple::spirv32, T.getArch()); 318 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 319 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 320 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 321 322 T = Triple("spirv64-unknown-unknown"); 323 EXPECT_EQ(Triple::spirv64, T.getArch()); 324 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 325 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 326 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 327 328 T = Triple("spirv64v1.0-unknown-unknown"); 329 EXPECT_EQ(Triple::spirv64, T.getArch()); 330 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 331 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 332 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 333 334 T = Triple("spirv64v1.1-unknown-unknown"); 335 EXPECT_EQ(Triple::spirv64, T.getArch()); 336 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 337 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 338 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 339 340 T = Triple("spirv64v1.2-unknown-unknown"); 341 EXPECT_EQ(Triple::spirv64, T.getArch()); 342 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 343 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 344 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 345 346 T = Triple("spirv64v1.3-unknown-unknown"); 347 EXPECT_EQ(Triple::spirv64, T.getArch()); 348 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 349 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 350 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 351 352 T = Triple("spirv64v1.4-unknown-unknown"); 353 EXPECT_EQ(Triple::spirv64, T.getArch()); 354 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 355 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 356 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 357 358 T = Triple("spirv64v1.5-unknown-unknown"); 359 EXPECT_EQ(Triple::spirv64, T.getArch()); 360 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 361 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 362 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 363 364 T = Triple("spirv-unknown-vulkan-pixel"); 365 EXPECT_EQ(Triple::spirv, T.getArch()); 366 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 367 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 368 EXPECT_EQ(Triple::Vulkan, T.getOS()); 369 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 370 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 371 372 T = Triple("spirv-unknown-vulkan-vertex"); 373 EXPECT_EQ(Triple::spirv, T.getArch()); 374 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 375 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 376 EXPECT_EQ(Triple::Vulkan, T.getOS()); 377 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 378 EXPECT_EQ(Triple::Vertex, T.getEnvironment()); 379 380 T = Triple("spirv-unknown-vulkan-geometry"); 381 EXPECT_EQ(Triple::spirv, T.getArch()); 382 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 383 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 384 EXPECT_EQ(Triple::Vulkan, T.getOS()); 385 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 386 EXPECT_EQ(Triple::Geometry, T.getEnvironment()); 387 388 T = Triple("spirv-unknown-vulkan-library"); 389 EXPECT_EQ(Triple::spirv, T.getArch()); 390 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 391 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 392 EXPECT_EQ(Triple::Vulkan, T.getOS()); 393 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 394 EXPECT_EQ(Triple::Library, T.getEnvironment()); 395 396 T = Triple("spirv-unknown-vulkan-raygeneration"); 397 EXPECT_EQ(Triple::spirv, T.getArch()); 398 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 399 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 400 EXPECT_EQ(Triple::Vulkan, T.getOS()); 401 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 402 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment()); 403 404 T = Triple("spirv-unknown-vulkan-intersection"); 405 EXPECT_EQ(Triple::spirv, T.getArch()); 406 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 408 EXPECT_EQ(Triple::Vulkan, T.getOS()); 409 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 410 EXPECT_EQ(Triple::Intersection, T.getEnvironment()); 411 412 T = Triple("spirv-unknown-vulkan-anyhit"); 413 EXPECT_EQ(Triple::spirv, T.getArch()); 414 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 415 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 416 EXPECT_EQ(Triple::Vulkan, T.getOS()); 417 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 418 EXPECT_EQ(Triple::AnyHit, T.getEnvironment()); 419 420 T = Triple("spirv-unknown-vulkan-closesthit"); 421 EXPECT_EQ(Triple::spirv, T.getArch()); 422 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 423 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 424 EXPECT_EQ(Triple::Vulkan, T.getOS()); 425 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 426 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment()); 427 428 T = Triple("spirv-unknown-vulkan-miss"); 429 EXPECT_EQ(Triple::spirv, T.getArch()); 430 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 431 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 432 EXPECT_EQ(Triple::Vulkan, T.getOS()); 433 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 434 EXPECT_EQ(Triple::Miss, T.getEnvironment()); 435 436 T = Triple("spirv-unknown-vulkan-callable"); 437 EXPECT_EQ(Triple::spirv, T.getArch()); 438 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 439 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 440 EXPECT_EQ(Triple::Vulkan, T.getOS()); 441 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 442 EXPECT_EQ(Triple::Callable, T.getEnvironment()); 443 444 T = Triple("spirv-unknown-vulkan-mesh"); 445 EXPECT_EQ(Triple::spirv, T.getArch()); 446 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 447 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 448 EXPECT_EQ(Triple::Vulkan, T.getOS()); 449 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 450 EXPECT_EQ(Triple::Mesh, T.getEnvironment()); 451 452 T = Triple("spirv-unknown-vulkan-amplification"); 453 EXPECT_EQ(Triple::spirv, T.getArch()); 454 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 455 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 456 EXPECT_EQ(Triple::Vulkan, T.getOS()); 457 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 458 EXPECT_EQ(Triple::Amplification, T.getEnvironment()); 459 460 T = Triple("spirv1.5-unknown-vulkan1.2-compute"); 461 EXPECT_EQ(Triple::spirv, T.getArch()); 462 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 463 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 464 EXPECT_EQ(Triple::Vulkan, T.getOS()); 465 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion()); 466 EXPECT_EQ(Triple::Compute, T.getEnvironment()); 467 468 T = Triple("spirv1.6-unknown-vulkan1.3-compute"); 469 EXPECT_EQ(Triple::spirv, T.getArch()); 470 EXPECT_EQ(Triple::SPIRVSubArch_v16, T.getSubArch()); 471 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 472 EXPECT_EQ(Triple::Vulkan, T.getOS()); 473 EXPECT_EQ(VersionTuple(1, 3), T.getVulkanVersion()); 474 EXPECT_EQ(Triple::Compute, T.getEnvironment()); 475 476 T = Triple("dxilv1.0--shadermodel6.0-pixel"); 477 EXPECT_EQ(Triple::dxil, T.getArch()); 478 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch()); 479 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 480 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 481 EXPECT_EQ(VersionTuple(1, 0), T.getDXILVersion()); 482 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 483 484 T = Triple("dxilv1.1--shadermodel6.1-vertex"); 485 EXPECT_EQ(Triple::dxil, T.getArch()); 486 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch()); 487 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 488 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 489 EXPECT_EQ(VersionTuple(1, 1), T.getDXILVersion()); 490 EXPECT_EQ(Triple::Vertex, T.getEnvironment()); 491 492 T = Triple("dxilv1.2--shadermodel6.2-geometry"); 493 EXPECT_EQ(Triple::dxil, T.getArch()); 494 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch()); 495 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 496 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 497 EXPECT_EQ(VersionTuple(1, 2), T.getDXILVersion()); 498 EXPECT_EQ(Triple::Geometry, T.getEnvironment()); 499 500 T = Triple("dxilv1.3--shadermodel6.3-library"); 501 EXPECT_EQ(Triple::dxil, T.getArch()); 502 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch()); 503 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 504 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 505 EXPECT_EQ(VersionTuple(1, 3), T.getDXILVersion()); 506 EXPECT_EQ(Triple::Library, T.getEnvironment()); 507 508 T = Triple("dxilv1.4--shadermodel6.4-hull"); 509 EXPECT_EQ(Triple::dxil, T.getArch()); 510 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch()); 511 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 512 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 513 EXPECT_EQ(VersionTuple(1, 4), T.getDXILVersion()); 514 EXPECT_EQ(Triple::Hull, T.getEnvironment()); 515 516 T = Triple("dxilv1.5--shadermodel6.5-domain"); 517 EXPECT_EQ(Triple::dxil, T.getArch()); 518 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch()); 519 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 520 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 521 EXPECT_EQ(VersionTuple(1, 5), T.getDXILVersion()); 522 EXPECT_EQ(Triple::Domain, T.getEnvironment()); 523 524 T = Triple("dxilv1.6--shadermodel6.6-compute"); 525 EXPECT_EQ(Triple::dxil, T.getArch()); 526 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch()); 527 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 528 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 529 EXPECT_EQ(VersionTuple(1, 6), T.getDXILVersion()); 530 EXPECT_EQ(Triple::Compute, T.getEnvironment()); 531 532 T = Triple("dxilv1.7-unknown-shadermodel6.7-mesh"); 533 EXPECT_EQ(Triple::dxil, T.getArch()); 534 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch()); 535 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 536 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 537 EXPECT_EQ(VersionTuple(1, 7), T.getDXILVersion()); 538 EXPECT_EQ(Triple::Mesh, T.getEnvironment()); 539 540 T = Triple("dxilv1.8-unknown-shadermodel6.8-amplification"); 541 EXPECT_EQ(Triple::dxil, T.getArch()); 542 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch()); 543 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 544 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 545 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion()); 546 EXPECT_EQ(Triple::Amplification, T.getEnvironment()); 547 548 T = Triple("dxilv1.8-unknown-shadermodel6.15-library"); 549 EXPECT_EQ(Triple::dxil, T.getArch()); 550 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch()); 551 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 552 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 553 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion()); 554 555 T = Triple("x86_64-unknown-fuchsia"); 556 EXPECT_EQ(Triple::x86_64, T.getArch()); 557 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 558 EXPECT_EQ(Triple::Fuchsia, T.getOS()); 559 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 560 561 T = Triple("x86_64-unknown-hermit"); 562 EXPECT_EQ(Triple::x86_64, T.getArch()); 563 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 564 EXPECT_EQ(Triple::HermitCore, T.getOS()); 565 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 566 567 T = Triple("x86_64-unknown-uefi"); 568 EXPECT_EQ(Triple::x86_64, T.getArch()); 569 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 570 EXPECT_EQ(Triple::UEFI, T.getOS()); 571 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 572 EXPECT_EQ(Triple::COFF, T.getObjectFormat()); 573 574 T = Triple("wasm32-unknown-unknown"); 575 EXPECT_EQ(Triple::wasm32, T.getArch()); 576 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 577 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 578 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 579 580 T = Triple("wasm32-unknown-wasi"); 581 EXPECT_EQ(Triple::wasm32, T.getArch()); 582 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 583 EXPECT_EQ(Triple::WASI, T.getOS()); 584 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 585 586 T = Triple("wasm64-unknown-unknown"); 587 EXPECT_EQ(Triple::wasm64, T.getArch()); 588 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 589 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 590 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 591 592 T = Triple("wasm64-unknown-wasi"); 593 EXPECT_EQ(Triple::wasm64, T.getArch()); 594 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 595 EXPECT_EQ(Triple::WASI, T.getOS()); 596 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 597 598 T = Triple("avr-unknown-unknown"); 599 EXPECT_EQ(Triple::avr, T.getArch()); 600 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 601 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 602 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 603 604 T = Triple("avr"); 605 EXPECT_EQ(Triple::avr, T.getArch()); 606 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 607 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 608 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 609 610 T = Triple("lanai-unknown-unknown"); 611 EXPECT_EQ(Triple::lanai, T.getArch()); 612 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 613 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 614 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 615 616 T = Triple("lanai"); 617 EXPECT_EQ(Triple::lanai, T.getArch()); 618 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 619 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 620 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 621 622 T = Triple("amdgcn-mesa-mesa3d"); 623 EXPECT_EQ(Triple::amdgcn, T.getArch()); 624 EXPECT_EQ(Triple::Mesa, T.getVendor()); 625 EXPECT_EQ(Triple::Mesa3D, T.getOS()); 626 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 627 628 T = Triple("amdgcn-amd-amdhsa"); 629 EXPECT_EQ(Triple::amdgcn, T.getArch()); 630 EXPECT_EQ(Triple::AMD, T.getVendor()); 631 EXPECT_EQ(Triple::AMDHSA, T.getOS()); 632 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 633 634 T = Triple("amdgcn-amd-amdpal"); 635 EXPECT_EQ(Triple::amdgcn, T.getArch()); 636 EXPECT_EQ(Triple::AMD, T.getVendor()); 637 EXPECT_EQ(Triple::AMDPAL, T.getOS()); 638 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 639 640 T = Triple("ve-unknown-linux"); 641 EXPECT_EQ(Triple::ve, T.getArch()); 642 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 643 EXPECT_EQ(Triple::Linux, T.getOS()); 644 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 645 646 T = Triple("csky-unknown-unknown"); 647 EXPECT_EQ(Triple::csky, T.getArch()); 648 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 649 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 650 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 651 652 T = Triple("csky-unknown-linux"); 653 EXPECT_EQ(Triple::csky, T.getArch()); 654 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 655 EXPECT_EQ(Triple::Linux, T.getOS()); 656 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 657 658 T = Triple("loongarch32-unknown-unknown"); 659 EXPECT_EQ(Triple::loongarch32, T.getArch()); 660 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 661 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 662 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 663 664 T = Triple("loongarch32-unknown-linux-gnu"); 665 EXPECT_EQ(Triple::loongarch32, T.getArch()); 666 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 667 EXPECT_EQ(Triple::Linux, T.getOS()); 668 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 669 670 T = Triple("loongarch32-unknown-linux-gnuf32"); 671 EXPECT_EQ(Triple::loongarch32, T.getArch()); 672 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 673 EXPECT_EQ(Triple::Linux, T.getOS()); 674 EXPECT_EQ(Triple::GNUF32, T.getEnvironment()); 675 676 T = Triple("loongarch32-unknown-linux-gnuf64"); 677 EXPECT_EQ(Triple::loongarch32, T.getArch()); 678 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 679 EXPECT_EQ(Triple::Linux, T.getOS()); 680 EXPECT_EQ(Triple::GNUF64, T.getEnvironment()); 681 682 T = Triple("loongarch32-unknown-linux-gnusf"); 683 EXPECT_EQ(Triple::loongarch32, T.getArch()); 684 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 685 EXPECT_EQ(Triple::Linux, T.getOS()); 686 EXPECT_EQ(Triple::GNUSF, T.getEnvironment()); 687 688 T = Triple("loongarch32-unknown-linux-musl"); 689 EXPECT_EQ(Triple::loongarch32, T.getArch()); 690 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 691 EXPECT_EQ(Triple::Linux, T.getOS()); 692 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 693 694 T = Triple("loongarch32-unknown-linux-muslf32"); 695 EXPECT_EQ(Triple::loongarch32, T.getArch()); 696 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 697 EXPECT_EQ(Triple::Linux, T.getOS()); 698 EXPECT_EQ(Triple::MuslF32, T.getEnvironment()); 699 700 T = Triple("loongarch32-unknown-linux-muslsf"); 701 EXPECT_EQ(Triple::loongarch32, T.getArch()); 702 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 703 EXPECT_EQ(Triple::Linux, T.getOS()); 704 EXPECT_EQ(Triple::MuslSF, T.getEnvironment()); 705 706 T = Triple("loongarch64-unknown-linux"); 707 EXPECT_EQ(Triple::loongarch64, T.getArch()); 708 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 709 EXPECT_EQ(Triple::Linux, T.getOS()); 710 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 711 712 T = Triple("loongarch64-unknown-linux-gnu"); 713 EXPECT_EQ(Triple::loongarch64, T.getArch()); 714 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 715 EXPECT_EQ(Triple::Linux, T.getOS()); 716 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 717 718 T = Triple("loongarch64-unknown-linux-gnuf32"); 719 EXPECT_EQ(Triple::loongarch64, T.getArch()); 720 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 721 EXPECT_EQ(Triple::Linux, T.getOS()); 722 EXPECT_EQ(Triple::GNUF32, T.getEnvironment()); 723 724 T = Triple("loongarch64-unknown-linux-gnuf64"); 725 EXPECT_EQ(Triple::loongarch64, T.getArch()); 726 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 727 EXPECT_EQ(Triple::Linux, T.getOS()); 728 EXPECT_EQ(Triple::GNUF64, T.getEnvironment()); 729 730 T = Triple("loongarch64-unknown-linux-gnusf"); 731 EXPECT_EQ(Triple::loongarch64, T.getArch()); 732 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 733 EXPECT_EQ(Triple::Linux, T.getOS()); 734 EXPECT_EQ(Triple::GNUSF, T.getEnvironment()); 735 736 T = Triple("loongarch64-unknown-linux-musl"); 737 EXPECT_EQ(Triple::loongarch64, T.getArch()); 738 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 739 EXPECT_EQ(Triple::Linux, T.getOS()); 740 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 741 742 T = Triple("loongarch64-unknown-linux-muslf32"); 743 EXPECT_EQ(Triple::loongarch64, T.getArch()); 744 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 745 EXPECT_EQ(Triple::Linux, T.getOS()); 746 EXPECT_EQ(Triple::MuslF32, T.getEnvironment()); 747 748 T = Triple("loongarch64-unknown-linux-muslsf"); 749 EXPECT_EQ(Triple::loongarch64, T.getArch()); 750 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 751 EXPECT_EQ(Triple::Linux, T.getOS()); 752 EXPECT_EQ(Triple::MuslSF, T.getEnvironment()); 753 754 T = Triple("riscv32-unknown-unknown"); 755 EXPECT_EQ(Triple::riscv32, T.getArch()); 756 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 757 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 758 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 759 760 T = Triple("riscv64-unknown-linux"); 761 EXPECT_EQ(Triple::riscv64, T.getArch()); 762 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 763 EXPECT_EQ(Triple::Linux, T.getOS()); 764 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 765 766 T = Triple("riscv64-unknown-freebsd"); 767 EXPECT_EQ(Triple::riscv64, T.getArch()); 768 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 769 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 770 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 771 772 T = Triple("riscv64-suse-linux"); 773 EXPECT_EQ(Triple::riscv64, T.getArch()); 774 EXPECT_EQ(Triple::SUSE, T.getVendor()); 775 EXPECT_EQ(Triple::Linux, T.getOS()); 776 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 777 778 T = Triple("armv7hl-suse-linux-gnueabi"); 779 EXPECT_EQ(Triple::arm, T.getArch()); 780 EXPECT_EQ(Triple::SUSE, T.getVendor()); 781 EXPECT_EQ(Triple::Linux, T.getOS()); 782 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 783 784 T = Triple("i586-pc-haiku"); 785 EXPECT_EQ(Triple::x86, T.getArch()); 786 EXPECT_EQ(Triple::PC, T.getVendor()); 787 EXPECT_EQ(Triple::Haiku, T.getOS()); 788 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 789 790 T = Triple("x86_64-unknown-haiku"); 791 EXPECT_EQ(Triple::x86_64, T.getArch()); 792 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 793 EXPECT_EQ(Triple::Haiku, T.getOS()); 794 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 795 796 T = Triple("mips-mti-linux-gnu"); 797 EXPECT_EQ(Triple::mips, T.getArch()); 798 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 799 EXPECT_EQ(Triple::Linux, T.getOS()); 800 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 801 802 T = Triple("mipsel-img-linux-gnu"); 803 EXPECT_EQ(Triple::mipsel, T.getArch()); 804 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 805 EXPECT_EQ(Triple::Linux, T.getOS()); 806 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 807 808 T = Triple("mips64-mti-linux-gnu"); 809 EXPECT_EQ(Triple::mips64, T.getArch()); 810 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor()); 811 EXPECT_EQ(Triple::Linux, T.getOS()); 812 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 813 814 T = Triple("mips64el-img-linux-gnu"); 815 EXPECT_EQ(Triple::mips64el, T.getArch()); 816 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 817 EXPECT_EQ(Triple::Linux, T.getOS()); 818 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 819 820 T = Triple("mips64el-img-linux-gnuabin32"); 821 EXPECT_EQ(Triple::mips64el, T.getArch()); 822 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor()); 823 EXPECT_EQ(Triple::Linux, T.getOS()); 824 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 825 826 T = Triple("mips64el-unknown-linux-gnuabi64"); 827 EXPECT_EQ(Triple::mips64el, T.getArch()); 828 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 829 EXPECT_EQ(Triple::Linux, T.getOS()); 830 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 831 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 832 T = Triple("mips64el"); 833 EXPECT_EQ(Triple::mips64el, T.getArch()); 834 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 835 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 836 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 837 838 T = Triple("mips64-unknown-linux-gnuabi64"); 839 EXPECT_EQ(Triple::mips64, T.getArch()); 840 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 841 EXPECT_EQ(Triple::Linux, T.getOS()); 842 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 843 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 844 T = Triple("mips64"); 845 EXPECT_EQ(Triple::mips64, T.getArch()); 846 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 847 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 848 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 849 850 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64"); 851 EXPECT_EQ(Triple::mips64el, T.getArch()); 852 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 853 EXPECT_EQ(Triple::Linux, T.getOS()); 854 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 855 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 856 T = Triple("mips64r6el"); 857 EXPECT_EQ(Triple::mips64el, T.getArch()); 858 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 859 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 860 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 861 T = Triple("mipsisa64r6el"); 862 EXPECT_EQ(Triple::mips64el, T.getArch()); 863 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 864 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 865 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 866 867 T = Triple("mipsisa64r6-unknown-linux-gnuabi64"); 868 EXPECT_EQ(Triple::mips64, T.getArch()); 869 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 870 EXPECT_EQ(Triple::Linux, T.getOS()); 871 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 872 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 873 T = Triple("mips64r6"); 874 EXPECT_EQ(Triple::mips64, T.getArch()); 875 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 876 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 877 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 878 T = Triple("mipsisa64r6"); 879 EXPECT_EQ(Triple::mips64, T.getArch()); 880 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 881 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment()); 882 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 883 884 T = Triple("mips64el-unknown-linux-gnuabin32"); 885 EXPECT_EQ(Triple::mips64el, T.getArch()); 886 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 887 EXPECT_EQ(Triple::Linux, T.getOS()); 888 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 889 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 890 T = Triple("mipsn32el"); 891 EXPECT_EQ(Triple::mips64el, T.getArch()); 892 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 893 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 894 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 895 896 T = Triple("mips64-unknown-linux-gnuabin32"); 897 EXPECT_EQ(Triple::mips64, T.getArch()); 898 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 899 EXPECT_EQ(Triple::Linux, T.getOS()); 900 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 901 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 902 T = Triple("mipsn32"); 903 EXPECT_EQ(Triple::mips64, T.getArch()); 904 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 905 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 906 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 907 908 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32"); 909 EXPECT_EQ(Triple::mips64el, T.getArch()); 910 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 911 EXPECT_EQ(Triple::Linux, T.getOS()); 912 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 913 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 914 T = Triple("mipsn32r6el"); 915 EXPECT_EQ(Triple::mips64el, T.getArch()); 916 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 917 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 918 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 919 920 T = Triple("mipsisa64r6-unknown-linux-gnuabin32"); 921 EXPECT_EQ(Triple::mips64, T.getArch()); 922 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 923 EXPECT_EQ(Triple::Linux, T.getOS()); 924 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 925 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 926 T = Triple("mipsn32r6"); 927 EXPECT_EQ(Triple::mips64, T.getArch()); 928 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 929 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment()); 930 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 931 932 T = Triple("mipsel-unknown-linux-gnu"); 933 EXPECT_EQ(Triple::mipsel, T.getArch()); 934 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 935 EXPECT_EQ(Triple::Linux, T.getOS()); 936 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 937 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 938 T = Triple("mipsel"); 939 EXPECT_EQ(Triple::mipsel, T.getArch()); 940 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 941 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 942 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 943 944 T = Triple("mips-unknown-linux-gnu"); 945 EXPECT_EQ(Triple::mips, T.getArch()); 946 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 947 EXPECT_EQ(Triple::Linux, T.getOS()); 948 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 949 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 950 T = Triple("mips"); 951 EXPECT_EQ(Triple::mips, T.getArch()); 952 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 953 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 954 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 955 956 T = Triple("mipsisa32r6el-unknown-linux-gnu"); 957 EXPECT_EQ(Triple::mipsel, T.getArch()); 958 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 959 EXPECT_EQ(Triple::Linux, T.getOS()); 960 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 961 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 962 T = Triple("mipsr6el"); 963 EXPECT_EQ(Triple::mipsel, T.getArch()); 964 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 965 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 966 T = Triple("mipsisa32r6el"); 967 EXPECT_EQ(Triple::mipsel, T.getArch()); 968 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 969 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 970 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 971 972 T = Triple("mipsisa32r6-unknown-linux-gnu"); 973 EXPECT_EQ(Triple::mips, T.getArch()); 974 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 975 EXPECT_EQ(Triple::Linux, T.getOS()); 976 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 977 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 978 T = Triple("mipsr6"); 979 EXPECT_EQ(Triple::mips, T.getArch()); 980 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 981 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 982 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 983 T = Triple("mipsisa32r6"); 984 EXPECT_EQ(Triple::mips, T.getArch()); 985 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 986 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 987 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 988 989 T = Triple("mips64el-unknown-linux-muslabi64"); 990 EXPECT_EQ(Triple::mips64el, T.getArch()); 991 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 992 EXPECT_EQ(Triple::Linux, T.getOS()); 993 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment()); 994 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 995 996 T = Triple("mips64-unknown-linux-muslabi64"); 997 EXPECT_EQ(Triple::mips64, T.getArch()); 998 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 999 EXPECT_EQ(Triple::Linux, T.getOS()); 1000 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment()); 1001 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1002 1003 T = Triple("mipsisa64r6el-unknown-linux-muslabi64"); 1004 EXPECT_EQ(Triple::mips64el, T.getArch()); 1005 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1006 EXPECT_EQ(Triple::Linux, T.getOS()); 1007 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment()); 1008 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1009 1010 T = Triple("mipsisa64r6-unknown-linux-muslabi64"); 1011 EXPECT_EQ(Triple::mips64, T.getArch()); 1012 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1013 EXPECT_EQ(Triple::Linux, T.getOS()); 1014 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment()); 1015 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1016 1017 T = Triple("mips64el-unknown-linux-muslabin32"); 1018 EXPECT_EQ(Triple::mips64el, T.getArch()); 1019 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1020 EXPECT_EQ(Triple::Linux, T.getOS()); 1021 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment()); 1022 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1023 1024 T = Triple("mips64-unknown-linux-muslabin32"); 1025 EXPECT_EQ(Triple::mips64, T.getArch()); 1026 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1027 EXPECT_EQ(Triple::Linux, T.getOS()); 1028 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment()); 1029 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1030 1031 T = Triple("mipsisa64r6el-unknown-linux-muslabin32"); 1032 EXPECT_EQ(Triple::mips64el, T.getArch()); 1033 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1034 EXPECT_EQ(Triple::Linux, T.getOS()); 1035 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment()); 1036 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1037 1038 T = Triple("mipsisa64r6-unknown-linux-muslabin32"); 1039 EXPECT_EQ(Triple::mips64, T.getArch()); 1040 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1041 EXPECT_EQ(Triple::Linux, T.getOS()); 1042 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment()); 1043 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1044 1045 T = Triple("mipsel-unknown-linux-musl"); 1046 EXPECT_EQ(Triple::mipsel, T.getArch()); 1047 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1048 EXPECT_EQ(Triple::Linux, T.getOS()); 1049 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 1050 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1051 1052 T = Triple("mips-unknown-linux-musl"); 1053 EXPECT_EQ(Triple::mips, T.getArch()); 1054 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1055 EXPECT_EQ(Triple::Linux, T.getOS()); 1056 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 1057 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1058 1059 T = Triple("mipsisa32r6el-unknown-linux-musl"); 1060 EXPECT_EQ(Triple::mipsel, T.getArch()); 1061 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1062 EXPECT_EQ(Triple::Linux, T.getOS()); 1063 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 1064 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1065 1066 T = Triple("mipsisa32r6-unknown-linux-musl"); 1067 EXPECT_EQ(Triple::mips, T.getArch()); 1068 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1069 EXPECT_EQ(Triple::Linux, T.getOS()); 1070 EXPECT_EQ(Triple::Musl, T.getEnvironment()); 1071 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch()); 1072 1073 T = Triple("arm-oe-linux-gnueabi"); 1074 EXPECT_EQ(Triple::arm, T.getArch()); 1075 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 1076 EXPECT_EQ(Triple::Linux, T.getOS()); 1077 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 1078 1079 T = Triple("aarch64-oe-linux"); 1080 EXPECT_EQ(Triple::aarch64, T.getArch()); 1081 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor()); 1082 EXPECT_EQ(Triple::Linux, T.getOS()); 1083 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1084 EXPECT_TRUE(T.isArch64Bit()); 1085 1086 T = Triple("arm64_32-apple-ios"); 1087 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 1088 EXPECT_EQ(Triple::IOS, T.getOS()); 1089 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1090 EXPECT_TRUE(T.isArch32Bit()); 1091 1092 T = Triple("dxil-unknown-shadermodel-pixel"); 1093 EXPECT_EQ(Triple::dxil, T.getArch()); 1094 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1095 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1096 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1097 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 1098 EXPECT_FALSE(T.supportsCOMDAT()); 1099 1100 T = Triple("dxil-unknown-shadermodel-vertex"); 1101 EXPECT_EQ(Triple::dxil, T.getArch()); 1102 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1103 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1104 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1105 EXPECT_EQ(Triple::Vertex, T.getEnvironment()); 1106 EXPECT_FALSE(T.supportsCOMDAT()); 1107 1108 T = Triple("dxil-unknown-shadermodel-geometry"); 1109 EXPECT_EQ(Triple::dxil, T.getArch()); 1110 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1111 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1112 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1113 EXPECT_EQ(Triple::Geometry, T.getEnvironment()); 1114 EXPECT_FALSE(T.supportsCOMDAT()); 1115 1116 T = Triple("dxil-unknown-shadermodel-hull"); 1117 EXPECT_EQ(Triple::dxil, T.getArch()); 1118 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1119 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1120 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1121 EXPECT_EQ(Triple::Hull, T.getEnvironment()); 1122 EXPECT_FALSE(T.supportsCOMDAT()); 1123 1124 T = Triple("dxil-unknown-shadermodel-domain"); 1125 EXPECT_EQ(Triple::dxil, T.getArch()); 1126 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1127 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1128 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1129 EXPECT_EQ(Triple::Domain, T.getEnvironment()); 1130 EXPECT_FALSE(T.supportsCOMDAT()); 1131 1132 T = Triple("dxil-unknown-shadermodel-compute"); 1133 EXPECT_EQ(Triple::dxil, T.getArch()); 1134 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1135 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1136 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1137 EXPECT_EQ(Triple::Compute, T.getEnvironment()); 1138 EXPECT_FALSE(T.supportsCOMDAT()); 1139 1140 T = Triple("dxil-unknown-shadermodel-library"); 1141 EXPECT_EQ(Triple::dxil, T.getArch()); 1142 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1143 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1144 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1145 EXPECT_EQ(Triple::Library, T.getEnvironment()); 1146 EXPECT_FALSE(T.supportsCOMDAT()); 1147 1148 T = Triple("dxil-unknown-shadermodel-raygeneration"); 1149 EXPECT_EQ(Triple::dxil, T.getArch()); 1150 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1151 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1152 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1153 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment()); 1154 EXPECT_FALSE(T.supportsCOMDAT()); 1155 1156 T = Triple("dxil-unknown-shadermodel-intersection"); 1157 EXPECT_EQ(Triple::dxil, T.getArch()); 1158 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1159 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1160 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1161 EXPECT_EQ(Triple::Intersection, T.getEnvironment()); 1162 EXPECT_FALSE(T.supportsCOMDAT()); 1163 1164 T = Triple("dxil-unknown-shadermodel-anyhit"); 1165 EXPECT_EQ(Triple::dxil, T.getArch()); 1166 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1167 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1168 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1169 EXPECT_EQ(Triple::AnyHit, T.getEnvironment()); 1170 EXPECT_FALSE(T.supportsCOMDAT()); 1171 1172 T = Triple("dxil-unknown-shadermodel-closesthit"); 1173 EXPECT_EQ(Triple::dxil, T.getArch()); 1174 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1175 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1176 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1177 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment()); 1178 EXPECT_FALSE(T.supportsCOMDAT()); 1179 1180 T = Triple("dxil-unknown-shadermodel-miss"); 1181 EXPECT_EQ(Triple::dxil, T.getArch()); 1182 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1183 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1184 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1185 EXPECT_EQ(Triple::Miss, T.getEnvironment()); 1186 EXPECT_FALSE(T.supportsCOMDAT()); 1187 1188 T = Triple("dxil-unknown-shadermodel-callable"); 1189 EXPECT_EQ(Triple::dxil, T.getArch()); 1190 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1191 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1192 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1193 EXPECT_EQ(Triple::Callable, T.getEnvironment()); 1194 EXPECT_FALSE(T.supportsCOMDAT()); 1195 1196 T = Triple("dxil-unknown-shadermodel-mesh"); 1197 EXPECT_EQ(Triple::dxil, T.getArch()); 1198 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1199 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1200 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1201 EXPECT_EQ(Triple::Mesh, T.getEnvironment()); 1202 EXPECT_FALSE(T.supportsCOMDAT()); 1203 1204 T = Triple("dxil-unknown-shadermodel-amplification"); 1205 EXPECT_EQ(Triple::dxil, T.getArch()); 1206 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1207 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1208 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1209 EXPECT_EQ(Triple::Amplification, T.getEnvironment()); 1210 EXPECT_FALSE(T.supportsCOMDAT()); 1211 1212 T = Triple("dxilv1.0-unknown-unknown"); 1213 EXPECT_EQ(Triple::dxil, T.getArch()); 1214 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch()); 1215 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1216 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1217 1218 T = Triple("dxilv1.1-unknown-unknown"); 1219 EXPECT_EQ(Triple::dxil, T.getArch()); 1220 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch()); 1221 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1222 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1223 1224 T = Triple("dxilv1.2-unknown-unknown"); 1225 EXPECT_EQ(Triple::dxil, T.getArch()); 1226 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch()); 1227 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1228 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1229 1230 T = Triple("dxilv1.3-unknown-unknown"); 1231 EXPECT_EQ(Triple::dxil, T.getArch()); 1232 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch()); 1233 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1234 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1235 1236 T = Triple("dxilv1.4-unknown-unknown"); 1237 EXPECT_EQ(Triple::dxil, T.getArch()); 1238 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch()); 1239 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1240 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1241 1242 T = Triple("dxilv1.5-unknown-unknown"); 1243 EXPECT_EQ(Triple::dxil, T.getArch()); 1244 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch()); 1245 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1246 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1247 1248 T = Triple("dxilv1.6-unknown-unknown"); 1249 EXPECT_EQ(Triple::dxil, T.getArch()); 1250 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch()); 1251 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1252 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1253 1254 T = Triple("dxilv1.7-unknown-unknown"); 1255 EXPECT_EQ(Triple::dxil, T.getArch()); 1256 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch()); 1257 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1258 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1259 1260 T = Triple("dxilv1.8-unknown-unknown"); 1261 EXPECT_EQ(Triple::dxil, T.getArch()); 1262 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch()); 1263 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1264 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1265 1266 // Check specification of unknown SubArch results in 1267 // unknown architecture. 1268 T = Triple("dxilv1.999-unknown-unknown"); 1269 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1270 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1271 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1272 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1273 1274 T = Triple("dxil-unknown-unknown"); 1275 EXPECT_EQ(Triple::dxil, T.getArch()); 1276 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 1277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1278 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1279 1280 T = Triple("xtensa"); 1281 EXPECT_EQ(Triple::xtensa, T.getArch()); 1282 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1283 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1284 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1285 1286 T = Triple("xtensa-unknown-unknown"); 1287 EXPECT_EQ(Triple::xtensa, T.getArch()); 1288 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1289 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1290 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1291 1292 T = Triple("arm-unknown-linux-ohos"); 1293 EXPECT_EQ(Triple::arm, T.getArch()); 1294 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1295 EXPECT_EQ(Triple::Linux, T.getOS()); 1296 EXPECT_EQ(Triple::OpenHOS, T.getEnvironment()); 1297 1298 T = Triple("arm-unknown-liteos"); 1299 EXPECT_EQ(Triple::arm, T.getArch()); 1300 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1301 EXPECT_EQ(Triple::LiteOS, T.getOS()); 1302 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1303 1304 T = Triple("x86_64-pc-serenity"); 1305 EXPECT_EQ(Triple::x86_64, T.getArch()); 1306 EXPECT_EQ(Triple::PC, T.getVendor()); 1307 EXPECT_EQ(Triple::Serenity, T.getOS()); 1308 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1309 1310 T = Triple("aarch64-pc-serenity"); 1311 EXPECT_EQ(Triple::aarch64, T.getArch()); 1312 EXPECT_EQ(Triple::PC, T.getVendor()); 1313 EXPECT_EQ(Triple::Serenity, T.getOS()); 1314 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1315 1316 T = Triple("aarch64-unknown-linux-pauthtest"); 1317 EXPECT_EQ(Triple::aarch64, T.getArch()); 1318 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1319 EXPECT_EQ(Triple::Linux, T.getOS()); 1320 EXPECT_EQ(Triple::PAuthTest, T.getEnvironment()); 1321 1322 // Gentoo time64 triples 1323 T = Triple("i686-pc-linux-gnut64"); 1324 EXPECT_EQ(Triple::x86, T.getArch()); 1325 EXPECT_EQ(Triple::PC, T.getVendor()); 1326 EXPECT_EQ(Triple::Linux, T.getOS()); 1327 EXPECT_EQ(Triple::GNUT64, T.getEnvironment()); 1328 EXPECT_TRUE(T.isTime64ABI()); 1329 1330 T = Triple("armv5tel-softfloat-linux-gnueabit64"); 1331 EXPECT_EQ(Triple::arm, T.getArch()); 1332 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1333 EXPECT_EQ(Triple::Linux, T.getOS()); 1334 EXPECT_EQ(Triple::GNUEABIT64, T.getEnvironment()); 1335 EXPECT_TRUE(T.isTime64ABI()); 1336 1337 T = Triple("armv7a-unknown-linux-gnueabihft64"); 1338 EXPECT_EQ(Triple::arm, T.getArch()); 1339 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1340 EXPECT_EQ(Triple::Linux, T.getOS()); 1341 EXPECT_EQ(Triple::GNUEABIHFT64, T.getEnvironment()); 1342 EXPECT_TRUE(T.isTime64ABI()); 1343 EXPECT_TRUE(T.isHardFloatABI()); 1344 1345 T = Triple("x86_64-pc-linux-llvm"); 1346 EXPECT_EQ(Triple::x86_64, T.getArch()); 1347 EXPECT_EQ(Triple::PC, T.getVendor()); 1348 EXPECT_EQ(Triple::Linux, T.getOS()); 1349 EXPECT_EQ(Triple::LLVM, T.getEnvironment()); 1350 1351 T = Triple("spirv64-intel-unknown"); 1352 EXPECT_EQ(Triple::spirv64, T.getArch()); 1353 EXPECT_EQ(Triple::Intel, T.getVendor()); 1354 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1355 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1356 1357 T = Triple("huh"); 1358 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1359 } 1360 1361 static std::string Join(StringRef A, StringRef B, StringRef C) { 1362 std::string Str = std::string(A); 1363 Str += '-'; 1364 Str += B; 1365 Str += '-'; 1366 Str += C; 1367 return Str; 1368 } 1369 1370 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 1371 std::string Str = std::string(A); 1372 Str += '-'; 1373 Str += B; 1374 Str += '-'; 1375 Str += C; 1376 Str += '-'; 1377 Str += D; 1378 return Str; 1379 } 1380 1381 TEST(TripleTest, Normalization) { 1382 1383 EXPECT_EQ("unknown", Triple::normalize("")); 1384 EXPECT_EQ("unknown-unknown", Triple::normalize("-")); 1385 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--")); 1386 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---")); 1387 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown", 1388 Triple::normalize("----")); 1389 1390 EXPECT_EQ("a", Triple::normalize("a")); 1391 EXPECT_EQ("a-b", Triple::normalize("a-b")); 1392 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 1393 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 1394 1395 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 1396 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 1397 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 1398 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 1399 1400 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 1401 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c")); 1402 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 1403 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 1404 1405 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 1406 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c")); 1407 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c")); 1408 1409 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 1410 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386")); 1411 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c")); 1412 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-")); 1413 1414 EXPECT_EQ("i386", Triple::normalize("i386")); 1415 EXPECT_EQ("unknown-pc", Triple::normalize("pc")); 1416 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux")); 1417 1418 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux")); 1419 1420 EXPECT_EQ("a-unknown-unknown", 1421 Triple::normalize("a", Triple::CanonicalForm::THREE_IDENT)); 1422 EXPECT_EQ("a-b-unknown", 1423 Triple::normalize("a-b", Triple::CanonicalForm::THREE_IDENT)); 1424 EXPECT_EQ("a-b-c", 1425 Triple::normalize("a-b-c", Triple::CanonicalForm::THREE_IDENT)); 1426 EXPECT_EQ("a-b-c", 1427 Triple::normalize("a-b-c-d", Triple::CanonicalForm::THREE_IDENT)); 1428 EXPECT_EQ("a-b-c", 1429 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::THREE_IDENT)); 1430 1431 EXPECT_EQ("a-unknown-unknown-unknown", 1432 Triple::normalize("a", Triple::CanonicalForm::FOUR_IDENT)); 1433 EXPECT_EQ("a-b-unknown-unknown", 1434 Triple::normalize("a-b", Triple::CanonicalForm::FOUR_IDENT)); 1435 EXPECT_EQ("a-b-c-unknown", 1436 Triple::normalize("a-b-c", Triple::CanonicalForm::FOUR_IDENT)); 1437 EXPECT_EQ("a-b-c-d", 1438 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FOUR_IDENT)); 1439 EXPECT_EQ("a-b-c-d", 1440 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FOUR_IDENT)); 1441 1442 EXPECT_EQ("a-unknown-unknown-unknown-unknown", 1443 Triple::normalize("a", Triple::CanonicalForm::FIVE_IDENT)); 1444 EXPECT_EQ("a-b-unknown-unknown-unknown", 1445 Triple::normalize("a-b", Triple::CanonicalForm::FIVE_IDENT)); 1446 EXPECT_EQ("a-b-c-unknown-unknown", 1447 Triple::normalize("a-b-c", Triple::CanonicalForm::FIVE_IDENT)); 1448 EXPECT_EQ("a-b-c-d-unknown", 1449 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FIVE_IDENT)); 1450 EXPECT_EQ("a-b-c-d-e", 1451 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FIVE_IDENT)); 1452 1453 EXPECT_EQ("i386-b-c-unknown", 1454 Triple::normalize("i386-b-c", Triple::CanonicalForm::FOUR_IDENT)); 1455 EXPECT_EQ("i386-b-c-unknown-unknown", 1456 Triple::normalize("i386-b-c", Triple::CanonicalForm::FIVE_IDENT)); 1457 1458 EXPECT_EQ("i386-a-c-unknown", 1459 Triple::normalize("a-i386-c", Triple::CanonicalForm::FOUR_IDENT)); 1460 EXPECT_EQ("i386-a-c-unknown-unknown", 1461 Triple::normalize("a-i386-c", Triple::CanonicalForm::FIVE_IDENT)); 1462 1463 EXPECT_EQ("i386-a-b-unknown", 1464 Triple::normalize("a-b-i386", Triple::CanonicalForm::FOUR_IDENT)); 1465 EXPECT_EQ("i386-a-b-c", 1466 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FOUR_IDENT)); 1467 1468 EXPECT_EQ("a-pc-c-unknown", 1469 Triple::normalize("a-pc-c", Triple::CanonicalForm::FOUR_IDENT)); 1470 EXPECT_EQ("unknown-pc-b-c", 1471 Triple::normalize("pc-b-c", Triple::CanonicalForm::FOUR_IDENT)); 1472 EXPECT_EQ("a-pc-b-unknown", 1473 Triple::normalize("a-b-pc", Triple::CanonicalForm::FOUR_IDENT)); 1474 EXPECT_EQ("a-pc-b-c", 1475 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FOUR_IDENT)); 1476 1477 EXPECT_EQ("a-b-linux-unknown", 1478 Triple::normalize("a-b-linux", Triple::CanonicalForm::FOUR_IDENT)); 1479 // We lose `-c` here as expected. 1480 EXPECT_EQ("unknown-unknown-linux-b", 1481 Triple::normalize("linux-b-c", Triple::CanonicalForm::FOUR_IDENT)); 1482 EXPECT_EQ("a-unknown-linux-c", 1483 Triple::normalize("a-linux-c", Triple::CanonicalForm::FOUR_IDENT)); 1484 1485 EXPECT_EQ("i386-pc-a-unknown", 1486 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FOUR_IDENT)); 1487 EXPECT_EQ("i386-pc-unknown-unknown", 1488 Triple::normalize("-pc-i386", Triple::CanonicalForm::FOUR_IDENT)); 1489 EXPECT_EQ("unknown-pc-linux-c", 1490 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FOUR_IDENT)); 1491 EXPECT_EQ("unknown-pc-linux-unknown", 1492 Triple::normalize("linux-pc-", Triple::CanonicalForm::FOUR_IDENT)); 1493 1494 EXPECT_EQ("i386-unknown-unknown-unknown", 1495 Triple::normalize("i386", Triple::CanonicalForm::FOUR_IDENT)); 1496 EXPECT_EQ("unknown-pc-unknown-unknown", 1497 Triple::normalize("pc", Triple::CanonicalForm::FOUR_IDENT)); 1498 EXPECT_EQ("unknown-unknown-linux-unknown", 1499 Triple::normalize("linux", Triple::CanonicalForm::FOUR_IDENT)); 1500 1501 EXPECT_EQ( 1502 "x86_64-unknown-linux-gnu", 1503 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FOUR_IDENT)); 1504 1505 EXPECT_EQ("i386-a-b-unknown-unknown", 1506 Triple::normalize("a-b-i386", Triple::CanonicalForm::FIVE_IDENT)); 1507 EXPECT_EQ("i386-a-b-c-unknown", 1508 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FIVE_IDENT)); 1509 1510 EXPECT_EQ("a-pc-c-unknown-unknown", 1511 Triple::normalize("a-pc-c", Triple::CanonicalForm::FIVE_IDENT)); 1512 EXPECT_EQ("unknown-pc-b-c-unknown", 1513 Triple::normalize("pc-b-c", Triple::CanonicalForm::FIVE_IDENT)); 1514 EXPECT_EQ("a-pc-b-unknown-unknown", 1515 Triple::normalize("a-b-pc", Triple::CanonicalForm::FIVE_IDENT)); 1516 EXPECT_EQ("a-pc-b-c-unknown", 1517 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FIVE_IDENT)); 1518 1519 EXPECT_EQ("a-b-linux-unknown-unknown", 1520 Triple::normalize("a-b-linux", Triple::CanonicalForm::FIVE_IDENT)); 1521 EXPECT_EQ("unknown-unknown-linux-b-c", 1522 Triple::normalize("linux-b-c", Triple::CanonicalForm::FIVE_IDENT)); 1523 EXPECT_EQ("a-unknown-linux-c-unknown", 1524 Triple::normalize("a-linux-c", Triple::CanonicalForm::FIVE_IDENT)); 1525 1526 EXPECT_EQ("i386-pc-a-unknown-unknown", 1527 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FIVE_IDENT)); 1528 EXPECT_EQ("i386-pc-unknown-unknown-unknown", 1529 Triple::normalize("-pc-i386", Triple::CanonicalForm::FIVE_IDENT)); 1530 EXPECT_EQ("unknown-pc-linux-c-unknown", 1531 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FIVE_IDENT)); 1532 EXPECT_EQ("unknown-pc-linux-unknown-unknown", 1533 Triple::normalize("linux-pc-", Triple::CanonicalForm::FIVE_IDENT)); 1534 1535 EXPECT_EQ("i386-unknown-unknown-unknown-unknown", 1536 Triple::normalize("i386", Triple::CanonicalForm::FIVE_IDENT)); 1537 EXPECT_EQ("unknown-pc-unknown-unknown-unknown", 1538 Triple::normalize("pc", Triple::CanonicalForm::FIVE_IDENT)); 1539 EXPECT_EQ("unknown-unknown-linux-unknown-unknown", 1540 Triple::normalize("linux", Triple::CanonicalForm::FIVE_IDENT)); 1541 1542 EXPECT_EQ( 1543 "x86_64-unknown-linux-gnu-unknown", 1544 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FIVE_IDENT)); 1545 1546 // Check that normalizing a permutated set of valid components returns a 1547 // triple with the unpermuted components. 1548 // 1549 // We don't check every possible combination. For the set of architectures A, 1550 // vendors V, operating systems O, and environments E, that would require |A| 1551 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given 1552 // slot and make sure it gets normalized to the correct position from every 1553 // permutation. This should cover the core logic while being a tractable 1554 // number of tests at (|A| + |V| + |O| + |E|) * 4!. 1555 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1); 1556 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1); 1557 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1); 1558 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1); 1559 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType), 1560 Triple::getVendorTypeName(FirstVendorType), 1561 Triple::getOSTypeName(FirstOSType), 1562 Triple::getEnvironmentTypeName(FirstEnvType)}; 1563 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) { 1564 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1565 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 1566 std::string E = Join(C[0], C[1], C[2]); 1567 int I[] = {0, 1, 2}; 1568 do { 1569 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1570 } while (std::next_permutation(std::begin(I), std::end(I))); 1571 std::string F = Join(C[0], C[1], C[2], C[3]); 1572 int J[] = {0, 1, 2, 3}; 1573 do { 1574 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1575 } while (std::next_permutation(std::begin(J), std::end(J))); 1576 } 1577 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType; 1578 ++Vendor) { 1579 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1580 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 1581 std::string E = Join(C[0], C[1], C[2]); 1582 int I[] = {0, 1, 2}; 1583 do { 1584 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1585 } while (std::next_permutation(std::begin(I), std::end(I))); 1586 std::string F = Join(C[0], C[1], C[2], C[3]); 1587 int J[] = {0, 1, 2, 3}; 1588 do { 1589 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1590 } while (std::next_permutation(std::begin(J), std::end(J))); 1591 } 1592 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) { 1593 if (OS == Triple::Win32) 1594 continue; 1595 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1596 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 1597 std::string E = Join(C[0], C[1], C[2]); 1598 int I[] = {0, 1, 2}; 1599 do { 1600 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1601 } while (std::next_permutation(std::begin(I), std::end(I))); 1602 std::string F = Join(C[0], C[1], C[2], C[3]); 1603 int J[] = {0, 1, 2, 3}; 1604 do { 1605 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1606 } while (std::next_permutation(std::begin(J), std::end(J))); 1607 } 1608 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) { 1609 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1610 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 1611 std::string F = Join(C[0], C[1], C[2], C[3]); 1612 int J[] = {0, 1, 2, 3}; 1613 do { 1614 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1615 } while (std::next_permutation(std::begin(J), std::end(J))); 1616 } 1617 1618 // Various real-world funky triples. The value returned by GCC's config.sub 1619 // is given in the comment. 1620 EXPECT_EQ("i386-unknown-windows-gnu", 1621 Triple::normalize("i386-mingw32")); // i386-pc-mingw32 1622 EXPECT_EQ("x86_64-unknown-linux-gnu", 1623 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 1624 EXPECT_EQ("i486-unknown-linux-gnu", 1625 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 1626 EXPECT_EQ("i386-redhat-linux", 1627 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 1628 EXPECT_EQ("i686-unknown-linux", 1629 Triple::normalize("i686-linux")); // i686-pc-linux-gnu 1630 EXPECT_EQ("arm-unknown-none-eabi", 1631 Triple::normalize("arm-none-eabi")); // arm-none-eabi 1632 EXPECT_EQ("ve-unknown-linux", 1633 Triple::normalize("ve-linux")); // ve-linux 1634 EXPECT_EQ("wasm32-unknown-wasi", 1635 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi 1636 EXPECT_EQ("wasm64-unknown-wasi", 1637 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi 1638 } 1639 1640 TEST(TripleTest, MutateName) { 1641 Triple T; 1642 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1643 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1644 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1645 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1646 1647 T.setArchName("i386"); 1648 EXPECT_EQ(Triple::x86, T.getArch()); 1649 EXPECT_EQ("i386--", T.getTriple()); 1650 1651 T.setVendorName("pc"); 1652 EXPECT_EQ(Triple::x86, T.getArch()); 1653 EXPECT_EQ(Triple::PC, T.getVendor()); 1654 EXPECT_EQ("i386-pc-", T.getTriple()); 1655 1656 T.setOSName("linux"); 1657 EXPECT_EQ(Triple::x86, T.getArch()); 1658 EXPECT_EQ(Triple::PC, T.getVendor()); 1659 EXPECT_EQ(Triple::Linux, T.getOS()); 1660 EXPECT_EQ("i386-pc-linux", T.getTriple()); 1661 1662 T.setEnvironmentName("gnu"); 1663 EXPECT_EQ(Triple::x86, T.getArch()); 1664 EXPECT_EQ(Triple::PC, T.getVendor()); 1665 EXPECT_EQ(Triple::Linux, T.getOS()); 1666 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 1667 1668 T.setOSName("freebsd"); 1669 EXPECT_EQ(Triple::x86, T.getArch()); 1670 EXPECT_EQ(Triple::PC, T.getVendor()); 1671 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 1672 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 1673 1674 T.setOSAndEnvironmentName("darwin"); 1675 EXPECT_EQ(Triple::x86, T.getArch()); 1676 EXPECT_EQ(Triple::PC, T.getVendor()); 1677 EXPECT_EQ(Triple::Darwin, T.getOS()); 1678 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 1679 } 1680 1681 TEST(TripleTest, BitWidthChecks) { 1682 Triple T; 1683 EXPECT_FALSE(T.isArch16Bit()); 1684 EXPECT_FALSE(T.isArch32Bit()); 1685 EXPECT_FALSE(T.isArch64Bit()); 1686 EXPECT_EQ(T.getArchPointerBitWidth(), 0U); 1687 1688 T.setArch(Triple::arm); 1689 EXPECT_FALSE(T.isArch16Bit()); 1690 EXPECT_TRUE(T.isArch32Bit()); 1691 EXPECT_FALSE(T.isArch64Bit()); 1692 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1693 1694 T.setArch(Triple::hexagon); 1695 EXPECT_FALSE(T.isArch16Bit()); 1696 EXPECT_TRUE(T.isArch32Bit()); 1697 EXPECT_FALSE(T.isArch64Bit()); 1698 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1699 1700 T.setArch(Triple::mips); 1701 EXPECT_FALSE(T.isArch16Bit()); 1702 EXPECT_TRUE(T.isArch32Bit()); 1703 EXPECT_FALSE(T.isArch64Bit()); 1704 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1705 1706 T.setArch(Triple::mips64); 1707 EXPECT_FALSE(T.isArch16Bit()); 1708 EXPECT_FALSE(T.isArch32Bit()); 1709 EXPECT_TRUE(T.isArch64Bit()); 1710 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1711 1712 T.setArch(Triple::msp430); 1713 EXPECT_TRUE(T.isArch16Bit()); 1714 EXPECT_FALSE(T.isArch32Bit()); 1715 EXPECT_FALSE(T.isArch64Bit()); 1716 EXPECT_EQ(T.getArchPointerBitWidth(), 16U); 1717 1718 T.setArch(Triple::ppc); 1719 EXPECT_FALSE(T.isArch16Bit()); 1720 EXPECT_TRUE(T.isArch32Bit()); 1721 EXPECT_FALSE(T.isArch64Bit()); 1722 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1723 1724 T.setArch(Triple::ppc64); 1725 EXPECT_FALSE(T.isArch16Bit()); 1726 EXPECT_FALSE(T.isArch32Bit()); 1727 EXPECT_TRUE(T.isArch64Bit()); 1728 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1729 1730 T.setArch(Triple::x86); 1731 EXPECT_FALSE(T.isArch16Bit()); 1732 EXPECT_TRUE(T.isArch32Bit()); 1733 EXPECT_FALSE(T.isArch64Bit()); 1734 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1735 1736 T.setArch(Triple::x86_64); 1737 EXPECT_FALSE(T.isArch16Bit()); 1738 EXPECT_FALSE(T.isArch32Bit()); 1739 EXPECT_TRUE(T.isArch64Bit()); 1740 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1741 1742 T.setArch(Triple::amdil); 1743 EXPECT_FALSE(T.isArch16Bit()); 1744 EXPECT_TRUE(T.isArch32Bit()); 1745 EXPECT_FALSE(T.isArch64Bit()); 1746 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1747 1748 T.setArch(Triple::amdil64); 1749 EXPECT_FALSE(T.isArch16Bit()); 1750 EXPECT_FALSE(T.isArch32Bit()); 1751 EXPECT_TRUE(T.isArch64Bit()); 1752 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1753 1754 T.setArch(Triple::hsail); 1755 EXPECT_FALSE(T.isArch16Bit()); 1756 EXPECT_TRUE(T.isArch32Bit()); 1757 EXPECT_FALSE(T.isArch64Bit()); 1758 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1759 1760 T.setArch(Triple::hsail64); 1761 EXPECT_FALSE(T.isArch16Bit()); 1762 EXPECT_FALSE(T.isArch32Bit()); 1763 EXPECT_TRUE(T.isArch64Bit()); 1764 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1765 1766 T.setArch(Triple::spir); 1767 EXPECT_FALSE(T.isArch16Bit()); 1768 EXPECT_TRUE(T.isArch32Bit()); 1769 EXPECT_FALSE(T.isArch64Bit()); 1770 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1771 1772 T.setArch(Triple::spir64); 1773 EXPECT_FALSE(T.isArch16Bit()); 1774 EXPECT_FALSE(T.isArch32Bit()); 1775 EXPECT_TRUE(T.isArch64Bit()); 1776 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1777 1778 T.setArch(Triple::spirv); 1779 EXPECT_FALSE(T.isArch16Bit()); 1780 EXPECT_FALSE(T.isArch32Bit()); 1781 EXPECT_TRUE(T.isArch64Bit()); 1782 EXPECT_TRUE(T.isSPIRV()); 1783 1784 T.setArch(Triple::spirv32); 1785 EXPECT_FALSE(T.isArch16Bit()); 1786 EXPECT_TRUE(T.isArch32Bit()); 1787 EXPECT_FALSE(T.isArch64Bit()); 1788 EXPECT_TRUE(T.isSPIRV()); 1789 1790 T.setArch(Triple::spirv64); 1791 EXPECT_FALSE(T.isArch16Bit()); 1792 EXPECT_FALSE(T.isArch32Bit()); 1793 EXPECT_TRUE(T.isArch64Bit()); 1794 EXPECT_TRUE(T.isSPIRV()); 1795 1796 T.setArch(Triple::sparc); 1797 EXPECT_FALSE(T.isArch16Bit()); 1798 EXPECT_TRUE(T.isArch32Bit()); 1799 EXPECT_FALSE(T.isArch64Bit()); 1800 1801 T.setArch(Triple::sparcel); 1802 EXPECT_FALSE(T.isArch16Bit()); 1803 EXPECT_TRUE(T.isArch32Bit()); 1804 EXPECT_FALSE(T.isArch64Bit()); 1805 1806 T.setArch(Triple::sparcv9); 1807 EXPECT_FALSE(T.isArch16Bit()); 1808 EXPECT_FALSE(T.isArch32Bit()); 1809 EXPECT_TRUE(T.isArch64Bit()); 1810 1811 T.setArch(Triple::wasm32); 1812 EXPECT_FALSE(T.isArch16Bit()); 1813 EXPECT_TRUE(T.isArch32Bit()); 1814 EXPECT_FALSE(T.isArch64Bit()); 1815 1816 T.setArch(Triple::wasm64); 1817 EXPECT_FALSE(T.isArch16Bit()); 1818 EXPECT_FALSE(T.isArch32Bit()); 1819 EXPECT_TRUE(T.isArch64Bit()); 1820 1821 T.setArch(Triple::avr); 1822 EXPECT_TRUE(T.isArch16Bit()); 1823 EXPECT_FALSE(T.isArch32Bit()); 1824 EXPECT_FALSE(T.isArch64Bit()); 1825 1826 T.setArch(Triple::lanai); 1827 EXPECT_FALSE(T.isArch16Bit()); 1828 EXPECT_TRUE(T.isArch32Bit()); 1829 EXPECT_FALSE(T.isArch64Bit()); 1830 1831 T.setArch(Triple::riscv32); 1832 EXPECT_FALSE(T.isArch16Bit()); 1833 EXPECT_TRUE(T.isArch32Bit()); 1834 EXPECT_FALSE(T.isArch64Bit()); 1835 EXPECT_TRUE(T.isRISCV()); 1836 1837 T.setArch(Triple::riscv64); 1838 EXPECT_FALSE(T.isArch16Bit()); 1839 EXPECT_FALSE(T.isArch32Bit()); 1840 EXPECT_TRUE(T.isArch64Bit()); 1841 EXPECT_TRUE(T.isRISCV()); 1842 1843 T.setArch(Triple::csky); 1844 EXPECT_FALSE(T.isArch16Bit()); 1845 EXPECT_TRUE(T.isArch32Bit()); 1846 EXPECT_FALSE(T.isArch64Bit()); 1847 EXPECT_TRUE(T.isCSKY()); 1848 1849 T.setArch(Triple::loongarch32); 1850 EXPECT_FALSE(T.isArch16Bit()); 1851 EXPECT_TRUE(T.isArch32Bit()); 1852 EXPECT_FALSE(T.isArch64Bit()); 1853 EXPECT_TRUE(T.isLoongArch()); 1854 EXPECT_TRUE(T.isLoongArch32()); 1855 1856 T.setArch(Triple::loongarch64); 1857 EXPECT_FALSE(T.isArch16Bit()); 1858 EXPECT_FALSE(T.isArch32Bit()); 1859 EXPECT_TRUE(T.isArch64Bit()); 1860 EXPECT_TRUE(T.isLoongArch()); 1861 EXPECT_TRUE(T.isLoongArch64()); 1862 1863 T.setArch(Triple::dxil); 1864 EXPECT_FALSE(T.isArch16Bit()); 1865 EXPECT_TRUE(T.isArch32Bit()); 1866 EXPECT_FALSE(T.isArch64Bit()); 1867 EXPECT_TRUE(T.isDXIL()); 1868 1869 T.setArch(Triple::xtensa); 1870 EXPECT_FALSE(T.isArch16Bit()); 1871 EXPECT_TRUE(T.isArch32Bit()); 1872 EXPECT_FALSE(T.isArch64Bit()); 1873 } 1874 1875 TEST(TripleTest, BitWidthArchVariants) { 1876 Triple T; 1877 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1878 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1879 1880 T.setArch(Triple::UnknownArch); 1881 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1882 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1883 1884 T.setArch(Triple::mips); 1885 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1886 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1887 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1888 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1889 1890 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1891 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1892 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1893 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1894 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1895 1896 T.setArch(Triple::mipsel); 1897 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1898 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1899 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1900 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1901 1902 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1903 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1904 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1905 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1906 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1907 1908 T.setArch(Triple::ppc); 1909 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1910 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1911 1912 T.setArch(Triple::nvptx); 1913 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1914 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1915 1916 T.setArch(Triple::sparc); 1917 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1918 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1919 1920 T.setArch(Triple::x86); 1921 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1922 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1923 1924 T.setArch(Triple::mips64); 1925 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1926 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1927 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1928 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1929 1930 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1931 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1932 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1933 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1934 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1935 1936 T.setArch(Triple::mips64el); 1937 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1938 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1939 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1940 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1941 1942 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1943 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1944 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1945 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1946 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1947 1948 T.setArch(Triple::ppc64); 1949 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1950 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1951 1952 T.setArch(Triple::nvptx64); 1953 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1954 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1955 1956 T.setArch(Triple::sparcv9); 1957 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1958 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1959 1960 T.setArch(Triple::x86_64); 1961 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1962 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1963 1964 T.setArch(Triple::amdil); 1965 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1966 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1967 1968 T.setArch(Triple::amdil64); 1969 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1970 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1971 1972 T.setArch(Triple::hsail); 1973 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1974 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1975 1976 T.setArch(Triple::hsail64); 1977 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1978 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1979 1980 T.setArch(Triple::spir); 1981 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1982 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1983 1984 T.setArch(Triple::spir64); 1985 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1986 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1987 1988 T.setArch(Triple::spirv); 1989 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1990 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1991 1992 T.setArch(Triple::spirv32); 1993 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1994 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1995 1996 T.setArch(Triple::spirv64); 1997 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1998 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1999 2000 T.setArch(Triple::wasm32); 2001 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 2002 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 2003 2004 T.setArch(Triple::wasm64); 2005 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 2006 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 2007 2008 T.setArch(Triple::riscv32); 2009 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 2010 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 2011 2012 T.setArch(Triple::riscv64); 2013 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 2014 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 2015 2016 T.setArch(Triple::csky); 2017 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch()); 2018 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 2019 2020 T.setArch(Triple::loongarch32); 2021 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 2022 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 2023 2024 T.setArch(Triple::loongarch64); 2025 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 2026 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 2027 2028 T.setArch(Triple::thumbeb); 2029 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); 2030 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 2031 2032 T.setArch(Triple::thumb); 2033 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch()); 2034 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 2035 2036 T.setArch(Triple::aarch64); 2037 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 2038 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 2039 2040 T.setArch(Triple::aarch64_be); 2041 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 2042 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 2043 2044 T.setArch(Triple::renderscript32); 2045 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 2046 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 2047 2048 T.setArch(Triple::renderscript64); 2049 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 2050 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 2051 2052 T.setArch(Triple::armeb); 2053 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 2054 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 2055 2056 T.setArch(Triple::arm); 2057 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 2058 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 2059 2060 T.setArch(Triple::systemz); 2061 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 2062 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch()); 2063 2064 T.setArch(Triple::xcore); 2065 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch()); 2066 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 2067 2068 T.setArch(Triple::dxil); 2069 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch()); 2070 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 2071 2072 T.setArch(Triple::xtensa); 2073 EXPECT_EQ(Triple::xtensa, T.get32BitArchVariant().getArch()); 2074 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 2075 } 2076 2077 TEST(TripleTest, EndianArchVariants) { 2078 Triple T; 2079 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2080 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2081 2082 T.setArch(Triple::UnknownArch); 2083 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2084 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2085 2086 T.setArch(Triple::aarch64_be); 2087 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 2088 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 2089 2090 T.setArch(Triple::aarch64); 2091 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 2092 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 2093 2094 T.setArch(Triple::armeb); 2095 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 2096 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2097 2098 T.setArch(Triple::arm); 2099 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2100 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 2101 T = Triple("arm"); 2102 EXPECT_TRUE(T.isLittleEndian()); 2103 T = Triple("thumb"); 2104 EXPECT_TRUE(T.isLittleEndian()); 2105 T = Triple("armeb"); 2106 EXPECT_FALSE(T.isLittleEndian()); 2107 T = Triple("thumbeb"); 2108 EXPECT_FALSE(T.isLittleEndian()); 2109 2110 T.setArch(Triple::bpfeb); 2111 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 2112 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 2113 2114 T.setArch(Triple::bpfel); 2115 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 2116 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 2117 2118 T.setArch(Triple::mips64); 2119 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2120 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2121 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2122 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2123 2124 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 2125 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2126 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2127 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2128 EXPECT_EQ(Triple::MipsSubArch_r6, 2129 T.getLittleEndianArchVariant().getSubArch()); 2130 2131 T.setArch(Triple::mips64el); 2132 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2133 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2134 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2135 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2136 2137 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 2138 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2139 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2140 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2141 EXPECT_EQ(Triple::MipsSubArch_r6, 2142 T.getLittleEndianArchVariant().getSubArch()); 2143 2144 T.setArch(Triple::mips); 2145 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2146 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2147 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2148 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2149 2150 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 2151 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2152 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2153 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2154 EXPECT_EQ(Triple::MipsSubArch_r6, 2155 T.getLittleEndianArchVariant().getSubArch()); 2156 2157 T.setArch(Triple::mipsel); 2158 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2159 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2160 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2161 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2162 2163 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 2164 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2165 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2166 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2167 EXPECT_EQ(Triple::MipsSubArch_r6, 2168 T.getLittleEndianArchVariant().getSubArch()); 2169 2170 T.setArch(Triple::ppc); 2171 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 2172 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch()); 2173 2174 T.setArch(Triple::ppc64); 2175 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 2176 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 2177 2178 T.setArch(Triple::ppc64le); 2179 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 2180 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 2181 2182 T.setArch(Triple::sparc); 2183 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 2184 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 2185 2186 T.setArch(Triple::sparcel); 2187 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 2188 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 2189 2190 T.setArch(Triple::thumb); 2191 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2192 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 2193 2194 T.setArch(Triple::thumbeb); 2195 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 2196 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2197 2198 T.setArch(Triple::lanai); 2199 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 2200 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2201 2202 T.setArch(Triple::tcele); 2203 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 2204 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 2205 2206 T.setArch(Triple::tce); 2207 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 2208 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 2209 2210 T.setArch(Triple::csky); 2211 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2212 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch()); 2213 2214 T.setArch(Triple::loongarch32); 2215 EXPECT_TRUE(T.isLittleEndian()); 2216 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2217 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch()); 2218 2219 T.setArch(Triple::loongarch64); 2220 EXPECT_TRUE(T.isLittleEndian()); 2221 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2222 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch()); 2223 2224 T.setArch(Triple::dxil); 2225 EXPECT_TRUE(T.isLittleEndian()); 2226 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2227 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch()); 2228 } 2229 2230 TEST(TripleTest, XROS) { 2231 Triple T; 2232 VersionTuple Version; 2233 2234 T = Triple("arm64-apple-xros"); 2235 EXPECT_TRUE(T.isXROS()); 2236 EXPECT_TRUE(T.isOSDarwin()); 2237 EXPECT_FALSE(T.isiOS()); 2238 EXPECT_FALSE(T.isMacOSX()); 2239 EXPECT_FALSE(T.isSimulatorEnvironment()); 2240 EXPECT_EQ(T.getOSName(), "xros"); 2241 Version = T.getOSVersion(); 2242 EXPECT_EQ(VersionTuple(0), Version); 2243 2244 T = Triple("arm64-apple-visionos1.2"); 2245 EXPECT_TRUE(T.isXROS()); 2246 EXPECT_TRUE(T.isOSDarwin()); 2247 EXPECT_FALSE(T.isiOS()); 2248 EXPECT_FALSE(T.isMacOSX()); 2249 EXPECT_FALSE(T.isSimulatorEnvironment()); 2250 EXPECT_EQ(T.getOSName(), "visionos1.2"); 2251 Version = T.getOSVersion(); 2252 EXPECT_EQ(VersionTuple(1, 2), Version); 2253 2254 T = Triple("arm64-apple-xros1-simulator"); 2255 EXPECT_TRUE(T.isXROS()); 2256 EXPECT_TRUE(T.isOSDarwin()); 2257 EXPECT_FALSE(T.isiOS()); 2258 EXPECT_FALSE(T.isMacOSX()); 2259 EXPECT_TRUE(T.isSimulatorEnvironment()); 2260 Version = T.getOSVersion(); 2261 EXPECT_EQ(VersionTuple(1), Version); 2262 Version = T.getiOSVersion(); 2263 EXPECT_EQ(VersionTuple(17), Version); 2264 } 2265 2266 TEST(TripleTest, getOSVersion) { 2267 Triple T; 2268 VersionTuple Version; 2269 2270 T = Triple("i386-apple-darwin9"); 2271 EXPECT_TRUE(T.isMacOSX()); 2272 EXPECT_FALSE(T.isiOS()); 2273 EXPECT_FALSE(T.isArch16Bit()); 2274 EXPECT_TRUE(T.isArch32Bit()); 2275 EXPECT_FALSE(T.isArch64Bit()); 2276 T.getMacOSXVersion(Version); 2277 EXPECT_EQ(VersionTuple(10, 5), Version); 2278 Version = T.getiOSVersion(); 2279 EXPECT_EQ(VersionTuple(5), Version); 2280 2281 T = Triple("x86_64-apple-darwin9"); 2282 EXPECT_TRUE(T.isMacOSX()); 2283 EXPECT_FALSE(T.isiOS()); 2284 EXPECT_FALSE(T.isArch16Bit()); 2285 EXPECT_FALSE(T.isArch32Bit()); 2286 EXPECT_TRUE(T.isArch64Bit()); 2287 T.getMacOSXVersion(Version); 2288 EXPECT_EQ(VersionTuple(10, 5), Version); 2289 Version = T.getiOSVersion(); 2290 EXPECT_EQ(VersionTuple(5), Version); 2291 2292 T = Triple("x86_64-apple-macosx"); 2293 EXPECT_TRUE(T.isMacOSX()); 2294 EXPECT_FALSE(T.isiOS()); 2295 EXPECT_FALSE(T.isArch16Bit()); 2296 EXPECT_FALSE(T.isArch32Bit()); 2297 EXPECT_TRUE(T.isArch64Bit()); 2298 T.getMacOSXVersion(Version); 2299 EXPECT_EQ(VersionTuple(10, 4), Version); 2300 Version = T.getiOSVersion(); 2301 EXPECT_EQ(VersionTuple(5), Version); 2302 2303 T = Triple("x86_64-apple-macosx10.7"); 2304 EXPECT_TRUE(T.isMacOSX()); 2305 EXPECT_FALSE(T.isiOS()); 2306 EXPECT_FALSE(T.isArch16Bit()); 2307 EXPECT_FALSE(T.isArch32Bit()); 2308 EXPECT_TRUE(T.isArch64Bit()); 2309 T.getMacOSXVersion(Version); 2310 EXPECT_EQ(VersionTuple(10, 7), Version); 2311 Version = T.getiOSVersion(); 2312 EXPECT_EQ(VersionTuple(5), Version); 2313 2314 T = Triple("x86_64-apple-macos11.0"); 2315 EXPECT_TRUE(T.isMacOSX()); 2316 EXPECT_FALSE(T.isiOS()); 2317 EXPECT_FALSE(T.isArch16Bit()); 2318 EXPECT_FALSE(T.isArch32Bit()); 2319 EXPECT_TRUE(T.isArch64Bit()); 2320 T.getMacOSXVersion(Version); 2321 EXPECT_EQ(VersionTuple(11, 0), Version); 2322 2323 T = Triple("arm64-apple-macosx11.5.8"); 2324 EXPECT_TRUE(T.isMacOSX()); 2325 EXPECT_FALSE(T.isiOS()); 2326 EXPECT_FALSE(T.isArch16Bit()); 2327 EXPECT_FALSE(T.isArch32Bit()); 2328 EXPECT_TRUE(T.isArch64Bit()); 2329 T.getMacOSXVersion(Version); 2330 EXPECT_EQ(VersionTuple(11, 5, 8), Version); 2331 2332 // 10.16 forms a valid triple, even though it's not 2333 // a version of a macOS. 2334 T = Triple("x86_64-apple-macos10.16"); 2335 EXPECT_TRUE(T.isMacOSX()); 2336 T.getMacOSXVersion(Version); 2337 EXPECT_EQ(VersionTuple(10, 16), Version); 2338 2339 T = Triple("x86_64-apple-darwin20"); 2340 EXPECT_TRUE(T.isMacOSX()); 2341 T.getMacOSXVersion(Version); 2342 EXPECT_EQ(VersionTuple(11), Version); 2343 2344 // For darwin triples on macOS 11, only compare the major version. 2345 T = Triple("x86_64-apple-darwin20.2"); 2346 EXPECT_TRUE(T.isMacOSX()); 2347 T.getMacOSXVersion(Version); 2348 EXPECT_EQ(VersionTuple(11), Version); 2349 2350 T = Triple("armv7-apple-ios"); 2351 EXPECT_FALSE(T.isMacOSX()); 2352 EXPECT_TRUE(T.isiOS()); 2353 EXPECT_FALSE(T.isArch16Bit()); 2354 EXPECT_TRUE(T.isArch32Bit()); 2355 EXPECT_FALSE(T.isArch64Bit()); 2356 T.getMacOSXVersion(Version); 2357 EXPECT_EQ(VersionTuple(10, 4), Version); 2358 Version = T.getiOSVersion(); 2359 EXPECT_EQ(VersionTuple(5), Version); 2360 2361 T = Triple("armv7-apple-ios7.0"); 2362 EXPECT_FALSE(T.isMacOSX()); 2363 EXPECT_TRUE(T.isiOS()); 2364 EXPECT_FALSE(T.isArch16Bit()); 2365 EXPECT_TRUE(T.isArch32Bit()); 2366 EXPECT_FALSE(T.isArch64Bit()); 2367 T.getMacOSXVersion(Version); 2368 EXPECT_EQ(VersionTuple(10, 4), Version); 2369 Version = T.getiOSVersion(); 2370 EXPECT_EQ(VersionTuple(7, 0), Version); 2371 EXPECT_FALSE(T.isSimulatorEnvironment()); 2372 2373 T = Triple("x86_64-apple-ios10.3-simulator"); 2374 EXPECT_TRUE(T.isiOS()); 2375 Version = T.getiOSVersion(); 2376 EXPECT_EQ(VersionTuple(10, 3), Version); 2377 EXPECT_TRUE(T.isSimulatorEnvironment()); 2378 EXPECT_FALSE(T.isMacCatalystEnvironment()); 2379 2380 T = Triple("x86_64-apple-ios13.0-macabi"); 2381 EXPECT_TRUE(T.isiOS()); 2382 Version = T.getiOSVersion(); 2383 EXPECT_EQ(VersionTuple(13, 0), Version); 2384 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI); 2385 EXPECT_TRUE(T.isMacCatalystEnvironment()); 2386 EXPECT_FALSE(T.isSimulatorEnvironment()); 2387 2388 T = Triple("x86_64-apple-driverkit20.1.0"); 2389 EXPECT_TRUE(T.isDriverKit()); 2390 EXPECT_TRUE(T.isOSDarwin()); 2391 EXPECT_FALSE(T.isMacOSX()); 2392 EXPECT_FALSE(T.isiOS()); 2393 Version = T.getDriverKitVersion(); 2394 EXPECT_EQ(VersionTuple(20, 1), Version); 2395 2396 T = Triple("x86_64-apple-driverkit20"); 2397 Version = T.getDriverKitVersion(); 2398 EXPECT_EQ(VersionTuple(20, 0), Version); 2399 2400 // DriverKit version should default to 19.0. 2401 T = Triple("x86_64-apple-driverkit"); 2402 Version = T.getDriverKitVersion(); 2403 EXPECT_EQ(VersionTuple(19, 0), Version); 2404 2405 T = Triple("dxil-unknown-shadermodel6.6-pixel"); 2406 EXPECT_EQ(Triple::dxil, T.getArch()); 2407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 2408 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 2409 Version = T.getOSVersion(); 2410 EXPECT_EQ(VersionTuple(6, 6), Version); 2411 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 2412 2413 T = Triple("dxil-unknown-shadermodel6.0-pixel"); 2414 EXPECT_EQ(Triple::dxil, T.getArch()); 2415 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 2416 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 2417 Version = T.getOSVersion(); 2418 EXPECT_EQ(VersionTuple(6, 0), Version); 2419 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 2420 } 2421 2422 TEST(TripleTest, getEnvironmentVersion) { 2423 Triple T; 2424 VersionTuple Version; 2425 2426 T = Triple("arm-unknown-linux-android16"); 2427 EXPECT_TRUE(T.isAndroid()); 2428 Version = T.getEnvironmentVersion(); 2429 EXPECT_EQ(VersionTuple(16), Version); 2430 EXPECT_EQ(Triple::Android, T.getEnvironment()); 2431 2432 T = Triple("aarch64-unknown-linux-android21"); 2433 EXPECT_TRUE(T.isAndroid()); 2434 Version = T.getEnvironmentVersion(); 2435 EXPECT_EQ(VersionTuple(21), Version); 2436 EXPECT_EQ(Triple::Android, T.getEnvironment()); 2437 } 2438 2439 TEST(TripleTest, isMacOSVersionLT) { 2440 Triple T = Triple("x86_64-apple-macos11"); 2441 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 2442 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 2443 2444 T = Triple("x86_64-apple-darwin20"); 2445 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 2446 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0)); 2447 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 2448 } 2449 2450 TEST(TripleTest, CanonicalizeOSVersion) { 2451 EXPECT_EQ(VersionTuple(10, 15, 4), 2452 Triple::getCanonicalVersionForOS(Triple::MacOSX, 2453 VersionTuple(10, 15, 4))); 2454 EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS( 2455 Triple::MacOSX, VersionTuple(10, 16))); 2456 EXPECT_EQ(VersionTuple(20), 2457 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20))); 2458 } 2459 2460 TEST(TripleTest, FileFormat) { 2461 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 2462 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 2463 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 2464 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 2465 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 2466 2467 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 2468 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 2469 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 2470 EXPECT_EQ(Triple::MachO, Triple("powerpc-apple-macosx").getObjectFormat()); 2471 2472 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 2473 2474 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 2475 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 2476 2477 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat()); 2478 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat()); 2479 2480 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat()); 2481 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat()); 2482 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat()); 2483 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat()); 2484 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat()); 2485 2486 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); 2487 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); 2488 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat()); 2489 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat()); 2490 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat()); 2491 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat()); 2492 2493 EXPECT_EQ(Triple::Wasm, 2494 Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); 2495 EXPECT_EQ(Triple::Wasm, 2496 Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); 2497 EXPECT_EQ(Triple::Wasm, 2498 Triple("wasm32-wasi-wasm").getObjectFormat()); 2499 EXPECT_EQ(Triple::Wasm, 2500 Triple("wasm64-wasi-wasm").getObjectFormat()); 2501 EXPECT_EQ(Triple::Wasm, 2502 Triple("wasm32-unknown-wasi-wasm").getObjectFormat()); 2503 EXPECT_EQ(Triple::Wasm, 2504 Triple("wasm64-unknown-wasi-wasm").getObjectFormat()); 2505 2506 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat()); 2507 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat()); 2508 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat()); 2509 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat()); 2510 2511 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat()); 2512 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat()); 2513 2514 EXPECT_EQ(Triple::SPIRV, Triple("spirv-unknown-unknown").getObjectFormat()); 2515 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat()); 2516 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat()); 2517 2518 EXPECT_EQ(Triple::ELF, 2519 Triple("loongarch32-unknown-unknown").getObjectFormat()); 2520 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat()); 2521 2522 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 2523 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 2524 2525 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 2526 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 2527 2528 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 2529 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 2530 2531 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 2532 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 2533 2534 EXPECT_EQ(Triple::DXContainer, 2535 Triple("dxil-unknown-shadermodel").getObjectFormat()); 2536 2537 Triple T = Triple(""); 2538 T.setObjectFormat(Triple::ELF); 2539 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 2540 EXPECT_EQ("elf", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2541 2542 T.setObjectFormat(Triple::MachO); 2543 EXPECT_EQ(Triple::MachO, T.getObjectFormat()); 2544 EXPECT_EQ("macho", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2545 2546 T.setObjectFormat(Triple::XCOFF); 2547 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat()); 2548 EXPECT_EQ("xcoff", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2549 2550 T.setObjectFormat(Triple::GOFF); 2551 EXPECT_EQ(Triple::GOFF, T.getObjectFormat()); 2552 EXPECT_EQ("goff", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2553 2554 T.setObjectFormat(Triple::SPIRV); 2555 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat()); 2556 EXPECT_EQ("spirv", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2557 2558 EXPECT_EQ(Triple::ELF, Triple("amdgcn-apple-macosx").getObjectFormat()); 2559 EXPECT_EQ(Triple::ELF, Triple("r600-apple-macosx").getObjectFormat()); 2560 EXPECT_EQ(Triple::SPIRV, Triple("spirv-apple-macosx").getObjectFormat()); 2561 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-apple-macosx").getObjectFormat()); 2562 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-apple-macosx").getObjectFormat()); 2563 EXPECT_EQ(Triple::DXContainer, Triple("dxil-apple-macosx").getObjectFormat()); 2564 } 2565 2566 TEST(TripleTest, NormalizeWindows) { 2567 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 2568 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32")); 2569 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 2570 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32")); 2571 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 2572 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64")); 2573 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 2574 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin")); 2575 2576 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 2577 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32")); 2578 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 2579 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32")); 2580 EXPECT_EQ("x86_64-pc-windows-gnu", 2581 Triple::normalize("x86_64-pc-mingw32-w64")); 2582 EXPECT_EQ("x86_64-unknown-windows-gnu", 2583 Triple::normalize("x86_64-mingw32-w64")); 2584 2585 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 2586 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf")); 2587 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 2588 EXPECT_EQ("i686-unknown-windows-macho", 2589 Triple::normalize("i686-win32-macho")); 2590 2591 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 2592 EXPECT_EQ("x86_64-unknown-windows-elf", 2593 Triple::normalize("x86_64-win32-elf")); 2594 EXPECT_EQ("x86_64-pc-windows-macho", 2595 Triple::normalize("x86_64-pc-win32-macho")); 2596 EXPECT_EQ("x86_64-unknown-windows-macho", 2597 Triple::normalize("x86_64-win32-macho")); 2598 2599 EXPECT_EQ("i686-pc-windows-cygnus", 2600 Triple::normalize("i686-pc-windows-cygnus")); 2601 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 2602 EXPECT_EQ("i686-pc-windows-itanium", 2603 Triple::normalize("i686-pc-windows-itanium")); 2604 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 2605 2606 EXPECT_EQ("i686-pc-windows-elf", 2607 Triple::normalize("i686-pc-windows-elf-elf")); 2608 2609 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment()); 2610 2611 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvccoff")).isOSBinFormatCOFF()); 2612 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvc")).isOSBinFormatCOFF()); 2613 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-gnu")).isOSBinFormatCOFF()); 2614 } 2615 2616 TEST(TripleTest, NormalizeAndroid) { 2617 EXPECT_EQ("arm-unknown-linux-android16", 2618 Triple::normalize("arm-linux-androideabi16")); 2619 EXPECT_EQ("armv7a-unknown-linux-android", 2620 Triple::normalize("armv7a-linux-androideabi")); 2621 EXPECT_EQ("aarch64-unknown-linux-android21", 2622 Triple::normalize("aarch64-linux-android21")); 2623 } 2624 2625 TEST(TripleTest, NormalizeARM) { 2626 EXPECT_EQ("armv6-unknown-netbsd-eabi", 2627 Triple::normalize("armv6-netbsd-eabi")); 2628 EXPECT_EQ("armv7-unknown-netbsd-eabi", 2629 Triple::normalize("armv7-netbsd-eabi")); 2630 EXPECT_EQ("armv6eb-unknown-netbsd-eabi", 2631 Triple::normalize("armv6eb-netbsd-eabi")); 2632 EXPECT_EQ("armv7eb-unknown-netbsd-eabi", 2633 Triple::normalize("armv7eb-netbsd-eabi")); 2634 EXPECT_EQ("armv6-unknown-netbsd-eabihf", 2635 Triple::normalize("armv6-netbsd-eabihf")); 2636 EXPECT_EQ("armv7-unknown-netbsd-eabihf", 2637 Triple::normalize("armv7-netbsd-eabihf")); 2638 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf", 2639 Triple::normalize("armv6eb-netbsd-eabihf")); 2640 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf", 2641 Triple::normalize("armv7eb-netbsd-eabihf")); 2642 2643 EXPECT_EQ("armv7-suse-linux-gnueabihf", 2644 Triple::normalize("armv7-suse-linux-gnueabi")); 2645 2646 Triple T; 2647 T = Triple("armv6--netbsd-eabi"); 2648 EXPECT_EQ(Triple::arm, T.getArch()); 2649 T = Triple("armv6eb--netbsd-eabi"); 2650 EXPECT_EQ(Triple::armeb, T.getArch()); 2651 T = Triple("armv7-suse-linux-gnueabihf"); 2652 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 2653 } 2654 2655 TEST(TripleTest, ParseARMArch) { 2656 // ARM 2657 { 2658 Triple T = Triple("arm"); 2659 EXPECT_EQ(Triple::arm, T.getArch()); 2660 } 2661 { 2662 Triple T = Triple("armeb"); 2663 EXPECT_EQ(Triple::armeb, T.getArch()); 2664 } 2665 // THUMB 2666 { 2667 Triple T = Triple("thumb"); 2668 EXPECT_EQ(Triple::thumb, T.getArch()); 2669 } 2670 { 2671 Triple T = Triple("thumbeb"); 2672 EXPECT_EQ(Triple::thumbeb, T.getArch()); 2673 } 2674 // AARCH64 2675 { 2676 Triple T = Triple("arm64"); 2677 EXPECT_EQ(Triple::aarch64, T.getArch()); 2678 } 2679 { 2680 Triple T = Triple("arm64_32"); 2681 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 2682 } 2683 { 2684 Triple T = Triple("aarch64"); 2685 EXPECT_EQ(Triple::aarch64, T.getArch()); 2686 } 2687 { 2688 Triple T = Triple("aarch64_be"); 2689 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 2690 } 2691 { 2692 Triple T = Triple("arm64e"); 2693 EXPECT_EQ(Triple::aarch64, T.getArch()); 2694 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch()); 2695 } 2696 { 2697 Triple T = Triple("arm64ec"); 2698 EXPECT_EQ(Triple::aarch64, T.getArch()); 2699 EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch()); 2700 } 2701 { 2702 Triple T; 2703 T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec); 2704 EXPECT_EQ("arm64ec", T.getArchName()); 2705 } 2706 } 2707 2708 TEST(TripleTest, isArmT32) { 2709 // Not isArmT32 2710 { 2711 Triple T = Triple("thumbv6m"); 2712 EXPECT_FALSE(T.isArmT32()); 2713 } 2714 { 2715 Triple T = Triple("armv8m.base"); 2716 EXPECT_FALSE(T.isArmT32()); 2717 } 2718 { 2719 Triple T = Triple("armv7s"); 2720 EXPECT_FALSE(T.isArmT32()); 2721 } 2722 { 2723 Triple T = Triple("armv7k"); 2724 EXPECT_FALSE(T.isArmT32()); 2725 } 2726 { 2727 Triple T = Triple("armv7ve"); 2728 EXPECT_FALSE(T.isArmT32()); 2729 } 2730 { 2731 Triple T = Triple("armv6"); 2732 EXPECT_FALSE(T.isArmT32()); 2733 } 2734 { 2735 Triple T = Triple("armv6m"); 2736 EXPECT_FALSE(T.isArmT32()); 2737 } 2738 { 2739 Triple T = Triple("armv6k"); 2740 EXPECT_FALSE(T.isArmT32()); 2741 } 2742 { 2743 Triple T = Triple("armv6t2"); 2744 EXPECT_FALSE(T.isArmT32()); 2745 } 2746 { 2747 Triple T = Triple("armv5"); 2748 EXPECT_FALSE(T.isArmT32()); 2749 } 2750 { 2751 Triple T = Triple("armv5te"); 2752 EXPECT_FALSE(T.isArmT32()); 2753 } 2754 { 2755 Triple T = Triple("armv4t"); 2756 EXPECT_FALSE(T.isArmT32()); 2757 } 2758 2759 // isArmT32 2760 { 2761 Triple T = Triple("arm"); 2762 EXPECT_TRUE(T.isArmT32()); 2763 } 2764 { 2765 Triple T = Triple("armv7m"); 2766 EXPECT_TRUE(T.isArmT32()); 2767 } 2768 { 2769 Triple T = Triple("armv7em"); 2770 EXPECT_TRUE(T.isArmT32()); 2771 } 2772 { 2773 Triple T = Triple("armv8m.main"); 2774 EXPECT_TRUE(T.isArmT32()); 2775 } 2776 { 2777 Triple T = Triple("armv8.1m.main"); 2778 EXPECT_TRUE(T.isArmT32()); 2779 } 2780 } 2781 2782 TEST(TripleTest, isArmMClass) { 2783 // not M-class 2784 { 2785 Triple T = Triple("armv7s"); 2786 EXPECT_FALSE(T.isArmMClass()); 2787 } 2788 { 2789 Triple T = Triple("armv7k"); 2790 EXPECT_FALSE(T.isArmMClass()); 2791 } 2792 { 2793 Triple T = Triple("armv7ve"); 2794 EXPECT_FALSE(T.isArmMClass()); 2795 } 2796 { 2797 Triple T = Triple("armv6"); 2798 EXPECT_FALSE(T.isArmMClass()); 2799 } 2800 { 2801 Triple T = Triple("armv6k"); 2802 EXPECT_FALSE(T.isArmMClass()); 2803 } 2804 { 2805 Triple T = Triple("armv6t2"); 2806 EXPECT_FALSE(T.isArmMClass()); 2807 } 2808 { 2809 Triple T = Triple("armv5"); 2810 EXPECT_FALSE(T.isArmMClass()); 2811 } 2812 { 2813 Triple T = Triple("armv5te"); 2814 EXPECT_FALSE(T.isArmMClass()); 2815 } 2816 { 2817 Triple T = Triple("armv4t"); 2818 EXPECT_FALSE(T.isArmMClass()); 2819 } 2820 { 2821 Triple T = Triple("arm"); 2822 EXPECT_FALSE(T.isArmMClass()); 2823 } 2824 2825 // is M-class 2826 { 2827 Triple T = Triple("armv6m"); 2828 EXPECT_TRUE(T.isArmMClass()); 2829 } 2830 { 2831 Triple T = Triple("armv7m"); 2832 EXPECT_TRUE(T.isArmMClass()); 2833 } 2834 { 2835 Triple T = Triple("armv7em"); 2836 EXPECT_TRUE(T.isArmMClass()); 2837 } 2838 { 2839 Triple T = Triple("armv8m.base"); 2840 EXPECT_TRUE(T.isArmMClass()); 2841 } 2842 { 2843 Triple T = Triple("armv8m.main"); 2844 EXPECT_TRUE(T.isArmMClass()); 2845 } 2846 { 2847 Triple T = Triple("armv8.1m.main"); 2848 EXPECT_TRUE(T.isArmMClass()); 2849 } 2850 } 2851 2852 TEST(TripleTest, DXILNormaizeWithVersion) { 2853 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0", 2854 Triple::normalize("dxilv1.0--shadermodel6.0")); 2855 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0", 2856 Triple::normalize("dxil--shadermodel6.0")); 2857 EXPECT_EQ("dxilv1.1-unknown-shadermodel6.1-library", 2858 Triple::normalize("dxil-shadermodel6.1-unknown-library")); 2859 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown", 2860 Triple::normalize("dxil-unknown-shadermodel6.x-unknown")); 2861 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown", 2862 Triple::normalize("dxil-unknown-shadermodel6.x-unknown")); 2863 EXPECT_EQ("dxil-unknown-unknown-unknown", Triple::normalize("dxil---")); 2864 EXPECT_EQ("dxilv1.0-pc-shadermodel5.0-compute", 2865 Triple::normalize("dxil-shadermodel5.0-pc-compute")); 2866 } 2867 2868 TEST(TripleTest, isCompatibleWith) { 2869 struct { 2870 const char *A; 2871 const char *B; 2872 bool Result; 2873 } Cases[] = { 2874 {"armv7-linux-gnueabihf", "thumbv7-linux-gnueabihf", true}, 2875 {"armv4-none-unknown-eabi", "thumbv6-unknown-linux-gnueabihf", false}, 2876 {"x86_64-apple-macosx10.9.0", "x86_64-apple-macosx10.10.0", true}, 2877 {"x86_64-apple-macosx10.9.0", "i386-apple-macosx10.9.0", false}, 2878 {"x86_64-apple-macosx10.9.0", "x86_64h-apple-macosx10.9.0", true}, 2879 {"x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", true}, 2880 {"x86_64-unknown-linux-gnu", "i386-unknown-linux-gnu", false}, 2881 {"x86_64-unknown-linux-gnu", "x86_64h-unknown-linux-gnu", true}, 2882 {"x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", false}, 2883 {"x86_64-pc-windows-msvc", "x86_64-pc-windows-msvc-elf", false}, 2884 {"i686-w64-windows-gnu", "i386-w64-windows-gnu", true}, 2885 {"x86_64-w64-windows-gnu", "x86_64-pc-windows-gnu", true}, 2886 {"armv7-w64-windows-gnu", "thumbv7-pc-windows-gnu", true}, 2887 }; 2888 2889 auto DoTest = [](const char *A, const char *B, 2890 bool Result) -> testing::AssertionResult { 2891 if (Triple(A).isCompatibleWith(Triple(B)) != Result) { 2892 return testing::AssertionFailure() 2893 << llvm::formatv("Triple {0} and {1} were expected to be {2}", A, 2894 B, Result ? "compatible" : "incompatible"); 2895 } 2896 return testing::AssertionSuccess(); 2897 }; 2898 for (const auto &C : Cases) { 2899 EXPECT_TRUE(DoTest(C.A, C.B, C.Result)); 2900 // Test that the comparison is commutative. 2901 EXPECT_TRUE(DoTest(C.B, C.A, C.Result)); 2902 } 2903 } 2904 } // end anonymous namespace 2905