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 // Check that normalizing a permutated set of valid components returns a 1421 // triple with the unpermuted components. 1422 // 1423 // We don't check every possible combination. For the set of architectures A, 1424 // vendors V, operating systems O, and environments E, that would require |A| 1425 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given 1426 // slot and make sure it gets normalized to the correct position from every 1427 // permutation. This should cover the core logic while being a tractable 1428 // number of tests at (|A| + |V| + |O| + |E|) * 4!. 1429 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1); 1430 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1); 1431 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1); 1432 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1); 1433 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType), 1434 Triple::getVendorTypeName(FirstVendorType), 1435 Triple::getOSTypeName(FirstOSType), 1436 Triple::getEnvironmentTypeName(FirstEnvType)}; 1437 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) { 1438 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1439 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 1440 std::string E = Join(C[0], C[1], C[2]); 1441 int I[] = {0, 1, 2}; 1442 do { 1443 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1444 } while (std::next_permutation(std::begin(I), std::end(I))); 1445 std::string F = Join(C[0], C[1], C[2], C[3]); 1446 int J[] = {0, 1, 2, 3}; 1447 do { 1448 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1449 } while (std::next_permutation(std::begin(J), std::end(J))); 1450 } 1451 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType; 1452 ++Vendor) { 1453 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1454 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 1455 std::string E = Join(C[0], C[1], C[2]); 1456 int I[] = {0, 1, 2}; 1457 do { 1458 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1459 } while (std::next_permutation(std::begin(I), std::end(I))); 1460 std::string F = Join(C[0], C[1], C[2], C[3]); 1461 int J[] = {0, 1, 2, 3}; 1462 do { 1463 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1464 } while (std::next_permutation(std::begin(J), std::end(J))); 1465 } 1466 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) { 1467 if (OS == Triple::Win32) 1468 continue; 1469 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1470 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 1471 std::string E = Join(C[0], C[1], C[2]); 1472 int I[] = {0, 1, 2}; 1473 do { 1474 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 1475 } while (std::next_permutation(std::begin(I), std::end(I))); 1476 std::string F = Join(C[0], C[1], C[2], C[3]); 1477 int J[] = {0, 1, 2, 3}; 1478 do { 1479 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1480 } while (std::next_permutation(std::begin(J), std::end(J))); 1481 } 1482 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) { 1483 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 1484 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 1485 std::string F = Join(C[0], C[1], C[2], C[3]); 1486 int J[] = {0, 1, 2, 3}; 1487 do { 1488 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 1489 } while (std::next_permutation(std::begin(J), std::end(J))); 1490 } 1491 1492 // Various real-world funky triples. The value returned by GCC's config.sub 1493 // is given in the comment. 1494 EXPECT_EQ("i386-unknown-windows-gnu", 1495 Triple::normalize("i386-mingw32")); // i386-pc-mingw32 1496 EXPECT_EQ("x86_64-unknown-linux-gnu", 1497 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 1498 EXPECT_EQ("i486-unknown-linux-gnu", 1499 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 1500 EXPECT_EQ("i386-redhat-linux", 1501 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 1502 EXPECT_EQ("i686-unknown-linux", 1503 Triple::normalize("i686-linux")); // i686-pc-linux-gnu 1504 EXPECT_EQ("arm-unknown-none-eabi", 1505 Triple::normalize("arm-none-eabi")); // arm-none-eabi 1506 EXPECT_EQ("ve-unknown-linux", 1507 Triple::normalize("ve-linux")); // ve-linux 1508 EXPECT_EQ("wasm32-unknown-wasi", 1509 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi 1510 EXPECT_EQ("wasm64-unknown-wasi", 1511 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi 1512 } 1513 1514 TEST(TripleTest, MutateName) { 1515 Triple T; 1516 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1517 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1518 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1519 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1520 1521 T.setArchName("i386"); 1522 EXPECT_EQ(Triple::x86, T.getArch()); 1523 EXPECT_EQ("i386--", T.getTriple()); 1524 1525 T.setVendorName("pc"); 1526 EXPECT_EQ(Triple::x86, T.getArch()); 1527 EXPECT_EQ(Triple::PC, T.getVendor()); 1528 EXPECT_EQ("i386-pc-", T.getTriple()); 1529 1530 T.setOSName("linux"); 1531 EXPECT_EQ(Triple::x86, T.getArch()); 1532 EXPECT_EQ(Triple::PC, T.getVendor()); 1533 EXPECT_EQ(Triple::Linux, T.getOS()); 1534 EXPECT_EQ("i386-pc-linux", T.getTriple()); 1535 1536 T.setEnvironmentName("gnu"); 1537 EXPECT_EQ(Triple::x86, T.getArch()); 1538 EXPECT_EQ(Triple::PC, T.getVendor()); 1539 EXPECT_EQ(Triple::Linux, T.getOS()); 1540 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 1541 1542 T.setOSName("freebsd"); 1543 EXPECT_EQ(Triple::x86, T.getArch()); 1544 EXPECT_EQ(Triple::PC, T.getVendor()); 1545 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 1546 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 1547 1548 T.setOSAndEnvironmentName("darwin"); 1549 EXPECT_EQ(Triple::x86, T.getArch()); 1550 EXPECT_EQ(Triple::PC, T.getVendor()); 1551 EXPECT_EQ(Triple::Darwin, T.getOS()); 1552 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 1553 } 1554 1555 TEST(TripleTest, BitWidthChecks) { 1556 Triple T; 1557 EXPECT_FALSE(T.isArch16Bit()); 1558 EXPECT_FALSE(T.isArch32Bit()); 1559 EXPECT_FALSE(T.isArch64Bit()); 1560 EXPECT_EQ(T.getArchPointerBitWidth(), 0U); 1561 1562 T.setArch(Triple::arm); 1563 EXPECT_FALSE(T.isArch16Bit()); 1564 EXPECT_TRUE(T.isArch32Bit()); 1565 EXPECT_FALSE(T.isArch64Bit()); 1566 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1567 1568 T.setArch(Triple::hexagon); 1569 EXPECT_FALSE(T.isArch16Bit()); 1570 EXPECT_TRUE(T.isArch32Bit()); 1571 EXPECT_FALSE(T.isArch64Bit()); 1572 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1573 1574 T.setArch(Triple::mips); 1575 EXPECT_FALSE(T.isArch16Bit()); 1576 EXPECT_TRUE(T.isArch32Bit()); 1577 EXPECT_FALSE(T.isArch64Bit()); 1578 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1579 1580 T.setArch(Triple::mips64); 1581 EXPECT_FALSE(T.isArch16Bit()); 1582 EXPECT_FALSE(T.isArch32Bit()); 1583 EXPECT_TRUE(T.isArch64Bit()); 1584 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1585 1586 T.setArch(Triple::msp430); 1587 EXPECT_TRUE(T.isArch16Bit()); 1588 EXPECT_FALSE(T.isArch32Bit()); 1589 EXPECT_FALSE(T.isArch64Bit()); 1590 EXPECT_EQ(T.getArchPointerBitWidth(), 16U); 1591 1592 T.setArch(Triple::ppc); 1593 EXPECT_FALSE(T.isArch16Bit()); 1594 EXPECT_TRUE(T.isArch32Bit()); 1595 EXPECT_FALSE(T.isArch64Bit()); 1596 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1597 1598 T.setArch(Triple::ppc64); 1599 EXPECT_FALSE(T.isArch16Bit()); 1600 EXPECT_FALSE(T.isArch32Bit()); 1601 EXPECT_TRUE(T.isArch64Bit()); 1602 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1603 1604 T.setArch(Triple::x86); 1605 EXPECT_FALSE(T.isArch16Bit()); 1606 EXPECT_TRUE(T.isArch32Bit()); 1607 EXPECT_FALSE(T.isArch64Bit()); 1608 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1609 1610 T.setArch(Triple::x86_64); 1611 EXPECT_FALSE(T.isArch16Bit()); 1612 EXPECT_FALSE(T.isArch32Bit()); 1613 EXPECT_TRUE(T.isArch64Bit()); 1614 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1615 1616 T.setArch(Triple::amdil); 1617 EXPECT_FALSE(T.isArch16Bit()); 1618 EXPECT_TRUE(T.isArch32Bit()); 1619 EXPECT_FALSE(T.isArch64Bit()); 1620 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1621 1622 T.setArch(Triple::amdil64); 1623 EXPECT_FALSE(T.isArch16Bit()); 1624 EXPECT_FALSE(T.isArch32Bit()); 1625 EXPECT_TRUE(T.isArch64Bit()); 1626 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1627 1628 T.setArch(Triple::hsail); 1629 EXPECT_FALSE(T.isArch16Bit()); 1630 EXPECT_TRUE(T.isArch32Bit()); 1631 EXPECT_FALSE(T.isArch64Bit()); 1632 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1633 1634 T.setArch(Triple::hsail64); 1635 EXPECT_FALSE(T.isArch16Bit()); 1636 EXPECT_FALSE(T.isArch32Bit()); 1637 EXPECT_TRUE(T.isArch64Bit()); 1638 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1639 1640 T.setArch(Triple::spir); 1641 EXPECT_FALSE(T.isArch16Bit()); 1642 EXPECT_TRUE(T.isArch32Bit()); 1643 EXPECT_FALSE(T.isArch64Bit()); 1644 EXPECT_EQ(T.getArchPointerBitWidth(), 32U); 1645 1646 T.setArch(Triple::spir64); 1647 EXPECT_FALSE(T.isArch16Bit()); 1648 EXPECT_FALSE(T.isArch32Bit()); 1649 EXPECT_TRUE(T.isArch64Bit()); 1650 EXPECT_EQ(T.getArchPointerBitWidth(), 64U); 1651 1652 T.setArch(Triple::spirv); 1653 EXPECT_FALSE(T.isArch16Bit()); 1654 EXPECT_FALSE(T.isArch32Bit()); 1655 EXPECT_TRUE(T.isArch64Bit()); 1656 EXPECT_TRUE(T.isSPIRV()); 1657 1658 T.setArch(Triple::spirv32); 1659 EXPECT_FALSE(T.isArch16Bit()); 1660 EXPECT_TRUE(T.isArch32Bit()); 1661 EXPECT_FALSE(T.isArch64Bit()); 1662 EXPECT_TRUE(T.isSPIRV()); 1663 1664 T.setArch(Triple::spirv64); 1665 EXPECT_FALSE(T.isArch16Bit()); 1666 EXPECT_FALSE(T.isArch32Bit()); 1667 EXPECT_TRUE(T.isArch64Bit()); 1668 EXPECT_TRUE(T.isSPIRV()); 1669 1670 T.setArch(Triple::sparc); 1671 EXPECT_FALSE(T.isArch16Bit()); 1672 EXPECT_TRUE(T.isArch32Bit()); 1673 EXPECT_FALSE(T.isArch64Bit()); 1674 1675 T.setArch(Triple::sparcel); 1676 EXPECT_FALSE(T.isArch16Bit()); 1677 EXPECT_TRUE(T.isArch32Bit()); 1678 EXPECT_FALSE(T.isArch64Bit()); 1679 1680 T.setArch(Triple::sparcv9); 1681 EXPECT_FALSE(T.isArch16Bit()); 1682 EXPECT_FALSE(T.isArch32Bit()); 1683 EXPECT_TRUE(T.isArch64Bit()); 1684 1685 T.setArch(Triple::wasm32); 1686 EXPECT_FALSE(T.isArch16Bit()); 1687 EXPECT_TRUE(T.isArch32Bit()); 1688 EXPECT_FALSE(T.isArch64Bit()); 1689 1690 T.setArch(Triple::wasm64); 1691 EXPECT_FALSE(T.isArch16Bit()); 1692 EXPECT_FALSE(T.isArch32Bit()); 1693 EXPECT_TRUE(T.isArch64Bit()); 1694 1695 T.setArch(Triple::avr); 1696 EXPECT_TRUE(T.isArch16Bit()); 1697 EXPECT_FALSE(T.isArch32Bit()); 1698 EXPECT_FALSE(T.isArch64Bit()); 1699 1700 T.setArch(Triple::lanai); 1701 EXPECT_FALSE(T.isArch16Bit()); 1702 EXPECT_TRUE(T.isArch32Bit()); 1703 EXPECT_FALSE(T.isArch64Bit()); 1704 1705 T.setArch(Triple::riscv32); 1706 EXPECT_FALSE(T.isArch16Bit()); 1707 EXPECT_TRUE(T.isArch32Bit()); 1708 EXPECT_FALSE(T.isArch64Bit()); 1709 EXPECT_TRUE(T.isRISCV()); 1710 1711 T.setArch(Triple::riscv64); 1712 EXPECT_FALSE(T.isArch16Bit()); 1713 EXPECT_FALSE(T.isArch32Bit()); 1714 EXPECT_TRUE(T.isArch64Bit()); 1715 EXPECT_TRUE(T.isRISCV()); 1716 1717 T.setArch(Triple::csky); 1718 EXPECT_FALSE(T.isArch16Bit()); 1719 EXPECT_TRUE(T.isArch32Bit()); 1720 EXPECT_FALSE(T.isArch64Bit()); 1721 EXPECT_TRUE(T.isCSKY()); 1722 1723 T.setArch(Triple::loongarch32); 1724 EXPECT_FALSE(T.isArch16Bit()); 1725 EXPECT_TRUE(T.isArch32Bit()); 1726 EXPECT_FALSE(T.isArch64Bit()); 1727 EXPECT_TRUE(T.isLoongArch()); 1728 EXPECT_TRUE(T.isLoongArch32()); 1729 1730 T.setArch(Triple::loongarch64); 1731 EXPECT_FALSE(T.isArch16Bit()); 1732 EXPECT_FALSE(T.isArch32Bit()); 1733 EXPECT_TRUE(T.isArch64Bit()); 1734 EXPECT_TRUE(T.isLoongArch()); 1735 EXPECT_TRUE(T.isLoongArch64()); 1736 1737 T.setArch(Triple::dxil); 1738 EXPECT_FALSE(T.isArch16Bit()); 1739 EXPECT_TRUE(T.isArch32Bit()); 1740 EXPECT_FALSE(T.isArch64Bit()); 1741 EXPECT_TRUE(T.isDXIL()); 1742 1743 T.setArch(Triple::xtensa); 1744 EXPECT_FALSE(T.isArch16Bit()); 1745 EXPECT_TRUE(T.isArch32Bit()); 1746 EXPECT_FALSE(T.isArch64Bit()); 1747 } 1748 1749 TEST(TripleTest, BitWidthArchVariants) { 1750 Triple T; 1751 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1752 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1753 1754 T.setArch(Triple::UnknownArch); 1755 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1756 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1757 1758 T.setArch(Triple::mips); 1759 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1760 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1761 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1762 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1763 1764 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1765 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1766 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1767 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1768 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1769 1770 T.setArch(Triple::mipsel); 1771 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1772 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1773 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1774 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1775 1776 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1777 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1778 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1779 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1780 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1781 1782 T.setArch(Triple::ppc); 1783 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1784 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1785 1786 T.setArch(Triple::nvptx); 1787 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1788 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1789 1790 T.setArch(Triple::sparc); 1791 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1792 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1793 1794 T.setArch(Triple::x86); 1795 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1796 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1797 1798 T.setArch(Triple::mips64); 1799 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1800 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1801 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1802 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1803 1804 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1805 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1806 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1807 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1808 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1809 1810 T.setArch(Triple::mips64el); 1811 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1812 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1813 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1814 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1815 1816 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1817 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1818 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1819 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1820 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1821 1822 T.setArch(Triple::ppc64); 1823 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1824 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1825 1826 T.setArch(Triple::nvptx64); 1827 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1828 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1829 1830 T.setArch(Triple::sparcv9); 1831 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1832 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1833 1834 T.setArch(Triple::x86_64); 1835 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1836 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1837 1838 T.setArch(Triple::amdil); 1839 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1840 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1841 1842 T.setArch(Triple::amdil64); 1843 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1844 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1845 1846 T.setArch(Triple::hsail); 1847 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1848 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1849 1850 T.setArch(Triple::hsail64); 1851 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1852 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1853 1854 T.setArch(Triple::spir); 1855 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1856 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1857 1858 T.setArch(Triple::spir64); 1859 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1860 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1861 1862 T.setArch(Triple::spirv); 1863 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1864 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1865 1866 T.setArch(Triple::spirv32); 1867 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1868 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1869 1870 T.setArch(Triple::spirv64); 1871 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1872 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1873 1874 T.setArch(Triple::wasm32); 1875 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1876 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1877 1878 T.setArch(Triple::wasm64); 1879 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1880 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1881 1882 T.setArch(Triple::riscv32); 1883 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1884 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1885 1886 T.setArch(Triple::riscv64); 1887 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1888 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1889 1890 T.setArch(Triple::csky); 1891 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch()); 1892 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1893 1894 T.setArch(Triple::loongarch32); 1895 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1896 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1897 1898 T.setArch(Triple::loongarch64); 1899 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1900 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1901 1902 T.setArch(Triple::thumbeb); 1903 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); 1904 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1905 1906 T.setArch(Triple::thumb); 1907 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch()); 1908 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1909 1910 T.setArch(Triple::aarch64); 1911 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1912 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1913 1914 T.setArch(Triple::aarch64_be); 1915 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1916 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1917 1918 T.setArch(Triple::renderscript32); 1919 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1920 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1921 1922 T.setArch(Triple::renderscript64); 1923 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1924 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1925 1926 T.setArch(Triple::armeb); 1927 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1928 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1929 1930 T.setArch(Triple::arm); 1931 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1932 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1933 1934 T.setArch(Triple::systemz); 1935 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1936 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch()); 1937 1938 T.setArch(Triple::xcore); 1939 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch()); 1940 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1941 1942 T.setArch(Triple::dxil); 1943 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch()); 1944 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1945 1946 T.setArch(Triple::xtensa); 1947 EXPECT_EQ(Triple::xtensa, T.get32BitArchVariant().getArch()); 1948 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1949 } 1950 1951 TEST(TripleTest, EndianArchVariants) { 1952 Triple T; 1953 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1954 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1955 1956 T.setArch(Triple::UnknownArch); 1957 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1958 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1959 1960 T.setArch(Triple::aarch64_be); 1961 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1962 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1963 1964 T.setArch(Triple::aarch64); 1965 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1966 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1967 1968 T.setArch(Triple::armeb); 1969 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 1970 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1971 1972 T.setArch(Triple::arm); 1973 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1974 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 1975 T = Triple("arm"); 1976 EXPECT_TRUE(T.isLittleEndian()); 1977 T = Triple("thumb"); 1978 EXPECT_TRUE(T.isLittleEndian()); 1979 T = Triple("armeb"); 1980 EXPECT_FALSE(T.isLittleEndian()); 1981 T = Triple("thumbeb"); 1982 EXPECT_FALSE(T.isLittleEndian()); 1983 1984 T.setArch(Triple::bpfeb); 1985 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1986 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1987 1988 T.setArch(Triple::bpfel); 1989 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1990 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1991 1992 T.setArch(Triple::mips64); 1993 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1994 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1995 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1996 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1997 1998 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1999 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2000 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2001 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2002 EXPECT_EQ(Triple::MipsSubArch_r6, 2003 T.getLittleEndianArchVariant().getSubArch()); 2004 2005 T.setArch(Triple::mips64el); 2006 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2007 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2008 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2009 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2010 2011 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 2012 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 2013 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2014 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 2015 EXPECT_EQ(Triple::MipsSubArch_r6, 2016 T.getLittleEndianArchVariant().getSubArch()); 2017 2018 T.setArch(Triple::mips); 2019 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2020 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2021 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2022 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2023 2024 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 2025 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2026 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2027 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2028 EXPECT_EQ(Triple::MipsSubArch_r6, 2029 T.getLittleEndianArchVariant().getSubArch()); 2030 2031 T.setArch(Triple::mipsel); 2032 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2033 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 2034 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2035 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 2036 2037 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 2038 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 2039 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 2040 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 2041 EXPECT_EQ(Triple::MipsSubArch_r6, 2042 T.getLittleEndianArchVariant().getSubArch()); 2043 2044 T.setArch(Triple::ppc); 2045 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 2046 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch()); 2047 2048 T.setArch(Triple::ppc64); 2049 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 2050 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 2051 2052 T.setArch(Triple::ppc64le); 2053 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 2054 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 2055 2056 T.setArch(Triple::sparc); 2057 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 2058 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 2059 2060 T.setArch(Triple::sparcel); 2061 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 2062 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 2063 2064 T.setArch(Triple::thumb); 2065 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2066 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 2067 2068 T.setArch(Triple::thumbeb); 2069 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 2070 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2071 2072 T.setArch(Triple::lanai); 2073 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 2074 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 2075 2076 T.setArch(Triple::tcele); 2077 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 2078 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 2079 2080 T.setArch(Triple::tce); 2081 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 2082 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 2083 2084 T.setArch(Triple::csky); 2085 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2086 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch()); 2087 2088 T.setArch(Triple::loongarch32); 2089 EXPECT_TRUE(T.isLittleEndian()); 2090 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2091 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch()); 2092 2093 T.setArch(Triple::loongarch64); 2094 EXPECT_TRUE(T.isLittleEndian()); 2095 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2096 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch()); 2097 2098 T.setArch(Triple::dxil); 2099 EXPECT_TRUE(T.isLittleEndian()); 2100 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 2101 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch()); 2102 } 2103 2104 TEST(TripleTest, XROS) { 2105 Triple T; 2106 VersionTuple Version; 2107 2108 T = Triple("arm64-apple-xros"); 2109 EXPECT_TRUE(T.isXROS()); 2110 EXPECT_TRUE(T.isOSDarwin()); 2111 EXPECT_FALSE(T.isiOS()); 2112 EXPECT_FALSE(T.isMacOSX()); 2113 EXPECT_FALSE(T.isSimulatorEnvironment()); 2114 EXPECT_EQ(T.getOSName(), "xros"); 2115 Version = T.getOSVersion(); 2116 EXPECT_EQ(VersionTuple(0), Version); 2117 2118 T = Triple("arm64-apple-visionos1.2"); 2119 EXPECT_TRUE(T.isXROS()); 2120 EXPECT_TRUE(T.isOSDarwin()); 2121 EXPECT_FALSE(T.isiOS()); 2122 EXPECT_FALSE(T.isMacOSX()); 2123 EXPECT_FALSE(T.isSimulatorEnvironment()); 2124 EXPECT_EQ(T.getOSName(), "visionos1.2"); 2125 Version = T.getOSVersion(); 2126 EXPECT_EQ(VersionTuple(1, 2), Version); 2127 2128 T = Triple("arm64-apple-xros1-simulator"); 2129 EXPECT_TRUE(T.isXROS()); 2130 EXPECT_TRUE(T.isOSDarwin()); 2131 EXPECT_FALSE(T.isiOS()); 2132 EXPECT_FALSE(T.isMacOSX()); 2133 EXPECT_TRUE(T.isSimulatorEnvironment()); 2134 Version = T.getOSVersion(); 2135 EXPECT_EQ(VersionTuple(1), Version); 2136 Version = T.getiOSVersion(); 2137 EXPECT_EQ(VersionTuple(17), Version); 2138 } 2139 2140 TEST(TripleTest, getOSVersion) { 2141 Triple T; 2142 VersionTuple Version; 2143 2144 T = Triple("i386-apple-darwin9"); 2145 EXPECT_TRUE(T.isMacOSX()); 2146 EXPECT_FALSE(T.isiOS()); 2147 EXPECT_FALSE(T.isArch16Bit()); 2148 EXPECT_TRUE(T.isArch32Bit()); 2149 EXPECT_FALSE(T.isArch64Bit()); 2150 T.getMacOSXVersion(Version); 2151 EXPECT_EQ(VersionTuple(10, 5), Version); 2152 Version = T.getiOSVersion(); 2153 EXPECT_EQ(VersionTuple(5), Version); 2154 2155 T = Triple("x86_64-apple-darwin9"); 2156 EXPECT_TRUE(T.isMacOSX()); 2157 EXPECT_FALSE(T.isiOS()); 2158 EXPECT_FALSE(T.isArch16Bit()); 2159 EXPECT_FALSE(T.isArch32Bit()); 2160 EXPECT_TRUE(T.isArch64Bit()); 2161 T.getMacOSXVersion(Version); 2162 EXPECT_EQ(VersionTuple(10, 5), Version); 2163 Version = T.getiOSVersion(); 2164 EXPECT_EQ(VersionTuple(5), Version); 2165 2166 T = Triple("x86_64-apple-macosx"); 2167 EXPECT_TRUE(T.isMacOSX()); 2168 EXPECT_FALSE(T.isiOS()); 2169 EXPECT_FALSE(T.isArch16Bit()); 2170 EXPECT_FALSE(T.isArch32Bit()); 2171 EXPECT_TRUE(T.isArch64Bit()); 2172 T.getMacOSXVersion(Version); 2173 EXPECT_EQ(VersionTuple(10, 4), Version); 2174 Version = T.getiOSVersion(); 2175 EXPECT_EQ(VersionTuple(5), Version); 2176 2177 T = Triple("x86_64-apple-macosx10.7"); 2178 EXPECT_TRUE(T.isMacOSX()); 2179 EXPECT_FALSE(T.isiOS()); 2180 EXPECT_FALSE(T.isArch16Bit()); 2181 EXPECT_FALSE(T.isArch32Bit()); 2182 EXPECT_TRUE(T.isArch64Bit()); 2183 T.getMacOSXVersion(Version); 2184 EXPECT_EQ(VersionTuple(10, 7), Version); 2185 Version = T.getiOSVersion(); 2186 EXPECT_EQ(VersionTuple(5), Version); 2187 2188 T = Triple("x86_64-apple-macos11.0"); 2189 EXPECT_TRUE(T.isMacOSX()); 2190 EXPECT_FALSE(T.isiOS()); 2191 EXPECT_FALSE(T.isArch16Bit()); 2192 EXPECT_FALSE(T.isArch32Bit()); 2193 EXPECT_TRUE(T.isArch64Bit()); 2194 T.getMacOSXVersion(Version); 2195 EXPECT_EQ(VersionTuple(11, 0), Version); 2196 2197 T = Triple("arm64-apple-macosx11.5.8"); 2198 EXPECT_TRUE(T.isMacOSX()); 2199 EXPECT_FALSE(T.isiOS()); 2200 EXPECT_FALSE(T.isArch16Bit()); 2201 EXPECT_FALSE(T.isArch32Bit()); 2202 EXPECT_TRUE(T.isArch64Bit()); 2203 T.getMacOSXVersion(Version); 2204 EXPECT_EQ(VersionTuple(11, 5, 8), Version); 2205 2206 // 10.16 forms a valid triple, even though it's not 2207 // a version of a macOS. 2208 T = Triple("x86_64-apple-macos10.16"); 2209 EXPECT_TRUE(T.isMacOSX()); 2210 T.getMacOSXVersion(Version); 2211 EXPECT_EQ(VersionTuple(10, 16), Version); 2212 2213 T = Triple("x86_64-apple-darwin20"); 2214 EXPECT_TRUE(T.isMacOSX()); 2215 T.getMacOSXVersion(Version); 2216 EXPECT_EQ(VersionTuple(11), Version); 2217 2218 // For darwin triples on macOS 11, only compare the major version. 2219 T = Triple("x86_64-apple-darwin20.2"); 2220 EXPECT_TRUE(T.isMacOSX()); 2221 T.getMacOSXVersion(Version); 2222 EXPECT_EQ(VersionTuple(11), Version); 2223 2224 T = Triple("armv7-apple-ios"); 2225 EXPECT_FALSE(T.isMacOSX()); 2226 EXPECT_TRUE(T.isiOS()); 2227 EXPECT_FALSE(T.isArch16Bit()); 2228 EXPECT_TRUE(T.isArch32Bit()); 2229 EXPECT_FALSE(T.isArch64Bit()); 2230 T.getMacOSXVersion(Version); 2231 EXPECT_EQ(VersionTuple(10, 4), Version); 2232 Version = T.getiOSVersion(); 2233 EXPECT_EQ(VersionTuple(5), Version); 2234 2235 T = Triple("armv7-apple-ios7.0"); 2236 EXPECT_FALSE(T.isMacOSX()); 2237 EXPECT_TRUE(T.isiOS()); 2238 EXPECT_FALSE(T.isArch16Bit()); 2239 EXPECT_TRUE(T.isArch32Bit()); 2240 EXPECT_FALSE(T.isArch64Bit()); 2241 T.getMacOSXVersion(Version); 2242 EXPECT_EQ(VersionTuple(10, 4), Version); 2243 Version = T.getiOSVersion(); 2244 EXPECT_EQ(VersionTuple(7, 0), Version); 2245 EXPECT_FALSE(T.isSimulatorEnvironment()); 2246 2247 T = Triple("x86_64-apple-ios10.3-simulator"); 2248 EXPECT_TRUE(T.isiOS()); 2249 Version = T.getiOSVersion(); 2250 EXPECT_EQ(VersionTuple(10, 3), Version); 2251 EXPECT_TRUE(T.isSimulatorEnvironment()); 2252 EXPECT_FALSE(T.isMacCatalystEnvironment()); 2253 2254 T = Triple("x86_64-apple-ios13.0-macabi"); 2255 EXPECT_TRUE(T.isiOS()); 2256 Version = T.getiOSVersion(); 2257 EXPECT_EQ(VersionTuple(13, 0), Version); 2258 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI); 2259 EXPECT_TRUE(T.isMacCatalystEnvironment()); 2260 EXPECT_FALSE(T.isSimulatorEnvironment()); 2261 2262 T = Triple("x86_64-apple-driverkit20.1.0"); 2263 EXPECT_TRUE(T.isDriverKit()); 2264 EXPECT_TRUE(T.isOSDarwin()); 2265 EXPECT_FALSE(T.isMacOSX()); 2266 EXPECT_FALSE(T.isiOS()); 2267 Version = T.getDriverKitVersion(); 2268 EXPECT_EQ(VersionTuple(20, 1), Version); 2269 2270 T = Triple("x86_64-apple-driverkit20"); 2271 Version = T.getDriverKitVersion(); 2272 EXPECT_EQ(VersionTuple(20, 0), Version); 2273 2274 // DriverKit version should default to 19.0. 2275 T = Triple("x86_64-apple-driverkit"); 2276 Version = T.getDriverKitVersion(); 2277 EXPECT_EQ(VersionTuple(19, 0), Version); 2278 2279 T = Triple("dxil-unknown-shadermodel6.6-pixel"); 2280 EXPECT_EQ(Triple::dxil, T.getArch()); 2281 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 2282 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 2283 Version = T.getOSVersion(); 2284 EXPECT_EQ(VersionTuple(6, 6), Version); 2285 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 2286 2287 T = Triple("dxil-unknown-shadermodel6.0-pixel"); 2288 EXPECT_EQ(Triple::dxil, T.getArch()); 2289 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 2290 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 2291 Version = T.getOSVersion(); 2292 EXPECT_EQ(VersionTuple(6, 0), Version); 2293 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 2294 } 2295 2296 TEST(TripleTest, getEnvironmentVersion) { 2297 Triple T; 2298 VersionTuple Version; 2299 2300 T = Triple("arm-unknown-linux-android16"); 2301 EXPECT_TRUE(T.isAndroid()); 2302 Version = T.getEnvironmentVersion(); 2303 EXPECT_EQ(VersionTuple(16), Version); 2304 EXPECT_EQ(Triple::Android, T.getEnvironment()); 2305 2306 T = Triple("aarch64-unknown-linux-android21"); 2307 EXPECT_TRUE(T.isAndroid()); 2308 Version = T.getEnvironmentVersion(); 2309 EXPECT_EQ(VersionTuple(21), Version); 2310 EXPECT_EQ(Triple::Android, T.getEnvironment()); 2311 } 2312 2313 TEST(TripleTest, isMacOSVersionLT) { 2314 Triple T = Triple("x86_64-apple-macos11"); 2315 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 2316 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 2317 2318 T = Triple("x86_64-apple-darwin20"); 2319 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 2320 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0)); 2321 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 2322 } 2323 2324 TEST(TripleTest, CanonicalizeOSVersion) { 2325 EXPECT_EQ(VersionTuple(10, 15, 4), 2326 Triple::getCanonicalVersionForOS(Triple::MacOSX, 2327 VersionTuple(10, 15, 4))); 2328 EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS( 2329 Triple::MacOSX, VersionTuple(10, 16))); 2330 EXPECT_EQ(VersionTuple(20), 2331 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20))); 2332 } 2333 2334 TEST(TripleTest, FileFormat) { 2335 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 2336 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 2337 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 2338 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 2339 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 2340 2341 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 2342 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 2343 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 2344 EXPECT_EQ(Triple::MachO, Triple("powerpc-apple-macosx").getObjectFormat()); 2345 2346 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 2347 2348 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 2349 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 2350 2351 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat()); 2352 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat()); 2353 2354 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat()); 2355 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat()); 2356 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat()); 2357 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat()); 2358 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat()); 2359 2360 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); 2361 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); 2362 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat()); 2363 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat()); 2364 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat()); 2365 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat()); 2366 2367 EXPECT_EQ(Triple::Wasm, 2368 Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); 2369 EXPECT_EQ(Triple::Wasm, 2370 Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); 2371 EXPECT_EQ(Triple::Wasm, 2372 Triple("wasm32-wasi-wasm").getObjectFormat()); 2373 EXPECT_EQ(Triple::Wasm, 2374 Triple("wasm64-wasi-wasm").getObjectFormat()); 2375 EXPECT_EQ(Triple::Wasm, 2376 Triple("wasm32-unknown-wasi-wasm").getObjectFormat()); 2377 EXPECT_EQ(Triple::Wasm, 2378 Triple("wasm64-unknown-wasi-wasm").getObjectFormat()); 2379 2380 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat()); 2381 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat()); 2382 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat()); 2383 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat()); 2384 2385 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat()); 2386 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat()); 2387 2388 EXPECT_EQ(Triple::SPIRV, Triple("spirv-unknown-unknown").getObjectFormat()); 2389 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat()); 2390 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat()); 2391 2392 EXPECT_EQ(Triple::ELF, 2393 Triple("loongarch32-unknown-unknown").getObjectFormat()); 2394 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat()); 2395 2396 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 2397 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 2398 2399 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 2400 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 2401 2402 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 2403 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 2404 2405 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 2406 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 2407 2408 EXPECT_EQ(Triple::DXContainer, 2409 Triple("dxil-unknown-shadermodel").getObjectFormat()); 2410 2411 Triple T = Triple(""); 2412 T.setObjectFormat(Triple::ELF); 2413 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 2414 EXPECT_EQ("elf", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2415 2416 T.setObjectFormat(Triple::MachO); 2417 EXPECT_EQ(Triple::MachO, T.getObjectFormat()); 2418 EXPECT_EQ("macho", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2419 2420 T.setObjectFormat(Triple::XCOFF); 2421 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat()); 2422 EXPECT_EQ("xcoff", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2423 2424 T.setObjectFormat(Triple::GOFF); 2425 EXPECT_EQ(Triple::GOFF, T.getObjectFormat()); 2426 EXPECT_EQ("goff", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2427 2428 T.setObjectFormat(Triple::SPIRV); 2429 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat()); 2430 EXPECT_EQ("spirv", Triple::getObjectFormatTypeName(T.getObjectFormat())); 2431 2432 EXPECT_EQ(Triple::ELF, Triple("amdgcn-apple-macosx").getObjectFormat()); 2433 EXPECT_EQ(Triple::ELF, Triple("r600-apple-macosx").getObjectFormat()); 2434 EXPECT_EQ(Triple::SPIRV, Triple("spirv-apple-macosx").getObjectFormat()); 2435 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-apple-macosx").getObjectFormat()); 2436 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-apple-macosx").getObjectFormat()); 2437 EXPECT_EQ(Triple::DXContainer, Triple("dxil-apple-macosx").getObjectFormat()); 2438 } 2439 2440 TEST(TripleTest, NormalizeWindows) { 2441 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 2442 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32")); 2443 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 2444 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32")); 2445 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 2446 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64")); 2447 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 2448 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin")); 2449 2450 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 2451 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32")); 2452 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 2453 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32")); 2454 EXPECT_EQ("x86_64-pc-windows-gnu", 2455 Triple::normalize("x86_64-pc-mingw32-w64")); 2456 EXPECT_EQ("x86_64-unknown-windows-gnu", 2457 Triple::normalize("x86_64-mingw32-w64")); 2458 2459 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 2460 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf")); 2461 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 2462 EXPECT_EQ("i686-unknown-windows-macho", 2463 Triple::normalize("i686-win32-macho")); 2464 2465 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 2466 EXPECT_EQ("x86_64-unknown-windows-elf", 2467 Triple::normalize("x86_64-win32-elf")); 2468 EXPECT_EQ("x86_64-pc-windows-macho", 2469 Triple::normalize("x86_64-pc-win32-macho")); 2470 EXPECT_EQ("x86_64-unknown-windows-macho", 2471 Triple::normalize("x86_64-win32-macho")); 2472 2473 EXPECT_EQ("i686-pc-windows-cygnus", 2474 Triple::normalize("i686-pc-windows-cygnus")); 2475 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 2476 EXPECT_EQ("i686-pc-windows-itanium", 2477 Triple::normalize("i686-pc-windows-itanium")); 2478 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 2479 2480 EXPECT_EQ("i686-pc-windows-elf", 2481 Triple::normalize("i686-pc-windows-elf-elf")); 2482 2483 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment()); 2484 2485 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvccoff")).isOSBinFormatCOFF()); 2486 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvc")).isOSBinFormatCOFF()); 2487 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-gnu")).isOSBinFormatCOFF()); 2488 } 2489 2490 TEST(TripleTest, NormalizeAndroid) { 2491 EXPECT_EQ("arm-unknown-linux-android16", 2492 Triple::normalize("arm-linux-androideabi16")); 2493 EXPECT_EQ("armv7a-unknown-linux-android", 2494 Triple::normalize("armv7a-linux-androideabi")); 2495 EXPECT_EQ("aarch64-unknown-linux-android21", 2496 Triple::normalize("aarch64-linux-android21")); 2497 } 2498 2499 TEST(TripleTest, NormalizeARM) { 2500 EXPECT_EQ("armv6-unknown-netbsd-eabi", 2501 Triple::normalize("armv6-netbsd-eabi")); 2502 EXPECT_EQ("armv7-unknown-netbsd-eabi", 2503 Triple::normalize("armv7-netbsd-eabi")); 2504 EXPECT_EQ("armv6eb-unknown-netbsd-eabi", 2505 Triple::normalize("armv6eb-netbsd-eabi")); 2506 EXPECT_EQ("armv7eb-unknown-netbsd-eabi", 2507 Triple::normalize("armv7eb-netbsd-eabi")); 2508 EXPECT_EQ("armv6-unknown-netbsd-eabihf", 2509 Triple::normalize("armv6-netbsd-eabihf")); 2510 EXPECT_EQ("armv7-unknown-netbsd-eabihf", 2511 Triple::normalize("armv7-netbsd-eabihf")); 2512 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf", 2513 Triple::normalize("armv6eb-netbsd-eabihf")); 2514 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf", 2515 Triple::normalize("armv7eb-netbsd-eabihf")); 2516 2517 EXPECT_EQ("armv7-suse-linux-gnueabihf", 2518 Triple::normalize("armv7-suse-linux-gnueabi")); 2519 2520 Triple T; 2521 T = Triple("armv6--netbsd-eabi"); 2522 EXPECT_EQ(Triple::arm, T.getArch()); 2523 T = Triple("armv6eb--netbsd-eabi"); 2524 EXPECT_EQ(Triple::armeb, T.getArch()); 2525 T = Triple("armv7-suse-linux-gnueabihf"); 2526 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 2527 } 2528 2529 TEST(TripleTest, ParseARMArch) { 2530 // ARM 2531 { 2532 Triple T = Triple("arm"); 2533 EXPECT_EQ(Triple::arm, T.getArch()); 2534 } 2535 { 2536 Triple T = Triple("armeb"); 2537 EXPECT_EQ(Triple::armeb, T.getArch()); 2538 } 2539 // THUMB 2540 { 2541 Triple T = Triple("thumb"); 2542 EXPECT_EQ(Triple::thumb, T.getArch()); 2543 } 2544 { 2545 Triple T = Triple("thumbeb"); 2546 EXPECT_EQ(Triple::thumbeb, T.getArch()); 2547 } 2548 // AARCH64 2549 { 2550 Triple T = Triple("arm64"); 2551 EXPECT_EQ(Triple::aarch64, T.getArch()); 2552 } 2553 { 2554 Triple T = Triple("arm64_32"); 2555 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 2556 } 2557 { 2558 Triple T = Triple("aarch64"); 2559 EXPECT_EQ(Triple::aarch64, T.getArch()); 2560 } 2561 { 2562 Triple T = Triple("aarch64_be"); 2563 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 2564 } 2565 { 2566 Triple T = Triple("arm64e"); 2567 EXPECT_EQ(Triple::aarch64, T.getArch()); 2568 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch()); 2569 } 2570 { 2571 Triple T = Triple("arm64ec"); 2572 EXPECT_EQ(Triple::aarch64, T.getArch()); 2573 EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch()); 2574 } 2575 { 2576 Triple T; 2577 T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec); 2578 EXPECT_EQ("arm64ec", T.getArchName()); 2579 } 2580 } 2581 2582 TEST(TripleTest, isArmT32) { 2583 // Not isArmT32 2584 { 2585 Triple T = Triple("thumbv6m"); 2586 EXPECT_FALSE(T.isArmT32()); 2587 } 2588 { 2589 Triple T = Triple("armv8m.base"); 2590 EXPECT_FALSE(T.isArmT32()); 2591 } 2592 { 2593 Triple T = Triple("armv7s"); 2594 EXPECT_FALSE(T.isArmT32()); 2595 } 2596 { 2597 Triple T = Triple("armv7k"); 2598 EXPECT_FALSE(T.isArmT32()); 2599 } 2600 { 2601 Triple T = Triple("armv7ve"); 2602 EXPECT_FALSE(T.isArmT32()); 2603 } 2604 { 2605 Triple T = Triple("armv6"); 2606 EXPECT_FALSE(T.isArmT32()); 2607 } 2608 { 2609 Triple T = Triple("armv6m"); 2610 EXPECT_FALSE(T.isArmT32()); 2611 } 2612 { 2613 Triple T = Triple("armv6k"); 2614 EXPECT_FALSE(T.isArmT32()); 2615 } 2616 { 2617 Triple T = Triple("armv6t2"); 2618 EXPECT_FALSE(T.isArmT32()); 2619 } 2620 { 2621 Triple T = Triple("armv5"); 2622 EXPECT_FALSE(T.isArmT32()); 2623 } 2624 { 2625 Triple T = Triple("armv5te"); 2626 EXPECT_FALSE(T.isArmT32()); 2627 } 2628 { 2629 Triple T = Triple("armv4t"); 2630 EXPECT_FALSE(T.isArmT32()); 2631 } 2632 2633 // isArmT32 2634 { 2635 Triple T = Triple("arm"); 2636 EXPECT_TRUE(T.isArmT32()); 2637 } 2638 { 2639 Triple T = Triple("armv7m"); 2640 EXPECT_TRUE(T.isArmT32()); 2641 } 2642 { 2643 Triple T = Triple("armv7em"); 2644 EXPECT_TRUE(T.isArmT32()); 2645 } 2646 { 2647 Triple T = Triple("armv8m.main"); 2648 EXPECT_TRUE(T.isArmT32()); 2649 } 2650 { 2651 Triple T = Triple("armv8.1m.main"); 2652 EXPECT_TRUE(T.isArmT32()); 2653 } 2654 } 2655 2656 TEST(TripleTest, isArmMClass) { 2657 // not M-class 2658 { 2659 Triple T = Triple("armv7s"); 2660 EXPECT_FALSE(T.isArmMClass()); 2661 } 2662 { 2663 Triple T = Triple("armv7k"); 2664 EXPECT_FALSE(T.isArmMClass()); 2665 } 2666 { 2667 Triple T = Triple("armv7ve"); 2668 EXPECT_FALSE(T.isArmMClass()); 2669 } 2670 { 2671 Triple T = Triple("armv6"); 2672 EXPECT_FALSE(T.isArmMClass()); 2673 } 2674 { 2675 Triple T = Triple("armv6k"); 2676 EXPECT_FALSE(T.isArmMClass()); 2677 } 2678 { 2679 Triple T = Triple("armv6t2"); 2680 EXPECT_FALSE(T.isArmMClass()); 2681 } 2682 { 2683 Triple T = Triple("armv5"); 2684 EXPECT_FALSE(T.isArmMClass()); 2685 } 2686 { 2687 Triple T = Triple("armv5te"); 2688 EXPECT_FALSE(T.isArmMClass()); 2689 } 2690 { 2691 Triple T = Triple("armv4t"); 2692 EXPECT_FALSE(T.isArmMClass()); 2693 } 2694 { 2695 Triple T = Triple("arm"); 2696 EXPECT_FALSE(T.isArmMClass()); 2697 } 2698 2699 // is M-class 2700 { 2701 Triple T = Triple("armv6m"); 2702 EXPECT_TRUE(T.isArmMClass()); 2703 } 2704 { 2705 Triple T = Triple("armv7m"); 2706 EXPECT_TRUE(T.isArmMClass()); 2707 } 2708 { 2709 Triple T = Triple("armv7em"); 2710 EXPECT_TRUE(T.isArmMClass()); 2711 } 2712 { 2713 Triple T = Triple("armv8m.base"); 2714 EXPECT_TRUE(T.isArmMClass()); 2715 } 2716 { 2717 Triple T = Triple("armv8m.main"); 2718 EXPECT_TRUE(T.isArmMClass()); 2719 } 2720 { 2721 Triple T = Triple("armv8.1m.main"); 2722 EXPECT_TRUE(T.isArmMClass()); 2723 } 2724 } 2725 2726 TEST(TripleTest, DXILNormaizeWithVersion) { 2727 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0", 2728 Triple::normalize("dxilv1.0--shadermodel6.0")); 2729 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0", 2730 Triple::normalize("dxil--shadermodel6.0")); 2731 EXPECT_EQ("dxilv1.1-unknown-shadermodel6.1-library", 2732 Triple::normalize("dxil-shadermodel6.1-unknown-library")); 2733 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown", 2734 Triple::normalize("dxil-unknown-shadermodel6.x-unknown")); 2735 EXPECT_EQ("dxilv1.8-unknown-shadermodel6.x-unknown", 2736 Triple::normalize("dxil-unknown-shadermodel6.x-unknown")); 2737 EXPECT_EQ("dxil-unknown-unknown-unknown", Triple::normalize("dxil---")); 2738 EXPECT_EQ("dxilv1.0-pc-shadermodel5.0-compute", 2739 Triple::normalize("dxil-shadermodel5.0-pc-compute")); 2740 } 2741 2742 TEST(TripleTest, isCompatibleWith) { 2743 struct { 2744 const char *A; 2745 const char *B; 2746 bool Result; 2747 } Cases[] = { 2748 {"armv7-linux-gnueabihf", "thumbv7-linux-gnueabihf", true}, 2749 {"armv4-none-unknown-eabi", "thumbv6-unknown-linux-gnueabihf", false}, 2750 {"x86_64-apple-macosx10.9.0", "x86_64-apple-macosx10.10.0", true}, 2751 {"x86_64-apple-macosx10.9.0", "i386-apple-macosx10.9.0", false}, 2752 {"x86_64-apple-macosx10.9.0", "x86_64h-apple-macosx10.9.0", true}, 2753 {"x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", true}, 2754 {"x86_64-unknown-linux-gnu", "i386-unknown-linux-gnu", false}, 2755 {"x86_64-unknown-linux-gnu", "x86_64h-unknown-linux-gnu", true}, 2756 {"x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", false}, 2757 {"x86_64-pc-windows-msvc", "x86_64-pc-windows-msvc-elf", false}, 2758 {"i686-w64-windows-gnu", "i386-w64-windows-gnu", true}, 2759 {"x86_64-w64-windows-gnu", "x86_64-pc-windows-gnu", true}, 2760 {"armv7-w64-windows-gnu", "thumbv7-pc-windows-gnu", true}, 2761 }; 2762 2763 auto DoTest = [](const char *A, const char *B, 2764 bool Result) -> testing::AssertionResult { 2765 if (Triple(A).isCompatibleWith(Triple(B)) != Result) { 2766 return testing::AssertionFailure() 2767 << llvm::formatv("Triple {0} and {1} were expected to be {2}", A, 2768 B, Result ? "compatible" : "incompatible"); 2769 } 2770 return testing::AssertionSuccess(); 2771 }; 2772 for (const auto &C : Cases) { 2773 EXPECT_TRUE(DoTest(C.A, C.B, C.Result)); 2774 // Test that the comparison is commutative. 2775 EXPECT_TRUE(DoTest(C.B, C.A, C.Result)); 2776 } 2777 } 2778 } // end anonymous namespace 2779