123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//===----------- Triple.cpp - Triple unit tests ---------------------------===//
223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//
323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//                     The LLVM Compiler Infrastructure
423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//
523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar// This file is distributed under the University of Illinois Open Source
623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar// License. See LICENSE.TXT for details.
723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//
823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//===----------------------------------------------------------------------===//
923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar#include "gtest/gtest.h"
1123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar#include "llvm/ADT/Triple.h"
1223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarusing namespace llvm;
1423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarnamespace {
1623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel DunbarTEST(TripleTest, BasicParsing) {
1823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  Triple T;
1923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
2023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("");
21a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getArchName().str());
22a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
23a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
24a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
2523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
2623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("-");
27a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getArchName().str());
28a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
29a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
30a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
3123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
3223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("--");
33a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getArchName().str());
34a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
35a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
36a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
3723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
3823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("---");
39a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getArchName().str());
40a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
41a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
42a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
4323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("----");
45a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getArchName().str());
46a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
47a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
48a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("-", T.getEnvironmentName().str());
4923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
5023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("a");
51a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("a", T.getArchName().str());
52a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getVendorName().str());
53a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
54a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
5523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
5623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("a-b");
57a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("a", T.getArchName().str());
58a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("b", T.getVendorName().str());
59a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getOSName().str());
60a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
6123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
6223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("a-b-c");
63a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("a", T.getArchName().str());
64a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("b", T.getVendorName().str());
65a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("c", T.getOSName().str());
66a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("", T.getEnvironmentName().str());
6723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
6823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("a-b-c-d");
69a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("a", T.getArchName().str());
70a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("b", T.getVendorName().str());
71a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("c", T.getOSName().str());
72a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  EXPECT_EQ("d", T.getEnvironmentName().str());
7323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
7423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
7523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel DunbarTEST(TripleTest, ParsedIDs) {
7623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  Triple T;
7723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
7823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("i386-apple-darwin");
79efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
80efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Apple, T.getVendor());
81efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Darwin, T.getOS());
825754a4525625a67a6c9b4f63512ea9db6997bf05Duncan Sands  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
8323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
8423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("x86_64-pc-linux-gnu");
85efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86_64, T.getArch());
86efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
87efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Linux, T.getOS());
88859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin  EXPECT_EQ(Triple::GNU, T.getEnvironment());
8923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
90a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  T = Triple("powerpc-bgp-linux");
91a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::ppc, T.getArch());
92a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::BGP, T.getVendor());
93a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::Linux, T.getOS());
94a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
95a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel
96a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  T = Triple("powerpc-bgp-cnk");
97a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::ppc, T.getArch());
98a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::BGP, T.getVendor());
99a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::CNK, T.getOS());
100a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
101a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel
102a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  T = Triple("powerpc64-bgq-linux");
103a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::ppc64, T.getArch());
104a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::BGQ, T.getVendor());
105a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::Linux, T.getOS());
106a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
107a47406c442a81aaf368b6e1a9b31d1730975a717Hal Finkel
10823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("powerpc-dunno-notsure");
109efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::ppc, T.getArch());
110efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
111efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownOS, T.getOS());
1125754a4525625a67a6c9b4f63512ea9db6997bf05Duncan Sands  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
11323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
114ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands  T = Triple("arm-none-none-eabi");
115859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin  EXPECT_EQ(Triple::arm, T.getArch());
116ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
117ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands  EXPECT_EQ(Triple::UnknownOS, T.getOS());
118859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin  EXPECT_EQ(Triple::EABI, T.getEnvironment());
119859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin
12023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T = Triple("huh");
121efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownArch, T.getArch());
122335db223926931db204bf54d4accac6677b8e6b1Duncan Sands}
123651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
124335db223926931db204bf54d4accac6677b8e6b1Duncan Sandsstatic std::string Join(StringRef A, StringRef B, StringRef C) {
125335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C;
126335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  return Str;
127335db223926931db204bf54d4accac6677b8e6b1Duncan Sands}
128651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
129335db223926931db204bf54d4accac6677b8e6b1Duncan Sandsstatic std::string Join(StringRef A, StringRef B, StringRef C, StringRef D) {
130335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  std::string Str = A; Str += '-'; Str += B; Str += '-'; Str += C; Str += '-';
131335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  Str += D; return Str;
132335db223926931db204bf54d4accac6677b8e6b1Duncan Sands}
133651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
134335db223926931db204bf54d4accac6677b8e6b1Duncan SandsTEST(TripleTest, Normalization) {
135859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin
136335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("", Triple::normalize(""));
137335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("-", Triple::normalize("-"));
138335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("--", Triple::normalize("--"));
139335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("---", Triple::normalize("---"));
140335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("----", Triple::normalize("----"));
141335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
142335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a", Triple::normalize("a"));
143335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-b", Triple::normalize("a-b"));
144335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-b-c", Triple::normalize("a-b-c"));
145335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-b-c-d", Triple::normalize("a-b-c-d"));
146335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
147335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-b-c", Triple::normalize("i386-b-c"));
148335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-a-c", Triple::normalize("a-i386-c"));
149335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-a-b", Triple::normalize("a-b-i386"));
1505754a4525625a67a6c9b4f63512ea9db6997bf05Duncan Sands  EXPECT_EQ("i386-a-b-c", Triple::normalize("a-b-c-i386"));
151335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
152335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-pc-c", Triple::normalize("a-pc-c"));
153335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("-pc-b-c", Triple::normalize("pc-b-c"));
154335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-pc-b", Triple::normalize("a-b-pc"));
1555754a4525625a67a6c9b4f63512ea9db6997bf05Duncan Sands  EXPECT_EQ("a-pc-b-c", Triple::normalize("a-b-c-pc"));
156335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
157335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a-b-linux", Triple::normalize("a-b-linux"));
158335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("--linux-b-c", Triple::normalize("linux-b-c"));
159335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("a--linux-c", Triple::normalize("a-linux-c"));
160335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
161335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-pc-a", Triple::normalize("a-pc-i386"));
162335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-pc-", Triple::normalize("-pc-i386"));
163335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("-pc-linux-c", Triple::normalize("linux-pc-c"));
164335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("-pc-linux", Triple::normalize("linux-pc-"));
165335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
166335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386", Triple::normalize("i386"));
167335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("-pc", Triple::normalize("pc"));
168335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("--linux", Triple::normalize("linux"));
169335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
170859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin  EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-gnu-linux"));
171859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin
172335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  // Check that normalizing a permutated set of valid components returns a
173335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  // triple with the unpermuted components.
174335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  StringRef C[4];
175124e51c0d2b521b0fb3aaaf2443403cd451b7857Chandler Carruth  for (int Arch = 1+Triple::UnknownArch; Arch <= Triple::amdil; ++Arch) {
176335db223926931db204bf54d4accac6677b8e6b1Duncan Sands    C[0] = Triple::getArchTypeName(Triple::ArchType(Arch));
177335db223926931db204bf54d4accac6677b8e6b1Duncan Sands    for (int Vendor = 1+Triple::UnknownVendor; Vendor <= Triple::PC;
178335db223926931db204bf54d4accac6677b8e6b1Duncan Sands         ++Vendor) {
179335db223926931db204bf54d4accac6677b8e6b1Duncan Sands      C[1] = Triple::getVendorTypeName(Triple::VendorType(Vendor));
180335db223926931db204bf54d4accac6677b8e6b1Duncan Sands      for (int OS = 1+Triple::UnknownOS; OS <= Triple::Minix; ++OS) {
181335db223926931db204bf54d4accac6677b8e6b1Duncan Sands        C[2] = Triple::getOSTypeName(Triple::OSType(OS));
182ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands
183ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        std::string E = Join(C[0], C[1], C[2]);
184ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[0], C[1], C[2])));
185ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands
186ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[0], C[2], C[1])));
187ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[1], C[2], C[0])));
188ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[1], C[0], C[2])));
189ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[2], C[0], C[1])));
190ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands        EXPECT_EQ(E, Triple::normalize(Join(C[2], C[1], C[0])));
191ee64684710486bf8a0cd156d0516e0a7caecfb0bDuncan Sands
192ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands        for (int Env = 1+Triple::UnknownEnvironment; Env <= Triple::MachO;
193ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands             ++Env) {
194ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          C[3] = Triple::getEnvironmentTypeName(Triple::EnvironmentType(Env));
195ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands
196ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          std::string F = Join(C[0], C[1], C[2], C[3]);
197ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[2], C[3])));
198ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands
199ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[1], C[3], C[2])));
200ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[3], C[1])));
201ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[2], C[1], C[3])));
202ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[1], C[2])));
203ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[0], C[3], C[2], C[1])));
204ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[3], C[0])));
205ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[2], C[0], C[3])));
206ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[0], C[2])));
207ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[3], C[2], C[0])));
208ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[2], C[3])));
209ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[1], C[0], C[3], C[2])));
210ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[0], C[1])));
211ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[3], C[1], C[0])));
212ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[1], C[3])));
213ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[0], C[3], C[1])));
214ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[3], C[0])));
215ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[2], C[1], C[0], C[3])));
216ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[1], C[2])));
217ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[0], C[2], C[1])));
218ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[2], C[0])));
219ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[1], C[0], C[2])));
220ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[0], C[1])));
221ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands          EXPECT_EQ(F, Triple::normalize(Join(C[3], C[2], C[1], C[0])));
222ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands        }
223335db223926931db204bf54d4accac6677b8e6b1Duncan Sands      }
224335db223926931db204bf54d4accac6677b8e6b1Duncan Sands    }
225335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  }
226335db223926931db204bf54d4accac6677b8e6b1Duncan Sands
227335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  // Various real-world funky triples.  The value returned by GCC's config.sub
228335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  // is given in the comment.
229335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386--mingw32", Triple::normalize("i386-mingw32")); // i386-pc-mingw32
230335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("x86_64--linux-gnu", Triple::normalize("x86_64-linux-gnu")); // x86_64-pc-linux-gnu
231335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i486--linux-gnu", Triple::normalize("i486-linux-gnu")); // i486-pc-linux-gnu
232335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i386-redhat-linux", Triple::normalize("i386-redhat-linux")); // i386-redhat-linux-gnu
233335db223926931db204bf54d4accac6677b8e6b1Duncan Sands  EXPECT_EQ("i686--linux", Triple::normalize("i686-linux")); // i686-pc-linux-gnu
234ae200c60c31666da81a8550172de03a9f417ba1bDuncan Sands  EXPECT_EQ("arm-none--eabi", Triple::normalize("arm-none-eabi")); // arm-none-eabi
23523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
23623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
23723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel DunbarTEST(TripleTest, MutateName) {
23823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  Triple T;
239efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownArch, T.getArch());
240efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
241efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::UnknownOS, T.getOS());
2425754a4525625a67a6c9b4f63512ea9db6997bf05Duncan Sands  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
24323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
24423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setArchName("i386");
245efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
246efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386--", T.getTriple());
24723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
24823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setVendorName("pc");
249efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
250efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
251efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386-pc-", T.getTriple());
25223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
25323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setOSName("linux");
254efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
255efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
256efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Linux, T.getOS());
257efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386-pc-linux", T.getTriple());
25823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
25923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setEnvironmentName("gnu");
260efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
261efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
262efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Linux, T.getOS());
263efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386-pc-linux-gnu", T.getTriple());
26423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
26523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setOSName("freebsd");
266efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
267efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
268efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::FreeBSD, T.getOS());
269efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386-pc-freebsd-gnu", T.getTriple());
27023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
27123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  T.setOSAndEnvironmentName("darwin");
272efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::x86, T.getArch());
273efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::PC, T.getVendor());
274efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ(Triple::Darwin, T.getOS());
275efee4ee46e5cc8f108391a33f2119891531989c6Misha Brukman  EXPECT_EQ("i386-pc-darwin", T.getTriple());
276859f8183639346378ed29d1e04a4b070ebc7e97fRenato Golin
27723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
27823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
2796f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler CarruthTEST(TripleTest, BitWidthPredicates) {
2806f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  Triple T;
2816f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
2826f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch32Bit());
2836f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
2846f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
2856f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::arm);
2866f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
2876f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch32Bit());
2886f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
2896f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
2906f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::hexagon);
2916f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
2926f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch32Bit());
2936f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
2946f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
2956f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::mips);
2966f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
2976f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch32Bit());
2986f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
2996f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3006f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::mips64);
3016f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
3026f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch32Bit());
3036f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch64Bit());
3046f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3056f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::msp430);
3066f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch16Bit());
3076f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch32Bit());
3086f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
3096f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3106f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::ppc);
3116f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
3126f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch32Bit());
3136f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
3146f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3156f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::ppc64);
3166f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
3176f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch32Bit());
3186f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch64Bit());
3196f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3206f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::x86);
3216f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
3226f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch32Bit());
3236f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch64Bit());
3246f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3256f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  T.setArch(Triple::x86_64);
3266f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch16Bit());
3276f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_FALSE(T.isArch32Bit());
3286f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth  EXPECT_TRUE(T.isArch64Bit());
3296f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth}
3306f72ac4799a1a20c07cd96cc994dd6394ebff9a2Chandler Carruth
3317d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler CarruthTEST(TripleTest, BitWidthArchVariants) {
3327d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  Triple T;
3337d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
3347d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3357d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3367d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::UnknownArch);
3377d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::UnknownArch, T.get32BitArchVariant().getArch());
3387d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3397d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3407d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::arm);
3417d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::arm, T.get32BitArchVariant().getArch());
3427d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::UnknownArch, T.get64BitArchVariant().getArch());
3437d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3447d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::mips);
3457d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
3467d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
3477d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3487d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::mipsel);
3497d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
3507d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
3517d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3527d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::ppc);
3537d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
3547d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
3557d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3567d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::ptx32);
3577d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ptx32, T.get32BitArchVariant().getArch());
3587d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ptx64, T.get64BitArchVariant().getArch());
3597d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3607d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::sparc);
3617d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
3627d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
3637d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3647d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::x86);
3657d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
3667d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
3677d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3687d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::mips64);
3697d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips, T.get32BitArchVariant().getArch());
3707d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips64, T.get64BitArchVariant().getArch());
3717d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3727d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::mips64el);
3737d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mipsel, T.get32BitArchVariant().getArch());
3747d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::mips64el, T.get64BitArchVariant().getArch());
3757d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3767d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::ppc64);
3777d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ppc, T.get32BitArchVariant().getArch());
3787d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ppc64, T.get64BitArchVariant().getArch());
3797d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3807d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::ptx64);
3817d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ptx32, T.get32BitArchVariant().getArch());
3827d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::ptx64, T.get64BitArchVariant().getArch());
3837d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3847d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::sparcv9);
3857d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::sparc, T.get32BitArchVariant().getArch());
3867d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::sparcv9, T.get64BitArchVariant().getArch());
3877d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
3887d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  T.setArch(Triple::x86_64);
3897d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::x86, T.get32BitArchVariant().getArch());
3907d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth  EXPECT_EQ(Triple::x86_64, T.get64BitArchVariant().getArch());
3917d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth}
3927d5a289f2d7d75c29df4c17856ab54dd28dec508Chandler Carruth
39323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
394