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-contiki-unknown"); 91 EXPECT_EQ(Triple::x86, T.getArch()); 92 EXPECT_EQ(Triple::PC, T.getVendor()); 93 EXPECT_EQ(Triple::Contiki, T.getOS()); 94 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 95 96 T = Triple("i386-pc-hurd-gnu"); 97 EXPECT_EQ(Triple::x86, T.getArch()); 98 EXPECT_EQ(Triple::PC, T.getVendor()); 99 EXPECT_EQ(Triple::Hurd, T.getOS()); 100 EXPECT_EQ(Triple::GNU, T.getEnvironment()); 101 102 T = Triple("x86_64-pc-linux-gnu"); 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::GNU, T.getEnvironment()); 107 108 T = Triple("x86_64-pc-linux-musl"); 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::Musl, T.getEnvironment()); 113 114 T = Triple("x86_64-pc-linux-muslx32"); 115 EXPECT_EQ(Triple::x86_64, T.getArch()); 116 EXPECT_EQ(Triple::PC, T.getVendor()); 117 EXPECT_EQ(Triple::Linux, T.getOS()); 118 EXPECT_EQ(Triple::MuslX32, T.getEnvironment()); 119 120 T = Triple("arm-unknown-linux-android16"); 121 EXPECT_EQ(Triple::arm, 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 T = Triple("aarch64-unknown-linux-android21"); 127 EXPECT_EQ(Triple::aarch64, T.getArch()); 128 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 129 EXPECT_EQ(Triple::Linux, T.getOS()); 130 EXPECT_EQ(Triple::Android, T.getEnvironment()); 131 132 // PS4 has two spellings for the vendor. 133 T = Triple("x86_64-scei-ps4"); 134 EXPECT_EQ(Triple::x86_64, T.getArch()); 135 EXPECT_EQ(Triple::SCEI, T.getVendor()); 136 EXPECT_EQ(Triple::PS4, T.getOS()); 137 138 T = Triple("x86_64-sie-ps4"); 139 EXPECT_EQ(Triple::x86_64, T.getArch()); 140 EXPECT_EQ(Triple::SCEI, T.getVendor()); 141 EXPECT_EQ(Triple::PS4, T.getOS()); 142 143 T = Triple("x86_64-sie-ps5"); 144 EXPECT_EQ(Triple::x86_64, T.getArch()); 145 EXPECT_EQ(Triple::SCEI, T.getVendor()); 146 EXPECT_EQ(Triple::PS5, T.getOS()); 147 148 T = Triple("powerpc-ibm-aix"); 149 EXPECT_EQ(Triple::ppc, 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("powerpc64-ibm-aix"); 155 EXPECT_EQ(Triple::ppc64, T.getArch()); 156 EXPECT_EQ(Triple::IBM, T.getVendor()); 157 EXPECT_EQ(Triple::AIX, T.getOS()); 158 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 159 160 T = Triple("powerpc-dunno-notsure"); 161 EXPECT_EQ(Triple::ppc, T.getArch()); 162 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 163 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 164 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 165 166 T = Triple("powerpcspe-unknown-freebsd"); 167 EXPECT_EQ(Triple::ppc, T.getArch()); 168 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch()); 169 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 170 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 171 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 172 173 T = Triple("s390x-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("systemz-ibm-zos"); 180 EXPECT_EQ(Triple::systemz, T.getArch()); 181 EXPECT_EQ(Triple::IBM, T.getVendor()); 182 EXPECT_EQ(Triple::ZOS, T.getOS()); 183 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 184 185 T = Triple("arm-none-none-eabi"); 186 EXPECT_EQ(Triple::arm, T.getArch()); 187 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 188 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 189 EXPECT_EQ(Triple::EABI, T.getEnvironment()); 190 191 T = Triple("arm-none-linux-musleabi"); 192 EXPECT_EQ(Triple::arm, T.getArch()); 193 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 194 EXPECT_EQ(Triple::Linux, T.getOS()); 195 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment()); 196 197 T = Triple("armv6hl-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("armv7hl-none-linux-gnueabi"); 204 EXPECT_EQ(Triple::arm, T.getArch()); 205 EXPECT_EQ(Triple::Linux, T.getOS()); 206 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 207 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment()); 208 209 T = Triple("amdil-unknown-unknown"); 210 EXPECT_EQ(Triple::amdil, T.getArch()); 211 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 212 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 213 214 T = Triple("amdil64-unknown-unknown"); 215 EXPECT_EQ(Triple::amdil64, T.getArch()); 216 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 217 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 218 219 T = Triple("hsail-unknown-unknown"); 220 EXPECT_EQ(Triple::hsail, T.getArch()); 221 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 222 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 223 224 T = Triple("hsail64-unknown-unknown"); 225 EXPECT_EQ(Triple::hsail64, T.getArch()); 226 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 227 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 228 229 T = Triple("sparcel-unknown-unknown"); 230 EXPECT_EQ(Triple::sparcel, T.getArch()); 231 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 232 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 233 234 T = Triple("spir-unknown-unknown"); 235 EXPECT_EQ(Triple::spir, T.getArch()); 236 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 237 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 238 239 T = Triple("spir64-unknown-unknown"); 240 EXPECT_EQ(Triple::spir64, T.getArch()); 241 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 242 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 243 244 T = Triple("spirv32-unknown-unknown"); 245 EXPECT_EQ(Triple::spirv32, T.getArch()); 246 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 247 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 248 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 249 250 T = Triple("spirv32v1.0-unknown-unknown"); 251 EXPECT_EQ(Triple::spirv32, T.getArch()); 252 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 253 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 254 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 255 256 T = Triple("spirv32v1.1-unknown-unknown"); 257 EXPECT_EQ(Triple::spirv32, T.getArch()); 258 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 259 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 260 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 261 262 T = Triple("spirv32v1.2-unknown-unknown"); 263 EXPECT_EQ(Triple::spirv32, T.getArch()); 264 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 265 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 266 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 267 268 T = Triple("spirv32v1.3-unknown-unknown"); 269 EXPECT_EQ(Triple::spirv32, T.getArch()); 270 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 271 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 272 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 273 274 T = Triple("spirv32v1.4-unknown-unknown"); 275 EXPECT_EQ(Triple::spirv32, T.getArch()); 276 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 277 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 278 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 279 280 T = Triple("spirv32v1.5-unknown-unknown"); 281 EXPECT_EQ(Triple::spirv32, T.getArch()); 282 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 283 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 284 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 285 286 T = Triple("spirv64-unknown-unknown"); 287 EXPECT_EQ(Triple::spirv64, T.getArch()); 288 EXPECT_EQ(Triple::NoSubArch, T.getSubArch()); 289 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 290 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 291 292 T = Triple("spirv64v1.0-unknown-unknown"); 293 EXPECT_EQ(Triple::spirv64, T.getArch()); 294 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch()); 295 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 296 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 297 298 T = Triple("spirv64v1.1-unknown-unknown"); 299 EXPECT_EQ(Triple::spirv64, T.getArch()); 300 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch()); 301 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 302 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 303 304 T = Triple("spirv64v1.2-unknown-unknown"); 305 EXPECT_EQ(Triple::spirv64, T.getArch()); 306 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch()); 307 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 308 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 309 310 T = Triple("spirv64v1.3-unknown-unknown"); 311 EXPECT_EQ(Triple::spirv64, T.getArch()); 312 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch()); 313 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 314 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 315 316 T = Triple("spirv64v1.4-unknown-unknown"); 317 EXPECT_EQ(Triple::spirv64, T.getArch()); 318 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch()); 319 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 320 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 321 322 T = Triple("spirv64v1.5-unknown-unknown"); 323 EXPECT_EQ(Triple::spirv64, T.getArch()); 324 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch()); 325 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 326 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 327 328 T = Triple("x86_64-unknown-ananas"); 329 EXPECT_EQ(Triple::x86_64, T.getArch()); 330 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 331 EXPECT_EQ(Triple::Ananas, T.getOS()); 332 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 333 334 T = Triple("x86_64-unknown-cloudabi"); 335 EXPECT_EQ(Triple::x86_64, T.getArch()); 336 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 337 EXPECT_EQ(Triple::CloudABI, T.getOS()); 338 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 339 340 T = Triple("x86_64-unknown-fuchsia"); 341 EXPECT_EQ(Triple::x86_64, T.getArch()); 342 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 343 EXPECT_EQ(Triple::Fuchsia, T.getOS()); 344 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 345 346 T = Triple("x86_64-unknown-hermit"); 347 EXPECT_EQ(Triple::x86_64, T.getArch()); 348 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 349 EXPECT_EQ(Triple::HermitCore, 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("huh"); 868 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 869 } 870 871 static std::string Join(StringRef A, StringRef B, StringRef C) { 872 std::string Str = std::string(A); 873 Str += '-'; 874 Str += B; 875 Str += '-'; 876 Str += C; 877 return Str; 878 } 879 880 static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) { 881 std::string Str = std::string(A); 882 Str += '-'; 883 Str += B; 884 Str += '-'; 885 Str += C; 886 Str += '-'; 887 Str += D; 888 return Str; 889 } 890 891 TEST(TripleTest, Normalization) { 892 893 EXPECT_EQ("unknown", Triple::normalize("")); 894 EXPECT_EQ("unknown-unknown", Triple::normalize("-")); 895 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--")); 896 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---")); 897 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown", 898 Triple::normalize("----")); 899 900 EXPECT_EQ("a", Triple::normalize("a")); 901 EXPECT_EQ("a-b", Triple::normalize("a-b")); 902 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c")); 903 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d")); 904 905 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c")); 906 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c")); 907 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386")); 908 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386")); 909 910 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c")); 911 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c")); 912 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc")); 913 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc")); 914 915 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux")); 916 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c")); 917 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c")); 918 919 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386")); 920 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386")); 921 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c")); 922 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-")); 923 924 EXPECT_EQ("i386", Triple::normalize("i386")); 925 EXPECT_EQ("unknown-pc", Triple::normalize("pc")); 926 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux")); 927 928 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux")); 929 930 // Check that normalizing a permutated set of valid components returns a 931 // triple with the unpermuted components. 932 // 933 // We don't check every possible combination. For the set of architectures A, 934 // vendors V, operating systems O, and environments E, that would require |A| 935 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given 936 // slot and make sure it gets normalized to the correct position from every 937 // permutation. This should cover the core logic while being a tractable 938 // number of tests at (|A| + |V| + |O| + |E|) * 4!. 939 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1); 940 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1); 941 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1); 942 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1); 943 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType), 944 Triple::getVendorTypeName(FirstVendorType), 945 Triple::getOSTypeName(FirstOSType), 946 Triple::getEnvironmentTypeName(FirstEnvType)}; 947 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) { 948 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 949 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch)); 950 std::string E = Join(C[0], C[1], C[2]); 951 int I[] = {0, 1, 2}; 952 do { 953 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 954 } while (std::next_permutation(std::begin(I), std::end(I))); 955 std::string F = Join(C[0], C[1], C[2], C[3]); 956 int J[] = {0, 1, 2, 3}; 957 do { 958 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 959 } while (std::next_permutation(std::begin(J), std::end(J))); 960 } 961 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType; 962 ++Vendor) { 963 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 964 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor)); 965 std::string E = Join(C[0], C[1], C[2]); 966 int I[] = {0, 1, 2}; 967 do { 968 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 969 } while (std::next_permutation(std::begin(I), std::end(I))); 970 std::string F = Join(C[0], C[1], C[2], C[3]); 971 int J[] = {0, 1, 2, 3}; 972 do { 973 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 974 } while (std::next_permutation(std::begin(J), std::end(J))); 975 } 976 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) { 977 if (OS == Triple::Win32) 978 continue; 979 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 980 C[2] = Triple::getOSTypeName(Triple::OSType(OS)); 981 std::string E = Join(C[0], C[1], C[2]); 982 int I[] = {0, 1, 2}; 983 do { 984 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]]))); 985 } while (std::next_permutation(std::begin(I), std::end(I))); 986 std::string F = Join(C[0], C[1], C[2], C[3]); 987 int J[] = {0, 1, 2, 3}; 988 do { 989 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 990 } while (std::next_permutation(std::begin(J), std::end(J))); 991 } 992 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) { 993 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]}; 994 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env)); 995 std::string F = Join(C[0], C[1], C[2], C[3]); 996 int J[] = {0, 1, 2, 3}; 997 do { 998 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]]))); 999 } while (std::next_permutation(std::begin(J), std::end(J))); 1000 } 1001 1002 // Various real-world funky triples. The value returned by GCC's config.sub 1003 // is given in the comment. 1004 EXPECT_EQ("i386-unknown-windows-gnu", 1005 Triple::normalize("i386-mingw32")); // i386-pc-mingw32 1006 EXPECT_EQ("x86_64-unknown-linux-gnu", 1007 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu 1008 EXPECT_EQ("i486-unknown-linux-gnu", 1009 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu 1010 EXPECT_EQ("i386-redhat-linux", 1011 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu 1012 EXPECT_EQ("i686-unknown-linux", 1013 Triple::normalize("i686-linux")); // i686-pc-linux-gnu 1014 EXPECT_EQ("arm-none-unknown-eabi", 1015 Triple::normalize("arm-none-eabi")); // arm-none-eabi 1016 EXPECT_EQ("ve-unknown-linux", 1017 Triple::normalize("ve-linux")); // ve-linux 1018 EXPECT_EQ("wasm32-unknown-wasi", 1019 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi 1020 EXPECT_EQ("wasm64-unknown-wasi", 1021 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi 1022 } 1023 1024 TEST(TripleTest, MutateName) { 1025 Triple T; 1026 EXPECT_EQ(Triple::UnknownArch, T.getArch()); 1027 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1028 EXPECT_EQ(Triple::UnknownOS, T.getOS()); 1029 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment()); 1030 1031 T.setArchName("i386"); 1032 EXPECT_EQ(Triple::x86, T.getArch()); 1033 EXPECT_EQ("i386--", T.getTriple()); 1034 1035 T.setVendorName("pc"); 1036 EXPECT_EQ(Triple::x86, T.getArch()); 1037 EXPECT_EQ(Triple::PC, T.getVendor()); 1038 EXPECT_EQ("i386-pc-", T.getTriple()); 1039 1040 T.setOSName("linux"); 1041 EXPECT_EQ(Triple::x86, T.getArch()); 1042 EXPECT_EQ(Triple::PC, T.getVendor()); 1043 EXPECT_EQ(Triple::Linux, T.getOS()); 1044 EXPECT_EQ("i386-pc-linux", T.getTriple()); 1045 1046 T.setEnvironmentName("gnu"); 1047 EXPECT_EQ(Triple::x86, T.getArch()); 1048 EXPECT_EQ(Triple::PC, T.getVendor()); 1049 EXPECT_EQ(Triple::Linux, T.getOS()); 1050 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple()); 1051 1052 T.setOSName("freebsd"); 1053 EXPECT_EQ(Triple::x86, T.getArch()); 1054 EXPECT_EQ(Triple::PC, T.getVendor()); 1055 EXPECT_EQ(Triple::FreeBSD, T.getOS()); 1056 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple()); 1057 1058 T.setOSAndEnvironmentName("darwin"); 1059 EXPECT_EQ(Triple::x86, T.getArch()); 1060 EXPECT_EQ(Triple::PC, T.getVendor()); 1061 EXPECT_EQ(Triple::Darwin, T.getOS()); 1062 EXPECT_EQ("i386-pc-darwin", T.getTriple()); 1063 } 1064 1065 TEST(TripleTest, BitWidthPredicates) { 1066 Triple T; 1067 EXPECT_FALSE(T.isArch16Bit()); 1068 EXPECT_FALSE(T.isArch32Bit()); 1069 EXPECT_FALSE(T.isArch64Bit()); 1070 1071 T.setArch(Triple::arm); 1072 EXPECT_FALSE(T.isArch16Bit()); 1073 EXPECT_TRUE(T.isArch32Bit()); 1074 EXPECT_FALSE(T.isArch64Bit()); 1075 1076 T.setArch(Triple::hexagon); 1077 EXPECT_FALSE(T.isArch16Bit()); 1078 EXPECT_TRUE(T.isArch32Bit()); 1079 EXPECT_FALSE(T.isArch64Bit()); 1080 1081 T.setArch(Triple::mips); 1082 EXPECT_FALSE(T.isArch16Bit()); 1083 EXPECT_TRUE(T.isArch32Bit()); 1084 EXPECT_FALSE(T.isArch64Bit()); 1085 1086 T.setArch(Triple::mips64); 1087 EXPECT_FALSE(T.isArch16Bit()); 1088 EXPECT_FALSE(T.isArch32Bit()); 1089 EXPECT_TRUE(T.isArch64Bit()); 1090 1091 T.setArch(Triple::msp430); 1092 EXPECT_TRUE(T.isArch16Bit()); 1093 EXPECT_FALSE(T.isArch32Bit()); 1094 EXPECT_FALSE(T.isArch64Bit()); 1095 1096 T.setArch(Triple::ppc); 1097 EXPECT_FALSE(T.isArch16Bit()); 1098 EXPECT_TRUE(T.isArch32Bit()); 1099 EXPECT_FALSE(T.isArch64Bit()); 1100 1101 T.setArch(Triple::ppc64); 1102 EXPECT_FALSE(T.isArch16Bit()); 1103 EXPECT_FALSE(T.isArch32Bit()); 1104 EXPECT_TRUE(T.isArch64Bit()); 1105 1106 T.setArch(Triple::x86); 1107 EXPECT_FALSE(T.isArch16Bit()); 1108 EXPECT_TRUE(T.isArch32Bit()); 1109 EXPECT_FALSE(T.isArch64Bit()); 1110 1111 T.setArch(Triple::x86_64); 1112 EXPECT_FALSE(T.isArch16Bit()); 1113 EXPECT_FALSE(T.isArch32Bit()); 1114 EXPECT_TRUE(T.isArch64Bit()); 1115 1116 T.setArch(Triple::amdil); 1117 EXPECT_FALSE(T.isArch16Bit()); 1118 EXPECT_TRUE(T.isArch32Bit()); 1119 EXPECT_FALSE(T.isArch64Bit()); 1120 1121 T.setArch(Triple::amdil64); 1122 EXPECT_FALSE(T.isArch16Bit()); 1123 EXPECT_FALSE(T.isArch32Bit()); 1124 EXPECT_TRUE(T.isArch64Bit()); 1125 1126 T.setArch(Triple::hsail); 1127 EXPECT_FALSE(T.isArch16Bit()); 1128 EXPECT_TRUE(T.isArch32Bit()); 1129 EXPECT_FALSE(T.isArch64Bit()); 1130 1131 T.setArch(Triple::hsail64); 1132 EXPECT_FALSE(T.isArch16Bit()); 1133 EXPECT_FALSE(T.isArch32Bit()); 1134 EXPECT_TRUE(T.isArch64Bit()); 1135 1136 T.setArch(Triple::spir); 1137 EXPECT_FALSE(T.isArch16Bit()); 1138 EXPECT_TRUE(T.isArch32Bit()); 1139 EXPECT_FALSE(T.isArch64Bit()); 1140 1141 T.setArch(Triple::spir64); 1142 EXPECT_FALSE(T.isArch16Bit()); 1143 EXPECT_FALSE(T.isArch32Bit()); 1144 EXPECT_TRUE(T.isArch64Bit()); 1145 1146 T.setArch(Triple::spirv32); 1147 EXPECT_FALSE(T.isArch16Bit()); 1148 EXPECT_TRUE(T.isArch32Bit()); 1149 EXPECT_FALSE(T.isArch64Bit()); 1150 EXPECT_TRUE(T.isSPIRV()); 1151 1152 T.setArch(Triple::spirv64); 1153 EXPECT_FALSE(T.isArch16Bit()); 1154 EXPECT_FALSE(T.isArch32Bit()); 1155 EXPECT_TRUE(T.isArch64Bit()); 1156 EXPECT_TRUE(T.isSPIRV()); 1157 1158 T.setArch(Triple::sparc); 1159 EXPECT_FALSE(T.isArch16Bit()); 1160 EXPECT_TRUE(T.isArch32Bit()); 1161 EXPECT_FALSE(T.isArch64Bit()); 1162 1163 T.setArch(Triple::sparcel); 1164 EXPECT_FALSE(T.isArch16Bit()); 1165 EXPECT_TRUE(T.isArch32Bit()); 1166 EXPECT_FALSE(T.isArch64Bit()); 1167 1168 T.setArch(Triple::sparcv9); 1169 EXPECT_FALSE(T.isArch16Bit()); 1170 EXPECT_FALSE(T.isArch32Bit()); 1171 EXPECT_TRUE(T.isArch64Bit()); 1172 1173 T.setArch(Triple::wasm32); 1174 EXPECT_FALSE(T.isArch16Bit()); 1175 EXPECT_TRUE(T.isArch32Bit()); 1176 EXPECT_FALSE(T.isArch64Bit()); 1177 1178 T.setArch(Triple::wasm64); 1179 EXPECT_FALSE(T.isArch16Bit()); 1180 EXPECT_FALSE(T.isArch32Bit()); 1181 EXPECT_TRUE(T.isArch64Bit()); 1182 1183 T.setArch(Triple::avr); 1184 EXPECT_TRUE(T.isArch16Bit()); 1185 EXPECT_FALSE(T.isArch32Bit()); 1186 EXPECT_FALSE(T.isArch64Bit()); 1187 1188 T.setArch(Triple::lanai); 1189 EXPECT_FALSE(T.isArch16Bit()); 1190 EXPECT_TRUE(T.isArch32Bit()); 1191 EXPECT_FALSE(T.isArch64Bit()); 1192 1193 T.setArch(Triple::riscv32); 1194 EXPECT_FALSE(T.isArch16Bit()); 1195 EXPECT_TRUE(T.isArch32Bit()); 1196 EXPECT_FALSE(T.isArch64Bit()); 1197 EXPECT_TRUE(T.isRISCV()); 1198 1199 T.setArch(Triple::riscv64); 1200 EXPECT_FALSE(T.isArch16Bit()); 1201 EXPECT_FALSE(T.isArch32Bit()); 1202 EXPECT_TRUE(T.isArch64Bit()); 1203 EXPECT_TRUE(T.isRISCV()); 1204 1205 T.setArch(Triple::csky); 1206 EXPECT_FALSE(T.isArch16Bit()); 1207 EXPECT_TRUE(T.isArch32Bit()); 1208 EXPECT_FALSE(T.isArch64Bit()); 1209 EXPECT_TRUE(T.isCSKY()); 1210 1211 T.setArch(Triple::loongarch32); 1212 EXPECT_FALSE(T.isArch16Bit()); 1213 EXPECT_TRUE(T.isArch32Bit()); 1214 EXPECT_FALSE(T.isArch64Bit()); 1215 EXPECT_TRUE(T.isLoongArch()); 1216 1217 T.setArch(Triple::loongarch64); 1218 EXPECT_FALSE(T.isArch16Bit()); 1219 EXPECT_FALSE(T.isArch32Bit()); 1220 EXPECT_TRUE(T.isArch64Bit()); 1221 EXPECT_TRUE(T.isLoongArch()); 1222 1223 T.setArch(Triple::dxil); 1224 EXPECT_FALSE(T.isArch16Bit()); 1225 EXPECT_TRUE(T.isArch32Bit()); 1226 EXPECT_FALSE(T.isArch64Bit()); 1227 EXPECT_TRUE(T.isDXIL()); 1228 } 1229 1230 TEST(TripleTest, BitWidthArchVariants) { 1231 Triple T; 1232 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1233 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1234 1235 T.setArch(Triple::UnknownArch); 1236 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1237 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1238 1239 T.setArch(Triple::mips); 1240 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1241 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1242 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1243 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1244 1245 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1246 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1247 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1248 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1249 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1250 1251 T.setArch(Triple::mipsel); 1252 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1253 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1254 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1255 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1256 1257 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1258 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1259 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1260 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1261 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1262 1263 T.setArch(Triple::ppc); 1264 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1265 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1266 1267 T.setArch(Triple::nvptx); 1268 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1269 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1270 1271 T.setArch(Triple::sparc); 1272 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1273 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1274 1275 T.setArch(Triple::x86); 1276 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1277 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1278 1279 T.setArch(Triple::mips64); 1280 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1281 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1282 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1283 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1284 1285 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1286 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch()); 1287 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1288 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch()); 1289 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1290 1291 T.setArch(Triple::mips64el); 1292 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1293 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch()); 1294 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1295 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch()); 1296 1297 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1298 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch()); 1299 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch()); 1300 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch()); 1301 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch()); 1302 1303 T.setArch(Triple::ppc64); 1304 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch()); 1305 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch()); 1306 1307 T.setArch(Triple::nvptx64); 1308 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch()); 1309 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch()); 1310 1311 T.setArch(Triple::sparcv9); 1312 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch()); 1313 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch()); 1314 1315 T.setArch(Triple::x86_64); 1316 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch()); 1317 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch()); 1318 1319 T.setArch(Triple::amdil); 1320 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1321 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1322 1323 T.setArch(Triple::amdil64); 1324 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch()); 1325 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch()); 1326 1327 T.setArch(Triple::hsail); 1328 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1329 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1330 1331 T.setArch(Triple::hsail64); 1332 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch()); 1333 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch()); 1334 1335 T.setArch(Triple::spir); 1336 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1337 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1338 1339 T.setArch(Triple::spir64); 1340 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch()); 1341 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch()); 1342 1343 T.setArch(Triple::spirv32); 1344 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1345 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1346 1347 T.setArch(Triple::spirv64); 1348 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch()); 1349 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch()); 1350 1351 T.setArch(Triple::wasm32); 1352 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1353 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1354 1355 T.setArch(Triple::wasm64); 1356 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch()); 1357 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch()); 1358 1359 T.setArch(Triple::riscv32); 1360 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1361 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1362 1363 T.setArch(Triple::riscv64); 1364 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch()); 1365 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch()); 1366 1367 T.setArch(Triple::csky); 1368 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch()); 1369 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1370 1371 T.setArch(Triple::loongarch32); 1372 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1373 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1374 1375 T.setArch(Triple::loongarch64); 1376 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch()); 1377 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch()); 1378 1379 T.setArch(Triple::thumbeb); 1380 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch()); 1381 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1382 1383 T.setArch(Triple::thumb); 1384 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch()); 1385 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1386 1387 T.setArch(Triple::aarch64); 1388 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1389 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1390 1391 T.setArch(Triple::aarch64_be); 1392 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1393 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1394 1395 T.setArch(Triple::renderscript32); 1396 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1397 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1398 1399 T.setArch(Triple::renderscript64); 1400 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch()); 1401 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch()); 1402 1403 T.setArch(Triple::armeb); 1404 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch()); 1405 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch()); 1406 1407 T.setArch(Triple::arm); 1408 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch()); 1409 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch()); 1410 1411 T.setArch(Triple::systemz); 1412 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch()); 1413 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch()); 1414 1415 T.setArch(Triple::xcore); 1416 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch()); 1417 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1418 1419 T.setArch(Triple::dxil); 1420 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch()); 1421 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch()); 1422 } 1423 1424 TEST(TripleTest, EndianArchVariants) { 1425 Triple T; 1426 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1427 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1428 1429 T.setArch(Triple::UnknownArch); 1430 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1431 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1432 1433 T.setArch(Triple::aarch64_be); 1434 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1435 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1436 1437 T.setArch(Triple::aarch64); 1438 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch()); 1439 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch()); 1440 1441 T.setArch(Triple::armeb); 1442 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch()); 1443 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1444 1445 T.setArch(Triple::arm); 1446 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1447 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch()); 1448 T = Triple("arm"); 1449 EXPECT_TRUE(T.isLittleEndian()); 1450 T = Triple("thumb"); 1451 EXPECT_TRUE(T.isLittleEndian()); 1452 T = Triple("armeb"); 1453 EXPECT_FALSE(T.isLittleEndian()); 1454 T = Triple("thumbeb"); 1455 EXPECT_FALSE(T.isLittleEndian()); 1456 1457 T.setArch(Triple::bpfeb); 1458 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1459 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1460 1461 T.setArch(Triple::bpfel); 1462 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch()); 1463 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch()); 1464 1465 T.setArch(Triple::mips64); 1466 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1467 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1468 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1469 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1470 1471 T.setArch(Triple::mips64, Triple::MipsSubArch_r6); 1472 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1473 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1474 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1475 EXPECT_EQ(Triple::MipsSubArch_r6, 1476 T.getLittleEndianArchVariant().getSubArch()); 1477 1478 T.setArch(Triple::mips64el); 1479 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1480 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1481 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1482 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1483 1484 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6); 1485 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch()); 1486 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1487 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch()); 1488 EXPECT_EQ(Triple::MipsSubArch_r6, 1489 T.getLittleEndianArchVariant().getSubArch()); 1490 1491 T.setArch(Triple::mips); 1492 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1493 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1494 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1495 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1496 1497 T.setArch(Triple::mips, Triple::MipsSubArch_r6); 1498 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1499 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1500 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1501 EXPECT_EQ(Triple::MipsSubArch_r6, 1502 T.getLittleEndianArchVariant().getSubArch()); 1503 1504 T.setArch(Triple::mipsel); 1505 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1506 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch()); 1507 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1508 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch()); 1509 1510 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6); 1511 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch()); 1512 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch()); 1513 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch()); 1514 EXPECT_EQ(Triple::MipsSubArch_r6, 1515 T.getLittleEndianArchVariant().getSubArch()); 1516 1517 T.setArch(Triple::ppc); 1518 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch()); 1519 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch()); 1520 1521 T.setArch(Triple::ppc64); 1522 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1523 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1524 1525 T.setArch(Triple::ppc64le); 1526 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch()); 1527 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch()); 1528 1529 T.setArch(Triple::sparc); 1530 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1531 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1532 1533 T.setArch(Triple::sparcel); 1534 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch()); 1535 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch()); 1536 1537 T.setArch(Triple::thumb); 1538 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1539 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch()); 1540 1541 T.setArch(Triple::thumbeb); 1542 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch()); 1543 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1544 1545 T.setArch(Triple::lanai); 1546 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch()); 1547 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch()); 1548 1549 T.setArch(Triple::tcele); 1550 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1551 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1552 1553 T.setArch(Triple::tce); 1554 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch()); 1555 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch()); 1556 1557 T.setArch(Triple::csky); 1558 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1559 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch()); 1560 1561 T.setArch(Triple::loongarch32); 1562 EXPECT_TRUE(T.isLittleEndian()); 1563 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1564 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch()); 1565 1566 T.setArch(Triple::loongarch64); 1567 EXPECT_TRUE(T.isLittleEndian()); 1568 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1569 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch()); 1570 1571 T.setArch(Triple::dxil); 1572 EXPECT_TRUE(T.isLittleEndian()); 1573 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch()); 1574 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch()); 1575 } 1576 1577 TEST(TripleTest, getOSVersion) { 1578 Triple T; 1579 VersionTuple Version; 1580 1581 T = Triple("i386-apple-darwin9"); 1582 EXPECT_TRUE(T.isMacOSX()); 1583 EXPECT_FALSE(T.isiOS()); 1584 EXPECT_FALSE(T.isArch16Bit()); 1585 EXPECT_TRUE(T.isArch32Bit()); 1586 EXPECT_FALSE(T.isArch64Bit()); 1587 T.getMacOSXVersion(Version); 1588 EXPECT_EQ(VersionTuple(10, 5), Version); 1589 Version = T.getiOSVersion(); 1590 EXPECT_EQ(VersionTuple(5), Version); 1591 1592 T = Triple("x86_64-apple-darwin9"); 1593 EXPECT_TRUE(T.isMacOSX()); 1594 EXPECT_FALSE(T.isiOS()); 1595 EXPECT_FALSE(T.isArch16Bit()); 1596 EXPECT_FALSE(T.isArch32Bit()); 1597 EXPECT_TRUE(T.isArch64Bit()); 1598 T.getMacOSXVersion(Version); 1599 EXPECT_EQ(VersionTuple(10, 5), Version); 1600 Version = T.getiOSVersion(); 1601 EXPECT_EQ(VersionTuple(5), Version); 1602 1603 T = Triple("x86_64-apple-macosx"); 1604 EXPECT_TRUE(T.isMacOSX()); 1605 EXPECT_FALSE(T.isiOS()); 1606 EXPECT_FALSE(T.isArch16Bit()); 1607 EXPECT_FALSE(T.isArch32Bit()); 1608 EXPECT_TRUE(T.isArch64Bit()); 1609 T.getMacOSXVersion(Version); 1610 EXPECT_EQ(VersionTuple(10, 4), Version); 1611 Version = T.getiOSVersion(); 1612 EXPECT_EQ(VersionTuple(5), Version); 1613 1614 T = Triple("x86_64-apple-macosx10.7"); 1615 EXPECT_TRUE(T.isMacOSX()); 1616 EXPECT_FALSE(T.isiOS()); 1617 EXPECT_FALSE(T.isArch16Bit()); 1618 EXPECT_FALSE(T.isArch32Bit()); 1619 EXPECT_TRUE(T.isArch64Bit()); 1620 T.getMacOSXVersion(Version); 1621 EXPECT_EQ(VersionTuple(10, 7), Version); 1622 Version = T.getiOSVersion(); 1623 EXPECT_EQ(VersionTuple(5), Version); 1624 1625 T = Triple("x86_64-apple-macos11.0"); 1626 EXPECT_TRUE(T.isMacOSX()); 1627 EXPECT_FALSE(T.isiOS()); 1628 EXPECT_FALSE(T.isArch16Bit()); 1629 EXPECT_FALSE(T.isArch32Bit()); 1630 EXPECT_TRUE(T.isArch64Bit()); 1631 T.getMacOSXVersion(Version); 1632 EXPECT_EQ(VersionTuple(11, 0), Version); 1633 1634 T = Triple("arm64-apple-macosx11.5.8"); 1635 EXPECT_TRUE(T.isMacOSX()); 1636 EXPECT_FALSE(T.isiOS()); 1637 EXPECT_FALSE(T.isArch16Bit()); 1638 EXPECT_FALSE(T.isArch32Bit()); 1639 EXPECT_TRUE(T.isArch64Bit()); 1640 T.getMacOSXVersion(Version); 1641 EXPECT_EQ(VersionTuple(11, 5, 8), Version); 1642 1643 // 10.16 forms a valid triple, even though it's not 1644 // a version of a macOS. 1645 T = Triple("x86_64-apple-macos10.16"); 1646 EXPECT_TRUE(T.isMacOSX()); 1647 T.getMacOSXVersion(Version); 1648 EXPECT_EQ(VersionTuple(10, 16), Version); 1649 1650 T = Triple("x86_64-apple-darwin20"); 1651 EXPECT_TRUE(T.isMacOSX()); 1652 T.getMacOSXVersion(Version); 1653 EXPECT_EQ(VersionTuple(11), Version); 1654 1655 // For darwin triples on macOS 11, only compare the major version. 1656 T = Triple("x86_64-apple-darwin20.2"); 1657 EXPECT_TRUE(T.isMacOSX()); 1658 T.getMacOSXVersion(Version); 1659 EXPECT_EQ(VersionTuple(11), Version); 1660 1661 T = Triple("armv7-apple-ios"); 1662 EXPECT_FALSE(T.isMacOSX()); 1663 EXPECT_TRUE(T.isiOS()); 1664 EXPECT_FALSE(T.isArch16Bit()); 1665 EXPECT_TRUE(T.isArch32Bit()); 1666 EXPECT_FALSE(T.isArch64Bit()); 1667 T.getMacOSXVersion(Version); 1668 EXPECT_EQ(VersionTuple(10, 4), Version); 1669 Version = T.getiOSVersion(); 1670 EXPECT_EQ(VersionTuple(5), Version); 1671 1672 T = Triple("armv7-apple-ios7.0"); 1673 EXPECT_FALSE(T.isMacOSX()); 1674 EXPECT_TRUE(T.isiOS()); 1675 EXPECT_FALSE(T.isArch16Bit()); 1676 EXPECT_TRUE(T.isArch32Bit()); 1677 EXPECT_FALSE(T.isArch64Bit()); 1678 T.getMacOSXVersion(Version); 1679 EXPECT_EQ(VersionTuple(10, 4), Version); 1680 Version = T.getiOSVersion(); 1681 EXPECT_EQ(VersionTuple(7, 0), Version); 1682 EXPECT_FALSE(T.isSimulatorEnvironment()); 1683 1684 T = Triple("x86_64-apple-ios10.3-simulator"); 1685 EXPECT_TRUE(T.isiOS()); 1686 Version = T.getiOSVersion(); 1687 EXPECT_EQ(VersionTuple(10, 3), Version); 1688 EXPECT_TRUE(T.isSimulatorEnvironment()); 1689 EXPECT_FALSE(T.isMacCatalystEnvironment()); 1690 1691 T = Triple("x86_64-apple-ios13.0-macabi"); 1692 EXPECT_TRUE(T.isiOS()); 1693 Version = T.getiOSVersion(); 1694 EXPECT_EQ(VersionTuple(13, 0), Version); 1695 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI); 1696 EXPECT_TRUE(T.isMacCatalystEnvironment()); 1697 EXPECT_FALSE(T.isSimulatorEnvironment()); 1698 1699 T = Triple("x86_64-apple-driverkit20.1.0"); 1700 EXPECT_TRUE(T.isDriverKit()); 1701 EXPECT_TRUE(T.isOSDarwin()); 1702 EXPECT_FALSE(T.isMacOSX()); 1703 EXPECT_FALSE(T.isiOS()); 1704 Version = T.getDriverKitVersion(); 1705 EXPECT_EQ(VersionTuple(20, 1), Version); 1706 1707 T = Triple("x86_64-apple-driverkit20"); 1708 Version = T.getDriverKitVersion(); 1709 EXPECT_EQ(VersionTuple(20, 0), Version); 1710 1711 // DriverKit version should default to 19.0. 1712 T = Triple("x86_64-apple-driverkit"); 1713 Version = T.getDriverKitVersion(); 1714 EXPECT_EQ(VersionTuple(19, 0), Version); 1715 1716 T = Triple("dxil-unknown-shadermodel6.6-pixel"); 1717 EXPECT_EQ(Triple::dxil, T.getArch()); 1718 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1719 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1720 Version = T.getOSVersion(); 1721 EXPECT_EQ(VersionTuple(6, 6), Version); 1722 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 1723 1724 T = Triple("dxil-unknown-shadermodel6.0-pixel"); 1725 EXPECT_EQ(Triple::dxil, T.getArch()); 1726 EXPECT_EQ(Triple::UnknownVendor, T.getVendor()); 1727 EXPECT_EQ(Triple::ShaderModel, T.getOS()); 1728 Version = T.getOSVersion(); 1729 EXPECT_EQ(VersionTuple(6, 0), Version); 1730 EXPECT_EQ(Triple::Pixel, T.getEnvironment()); 1731 } 1732 1733 TEST(TripleTest, getEnvironmentVersion) { 1734 Triple T; 1735 VersionTuple Version; 1736 1737 T = Triple("arm-unknown-linux-android16"); 1738 EXPECT_TRUE(T.isAndroid()); 1739 Version = T.getEnvironmentVersion(); 1740 EXPECT_EQ(VersionTuple(16), Version); 1741 EXPECT_EQ(Triple::Android, T.getEnvironment()); 1742 1743 T = Triple("aarch64-unknown-linux-android21"); 1744 EXPECT_TRUE(T.isAndroid()); 1745 Version = T.getEnvironmentVersion(); 1746 EXPECT_EQ(VersionTuple(21), Version); 1747 EXPECT_EQ(Triple::Android, T.getEnvironment()); 1748 } 1749 1750 TEST(TripleTest, isMacOSVersionLT) { 1751 Triple T = Triple("x86_64-apple-macos11"); 1752 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 1753 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 1754 1755 T = Triple("x86_64-apple-darwin20"); 1756 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0)); 1757 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0)); 1758 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0)); 1759 } 1760 1761 TEST(TripleTest, CanonicalizeOSVersion) { 1762 EXPECT_EQ(VersionTuple(10, 15, 4), 1763 Triple::getCanonicalVersionForOS(Triple::MacOSX, 1764 VersionTuple(10, 15, 4))); 1765 EXPECT_EQ(VersionTuple(11, 0), Triple::getCanonicalVersionForOS( 1766 Triple::MacOSX, VersionTuple(10, 16))); 1767 EXPECT_EQ(VersionTuple(20), 1768 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20))); 1769 } 1770 1771 TEST(TripleTest, FileFormat) { 1772 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat()); 1773 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat()); 1774 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat()); 1775 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat()); 1776 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat()); 1777 1778 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat()); 1779 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat()); 1780 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat()); 1781 1782 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat()); 1783 1784 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat()); 1785 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat()); 1786 1787 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat()); 1788 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat()); 1789 1790 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat()); 1791 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat()); 1792 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat()); 1793 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat()); 1794 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat()); 1795 1796 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat()); 1797 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat()); 1798 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat()); 1799 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat()); 1800 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat()); 1801 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat()); 1802 1803 EXPECT_EQ(Triple::Wasm, 1804 Triple("wasm32-unknown-unknown-wasm").getObjectFormat()); 1805 EXPECT_EQ(Triple::Wasm, 1806 Triple("wasm64-unknown-unknown-wasm").getObjectFormat()); 1807 EXPECT_EQ(Triple::Wasm, 1808 Triple("wasm32-wasi-wasm").getObjectFormat()); 1809 EXPECT_EQ(Triple::Wasm, 1810 Triple("wasm64-wasi-wasm").getObjectFormat()); 1811 EXPECT_EQ(Triple::Wasm, 1812 Triple("wasm32-unknown-wasi-wasm").getObjectFormat()); 1813 EXPECT_EQ(Triple::Wasm, 1814 Triple("wasm64-unknown-wasi-wasm").getObjectFormat()); 1815 1816 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat()); 1817 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat()); 1818 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat()); 1819 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat()); 1820 1821 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat()); 1822 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat()); 1823 1824 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat()); 1825 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat()); 1826 1827 EXPECT_EQ(Triple::ELF, 1828 Triple("loongarch32-unknown-unknown").getObjectFormat()); 1829 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat()); 1830 1831 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf")); 1832 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat()); 1833 1834 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf")); 1835 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat()); 1836 1837 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf")); 1838 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat()); 1839 1840 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf")); 1841 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat()); 1842 1843 EXPECT_EQ(Triple::DXContainer, 1844 Triple("dxil-unknown-shadermodel").getObjectFormat()); 1845 1846 Triple T = Triple(""); 1847 T.setObjectFormat(Triple::ELF); 1848 EXPECT_EQ(Triple::ELF, T.getObjectFormat()); 1849 1850 T.setObjectFormat(Triple::MachO); 1851 EXPECT_EQ(Triple::MachO, T.getObjectFormat()); 1852 1853 T.setObjectFormat(Triple::XCOFF); 1854 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat()); 1855 1856 T.setObjectFormat(Triple::GOFF); 1857 EXPECT_EQ(Triple::GOFF, T.getObjectFormat()); 1858 1859 T.setObjectFormat(Triple::SPIRV); 1860 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat()); 1861 } 1862 1863 TEST(TripleTest, NormalizeWindows) { 1864 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32")); 1865 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32")); 1866 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32")); 1867 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32")); 1868 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64")); 1869 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64")); 1870 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin")); 1871 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin")); 1872 1873 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32")); 1874 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32")); 1875 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32")); 1876 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32")); 1877 EXPECT_EQ("x86_64-pc-windows-gnu", 1878 Triple::normalize("x86_64-pc-mingw32-w64")); 1879 EXPECT_EQ("x86_64-unknown-windows-gnu", 1880 Triple::normalize("x86_64-mingw32-w64")); 1881 1882 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf")); 1883 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf")); 1884 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho")); 1885 EXPECT_EQ("i686-unknown-windows-macho", 1886 Triple::normalize("i686-win32-macho")); 1887 1888 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf")); 1889 EXPECT_EQ("x86_64-unknown-windows-elf", 1890 Triple::normalize("x86_64-win32-elf")); 1891 EXPECT_EQ("x86_64-pc-windows-macho", 1892 Triple::normalize("x86_64-pc-win32-macho")); 1893 EXPECT_EQ("x86_64-unknown-windows-macho", 1894 Triple::normalize("x86_64-win32-macho")); 1895 1896 EXPECT_EQ("i686-pc-windows-cygnus", 1897 Triple::normalize("i686-pc-windows-cygnus")); 1898 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu")); 1899 EXPECT_EQ("i686-pc-windows-itanium", 1900 Triple::normalize("i686-pc-windows-itanium")); 1901 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc")); 1902 1903 EXPECT_EQ("i686-pc-windows-elf", 1904 Triple::normalize("i686-pc-windows-elf-elf")); 1905 1906 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment()); 1907 } 1908 1909 TEST(TripleTest, NormalizeAndroid) { 1910 EXPECT_EQ("arm-unknown-linux-android16", 1911 Triple::normalize("arm-linux-androideabi16")); 1912 EXPECT_EQ("armv7a-unknown-linux-android", 1913 Triple::normalize("armv7a-linux-androideabi")); 1914 EXPECT_EQ("aarch64-unknown-linux-android21", 1915 Triple::normalize("aarch64-linux-android21")); 1916 } 1917 1918 TEST(TripleTest, NormalizeARM) { 1919 EXPECT_EQ("armv6-unknown-netbsd-eabi", 1920 Triple::normalize("armv6-netbsd-eabi")); 1921 EXPECT_EQ("armv7-unknown-netbsd-eabi", 1922 Triple::normalize("armv7-netbsd-eabi")); 1923 EXPECT_EQ("armv6eb-unknown-netbsd-eabi", 1924 Triple::normalize("armv6eb-netbsd-eabi")); 1925 EXPECT_EQ("armv7eb-unknown-netbsd-eabi", 1926 Triple::normalize("armv7eb-netbsd-eabi")); 1927 EXPECT_EQ("armv6-unknown-netbsd-eabihf", 1928 Triple::normalize("armv6-netbsd-eabihf")); 1929 EXPECT_EQ("armv7-unknown-netbsd-eabihf", 1930 Triple::normalize("armv7-netbsd-eabihf")); 1931 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf", 1932 Triple::normalize("armv6eb-netbsd-eabihf")); 1933 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf", 1934 Triple::normalize("armv7eb-netbsd-eabihf")); 1935 1936 EXPECT_EQ("armv7-suse-linux-gnueabihf", 1937 Triple::normalize("armv7-suse-linux-gnueabi")); 1938 1939 Triple T; 1940 T = Triple("armv6--netbsd-eabi"); 1941 EXPECT_EQ(Triple::arm, T.getArch()); 1942 T = Triple("armv6eb--netbsd-eabi"); 1943 EXPECT_EQ(Triple::armeb, T.getArch()); 1944 T = Triple("armv7-suse-linux-gnueabihf"); 1945 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment()); 1946 } 1947 1948 TEST(TripleTest, ParseARMArch) { 1949 // ARM 1950 { 1951 Triple T = Triple("arm"); 1952 EXPECT_EQ(Triple::arm, T.getArch()); 1953 } 1954 { 1955 Triple T = Triple("armeb"); 1956 EXPECT_EQ(Triple::armeb, T.getArch()); 1957 } 1958 // THUMB 1959 { 1960 Triple T = Triple("thumb"); 1961 EXPECT_EQ(Triple::thumb, T.getArch()); 1962 } 1963 { 1964 Triple T = Triple("thumbeb"); 1965 EXPECT_EQ(Triple::thumbeb, T.getArch()); 1966 } 1967 // AARCH64 1968 { 1969 Triple T = Triple("arm64"); 1970 EXPECT_EQ(Triple::aarch64, T.getArch()); 1971 } 1972 { 1973 Triple T = Triple("arm64_32"); 1974 EXPECT_EQ(Triple::aarch64_32, T.getArch()); 1975 } 1976 { 1977 Triple T = Triple("aarch64"); 1978 EXPECT_EQ(Triple::aarch64, T.getArch()); 1979 } 1980 { 1981 Triple T = Triple("aarch64_be"); 1982 EXPECT_EQ(Triple::aarch64_be, T.getArch()); 1983 } 1984 { 1985 Triple T = Triple("arm64e"); 1986 EXPECT_EQ(Triple::aarch64, T.getArch()); 1987 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch()); 1988 } 1989 { 1990 Triple T = Triple("arm64ec"); 1991 EXPECT_EQ(Triple::aarch64, T.getArch()); 1992 EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch()); 1993 } 1994 { 1995 Triple T; 1996 T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec); 1997 EXPECT_EQ("arm64ec", T.getArchName()); 1998 } 1999 } 2000 2001 TEST(TripleTest, isArmT32) { 2002 // Not isArmT32 2003 { 2004 Triple T = Triple("thumbv6m"); 2005 EXPECT_FALSE(T.isArmT32()); 2006 } 2007 { 2008 Triple T = Triple("armv8m.base"); 2009 EXPECT_FALSE(T.isArmT32()); 2010 } 2011 { 2012 Triple T = Triple("armv7s"); 2013 EXPECT_FALSE(T.isArmT32()); 2014 } 2015 { 2016 Triple T = Triple("armv7k"); 2017 EXPECT_FALSE(T.isArmT32()); 2018 } 2019 { 2020 Triple T = Triple("armv7ve"); 2021 EXPECT_FALSE(T.isArmT32()); 2022 } 2023 { 2024 Triple T = Triple("armv6"); 2025 EXPECT_FALSE(T.isArmT32()); 2026 } 2027 { 2028 Triple T = Triple("armv6m"); 2029 EXPECT_FALSE(T.isArmT32()); 2030 } 2031 { 2032 Triple T = Triple("armv6k"); 2033 EXPECT_FALSE(T.isArmT32()); 2034 } 2035 { 2036 Triple T = Triple("armv6t2"); 2037 EXPECT_FALSE(T.isArmT32()); 2038 } 2039 { 2040 Triple T = Triple("armv5"); 2041 EXPECT_FALSE(T.isArmT32()); 2042 } 2043 { 2044 Triple T = Triple("armv5te"); 2045 EXPECT_FALSE(T.isArmT32()); 2046 } 2047 { 2048 Triple T = Triple("armv4t"); 2049 EXPECT_FALSE(T.isArmT32()); 2050 } 2051 2052 // isArmT32 2053 { 2054 Triple T = Triple("arm"); 2055 EXPECT_TRUE(T.isArmT32()); 2056 } 2057 { 2058 Triple T = Triple("armv7m"); 2059 EXPECT_TRUE(T.isArmT32()); 2060 } 2061 { 2062 Triple T = Triple("armv7em"); 2063 EXPECT_TRUE(T.isArmT32()); 2064 } 2065 { 2066 Triple T = Triple("armv8m.main"); 2067 EXPECT_TRUE(T.isArmT32()); 2068 } 2069 { 2070 Triple T = Triple("armv8.1m.main"); 2071 EXPECT_TRUE(T.isArmT32()); 2072 } 2073 } 2074 2075 TEST(TripleTest, isArmMClass) { 2076 // not M-class 2077 { 2078 Triple T = Triple("armv7s"); 2079 EXPECT_FALSE(T.isArmMClass()); 2080 } 2081 { 2082 Triple T = Triple("armv7k"); 2083 EXPECT_FALSE(T.isArmMClass()); 2084 } 2085 { 2086 Triple T = Triple("armv7ve"); 2087 EXPECT_FALSE(T.isArmMClass()); 2088 } 2089 { 2090 Triple T = Triple("armv6"); 2091 EXPECT_FALSE(T.isArmMClass()); 2092 } 2093 { 2094 Triple T = Triple("armv6k"); 2095 EXPECT_FALSE(T.isArmMClass()); 2096 } 2097 { 2098 Triple T = Triple("armv6t2"); 2099 EXPECT_FALSE(T.isArmMClass()); 2100 } 2101 { 2102 Triple T = Triple("armv5"); 2103 EXPECT_FALSE(T.isArmMClass()); 2104 } 2105 { 2106 Triple T = Triple("armv5te"); 2107 EXPECT_FALSE(T.isArmMClass()); 2108 } 2109 { 2110 Triple T = Triple("armv4t"); 2111 EXPECT_FALSE(T.isArmMClass()); 2112 } 2113 { 2114 Triple T = Triple("arm"); 2115 EXPECT_FALSE(T.isArmMClass()); 2116 } 2117 2118 // is M-class 2119 { 2120 Triple T = Triple("armv6m"); 2121 EXPECT_TRUE(T.isArmMClass()); 2122 } 2123 { 2124 Triple T = Triple("armv7m"); 2125 EXPECT_TRUE(T.isArmMClass()); 2126 } 2127 { 2128 Triple T = Triple("armv7em"); 2129 EXPECT_TRUE(T.isArmMClass()); 2130 } 2131 { 2132 Triple T = Triple("armv8m.base"); 2133 EXPECT_TRUE(T.isArmMClass()); 2134 } 2135 { 2136 Triple T = Triple("armv8m.main"); 2137 EXPECT_TRUE(T.isArmMClass()); 2138 } 2139 { 2140 Triple T = Triple("armv8.1m.main"); 2141 EXPECT_TRUE(T.isArmMClass()); 2142 } 2143 } 2144 } // end anonymous namespace 2145