3336 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/TargetParser/Triple.h"10#include "llvm/Support/CodeGen.h"11#include "llvm/Support/FormatVariadic.h"12#include "llvm/Support/VersionTuple.h"13#include "gmock/gmock.h"14#include "gtest/gtest.h"15 16using namespace llvm;17 18namespace {19 20TEST(TripleTest, BasicParsing) {21 Triple T;22 23 T = Triple("");24 EXPECT_EQ("", T.getArchName().str());25 EXPECT_EQ("", T.getVendorName().str());26 EXPECT_EQ("", T.getOSName().str());27 EXPECT_EQ("", T.getEnvironmentName().str());28 29 T = Triple("-");30 EXPECT_EQ("", T.getArchName().str());31 EXPECT_EQ("", T.getVendorName().str());32 EXPECT_EQ("", T.getOSName().str());33 EXPECT_EQ("", T.getEnvironmentName().str());34 35 T = Triple("--");36 EXPECT_EQ("", T.getArchName().str());37 EXPECT_EQ("", T.getVendorName().str());38 EXPECT_EQ("", T.getOSName().str());39 EXPECT_EQ("", T.getEnvironmentName().str());40 41 T = Triple("---");42 EXPECT_EQ("", T.getArchName().str());43 EXPECT_EQ("", T.getVendorName().str());44 EXPECT_EQ("", T.getOSName().str());45 EXPECT_EQ("", T.getEnvironmentName().str());46 47 T = Triple("----");48 EXPECT_EQ("", T.getArchName().str());49 EXPECT_EQ("", T.getVendorName().str());50 EXPECT_EQ("", T.getOSName().str());51 EXPECT_EQ("-", T.getEnvironmentName().str());52 53 T = Triple("a");54 EXPECT_EQ("a", T.getArchName().str());55 EXPECT_EQ("", T.getVendorName().str());56 EXPECT_EQ("", T.getOSName().str());57 EXPECT_EQ("", T.getEnvironmentName().str());58 59 T = Triple("a-b");60 EXPECT_EQ("a", T.getArchName().str());61 EXPECT_EQ("b", T.getVendorName().str());62 EXPECT_EQ("", T.getOSName().str());63 EXPECT_EQ("", T.getEnvironmentName().str());64 65 T = Triple("a-b-c");66 EXPECT_EQ("a", T.getArchName().str());67 EXPECT_EQ("b", T.getVendorName().str());68 EXPECT_EQ("c", T.getOSName().str());69 EXPECT_EQ("", T.getEnvironmentName().str());70 71 T = Triple("a-b-c-d");72 EXPECT_EQ("a", T.getArchName().str());73 EXPECT_EQ("b", T.getVendorName().str());74 EXPECT_EQ("c", T.getOSName().str());75 EXPECT_EQ("d", T.getEnvironmentName().str());76}77 78TEST(TripleTest, ParsedIDs) {79 Triple T;80 81 T = Triple("i386-apple-darwin");82 EXPECT_EQ(Triple::x86, T.getArch());83 EXPECT_EQ(Triple::Apple, T.getVendor());84 EXPECT_EQ(Triple::Darwin, T.getOS());85 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());86 87 T = Triple("i386-pc-elfiamcu");88 EXPECT_EQ(Triple::x86, T.getArch());89 EXPECT_EQ(Triple::PC, T.getVendor());90 EXPECT_EQ(Triple::ELFIAMCU, T.getOS());91 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());92 93 T = Triple("i386-pc-hurd-gnu");94 EXPECT_EQ(Triple::x86, T.getArch());95 EXPECT_EQ(Triple::PC, T.getVendor());96 EXPECT_EQ(Triple::Hurd, T.getOS());97 EXPECT_EQ(Triple::GNU, T.getEnvironment());98 99 T = Triple("i686-pc-linux-gnu");100 EXPECT_EQ(Triple::x86, T.getArch());101 EXPECT_EQ(Triple::PC, T.getVendor());102 EXPECT_EQ(Triple::Linux, T.getOS());103 EXPECT_EQ(Triple::GNU, T.getEnvironment());104 EXPECT_FALSE(T.isTime64ABI());105 106 T = Triple("x86_64-pc-linux-gnu");107 EXPECT_EQ(Triple::x86_64, T.getArch());108 EXPECT_EQ(Triple::PC, T.getVendor());109 EXPECT_EQ(Triple::Linux, T.getOS());110 EXPECT_EQ(Triple::GNU, T.getEnvironment());111 112 T = Triple("x86_64-pc-linux-musl");113 EXPECT_EQ(Triple::x86_64, T.getArch());114 EXPECT_EQ(Triple::PC, T.getVendor());115 EXPECT_EQ(Triple::Linux, T.getOS());116 EXPECT_EQ(Triple::Musl, T.getEnvironment());117 118 T = Triple("x86_64-pc-linux-muslx32");119 EXPECT_EQ(Triple::x86_64, T.getArch());120 EXPECT_EQ(Triple::PC, T.getVendor());121 EXPECT_EQ(Triple::Linux, T.getOS());122 EXPECT_EQ(Triple::MuslX32, T.getEnvironment());123 124 T = Triple("x86_64-pc-hurd-gnu");125 EXPECT_EQ(Triple::x86_64, T.getArch());126 EXPECT_EQ(Triple::PC, T.getVendor());127 EXPECT_EQ(Triple::Hurd, T.getOS());128 EXPECT_EQ(Triple::GNU, T.getEnvironment());129 130 T = Triple("arm-unknown-linux-android16");131 EXPECT_EQ(Triple::arm, T.getArch());132 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());133 EXPECT_EQ(Triple::Linux, T.getOS());134 EXPECT_EQ(Triple::Android, T.getEnvironment());135 136 T = Triple("aarch64-unknown-linux-android21");137 EXPECT_EQ(Triple::aarch64, T.getArch());138 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());139 EXPECT_EQ(Triple::Linux, T.getOS());140 EXPECT_EQ(Triple::Android, T.getEnvironment());141 142 T = Triple("aarch64-unknown-hurd-gnu");143 EXPECT_EQ(Triple::aarch64, T.getArch());144 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());145 EXPECT_EQ(Triple::Hurd, T.getOS());146 EXPECT_EQ(Triple::GNU, T.getEnvironment());147 148 // PS4 has two spellings for the vendor.149 T = Triple("x86_64-scei-ps4");150 EXPECT_EQ(Triple::x86_64, T.getArch());151 EXPECT_EQ(Triple::SCEI, T.getVendor());152 EXPECT_EQ(Triple::PS4, T.getOS());153 154 T = Triple("x86_64-sie-ps4");155 EXPECT_EQ(Triple::x86_64, T.getArch());156 EXPECT_EQ(Triple::SCEI, T.getVendor());157 EXPECT_EQ(Triple::PS4, T.getOS());158 159 T = Triple("x86_64-sie-ps5");160 EXPECT_EQ(Triple::x86_64, T.getArch());161 EXPECT_EQ(Triple::SCEI, T.getVendor());162 EXPECT_EQ(Triple::PS5, T.getOS());163 164 T = Triple("powerpc-ibm-aix");165 EXPECT_EQ(Triple::ppc, T.getArch());166 EXPECT_EQ(Triple::IBM, T.getVendor());167 EXPECT_EQ(Triple::AIX, T.getOS());168 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());169 170 T = Triple("powerpc64-ibm-aix");171 EXPECT_EQ(Triple::ppc64, T.getArch());172 EXPECT_EQ(Triple::IBM, T.getVendor());173 EXPECT_EQ(Triple::AIX, T.getOS());174 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());175 176 T = Triple("powerpc-dunno-notsure");177 EXPECT_EQ(Triple::ppc, T.getArch());178 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());179 EXPECT_EQ(Triple::UnknownOS, T.getOS());180 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());181 182 T = Triple("powerpcspe-unknown-freebsd");183 EXPECT_EQ(Triple::ppc, T.getArch());184 EXPECT_EQ(Triple::PPCSubArch_spe, T.getSubArch());185 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());186 EXPECT_EQ(Triple::FreeBSD, T.getOS());187 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());188 189 T = Triple("s390x-ibm-zos");190 EXPECT_EQ(Triple::systemz, T.getArch());191 EXPECT_EQ(Triple::IBM, T.getVendor());192 EXPECT_EQ(Triple::ZOS, T.getOS());193 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());194 195 T = Triple("systemz-ibm-zos");196 EXPECT_EQ(Triple::systemz, T.getArch());197 EXPECT_EQ(Triple::IBM, T.getVendor());198 EXPECT_EQ(Triple::ZOS, T.getOS());199 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());200 201 T = Triple("arm-none-none-eabi");202 EXPECT_EQ(Triple::arm, T.getArch());203 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());204 EXPECT_EQ(Triple::UnknownOS, T.getOS());205 EXPECT_EQ(Triple::EABI, T.getEnvironment());206 EXPECT_FALSE(T.isHardFloatABI());207 208 T = Triple("arm-none-none-eabihf");209 EXPECT_EQ(Triple::arm, T.getArch());210 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());211 EXPECT_EQ(Triple::UnknownOS, T.getOS());212 EXPECT_EQ(Triple::EABIHF, T.getEnvironment());213 EXPECT_TRUE(T.isHardFloatABI());214 215 T = Triple("arm-none-linux-musleabi");216 EXPECT_EQ(Triple::arm, T.getArch());217 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());218 EXPECT_EQ(Triple::Linux, T.getOS());219 EXPECT_EQ(Triple::MuslEABI, T.getEnvironment());220 EXPECT_FALSE(T.isHardFloatABI());221 222 T = Triple("arm-none-linux-musleabihf");223 EXPECT_EQ(Triple::arm, T.getArch());224 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());225 EXPECT_EQ(Triple::Linux, T.getOS());226 EXPECT_EQ(Triple::MuslEABIHF, T.getEnvironment());227 EXPECT_TRUE(T.isHardFloatABI());228 229 T = Triple("armv6hl-none-linux-gnueabi");230 EXPECT_EQ(Triple::arm, T.getArch());231 EXPECT_EQ(Triple::Linux, T.getOS());232 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());233 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());234 EXPECT_FALSE(T.isTime64ABI());235 EXPECT_FALSE(T.isHardFloatABI());236 237 T = Triple("armv7hl-none-linux-gnueabi");238 EXPECT_EQ(Triple::arm, T.getArch());239 EXPECT_EQ(Triple::Linux, T.getOS());240 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());241 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());242 EXPECT_FALSE(T.isTime64ABI());243 EXPECT_FALSE(T.isHardFloatABI());244 245 T = Triple("armv7hl-none-linux-gnueabihf");246 EXPECT_EQ(Triple::arm, T.getArch());247 EXPECT_EQ(Triple::Linux, T.getOS());248 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());249 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());250 EXPECT_FALSE(T.isTime64ABI());251 EXPECT_TRUE(T.isHardFloatABI());252 253 T = Triple("amdil-unknown-unknown");254 EXPECT_EQ(Triple::amdil, T.getArch());255 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());256 EXPECT_EQ(Triple::UnknownOS, T.getOS());257 258 T = Triple("amdil64-unknown-unknown");259 EXPECT_EQ(Triple::amdil64, T.getArch());260 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());261 EXPECT_EQ(Triple::UnknownOS, T.getOS());262 263 T = Triple("hsail-unknown-unknown");264 EXPECT_EQ(Triple::hsail, T.getArch());265 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());266 EXPECT_EQ(Triple::UnknownOS, T.getOS());267 268 T = Triple("hsail64-unknown-unknown");269 EXPECT_EQ(Triple::hsail64, T.getArch());270 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());271 EXPECT_EQ(Triple::UnknownOS, T.getOS());272 273 T = Triple("sparcel-unknown-unknown");274 EXPECT_EQ(Triple::sparcel, T.getArch());275 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());276 EXPECT_EQ(Triple::UnknownOS, T.getOS());277 278 T = Triple("spir-unknown-unknown");279 EXPECT_EQ(Triple::spir, T.getArch());280 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());281 EXPECT_EQ(Triple::UnknownOS, T.getOS());282 283 T = Triple("spir64-unknown-unknown");284 EXPECT_EQ(Triple::spir64, T.getArch());285 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());286 EXPECT_EQ(Triple::UnknownOS, T.getOS());287 288 T = Triple("spirv32-unknown-unknown");289 EXPECT_EQ(Triple::spirv32, T.getArch());290 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());291 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());292 EXPECT_EQ(Triple::UnknownOS, T.getOS());293 294 T = Triple("spirv32v1.0-unknown-unknown");295 EXPECT_EQ(Triple::spirv32, T.getArch());296 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());297 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());298 EXPECT_EQ(Triple::UnknownOS, T.getOS());299 300 T = Triple("spirv32v1.1-unknown-unknown");301 EXPECT_EQ(Triple::spirv32, T.getArch());302 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());303 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());304 EXPECT_EQ(Triple::UnknownOS, T.getOS());305 306 T = Triple("spirv32v1.2-unknown-unknown");307 EXPECT_EQ(Triple::spirv32, T.getArch());308 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());309 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());310 EXPECT_EQ(Triple::UnknownOS, T.getOS());311 312 T = Triple("spirv32v1.3-unknown-unknown");313 EXPECT_EQ(Triple::spirv32, T.getArch());314 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());315 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());316 EXPECT_EQ(Triple::UnknownOS, T.getOS());317 318 T = Triple("spirv32v1.4-unknown-unknown");319 EXPECT_EQ(Triple::spirv32, T.getArch());320 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());321 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());322 EXPECT_EQ(Triple::UnknownOS, T.getOS());323 324 T = Triple("spirv32v1.5-unknown-unknown");325 EXPECT_EQ(Triple::spirv32, T.getArch());326 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());327 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());328 EXPECT_EQ(Triple::UnknownOS, T.getOS());329 330 T = Triple("spirv64-unknown-unknown");331 EXPECT_EQ(Triple::spirv64, T.getArch());332 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());333 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());334 EXPECT_EQ(Triple::UnknownOS, T.getOS());335 336 T = Triple("spirv64v1.0-unknown-unknown");337 EXPECT_EQ(Triple::spirv64, T.getArch());338 EXPECT_EQ(Triple::SPIRVSubArch_v10, T.getSubArch());339 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());340 EXPECT_EQ(Triple::UnknownOS, T.getOS());341 342 T = Triple("spirv64v1.1-unknown-unknown");343 EXPECT_EQ(Triple::spirv64, T.getArch());344 EXPECT_EQ(Triple::SPIRVSubArch_v11, T.getSubArch());345 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());346 EXPECT_EQ(Triple::UnknownOS, T.getOS());347 348 T = Triple("spirv64v1.2-unknown-unknown");349 EXPECT_EQ(Triple::spirv64, T.getArch());350 EXPECT_EQ(Triple::SPIRVSubArch_v12, T.getSubArch());351 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());352 EXPECT_EQ(Triple::UnknownOS, T.getOS());353 354 T = Triple("spirv64v1.3-unknown-unknown");355 EXPECT_EQ(Triple::spirv64, T.getArch());356 EXPECT_EQ(Triple::SPIRVSubArch_v13, T.getSubArch());357 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());358 EXPECT_EQ(Triple::UnknownOS, T.getOS());359 360 T = Triple("spirv64v1.4-unknown-unknown");361 EXPECT_EQ(Triple::spirv64, T.getArch());362 EXPECT_EQ(Triple::SPIRVSubArch_v14, T.getSubArch());363 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());364 EXPECT_EQ(Triple::UnknownOS, T.getOS());365 366 T = Triple("spirv64v1.5-unknown-unknown");367 EXPECT_EQ(Triple::spirv64, T.getArch());368 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());369 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());370 EXPECT_EQ(Triple::UnknownOS, T.getOS());371 372 T = Triple("spirv-unknown-vulkan-pixel");373 EXPECT_EQ(Triple::spirv, T.getArch());374 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());375 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());376 EXPECT_EQ(Triple::Vulkan, T.getOS());377 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());378 EXPECT_EQ(Triple::Pixel, T.getEnvironment());379 380 T = Triple("spirv-unknown-vulkan-vertex");381 EXPECT_EQ(Triple::spirv, T.getArch());382 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());383 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());384 EXPECT_EQ(Triple::Vulkan, T.getOS());385 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());386 EXPECT_EQ(Triple::Vertex, T.getEnvironment());387 388 T = Triple("spirv-unknown-vulkan-geometry");389 EXPECT_EQ(Triple::spirv, T.getArch());390 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());391 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());392 EXPECT_EQ(Triple::Vulkan, T.getOS());393 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());394 EXPECT_EQ(Triple::Geometry, T.getEnvironment());395 396 T = Triple("spirv-unknown-vulkan-library");397 EXPECT_EQ(Triple::spirv, T.getArch());398 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());399 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());400 EXPECT_EQ(Triple::Vulkan, T.getOS());401 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());402 EXPECT_EQ(Triple::Library, T.getEnvironment());403 404 T = Triple("spirv-unknown-vulkan-raygeneration");405 EXPECT_EQ(Triple::spirv, T.getArch());406 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());407 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());408 EXPECT_EQ(Triple::Vulkan, T.getOS());409 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());410 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());411 412 T = Triple("spirv-unknown-vulkan-intersection");413 EXPECT_EQ(Triple::spirv, T.getArch());414 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());415 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());416 EXPECT_EQ(Triple::Vulkan, T.getOS());417 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());418 EXPECT_EQ(Triple::Intersection, T.getEnvironment());419 420 T = Triple("spirv-unknown-vulkan-anyhit");421 EXPECT_EQ(Triple::spirv, T.getArch());422 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());423 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());424 EXPECT_EQ(Triple::Vulkan, T.getOS());425 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());426 EXPECT_EQ(Triple::AnyHit, T.getEnvironment());427 428 T = Triple("spirv-unknown-vulkan-closesthit");429 EXPECT_EQ(Triple::spirv, T.getArch());430 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());431 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());432 EXPECT_EQ(Triple::Vulkan, T.getOS());433 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());434 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());435 436 T = Triple("spirv-unknown-vulkan-miss");437 EXPECT_EQ(Triple::spirv, T.getArch());438 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());439 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());440 EXPECT_EQ(Triple::Vulkan, T.getOS());441 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());442 EXPECT_EQ(Triple::Miss, T.getEnvironment());443 444 T = Triple("spirv-unknown-vulkan-callable");445 EXPECT_EQ(Triple::spirv, T.getArch());446 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());447 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());448 EXPECT_EQ(Triple::Vulkan, T.getOS());449 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());450 EXPECT_EQ(Triple::Callable, T.getEnvironment());451 452 T = Triple("spirv-unknown-vulkan-mesh");453 EXPECT_EQ(Triple::spirv, T.getArch());454 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());455 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());456 EXPECT_EQ(Triple::Vulkan, T.getOS());457 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());458 EXPECT_EQ(Triple::Mesh, T.getEnvironment());459 460 T = Triple("spirv-unknown-vulkan-amplification");461 EXPECT_EQ(Triple::spirv, T.getArch());462 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());463 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());464 EXPECT_EQ(Triple::Vulkan, T.getOS());465 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());466 EXPECT_EQ(Triple::Amplification, T.getEnvironment());467 468 T = Triple("spirv1.5-unknown-vulkan1.2-compute");469 EXPECT_EQ(Triple::spirv, T.getArch());470 EXPECT_EQ(Triple::SPIRVSubArch_v15, T.getSubArch());471 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());472 EXPECT_EQ(Triple::Vulkan, T.getOS());473 EXPECT_EQ(VersionTuple(1, 2), T.getVulkanVersion());474 EXPECT_EQ(Triple::Compute, T.getEnvironment());475 476 T = Triple("spirv1.6-unknown-vulkan1.3-compute");477 EXPECT_EQ(Triple::spirv, T.getArch());478 EXPECT_EQ(Triple::SPIRVSubArch_v16, T.getSubArch());479 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());480 EXPECT_EQ(Triple::Vulkan, T.getOS());481 EXPECT_EQ(VersionTuple(1, 3), T.getVulkanVersion());482 EXPECT_EQ(Triple::Compute, T.getEnvironment());483 484 T = Triple("dxilv1.0--shadermodel6.0-pixel");485 EXPECT_EQ(Triple::dxil, T.getArch());486 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());487 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());488 EXPECT_EQ(Triple::ShaderModel, T.getOS());489 EXPECT_EQ(VersionTuple(1, 0), T.getDXILVersion());490 EXPECT_EQ(Triple::Pixel, T.getEnvironment());491 492 T = Triple("dxilv1.1--shadermodel6.1-vertex");493 EXPECT_EQ(Triple::dxil, T.getArch());494 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());495 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());496 EXPECT_EQ(Triple::ShaderModel, T.getOS());497 EXPECT_EQ(VersionTuple(1, 1), T.getDXILVersion());498 EXPECT_EQ(Triple::Vertex, T.getEnvironment());499 500 T = Triple("dxilv1.2--shadermodel6.2-geometry");501 EXPECT_EQ(Triple::dxil, T.getArch());502 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());503 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());504 EXPECT_EQ(Triple::ShaderModel, T.getOS());505 EXPECT_EQ(VersionTuple(1, 2), T.getDXILVersion());506 EXPECT_EQ(Triple::Geometry, T.getEnvironment());507 508 T = Triple("dxilv1.3--shadermodel6.3-library");509 EXPECT_EQ(Triple::dxil, T.getArch());510 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());511 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());512 EXPECT_EQ(Triple::ShaderModel, T.getOS());513 EXPECT_EQ(VersionTuple(1, 3), T.getDXILVersion());514 EXPECT_EQ(Triple::Library, T.getEnvironment());515 516 T = Triple("dxilv1.4--shadermodel6.4-hull");517 EXPECT_EQ(Triple::dxil, T.getArch());518 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());519 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());520 EXPECT_EQ(Triple::ShaderModel, T.getOS());521 EXPECT_EQ(VersionTuple(1, 4), T.getDXILVersion());522 EXPECT_EQ(Triple::Hull, T.getEnvironment());523 524 T = Triple("dxilv1.5--shadermodel6.5-domain");525 EXPECT_EQ(Triple::dxil, T.getArch());526 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());527 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());528 EXPECT_EQ(Triple::ShaderModel, T.getOS());529 EXPECT_EQ(VersionTuple(1, 5), T.getDXILVersion());530 EXPECT_EQ(Triple::Domain, T.getEnvironment());531 532 T = Triple("dxilv1.6--shadermodel6.6-compute");533 EXPECT_EQ(Triple::dxil, T.getArch());534 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());535 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());536 EXPECT_EQ(Triple::ShaderModel, T.getOS());537 EXPECT_EQ(VersionTuple(1, 6), T.getDXILVersion());538 EXPECT_EQ(Triple::Compute, T.getEnvironment());539 540 T = Triple("dxilv1.7-unknown-shadermodel6.7-mesh");541 EXPECT_EQ(Triple::dxil, T.getArch());542 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());543 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());544 EXPECT_EQ(Triple::ShaderModel, T.getOS());545 EXPECT_EQ(VersionTuple(1, 7), T.getDXILVersion());546 EXPECT_EQ(Triple::Mesh, T.getEnvironment());547 548 T = Triple("dxilv1.8-unknown-shadermodel6.8-amplification");549 EXPECT_EQ(Triple::dxil, T.getArch());550 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());551 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());552 EXPECT_EQ(Triple::ShaderModel, T.getOS());553 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());554 EXPECT_EQ(Triple::Amplification, T.getEnvironment());555 556 T = Triple("dxilv1.0-unknown-shadermodel1.0-rootsignature");557 EXPECT_EQ(Triple::dxil, T.getArch());558 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());559 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());560 EXPECT_EQ(Triple::ShaderModel, T.getOS());561 EXPECT_EQ(VersionTuple(1, 0), T.getDXILVersion());562 EXPECT_EQ(Triple::RootSignature, T.getEnvironment());563 564 T = Triple("dxilv1.1-unknown-shadermodel1.1-rootsignature");565 EXPECT_EQ(Triple::dxil, T.getArch());566 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());567 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());568 EXPECT_EQ(Triple::ShaderModel, T.getOS());569 EXPECT_EQ(VersionTuple(1, 1), T.getDXILVersion());570 EXPECT_EQ(Triple::RootSignature, T.getEnvironment());571 572 T = Triple("dxilv1.8-unknown-shadermodel6.15-library");573 EXPECT_EQ(Triple::dxil, T.getArch());574 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());575 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());576 EXPECT_EQ(Triple::ShaderModel, T.getOS());577 EXPECT_EQ(VersionTuple(1, 8), T.getDXILVersion());578 579 T = Triple("dxilv1.9-unknown-shadermodel6.15-library");580 EXPECT_EQ(Triple::dxil, T.getArch());581 EXPECT_EQ(Triple::DXILSubArch_v1_9, T.getSubArch());582 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());583 EXPECT_EQ(Triple::ShaderModel, T.getOS());584 EXPECT_EQ(VersionTuple(1, 9), T.getDXILVersion());585 586 T = Triple("x86_64-unknown-fuchsia");587 EXPECT_EQ(Triple::x86_64, T.getArch());588 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());589 EXPECT_EQ(Triple::Fuchsia, T.getOS());590 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());591 592 T = Triple("x86_64-unknown-hermit");593 EXPECT_EQ(Triple::x86_64, T.getArch());594 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());595 EXPECT_EQ(Triple::HermitCore, T.getOS());596 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());597 598 T = Triple("x86_64-unknown-uefi");599 EXPECT_EQ(Triple::x86_64, T.getArch());600 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());601 EXPECT_EQ(Triple::UEFI, T.getOS());602 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());603 EXPECT_EQ(Triple::COFF, T.getObjectFormat());604 605 T = Triple("wasm32-unknown-unknown");606 EXPECT_EQ(Triple::wasm32, T.getArch());607 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());608 EXPECT_EQ(Triple::UnknownOS, T.getOS());609 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());610 611 T = Triple("wasm32-unknown-wasi");612 EXPECT_EQ(Triple::wasm32, T.getArch());613 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());614 EXPECT_EQ(Triple::WASI, T.getOS());615 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());616 617 T = Triple("wasm64-unknown-unknown");618 EXPECT_EQ(Triple::wasm64, T.getArch());619 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());620 EXPECT_EQ(Triple::UnknownOS, T.getOS());621 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());622 623 T = Triple("wasm64-unknown-wasi");624 EXPECT_EQ(Triple::wasm64, T.getArch());625 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());626 EXPECT_EQ(Triple::WASI, T.getOS());627 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());628 629 T = Triple("avr-unknown-unknown");630 EXPECT_EQ(Triple::avr, T.getArch());631 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());632 EXPECT_EQ(Triple::UnknownOS, T.getOS());633 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());634 635 T = Triple("avr");636 EXPECT_EQ(Triple::avr, T.getArch());637 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());638 EXPECT_EQ(Triple::UnknownOS, T.getOS());639 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());640 641 T = Triple("lanai-unknown-unknown");642 EXPECT_EQ(Triple::lanai, T.getArch());643 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());644 EXPECT_EQ(Triple::UnknownOS, T.getOS());645 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());646 647 T = Triple("lanai");648 EXPECT_EQ(Triple::lanai, T.getArch());649 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());650 EXPECT_EQ(Triple::UnknownOS, T.getOS());651 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());652 653 T = Triple("amdgcn-mesa-mesa3d");654 EXPECT_EQ(Triple::amdgcn, T.getArch());655 EXPECT_EQ(Triple::Mesa, T.getVendor());656 EXPECT_EQ(Triple::Mesa3D, T.getOS());657 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());658 659 T = Triple("amdgcn-amd-amdhsa");660 EXPECT_EQ(Triple::amdgcn, T.getArch());661 EXPECT_EQ(Triple::AMD, T.getVendor());662 EXPECT_EQ(Triple::AMDHSA, T.getOS());663 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());664 665 T = Triple("amdgcn-amd-amdpal");666 EXPECT_EQ(Triple::amdgcn, T.getArch());667 EXPECT_EQ(Triple::AMD, T.getVendor());668 EXPECT_EQ(Triple::AMDPAL, T.getOS());669 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());670 671 T = Triple("ve-unknown-linux");672 EXPECT_EQ(Triple::ve, T.getArch());673 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());674 EXPECT_EQ(Triple::Linux, T.getOS());675 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());676 677 T = Triple("csky-unknown-unknown");678 EXPECT_EQ(Triple::csky, T.getArch());679 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());680 EXPECT_EQ(Triple::UnknownOS, T.getOS());681 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());682 683 T = Triple("csky-unknown-linux");684 EXPECT_EQ(Triple::csky, T.getArch());685 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());686 EXPECT_EQ(Triple::Linux, T.getOS());687 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());688 689 T = Triple("loongarch32-unknown-unknown");690 EXPECT_EQ(Triple::loongarch32, T.getArch());691 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());692 EXPECT_EQ(Triple::UnknownOS, T.getOS());693 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());694 695 T = Triple("loongarch32-unknown-linux-gnu");696 EXPECT_EQ(Triple::loongarch32, T.getArch());697 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());698 EXPECT_EQ(Triple::Linux, T.getOS());699 EXPECT_EQ(Triple::GNU, T.getEnvironment());700 701 T = Triple("loongarch32-unknown-linux-gnuf32");702 EXPECT_EQ(Triple::loongarch32, T.getArch());703 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());704 EXPECT_EQ(Triple::Linux, T.getOS());705 EXPECT_EQ(Triple::GNUF32, T.getEnvironment());706 707 T = Triple("loongarch32-unknown-linux-gnuf64");708 EXPECT_EQ(Triple::loongarch32, T.getArch());709 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());710 EXPECT_EQ(Triple::Linux, T.getOS());711 EXPECT_EQ(Triple::GNUF64, T.getEnvironment());712 713 T = Triple("loongarch32-unknown-linux-gnusf");714 EXPECT_EQ(Triple::loongarch32, T.getArch());715 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());716 EXPECT_EQ(Triple::Linux, T.getOS());717 EXPECT_EQ(Triple::GNUSF, T.getEnvironment());718 719 T = Triple("loongarch32-unknown-linux-musl");720 EXPECT_EQ(Triple::loongarch32, T.getArch());721 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());722 EXPECT_EQ(Triple::Linux, T.getOS());723 EXPECT_EQ(Triple::Musl, T.getEnvironment());724 725 T = Triple("loongarch32-unknown-linux-muslf32");726 EXPECT_EQ(Triple::loongarch32, T.getArch());727 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());728 EXPECT_EQ(Triple::Linux, T.getOS());729 EXPECT_EQ(Triple::MuslF32, T.getEnvironment());730 731 T = Triple("loongarch32-unknown-linux-muslsf");732 EXPECT_EQ(Triple::loongarch32, T.getArch());733 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());734 EXPECT_EQ(Triple::Linux, T.getOS());735 EXPECT_EQ(Triple::MuslSF, T.getEnvironment());736 737 T = Triple("loongarch64-unknown-linux");738 EXPECT_EQ(Triple::loongarch64, T.getArch());739 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());740 EXPECT_EQ(Triple::Linux, T.getOS());741 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());742 743 T = Triple("loongarch64-unknown-linux-gnu");744 EXPECT_EQ(Triple::loongarch64, T.getArch());745 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());746 EXPECT_EQ(Triple::Linux, T.getOS());747 EXPECT_EQ(Triple::GNU, T.getEnvironment());748 749 T = Triple("loongarch64-unknown-linux-gnuf32");750 EXPECT_EQ(Triple::loongarch64, T.getArch());751 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());752 EXPECT_EQ(Triple::Linux, T.getOS());753 EXPECT_EQ(Triple::GNUF32, T.getEnvironment());754 755 T = Triple("loongarch64-unknown-linux-gnuf64");756 EXPECT_EQ(Triple::loongarch64, T.getArch());757 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());758 EXPECT_EQ(Triple::Linux, T.getOS());759 EXPECT_EQ(Triple::GNUF64, T.getEnvironment());760 761 T = Triple("loongarch64-unknown-linux-gnusf");762 EXPECT_EQ(Triple::loongarch64, T.getArch());763 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());764 EXPECT_EQ(Triple::Linux, T.getOS());765 EXPECT_EQ(Triple::GNUSF, T.getEnvironment());766 767 T = Triple("loongarch64-unknown-linux-musl");768 EXPECT_EQ(Triple::loongarch64, T.getArch());769 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());770 EXPECT_EQ(Triple::Linux, T.getOS());771 EXPECT_EQ(Triple::Musl, T.getEnvironment());772 773 T = Triple("loongarch64-unknown-linux-muslf32");774 EXPECT_EQ(Triple::loongarch64, T.getArch());775 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());776 EXPECT_EQ(Triple::Linux, T.getOS());777 EXPECT_EQ(Triple::MuslF32, T.getEnvironment());778 779 T = Triple("loongarch64-unknown-linux-muslsf");780 EXPECT_EQ(Triple::loongarch64, T.getArch());781 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());782 EXPECT_EQ(Triple::Linux, T.getOS());783 EXPECT_EQ(Triple::MuslSF, T.getEnvironment());784 785 T = Triple("riscv32-unknown-unknown");786 EXPECT_EQ(Triple::riscv32, T.getArch());787 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());788 EXPECT_EQ(Triple::UnknownOS, T.getOS());789 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());790 791 T = Triple("riscv64-meta-unknown-mtia");792 EXPECT_EQ(Triple::riscv64, T.getArch());793 EXPECT_EQ(Triple::Meta, T.getVendor());794 EXPECT_EQ(Triple::UnknownOS, T.getOS());795 EXPECT_EQ(Triple::MTIA, T.getEnvironment());796 797 T = Triple("riscv64-unknown-linux");798 EXPECT_EQ(Triple::riscv64, T.getArch());799 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());800 EXPECT_EQ(Triple::Linux, T.getOS());801 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());802 803 T = Triple("riscv64-unknown-freebsd");804 EXPECT_EQ(Triple::riscv64, T.getArch());805 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());806 EXPECT_EQ(Triple::FreeBSD, T.getOS());807 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());808 809 T = Triple("riscv64-suse-linux");810 EXPECT_EQ(Triple::riscv64, T.getArch());811 EXPECT_EQ(Triple::SUSE, T.getVendor());812 EXPECT_EQ(Triple::Linux, T.getOS());813 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());814 815 T = Triple("riscv64-unknown-hurd-gnu");816 EXPECT_EQ(Triple::riscv64, T.getArch());817 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());818 EXPECT_EQ(Triple::Hurd, T.getOS());819 EXPECT_EQ(Triple::GNU, T.getEnvironment());820 821 T = Triple("armv7hl-suse-linux-gnueabi");822 EXPECT_EQ(Triple::arm, T.getArch());823 EXPECT_EQ(Triple::SUSE, T.getVendor());824 EXPECT_EQ(Triple::Linux, T.getOS());825 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());826 827 T = Triple("i586-pc-haiku");828 EXPECT_EQ(Triple::x86, T.getArch());829 EXPECT_EQ(Triple::PC, T.getVendor());830 EXPECT_EQ(Triple::Haiku, T.getOS());831 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());832 833 T = Triple("x86_64-unknown-haiku");834 EXPECT_EQ(Triple::x86_64, T.getArch());835 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());836 EXPECT_EQ(Triple::Haiku, T.getOS());837 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());838 839 T = Triple("mips-mti-linux-gnu");840 EXPECT_EQ(Triple::mips, T.getArch());841 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());842 EXPECT_EQ(Triple::Linux, T.getOS());843 EXPECT_EQ(Triple::GNU, T.getEnvironment());844 845 T = Triple("mipsel-img-linux-gnu");846 EXPECT_EQ(Triple::mipsel, T.getArch());847 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());848 EXPECT_EQ(Triple::Linux, T.getOS());849 EXPECT_EQ(Triple::GNU, T.getEnvironment());850 851 T = Triple("mips64-mti-linux-gnu");852 EXPECT_EQ(Triple::mips64, T.getArch());853 EXPECT_EQ(Triple::MipsTechnologies, T.getVendor());854 EXPECT_EQ(Triple::Linux, T.getOS());855 EXPECT_EQ(Triple::GNU, T.getEnvironment());856 857 T = Triple("mips64el-img-linux-gnu");858 EXPECT_EQ(Triple::mips64el, T.getArch());859 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());860 EXPECT_EQ(Triple::Linux, T.getOS());861 EXPECT_EQ(Triple::GNU, T.getEnvironment());862 863 T = Triple("mips64el-img-linux-gnuabin32");864 EXPECT_EQ(Triple::mips64el, T.getArch());865 EXPECT_EQ(Triple::ImaginationTechnologies, T.getVendor());866 EXPECT_EQ(Triple::Linux, T.getOS());867 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());868 869 T = Triple("mips64el-unknown-linux-gnuabi64");870 EXPECT_EQ(Triple::mips64el, T.getArch());871 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());872 EXPECT_EQ(Triple::Linux, T.getOS());873 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());874 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());875 T = Triple("mips64el");876 EXPECT_EQ(Triple::mips64el, T.getArch());877 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());878 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());879 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());880 881 T = Triple("mips64-unknown-linux-gnuabi64");882 EXPECT_EQ(Triple::mips64, T.getArch());883 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());884 EXPECT_EQ(Triple::Linux, T.getOS());885 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());886 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());887 T = Triple("mips64");888 EXPECT_EQ(Triple::mips64, T.getArch());889 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());890 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());891 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());892 893 T = Triple("mipsisa64r6el-unknown-linux-gnuabi64");894 EXPECT_EQ(Triple::mips64el, T.getArch());895 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());896 EXPECT_EQ(Triple::Linux, T.getOS());897 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());898 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());899 T = Triple("mips64r6el");900 EXPECT_EQ(Triple::mips64el, T.getArch());901 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());902 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());903 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());904 T = Triple("mipsisa64r6el");905 EXPECT_EQ(Triple::mips64el, T.getArch());906 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());907 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());908 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());909 910 T = Triple("mipsisa64r6-unknown-linux-gnuabi64");911 EXPECT_EQ(Triple::mips64, T.getArch());912 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());913 EXPECT_EQ(Triple::Linux, T.getOS());914 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());915 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());916 T = Triple("mips64r6");917 EXPECT_EQ(Triple::mips64, T.getArch());918 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());919 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());920 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());921 T = Triple("mipsisa64r6");922 EXPECT_EQ(Triple::mips64, T.getArch());923 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());924 EXPECT_EQ(Triple::GNUABI64, T.getEnvironment());925 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());926 927 T = Triple("mips64el-unknown-linux-gnuabin32");928 EXPECT_EQ(Triple::mips64el, T.getArch());929 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());930 EXPECT_EQ(Triple::Linux, T.getOS());931 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());932 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());933 T = Triple("mipsn32el");934 EXPECT_EQ(Triple::mips64el, T.getArch());935 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());936 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());937 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());938 939 T = Triple("mips64-unknown-linux-gnuabin32");940 EXPECT_EQ(Triple::mips64, T.getArch());941 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());942 EXPECT_EQ(Triple::Linux, T.getOS());943 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());944 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());945 T = Triple("mipsn32");946 EXPECT_EQ(Triple::mips64, T.getArch());947 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());948 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());949 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());950 951 T = Triple("mipsisa64r6el-unknown-linux-gnuabin32");952 EXPECT_EQ(Triple::mips64el, T.getArch());953 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());954 EXPECT_EQ(Triple::Linux, T.getOS());955 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());956 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());957 T = Triple("mipsn32r6el");958 EXPECT_EQ(Triple::mips64el, T.getArch());959 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());960 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());961 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());962 963 T = Triple("mipsisa64r6-unknown-linux-gnuabin32");964 EXPECT_EQ(Triple::mips64, T.getArch());965 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());966 EXPECT_EQ(Triple::Linux, T.getOS());967 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());968 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());969 T = Triple("mipsn32r6");970 EXPECT_EQ(Triple::mips64, T.getArch());971 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());972 EXPECT_EQ(Triple::GNUABIN32, T.getEnvironment());973 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());974 975 T = Triple("mipsel-unknown-linux-gnu");976 EXPECT_EQ(Triple::mipsel, T.getArch());977 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());978 EXPECT_EQ(Triple::Linux, T.getOS());979 EXPECT_EQ(Triple::GNU, T.getEnvironment());980 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());981 T = Triple("mipsel");982 EXPECT_EQ(Triple::mipsel, T.getArch());983 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());984 EXPECT_EQ(Triple::GNU, T.getEnvironment());985 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());986 987 T = Triple("mips-unknown-linux-gnu");988 EXPECT_EQ(Triple::mips, T.getArch());989 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());990 EXPECT_EQ(Triple::Linux, T.getOS());991 EXPECT_EQ(Triple::GNU, T.getEnvironment());992 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());993 T = Triple("mips");994 EXPECT_EQ(Triple::mips, T.getArch());995 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());996 EXPECT_EQ(Triple::GNU, T.getEnvironment());997 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());998 999 T = Triple("mipsisa32r6el-unknown-linux-gnu");1000 EXPECT_EQ(Triple::mipsel, T.getArch());1001 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1002 EXPECT_EQ(Triple::Linux, T.getOS());1003 EXPECT_EQ(Triple::GNU, T.getEnvironment());1004 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1005 T = Triple("mipsr6el");1006 EXPECT_EQ(Triple::mipsel, T.getArch());1007 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1008 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1009 T = Triple("mipsisa32r6el");1010 EXPECT_EQ(Triple::mipsel, T.getArch());1011 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1012 EXPECT_EQ(Triple::GNU, T.getEnvironment());1013 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1014 1015 T = Triple("mipsisa32r6-unknown-linux-gnu");1016 EXPECT_EQ(Triple::mips, T.getArch());1017 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1018 EXPECT_EQ(Triple::Linux, T.getOS());1019 EXPECT_EQ(Triple::GNU, T.getEnvironment());1020 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1021 T = Triple("mipsr6");1022 EXPECT_EQ(Triple::mips, T.getArch());1023 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1024 EXPECT_EQ(Triple::GNU, T.getEnvironment());1025 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1026 T = Triple("mipsisa32r6");1027 EXPECT_EQ(Triple::mips, T.getArch());1028 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1029 EXPECT_EQ(Triple::GNU, T.getEnvironment());1030 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1031 1032 T = Triple("mips64el-unknown-linux-muslabi64");1033 EXPECT_EQ(Triple::mips64el, T.getArch());1034 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1035 EXPECT_EQ(Triple::Linux, T.getOS());1036 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());1037 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1038 1039 T = Triple("mips64-unknown-linux-muslabi64");1040 EXPECT_EQ(Triple::mips64, T.getArch());1041 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1042 EXPECT_EQ(Triple::Linux, T.getOS());1043 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());1044 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1045 1046 T = Triple("mipsisa64r6el-unknown-linux-muslabi64");1047 EXPECT_EQ(Triple::mips64el, T.getArch());1048 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1049 EXPECT_EQ(Triple::Linux, T.getOS());1050 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());1051 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1052 1053 T = Triple("mipsisa64r6-unknown-linux-muslabi64");1054 EXPECT_EQ(Triple::mips64, T.getArch());1055 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1056 EXPECT_EQ(Triple::Linux, T.getOS());1057 EXPECT_EQ(Triple::MuslABI64, T.getEnvironment());1058 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1059 1060 T = Triple("mips64el-unknown-linux-muslabin32");1061 EXPECT_EQ(Triple::mips64el, T.getArch());1062 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1063 EXPECT_EQ(Triple::Linux, T.getOS());1064 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());1065 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1066 1067 T = Triple("mips64-unknown-linux-muslabin32");1068 EXPECT_EQ(Triple::mips64, T.getArch());1069 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1070 EXPECT_EQ(Triple::Linux, T.getOS());1071 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());1072 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1073 1074 T = Triple("mipsisa64r6el-unknown-linux-muslabin32");1075 EXPECT_EQ(Triple::mips64el, T.getArch());1076 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1077 EXPECT_EQ(Triple::Linux, T.getOS());1078 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());1079 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1080 1081 T = Triple("mipsisa64r6-unknown-linux-muslabin32");1082 EXPECT_EQ(Triple::mips64, T.getArch());1083 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1084 EXPECT_EQ(Triple::Linux, T.getOS());1085 EXPECT_EQ(Triple::MuslABIN32, T.getEnvironment());1086 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1087 1088 T = Triple("mipsel-unknown-linux-musl");1089 EXPECT_EQ(Triple::mipsel, T.getArch());1090 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1091 EXPECT_EQ(Triple::Linux, T.getOS());1092 EXPECT_EQ(Triple::Musl, T.getEnvironment());1093 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1094 1095 T = Triple("mips-unknown-linux-musl");1096 EXPECT_EQ(Triple::mips, T.getArch());1097 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1098 EXPECT_EQ(Triple::Linux, T.getOS());1099 EXPECT_EQ(Triple::Musl, T.getEnvironment());1100 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1101 1102 T = Triple("mipsisa32r6el-unknown-linux-musl");1103 EXPECT_EQ(Triple::mipsel, T.getArch());1104 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1105 EXPECT_EQ(Triple::Linux, T.getOS());1106 EXPECT_EQ(Triple::Musl, T.getEnvironment());1107 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1108 1109 T = Triple("mipsisa32r6-unknown-linux-musl");1110 EXPECT_EQ(Triple::mips, T.getArch());1111 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1112 EXPECT_EQ(Triple::Linux, T.getOS());1113 EXPECT_EQ(Triple::Musl, T.getEnvironment());1114 EXPECT_EQ(Triple::MipsSubArch_r6, T.getSubArch());1115 1116 T = Triple("arm-oe-linux-gnueabi");1117 EXPECT_EQ(Triple::arm, T.getArch());1118 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());1119 EXPECT_EQ(Triple::Linux, T.getOS());1120 EXPECT_EQ(Triple::GNUEABI, T.getEnvironment());1121 1122 T = Triple("aarch64-oe-linux");1123 EXPECT_EQ(Triple::aarch64, T.getArch());1124 EXPECT_EQ(Triple::OpenEmbedded, T.getVendor());1125 EXPECT_EQ(Triple::Linux, T.getOS());1126 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1127 EXPECT_TRUE(T.isArch64Bit());1128 1129 T = Triple("arm64_32-apple-ios");1130 EXPECT_EQ(Triple::aarch64_32, T.getArch());1131 EXPECT_EQ(Triple::IOS, T.getOS());1132 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1133 EXPECT_TRUE(T.isArch32Bit());1134 1135 T = Triple("dxil-unknown-shadermodel-pixel");1136 EXPECT_EQ(Triple::dxil, T.getArch());1137 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1138 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1139 EXPECT_EQ(Triple::ShaderModel, T.getOS());1140 EXPECT_EQ(Triple::Pixel, T.getEnvironment());1141 EXPECT_FALSE(T.supportsCOMDAT());1142 1143 T = Triple("dxil-unknown-shadermodel-vertex");1144 EXPECT_EQ(Triple::dxil, T.getArch());1145 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1146 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1147 EXPECT_EQ(Triple::ShaderModel, T.getOS());1148 EXPECT_EQ(Triple::Vertex, T.getEnvironment());1149 EXPECT_FALSE(T.supportsCOMDAT());1150 1151 T = Triple("dxil-unknown-shadermodel-geometry");1152 EXPECT_EQ(Triple::dxil, T.getArch());1153 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1154 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1155 EXPECT_EQ(Triple::ShaderModel, T.getOS());1156 EXPECT_EQ(Triple::Geometry, T.getEnvironment());1157 EXPECT_FALSE(T.supportsCOMDAT());1158 1159 T = Triple("dxil-unknown-shadermodel-hull");1160 EXPECT_EQ(Triple::dxil, T.getArch());1161 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1162 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1163 EXPECT_EQ(Triple::ShaderModel, T.getOS());1164 EXPECT_EQ(Triple::Hull, T.getEnvironment());1165 EXPECT_FALSE(T.supportsCOMDAT());1166 1167 T = Triple("dxil-unknown-shadermodel-domain");1168 EXPECT_EQ(Triple::dxil, T.getArch());1169 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1170 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1171 EXPECT_EQ(Triple::ShaderModel, T.getOS());1172 EXPECT_EQ(Triple::Domain, T.getEnvironment());1173 EXPECT_FALSE(T.supportsCOMDAT());1174 1175 T = Triple("dxil-unknown-shadermodel-compute");1176 EXPECT_EQ(Triple::dxil, T.getArch());1177 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1178 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1179 EXPECT_EQ(Triple::ShaderModel, T.getOS());1180 EXPECT_EQ(Triple::Compute, T.getEnvironment());1181 EXPECT_FALSE(T.supportsCOMDAT());1182 1183 T = Triple("dxil-unknown-shadermodel-library");1184 EXPECT_EQ(Triple::dxil, T.getArch());1185 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1186 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1187 EXPECT_EQ(Triple::ShaderModel, T.getOS());1188 EXPECT_EQ(Triple::Library, T.getEnvironment());1189 EXPECT_FALSE(T.supportsCOMDAT());1190 1191 T = Triple("dxil-unknown-shadermodel-raygeneration");1192 EXPECT_EQ(Triple::dxil, T.getArch());1193 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1194 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1195 EXPECT_EQ(Triple::ShaderModel, T.getOS());1196 EXPECT_EQ(Triple::RayGeneration, T.getEnvironment());1197 EXPECT_FALSE(T.supportsCOMDAT());1198 1199 T = Triple("dxil-unknown-shadermodel-intersection");1200 EXPECT_EQ(Triple::dxil, T.getArch());1201 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1202 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1203 EXPECT_EQ(Triple::ShaderModel, T.getOS());1204 EXPECT_EQ(Triple::Intersection, T.getEnvironment());1205 EXPECT_FALSE(T.supportsCOMDAT());1206 1207 T = Triple("dxil-unknown-shadermodel-anyhit");1208 EXPECT_EQ(Triple::dxil, T.getArch());1209 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1210 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1211 EXPECT_EQ(Triple::ShaderModel, T.getOS());1212 EXPECT_EQ(Triple::AnyHit, T.getEnvironment());1213 EXPECT_FALSE(T.supportsCOMDAT());1214 1215 T = Triple("dxil-unknown-shadermodel-closesthit");1216 EXPECT_EQ(Triple::dxil, T.getArch());1217 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1218 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1219 EXPECT_EQ(Triple::ShaderModel, T.getOS());1220 EXPECT_EQ(Triple::ClosestHit, T.getEnvironment());1221 EXPECT_FALSE(T.supportsCOMDAT());1222 1223 T = Triple("dxil-unknown-shadermodel-miss");1224 EXPECT_EQ(Triple::dxil, T.getArch());1225 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1226 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1227 EXPECT_EQ(Triple::ShaderModel, T.getOS());1228 EXPECT_EQ(Triple::Miss, T.getEnvironment());1229 EXPECT_FALSE(T.supportsCOMDAT());1230 1231 T = Triple("dxil-unknown-shadermodel-callable");1232 EXPECT_EQ(Triple::dxil, T.getArch());1233 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1234 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1235 EXPECT_EQ(Triple::ShaderModel, T.getOS());1236 EXPECT_EQ(Triple::Callable, T.getEnvironment());1237 EXPECT_FALSE(T.supportsCOMDAT());1238 1239 T = Triple("dxil-unknown-shadermodel-mesh");1240 EXPECT_EQ(Triple::dxil, T.getArch());1241 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1242 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1243 EXPECT_EQ(Triple::ShaderModel, T.getOS());1244 EXPECT_EQ(Triple::Mesh, T.getEnvironment());1245 EXPECT_FALSE(T.supportsCOMDAT());1246 1247 T = Triple("dxil-unknown-shadermodel-amplification");1248 EXPECT_EQ(Triple::dxil, T.getArch());1249 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1250 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1251 EXPECT_EQ(Triple::ShaderModel, T.getOS());1252 EXPECT_EQ(Triple::Amplification, T.getEnvironment());1253 EXPECT_FALSE(T.supportsCOMDAT());1254 1255 T = Triple("dxilv1.0-unknown-unknown");1256 EXPECT_EQ(Triple::dxil, T.getArch());1257 EXPECT_EQ(Triple::DXILSubArch_v1_0, T.getSubArch());1258 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1259 EXPECT_EQ(Triple::UnknownOS, T.getOS());1260 1261 T = Triple("dxilv1.1-unknown-unknown");1262 EXPECT_EQ(Triple::dxil, T.getArch());1263 EXPECT_EQ(Triple::DXILSubArch_v1_1, T.getSubArch());1264 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1265 EXPECT_EQ(Triple::UnknownOS, T.getOS());1266 1267 T = Triple("dxilv1.2-unknown-unknown");1268 EXPECT_EQ(Triple::dxil, T.getArch());1269 EXPECT_EQ(Triple::DXILSubArch_v1_2, T.getSubArch());1270 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1271 EXPECT_EQ(Triple::UnknownOS, T.getOS());1272 1273 T = Triple("dxilv1.3-unknown-unknown");1274 EXPECT_EQ(Triple::dxil, T.getArch());1275 EXPECT_EQ(Triple::DXILSubArch_v1_3, T.getSubArch());1276 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1277 EXPECT_EQ(Triple::UnknownOS, T.getOS());1278 1279 T = Triple("dxilv1.4-unknown-unknown");1280 EXPECT_EQ(Triple::dxil, T.getArch());1281 EXPECT_EQ(Triple::DXILSubArch_v1_4, T.getSubArch());1282 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1283 EXPECT_EQ(Triple::UnknownOS, T.getOS());1284 1285 T = Triple("dxilv1.5-unknown-unknown");1286 EXPECT_EQ(Triple::dxil, T.getArch());1287 EXPECT_EQ(Triple::DXILSubArch_v1_5, T.getSubArch());1288 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1289 EXPECT_EQ(Triple::UnknownOS, T.getOS());1290 1291 T = Triple("dxilv1.6-unknown-unknown");1292 EXPECT_EQ(Triple::dxil, T.getArch());1293 EXPECT_EQ(Triple::DXILSubArch_v1_6, T.getSubArch());1294 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1295 EXPECT_EQ(Triple::UnknownOS, T.getOS());1296 1297 T = Triple("dxilv1.7-unknown-unknown");1298 EXPECT_EQ(Triple::dxil, T.getArch());1299 EXPECT_EQ(Triple::DXILSubArch_v1_7, T.getSubArch());1300 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1301 EXPECT_EQ(Triple::UnknownOS, T.getOS());1302 1303 T = Triple("dxilv1.8-unknown-unknown");1304 EXPECT_EQ(Triple::dxil, T.getArch());1305 EXPECT_EQ(Triple::DXILSubArch_v1_8, T.getSubArch());1306 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1307 EXPECT_EQ(Triple::UnknownOS, T.getOS());1308 1309 T = Triple("dxilv1.9-unknown-unknown");1310 EXPECT_EQ(Triple::dxil, T.getArch());1311 EXPECT_EQ(Triple::DXILSubArch_v1_9, T.getSubArch());1312 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1313 EXPECT_EQ(Triple::UnknownOS, T.getOS());1314 1315 // Check specification of unknown SubArch results in1316 // unknown architecture.1317 T = Triple("dxilv1.999-unknown-unknown");1318 EXPECT_EQ(Triple::UnknownArch, T.getArch());1319 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1320 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1321 EXPECT_EQ(Triple::UnknownOS, T.getOS());1322 1323 T = Triple("dxil-unknown-unknown");1324 EXPECT_EQ(Triple::dxil, T.getArch());1325 EXPECT_EQ(Triple::NoSubArch, T.getSubArch());1326 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1327 EXPECT_EQ(Triple::UnknownOS, T.getOS());1328 1329 T = Triple("xtensa");1330 EXPECT_EQ(Triple::xtensa, T.getArch());1331 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1332 EXPECT_EQ(Triple::UnknownOS, T.getOS());1333 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1334 1335 T = Triple("xtensa-unknown-unknown");1336 EXPECT_EQ(Triple::xtensa, T.getArch());1337 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1338 EXPECT_EQ(Triple::UnknownOS, T.getOS());1339 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1340 1341 T = Triple("arm-unknown-linux-ohos");1342 EXPECT_EQ(Triple::arm, T.getArch());1343 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1344 EXPECT_EQ(Triple::Linux, T.getOS());1345 EXPECT_EQ(Triple::OpenHOS, T.getEnvironment());1346 1347 T = Triple("arm-unknown-liteos");1348 EXPECT_EQ(Triple::arm, T.getArch());1349 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1350 EXPECT_EQ(Triple::LiteOS, T.getOS());1351 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1352 1353 T = Triple("x86_64-pc-serenity");1354 EXPECT_EQ(Triple::x86_64, T.getArch());1355 EXPECT_EQ(Triple::PC, T.getVendor());1356 EXPECT_EQ(Triple::Serenity, T.getOS());1357 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1358 1359 T = Triple("aarch64-pc-serenity");1360 EXPECT_EQ(Triple::aarch64, T.getArch());1361 EXPECT_EQ(Triple::PC, T.getVendor());1362 EXPECT_EQ(Triple::Serenity, T.getOS());1363 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1364 1365 T = Triple("aarch64-unknown-linux-pauthtest");1366 EXPECT_EQ(Triple::aarch64, T.getArch());1367 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1368 EXPECT_EQ(Triple::Linux, T.getOS());1369 EXPECT_EQ(Triple::PAuthTest, T.getEnvironment());1370 1371 // Gentoo time64 triples1372 T = Triple("i686-pc-linux-gnut64");1373 EXPECT_EQ(Triple::x86, T.getArch());1374 EXPECT_EQ(Triple::PC, T.getVendor());1375 EXPECT_EQ(Triple::Linux, T.getOS());1376 EXPECT_EQ(Triple::GNUT64, T.getEnvironment());1377 EXPECT_TRUE(T.isTime64ABI());1378 1379 T = Triple("armv5tel-softfloat-linux-gnueabit64");1380 EXPECT_EQ(Triple::arm, T.getArch());1381 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1382 EXPECT_EQ(Triple::Linux, T.getOS());1383 EXPECT_EQ(Triple::GNUEABIT64, T.getEnvironment());1384 EXPECT_TRUE(T.isTime64ABI());1385 1386 T = Triple("armv7a-unknown-linux-gnueabihft64");1387 EXPECT_EQ(Triple::arm, T.getArch());1388 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1389 EXPECT_EQ(Triple::Linux, T.getOS());1390 EXPECT_EQ(Triple::GNUEABIHFT64, T.getEnvironment());1391 EXPECT_TRUE(T.isTime64ABI());1392 EXPECT_TRUE(T.isHardFloatABI());1393 1394 T = Triple("x86_64-pc-linux-llvm");1395 EXPECT_EQ(Triple::x86_64, T.getArch());1396 EXPECT_EQ(Triple::PC, T.getVendor());1397 EXPECT_EQ(Triple::Linux, T.getOS());1398 EXPECT_EQ(Triple::LLVM, T.getEnvironment());1399 1400 T = Triple("spirv64-intel-unknown");1401 EXPECT_EQ(Triple::spirv64, T.getArch());1402 EXPECT_EQ(Triple::Intel, T.getVendor());1403 EXPECT_EQ(Triple::UnknownOS, T.getOS());1404 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1405 1406 T = Triple("aarch64-unknown-managarm-mlibc");1407 EXPECT_EQ(Triple::aarch64, T.getArch());1408 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1409 EXPECT_EQ(Triple::Managarm, T.getOS());1410 EXPECT_EQ(Triple::Mlibc, T.getEnvironment());1411 1412 T = Triple("x86_64-unknown-managarm-mlibc");1413 EXPECT_EQ(Triple::x86_64, T.getArch());1414 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1415 EXPECT_EQ(Triple::Managarm, T.getOS());1416 EXPECT_EQ(Triple::Mlibc, T.getEnvironment());1417 1418 T = Triple("riscv64-unknown-managarm-mlibc");1419 EXPECT_EQ(Triple::riscv64, T.getArch());1420 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1421 EXPECT_EQ(Triple::Managarm, T.getOS());1422 EXPECT_EQ(Triple::Mlibc, T.getEnvironment());1423 1424 T = Triple("huh");1425 EXPECT_EQ(Triple::UnknownArch, T.getArch());1426 1427 T = Triple("riscv32-unknown-cheriotrtos");1428 EXPECT_EQ(Triple::riscv32, T.getArch());1429 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1430 EXPECT_EQ(Triple::CheriotRTOS, T.getOS());1431}1432 1433static std::string Join(StringRef A, StringRef B, StringRef C) {1434 std::string Str = std::string(A);1435 Str += '-';1436 Str += B;1437 Str += '-';1438 Str += C;1439 return Str;1440}1441 1442static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {1443 std::string Str = std::string(A);1444 Str += '-';1445 Str += B;1446 Str += '-';1447 Str += C;1448 Str += '-';1449 Str += D;1450 return Str;1451}1452 1453TEST(TripleTest, Normalization) {1454 1455 EXPECT_EQ("unknown", Triple::normalize(""));1456 EXPECT_EQ("unknown-unknown", Triple::normalize("-"));1457 EXPECT_EQ("unknown-unknown-unknown", Triple::normalize("--"));1458 EXPECT_EQ("unknown-unknown-unknown-unknown", Triple::normalize("---"));1459 EXPECT_EQ("unknown-unknown-unknown-unknown-unknown",1460 Triple::normalize("----"));1461 1462 EXPECT_EQ("a", Triple::normalize("a"));1463 EXPECT_EQ("a-b", Triple::normalize("a-b"));1464 EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));1465 EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));1466 1467 EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));1468 EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));1469 EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));1470 EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));1471 1472 EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));1473 EXPECT_EQ("unknown-pc-b-c", Triple::normalize("pc-b-c"));1474 EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));1475 EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));1476 1477 EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));1478 EXPECT_EQ("unknown-unknown-linux-b-c", Triple::normalize("linux-b-c"));1479 EXPECT_EQ("a-unknown-linux-c", Triple::normalize("a-linux-c"));1480 1481 EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));1482 EXPECT_EQ("i386-pc-unknown", Triple::normalize("-pc-i386"));1483 EXPECT_EQ("unknown-pc-linux-c", Triple::normalize("linux-pc-c"));1484 EXPECT_EQ("unknown-pc-linux", Triple::normalize("linux-pc-"));1485 1486 EXPECT_EQ("i386", Triple::normalize("i386"));1487 EXPECT_EQ("unknown-pc", Triple::normalize("pc"));1488 EXPECT_EQ("unknown-unknown-linux", Triple::normalize("linux"));1489 1490 EXPECT_EQ("x86_64-unknown-linux-gnu", Triple::normalize("x86_64-gnu-linux"));1491 1492 EXPECT_EQ("a-unknown-unknown",1493 Triple::normalize("a", Triple::CanonicalForm::THREE_IDENT));1494 EXPECT_EQ("a-b-unknown",1495 Triple::normalize("a-b", Triple::CanonicalForm::THREE_IDENT));1496 EXPECT_EQ("a-b-c",1497 Triple::normalize("a-b-c", Triple::CanonicalForm::THREE_IDENT));1498 EXPECT_EQ("a-b-c",1499 Triple::normalize("a-b-c-d", Triple::CanonicalForm::THREE_IDENT));1500 EXPECT_EQ("a-b-c",1501 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::THREE_IDENT));1502 1503 EXPECT_EQ("a-unknown-unknown-unknown",1504 Triple::normalize("a", Triple::CanonicalForm::FOUR_IDENT));1505 EXPECT_EQ("a-b-unknown-unknown",1506 Triple::normalize("a-b", Triple::CanonicalForm::FOUR_IDENT));1507 EXPECT_EQ("a-b-c-unknown",1508 Triple::normalize("a-b-c", Triple::CanonicalForm::FOUR_IDENT));1509 EXPECT_EQ("a-b-c-d",1510 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FOUR_IDENT));1511 EXPECT_EQ("a-b-c-d",1512 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FOUR_IDENT));1513 1514 EXPECT_EQ("a-unknown-unknown-unknown-unknown",1515 Triple::normalize("a", Triple::CanonicalForm::FIVE_IDENT));1516 EXPECT_EQ("a-b-unknown-unknown-unknown",1517 Triple::normalize("a-b", Triple::CanonicalForm::FIVE_IDENT));1518 EXPECT_EQ("a-b-c-unknown-unknown",1519 Triple::normalize("a-b-c", Triple::CanonicalForm::FIVE_IDENT));1520 EXPECT_EQ("a-b-c-d-unknown",1521 Triple::normalize("a-b-c-d", Triple::CanonicalForm::FIVE_IDENT));1522 EXPECT_EQ("a-b-c-d-e",1523 Triple::normalize("a-b-c-d-e", Triple::CanonicalForm::FIVE_IDENT));1524 1525 EXPECT_EQ("i386-b-c-unknown",1526 Triple::normalize("i386-b-c", Triple::CanonicalForm::FOUR_IDENT));1527 EXPECT_EQ("i386-b-c-unknown-unknown",1528 Triple::normalize("i386-b-c", Triple::CanonicalForm::FIVE_IDENT));1529 1530 EXPECT_EQ("i386-a-c-unknown",1531 Triple::normalize("a-i386-c", Triple::CanonicalForm::FOUR_IDENT));1532 EXPECT_EQ("i386-a-c-unknown-unknown",1533 Triple::normalize("a-i386-c", Triple::CanonicalForm::FIVE_IDENT));1534 1535 EXPECT_EQ("i386-a-b-unknown",1536 Triple::normalize("a-b-i386", Triple::CanonicalForm::FOUR_IDENT));1537 EXPECT_EQ("i386-a-b-c",1538 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FOUR_IDENT));1539 1540 EXPECT_EQ("a-pc-c-unknown",1541 Triple::normalize("a-pc-c", Triple::CanonicalForm::FOUR_IDENT));1542 EXPECT_EQ("unknown-pc-b-c",1543 Triple::normalize("pc-b-c", Triple::CanonicalForm::FOUR_IDENT));1544 EXPECT_EQ("a-pc-b-unknown",1545 Triple::normalize("a-b-pc", Triple::CanonicalForm::FOUR_IDENT));1546 EXPECT_EQ("a-pc-b-c",1547 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FOUR_IDENT));1548 1549 EXPECT_EQ("a-b-linux-unknown",1550 Triple::normalize("a-b-linux", Triple::CanonicalForm::FOUR_IDENT));1551 // We lose `-c` here as expected.1552 EXPECT_EQ("unknown-unknown-linux-b",1553 Triple::normalize("linux-b-c", Triple::CanonicalForm::FOUR_IDENT));1554 EXPECT_EQ("a-unknown-linux-c",1555 Triple::normalize("a-linux-c", Triple::CanonicalForm::FOUR_IDENT));1556 1557 EXPECT_EQ("i386-pc-a-unknown",1558 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FOUR_IDENT));1559 EXPECT_EQ("i386-pc-unknown-unknown",1560 Triple::normalize("-pc-i386", Triple::CanonicalForm::FOUR_IDENT));1561 EXPECT_EQ("unknown-pc-linux-c",1562 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FOUR_IDENT));1563 EXPECT_EQ("unknown-pc-linux-unknown",1564 Triple::normalize("linux-pc-", Triple::CanonicalForm::FOUR_IDENT));1565 1566 EXPECT_EQ("i386-unknown-unknown-unknown",1567 Triple::normalize("i386", Triple::CanonicalForm::FOUR_IDENT));1568 EXPECT_EQ("unknown-pc-unknown-unknown",1569 Triple::normalize("pc", Triple::CanonicalForm::FOUR_IDENT));1570 EXPECT_EQ("unknown-unknown-linux-unknown",1571 Triple::normalize("linux", Triple::CanonicalForm::FOUR_IDENT));1572 1573 EXPECT_EQ(1574 "x86_64-unknown-linux-gnu",1575 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FOUR_IDENT));1576 1577 EXPECT_EQ("i386-a-b-unknown-unknown",1578 Triple::normalize("a-b-i386", Triple::CanonicalForm::FIVE_IDENT));1579 EXPECT_EQ("i386-a-b-c-unknown",1580 Triple::normalize("a-b-c-i386", Triple::CanonicalForm::FIVE_IDENT));1581 1582 EXPECT_EQ("a-pc-c-unknown-unknown",1583 Triple::normalize("a-pc-c", Triple::CanonicalForm::FIVE_IDENT));1584 EXPECT_EQ("unknown-pc-b-c-unknown",1585 Triple::normalize("pc-b-c", Triple::CanonicalForm::FIVE_IDENT));1586 EXPECT_EQ("a-pc-b-unknown-unknown",1587 Triple::normalize("a-b-pc", Triple::CanonicalForm::FIVE_IDENT));1588 EXPECT_EQ("a-pc-b-c-unknown",1589 Triple::normalize("a-b-c-pc", Triple::CanonicalForm::FIVE_IDENT));1590 1591 EXPECT_EQ("a-b-linux-unknown-unknown",1592 Triple::normalize("a-b-linux", Triple::CanonicalForm::FIVE_IDENT));1593 EXPECT_EQ("unknown-unknown-linux-b-c",1594 Triple::normalize("linux-b-c", Triple::CanonicalForm::FIVE_IDENT));1595 EXPECT_EQ("a-unknown-linux-c-unknown",1596 Triple::normalize("a-linux-c", Triple::CanonicalForm::FIVE_IDENT));1597 1598 EXPECT_EQ("i386-pc-a-unknown-unknown",1599 Triple::normalize("a-pc-i386", Triple::CanonicalForm::FIVE_IDENT));1600 EXPECT_EQ("i386-pc-unknown-unknown-unknown",1601 Triple::normalize("-pc-i386", Triple::CanonicalForm::FIVE_IDENT));1602 EXPECT_EQ("unknown-pc-linux-c-unknown",1603 Triple::normalize("linux-pc-c", Triple::CanonicalForm::FIVE_IDENT));1604 EXPECT_EQ("unknown-pc-linux-unknown-unknown",1605 Triple::normalize("linux-pc-", Triple::CanonicalForm::FIVE_IDENT));1606 1607 EXPECT_EQ("i386-unknown-unknown-unknown-unknown",1608 Triple::normalize("i386", Triple::CanonicalForm::FIVE_IDENT));1609 EXPECT_EQ("unknown-pc-unknown-unknown-unknown",1610 Triple::normalize("pc", Triple::CanonicalForm::FIVE_IDENT));1611 EXPECT_EQ("unknown-unknown-linux-unknown-unknown",1612 Triple::normalize("linux", Triple::CanonicalForm::FIVE_IDENT));1613 1614 EXPECT_EQ(1615 "x86_64-unknown-linux-gnu-unknown",1616 Triple::normalize("x86_64-gnu-linux", Triple::CanonicalForm::FIVE_IDENT));1617 1618 // Check that normalizing a permutated set of valid components returns a1619 // triple with the unpermuted components.1620 //1621 // We don't check every possible combination. For the set of architectures A,1622 // vendors V, operating systems O, and environments E, that would require |A|1623 // * |V| * |O| * |E| * 4! tests. Instead we check every option for any given1624 // slot and make sure it gets normalized to the correct position from every1625 // permutation. This should cover the core logic while being a tractable1626 // number of tests at (|A| + |V| + |O| + |E|) * 4!.1627 auto FirstArchType = Triple::ArchType(Triple::UnknownArch + 1);1628 auto FirstVendorType = Triple::VendorType(Triple::UnknownVendor + 1);1629 auto FirstOSType = Triple::OSType(Triple::UnknownOS + 1);1630 auto FirstEnvType = Triple::EnvironmentType(Triple::UnknownEnvironment + 1);1631 StringRef InitialC[] = {Triple::getArchTypeName(FirstArchType),1632 Triple::getVendorTypeName(FirstVendorType),1633 Triple::getOSTypeName(FirstOSType),1634 Triple::getEnvironmentTypeName(FirstEnvType)};1635 for (int Arch = FirstArchType; Arch <= Triple::LastArchType; ++Arch) {1636 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};1637 C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));1638 std::string E = Join(C[0], C[1], C[2]);1639 int I[] = {0, 1, 2};1640 do {1641 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));1642 } while (std::next_permutation(std::begin(I), std::end(I)));1643 std::string F = Join(C[0], C[1], C[2], C[3]);1644 int J[] = {0, 1, 2, 3};1645 do {1646 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));1647 } while (std::next_permutation(std::begin(J), std::end(J)));1648 }1649 for (int Vendor = FirstVendorType; Vendor <= Triple::LastVendorType;1650 ++Vendor) {1651 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};1652 C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));1653 std::string E = Join(C[0], C[1], C[2]);1654 int I[] = {0, 1, 2};1655 do {1656 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));1657 } while (std::next_permutation(std::begin(I), std::end(I)));1658 std::string F = Join(C[0], C[1], C[2], C[3]);1659 int J[] = {0, 1, 2, 3};1660 do {1661 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));1662 } while (std::next_permutation(std::begin(J), std::end(J)));1663 }1664 for (int OS = FirstOSType; OS <= Triple::LastOSType; ++OS) {1665 if (OS == Triple::Win32)1666 continue;1667 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};1668 C[2] = Triple::getOSTypeName(Triple::OSType(OS));1669 std::string E = Join(C[0], C[1], C[2]);1670 int I[] = {0, 1, 2};1671 do {1672 EXPECT_EQ(E, Triple::normalize(Join(C[I[0]], C[I[1]], C[I[2]])));1673 } while (std::next_permutation(std::begin(I), std::end(I)));1674 std::string F = Join(C[0], C[1], C[2], C[3]);1675 int J[] = {0, 1, 2, 3};1676 do {1677 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));1678 } while (std::next_permutation(std::begin(J), std::end(J)));1679 }1680 for (int Env = FirstEnvType; Env <= Triple::LastEnvironmentType; ++Env) {1681 StringRef C[] = {InitialC[0], InitialC[1], InitialC[2], InitialC[3]};1682 C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));1683 std::string F = Join(C[0], C[1], C[2], C[3]);1684 int J[] = {0, 1, 2, 3};1685 do {1686 EXPECT_EQ(F, Triple::normalize(Join(C[J[0]], C[J[1]], C[J[2]], C[J[3]])));1687 } while (std::next_permutation(std::begin(J), std::end(J)));1688 }1689 1690 // Various real-world funky triples. The value returned by GCC's config.sub1691 // is given in the comment.1692 EXPECT_EQ("i386-unknown-windows-gnu",1693 Triple::normalize("i386-mingw32")); // i386-pc-mingw321694 EXPECT_EQ("x86_64-unknown-linux-gnu",1695 Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu1696 EXPECT_EQ("i486-unknown-linux-gnu",1697 Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu1698 EXPECT_EQ("i386-redhat-linux",1699 Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu1700 EXPECT_EQ("i686-unknown-linux",1701 Triple::normalize("i686-linux")); // i686-pc-linux-gnu1702 EXPECT_EQ("arm-unknown-none-eabi",1703 Triple::normalize("arm-none-eabi")); // arm-none-eabi1704 EXPECT_EQ("ve-unknown-linux",1705 Triple::normalize("ve-linux")); // ve-linux1706 EXPECT_EQ("wasm32-unknown-wasi",1707 Triple::normalize("wasm32-wasi")); // wasm32-unknown-wasi1708 EXPECT_EQ("wasm64-unknown-wasi",1709 Triple::normalize("wasm64-wasi")); // wasm64-unknown-wasi1710}1711 1712TEST(TripleTest, MutateName) {1713 Triple T;1714 EXPECT_EQ(Triple::UnknownArch, T.getArch());1715 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());1716 EXPECT_EQ(Triple::UnknownOS, T.getOS());1717 EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());1718 1719 T.setArchName("i386");1720 EXPECT_EQ(Triple::x86, T.getArch());1721 EXPECT_EQ("i386--", T.getTriple());1722 1723 T.setVendorName("pc");1724 EXPECT_EQ(Triple::x86, T.getArch());1725 EXPECT_EQ(Triple::PC, T.getVendor());1726 EXPECT_EQ("i386-pc-", T.getTriple());1727 1728 T.setOSName("linux");1729 EXPECT_EQ(Triple::x86, T.getArch());1730 EXPECT_EQ(Triple::PC, T.getVendor());1731 EXPECT_EQ(Triple::Linux, T.getOS());1732 EXPECT_EQ("i386-pc-linux", T.getTriple());1733 1734 T.setEnvironmentName("gnu");1735 EXPECT_EQ(Triple::x86, T.getArch());1736 EXPECT_EQ(Triple::PC, T.getVendor());1737 EXPECT_EQ(Triple::Linux, T.getOS());1738 EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());1739 1740 T.setOSName("freebsd");1741 EXPECT_EQ(Triple::x86, T.getArch());1742 EXPECT_EQ(Triple::PC, T.getVendor());1743 EXPECT_EQ(Triple::FreeBSD, T.getOS());1744 EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());1745 1746 T.setOSAndEnvironmentName("darwin");1747 EXPECT_EQ(Triple::x86, T.getArch());1748 EXPECT_EQ(Triple::PC, T.getVendor());1749 EXPECT_EQ(Triple::Darwin, T.getOS());1750 EXPECT_EQ("i386-pc-darwin", T.getTriple());1751}1752 1753TEST(TripleTest, BitWidthChecks) {1754 Triple T;1755 EXPECT_FALSE(T.isArch16Bit());1756 EXPECT_FALSE(T.isArch32Bit());1757 EXPECT_FALSE(T.isArch64Bit());1758 EXPECT_EQ(T.getArchPointerBitWidth(), 0U);1759 1760 T.setArch(Triple::arm);1761 EXPECT_FALSE(T.isArch16Bit());1762 EXPECT_TRUE(T.isArch32Bit());1763 EXPECT_FALSE(T.isArch64Bit());1764 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1765 1766 T.setArch(Triple::hexagon);1767 EXPECT_FALSE(T.isArch16Bit());1768 EXPECT_TRUE(T.isArch32Bit());1769 EXPECT_FALSE(T.isArch64Bit());1770 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1771 1772 T.setArch(Triple::mips);1773 EXPECT_FALSE(T.isArch16Bit());1774 EXPECT_TRUE(T.isArch32Bit());1775 EXPECT_FALSE(T.isArch64Bit());1776 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1777 1778 T.setArch(Triple::mips64);1779 EXPECT_FALSE(T.isArch16Bit());1780 EXPECT_FALSE(T.isArch32Bit());1781 EXPECT_TRUE(T.isArch64Bit());1782 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1783 1784 T.setArch(Triple::msp430);1785 EXPECT_TRUE(T.isArch16Bit());1786 EXPECT_FALSE(T.isArch32Bit());1787 EXPECT_FALSE(T.isArch64Bit());1788 EXPECT_EQ(T.getArchPointerBitWidth(), 16U);1789 1790 T.setArch(Triple::ppc);1791 EXPECT_FALSE(T.isArch16Bit());1792 EXPECT_TRUE(T.isArch32Bit());1793 EXPECT_FALSE(T.isArch64Bit());1794 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1795 1796 T.setArch(Triple::ppc64);1797 EXPECT_FALSE(T.isArch16Bit());1798 EXPECT_FALSE(T.isArch32Bit());1799 EXPECT_TRUE(T.isArch64Bit());1800 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1801 1802 T.setArch(Triple::x86);1803 EXPECT_FALSE(T.isArch16Bit());1804 EXPECT_TRUE(T.isArch32Bit());1805 EXPECT_FALSE(T.isArch64Bit());1806 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1807 1808 T.setArch(Triple::x86_64);1809 EXPECT_FALSE(T.isArch16Bit());1810 EXPECT_FALSE(T.isArch32Bit());1811 EXPECT_TRUE(T.isArch64Bit());1812 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1813 1814 T.setArch(Triple::amdil);1815 EXPECT_FALSE(T.isArch16Bit());1816 EXPECT_TRUE(T.isArch32Bit());1817 EXPECT_FALSE(T.isArch64Bit());1818 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1819 1820 T.setArch(Triple::amdil64);1821 EXPECT_FALSE(T.isArch16Bit());1822 EXPECT_FALSE(T.isArch32Bit());1823 EXPECT_TRUE(T.isArch64Bit());1824 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1825 1826 T.setArch(Triple::hsail);1827 EXPECT_FALSE(T.isArch16Bit());1828 EXPECT_TRUE(T.isArch32Bit());1829 EXPECT_FALSE(T.isArch64Bit());1830 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1831 1832 T.setArch(Triple::hsail64);1833 EXPECT_FALSE(T.isArch16Bit());1834 EXPECT_FALSE(T.isArch32Bit());1835 EXPECT_TRUE(T.isArch64Bit());1836 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1837 1838 T.setArch(Triple::spir);1839 EXPECT_FALSE(T.isArch16Bit());1840 EXPECT_TRUE(T.isArch32Bit());1841 EXPECT_FALSE(T.isArch64Bit());1842 EXPECT_EQ(T.getArchPointerBitWidth(), 32U);1843 1844 T.setArch(Triple::spir64);1845 EXPECT_FALSE(T.isArch16Bit());1846 EXPECT_FALSE(T.isArch32Bit());1847 EXPECT_TRUE(T.isArch64Bit());1848 EXPECT_EQ(T.getArchPointerBitWidth(), 64U);1849 1850 T.setArch(Triple::spirv);1851 EXPECT_FALSE(T.isArch16Bit());1852 EXPECT_FALSE(T.isArch32Bit());1853 EXPECT_TRUE(T.isArch64Bit());1854 EXPECT_TRUE(T.isSPIRV());1855 1856 T.setArch(Triple::spirv32);1857 EXPECT_FALSE(T.isArch16Bit());1858 EXPECT_TRUE(T.isArch32Bit());1859 EXPECT_FALSE(T.isArch64Bit());1860 EXPECT_TRUE(T.isSPIRV());1861 1862 T.setArch(Triple::spirv64);1863 EXPECT_FALSE(T.isArch16Bit());1864 EXPECT_FALSE(T.isArch32Bit());1865 EXPECT_TRUE(T.isArch64Bit());1866 EXPECT_TRUE(T.isSPIRV());1867 1868 T.setArch(Triple::sparc);1869 EXPECT_FALSE(T.isArch16Bit());1870 EXPECT_TRUE(T.isArch32Bit());1871 EXPECT_FALSE(T.isArch64Bit());1872 1873 T.setArch(Triple::sparcel);1874 EXPECT_FALSE(T.isArch16Bit());1875 EXPECT_TRUE(T.isArch32Bit());1876 EXPECT_FALSE(T.isArch64Bit());1877 1878 T.setArch(Triple::sparcv9);1879 EXPECT_FALSE(T.isArch16Bit());1880 EXPECT_FALSE(T.isArch32Bit());1881 EXPECT_TRUE(T.isArch64Bit());1882 1883 T.setArch(Triple::wasm32);1884 EXPECT_FALSE(T.isArch16Bit());1885 EXPECT_TRUE(T.isArch32Bit());1886 EXPECT_FALSE(T.isArch64Bit());1887 1888 T.setArch(Triple::wasm64);1889 EXPECT_FALSE(T.isArch16Bit());1890 EXPECT_FALSE(T.isArch32Bit());1891 EXPECT_TRUE(T.isArch64Bit());1892 1893 T.setArch(Triple::avr);1894 EXPECT_TRUE(T.isArch16Bit());1895 EXPECT_FALSE(T.isArch32Bit());1896 EXPECT_FALSE(T.isArch64Bit());1897 1898 T.setArch(Triple::lanai);1899 EXPECT_FALSE(T.isArch16Bit());1900 EXPECT_TRUE(T.isArch32Bit());1901 EXPECT_FALSE(T.isArch64Bit());1902 1903 T.setArch(Triple::riscv32);1904 EXPECT_FALSE(T.isArch16Bit());1905 EXPECT_TRUE(T.isArch32Bit());1906 EXPECT_FALSE(T.isArch64Bit());1907 EXPECT_TRUE(T.isRISCV());1908 1909 T.setArch(Triple::riscv64);1910 EXPECT_FALSE(T.isArch16Bit());1911 EXPECT_FALSE(T.isArch32Bit());1912 EXPECT_TRUE(T.isArch64Bit());1913 EXPECT_TRUE(T.isRISCV());1914 1915 T.setArch(Triple::csky);1916 EXPECT_FALSE(T.isArch16Bit());1917 EXPECT_TRUE(T.isArch32Bit());1918 EXPECT_FALSE(T.isArch64Bit());1919 EXPECT_TRUE(T.isCSKY());1920 1921 T.setArch(Triple::loongarch32);1922 EXPECT_FALSE(T.isArch16Bit());1923 EXPECT_TRUE(T.isArch32Bit());1924 EXPECT_FALSE(T.isArch64Bit());1925 EXPECT_TRUE(T.isLoongArch());1926 EXPECT_TRUE(T.isLoongArch32());1927 1928 T.setArch(Triple::loongarch64);1929 EXPECT_FALSE(T.isArch16Bit());1930 EXPECT_FALSE(T.isArch32Bit());1931 EXPECT_TRUE(T.isArch64Bit());1932 EXPECT_TRUE(T.isLoongArch());1933 EXPECT_TRUE(T.isLoongArch64());1934 1935 T.setArch(Triple::dxil);1936 EXPECT_FALSE(T.isArch16Bit());1937 EXPECT_TRUE(T.isArch32Bit());1938 EXPECT_FALSE(T.isArch64Bit());1939 EXPECT_TRUE(T.isDXIL());1940 1941 T.setArch(Triple::xtensa);1942 EXPECT_FALSE(T.isArch16Bit());1943 EXPECT_TRUE(T.isArch32Bit());1944 EXPECT_FALSE(T.isArch64Bit());1945}1946 1947TEST(TripleTest, BitWidthArchVariants) {1948 Triple T;1949 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());1950 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());1951 1952 T.setArch(Triple::UnknownArch);1953 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());1954 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());1955 1956 T.setArch(Triple::mips);1957 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());1958 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());1959 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());1960 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());1961 1962 T.setArch(Triple::mips, Triple::MipsSubArch_r6);1963 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());1964 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());1965 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());1966 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());1967 1968 T.setArch(Triple::mipsel);1969 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());1970 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());1971 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());1972 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());1973 1974 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);1975 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());1976 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());1977 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());1978 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());1979 1980 T.setArch(Triple::ppc);1981 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());1982 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());1983 1984 T.setArch(Triple::nvptx);1985 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());1986 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());1987 1988 T.setArch(Triple::sparc);1989 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());1990 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());1991 1992 T.setArch(Triple::x86);1993 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());1994 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());1995 1996 T.setArch(Triple::mips64);1997 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());1998 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());1999 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());2000 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());2001 2002 T.setArch(Triple::mips64, Triple::MipsSubArch_r6);2003 EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());2004 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());2005 EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());2006 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());2007 2008 T.setArch(Triple::mips64el);2009 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());2010 EXPECT_EQ(Triple::NoSubArch, T.get32BitArchVariant().getSubArch());2011 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());2012 EXPECT_EQ(Triple::NoSubArch, T.get64BitArchVariant().getSubArch());2013 2014 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);2015 EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());2016 EXPECT_EQ(Triple::MipsSubArch_r6, T.get32BitArchVariant().getSubArch());2017 EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());2018 EXPECT_EQ(Triple::MipsSubArch_r6, T.get64BitArchVariant().getSubArch());2019 2020 T.setArch(Triple::ppc64);2021 EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());2022 EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());2023 2024 T.setArch(Triple::nvptx64);2025 EXPECT_EQ(Triple::nvptx, T.get32BitArchVariant().getArch());2026 EXPECT_EQ(Triple::nvptx64, T.get64BitArchVariant().getArch());2027 2028 T.setArch(Triple::sparcv9);2029 EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());2030 EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());2031 2032 T.setArch(Triple::x86_64);2033 EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());2034 EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());2035 2036 T.setArch(Triple::amdil);2037 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());2038 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());2039 2040 T.setArch(Triple::amdil64);2041 EXPECT_EQ(Triple::amdil, T.get32BitArchVariant().getArch());2042 EXPECT_EQ(Triple::amdil64, T.get64BitArchVariant().getArch());2043 2044 T.setArch(Triple::hsail);2045 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());2046 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());2047 2048 T.setArch(Triple::hsail64);2049 EXPECT_EQ(Triple::hsail, T.get32BitArchVariant().getArch());2050 EXPECT_EQ(Triple::hsail64, T.get64BitArchVariant().getArch());2051 2052 T.setArch(Triple::spir);2053 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());2054 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());2055 2056 T.setArch(Triple::spir64);2057 EXPECT_EQ(Triple::spir, T.get32BitArchVariant().getArch());2058 EXPECT_EQ(Triple::spir64, T.get64BitArchVariant().getArch());2059 2060 T.setArch(Triple::spirv);2061 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());2062 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());2063 2064 T.setArch(Triple::spirv32);2065 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());2066 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());2067 2068 T.setArch(Triple::spirv64);2069 EXPECT_EQ(Triple::spirv32, T.get32BitArchVariant().getArch());2070 EXPECT_EQ(Triple::spirv64, T.get64BitArchVariant().getArch());2071 2072 T.setArch(Triple::wasm32);2073 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());2074 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());2075 2076 T.setArch(Triple::wasm64);2077 EXPECT_EQ(Triple::wasm32, T.get32BitArchVariant().getArch());2078 EXPECT_EQ(Triple::wasm64, T.get64BitArchVariant().getArch());2079 2080 T.setArch(Triple::riscv32);2081 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());2082 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());2083 2084 T.setArch(Triple::riscv64);2085 EXPECT_EQ(Triple::riscv32, T.get32BitArchVariant().getArch());2086 EXPECT_EQ(Triple::riscv64, T.get64BitArchVariant().getArch());2087 2088 T.setArch(Triple::csky);2089 EXPECT_EQ(Triple::csky, T.get32BitArchVariant().getArch());2090 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());2091 2092 T.setArch(Triple::loongarch32);2093 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());2094 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());2095 2096 T.setArch(Triple::loongarch64);2097 EXPECT_EQ(Triple::loongarch32, T.get32BitArchVariant().getArch());2098 EXPECT_EQ(Triple::loongarch64, T.get64BitArchVariant().getArch());2099 2100 T.setArch(Triple::thumbeb);2101 EXPECT_EQ(Triple::thumbeb, T.get32BitArchVariant().getArch());2102 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());2103 2104 T.setArch(Triple::thumb);2105 EXPECT_EQ(Triple::thumb, T.get32BitArchVariant().getArch());2106 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());2107 2108 T.setArch(Triple::aarch64);2109 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());2110 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());2111 2112 T.setArch(Triple::aarch64_be);2113 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());2114 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());2115 2116 T.setArch(Triple::renderscript32);2117 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());2118 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());2119 2120 T.setArch(Triple::renderscript64);2121 EXPECT_EQ(Triple::renderscript32, T.get32BitArchVariant().getArch());2122 EXPECT_EQ(Triple::renderscript64, T.get64BitArchVariant().getArch());2123 2124 T.setArch(Triple::armeb);2125 EXPECT_EQ(Triple::armeb, T.get32BitArchVariant().getArch());2126 EXPECT_EQ(Triple::aarch64_be, T.get64BitArchVariant().getArch());2127 2128 T.setArch(Triple::arm);2129 EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());2130 EXPECT_EQ(Triple::aarch64, T.get64BitArchVariant().getArch());2131 2132 T.setArch(Triple::systemz);2133 EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());2134 EXPECT_EQ(Triple::systemz, T.get64BitArchVariant().getArch());2135 2136 T.setArch(Triple::xcore);2137 EXPECT_EQ(Triple::xcore, T.get32BitArchVariant().getArch());2138 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());2139 2140 T.setArch(Triple::dxil);2141 EXPECT_EQ(Triple::dxil, T.get32BitArchVariant().getArch());2142 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());2143 2144 T.setArch(Triple::xtensa);2145 EXPECT_EQ(Triple::xtensa, T.get32BitArchVariant().getArch());2146 EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());2147}2148 2149TEST(TripleTest, EndianArchVariants) {2150 Triple T;2151 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2152 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());2153 2154 T.setArch(Triple::UnknownArch);2155 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2156 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());2157 2158 T.setArch(Triple::aarch64_be);2159 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());2160 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());2161 2162 T.setArch(Triple::aarch64);2163 EXPECT_EQ(Triple::aarch64_be, T.getBigEndianArchVariant().getArch());2164 EXPECT_EQ(Triple::aarch64, T.getLittleEndianArchVariant().getArch());2165 2166 T.setArch(Triple::armeb);2167 EXPECT_EQ(Triple::armeb, T.getBigEndianArchVariant().getArch());2168 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());2169 2170 T.setArch(Triple::arm);2171 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2172 EXPECT_EQ(Triple::arm, T.getLittleEndianArchVariant().getArch());2173 T = Triple("arm");2174 EXPECT_TRUE(T.isLittleEndian());2175 T = Triple("thumb");2176 EXPECT_TRUE(T.isLittleEndian());2177 T = Triple("armeb");2178 EXPECT_FALSE(T.isLittleEndian());2179 T = Triple("thumbeb");2180 EXPECT_FALSE(T.isLittleEndian());2181 2182 T.setArch(Triple::bpfeb);2183 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());2184 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());2185 2186 T.setArch(Triple::bpfel);2187 EXPECT_EQ(Triple::bpfeb, T.getBigEndianArchVariant().getArch());2188 EXPECT_EQ(Triple::bpfel, T.getLittleEndianArchVariant().getArch());2189 2190 T.setArch(Triple::mips64);2191 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());2192 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());2193 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());2194 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());2195 2196 T.setArch(Triple::mips64, Triple::MipsSubArch_r6);2197 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());2198 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());2199 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());2200 EXPECT_EQ(Triple::MipsSubArch_r6,2201 T.getLittleEndianArchVariant().getSubArch());2202 2203 T.setArch(Triple::mips64el);2204 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());2205 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());2206 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());2207 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());2208 2209 T.setArch(Triple::mips64el, Triple::MipsSubArch_r6);2210 EXPECT_EQ(Triple::mips64, T.getBigEndianArchVariant().getArch());2211 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());2212 EXPECT_EQ(Triple::mips64el, T.getLittleEndianArchVariant().getArch());2213 EXPECT_EQ(Triple::MipsSubArch_r6,2214 T.getLittleEndianArchVariant().getSubArch());2215 2216 T.setArch(Triple::mips);2217 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());2218 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());2219 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());2220 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());2221 2222 T.setArch(Triple::mips, Triple::MipsSubArch_r6);2223 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());2224 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());2225 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());2226 EXPECT_EQ(Triple::MipsSubArch_r6,2227 T.getLittleEndianArchVariant().getSubArch());2228 2229 T.setArch(Triple::mipsel);2230 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());2231 EXPECT_EQ(Triple::NoSubArch, T.getBigEndianArchVariant().getSubArch());2232 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());2233 EXPECT_EQ(Triple::NoSubArch, T.getLittleEndianArchVariant().getSubArch());2234 2235 T.setArch(Triple::mipsel, Triple::MipsSubArch_r6);2236 EXPECT_EQ(Triple::mips, T.getBigEndianArchVariant().getArch());2237 EXPECT_EQ(Triple::MipsSubArch_r6, T.getBigEndianArchVariant().getSubArch());2238 EXPECT_EQ(Triple::mipsel, T.getLittleEndianArchVariant().getArch());2239 EXPECT_EQ(Triple::MipsSubArch_r6,2240 T.getLittleEndianArchVariant().getSubArch());2241 2242 T.setArch(Triple::ppc);2243 EXPECT_EQ(Triple::ppc, T.getBigEndianArchVariant().getArch());2244 EXPECT_EQ(Triple::ppcle, T.getLittleEndianArchVariant().getArch());2245 2246 T.setArch(Triple::ppc64);2247 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());2248 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());2249 2250 T.setArch(Triple::ppc64le);2251 EXPECT_EQ(Triple::ppc64, T.getBigEndianArchVariant().getArch());2252 EXPECT_EQ(Triple::ppc64le, T.getLittleEndianArchVariant().getArch());2253 2254 T.setArch(Triple::sparc);2255 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());2256 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());2257 2258 T.setArch(Triple::sparcel);2259 EXPECT_EQ(Triple::sparc, T.getBigEndianArchVariant().getArch());2260 EXPECT_EQ(Triple::sparcel, T.getLittleEndianArchVariant().getArch());2261 2262 T.setArch(Triple::thumb);2263 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2264 EXPECT_EQ(Triple::thumb, T.getLittleEndianArchVariant().getArch());2265 2266 T.setArch(Triple::thumbeb);2267 EXPECT_EQ(Triple::thumbeb, T.getBigEndianArchVariant().getArch());2268 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());2269 2270 T.setArch(Triple::lanai);2271 EXPECT_EQ(Triple::lanai, T.getBigEndianArchVariant().getArch());2272 EXPECT_EQ(Triple::UnknownArch, T.getLittleEndianArchVariant().getArch());2273 2274 T.setArch(Triple::tcele);2275 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());2276 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());2277 2278 T.setArch(Triple::tce);2279 EXPECT_EQ(Triple::tce, T.getBigEndianArchVariant().getArch());2280 EXPECT_EQ(Triple::tcele, T.getLittleEndianArchVariant().getArch());2281 2282 T.setArch(Triple::csky);2283 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2284 EXPECT_EQ(Triple::csky, T.getLittleEndianArchVariant().getArch());2285 2286 T.setArch(Triple::loongarch32);2287 EXPECT_TRUE(T.isLittleEndian());2288 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2289 EXPECT_EQ(Triple::loongarch32, T.getLittleEndianArchVariant().getArch());2290 2291 T.setArch(Triple::loongarch64);2292 EXPECT_TRUE(T.isLittleEndian());2293 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2294 EXPECT_EQ(Triple::loongarch64, T.getLittleEndianArchVariant().getArch());2295 2296 T.setArch(Triple::dxil);2297 EXPECT_TRUE(T.isLittleEndian());2298 EXPECT_EQ(Triple::UnknownArch, T.getBigEndianArchVariant().getArch());2299 EXPECT_EQ(Triple::dxil, T.getLittleEndianArchVariant().getArch());2300}2301 2302TEST(TripleTest, XROS) {2303 Triple T;2304 VersionTuple Version;2305 2306 T = Triple("arm64-apple-xros");2307 EXPECT_TRUE(T.isXROS());2308 EXPECT_TRUE(T.isOSDarwin());2309 EXPECT_FALSE(T.isiOS());2310 EXPECT_FALSE(T.isMacOSX());2311 EXPECT_FALSE(T.isSimulatorEnvironment());2312 EXPECT_EQ(T.getOSName(), "xros");2313 Version = T.getOSVersion();2314 EXPECT_EQ(VersionTuple(0), Version);2315 2316 T = Triple("arm64-apple-visionos1.2");2317 EXPECT_TRUE(T.isXROS());2318 EXPECT_TRUE(T.isOSDarwin());2319 EXPECT_FALSE(T.isiOS());2320 EXPECT_FALSE(T.isMacOSX());2321 EXPECT_FALSE(T.isSimulatorEnvironment());2322 EXPECT_EQ(T.getOSName(), "visionos1.2");2323 Version = T.getOSVersion();2324 EXPECT_EQ(VersionTuple(1, 2), Version);2325 2326 T = Triple("arm64-apple-xros1-simulator");2327 EXPECT_TRUE(T.isXROS());2328 EXPECT_TRUE(T.isOSDarwin());2329 EXPECT_FALSE(T.isiOS());2330 EXPECT_FALSE(T.isMacOSX());2331 EXPECT_TRUE(T.isSimulatorEnvironment());2332 Version = T.getOSVersion();2333 EXPECT_EQ(VersionTuple(1), Version);2334 Version = T.getiOSVersion();2335 EXPECT_EQ(VersionTuple(17), Version);2336}2337 2338TEST(TripleTest, BridgeOS) {2339 Triple T;2340 VersionTuple Version;2341 2342 T = Triple("arm64-apple-bridgeos");2343 EXPECT_TRUE(T.isBridgeOS());2344 EXPECT_FALSE(T.isXROS());2345 EXPECT_TRUE(T.isOSDarwin());2346 EXPECT_FALSE(T.isiOS());2347 EXPECT_FALSE(T.isMacOSX());2348 EXPECT_FALSE(T.isSimulatorEnvironment());2349 EXPECT_EQ(T.getOSName(), "bridgeos");2350 Version = T.getOSVersion();2351 EXPECT_EQ(VersionTuple(0), Version);2352 2353 T = Triple("arm64-apple-bridgeos1.0");2354 EXPECT_TRUE(T.isBridgeOS());2355 EXPECT_FALSE(T.isXROS());2356 EXPECT_TRUE(T.isOSDarwin());2357 EXPECT_FALSE(T.isiOS());2358 EXPECT_FALSE(T.isMacOSX());2359 EXPECT_FALSE(T.isSimulatorEnvironment());2360 EXPECT_EQ(T.getOSName(), "bridgeos1.0");2361 Version = T.getOSVersion();2362 EXPECT_EQ(VersionTuple(1), Version);2363 2364 T = Triple("arm64-apple-bridgeos9.0");2365 EXPECT_TRUE(T.isBridgeOS());2366 EXPECT_FALSE(T.isXROS());2367 EXPECT_TRUE(T.isOSDarwin());2368 EXPECT_FALSE(T.isiOS());2369 EXPECT_FALSE(T.isMacOSX());2370 EXPECT_FALSE(T.isSimulatorEnvironment());2371 EXPECT_EQ(T.getOSName(), "bridgeos9.0");2372 Version = T.getOSVersion();2373 EXPECT_EQ(VersionTuple(9), Version);2374}2375 2376TEST(TripleTest, getOSVersion) {2377 Triple T;2378 VersionTuple Version;2379 2380 T = Triple("i386-apple-darwin9");2381 EXPECT_TRUE(T.isMacOSX());2382 EXPECT_FALSE(T.isiOS());2383 EXPECT_FALSE(T.isArch16Bit());2384 EXPECT_TRUE(T.isArch32Bit());2385 EXPECT_FALSE(T.isArch64Bit());2386 T.getMacOSXVersion(Version);2387 EXPECT_EQ(VersionTuple(10, 5), Version);2388 Version = T.getiOSVersion();2389 EXPECT_EQ(VersionTuple(5), Version);2390 2391 T = Triple("x86_64-apple-darwin9");2392 EXPECT_TRUE(T.isMacOSX());2393 EXPECT_FALSE(T.isiOS());2394 EXPECT_FALSE(T.isArch16Bit());2395 EXPECT_FALSE(T.isArch32Bit());2396 EXPECT_TRUE(T.isArch64Bit());2397 T.getMacOSXVersion(Version);2398 EXPECT_EQ(VersionTuple(10, 5), Version);2399 Version = T.getiOSVersion();2400 EXPECT_EQ(VersionTuple(5), Version);2401 2402 T = Triple("x86_64-apple-macosx");2403 EXPECT_TRUE(T.isMacOSX());2404 EXPECT_FALSE(T.isiOS());2405 EXPECT_FALSE(T.isArch16Bit());2406 EXPECT_FALSE(T.isArch32Bit());2407 EXPECT_TRUE(T.isArch64Bit());2408 T.getMacOSXVersion(Version);2409 EXPECT_EQ(VersionTuple(10, 4), Version);2410 Version = T.getiOSVersion();2411 EXPECT_EQ(VersionTuple(5), Version);2412 2413 T = Triple("x86_64-apple-macosx10.7");2414 EXPECT_TRUE(T.isMacOSX());2415 EXPECT_FALSE(T.isiOS());2416 EXPECT_FALSE(T.isArch16Bit());2417 EXPECT_FALSE(T.isArch32Bit());2418 EXPECT_TRUE(T.isArch64Bit());2419 T.getMacOSXVersion(Version);2420 EXPECT_EQ(VersionTuple(10, 7), Version);2421 Version = T.getiOSVersion();2422 EXPECT_EQ(VersionTuple(5), Version);2423 2424 T = Triple("x86_64-apple-macos11.0");2425 EXPECT_TRUE(T.isMacOSX());2426 EXPECT_FALSE(T.isiOS());2427 EXPECT_FALSE(T.isArch16Bit());2428 EXPECT_FALSE(T.isArch32Bit());2429 EXPECT_TRUE(T.isArch64Bit());2430 T.getMacOSXVersion(Version);2431 EXPECT_EQ(VersionTuple(11, 0), Version);2432 2433 T = Triple("arm64-apple-macosx11.5.8");2434 EXPECT_TRUE(T.isMacOSX());2435 EXPECT_FALSE(T.isiOS());2436 EXPECT_FALSE(T.isArch16Bit());2437 EXPECT_FALSE(T.isArch32Bit());2438 EXPECT_TRUE(T.isArch64Bit());2439 T.getMacOSXVersion(Version);2440 EXPECT_EQ(VersionTuple(11, 5, 8), Version);2441 2442 // 10.16 forms a valid triple, even though it's not2443 // a version of a macOS.2444 T = Triple("x86_64-apple-macos10.16");2445 EXPECT_TRUE(T.isMacOSX());2446 T.getMacOSXVersion(Version);2447 EXPECT_EQ(VersionTuple(10, 16), Version);2448 2449 // 16 forms a valid triple, even though it's not2450 // a version of a macOS.2451 T = Triple("x86_64-apple-macos16.0");2452 EXPECT_TRUE(T.isMacOSX());2453 T.getMacOSXVersion(Version);2454 EXPECT_EQ(VersionTuple(16, 0), Version);2455 2456 T = Triple("arm64-apple-macosx26.1");2457 EXPECT_TRUE(T.isMacOSX());2458 EXPECT_FALSE(T.isiOS());2459 EXPECT_FALSE(T.isArch16Bit());2460 EXPECT_FALSE(T.isArch32Bit());2461 EXPECT_TRUE(T.isArch64Bit());2462 T.getMacOSXVersion(Version);2463 EXPECT_EQ(VersionTuple(26, 1), Version);2464 2465 // 19.0 forms a valid triple, even though it's not2466 // a version of a iOS.2467 T = Triple("arm64-apple-ios19.0");2468 EXPECT_FALSE(T.isMacOSX());2469 EXPECT_TRUE(T.isiOS());2470 EXPECT_FALSE(T.isArch16Bit());2471 EXPECT_FALSE(T.isArch32Bit());2472 EXPECT_TRUE(T.isArch64Bit());2473 T.getiOSVersion();2474 EXPECT_EQ(VersionTuple(19, 0), T.getOSVersion());2475 2476 T = Triple("arm64-apple-ios27.0");2477 EXPECT_FALSE(T.isMacOSX());2478 EXPECT_TRUE(T.isiOS());2479 EXPECT_FALSE(T.isArch16Bit());2480 EXPECT_FALSE(T.isArch32Bit());2481 EXPECT_TRUE(T.isArch64Bit());2482 EXPECT_EQ(VersionTuple(27, 0), T.getiOSVersion());2483 2484 T = Triple("arm64-apple-watchos12.0");2485 EXPECT_FALSE(T.isMacOSX());2486 EXPECT_TRUE(T.isWatchOS());2487 EXPECT_TRUE(T.isArch64Bit());2488 EXPECT_EQ(VersionTuple(26, 0), T.getiOSVersion());2489 2490 T = Triple("arm64-apple-visionos3.0");2491 EXPECT_FALSE(T.isMacOSX());2492 EXPECT_TRUE(T.isXROS());2493 EXPECT_TRUE(T.isArch64Bit());2494 EXPECT_EQ(VersionTuple(26, 0), T.getiOSVersion());2495 2496 T = Triple("x86_64-apple-darwin26");2497 EXPECT_TRUE(T.isMacOSX());2498 T.getMacOSXVersion(Version);2499 EXPECT_EQ(VersionTuple(27), Version);2500 2501 // Check invalid ranges are remapped.2502 T = Triple("arm64-apple-visionos6.0");2503 EXPECT_FALSE(T.isMacOSX());2504 EXPECT_TRUE(T.isXROS());2505 EXPECT_TRUE(T.isArch64Bit());2506 EXPECT_EQ(VersionTuple(29, 0), T.getiOSVersion());2507 2508 T = Triple("arm64-apple-watchos14.0");2509 EXPECT_FALSE(T.isMacOSX());2510 EXPECT_TRUE(T.isWatchOS());2511 EXPECT_TRUE(T.isArch64Bit());2512 EXPECT_EQ(VersionTuple(28, 0), T.getiOSVersion());2513 2514 T = Triple("arm64-apple-ios21.1");2515 EXPECT_FALSE(T.isMacOSX());2516 EXPECT_TRUE(T.isiOS());2517 EXPECT_FALSE(T.isArch16Bit());2518 EXPECT_FALSE(T.isArch32Bit());2519 EXPECT_TRUE(T.isArch64Bit());2520 EXPECT_EQ(VersionTuple(28, 1), T.getiOSVersion());2521 2522 T = Triple("x86_64-apple-darwin20");2523 EXPECT_TRUE(T.isMacOSX());2524 T.getMacOSXVersion(Version);2525 EXPECT_EQ(VersionTuple(11), Version);2526 2527 // For darwin triples on macOS 11, only compare the major version.2528 T = Triple("x86_64-apple-darwin20.2");2529 EXPECT_TRUE(T.isMacOSX());2530 T.getMacOSXVersion(Version);2531 EXPECT_EQ(VersionTuple(11), Version);2532 2533 T = Triple("armv7-apple-ios");2534 EXPECT_FALSE(T.isMacOSX());2535 EXPECT_TRUE(T.isiOS());2536 EXPECT_FALSE(T.isArch16Bit());2537 EXPECT_TRUE(T.isArch32Bit());2538 EXPECT_FALSE(T.isArch64Bit());2539 T.getMacOSXVersion(Version);2540 EXPECT_EQ(VersionTuple(10, 4), Version);2541 Version = T.getiOSVersion();2542 EXPECT_EQ(VersionTuple(5), Version);2543 2544 T = Triple("armv7-apple-ios7.0");2545 EXPECT_FALSE(T.isMacOSX());2546 EXPECT_TRUE(T.isiOS());2547 EXPECT_FALSE(T.isArch16Bit());2548 EXPECT_TRUE(T.isArch32Bit());2549 EXPECT_FALSE(T.isArch64Bit());2550 T.getMacOSXVersion(Version);2551 EXPECT_EQ(VersionTuple(10, 4), Version);2552 Version = T.getiOSVersion();2553 EXPECT_EQ(VersionTuple(7, 0), Version);2554 EXPECT_FALSE(T.isSimulatorEnvironment());2555 2556 T = Triple("x86_64-apple-ios10.3-simulator");2557 EXPECT_TRUE(T.isiOS());2558 Version = T.getiOSVersion();2559 EXPECT_EQ(VersionTuple(10, 3), Version);2560 EXPECT_TRUE(T.isSimulatorEnvironment());2561 EXPECT_FALSE(T.isMacCatalystEnvironment());2562 2563 T = Triple("x86_64-apple-ios13.0-macabi");2564 EXPECT_TRUE(T.isiOS());2565 Version = T.getiOSVersion();2566 EXPECT_EQ(VersionTuple(13, 0), Version);2567 EXPECT_TRUE(T.getEnvironment() == Triple::MacABI);2568 EXPECT_TRUE(T.isMacCatalystEnvironment());2569 EXPECT_FALSE(T.isSimulatorEnvironment());2570 2571 T = Triple("x86_64-apple-driverkit20.1.0");2572 EXPECT_TRUE(T.isDriverKit());2573 EXPECT_TRUE(T.isOSDarwin());2574 EXPECT_FALSE(T.isMacOSX());2575 EXPECT_FALSE(T.isiOS());2576 Version = T.getDriverKitVersion();2577 EXPECT_EQ(VersionTuple(20, 1), Version);2578 2579 T = Triple("x86_64-apple-driverkit20");2580 Version = T.getDriverKitVersion();2581 EXPECT_EQ(VersionTuple(20, 0), Version);2582 2583 // DriverKit version should default to 19.0.2584 T = Triple("x86_64-apple-driverkit");2585 Version = T.getDriverKitVersion();2586 EXPECT_EQ(VersionTuple(19, 0), Version);2587 2588 T = Triple("dxil-unknown-shadermodel6.6-pixel");2589 EXPECT_EQ(Triple::dxil, T.getArch());2590 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());2591 EXPECT_EQ(Triple::ShaderModel, T.getOS());2592 Version = T.getOSVersion();2593 EXPECT_EQ(VersionTuple(6, 6), Version);2594 EXPECT_EQ(Triple::Pixel, T.getEnvironment());2595 2596 T = Triple("dxil-unknown-shadermodel6.0-pixel");2597 EXPECT_EQ(Triple::dxil, T.getArch());2598 EXPECT_EQ(Triple::UnknownVendor, T.getVendor());2599 EXPECT_EQ(Triple::ShaderModel, T.getOS());2600 Version = T.getOSVersion();2601 EXPECT_EQ(VersionTuple(6, 0), Version);2602 EXPECT_EQ(Triple::Pixel, T.getEnvironment());2603}2604 2605TEST(TripleTest, getEnvironmentVersion) {2606 Triple T;2607 VersionTuple Version;2608 2609 T = Triple("arm-unknown-linux-android16");2610 EXPECT_TRUE(T.isAndroid());2611 Version = T.getEnvironmentVersion();2612 EXPECT_EQ(VersionTuple(16), Version);2613 EXPECT_EQ(Triple::Android, T.getEnvironment());2614 2615 T = Triple("aarch64-unknown-linux-android21");2616 EXPECT_TRUE(T.isAndroid());2617 Version = T.getEnvironmentVersion();2618 EXPECT_EQ(VersionTuple(21), Version);2619 EXPECT_EQ(Triple::Android, T.getEnvironment());2620}2621 2622TEST(TripleTest, isMacOSVersionLT) {2623 Triple T = Triple("x86_64-apple-macos11");2624 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));2625 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));2626 2627 T = Triple("x86_64-apple-darwin20");2628 EXPECT_TRUE(T.isMacOSXVersionLT(11, 1, 0));2629 EXPECT_FALSE(T.isMacOSXVersionLT(11, 0, 0));2630 EXPECT_FALSE(T.isMacOSXVersionLT(10, 15, 0));2631}2632 2633TEST(TripleTest, isMacOSVersionGE) {2634 Triple T = Triple("x86_64-apple-macos11");2635 EXPECT_FALSE(T.isMacOSXVersionGE(11, 1, 0));2636 EXPECT_TRUE(T.isMacOSXVersionGE(10, 15, 0));2637 2638 T = Triple("x86_64-apple-darwin20");2639 EXPECT_FALSE(T.isMacOSXVersionGE(11, 1, 0));2640 EXPECT_TRUE(T.isMacOSXVersionGE(11, 0, 0));2641 EXPECT_TRUE(T.isMacOSXVersionGE(10, 15, 0));2642}2643 2644TEST(TripleTest, CanonicalizeOSVersion) {2645 EXPECT_EQ(VersionTuple(10, 15, 4),2646 Triple::getCanonicalVersionForOS(Triple::MacOSX,2647 VersionTuple(10, 15, 4),2648 /*IsInValidRange=*/true));2649 EXPECT_EQ(VersionTuple(11, 0),2650 Triple::getCanonicalVersionForOS(2651 Triple::MacOSX, VersionTuple(10, 16), /*IsInValidRange=*/true));2652 EXPECT_EQ(VersionTuple(20),2653 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(20),2654 /*IsInValidRange=*/true));2655 2656 // Validate mappings for all expected OS versions remapping to 26.2657 EXPECT_EQ(VersionTuple(26),2658 Triple::getCanonicalVersionForOS(Triple::MacOSX, VersionTuple(16),2659 /*IsInValidRange=*/true));2660 EXPECT_EQ(VersionTuple(26),2661 Triple::getCanonicalVersionForOS(Triple::IOS, VersionTuple(19),2662 /*IsInValidRange=*/true));2663 EXPECT_EQ(VersionTuple(26),2664 Triple::getCanonicalVersionForOS(Triple::TvOS, VersionTuple(19),2665 /*IsInValidRange=*/true));2666 EXPECT_EQ(VersionTuple(26),2667 Triple::getCanonicalVersionForOS(Triple::WatchOS, VersionTuple(12),2668 /*IsInValidRange=*/true));2669 EXPECT_EQ(VersionTuple(26),2670 Triple::getCanonicalVersionForOS(Triple::XROS, VersionTuple(3),2671 /*IsInValidRange=*/true));2672 EXPECT_EQ(VersionTuple(26),2673 Triple::getCanonicalVersionForOS(Triple::Darwin, VersionTuple(26),2674 /*IsInValidRange=*/true));2675 EXPECT_EQ(VersionTuple(26),2676 Triple::getCanonicalVersionForOS(Triple::BridgeOS, VersionTuple(26),2677 /*IsInValidRange=*/true));2678 EXPECT_EQ(VersionTuple(26),2679 Triple::getCanonicalVersionForOS(Triple::BridgeOS, VersionTuple(26),2680 /*IsInValidRange=*/true));2681 EXPECT_EQ(VersionTuple(10),2682 Triple::getCanonicalVersionForOS(Triple::BridgeOS, VersionTuple(10),2683 /*IsInValidRange=*/true));2684 2685 // Verify invalid ranges can be remapped.2686 EXPECT_EQ(VersionTuple(28),2687 Triple::getCanonicalVersionForOS(Triple::MacOSX, VersionTuple(18),2688 /*IsInValidRange=*/false));2689 EXPECT_EQ(VersionTuple(28),2690 Triple::getCanonicalVersionForOS(Triple::IOS, VersionTuple(21),2691 /*IsInValidRange=*/false));2692 EXPECT_EQ(VersionTuple(28),2693 Triple::getCanonicalVersionForOS(Triple::WatchOS, VersionTuple(14),2694 /*IsInValidRange=*/false));2695 EXPECT_EQ(VersionTuple(28),2696 Triple::getCanonicalVersionForOS(Triple::TvOS, VersionTuple(21),2697 /*IsInValidRange=*/false));2698}2699 2700TEST(TripleTest, CheckValidOSVersion) {2701 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::MacOSX, VersionTuple(16)));2702 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::IOS, VersionTuple(19)));2703 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::TvOS, VersionTuple(19)));2704 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::TvOS, VersionTuple(18, 2)));2705 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::WatchOS, VersionTuple(12)));2706 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::XROS, VersionTuple(3)));2707 EXPECT_TRUE(Triple::isValidVersionForOS(Triple::Darwin, VersionTuple(26)));2708 EXPECT_TRUE(2709 Triple::isValidVersionForOS(Triple::BridgeOS, VersionTuple(26, 1, 1)));2710 2711 EXPECT_FALSE(2712 Triple::isValidVersionForOS(Triple::MacOSX, VersionTuple(16, 1)));2713 EXPECT_FALSE(Triple::isValidVersionForOS(Triple::MacOSX, VersionTuple(18)));2714 EXPECT_FALSE(Triple::isValidVersionForOS(Triple::IOS, VersionTuple(21)));2715 EXPECT_FALSE(Triple::isValidVersionForOS(Triple::WatchOS, VersionTuple(14)));2716 EXPECT_FALSE(Triple::isValidVersionForOS(Triple::TvOS, VersionTuple(21)));2717}2718 2719TEST(TripleTest, FileFormat) {2720 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-linux-gnu").getObjectFormat());2721 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-freebsd").getObjectFormat());2722 EXPECT_EQ(Triple::ELF, Triple("i686-unknown-netbsd").getObjectFormat());2723 EXPECT_EQ(Triple::ELF, Triple("i686--win32-elf").getObjectFormat());2724 EXPECT_EQ(Triple::ELF, Triple("i686---elf").getObjectFormat());2725 2726 EXPECT_EQ(Triple::MachO, Triple("i686-apple-macosx").getObjectFormat());2727 EXPECT_EQ(Triple::MachO, Triple("i686-apple-ios").getObjectFormat());2728 EXPECT_EQ(Triple::MachO, Triple("i686---macho").getObjectFormat());2729 EXPECT_EQ(Triple::MachO, Triple("powerpc-apple-macosx").getObjectFormat());2730 2731 EXPECT_EQ(Triple::COFF, Triple("i686--win32").getObjectFormat());2732 2733 EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());2734 EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());2735 2736 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat());2737 EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat());2738 2739 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat());2740 EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat());2741 EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat());2742 EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat());2743 EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat());2744 2745 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());2746 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());2747 EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());2748 EXPECT_EQ(Triple::Wasm, Triple("wasm64-wasi").getObjectFormat());2749 EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-wasi").getObjectFormat());2750 EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-wasi").getObjectFormat());2751 2752 EXPECT_EQ(Triple::Wasm,2753 Triple("wasm32-unknown-unknown-wasm").getObjectFormat());2754 EXPECT_EQ(Triple::Wasm,2755 Triple("wasm64-unknown-unknown-wasm").getObjectFormat());2756 EXPECT_EQ(Triple::Wasm,2757 Triple("wasm32-wasi-wasm").getObjectFormat());2758 EXPECT_EQ(Triple::Wasm,2759 Triple("wasm64-wasi-wasm").getObjectFormat());2760 EXPECT_EQ(Triple::Wasm,2761 Triple("wasm32-unknown-wasi-wasm").getObjectFormat());2762 EXPECT_EQ(Triple::Wasm,2763 Triple("wasm64-unknown-wasi-wasm").getObjectFormat());2764 2765 EXPECT_EQ(Triple::XCOFF, Triple("powerpc-ibm-aix").getObjectFormat());2766 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64-ibm-aix").getObjectFormat());2767 EXPECT_EQ(Triple::XCOFF, Triple("powerpc---xcoff").getObjectFormat());2768 EXPECT_EQ(Triple::XCOFF, Triple("powerpc64---xcoff").getObjectFormat());2769 2770 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-unknown").getObjectFormat());2771 EXPECT_EQ(Triple::ELF, Triple("csky-unknown-linux").getObjectFormat());2772 2773 EXPECT_EQ(Triple::SPIRV, Triple("spirv-unknown-unknown").getObjectFormat());2774 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-unknown-unknown").getObjectFormat());2775 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-unknown-unknown").getObjectFormat());2776 2777 EXPECT_EQ(Triple::ELF,2778 Triple("loongarch32-unknown-unknown").getObjectFormat());2779 EXPECT_EQ(Triple::ELF, Triple("loongarch64-unknown-linux").getObjectFormat());2780 2781 Triple MSVCNormalized(Triple::normalize("i686-pc-windows-msvc-elf"));2782 EXPECT_EQ(Triple::ELF, MSVCNormalized.getObjectFormat());2783 2784 Triple GNUWindowsNormalized(Triple::normalize("i686-pc-windows-gnu-elf"));2785 EXPECT_EQ(Triple::ELF, GNUWindowsNormalized.getObjectFormat());2786 2787 Triple CygnusNormalised(Triple::normalize("i686-pc-windows-cygnus-elf"));2788 EXPECT_EQ(Triple::ELF, CygnusNormalised.getObjectFormat());2789 2790 Triple CygwinNormalized(Triple::normalize("i686-pc-cygwin-elf"));2791 EXPECT_EQ(Triple::ELF, CygwinNormalized.getObjectFormat());2792 2793 EXPECT_EQ(Triple::DXContainer,2794 Triple("dxil-unknown-shadermodel").getObjectFormat());2795 2796 Triple T = Triple("");2797 T.setObjectFormat(Triple::ELF);2798 EXPECT_EQ(Triple::ELF, T.getObjectFormat());2799 EXPECT_EQ("elf", Triple::getObjectFormatTypeName(T.getObjectFormat()));2800 2801 T.setObjectFormat(Triple::MachO);2802 EXPECT_EQ(Triple::MachO, T.getObjectFormat());2803 EXPECT_EQ("macho", Triple::getObjectFormatTypeName(T.getObjectFormat()));2804 2805 T.setObjectFormat(Triple::XCOFF);2806 EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());2807 EXPECT_EQ("xcoff", Triple::getObjectFormatTypeName(T.getObjectFormat()));2808 2809 T.setObjectFormat(Triple::GOFF);2810 EXPECT_EQ(Triple::GOFF, T.getObjectFormat());2811 EXPECT_EQ("goff", Triple::getObjectFormatTypeName(T.getObjectFormat()));2812 2813 T.setObjectFormat(Triple::SPIRV);2814 EXPECT_EQ(Triple::SPIRV, T.getObjectFormat());2815 EXPECT_EQ("spirv", Triple::getObjectFormatTypeName(T.getObjectFormat()));2816 2817 EXPECT_EQ(Triple::ELF, Triple("amdgcn-apple-macosx").getObjectFormat());2818 EXPECT_EQ(Triple::ELF, Triple("r600-apple-macosx").getObjectFormat());2819 EXPECT_EQ(Triple::SPIRV, Triple("spirv-apple-macosx").getObjectFormat());2820 EXPECT_EQ(Triple::SPIRV, Triple("spirv32-apple-macosx").getObjectFormat());2821 EXPECT_EQ(Triple::SPIRV, Triple("spirv64-apple-macosx").getObjectFormat());2822 EXPECT_EQ(Triple::DXContainer, Triple("dxil-apple-macosx").getObjectFormat());2823}2824 2825TEST(TripleTest, DefaultExceptionHandling) {2826 EXPECT_EQ(ExceptionHandling::DwarfCFI,2827 Triple("i686-unknown-linux-gnu").getDefaultExceptionHandling());2828 EXPECT_EQ(ExceptionHandling::DwarfCFI,2829 Triple("i686-unknown-freebsd").getDefaultExceptionHandling());2830 2831 EXPECT_EQ(ExceptionHandling::None,2832 Triple("wasm32-unknown-wasi-wasm").getDefaultExceptionHandling());2833 EXPECT_EQ(ExceptionHandling::None,2834 Triple("wasm64-unknown-wasi-wasm").getDefaultExceptionHandling());2835 2836 EXPECT_EQ(2837 ExceptionHandling::ARM,2838 Triple("arm-unknown-linux-android16").getDefaultExceptionHandling());2839 2840 EXPECT_EQ(ExceptionHandling::DwarfCFI,2841 Triple("armv6-unknown-netbsd-eabi").getDefaultExceptionHandling());2842 EXPECT_EQ(ExceptionHandling::ARM,2843 Triple("armv7-suse-linux-gnueabihf").getDefaultExceptionHandling());2844 EXPECT_EQ(ExceptionHandling::ARM,2845 Triple("thumbv7-linux-gnueabihf").getDefaultExceptionHandling());2846 EXPECT_EQ(ExceptionHandling::DwarfCFI,2847 Triple("thumbv7-none-netbsd").getDefaultExceptionHandling());2848 2849 EXPECT_EQ(ExceptionHandling::ZOS,2850 Triple("s390x-ibm-zos").getDefaultExceptionHandling());2851 EXPECT_EQ(ExceptionHandling::DwarfCFI,2852 Triple("systemz-ibm-linux").getDefaultExceptionHandling());2853 2854 EXPECT_EQ(ExceptionHandling::DwarfCFI,2855 Triple("sparcel-unknown-unknown").getDefaultExceptionHandling());2856 2857 EXPECT_EQ(ExceptionHandling::None,2858 Triple("amdgcn--").getDefaultExceptionHandling());2859 EXPECT_EQ(ExceptionHandling::None,2860 Triple("nvptx64--").getDefaultExceptionHandling());2861 EXPECT_EQ(ExceptionHandling::None,2862 Triple("spirv32--").getDefaultExceptionHandling());2863 EXPECT_EQ(ExceptionHandling::None,2864 Triple("spirv64--").getDefaultExceptionHandling());2865 2866 EXPECT_EQ(ExceptionHandling::DwarfCFI,2867 Triple("i686-pc-windows-msvc-elf").getDefaultExceptionHandling());2868 EXPECT_EQ(ExceptionHandling::WinEH,2869 Triple("i686-pc-windows-msvc").getDefaultExceptionHandling());2870 2871 EXPECT_EQ(ExceptionHandling::DwarfCFI,2872 Triple("i386-apple-darwin9").getDefaultExceptionHandling());2873 2874 EXPECT_EQ(ExceptionHandling::WinEH,2875 Triple("x86_64-unknown-uefi").getDefaultExceptionHandling());2876 EXPECT_EQ(ExceptionHandling::DwarfCFI, // ???2877 Triple("x86_64-unknown-msvc").getDefaultExceptionHandling());2878 2879 EXPECT_EQ(ExceptionHandling::DwarfCFI,2880 Triple("riscv32-unknown-unknown").getDefaultExceptionHandling());2881 EXPECT_EQ(ExceptionHandling::DwarfCFI,2882 Triple("riscv64-unknown-unknown").getDefaultExceptionHandling());2883 EXPECT_EQ(ExceptionHandling::DwarfCFI,2884 Triple("xcore-unknown-unknown").getDefaultExceptionHandling());2885 EXPECT_EQ(ExceptionHandling::DwarfCFI,2886 Triple("xtensa-unknown-unknown").getDefaultExceptionHandling());2887 EXPECT_EQ(ExceptionHandling::DwarfCFI,2888 Triple("lanai-unknown-unknown").getDefaultExceptionHandling());2889 EXPECT_EQ(ExceptionHandling::DwarfCFI,2890 Triple("arc-unknown-unknown").getDefaultExceptionHandling());2891 EXPECT_EQ(2892 ExceptionHandling::DwarfCFI,2893 Triple("loongarch32-unknown-unknown").getDefaultExceptionHandling());2894 EXPECT_EQ(2895 ExceptionHandling::DwarfCFI,2896 Triple("loongarch64-unknown-unknown").getDefaultExceptionHandling());2897 EXPECT_EQ(ExceptionHandling::DwarfCFI,2898 Triple("msp430-unknown-unknown").getDefaultExceptionHandling());2899 EXPECT_EQ(ExceptionHandling::DwarfCFI,2900 Triple("m68k-unknown-unknown").getDefaultExceptionHandling());2901 EXPECT_EQ(ExceptionHandling::DwarfCFI,2902 Triple("csky-unknown-unknown").getDefaultExceptionHandling());2903 2904 EXPECT_EQ(ExceptionHandling::AIX,2905 Triple("powerpc-ibm-aix").getDefaultExceptionHandling());2906 EXPECT_EQ(ExceptionHandling::AIX,2907 Triple("powerpc---xcoff").getDefaultExceptionHandling());2908 2909 EXPECT_EQ(ExceptionHandling::DwarfCFI,2910 Triple("powerpc-apple-macosx").getDefaultExceptionHandling());2911 2912 EXPECT_EQ(ExceptionHandling::DwarfCFI,2913 Triple("i686-pc-cygwin-elf").getDefaultExceptionHandling());2914 EXPECT_EQ(ExceptionHandling::DwarfCFI,2915 Triple("x86_64-pc-cygwin-elf").getDefaultExceptionHandling());2916 EXPECT_EQ(ExceptionHandling::WinEH,2917 Triple("x86_64-pc-win32").getDefaultExceptionHandling());2918 EXPECT_EQ(ExceptionHandling::WinEH,2919 Triple("x86_64-pc-windows-coreclr").getDefaultExceptionHandling());2920 2921 EXPECT_EQ(ExceptionHandling::None,2922 Triple("ve-unknown-linux").getDefaultExceptionHandling());2923 EXPECT_EQ(ExceptionHandling::None,2924 Triple("ve-unknown-unknown").getDefaultExceptionHandling());2925 2926 EXPECT_EQ(ExceptionHandling::DwarfCFI,2927 Triple("armv7k-apple-watchos").getDefaultExceptionHandling());2928 EXPECT_EQ(ExceptionHandling::SjLj,2929 Triple("armv7-apple-ios").getDefaultExceptionHandling());2930 2931 EXPECT_EQ(ExceptionHandling::DwarfCFI,2932 Triple("mips64-mti-linux-gnu").getDefaultExceptionHandling());2933 EXPECT_EQ(ExceptionHandling::DwarfCFI,2934 Triple("mips").getDefaultExceptionHandling());2935 EXPECT_EQ(ExceptionHandling::DwarfCFI,2936 Triple("mips-pc-windows-msvc").getDefaultExceptionHandling());2937 EXPECT_EQ(ExceptionHandling::WinEH,2938 Triple("mips-pc-windows-msvc-coff").getDefaultExceptionHandling());2939 2940 EXPECT_EQ(ExceptionHandling::WinEH,2941 Triple("mipsel-windows--coff").getDefaultExceptionHandling());2942 EXPECT_EQ(ExceptionHandling::DwarfCFI,2943 Triple("mipsel-windows-msvc").getDefaultExceptionHandling());2944 2945 EXPECT_EQ(2946 ExceptionHandling::WinEH,2947 Triple("aarch64-unknown-windows-msvc").getDefaultExceptionHandling());2948 EXPECT_EQ(ExceptionHandling::DwarfCFI,2949 Triple("aarch64-unknown-unknown").getDefaultExceptionHandling());2950 2951 EXPECT_EQ(ExceptionHandling::DwarfCFI,2952 Triple("arm64_32-apple-ios").getDefaultExceptionHandling());2953 EXPECT_EQ(ExceptionHandling::DwarfCFI,2954 Triple("arm64-apple-macosx").getDefaultExceptionHandling());2955 2956 EXPECT_EQ(ExceptionHandling::DwarfCFI,2957 Triple("xcore-xmos-elf").getDefaultExceptionHandling());2958 EXPECT_EQ(ExceptionHandling::WinEH,2959 Triple("i386-pc-windows-msvc").getDefaultExceptionHandling());2960 EXPECT_EQ(ExceptionHandling::DwarfCFI,2961 Triple("i386-mingw32").getDefaultExceptionHandling());2962 EXPECT_EQ(ExceptionHandling::WinEH,2963 Triple("i386-pc-win32").getDefaultExceptionHandling());2964 EXPECT_EQ(ExceptionHandling::DwarfCFI,2965 Triple("i386-pc-mingw32").getDefaultExceptionHandling());2966 EXPECT_EQ(ExceptionHandling::DwarfCFI,2967 Triple("i686-pc-cygwin").getDefaultExceptionHandling());2968 2969 EXPECT_EQ(ExceptionHandling::DwarfCFI,2970 Triple("x86_64-pc-mingw64").getDefaultExceptionHandling());2971 EXPECT_EQ(ExceptionHandling::DwarfCFI,2972 Triple("x86_64-win32-gnu").getDefaultExceptionHandling());2973 2974 EXPECT_EQ(ExceptionHandling::DwarfCFI,2975 Triple("x86_64-scei-ps4").getDefaultExceptionHandling());2976 EXPECT_EQ(ExceptionHandling::WinEH,2977 Triple("aarch64-pc-windows-msvc").getDefaultExceptionHandling());2978 EXPECT_EQ(ExceptionHandling::DwarfCFI,2979 Triple("aarch64-pc-windows-elf").getDefaultExceptionHandling());2980}2981 2982TEST(TripleTest, NormalizeWindows) {2983 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-win32"));2984 EXPECT_EQ("i686-unknown-windows-msvc", Triple::normalize("i686-win32"));2985 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32"));2986 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32"));2987 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-mingw32-w64"));2988 EXPECT_EQ("i686-unknown-windows-gnu", Triple::normalize("i686-mingw32-w64"));2989 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-cygwin"));2990 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-cygwin"));2991 EXPECT_EQ("i686-pc-windows-cygnus", Triple::normalize("i686-pc-msys"));2992 EXPECT_EQ("i686-unknown-windows-cygnus", Triple::normalize("i686-msys"));2993 2994 EXPECT_EQ("x86_64-pc-windows-msvc", Triple::normalize("x86_64-pc-win32"));2995 EXPECT_EQ("x86_64-unknown-windows-msvc", Triple::normalize("x86_64-win32"));2996 EXPECT_EQ("x86_64-pc-windows-gnu", Triple::normalize("x86_64-pc-mingw32"));2997 EXPECT_EQ("x86_64-unknown-windows-gnu", Triple::normalize("x86_64-mingw32"));2998 EXPECT_EQ("x86_64-pc-windows-gnu",2999 Triple::normalize("x86_64-pc-mingw32-w64"));3000 EXPECT_EQ("x86_64-unknown-windows-gnu",3001 Triple::normalize("x86_64-mingw32-w64"));3002 EXPECT_EQ("x86_64-pc-windows-cygnus", Triple::normalize("x86_64-pc-cygwin"));3003 EXPECT_EQ("x86_64-unknown-windows-cygnus",3004 Triple::normalize("x86_64-cygwin"));3005 EXPECT_EQ("x86_64-pc-windows-cygnus", Triple::normalize("x86_64-pc-msys"));3006 EXPECT_EQ("x86_64-unknown-windows-cygnus", Triple::normalize("x86_64-msys"));3007 3008 EXPECT_EQ("i686-pc-windows-elf", Triple::normalize("i686-pc-win32-elf"));3009 EXPECT_EQ("i686-unknown-windows-elf", Triple::normalize("i686-win32-elf"));3010 EXPECT_EQ("i686-pc-windows-macho", Triple::normalize("i686-pc-win32-macho"));3011 EXPECT_EQ("i686-unknown-windows-macho",3012 Triple::normalize("i686-win32-macho"));3013 3014 EXPECT_EQ("x86_64-pc-windows-elf", Triple::normalize("x86_64-pc-win32-elf"));3015 EXPECT_EQ("x86_64-unknown-windows-elf",3016 Triple::normalize("x86_64-win32-elf"));3017 EXPECT_EQ("x86_64-pc-windows-macho",3018 Triple::normalize("x86_64-pc-win32-macho"));3019 EXPECT_EQ("x86_64-unknown-windows-macho",3020 Triple::normalize("x86_64-win32-macho"));3021 3022 EXPECT_EQ("i686-pc-windows-cygnus",3023 Triple::normalize("i686-pc-windows-cygnus"));3024 EXPECT_EQ("i686-pc-windows-gnu", Triple::normalize("i686-pc-windows-gnu"));3025 EXPECT_EQ("i686-pc-windows-itanium",3026 Triple::normalize("i686-pc-windows-itanium"));3027 EXPECT_EQ("i686-pc-windows-msvc", Triple::normalize("i686-pc-windows-msvc"));3028 3029 EXPECT_EQ("i686-pc-windows-elf",3030 Triple::normalize("i686-pc-windows-elf-elf"));3031 3032 EXPECT_TRUE(Triple("x86_64-pc-win32").isWindowsMSVCEnvironment());3033 3034 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvccoff")).isOSBinFormatCOFF());3035 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-msvc")).isOSBinFormatCOFF());3036 EXPECT_TRUE(Triple(Triple::normalize("mipsel-windows-gnu")).isOSBinFormatCOFF());3037}3038 3039TEST(TripleTest, NormalizeAndroid) {3040 EXPECT_EQ("arm-unknown-linux-android16",3041 Triple::normalize("arm-linux-androideabi16"));3042 EXPECT_EQ("armv7a-unknown-linux-android",3043 Triple::normalize("armv7a-linux-androideabi"));3044 EXPECT_EQ("aarch64-unknown-linux-android21",3045 Triple::normalize("aarch64-linux-android21"));3046}3047 3048TEST(TripleTest, NormalizeARM) {3049 EXPECT_EQ("armv6-unknown-netbsd-eabi",3050 Triple::normalize("armv6-netbsd-eabi"));3051 EXPECT_EQ("armv7-unknown-netbsd-eabi",3052 Triple::normalize("armv7-netbsd-eabi"));3053 EXPECT_EQ("armv6eb-unknown-netbsd-eabi",3054 Triple::normalize("armv6eb-netbsd-eabi"));3055 EXPECT_EQ("armv7eb-unknown-netbsd-eabi",3056 Triple::normalize("armv7eb-netbsd-eabi"));3057 EXPECT_EQ("armv6-unknown-netbsd-eabihf",3058 Triple::normalize("armv6-netbsd-eabihf"));3059 EXPECT_EQ("armv7-unknown-netbsd-eabihf",3060 Triple::normalize("armv7-netbsd-eabihf"));3061 EXPECT_EQ("armv6eb-unknown-netbsd-eabihf",3062 Triple::normalize("armv6eb-netbsd-eabihf"));3063 EXPECT_EQ("armv7eb-unknown-netbsd-eabihf",3064 Triple::normalize("armv7eb-netbsd-eabihf"));3065 3066 EXPECT_EQ("armv7-suse-linux-gnueabihf",3067 Triple::normalize("armv7-suse-linux-gnueabi"));3068 3069 Triple T;3070 T = Triple("armv6--netbsd-eabi");3071 EXPECT_EQ(Triple::arm, T.getArch());3072 T = Triple("armv6eb--netbsd-eabi");3073 EXPECT_EQ(Triple::armeb, T.getArch());3074 T = Triple("armv7-suse-linux-gnueabihf");3075 EXPECT_EQ(Triple::GNUEABIHF, T.getEnvironment());3076}3077 3078TEST(TripleTest, ParseARMArch) {3079 // ARM3080 {3081 Triple T = Triple("arm");3082 EXPECT_EQ(Triple::arm, T.getArch());3083 }3084 {3085 Triple T = Triple("armeb");3086 EXPECT_EQ(Triple::armeb, T.getArch());3087 }3088 // THUMB3089 {3090 Triple T = Triple("thumb");3091 EXPECT_EQ(Triple::thumb, T.getArch());3092 }3093 {3094 Triple T = Triple("thumbeb");3095 EXPECT_EQ(Triple::thumbeb, T.getArch());3096 }3097 // AARCH643098 {3099 Triple T = Triple("arm64");3100 EXPECT_EQ(Triple::aarch64, T.getArch());3101 }3102 {3103 Triple T = Triple("arm64_32");3104 EXPECT_EQ(Triple::aarch64_32, T.getArch());3105 }3106 {3107 Triple T = Triple("aarch64");3108 EXPECT_EQ(Triple::aarch64, T.getArch());3109 }3110 {3111 Triple T = Triple("aarch64_be");3112 EXPECT_EQ(Triple::aarch64_be, T.getArch());3113 }3114 {3115 Triple T = Triple("arm64e");3116 EXPECT_EQ(Triple::aarch64, T.getArch());3117 EXPECT_EQ(Triple::AArch64SubArch_arm64e, T.getSubArch());3118 }3119 {3120 Triple T = Triple("arm64ec");3121 EXPECT_EQ(Triple::aarch64, T.getArch());3122 EXPECT_EQ(Triple::AArch64SubArch_arm64ec, T.getSubArch());3123 }3124 {3125 Triple T;3126 T.setArch(Triple::aarch64, Triple::AArch64SubArch_arm64ec);3127 EXPECT_EQ("arm64ec", T.getArchName());3128 }3129}3130 3131TEST(TripleTest, isArmT32) {3132 // Not isArmT323133 {3134 Triple T = Triple("thumbv6m");3135 EXPECT_FALSE(T.isArmT32());3136 }3137 {3138 Triple T = Triple("armv8m.base");3139 EXPECT_FALSE(T.isArmT32());3140 }3141 {3142 Triple T = Triple("armv7s");3143 EXPECT_FALSE(T.isArmT32());3144 }3145 {3146 Triple T = Triple("armv7k");3147 EXPECT_FALSE(T.isArmT32());3148 }3149 {3150 Triple T = Triple("armv7ve");3151 EXPECT_FALSE(T.isArmT32());3152 }3153 {3154 Triple T = Triple("armv6");3155 EXPECT_FALSE(T.isArmT32());3156 }3157 {3158 Triple T = Triple("armv6m");3159 EXPECT_FALSE(T.isArmT32());3160 }3161 {3162 Triple T = Triple("armv6k");3163 EXPECT_FALSE(T.isArmT32());3164 }3165 {3166 Triple T = Triple("armv6t2");3167 EXPECT_FALSE(T.isArmT32());3168 }3169 {3170 Triple T = Triple("armv5");3171 EXPECT_FALSE(T.isArmT32());3172 }3173 {3174 Triple T = Triple("armv5te");3175 EXPECT_FALSE(T.isArmT32());3176 }3177 {3178 Triple T = Triple("armv4t");3179 EXPECT_FALSE(T.isArmT32());3180 }3181 3182 // isArmT323183 {3184 Triple T = Triple("arm");3185 EXPECT_TRUE(T.isArmT32());3186 }3187 {3188 Triple T = Triple("armv7m");3189 EXPECT_TRUE(T.isArmT32());3190 }3191 {3192 Triple T = Triple("armv7em");3193 EXPECT_TRUE(T.isArmT32());3194 }3195 {3196 Triple T = Triple("armv8m.main");3197 EXPECT_TRUE(T.isArmT32());3198 }3199 {3200 Triple T = Triple("armv8.1m.main");3201 EXPECT_TRUE(T.isArmT32());3202 }3203}3204 3205TEST(TripleTest, isArmMClass) {3206 // not M-class3207 {3208 Triple T = Triple("armv7s");3209 EXPECT_FALSE(T.isArmMClass());3210 }3211 {3212 Triple T = Triple("armv7k");3213 EXPECT_FALSE(T.isArmMClass());3214 }3215 {3216 Triple T = Triple("armv7ve");3217 EXPECT_FALSE(T.isArmMClass());3218 }3219 {3220 Triple T = Triple("armv6");3221 EXPECT_FALSE(T.isArmMClass());3222 }3223 {3224 Triple T = Triple("armv6k");3225 EXPECT_FALSE(T.isArmMClass());3226 }3227 {3228 Triple T = Triple("armv6t2");3229 EXPECT_FALSE(T.isArmMClass());3230 }3231 {3232 Triple T = Triple("armv5");3233 EXPECT_FALSE(T.isArmMClass());3234 }3235 {3236 Triple T = Triple("armv5te");3237 EXPECT_FALSE(T.isArmMClass());3238 }3239 {3240 Triple T = Triple("armv4t");3241 EXPECT_FALSE(T.isArmMClass());3242 }3243 {3244 Triple T = Triple("arm");3245 EXPECT_FALSE(T.isArmMClass());3246 }3247 3248 // is M-class3249 {3250 Triple T = Triple("armv6m");3251 EXPECT_TRUE(T.isArmMClass());3252 }3253 {3254 Triple T = Triple("armv7m");3255 EXPECT_TRUE(T.isArmMClass());3256 }3257 {3258 Triple T = Triple("armv7em");3259 EXPECT_TRUE(T.isArmMClass());3260 }3261 {3262 Triple T = Triple("armv8m.base");3263 EXPECT_TRUE(T.isArmMClass());3264 }3265 {3266 Triple T = Triple("armv8m.main");3267 EXPECT_TRUE(T.isArmMClass());3268 }3269 {3270 Triple T = Triple("armv8.1m.main");3271 EXPECT_TRUE(T.isArmMClass());3272 }3273}3274 3275TEST(TripleTest, DXILNormaizeWithVersion) {3276 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",3277 Triple::normalize("dxilv1.0--shadermodel6.0"));3278 EXPECT_EQ("dxilv1.0-unknown-shadermodel6.0",3279 Triple::normalize("dxil--shadermodel6.0"));3280 EXPECT_EQ("dxilv1.1-unknown-shadermodel6.1-library",3281 Triple::normalize("dxil-shadermodel6.1-unknown-library"));3282 EXPECT_EQ("dxilv1.9-unknown-shadermodel6.x-unknown",3283 Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));3284 EXPECT_EQ("dxilv1.9-unknown-shadermodel6.x-unknown",3285 Triple::normalize("dxil-unknown-shadermodel6.x-unknown"));3286 EXPECT_EQ("dxil-unknown-unknown-unknown", Triple::normalize("dxil---"));3287 EXPECT_EQ("dxilv1.0-pc-shadermodel5.0-compute",3288 Triple::normalize("dxil-shadermodel5.0-pc-compute"));3289}3290 3291TEST(TripleTest, isCompatibleWith) {3292 struct {3293 const char *A;3294 const char *B;3295 bool Result;3296 } Cases[] = {3297 {"armv7-linux-gnueabihf", "thumbv7-linux-gnueabihf", true},3298 {"armv4-none-unknown-eabi", "thumbv6-unknown-linux-gnueabihf", false},3299 {"x86_64-apple-macosx10.9.0", "x86_64-apple-macosx10.10.0", true},3300 {"x86_64-apple-macosx10.9.0", "i386-apple-macosx10.9.0", false},3301 {"x86_64-apple-macosx10.9.0", "x86_64h-apple-macosx10.9.0", true},3302 {"x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu", true},3303 {"x86_64-unknown-linux-gnu", "i386-unknown-linux-gnu", false},3304 {"x86_64-unknown-linux-gnu", "x86_64h-unknown-linux-gnu", true},3305 {"x86_64-pc-windows-gnu", "x86_64-pc-windows-msvc", false},3306 {"x86_64-pc-windows-msvc", "x86_64-pc-windows-msvc-elf", false},3307 {"i686-w64-windows-gnu", "i386-w64-windows-gnu", true},3308 {"x86_64-w64-windows-gnu", "x86_64-pc-windows-gnu", true},3309 {"armv7-w64-windows-gnu", "thumbv7-pc-windows-gnu", true},3310 };3311 3312 auto DoTest = [](const char *A, const char *B,3313 bool Result) -> testing::AssertionResult {3314 if (Triple(A).isCompatibleWith(Triple(B)) != Result) {3315 return testing::AssertionFailure()3316 << llvm::formatv("Triple {0} and {1} were expected to be {2}", A,3317 B, Result ? "compatible" : "incompatible");3318 }3319 return testing::AssertionSuccess();3320 };3321 for (const auto &C : Cases) {3322 EXPECT_TRUE(DoTest(C.A, C.B, C.Result));3323 // Test that the comparison is commutative.3324 EXPECT_TRUE(DoTest(C.B, C.A, C.Result));3325 }3326}3327 3328TEST(DataLayoutTest, UEFI) {3329 Triple TT = Triple("x86_64-unknown-uefi");3330 3331 // Test UEFI X86_64 Mangling Component.3332 EXPECT_THAT(TT.computeDataLayout(), testing::HasSubstr("-m:w-"));3333}3334 3335} // end anonymous namespace3336