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