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