Lines Matching full:triple
1 //===--- Triple.cpp - Target triple helper class --------------------------===//
9 #include "llvm/TargetParser/Triple.h"
24 StringRef Triple::getArchTypeName(ArchType Kind) {
94 StringRef Triple::getArchName(ArchType Kind, SubArchType SubArch) {
96 case Triple::mips:
100 case Triple::mipsel:
104 case Triple::mips64:
108 case Triple::mips64el:
112 case Triple::aarch64:
118 case Triple::dxil:
120 case Triple::NoSubArch:
121 case Triple::DXILSubArch_v1_0:
123 case Triple::DXILSubArch_v1_1:
125 case Triple::DXILSubArch_v1_2:
127 case Triple::DXILSubArch_v1_3:
129 case Triple::DXILSubArch_v1_4:
131 case Triple::DXILSubArch_v1_5:
133 case Triple::DXILSubArch_v1_6:
135 case Triple::DXILSubArch_v1_7:
137 case Triple::DXILSubArch_v1_8:
149 StringRef Triple::getArchTypePrefix(ArchType Kind) {
239 StringRef Triple::getVendorTypeName(VendorType Kind) {
261 StringRef Triple::getOSTypeName(OSType Kind) {
310 StringRef Triple::getEnvironmentTypeName(EnvironmentType Kind) {
365 StringRef Triple::getObjectFormatTypeName(ObjectFormatType Kind) {
380 static Triple::ArchType parseBPFArch(StringRef ArchName) {
383 return Triple::bpfel;
385 return Triple::bpfeb;
387 return Triple::bpfeb;
389 return Triple::bpfel;
391 return Triple::UnknownArch;
395 Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
396 Triple::ArchType BPFArch(parseBPFArch(Name));
397 return StringSwitch<Triple::ArchType>(Name)
467 static Triple::ArchType parseARMArch(StringRef ArchName) {
471 Triple::ArchType arch = Triple::UnknownArch;
476 arch = Triple::arm;
479 arch = Triple::thumb;
482 arch = Triple::aarch64;
492 arch = Triple::armeb;
495 arch = Triple::thumbeb;
498 arch = Triple::aarch64_be;
512 return Triple::UnknownArch;
517 return Triple::UnknownArch;
524 return Triple::thumbeb;
526 return Triple::thumb;
532 static Triple::ArchType parseArch(StringRef ArchName) {
534 StringSwitch<Triple::ArchType>(ArchName)
535 .Cases("i386", "i486", "i586", "i686", Triple::x86)
537 .Cases("i786", "i886", "i986", Triple::x86)
538 .Cases("amd64", "x86_64", "x86_64h", Triple::x86_64)
539 .Cases("powerpc", "powerpcspe", "ppc", "ppc32", Triple::ppc)
540 .Cases("powerpcle", "ppcle", "ppc32le", Triple::ppcle)
541 .Cases("powerpc64", "ppu", "ppc64", Triple::ppc64)
542 .Cases("powerpc64le", "ppc64le", Triple::ppc64le)
543 .Case("xscale", Triple::arm)
544 .Case("xscaleeb", Triple::armeb)
545 .Case("aarch64", Triple::aarch64)
546 .Case("aarch64_be", Triple::aarch64_be)
547 .Case("aarch64_32", Triple::aarch64_32)
548 .Case("arc", Triple::arc)
549 .Case("arm64", Triple::aarch64)
550 .Case("arm64_32", Triple::aarch64_32)
551 .Case("arm64e", Triple::aarch64)
552 .Case("arm64ec", Triple::aarch64)
553 .Case("arm", Triple::arm)
554 .Case("armeb", Triple::armeb)
555 .Case("thumb", Triple::thumb)
556 .Case("thumbeb", Triple::thumbeb)
557 .Case("avr", Triple::avr)
558 .Case("m68k", Triple::m68k)
559 .Case("msp430", Triple::msp430)
561 Triple::mips)
563 Triple::mipsel)
565 "mipsn32r6", Triple::mips64)
567 "mipsn32r6el", Triple::mips64el)
568 .Case("r600", Triple::r600)
569 .Case("amdgcn", Triple::amdgcn)
570 .Case("riscv32", Triple::riscv32)
571 .Case("riscv64", Triple::riscv64)
572 .Case("hexagon", Triple::hexagon)
573 .Cases("s390x", "systemz", Triple::systemz)
574 .Case("sparc", Triple::sparc)
575 .Case("sparcel", Triple::sparcel)
576 .Cases("sparcv9", "sparc64", Triple::sparcv9)
577 .Case("tce", Triple::tce)
578 .Case("tcele", Triple::tcele)
579 .Case("xcore", Triple::xcore)
580 .Case("nvptx", Triple::nvptx)
581 .Case("nvptx64", Triple::nvptx64)
582 .Case("le32", Triple::le32)
583 .Case("le64", Triple::le64)
584 .Case("amdil", Triple::amdil)
585 .Case("amdil64", Triple::amdil64)
586 .Case("hsail", Triple::hsail)
587 .Case("hsail64", Triple::hsail64)
588 .Case("spir", Triple::spir)
589 .Case("spir64", Triple::spir64)
590 .Cases("spirv", "spirv1.5", "spirv1.6", Triple::spirv)
593 "spirv32v1.6", Triple::spirv32)
596 "spirv64v1.6", Triple::spirv64)
597 .StartsWith("kalimba", Triple::kalimba)
598 .Case("lanai", Triple::lanai)
599 .Case("renderscript32", Triple::renderscript32)
600 .Case("renderscript64", Triple::renderscript64)
601 .Case("shave", Triple::shave)
602 .Case("ve", Triple::ve)
603 .Case("wasm32", Triple::wasm32)
604 .Case("wasm64", Triple::wasm64)
605 .Case("csky", Triple::csky)
606 .Case("loongarch32", Triple::loongarch32)
607 .Case("loongarch64", Triple::loongarch64)
610 Triple::dxil)
611 .Case("xtensa", Triple::xtensa)
612 .Default(Triple::UnknownArch);
616 if (AT == Triple::UnknownArch) {
627 static Triple::VendorType parseVendor(StringRef VendorName) {
628 return StringSwitch<Triple::VendorType>(VendorName)
629 .Case("apple", Triple::Apple)
630 .Case("pc", Triple::PC)
631 .Case("scei", Triple::SCEI)
632 .Case("sie", Triple::SCEI)
633 .Case("fsl", Triple::Freescale)
634 .Case("ibm", Triple::IBM)
635 .Case("img", Triple::ImaginationTechnologies)
636 .Case("mti", Triple::MipsTechnologies)
637 .Case("nvidia", Triple::NVIDIA)
638 .Case("csr", Triple::CSR)
639 .Case("amd", Triple::AMD)
640 .Case("mesa", Triple::Mesa)
641 .Case("suse", Triple::SUSE)
642 .Case("oe", Triple::OpenEmbedded)
643 .Default(Triple::UnknownVendor);
646 static Triple::OSType parseOS(StringRef OSName) {
647 return StringSwitch<Triple::OSType>(OSName)
648 .StartsWith("darwin", Triple::Darwin)
649 .StartsWith("dragonfly", Triple::DragonFly)
650 .StartsWith("freebsd", Triple::FreeBSD)
651 .StartsWith("fuchsia", Triple::Fuchsia)
652 .StartsWith("ios", Triple::IOS)
653 .StartsWith("kfreebsd", Triple::KFreeBSD)
654 .StartsWith("linux", Triple::Linux)
655 .StartsWith("lv2", Triple::Lv2)
656 .StartsWith("macos", Triple::MacOSX)
657 .StartsWith("netbsd", Triple::NetBSD)
658 .StartsWith("openbsd", Triple::OpenBSD)
659 .StartsWith("solaris", Triple::Solaris)
660 .StartsWith("uefi", Triple::UEFI)
661 .StartsWith("win32", Triple::Win32)
662 .StartsWith("windows", Triple::Win32)
663 .StartsWith("zos", Triple::ZOS)
664 .StartsWith("haiku", Triple::Haiku)
665 .StartsWith("rtems", Triple::RTEMS)
666 .StartsWith("nacl", Triple::NaCl)
667 .StartsWith("aix", Triple::AIX)
668 .StartsWith("cuda", Triple::CUDA)
669 .StartsWith("nvcl", Triple::NVCL)
670 .StartsWith("amdhsa", Triple::AMDHSA)
671 .StartsWith("ps4", Triple::PS4)
672 .StartsWith("ps5", Triple::PS5)
673 .StartsWith("elfiamcu", Triple::ELFIAMCU)
674 .StartsWith("tvos", Triple::TvOS)
675 .StartsWith("watchos", Triple::WatchOS)
676 .StartsWith("bridgeos", Triple::BridgeOS)
677 .StartsWith("driverkit", Triple::DriverKit)
678 .StartsWith("xros", Triple::XROS)
679 .StartsWith("visionos", Triple::XROS)
680 .StartsWith("mesa3d", Triple::Mesa3D)
681 .StartsWith("amdpal", Triple::AMDPAL)
682 .StartsWith("hermit", Triple::HermitCore)
683 .StartsWith("hurd", Triple::Hurd)
684 .StartsWith("wasi", Triple::WASI)
685 .StartsWith("emscripten", Triple::Emscripten)
686 .StartsWith("shadermodel", Triple::ShaderModel)
687 .StartsWith("liteos", Triple::LiteOS)
688 .StartsWith("serenity", Triple::Serenity)
689 .StartsWith("vulkan", Triple::Vulkan)
690 .Default(Triple::UnknownOS);
693 static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
694 return StringSwitch<Triple::EnvironmentType>(EnvironmentName)
695 .StartsWith("eabihf", Triple::EABIHF)
696 .StartsWith("eabi", Triple::EABI)
697 .StartsWith("gnuabin32", Triple::GNUABIN32)
698 .StartsWith("gnuabi64", Triple::GNUABI64)
699 .StartsWith("gnueabihft64", Triple::GNUEABIHFT64)
700 .StartsWith("gnueabihf", Triple::GNUEABIHF)
701 .StartsWith("gnueabit64", Triple::GNUEABIT64)
702 .StartsWith("gnueabi", Triple::GNUEABI)
703 .StartsWith("gnuf32", Triple::GNUF32)
704 .StartsWith("gnuf64", Triple::GNUF64)
705 .StartsWith("gnusf", Triple::GNUSF)
706 .StartsWith("gnux32", Triple::GNUX32)
707 .StartsWith("gnu_ilp32", Triple::GNUILP32)
708 .StartsWith("code16", Triple::CODE16)
709 .StartsWith("gnut64", Triple::GNUT64)
710 .StartsWith("gnu", Triple::GNU)
711 .StartsWith("android", Triple::Android)
712 .StartsWith("musleabihf", Triple::MuslEABIHF)
713 .StartsWith("musleabi", Triple::MuslEABI)
714 .StartsWith("muslx32", Triple::MuslX32)
715 .StartsWith("musl", Triple::Musl)
716 .StartsWith("msvc", Triple::MSVC)
717 .StartsWith("itanium", Triple::Itanium)
718 .StartsWith("cygnus", Triple::Cygnus)
719 .StartsWith("coreclr", Triple::CoreCLR)
720 .StartsWith("simulator", Triple::Simulator)
721 .StartsWith("macabi", Triple::MacABI)
722 .StartsWith("pixel", Triple::Pixel)
723 .StartsWith("vertex", Triple::Vertex)
724 .StartsWith("geometry", Triple::Geometry)
725 .StartsWith("hull", Triple::Hull)
726 .StartsWith("domain", Triple::Domain)
727 .StartsWith("compute", Triple::Compute)
728 .StartsWith("library", Triple::Library)
729 .StartsWith("raygeneration", Triple::RayGeneration)
730 .StartsWith("intersection", Triple::Intersection)
731 .StartsWith("anyhit", Triple::AnyHit)
732 .StartsWith("closesthit", Triple::ClosestHit)
733 .StartsWith("miss", Triple::Miss)
734 .StartsWith("callable", Triple::Callable)
735 .StartsWith("mesh", Triple::Mesh)
736 .StartsWith("amplification", Triple::Amplification)
737 .StartsWith("opencl", Triple::OpenCL)
738 .StartsWith("ohos", Triple::OpenHOS)
739 .StartsWith("pauthtest", Triple::PAuthTest)
740 .Default(Triple::UnknownEnvironment);
743 static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) {
744 return StringSwitch<Triple::ObjectFormatType>(EnvironmentName)
747 .EndsWith("xcoff", Triple::XCOFF)
748 .EndsWith("coff", Triple::COFF)
749 .EndsWith("elf", Triple::ELF)
750 .EndsWith("goff", Triple::GOFF)
751 .EndsWith("macho", Triple::MachO)
752 .EndsWith("wasm", Triple::Wasm)
753 .EndsWith("spirv", Triple::SPIRV)
754 .Default(Triple::UnknownObjectFormat);
757 static Triple::SubArchType parseSubArch(StringRef SubArchName) {
760 return Triple::MipsSubArch_r6;
763 return Triple::PPCSubArch_spe;
766 return Triple::AArch64SubArch_arm64e;
769 return Triple::AArch64SubArch_arm64ec;
772 return StringSwitch<Triple::SubArchType>(SubArchName)
773 .EndsWith("v1.0", Triple::SPIRVSubArch_v10)
774 .EndsWith("v1.1", Triple::SPIRVSubArch_v11)
775 .EndsWith("v1.2", Triple::SPIRVSubArch_v12)
776 .EndsWith("v1.3", Triple::SPIRVSubArch_v13)
777 .EndsWith("v1.4", Triple::SPIRVSubArch_v14)
778 .EndsWith("v1.5", Triple::SPIRVSubArch_v15)
779 .EndsWith("v1.6", Triple::SPIRVSubArch_v16)
780 .Default(Triple::NoSubArch);
783 return StringSwitch<Triple::SubArchType>(SubArchName)
784 .EndsWith("v1.0", Triple::DXILSubArch_v1_0)
785 .EndsWith("v1.1", Triple::DXILSubArch_v1_1)
786 .EndsWith("v1.2", Triple::DXILSubArch_v1_2)
787 .EndsWith("v1.3", Triple::DXILSubArch_v1_3)
788 .EndsWith("v1.4", Triple::DXILSubArch_v1_4)
789 .EndsWith("v1.5", Triple::DXILSubArch_v1_5)
790 .EndsWith("v1.6", Triple::DXILSubArch_v1_6)
791 .EndsWith("v1.7", Triple::DXILSubArch_v1_7)
792 .EndsWith("v1.8", Triple::DXILSubArch_v1_8)
793 .Default(Triple::NoSubArch);
799 return StringSwitch<Triple::SubArchType>(SubArchName)
800 .EndsWith("kalimba3", Triple::KalimbaSubArch_v3)
801 .EndsWith("kalimba4", Triple::KalimbaSubArch_v4)
802 .EndsWith("kalimba5", Triple::KalimbaSubArch_v5)
803 .Default(Triple::NoSubArch);
808 return Triple::NoSubArch;
810 return Triple::ARMSubArch_v4t;
812 return Triple::ARMSubArch_v5;
818 return Triple::ARMSubArch_v5te;
820 return Triple::ARMSubArch_v6;
823 return Triple::ARMSubArch_v6k;
825 return Triple::ARMSubArch_v6t2;
827 return Triple::ARMSubArch_v6m;
830 return Triple::ARMSubArch_v7;
832 return Triple::ARMSubArch_v7ve;
834 return Triple::ARMSubArch_v7k;
836 return Triple::ARMSubArch_v7m;
838 return Triple::ARMSubArch_v7s;
840 return Triple::ARMSubArch_v7em;
842 return Triple::ARMSubArch_v8;
844 return Triple::ARMSubArch_v8_1a;
846 return Triple::ARMSubArch_v8_2a;
848 return Triple::ARMSubArch_v8_3a;
850 return Triple::ARMSubArch_v8_4a;
852 return Triple::ARMSubArch_v8_5a;
854 return Triple::ARMSubArch_v8_6a;
856 return Triple::ARMSubArch_v8_7a;
858 return Triple::ARMSubArch_v8_8a;
860 return Triple::ARMSubArch_v8_9a;
862 return Triple::ARMSubArch_v9;
864 return Triple::ARMSubArch_v9_1a;
866 return Triple::ARMSubArch_v9_2a;
868 return Triple::ARMSubArch_v9_3a;
870 return Triple::ARMSubArch_v9_4a;
872 return Triple::ARMSubArch_v9_5a;
874 return Triple::ARMSubArch_v8r;
876 return Triple::ARMSubArch_v8m_baseline;
878 return Triple::ARMSubArch_v8m_mainline;
880 return Triple::ARMSubArch_v8_1m_mainline;
882 return Triple::NoSubArch;
886 static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
888 case Triple::UnknownArch:
889 case Triple::aarch64:
890 case Triple::aarch64_32:
891 case Triple::arm:
892 case Triple::thumb:
893 case Triple::x86:
894 case Triple::x86_64:
896 case Triple::Win32:
897 case Triple::UEFI:
898 return Triple::COFF;
900 return T.isOSDarwin() ? Triple::MachO : Triple::ELF;
902 case Triple::aarch64_be:
903 case Triple::amdgcn:
904 case Triple::amdil64:
905 case Triple::amdil:
906 case Triple::arc:
907 case Triple::armeb:
908 case Triple::avr:
909 case Triple::bpfeb:
910 case Triple::bpfel:
911 case Triple::csky:
912 case Triple::hexagon:
913 case Triple::hsail64:
914 case Triple::hsail:
915 case Triple::kalimba:
916 case Triple::lanai:
917 case Triple::le32:
918 case Triple::le64:
919 case Triple::loongarch32:
920 case Triple::loongarch64:
921 case Triple::m68k:
922 case Triple::mips64:
923 case Triple::mips64el:
924 case Triple::mips:
925 case Triple::mipsel:
926 case Triple::msp430:
927 case Triple::nvptx64:
928 case Triple::nvptx:
929 case Triple::ppc64le:
930 case Triple::ppcle:
931 case Triple::r600:
932 case Triple::renderscript32:
933 case Triple::renderscript64:
934 case Triple::riscv32:
935 case Triple::riscv64:
936 case Triple::shave:
937 case Triple::sparc:
938 case Triple::sparcel:
939 case Triple::sparcv9:
940 case Triple::spir64:
941 case Triple::spir:
942 case Triple::tce:
943 case Triple::tcele:
944 case Triple::thumbeb:
945 case Triple::ve:
946 case Triple::xcore:
947 case Triple::xtensa:
948 return Triple::ELF;
950 case Triple::ppc64:
951 case Triple::ppc:
953 return Triple::XCOFF;
955 return Triple::MachO;
956 return Triple::ELF;
958 case Triple::systemz:
960 return Triple::GOFF;
961 return Triple::ELF;
963 case Triple::wasm32:
964 case Triple::wasm64:
965 return Triple::Wasm;
967 case Triple::spirv:
968 case Triple::spirv32:
969 case Triple::spirv64:
970 return Triple::SPIRV;
972 case Triple::dxil:
973 return Triple::DXContainer;
978 /// Construct a triple from the string representation provided.
982 Triple::Triple(const Twine &Str)
1003 StringSwitch<Triple::EnvironmentType>(Components[0])
1004 .StartsWith("mipsn32", Triple::GNUABIN32)
1005 .StartsWith("mips64", Triple::GNUABI64)
1006 .StartsWith("mipsisa64", Triple::GNUABI64)
1007 .StartsWith("mipsisa32", Triple::GNU)
1008 .Cases("mips", "mipsel", "mipsr6", "mipsr6el", Triple::GNU)
1016 /// Construct a triple from string representations of the architecture,
1022 Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr)
1028 Environment(), ObjectFormat(Triple::UnknownObjectFormat) {
1032 /// Construct a triple from string representations of the architecture,
1037 Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr,
1047 if (ObjectFormat == Triple::UnknownObjectFormat)
1064 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_0);
1066 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_1);
1068 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_2);
1070 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_3);
1072 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_4);
1074 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_5);
1076 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_6);
1078 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_7);
1080 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_8);
1090 return Triple::getArchName(Triple::dxil, Triple::LatestDXILSubArch);
1095 return Triple::getArchName(Triple::dxil, Triple::DXILSubArch_v1_0);
1098 std::string Triple::normalize(StringRef Str) {
1235 // If "none" is in the middle component in a three-component triple, treat it
1249 if (Environment == Triple::Android &&
1261 if (Vendor == Triple::SUSE && Environment == llvm::Triple::GNUEABI)
1264 if (OS == Triple::Win32) {
1268 if (ObjectFormat == UnknownObjectFormat || ObjectFormat == Triple::COFF)
1283 (OS == Triple::Win32 && Environment != UnknownEnvironment)) {
1284 if (ObjectFormat != UnknownObjectFormat && ObjectFormat != Triple::COFF) {
1290 // Normalize DXIL triple if it does not include DXIL version number.
1292 // Model version specified in target triple, if any. Prior to decoupling DXIL
1299 // Add DXIL version only if shadermodel is specified in the triple
1300 if (OS == Triple::ShaderModel) {
1308 StringRef Triple::getArchName() const {
1312 StringRef Triple::getVendorName() const {
1317 StringRef Triple::getOSName() const {
1323 StringRef Triple::getEnvironmentName() const {
1329 StringRef Triple::getOSAndEnvironmentName() const {
1340 VersionTuple Triple::getEnvironmentVersion() const {
1344 StringRef Triple::getEnvironmentVersionString() const {
1357 if (getObjectFormat() != Triple::UnknownObjectFormat) {
1367 VersionTuple Triple::getOSVersion() const {
1369 // Assume that the OS portion of the triple starts with the canonical name.
1381 bool Triple::getMacOSXVersion(VersionTuple &Version) const {
1385 default: llvm_unreachable("unexpected OS for Darwin triple");
1412 // Ignore the version from the triple. This is only handled because the
1426 VersionTuple Triple::getiOSVersion() const {
1428 default: llvm_unreachable("unexpected OS for Darwin triple");
1431 // Ignore the version from the triple. This is only handled because the
1450 llvm_unreachable("conflicting triple info");
1456 VersionTuple Triple::getWatchOSVersion() const {
1458 default: llvm_unreachable("unexpected OS for Darwin triple");
1461 // Ignore the version from the triple. This is only handled because the
1473 llvm_unreachable("conflicting triple info");
1481 VersionTuple Triple::getDriverKitVersion() const {
1484 llvm_unreachable("unexpected OS for Darwin triple");
1493 VersionTuple Triple::getVulkanVersion() const {
1495 llvm_unreachable("invalid Vulkan SPIR-V triple");
1518 VersionTuple Triple::getDXILVersion() const {
1520 llvm_unreachable("invalid DXIL triple");
1531 void Triple::setTriple(const Twine &Str) {
1532 *this = Triple(Str);
1535 void Triple::setArch(ArchType Kind, SubArchType SubArch) {
1539 void Triple::setVendor(VendorType Kind) {
1543 void Triple::setOS(OSType Kind) {
1547 void Triple::setEnvironment(EnvironmentType Kind) {
1555 void Triple::setObjectFormat(ObjectFormatType Kind) {
1563 void Triple::setArchName(StringRef Str) {
1565 SmallString<64> Triple;
1566 Triple += Str;
1567 Triple += "-";
1568 Triple += getVendorName();
1569 Triple += "-";
1570 Triple += getOSAndEnvironmentName();
1571 setTriple(Triple);
1574 void Triple::setVendorName(StringRef Str) {
1578 void Triple::setOSName(StringRef Str) {
1586 void Triple::setEnvironmentName(StringRef Str) {
1591 void Triple::setOSAndEnvironmentName(StringRef Str) {
1595 unsigned Triple::getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
1597 case llvm::Triple::UnknownArch:
1600 case llvm::Triple::avr:
1601 case llvm::Triple::msp430:
1604 case llvm::Triple::aarch64_32:
1605 case llvm::Triple::amdil:
1606 case llvm::Triple::arc:
1607 case llvm::Triple::arm:
1608 case llvm::Triple::armeb:
1609 case llvm::Triple::csky:
1610 case llvm::Triple::dxil:
1611 case llvm::Triple::hexagon:
1612 case llvm::Triple::hsail:
1613 case llvm::Triple::kalimba:
1614 case llvm::Triple::lanai:
1615 case llvm::Triple::le32:
1616 case llvm::Triple::loongarch32:
1617 case llvm::Triple::m68k:
1618 case llvm::Triple::mips:
1619 case llvm::Triple::mipsel:
1620 case llvm::Triple::nvptx:
1621 case llvm::Triple::ppc:
1622 case llvm::Triple::ppcle:
1623 case llvm::Triple::r600:
1624 case llvm::Triple::renderscript32:
1625 case llvm::Triple::riscv32:
1626 case llvm::Triple::shave:
1627 case llvm::Triple::sparc:
1628 case llvm::Triple::sparcel:
1629 case llvm::Triple::spir:
1630 case llvm::Triple::spirv32:
1631 case llvm::Triple::tce:
1632 case llvm::Triple::tcele:
1633 case llvm::Triple::thumb:
1634 case llvm::Triple::thumbeb:
1635 case llvm::Triple::wasm32:
1636 case llvm::Triple::x86:
1637 case llvm::Triple::xcore:
1638 case llvm::Triple::xtensa:
1641 case llvm::Triple::aarch64:
1642 case llvm::Triple::aarch64_be:
1643 case llvm::Triple::amdgcn:
1644 case llvm::Triple::amdil64:
1645 case llvm::Triple::bpfeb:
1646 case llvm::Triple::bpfel:
1647 case llvm::Triple::hsail64:
1648 case llvm::Triple::le64:
1649 case llvm::Triple::loongarch64:
1650 case llvm::Triple::mips64:
1651 case llvm::Triple::mips64el:
1652 case llvm::Triple::nvptx64:
1653 case llvm::Triple::ppc64:
1654 case llvm::Triple::ppc64le:
1655 case llvm::Triple::renderscript64:
1656 case llvm::Triple::riscv64:
1657 case llvm::Triple::sparcv9:
1658 case llvm::Triple::spirv:
1659 case llvm::Triple::spir64:
1660 case llvm::Triple::spirv64:
1661 case llvm::Triple::systemz:
1662 case llvm::Triple::ve:
1663 case llvm::Triple::wasm64:
1664 case llvm::Triple::x86_64:
1670 bool Triple::isArch64Bit() const {
1674 bool Triple::isArch32Bit() const {
1678 bool Triple::isArch16Bit() const {
1682 Triple Triple::get32BitArchVariant() const {
1683 Triple T(*this);
1685 case Triple::UnknownArch:
1686 case Triple::amdgcn:
1687 case Triple::avr:
1688 case Triple::bpfeb:
1689 case Triple::bpfel:
1690 case Triple::msp430:
1691 case Triple::systemz:
1692 case Triple::ve:
1696 case Triple::aarch64_32:
1697 case Triple::amdil:
1698 case Triple::arc:
1699 case Triple::arm:
1700 case Triple::armeb:
1701 case Triple::csky:
1702 case Triple::dxil:
1703 case Triple::hexagon:
1704 case Triple::hsail:
1705 case Triple::kalimba:
1706 case Triple::lanai:
1707 case Triple::le32:
1708 case Triple::loongarch32:
1709 case Triple::m68k:
1710 case Triple::mips:
1711 case Triple::mipsel:
1712 case Triple::nvptx:
1713 case Triple::ppc:
1714 case Triple::ppcle:
1715 case Triple::r600:
1716 case Triple::renderscript32:
1717 case Triple::riscv32:
1718 case Triple::shave:
1719 case Triple::sparc:
1720 case Triple::sparcel:
1721 case Triple::spir:
1722 case Triple::spirv32:
1723 case Triple::tce:
1724 case Triple::tcele:
1725 case Triple::thumb:
1726 case Triple::thumbeb:
1727 case Triple::wasm32:
1728 case Triple::x86:
1729 case Triple::xcore:
1730 case Triple::xtensa:
1734 case Triple::aarch64: T.setArch(Triple::arm); break;
1735 case Triple::aarch64_be: T.setArch(Triple::armeb); break;
1736 case Triple::amdil64: T.setArch(Triple::amdil); break;
1737 case Triple::hsail64: T.setArch(Triple::hsail); break;
1738 case Triple::le64: T.setArch(Triple::le32); break;
1739 case Triple::loongarch64: T.setArch(Triple::loongarch32); break;
1740 case Triple::mips64:
1741 T.setArch(Triple::mips, getSubArch());
1743 case Triple::mips64el:
1744 T.setArch(Triple::mipsel, getSubArch());
1746 case Triple::nvptx64: T.setArch(Triple::nvptx); break;
1747 case Triple::ppc64: T.setArch(Triple::ppc); break;
1748 case Triple::ppc64le: T.setArch(Triple::ppcle); break;
1749 case Triple::renderscript64: T.setArch(Triple::renderscript32); break;
1750 case Triple::riscv64: T.setArch(Triple::riscv32); break;
1751 case Triple::sparcv9: T.setArch(Triple::sparc); break;
1752 case Triple::spir64: T.setArch(Triple::spir); break;
1753 case Triple::spirv:
1754 case Triple::spirv64:
1755 T.setArch(Triple::spirv32, getSubArch());
1757 case Triple::wasm64: T.setArch(Triple::wasm32); break;
1758 case Triple::x86_64: T.setArch(Triple::x86); break;
1763 Triple Triple::get64BitArchVariant() const {
1764 Triple T(*this);
1766 case Triple::UnknownArch:
1767 case Triple::arc:
1768 case Triple::avr:
1769 case Triple::csky:
1770 case Triple::dxil:
1771 case Triple::hexagon:
1772 case Triple::kalimba:
1773 case Triple::lanai:
1774 case Triple::m68k:
1775 case Triple::msp430:
1776 case Triple::r600:
1777 case Triple::shave:
1778 case Triple::sparcel:
1779 case Triple::tce:
1780 case Triple::tcele:
1781 case Triple::xcore:
1782 case Triple::xtensa:
1786 case Triple::aarch64:
1787 case Triple::aarch64_be:
1788 case Triple::amdgcn:
1789 case Triple::amdil64:
1790 case Triple::bpfeb:
1791 case Triple::bpfel:
1792 case Triple::hsail64:
1793 case Triple::le64:
1794 case Triple::loongarch64:
1795 case Triple::mips64:
1796 case Triple::mips64el:
1797 case Triple::nvptx64:
1798 case Triple::ppc64:
1799 case Triple::ppc64le:
1800 case Triple::renderscript64:
1801 case Triple::riscv64:
1802 case Triple::sparcv9:
1803 case Triple::spir64:
1804 case Triple::spirv64:
1805 case Triple::systemz:
1806 case Triple::ve:
1807 case Triple::wasm64:
1808 case Triple::x86_64:
1812 case Triple::aarch64_32: T.setArch(Triple::aarch64); break;
1813 case Triple::amdil: T.setArch(Triple::amdil64); break;
1814 case Triple::arm: T.setArch(Triple::aarch64); break;
1815 case Triple::armeb: T.setArch(Triple::aarch64_be); break;
1816 case Triple::hsail: T.setArch(Triple::hsail64); break;
1817 case Triple::le32: T.setArch(Triple::le64); break;
1818 case Triple::loongarch32: T.setArch(Triple::loongarch64); break;
1819 case Triple::mips:
1820 T.setArch(Triple::mips64, getSubArch());
1822 case Triple::mipsel:
1823 T.setArch(Triple::mips64el, getSubArch());
1825 case Triple::nvptx: T.setArch(Triple::nvptx64); break;
1826 case Triple::ppc: T.setArch(Triple::ppc64); break;
1827 case Triple::ppcle: T.setArch(Triple::ppc64le); break;
1828 case Triple::renderscript32: T.setArch(Triple::renderscript64); break;
1829 case Triple::riscv32: T.setArch(Triple::riscv64); break;
1830 case Triple::sparc: T.setArch(Triple::sparcv9); break;
1831 case Triple::spir: T.setArch(Triple::spir64); break;
1832 case Triple::spirv:
1833 case Triple::spirv32:
1834 T.setArch(Triple::spirv64, getSubArch());
1836 case Triple::thumb: T.setArch(Triple::aarch64); break;
1837 case Triple::thumbeb: T.setArch(Triple::aarch64_be); break;
1838 case Triple::wasm32: T.setArch(Triple::wasm64); break;
1839 case Triple::x86: T.setArch(Triple::x86_64); break;
1844 Triple Triple::getBigEndianArchVariant() const {
1845 Triple T(*this);
1850 case Triple::UnknownArch:
1851 case Triple::amdgcn:
1852 case Triple::amdil64:
1853 case Triple::amdil:
1854 case Triple::avr:
1855 case Triple::dxil:
1856 case Triple::hexagon:
1857 case Triple::hsail64:
1858 case Triple::hsail:
1859 case Triple::kalimba:
1860 case Triple::le32:
1861 case Triple::le64:
1862 case Triple::loongarch32:
1863 case Triple::loongarch64:
1864 case Triple::msp430:
1865 case Triple::nvptx64:
1866 case Triple::nvptx:
1867 case Triple::r600:
1868 case Triple::renderscript32:
1869 case Triple::renderscript64:
1870 case Triple::riscv32:
1871 case Triple::riscv64:
1872 case Triple::shave:
1873 case Triple::spir64:
1874 case Triple::spir:
1875 case Triple::spirv:
1876 case Triple::spirv32:
1877 case Triple::spirv64:
1878 case Triple::wasm32:
1879 case Triple::wasm64:
1880 case Triple::x86:
1881 case Triple::x86_64:
1882 case Triple::xcore:
1883 case Triple::ve:
1884 case Triple::csky:
1885 case Triple::xtensa:
1889 case Triple::arm:
1890 case Triple::thumb:
1894 case Triple::aarch64: T.setArch(Triple::aarch64_be); break;
1895 case Triple::bpfel: T.setArch(Triple::bpfeb); break;
1896 case Triple::mips64el:
1897 T.setArch(Triple::mips64, getSubArch());
1899 case Triple::mipsel:
1900 T.setArch(Triple::mips, getSubArch());
1902 case Triple::ppcle: T.setArch(Triple::ppc); break;
1903 case Triple::ppc64le: T.setArch(Triple::ppc64); break;
1904 case Triple::sparcel: T.setArch(Triple::sparc); break;
1905 case Triple::tcele: T.setArch(Triple::tce); break;
1907 llvm_unreachable("getBigEndianArchVariant: unknown triple.");
1912 Triple Triple::getLittleEndianArchVariant() const {
1913 Triple T(*this);
1918 case Triple::UnknownArch:
1919 case Triple::lanai:
1920 case Triple::sparcv9:
1921 case Triple::systemz:
1922 case Triple::m68k:
1926 case Triple::armeb:
1927 case Triple::thumbeb:
1931 case Triple::aarch64_be: T.setArch(Triple::aarch64); break;
1932 case Triple::bpfeb: T.setArch(Triple::bpfel); break;
1933 case Triple::mips64:
1934 T.setArch(Triple::mips64el, getSubArch());
1936 case Triple::mips:
1937 T.setArch(Triple::mipsel, getSubArch());
1939 case Triple::ppc: T.setArch(Triple::ppcle); break;
1940 case Triple::ppc64: T.setArch(Triple::ppc64le); break;
1941 case Triple::sparc: T.setArch(Triple::sparcel); break;
1942 case Triple::tce: T.setArch(Triple::tcele); break;
1944 llvm_unreachable("getLittleEndianArchVariant: unknown triple.");
1949 bool Triple::isLittleEndian() const {
1951 case Triple::aarch64:
1952 case Triple::aarch64_32:
1953 case Triple::amdgcn:
1954 case Triple::amdil64:
1955 case Triple::amdil:
1956 case Triple::arm:
1957 case Triple::avr:
1958 case Triple::bpfel:
1959 case Triple::csky:
1960 case Triple::dxil:
1961 case Triple::hexagon:
1962 case Triple::hsail64:
1963 case Triple::hsail:
1964 case Triple::kalimba:
1965 case Triple::le32:
1966 case Triple::le64:
1967 case Triple::loongarch32:
1968 case Triple::loongarch64:
1969 case Triple::mips64el:
1970 case Triple::mipsel:
1971 case Triple::msp430:
1972 case Triple::nvptx64:
1973 case Triple::nvptx:
1974 case Triple::ppcle:
1975 case Triple::ppc64le:
1976 case Triple::r600:
1977 case Triple::renderscript32:
1978 case Triple::renderscript64:
1979 case Triple::riscv32:
1980 case Triple::riscv64:
1981 case Triple::shave:
1982 case Triple::sparcel:
1983 case Triple::spir64:
1984 case Triple::spir:
1985 case Triple::spirv:
1986 case Triple::spirv32:
1987 case Triple::spirv64:
1988 case Triple::tcele:
1989 case Triple::thumb:
1990 case Triple::ve:
1991 case Triple::wasm32:
1992 case Triple::wasm64:
1993 case Triple::x86:
1994 case Triple::x86_64:
1995 case Triple::xcore:
1996 case Triple::xtensa:
2003 bool Triple::isCompatibleWith(const Triple &Other) const {
2005 if ((getArch() == Triple::thumb && Other.getArch() == Triple::arm) ||
2006 (getArch() == Triple::arm && Other.getArch() == Triple::thumb) ||
2007 (getArch() == Triple::thumbeb && Other.getArch() == Triple::armeb) ||
2008 (getArch() == Triple::armeb && Other.getArch() == Triple::thumbeb)) {
2009 if (getVendor() == Triple::Apple)
2020 if (getVendor() == Triple::Apple)
2027 std::string Triple::merge(const Triple &Other) const {
2028 // If vendor is apple, pick the triple with the larger version number.
2029 if (getVendor() == Triple::Apple)
2036 bool Triple::isMacOSXVersionLT(unsigned Major, unsigned Minor,
2038 assert(isMacOSX() && "Not an OS X triple!");
2041 if (getOS() == Triple::MacOSX)
2053 VersionTuple Triple::getMinimumSupportedOSVersion() const {
2054 if (getVendor() != Triple::Apple || getArch() != Triple::aarch64)
2057 case Triple::MacOSX:
2060 case Triple::IOS:
2069 case Triple::TvOS:
2074 case Triple::WatchOS:
2079 case Triple::DriverKit:
2087 VersionTuple Triple::getCanonicalVersionForOS(OSType OSKind,
2100 // HLSL triple environment orders are relied on in the front end
2101 static_assert(Triple::Vertex - Triple::Pixel == 1,
2103 static_assert(Triple::Geometry - Triple::Pixel == 2,
2105 static_assert(Triple::Hull - Triple::Pixel == 3,
2107 static_assert(Triple::Domain - Triple::Pixel == 4,
2109 static_assert(Triple::Compute - Triple::Pixel == 5,
2111 static_assert(Triple::Library - Triple::Pixel == 6,
2113 static_assert(Triple::RayGeneration - Triple::Pixel == 7,
2115 static_assert(Triple::Intersection - Triple::Pixel == 8,
2117 static_assert(Triple::AnyHit - Triple::Pixel == 9,
2119 static_assert(Triple::ClosestHit - Triple::Pixel == 10,
2121 static_assert(Triple::Miss - Triple::Pixel == 11,
2123 static_assert(Triple::Callable - Triple::Pixel == 12,
2125 static_assert(Triple::Mesh - Triple::Pixel == 13,
2127 static_assert(Triple::Amplification - Triple::Pixel == 14,