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