brintos

brintos / llvm-project-archived public Read only

0
0
Text · 126.0 KiB · df8284d Raw
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