TripleTest.cpp revision 124e51c0d2b521b0fb3aaaf2443403cd451b7857
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------- Triple.cpp - Triple unit tests ---------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/Triple.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace llvm;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, BasicParsing) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Triple T;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("");
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getArchName().str());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("-");
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getArchName().str());
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("--");
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getArchName().str());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("---");
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getArchName().str());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("----");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getArchName().str());
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-", T.getEnvironmentName().str());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("a");
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a", T.getArchName().str());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getVendorName().str());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("a-b");
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a", T.getArchName().str());
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("b", T.getVendorName().str());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getOSName().str());
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("a-b-c");
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a", T.getArchName().str());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("b", T.getVendorName().str());
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("c", T.getOSName().str());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", T.getEnvironmentName().str());
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("a-b-c-d");
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a", T.getArchName().str());
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("b", T.getVendorName().str());
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("c", T.getOSName().str());
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("d", T.getEnvironmentName().str());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, ParsedIDs) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Triple T;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("i386-apple-darwin");
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Apple, T.getVendor());
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Darwin, T.getOS());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("x86_64-pc-linux-gnu");
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86_64, T.getArch());
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Linux, T.getOS());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::GNU, T.getEnvironment());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("powerpc-dunno-notsure");
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ppc, T.getArch());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownOS, T.getOS());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("arm-none-none-eabi");
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::arm, T.getArch());
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownOS, T.getOS());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::EABI, T.getEnvironment());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T = Triple("huh");
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.getArch());
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static std::string Join(StringRef A, StringRef B, StringRef C) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Str;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-';
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Str += D; return Str;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, Normalization) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("", Triple::normalize(""));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-", Triple::normalize("-"));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("--", Triple::normalize("--"));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("---", Triple::normalize("---"));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("----", Triple::normalize("----"));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a", Triple::normalize("a"));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-b", Triple::normalize("a-b"));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c"));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c"));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c"));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386"));
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c"));
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-"));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386", Triple::normalize("i386"));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("-pc", Triple::normalize("pc"));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("--linux", Triple::normalize("linux"));
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux"));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that normalizing a permutated set of valid components returns a
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // triple with the unpermuted components.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringRef C[4];
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int Arch = 1+Triple::UnknownArch; Arch <= Triple::amdil; ++Arch) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (int Vendor = 1+Triple::UnknownVendor; Vendor <= Triple::PC;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         ++Vendor) {
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (int OS = 1+Triple::UnknownOS; OS <= Triple::Minix; ++OS) {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        C[2] = Triple::getOSTypeName(Triple::OSType(OS));
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // If a value has multiple interpretations, then the permutation
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // test will inevitably fail.  Currently this is only the case for
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // "psp" which parses as both an architecture and an O/S.
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (OS == Triple::Psp)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          continue;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        std::string E = Join(C[0], C[1], C[2]);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[0], C[1], C[2])));
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[0], C[2], C[1])));
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[1], C[2], C[0])));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[1], C[0], C[2])));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[2], C[0], C[1])));
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(E, Triple::normalize(Join(C[2], C[1], C[0])));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (int Env = 1+Triple::UnknownEnvironment; Env <= Triple::MachO;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             ++Env) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          std::string F = Join(C[0], C[1], C[2], C[3]);
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[2], C[3])));
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[3], C[2])));
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[3], C[1])));
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[1], C[3])));
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[1], C[2])));
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[2], C[1])));
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[3], C[0])));
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[0], C[3])));
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[0], C[2])));
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[2], C[0])));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[2], C[3])));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[3], C[2])));
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[0], C[1])));
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[1], C[0])));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[1], C[3])));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[3], C[1])));
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[3], C[0])));
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[0], C[3])));
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[1], C[2])));
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[2], C[1])));
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[2], C[0])));
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[0], C[2])));
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[0], C[1])));
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[1], C[0])));
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("a-b-psp", Triple::normalize("a-b-psp"));
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("psp-b-c", Triple::normalize("psp-b-c"));
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Various real-world funky triples.  The value returned by GCC's config.sub
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is given in the comment.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386--mingw32", Triple::normalize("i386-mingw32")); // i386-pc-mingw32
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, MutateName) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Triple T;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.getArch());
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownOS, T.getOS());
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArchName("i386");
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386--", T.getTriple());
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setVendorName("pc");
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-", T.getTriple());
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setOSName("linux");
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Linux, T.getOS());
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-linux", T.getTriple());
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setEnvironmentName("gnu");
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Linux, T.getOS());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setOSName("freebsd");
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::FreeBSD, T.getOS());
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setOSAndEnvironmentName("darwin");
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.getArch());
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::PC, T.getVendor());
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::Darwin, T.getOS());
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("i386-pc-darwin", T.getTriple());
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, BitWidthPredicates) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Triple T;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch32Bit());
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::arm);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch32Bit());
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::hexagon);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch32Bit());
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mips);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch32Bit());
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mips64);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch32Bit());
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch64Bit());
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::msp430);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch16Bit());
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch32Bit());
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ppc);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch32Bit());
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ppc64);
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch32Bit());
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch64Bit());
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::x86);
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch32Bit());
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch64Bit());
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::x86_64);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch16Bit());
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(T.isArch32Bit());
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(T.isArch64Bit());
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TripleTest, BitWidthArchVariants) {
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Triple T;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::UnknownArch);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::arm);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mips);
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mipsel);
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ppc);
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ptx32);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ptx32, T.get32BitArchVariant().getArch());
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ptx64, T.get64BitArchVariant().getArch());
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::sparc);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::x86);
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mips64);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::mips64el);
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ppc64);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::ptx64);
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ptx32, T.get32BitArchVariant().getArch());
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::ptx64, T.get64BitArchVariant().getArch());
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::sparcv9);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  T.setArch(Triple::x86_64);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)