Triple.cpp revision 2928c83b010f7cfdb0f819199d806f6942a7d995
123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//===--- Triple.cpp - Target triple helper class --------------------------===//
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 "llvm/ADT/Triple.h"
11a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar
120b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin#include "llvm/ADT/SmallString.h"
13a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar#include "llvm/ADT/Twine.h"
1423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar#include <cassert>
1570748756427c115b9344c7ce7759ff7041ce879bMikhail Glushenkov#include <cstring>
1623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarusing namespace llvm;
1723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//
1923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
2023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarconst char *Triple::getArchTypeName(ArchType Kind) {
2123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  switch (Kind) {
2223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case InvalidArch: return "<invalid>";
2323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case UnknownArch: return "unknown";
246337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar
256337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case alpha:   return "alpha";
266337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case arm:     return "arm";
27d950941e138455ebcd7a5f55805dcb977892e3e3Jakob Stoklund Olesen  case bfin:    return "bfin";
286337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case cellspu: return "cellspu";
296337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case mips:    return "mips";
306337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case mipsel:  return "mipsel";
316337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case msp430:  return "msp430";
32fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar  case pic16:   return "pic16";
338c2f1d7e44d214bc2242a8c6faa4b624b3876540Daniel Dunbar  case ppc64:   return "powerpc64";
348c2f1d7e44d214bc2242a8c6faa4b624b3876540Daniel Dunbar  case ppc:     return "powerpc";
356337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case sparc:   return "sparc";
366337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case systemz: return "s390x";
3774db89e30fbd97808786026e56bcf1edb37469c7Eli Friedman  case tce:     return "tce";
386337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case thumb:   return "thumb";
396337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case x86:     return "i386";
406337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case x86_64:  return "x86_64";
418c2f1d7e44d214bc2242a8c6faa4b624b3876540Daniel Dunbar  case xcore:   return "xcore";
4223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  }
4323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  return "<invalid>";
4523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
4623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
47688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbarconst char *Triple::getArchTypePrefix(ArchType Kind) {
48688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  switch (Kind) {
49688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  default:
50688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar    return 0;
51688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
52688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case alpha:   return "alpha";
53688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
54688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case arm:
55688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case thumb:   return "arm";
56688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
57688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case bfin:    return "bfin";
58688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
59688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case cellspu: return "spu";
60688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
61688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case ppc64:
62688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case ppc:     return "ppc";
63688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
64688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case sparc:   return "sparc";
65688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
66688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case x86:
67688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case x86_64:  return "x86";
68688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  case xcore:   return "xcore";
69688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar  }
70688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar}
71688b55b436b4a3a036f0827dc484b5f219ace1a3Daniel Dunbar
7223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarconst char *Triple::getVendorTypeName(VendorType Kind) {
7323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  switch (Kind) {
7423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case UnknownVendor: return "unknown";
7523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
7623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case Apple: return "apple";
7756ce0f415cdf42d5c401035e2336c15e9031f03dChris Lattner  case PC: return "pc";
7823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  }
7923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
8023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  return "<invalid>";
8123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
8223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
8323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarconst char *Triple::getOSTypeName(OSType Kind) {
8423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  switch (Kind) {
8523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case UnknownOS: return "unknown";
8623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
87852cd112edef55ff6fe334eeaeff153209f85666Duncan Sands  case AuroraUX: return "auroraux";
886337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case Cygwin: return "cygwin";
8923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case Darwin: return "darwin";
907eaf057e54e9b5f0469057c71d81dcfee90d9e12Daniel Dunbar  case DragonFly: return "dragonfly";
9123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case FreeBSD: return "freebsd";
9223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  case Linux: return "linux";
936337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case MinGW32: return "mingw32";
948e6208304bb1a885bc5970c090c97eaebf8a15f8Chris Lattner  case MinGW64: return "mingw64";
95b8ac841c9a275cc8d4e1a92dd06cc99323e35fa2Chris Lattner  case NetBSD: return "netbsd";
96cd1267d2d68f03026aed21e22f7e28efd510ec5fDuncan Sands  case OpenBSD: return "openbsd";
97fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar  case Solaris: return "solaris";
986337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  case Win32: return "win32";
99a43fc3452b4c5a853054b6b671eacbdd05039130Chris Lattner  case Haiku: return "haiku";
10023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  }
10123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
10223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  return "<invalid>";
10323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
10423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
1052928c83b010f7cfdb0f819199d806f6942a7d995Daniel DunbarTriple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
1063c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "alpha")
1073c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return alpha;
1083c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "arm")
1093c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return arm;
1103c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "bfin")
1113c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return bfin;
1123c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "cellspu")
1133c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return cellspu;
1143c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "mips")
1153c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return mips;
1163c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "mipsel")
1173c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return mipsel;
1183c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "msp430")
1193c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return msp430;
120fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar  if (Name == "pic16")
121fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar    return pic16;
1223c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "ppc64")
1233c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return ppc64;
1243c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "ppc")
1253c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return ppc;
1263c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "sparc")
1273c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return sparc;
1283c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "systemz")
1293c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return systemz;
13074db89e30fbd97808786026e56bcf1edb37469c7Eli Friedman  if (Name == "tce")
13174db89e30fbd97808786026e56bcf1edb37469c7Eli Friedman    return tce;
1323c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "thumb")
1333c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return thumb;
1343c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "x86")
1353c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return x86;
136b796c4fde4f558d3b15455ff9ac8fb6bf62b8033Chris Lattner  if (Name == "x86-64")
1373c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return x86_64;
1383c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  if (Name == "xcore")
1393c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar    return xcore;
1403c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar
1413c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar  return UnknownArch;
1423c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar}
1433c2d4bf97fa96fe171883cd80e4ea93fc43563e6Daniel Dunbar
1442928c83b010f7cfdb0f819199d806f6942a7d995Daniel DunbarTriple::ArchType Triple::getArchTypeForDarwinArchName(StringRef Str) {
145baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // See arch(3) and llvm-gcc's driver-driver.c. We don't implement support for
146baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // archs which Darwin doesn't use.
147baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
148baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // The matching this routine does is fairly pointless, since it is neither the
149baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // complete architecture list, nor a reasonable subset. The problem is that
150baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // historically the driver driver accepts this and also ties its -march=
151baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // handling to the architecture name, so we need to be careful before removing
152baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // support for it.
153baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
154ed6878842bcfb0a923834ad95fb33a2c2507fbe7Daniel Dunbar  // This code must be kept in sync with Clang's Darwin specific argument
155ed6878842bcfb0a923834ad95fb33a2c2507fbe7Daniel Dunbar  // translation.
156ed6878842bcfb0a923834ad95fb33a2c2507fbe7Daniel Dunbar
157baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  if (Str == "ppc" || Str == "ppc601" || Str == "ppc603" || Str == "ppc604" ||
158baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar      Str == "ppc604e" || Str == "ppc750" || Str == "ppc7400" ||
159baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar      Str == "ppc7450" || Str == "ppc970")
160baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar    return Triple::ppc;
161baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
162baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  if (Str == "ppc64")
163baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar    return Triple::ppc64;
164baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
165baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  if (Str == "i386" || Str == "i486" || Str == "i486SX" || Str == "pentium" ||
166baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar      Str == "i586" || Str == "pentpro" || Str == "i686" || Str == "pentIIm3" ||
167baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar      Str == "pentIIm5" || Str == "pentium4")
168baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar    return Triple::x86;
169baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
170baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  if (Str == "x86_64")
171baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar    return Triple::x86_64;
172baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
173baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  // This is derived from the driver driver.
174baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  if (Str == "arm" || Str == "armv4t" || Str == "armv5" || Str == "xscale" ||
175baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar      Str == "armv6" || Str == "armv7")
176baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar    return Triple::arm;
177baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
178baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar  return Triple::UnknownArch;
179baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar}
180baf9b562309ae0f82774a6a3b4ffb9417a43a032Daniel Dunbar
18123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar//
18223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
18323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarvoid Triple::Parse() const {
18423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  assert(!isInitialized() && "Invalid parse call.");
18523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
186a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  StringRef ArchName = getArchName();
187651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  StringRef VendorName = getVendorName();
188651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  StringRef OSName = getOSName();
189651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
19023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  if (ArchName.size() == 4 && ArchName[0] == 'i' &&
1916337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar      ArchName[2] == '8' && ArchName[3] == '6' &&
1926337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar      ArchName[1] - '3' < 6) // i[3-9]86
19323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Arch = x86;
19423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else if (ArchName == "amd64" || ArchName == "x86_64")
19523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Arch = x86_64;
196b26bc42a2c62a4816647fd9cf4d5e0919bb18f37Daniel Dunbar  else if (ArchName == "bfin")
197b26bc42a2c62a4816647fd9cf4d5e0919bb18f37Daniel Dunbar    Arch = bfin;
198fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar  else if (ArchName == "pic16")
199fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar    Arch = pic16;
20023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else if (ArchName == "powerpc")
20123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Arch = ppc;
20223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else if (ArchName == "powerpc64")
20323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Arch = ppc64;
2046337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "arm" ||
2052447389bac8b4fc1b1edb3240a408a92616f2ca2Daniel Dunbar           ArchName.startswith("armv") ||
2062447389bac8b4fc1b1edb3240a408a92616f2ca2Daniel Dunbar           ArchName == "xscale")
2076337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = arm;
2086337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "thumb" ||
2096337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar           ArchName.startswith("thumbv"))
2106337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = thumb;
2116337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName.startswith("alpha"))
2126337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = alpha;
2136337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "spu" || ArchName == "cellspu")
2146337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = cellspu;
2156337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "msp430")
2166337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = msp430;
2176337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "mips" || ArchName == "mipsallegrex")
2186337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = mips;
2196337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "mipsel" || ArchName == "mipsallegrexel" ||
2206337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar           ArchName == "psp")
2216337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = mipsel;
2226337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "sparc")
2236337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = sparc;
2246337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (ArchName == "s390x")
2256337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    Arch = systemz;
22674db89e30fbd97808786026e56bcf1edb37469c7Eli Friedman  else if (ArchName == "tce")
22774db89e30fbd97808786026e56bcf1edb37469c7Eli Friedman    Arch = tce;
228768f1dd48fbc1582213271f2698a0328d03d4d7eRichard Osborne  else if (ArchName == "xcore")
229768f1dd48fbc1582213271f2698a0328d03d4d7eRichard Osborne    Arch = xcore;
23023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else
23123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Arch = UnknownArch;
23223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
233651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
234651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  // Handle some exceptional cases where the OS / environment components are
235651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  // stuck into the vendor field.
236651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  if (StringRef(getTriple()).count('-') == 1) {
237651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar    StringRef VendorName = getVendorName();
238651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
239651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar    if (VendorName.startswith("mingw32")) { // 'i386-mingw32', etc.
240651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar      Vendor = PC;
241651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar      OS = MinGW32;
242651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar      return;
243651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar    }
244651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
245651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar    // arm-elf is another example, but we don't currently parse anything about
246651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar    // the environment.
247651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar  }
248651aa689cc37d5932fac0e096aa8b536f282aa21Daniel Dunbar
24923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  if (VendorName == "apple")
25023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Vendor = Apple;
25123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else if (VendorName == "pc")
25223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Vendor = PC;
25323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else
25423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    Vendor = UnknownVendor;
25523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
256a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  if (OSName.startswith("auroraux"))
257852cd112edef55ff6fe334eeaeff153209f85666Duncan Sands    OS = AuroraUX;
2586337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (OSName.startswith("cygwin"))
2596337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    OS = Cygwin;
260a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("darwin"))
26123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    OS = Darwin;
262a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("dragonfly"))
2637eaf057e54e9b5f0469057c71d81dcfee90d9e12Daniel Dunbar    OS = DragonFly;
264a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("freebsd"))
26523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    OS = FreeBSD;
266a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("linux"))
26723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    OS = Linux;
2686337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (OSName.startswith("mingw32"))
2696337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    OS = MinGW32;
2708e6208304bb1a885bc5970c090c97eaebf8a15f8Chris Lattner  else if (OSName.startswith("mingw64"))
2718e6208304bb1a885bc5970c090c97eaebf8a15f8Chris Lattner    OS = MinGW64;
272a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("netbsd"))
273b8ac841c9a275cc8d4e1a92dd06cc99323e35fa2Chris Lattner    OS = NetBSD;
274a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  else if (OSName.startswith("openbsd"))
275cd1267d2d68f03026aed21e22f7e28efd510ec5fDuncan Sands    OS = OpenBSD;
276fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar  else if (OSName.startswith("solaris"))
277fdb0b7b555aaea054f85f654275fce56e5d7d1d3Daniel Dunbar    OS = Solaris;
2786337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar  else if (OSName.startswith("win32"))
2796337f15b5a73c3eeb644d59cf34d37d4a278f5f7Daniel Dunbar    OS = Win32;
280a43fc3452b4c5a853054b6b671eacbdd05039130Chris Lattner  else if (OSName.startswith("haiku"))
281a43fc3452b4c5a853054b6b671eacbdd05039130Chris Lattner  	OS = Haiku;
28223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else
28323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    OS = UnknownOS;
28423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
28523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  assert(isInitialized() && "Failed to initialize!");
28623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
28723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
288a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel DunbarStringRef Triple::getArchName() const {
289a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  return StringRef(Data).split('-').first;           // Isolate first component
29023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
29123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
292a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel DunbarStringRef Triple::getVendorName() const {
293a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  StringRef Tmp = StringRef(Data).split('-').second; // Strip first component
294a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  return Tmp.split('-').first;                       // Isolate second component
29523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
29623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
297a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel DunbarStringRef Triple::getOSName() const {
298a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  StringRef Tmp = StringRef(Data).split('-').second; // Strip first component
299a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  Tmp = Tmp.split('-').second;                       // Strip second component
300a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  return Tmp.split('-').first;                       // Isolate third component
30123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
30223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
303a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel DunbarStringRef Triple::getEnvironmentName() const {
304a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  StringRef Tmp = StringRef(Data).split('-').second; // Strip first component
305a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  Tmp = Tmp.split('-').second;                       // Strip second component
306a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  return Tmp.split('-').second;                      // Strip third component
30723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
30823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
309a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel DunbarStringRef Triple::getOSAndEnvironmentName() const {
310a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  StringRef Tmp = StringRef(Data).split('-').second; // Strip first component
311a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  return Tmp.split('-').second;                      // Strip second component
31223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
31323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
314dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattnerstatic unsigned EatNumber(StringRef &Str) {
315dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  assert(!Str.empty() && Str[0] >= '0' && Str[0] <= '9' && "Not a number");
316dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  unsigned Result = Str[0]-'0';
317dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
318dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Eat the digit.
319dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  Str = Str.substr(1);
320dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
321dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Handle "darwin11".
322dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (Result == 1 && !Str.empty() && Str[0] >= '0' && Str[0] <= '9') {
323dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    Result = Result*10 + (Str[0] - '0');
324dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    // Eat the digit.
325dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    Str = Str.substr(1);
326dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  }
327dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
328dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  return Result;
329dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner}
330dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
331dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner/// getDarwinNumber - Parse the 'darwin number' out of the specific target
332dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner/// triple.  For example, if we have darwin8.5 return 8,5,0.  If any entry is
333dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner/// not defined, return 0's.  This requires that the triple have an OSType of
334dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner/// darwin before it is called.
335dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattnervoid Triple::getDarwinNumber(unsigned &Maj, unsigned &Min,
336dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner                             unsigned &Revision) const {
337dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  assert(getOS() == Darwin && "Not a darwin target triple!");
338dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  StringRef OSName = getOSName();
339dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  assert(OSName.startswith("darwin") && "Unknown darwin target triple!");
340dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
341dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Strip off "darwin".
342dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  OSName = OSName.substr(6);
343dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
344dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  Maj = Min = Revision = 0;
345dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
346dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9')
347dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    return;
348dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
349dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // The major version is the first digit.
350dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  Maj = EatNumber(OSName);
351dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName.empty()) return;
352dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
353dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Handle minor version: 10.4.9 -> darwin8.9.
354dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName[0] != '.')
355dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    return;
356dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
357dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Eat the '.'.
358dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  OSName = OSName.substr(1);
359dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
360dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9')
361dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    return;
362dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
363dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  Min = EatNumber(OSName);
364dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName.empty()) return;
365dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
366dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Handle revision darwin8.9.1
367dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName[0] != '.')
368dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    return;
369dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
370dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  // Eat the '.'.
371dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  OSName = OSName.substr(1);
372dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
373dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  if (OSName.empty() || OSName[0] < '0' || OSName[0] > '9')
374dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner    return;
375dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
376dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner  Revision = EatNumber(OSName);
377dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner}
378dfc17f75e81250f3dcf06938f164481a77a50d60Chris Lattner
379a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbarvoid Triple::setTriple(const Twine &Str) {
380a14d225ef4d3d8bd8ec9ec913246d1fb47d2edc1Daniel Dunbar  Data = Str.str();
38123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  Arch = InvalidArch;
38223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
38323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
38423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarvoid Triple::setArch(ArchType Kind) {
38523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  setArchName(getArchTypeName(Kind));
38623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
38723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
38823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarvoid Triple::setVendor(VendorType Kind) {
38923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  setVendorName(getVendorTypeName(Kind));
39023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
39123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
39223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbarvoid Triple::setOS(OSType Kind) {
39323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  setOSName(getOSTypeName(Kind));
39423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
39523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
3962928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbarvoid Triple::setArchName(StringRef Str) {
3970b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  // Work around a miscompilation bug for Twines in gcc 4.0.3.
3980b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  SmallString<64> Triple;
3990b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  Triple += Str;
4000b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  Triple += "-";
4010b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  Triple += getVendorName();
4020b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  Triple += "-";
4030b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  Triple += getOSAndEnvironmentName();
4040b22873adc26711e44a6f2e06eb0e97a01787594Jeffrey Yasskin  setTriple(Triple.str());
40523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
40623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4072928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbarvoid Triple::setVendorName(StringRef Str) {
40823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  setTriple(getArchName() + "-" + Str + "-" + getOSAndEnvironmentName());
40923e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
41023e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4112928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbarvoid Triple::setOSName(StringRef Str) {
41223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  if (hasEnvironment())
41323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    setTriple(getArchName() + "-" + getVendorName() + "-" + Str +
41423e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar              "-" + getEnvironmentName());
41523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  else
41623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar    setTriple(getArchName() + "-" + getVendorName() + "-" + Str);
41723e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
41823e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4192928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbarvoid Triple::setEnvironmentName(StringRef Str) {
4202928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbar  setTriple(getArchName() + "-" + getVendorName() + "-" + getOSName() +
42123e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar            "-" + Str);
42223e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
42323e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar
4242928c83b010f7cfdb0f819199d806f6942a7d995Daniel Dunbarvoid Triple::setOSAndEnvironmentName(StringRef Str) {
42523e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar  setTriple(getArchName() + "-" + getVendorName() + "-" + Str);
42623e97b05da7b31ed97e5ccc6330670da0173ca2eDaniel Dunbar}
427