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