Lines Matching refs:Triple

1 //===--- Triple.cpp - Target triple helper class --------------------------===//
10 #include "llvm/ADT/Triple.h"
20 const char *Triple::getArchTypeName(ArchType Kind) {
71 const char *Triple::getArchTypePrefix(ArchType Kind) {
135 const char *Triple::getVendorTypeName(VendorType Kind) {
156 const char *Triple::getOSTypeName(OSType Kind) {
192 const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
213 static Triple::ArchType parseBPFArch(StringRef ArchName) {
216 return Triple::bpfel;
218 return Triple::bpfeb;
220 return Triple::bpfeb;
222 return Triple::bpfel;
224 return Triple::UnknownArch;
228 Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
229 Triple::ArchType BPFArch(parseBPFArch(Name));
230 return StringSwitch<Triple::ArchType>(Name)
277 static Triple::ArchType parseARMArch(StringRef ArchName) {
281 Triple::ArchType arch = Triple::UnknownArch;
286 arch = Triple::arm;
289 arch = Triple::thumb;
292 arch = Triple::aarch64;
300 arch = Triple::armeb;
303 arch = Triple::thumbeb;
306 arch = Triple::aarch64_be;
315 return Triple::UnknownArch;
320 return Triple::UnknownArch;
327 return Triple::thumbeb;
329 return Triple::thumb;
335 static Triple::ArchType parseArch(StringRef ArchName) {
336 auto AT = StringSwitch<Triple::ArchType>(ArchName)
337 .Cases("i386", "i486", "i586", "i686", Triple::x86)
339 .Cases("i786", "i886", "i986", Triple::x86)
340 .Cases("amd64", "x86_64", "x86_64h", Triple::x86_64)
341 .Cases("powerpc", "ppc32", Triple::ppc)
342 .Cases("powerpc64", "ppu", "ppc64", Triple::ppc64)
343 .Cases("powerpc64le", "ppc64le", Triple::ppc64le)
344 .Case("xscale", Triple::arm)
345 .Case("xscaleeb", Triple::armeb)
346 .Case("aarch64", Triple::aarch64)
347 .Case("aarch64_be", Triple::aarch64_be)
348 .Case("arm64", Triple::aarch64)
349 .Case("arm", Triple::arm)
350 .Case("armeb", Triple::armeb)
351 .Case("thumb", Triple::thumb)
352 .Case("thumbeb", Triple::thumbeb)
353 .Case("avr", Triple::avr)
354 .Case("msp430", Triple::msp430)
355 .Cases("mips", "mipseb", "mipsallegrex", Triple::mips)
356 .Cases("mipsel", "mipsallegrexel", Triple::mipsel)
357 .Cases("mips64", "mips64eb", Triple::mips64)
358 .Case("mips64el", Triple::mips64el)
359 .Case("r600", Triple::r600)
360 .Case("amdgcn", Triple::amdgcn)
361 .Case("hexagon", Triple::hexagon)
362 .Cases("s390x", "systemz", Triple::systemz)
363 .Case("sparc", Triple::sparc)
364 .Case("sparcel", Triple::sparcel)
365 .Cases("sparcv9", "sparc64", Triple::sparcv9)
366 .Case("tce", Triple::tce)
367 .Case("xcore", Triple::xcore)
368 .Case("nvptx", Triple::nvptx)
369 .Case("nvptx64", Triple::nvptx64)
370 .Case("le32", Triple::le32)
371 .Case("le64", Triple::le64)
372 .Case("amdil", Triple::amdil)
373 .Case("amdil64", Triple::amdil64)
374 .Case("hsail", Triple::hsail)
375 .Case("hsail64", Triple::hsail64)
376 .Case("spir", Triple::spir)
377 .Case("spir64", Triple::spir64)
378 .StartsWith("kalimba", Triple::kalimba)
379 .Case("shave", Triple::shave)
380 .Case("wasm32", Triple::wasm32)
381 .Case("wasm64", Triple::wasm64)
382 .Default(Triple::UnknownArch);
386 if (AT == Triple::UnknownArch) {
397 static Triple::VendorType parseVendor(StringRef VendorName) {
398 return StringSwitch<Triple::VendorType>(VendorName)
399 .Case("apple", Triple::Apple)
400 .Case("pc", Triple::PC)
401 .Case("scei", Triple::SCEI)
402 .Case("bgp", Triple::BGP)
403 .Case("bgq", Triple::BGQ)
404 .Case("fsl", Triple::Freescale)
405 .Case("ibm", Triple::IBM)
406 .Case("img", Triple::ImaginationTechnologies)
407 .Case("mti", Triple::MipsTechnologies)
408 .Case("nvidia", Triple::NVIDIA)
409 .Case("csr", Triple::CSR)
410 .Case("myriad", Triple::Myriad)
411 .Default(Triple::UnknownVendor);
414 static Triple::OSType parseOS(StringRef OSName) {
415 return StringSwitch<Triple::OSType>(OSName)
416 .StartsWith("cloudabi", Triple::CloudABI)
417 .StartsWith("darwin", Triple::Darwin)
418 .StartsWith("dragonfly", Triple::DragonFly)
419 .StartsWith("freebsd", Triple::FreeBSD)
420 .StartsWith("ios", Triple::IOS)
421 .StartsWith("kfreebsd", Triple::KFreeBSD)
422 .StartsWith("linux", Triple::Linux)
423 .StartsWith("lv2", Triple::Lv2)
424 .StartsWith("macosx", Triple::MacOSX)
425 .StartsWith("netbsd", Triple::NetBSD)
426 .StartsWith("openbsd", Triple::OpenBSD)
427 .StartsWith("solaris", Triple::Solaris)
428 .StartsWith("win32", Triple::Win32)
429 .StartsWith("windows", Triple::Win32)
430 .StartsWith("haiku", Triple::Haiku)
431 .StartsWith("minix", Triple::Minix)
432 .StartsWith("rtems", Triple::RTEMS)
433 .StartsWith("nacl", Triple::NaCl)
434 .StartsWith("cnk", Triple::CNK)
435 .StartsWith("bitrig", Triple::Bitrig)
436 .StartsWith("aix", Triple::AIX)
437 .StartsWith("cuda", Triple::CUDA)
438 .StartsWith("nvcl", Triple::NVCL)
439 .StartsWith("amdhsa", Triple::AMDHSA)
440 .StartsWith("ps4", Triple::PS4)
441 .StartsWith("elfiamcu", Triple::ELFIAMCU)
442 .StartsWith("tvos", Triple::TvOS)
443 .StartsWith("watchos", Triple::WatchOS)
444 .Default(Triple::UnknownOS);
447 static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
448 return StringSwitch<Triple::EnvironmentType>(EnvironmentName)
449 .StartsWith("eabihf", Triple::EABIHF)
450 .StartsWith("eabi", Triple::EABI)
451 .StartsWith("gnueabihf", Triple::GNUEABIHF)
452 .StartsWith("gnueabi", Triple::GNUEABI)
453 .StartsWith("gnux32", Triple::GNUX32)
454 .StartsWith("code16", Triple::CODE16)
455 .StartsWith("gnu", Triple::GNU)
456 .StartsWith("android", Triple::Android)
457 .StartsWith("msvc", Triple::MSVC)
458 .StartsWith("itanium", Triple::Itanium)
459 .StartsWith("cygnus", Triple::Cygnus)
460 .StartsWith("amdopencl", Triple::AMDOpenCL)
461 .StartsWith("coreclr", Triple::CoreCLR)
462 .Default(Triple::UnknownEnvironment);
465 static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) {
466 return StringSwitch<Triple::ObjectFormatType>(EnvironmentName)
467 .EndsWith("coff", Triple::COFF)
468 .EndsWith("elf", Triple::ELF)
469 .EndsWith("macho", Triple::MachO)
470 .Default(Triple::UnknownObjectFormat);
473 static Triple::SubArchType parseSubArch(StringRef SubArchName) {
478 return StringSwitch<Triple::SubArchType>(SubArchName)
479 .EndsWith("kalimba3", Triple::KalimbaSubArch_v3)
480 .EndsWith("kalimba4", Triple::KalimbaSubArch_v4)
481 .EndsWith("kalimba5", Triple::KalimbaSubArch_v5)
482 .Default(Triple::NoSubArch);
487 return Triple::NoSubArch;
489 return Triple::ARMSubArch_v4t;
491 return Triple::ARMSubArch_v5;
497 return Triple::ARMSubArch_v5te;
499 return Triple::ARMSubArch_v6;
502 return Triple::ARMSubArch_v6k;
504 return Triple::ARMSubArch_v6t2;
506 return Triple::ARMSubArch_v6m;
509 return Triple::ARMSubArch_v7;
511 return Triple::ARMSubArch_v7k;
513 return Triple::ARMSubArch_v7m;
515 return Triple::ARMSubArch_v7s;
517 return Triple::ARMSubArch_v7em;
519 return Triple::ARMSubArch_v8;
521 return Triple::ARMSubArch_v8_1a;
523 return Triple::ARMSubArch_v8_2a;
525 return Triple::NoSubArch;
529 static const char *getObjectFormatTypeName(Triple::ObjectFormatType Kind) {
531 case Triple::UnknownObjectFormat: return "";
532 case Triple::COFF: return "coff";
533 case Triple::ELF: return "elf";
534 case Triple::MachO: return "macho";
539 static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
541 case Triple::UnknownArch:
542 case Triple::aarch64:
543 case Triple::arm:
544 case Triple::thumb:
545 case Triple::x86:
546 case Triple::x86_64:
548 return Triple::MachO;
550 return Triple::COFF;
551 return Triple::ELF;
553 case Triple::aarch64_be:
554 case Triple::amdgcn:
555 case Triple::amdil:
556 case Triple::amdil64:
557 case Triple::armeb:
558 case Triple::avr:
559 case Triple::bpfeb:
560 case Triple::bpfel:
561 case Triple::hexagon:
562 case Triple::hsail:
563 case Triple::hsail64:
564 case Triple::kalimba:
565 case Triple::le32:
566 case Triple::le64:
567 case Triple::mips:
568 case Triple::mips64:
569 case Triple::mips64el:
570 case Triple::mipsel:
571 case Triple::msp430:
572 case Triple::nvptx:
573 case Triple::nvptx64:
574 case Triple::ppc64le:
575 case Triple::r600:
576 case Triple::shave:
577 case Triple::sparc:
578 case Triple::sparcel:
579 case Triple::sparcv9:
580 case Triple::spir:
581 case Triple::spir64:
582 case Triple::systemz:
583 case Triple::tce:
584 case Triple::thumbeb:
585 case Triple::wasm32:
586 case Triple::wasm64:
587 case Triple::xcore:
588 return Triple::ELF;
590 case Triple::ppc:
591 case Triple::ppc64:
593 return Triple::MachO;
594 return Triple::ELF;
603 Triple::Triple(const Twine &Str)
634 Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr)
640 Environment(), ObjectFormat(Triple::UnknownObjectFormat) {
649 Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr,
659 if (ObjectFormat == Triple::UnknownObjectFormat)
663 std::string Triple::normalize(StringRef Str) {
803 if (Environment == Triple::Android && Components[3].startswith("androideabi")) {
813 if (OS == Triple::Win32) {
817 if (ObjectFormat == UnknownObjectFormat || ObjectFormat == Triple::COFF)
832 (OS == Triple::Win32 && Environment != UnknownEnvironment)) {
833 if (ObjectFormat != UnknownObjectFormat && ObjectFormat != Triple::COFF) {
848 StringRef Triple::getArchName() const {
852 StringRef Triple::getVendorName() const {
857 StringRef Triple::getOSName() const {
863 StringRef Triple::getEnvironmentName() const {
869 StringRef Triple::getOSAndEnvironmentName() const {
909 void Triple::getEnvironmentVersion(unsigned &Major, unsigned &Minor,
919 void Triple::getOSVersion(unsigned &Major, unsigned &Minor,
930 bool Triple::getMacOSXVersion(unsigned &Major, unsigned &Minor,
971 void Triple::getiOSVersion(unsigned &Major, unsigned &Minor,
997 void Triple::getWatchOSVersion(unsigned &Major, unsigned &Minor,
1021 void Triple::setTriple(const Twine &Str) {
1022 *this = Triple(Str);
1025 void Triple::setArch(ArchType Kind) {
1029 void Triple::setVendor(VendorType Kind) {
1033 void Triple::setOS(OSType Kind) {
1037 void Triple::setEnvironment(EnvironmentType Kind) {
1045 void Triple::setObjectFormat(ObjectFormatType Kind) {
1053 void Triple::setArchName(StringRef Str) {
1055 SmallString<64> Triple;
1056 Triple += Str;
1057 Triple += "-";
1058 Triple += getVendorName();
1059 Triple += "-";
1060 Triple += getOSAndEnvironmentName();
1061 setTriple(Triple);
1064 void Triple::setVendorName(StringRef Str) {
1068 void Triple::setOSName(StringRef Str) {
1076 void Triple::setEnvironmentName(StringRef Str) {
1081 void Triple::setOSAndEnvironmentName(StringRef Str) {
1085 static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
1087 case llvm::Triple::UnknownArch:
1090 case llvm::Triple::avr:
1091 case llvm::Triple::msp430:
1094 case llvm::Triple::arm:
1095 case llvm::Triple::armeb:
1096 case llvm::Triple::hexagon:
1097 case llvm::Triple::le32:
1098 case llvm::Triple::mips:
1099 case llvm::Triple::mipsel:
1100 case llvm::Triple::nvptx:
1101 case llvm::Triple::ppc:
1102 case llvm::Triple::r600:
1103 case llvm::Triple::sparc:
1104 case llvm::Triple::sparcel:
1105 case llvm::Triple::tce:
1106 case llvm::Triple::thumb:
1107 case llvm::Triple::thumbeb:
1108 case llvm::Triple::x86:
1109 case llvm::Triple::xcore:
1110 case llvm::Triple::amdil:
1111 case llvm::Triple::hsail:
1112 case llvm::Triple::spir:
1113 case llvm::Triple::kalimba:
1114 case llvm::Triple::shave:
1115 case llvm::Triple::wasm32:
1118 case llvm::Triple::aarch64:
1119 case llvm::Triple::aarch64_be:
1120 case llvm::Triple::amdgcn:
1121 case llvm::Triple::bpfel:
1122 case llvm::Triple::bpfeb:
1123 case llvm::Triple::le64:
1124 case llvm::Triple::mips64:
1125 case llvm::Triple::mips64el:
1126 case llvm::Triple::nvptx64:
1127 case llvm::Triple::ppc64:
1128 case llvm::Triple::ppc64le:
1129 case llvm::Triple::sparcv9:
1130 case llvm::Triple::systemz:
1131 case llvm::Triple::x86_64:
1132 case llvm::Triple::amdil64:
1133 case llvm::Triple::hsail64:
1134 case llvm::Triple::spir64:
1135 case llvm::Triple::wasm64:
1141 bool Triple::isArch64Bit() const {
1145 bool Triple::isArch32Bit() const {
1149 bool Triple::isArch16Bit() const {
1153 Triple Triple::get32BitArchVariant() const {
1154 Triple T(*this);
1156 case Triple::UnknownArch:
1157 case Triple::amdgcn:
1158 case Triple::avr:
1159 case Triple::bpfel:
1160 case Triple::bpfeb:
1161 case Triple::msp430:
1162 case Triple::systemz:
1163 case Triple::ppc64le:
1167 case Triple::amdil:
1168 case Triple::hsail:
1169 case Triple::spir:
1170 case Triple::arm:
1171 case Triple::armeb:
1172 case Triple::hexagon:
1173 case Triple::kalimba:
1174 case Triple::le32:
1175 case Triple::mips:
1176 case Triple::mipsel:
1177 case Triple::nvptx:
1178 case Triple::ppc:
1179 case Triple::r600:
1180 case Triple::sparc:
1181 case Triple::sparcel:
1182 case Triple::tce:
1183 case Triple::thumb:
1184 case Triple::thumbeb:
1185 case Triple::x86:
1186 case Triple::xcore:
1187 case Triple::shave:
1188 case Triple::wasm32:
1192 case Triple::aarch64: T.setArch(Triple::arm); break;
1193 case Triple::aarch64_be: T.setArch(Triple::armeb); break;
1194 case Triple::le64: T.setArch(Triple::le32); break;
1195 case Triple::mips64: T.setArch(Triple::mips); break;
1196 case Triple::mips64el: T.setArch(Triple::mipsel); break;
1197 case Triple::nvptx64: T.setArch(Triple::nvptx); break;
1198 case Triple::ppc64: T.setArch(Triple::ppc); break;
1199 case Triple::sparcv9: T.setArch(Triple::sparc); break;
1200 case Triple::x86_64: T.setArch(Triple::x86); break;
1201 case Triple::amdil64: T.setArch(Triple::amdil); break;
1202 case Triple::hsail64: T.setArch(Triple::hsail); break;
1203 case Triple::spir64: T.setArch(Triple::spir); break;
1204 case Triple::wasm64: T.setArch(Triple::wasm32); break;
1209 Triple Triple::get64BitArchVariant() const {
1210 Triple T(*this);
1212 case Triple::UnknownArch:
1213 case Triple::avr:
1214 case Triple::hexagon:
1215 case Triple::kalimba:
1216 case Triple::msp430:
1217 case Triple::r600:
1218 case Triple::tce:
1219 case Triple::xcore:
1220 case Triple::sparcel:
1221 case Triple::shave:
1225 case Triple::aarch64:
1226 case Triple::aarch64_be:
1227 case Triple::bpfel:
1228 case Triple::bpfeb:
1229 case Triple::le64:
1230 case Triple::amdil64:
1231 case Triple::amdgcn:
1232 case Triple::hsail64:
1233 case Triple::spir64:
1234 case Triple::mips64:
1235 case Triple::mips64el:
1236 case Triple::nvptx64:
1237 case Triple::ppc64:
1238 case Triple::ppc64le:
1239 case Triple::sparcv9:
1240 case Triple::systemz:
1241 case Triple::x86_64:
1242 case Triple::wasm64:
1246 case Triple::arm: T.setArch(Triple::aarch64); break;
1247 case Triple::armeb: T.setArch(Triple::aarch64_be); break;
1248 case Triple::le32: T.setArch(Triple::le64); break;
1249 case Triple::mips: T.setArch(Triple::mips64); break;
1250 case Triple::mipsel: T.setArch(Triple::mips64el); break;
1251 case Triple::nvptx: T.setArch(Triple::nvptx64); break;
1252 case Triple::ppc: T.setArch(Triple::ppc64); break;
1253 case Triple::sparc: T.setArch(Triple::sparcv9); break;
1254 case Triple::x86: T.setArch(Triple::x86_64); break;
1255 case Triple::amdil: T.setArch(Triple::amdil64); break;
1256 case Triple::hsail: T.setArch(Triple::hsail64); break;
1257 case Triple::spir: T.setArch(Triple::spir64); break;
1258 case Triple::thumb: T.setArch(Triple::aarch64); break;
1259 case Triple::thumbeb: T.setArch(Triple::aarch64_be); break;
1260 case Triple::wasm32: T.setArch(Triple::wasm64); break;
1265 Triple Triple::getBigEndianArchVariant() const {
1266 Triple T(*this);
1268 case Triple::UnknownArch:
1269 case Triple::amdgcn:
1270 case Triple::amdil64:
1271 case Triple::amdil:
1272 case Triple::avr:
1273 case Triple::hexagon:
1274 case Triple::hsail64:
1275 case Triple::hsail:
1276 case Triple::kalimba:
1277 case Triple::le32:
1278 case Triple::le64:
1279 case Triple::msp430:
1280 case Triple::nvptx64:
1281 case Triple::nvptx:
1282 case Triple::r600:
1283 case Triple::shave:
1284 case Triple::spir64:
1285 case Triple::spir:
1286 case Triple::wasm32:
1287 case Triple::wasm64:
1288 case Triple::x86:
1289 case Triple::x86_64:
1290 case Triple::xcore:
1294 case Triple::arm:
1295 case Triple::thumb:
1299 case Triple::aarch64_be:
1300 case Triple::armeb:
1301 case Triple::bpfeb:
1302 case Triple::mips64:
1303 case Triple::mips:
1304 case Triple::ppc64:
1305 case Triple::ppc:
1306 case Triple::sparc:
1307 case Triple::sparcv9:
1308 case Triple::systemz:
1309 case Triple::tce:
1310 case Triple::thumbeb:
1314 case Triple::aarch64: T.setArch(Triple::aarch64_be); break;
1315 case Triple::bpfel: T.setArch(Triple::bpfeb); break;
1316 case Triple::mips64el:T.setArch(Triple::mips64); break;
1317 case Triple::mipsel: T.setArch(Triple::mips); break;
1318 case Triple::ppc64le: T.setArch(Triple::ppc64); break;
1319 case Triple::sparcel: T.setArch(Triple::sparc); break;
1324 Triple Triple::getLittleEndianArchVariant() const {
1325 Triple T(*this);
1327 case Triple::UnknownArch:
1328 case Triple::ppc:
1329 case Triple::sparcv9:
1330 case Triple::systemz:
1331 case Triple::tce:
1335 case Triple::armeb:
1336 case Triple::thumbeb:
1340 case Triple::aarch64:
1341 case Triple::amdgcn:
1342 case Triple::amdil64:
1343 case Triple::amdil:
1344 case Triple::arm:
1345 case Triple::avr:
1346 case Triple::bpfel:
1347 case Triple::hexagon:
1348 case Triple::hsail64:
1349 case Triple::hsail:
1350 case Triple::kalimba:
1351 case Triple::le32:
1352 case Triple::le64:
1353 case Triple::mips64el:
1354 case Triple::mipsel:
1355 case Triple::msp430:
1356 case Triple::nvptx64:
1357 case Triple::nvptx:
1358 case Triple::ppc64le:
1359 case Triple::r600:
1360 case Triple::shave:
1361 case Triple::sparcel:
1362 case Triple::spir64:
1363 case Triple::spir:
1364 case Triple::thumb:
1365 case Triple::wasm32:
1366 case Triple::wasm64:
1367 case Triple::x86:
1368 case Triple::x86_64:
1369 case Triple::xcore:
1373 case Triple::aarch64_be: T.setArch(Triple::aarch64); break;
1374 case Triple::bpfeb: T.setArch(Triple::bpfel); break;
1375 case Triple::mips64: T.setArch(Triple::mips64el); break;
1376 case Triple::mips: T.setArch(Triple::mipsel); break;
1377 case Triple::ppc64: T.setArch(Triple::ppc64le); break;
1378 case Triple::sparc: T.setArch(Triple::sparcel); break;
1383 StringRef Triple::getARMCPUForArch(StringRef MArch) const {
1390 case llvm::Triple::FreeBSD:
1391 case llvm::Triple::NetBSD:
1395 case llvm::Triple::Win32:
1398 case llvm::Triple::MacOSX:
1399 case llvm::Triple::IOS:
1400 case llvm::Triple::WatchOS:
1418 case llvm::Triple::NetBSD:
1420 case llvm::Triple::GNUEABIHF:
1421 case llvm::Triple::GNUEABI:
1422 case llvm::Triple::EABIHF:
1423 case llvm::Triple::EABI:
1428 case llvm::Triple::NaCl:
1432 case llvm::Triple::EABIHF:
1433 case llvm::Triple::GNUEABIHF: