aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp118
1 files changed, 63 insertions, 55 deletions
diff --git a/contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp b/contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp
index a3d6a06af976..ac04dab04897 100644
--- a/contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp
+++ b/contrib/llvm-project/llvm/lib/TargetParser/Triple.cpp
@@ -70,6 +70,7 @@ StringRef Triple::getArchTypeName(ArchType Kind) {
case sparcv9: return "sparcv9";
case spir64: return "spir64";
case spir: return "spir";
+ case spirv: return "spirv";
case spirv32: return "spirv32";
case spirv64: return "spirv64";
case systemz: return "s390x";
@@ -89,6 +90,36 @@ StringRef Triple::getArchTypeName(ArchType Kind) {
llvm_unreachable("Invalid ArchType!");
}
+StringRef Triple::getArchName(ArchType Kind, SubArchType SubArch) {
+ switch (Kind) {
+ case Triple::mips:
+ if (SubArch == MipsSubArch_r6)
+ return "mipsisa32r6";
+ break;
+ case Triple::mipsel:
+ if (SubArch == MipsSubArch_r6)
+ return "mipsisa32r6el";
+ break;
+ case Triple::mips64:
+ if (SubArch == MipsSubArch_r6)
+ return "mipsisa64r6";
+ break;
+ case Triple::mips64el:
+ if (SubArch == MipsSubArch_r6)
+ return "mipsisa64r6el";
+ break;
+ case Triple::aarch64:
+ if (SubArch == AArch64SubArch_arm64ec)
+ return "arm64ec";
+ if (SubArch == AArch64SubArch_arm64e)
+ return "arm64e";
+ break;
+ default:
+ break;
+ }
+ return getArchTypeName(Kind);
+}
+
StringRef Triple::getArchTypePrefix(ArchType Kind) {
switch (Kind) {
default:
@@ -154,6 +185,7 @@ StringRef Triple::getArchTypePrefix(ArchType Kind) {
case spir:
case spir64: return "spir";
+ case spirv:
case spirv32:
case spirv64: return "spirv";
@@ -190,7 +222,6 @@ StringRef Triple::getVendorTypeName(VendorType Kind) {
case ImaginationTechnologies: return "img";
case Mesa: return "mesa";
case MipsTechnologies: return "mti";
- case Myriad: return "myriad";
case NVIDIA: return "nvidia";
case OpenEmbedded: return "oe";
case PC: return "pc";
@@ -208,10 +239,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case AIX: return "aix";
case AMDHSA: return "amdhsa";
case AMDPAL: return "amdpal";
- case Ananas: return "ananas";
case CUDA: return "cuda";
- case CloudABI: return "cloudabi";
- case Contiki: return "contiki";
case Darwin: return "darwin";
case DragonFly: return "dragonfly";
case DriverKit: return "driverkit";
@@ -228,7 +256,6 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case Lv2: return "lv2";
case MacOSX: return "macosx";
case Mesa3D: return "mesa3d";
- case Minix: return "minix";
case NVCL: return "nvcl";
case NaCl: return "nacl";
case NetBSD: return "netbsd";
@@ -237,6 +264,7 @@ StringRef Triple::getOSTypeName(OSType Kind) {
case PS5: return "ps5";
case RTEMS: return "rtems";
case Solaris: return "solaris";
+ case Serenity: return "serenity";
case TvOS: return "tvos";
case UEFI: return "uefi";
case WASI: return "wasi";
@@ -381,6 +409,7 @@ Triple::ArchType Triple::getArchTypeForLLVMName(StringRef Name) {
.Case("hsail64", hsail64)
.Case("spir", spir)
.Case("spir64", spir64)
+ .Case("spirv", spirv)
.Case("spirv32", spirv32)
.Case("spirv64", spirv64)
.Case("kalimba", kalimba)
@@ -448,7 +477,7 @@ static Triple::ArchType parseARMArch(StringRef ArchName) {
// Thumb only exists in v4+
if (ISA == ARM::ISAKind::THUMB &&
- (ArchName.startswith("v2") || ArchName.startswith("v3")))
+ (ArchName.starts_with("v2") || ArchName.starts_with("v3")))
return Triple::UnknownArch;
// Thumb only for v6m
@@ -521,6 +550,8 @@ static Triple::ArchType parseArch(StringRef ArchName) {
.Case("hsail64", Triple::hsail64)
.Case("spir", Triple::spir)
.Case("spir64", Triple::spir64)
+ .Cases("spirv", "spirv1.0", "spirv1.1", "spirv1.2",
+ "spirv1.3", "spirv1.4", "spirv1.5", Triple::spirv)
.Cases("spirv32", "spirv32v1.0", "spirv32v1.1", "spirv32v1.2",
"spirv32v1.3", "spirv32v1.4", "spirv32v1.5", Triple::spirv32)
.Cases("spirv64", "spirv64v1.0", "spirv64v1.1", "spirv64v1.2",
@@ -543,10 +574,10 @@ static Triple::ArchType parseArch(StringRef ArchName) {
// Some architectures require special parsing logic just to compute the
// ArchType result.
if (AT == Triple::UnknownArch) {
- if (ArchName.startswith("arm") || ArchName.startswith("thumb") ||
- ArchName.startswith("aarch64"))
+ if (ArchName.starts_with("arm") || ArchName.starts_with("thumb") ||
+ ArchName.starts_with("aarch64"))
return parseARMArch(ArchName);
- if (ArchName.startswith("bpf"))
+ if (ArchName.starts_with("bpf"))
return parseBPFArch(ArchName);
}
@@ -565,7 +596,6 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
.Case("mti", Triple::MipsTechnologies)
.Case("nvidia", Triple::NVIDIA)
.Case("csr", Triple::CSR)
- .Case("myriad", Triple::Myriad)
.Case("amd", Triple::AMD)
.Case("mesa", Triple::Mesa)
.Case("suse", Triple::SUSE)
@@ -575,8 +605,6 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
static Triple::OSType parseOS(StringRef OSName) {
return StringSwitch<Triple::OSType>(OSName)
- .StartsWith("ananas", Triple::Ananas)
- .StartsWith("cloudabi", Triple::CloudABI)
.StartsWith("darwin", Triple::Darwin)
.StartsWith("dragonfly", Triple::DragonFly)
.StartsWith("freebsd", Triple::FreeBSD)
@@ -594,7 +622,6 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("windows", Triple::Win32)
.StartsWith("zos", Triple::ZOS)
.StartsWith("haiku", Triple::Haiku)
- .StartsWith("minix", Triple::Minix)
.StartsWith("rtems", Triple::RTEMS)
.StartsWith("nacl", Triple::NaCl)
.StartsWith("aix", Triple::AIX)
@@ -608,7 +635,6 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("watchos", Triple::WatchOS)
.StartsWith("driverkit", Triple::DriverKit)
.StartsWith("mesa3d", Triple::Mesa3D)
- .StartsWith("contiki", Triple::Contiki)
.StartsWith("amdpal", Triple::AMDPAL)
.StartsWith("hermit", Triple::HermitCore)
.StartsWith("hurd", Triple::Hurd)
@@ -616,6 +642,7 @@ static Triple::OSType parseOS(StringRef OSName) {
.StartsWith("emscripten", Triple::Emscripten)
.StartsWith("shadermodel", Triple::ShaderModel)
.StartsWith("liteos", Triple::LiteOS)
+ .StartsWith("serenity", Triple::Serenity)
.Default(Triple::UnknownOS);
}
@@ -679,8 +706,8 @@ static Triple::ObjectFormatType parseFormat(StringRef EnvironmentName) {
}
static Triple::SubArchType parseSubArch(StringRef SubArchName) {
- if (SubArchName.startswith("mips") &&
- (SubArchName.endswith("r6el") || SubArchName.endswith("r6")))
+ if (SubArchName.starts_with("mips") &&
+ (SubArchName.ends_with("r6el") || SubArchName.ends_with("r6")))
return Triple::MipsSubArch_r6;
if (SubArchName == "powerpcspe")
@@ -692,7 +719,7 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {
if (SubArchName == "arm64ec")
return Triple::AArch64SubArch_arm64ec;
- if (SubArchName.startswith("spirv"))
+ if (SubArchName.starts_with("spirv"))
return StringSwitch<Triple::SubArchType>(SubArchName)
.EndsWith("v1.0", Triple::SPIRVSubArch_v10)
.EndsWith("v1.1", Triple::SPIRVSubArch_v11)
@@ -792,6 +819,8 @@ static Triple::SubArchType parseSubArch(StringRef SubArchName) {
}
static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
+ if (T.isOSDarwin())
+ return Triple::MachO;
switch (T.getArch()) {
case Triple::UnknownArch:
case Triple::aarch64:
@@ -800,9 +829,9 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
case Triple::thumb:
case Triple::x86:
case Triple::x86_64:
- if (T.isOSDarwin())
- return Triple::MachO;
- else if (T.isOSWindows())
+ if (T.isOSWindows())
+ return Triple::COFF;
+ else if (T.isUEFI())
return Triple::COFF;
return Triple::ELF;
@@ -869,6 +898,7 @@ static Triple::ObjectFormatType getDefaultFormat(const Triple &T) {
case Triple::wasm64:
return Triple::Wasm;
+ case Triple::spirv:
case Triple::spirv32:
case Triple::spirv64:
return Triple::SPIRV;
@@ -974,8 +1004,8 @@ std::string Triple::normalize(StringRef Str) {
OSType OS = UnknownOS;
if (Components.size() > 2) {
OS = parseOS(Components[2]);
- IsCygwin = Components[2].startswith("cygwin");
- IsMinGW32 = Components[2].startswith("mingw");
+ IsCygwin = Components[2].starts_with("cygwin");
+ IsMinGW32 = Components[2].starts_with("mingw");
}
EnvironmentType Environment = UnknownEnvironment;
if (Components.size() > 3)
@@ -1019,8 +1049,8 @@ std::string Triple::normalize(StringRef Str) {
break;
case 2:
OS = parseOS(Comp);
- IsCygwin = Comp.startswith("cygwin");
- IsMinGW32 = Comp.startswith("mingw");
+ IsCygwin = Comp.starts_with("cygwin");
+ IsMinGW32 = Comp.starts_with("mingw");
Valid = OS != UnknownOS || IsCygwin || IsMinGW32;
break;
case 3:
@@ -1097,7 +1127,8 @@ std::string Triple::normalize(StringRef Str) {
// Special case logic goes here. At this point Arch, Vendor and OS have the
// correct values for the computed components.
std::string NormalizedEnvironment;
- if (Environment == Triple::Android && Components[3].startswith("androideabi")) {
+ if (Environment == Triple::Android &&
+ Components[3].starts_with("androideabi")) {
StringRef AndroidVersion = Components[3].drop_front(strlen("androideabi"));
if (AndroidVersion.empty()) {
Components[3] = "android";
@@ -1145,34 +1176,6 @@ StringRef Triple::getArchName() const {
return StringRef(Data).split('-').first; // Isolate first component
}
-StringRef Triple::getArchName(ArchType Kind, SubArchType SubArch) const {
- switch (Kind) {
- case Triple::mips:
- if (SubArch == MipsSubArch_r6)
- return "mipsisa32r6";
- break;
- case Triple::mipsel:
- if (SubArch == MipsSubArch_r6)
- return "mipsisa32r6el";
- break;
- case Triple::mips64:
- if (SubArch == MipsSubArch_r6)
- return "mipsisa64r6";
- break;
- case Triple::mips64el:
- if (SubArch == MipsSubArch_r6)
- return "mipsisa64r6el";
- break;
- case Triple::aarch64:
- if (SubArch == AArch64SubArch_arm64ec)
- return "arm64ec";
- break;
- default:
- break;
- }
- return getArchTypeName(Kind);
-}
-
StringRef Triple::getVendorName() const {
StringRef Tmp = StringRef(Data).split('-').second; // Strip first component
return Tmp.split('-').first; // Isolate second component
@@ -1204,7 +1207,7 @@ static VersionTuple parseVersionFromName(StringRef Name) {
VersionTuple Triple::getEnvironmentVersion() const {
StringRef EnvironmentName = getEnvironmentName();
StringRef EnvironmentTypeName = getEnvironmentTypeName(getEnvironment());
- if (EnvironmentName.startswith(EnvironmentTypeName))
+ if (EnvironmentName.starts_with(EnvironmentTypeName))
EnvironmentName = EnvironmentName.substr(EnvironmentTypeName.size());
return parseVersionFromName(EnvironmentName);
@@ -1214,7 +1217,7 @@ VersionTuple Triple::getOSVersion() const {
StringRef OSName = getOSName();
// Assume that the OS portion of the triple starts with the canonical name.
StringRef OSTypeName = getOSTypeName(getOS());
- if (OSName.startswith(OSTypeName))
+ if (OSName.starts_with(OSTypeName))
OSName = OSName.substr(OSTypeName.size());
else if (getOS() == MacOSX)
OSName.consume_front("macos");
@@ -1452,6 +1455,7 @@ static unsigned getArchPointerBitWidth(llvm::Triple::ArchType Arch) {
case llvm::Triple::renderscript64:
case llvm::Triple::riscv64:
case llvm::Triple::sparcv9:
+ case llvm::Triple::spirv:
case llvm::Triple::spir64:
case llvm::Triple::spirv64:
case llvm::Triple::systemz:
@@ -1546,6 +1550,7 @@ Triple Triple::get32BitArchVariant() const {
case Triple::riscv64: T.setArch(Triple::riscv32); break;
case Triple::sparcv9: T.setArch(Triple::sparc); break;
case Triple::spir64: T.setArch(Triple::spir); break;
+ case Triple::spirv:
case Triple::spirv64:
T.setArch(Triple::spirv32, getSubArch());
break;
@@ -1624,6 +1629,7 @@ Triple Triple::get64BitArchVariant() const {
case Triple::riscv32: T.setArch(Triple::riscv64); break;
case Triple::sparc: T.setArch(Triple::sparcv9); break;
case Triple::spir: T.setArch(Triple::spir64); break;
+ case Triple::spirv:
case Triple::spirv32:
T.setArch(Triple::spirv64, getSubArch());
break;
@@ -1666,6 +1672,7 @@ Triple Triple::getBigEndianArchVariant() const {
case Triple::shave:
case Triple::spir64:
case Triple::spir:
+ case Triple::spirv:
case Triple::spirv32:
case Triple::spirv64:
case Triple::wasm32:
@@ -1775,6 +1782,7 @@ bool Triple::isLittleEndian() const {
case Triple::sparcel:
case Triple::spir64:
case Triple::spir:
+ case Triple::spirv:
case Triple::spirv32:
case Triple::spirv64:
case Triple::tcele: