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