[llvm] Triple: Add constructor from enum entries (PR #190632)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 6 09:53:29 PDT 2026
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/190632
Don't require hardcoding the string names.
>From c06752850d684c7f500fcf43027b6e8ffee03000 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 6 Apr 2026 16:55:16 +0200
Subject: [PATCH] Triple: Add constructor from enum entries
Don't require hardcoding the string names.
---
llvm/include/llvm/TargetParser/Triple.h | 4 +++
llvm/lib/TargetParser/Triple.cpp | 7 ++++
llvm/unittests/TargetParser/TripleTest.cpp | 40 ++++++++++++++++++++++
3 files changed, 51 insertions(+)
diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h
index 7c5aa52a1bd04..2e07b5a815a9b 100644
--- a/llvm/include/llvm/TargetParser/Triple.h
+++ b/llvm/include/llvm/TargetParser/Triple.h
@@ -375,6 +375,10 @@ class Triple {
const Twine &OSStr);
LLVM_ABI Triple(const Twine &ArchStr, const Twine &VendorStr,
const Twine &OSStr, const Twine &EnvironmentStr);
+ LLVM_ABI Triple(ArchType A, SubArchType SA = NoSubArch,
+ VendorType V = UnknownVendor, OSType OS = UnknownOS,
+ EnvironmentType E = UnknownEnvironment,
+ ObjectFormatType OF = UnknownObjectFormat);
bool operator==(const Triple &Other) const {
return Arch == Other.Arch && SubArch == Other.SubArch &&
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index 7a907808c0f34..44d7630f6a33b 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -1144,6 +1144,13 @@ Triple::Triple(const Twine &ArchStr, const Twine &VendorStr, const Twine &OSStr,
ObjectFormat = getDefaultFormat(*this);
}
+Triple::Triple(ArchType A, SubArchType SA, VendorType V, OSType OS,
+ EnvironmentType E, ObjectFormatType OF)
+ : Triple(getArchName(A, SA), getVendorTypeName(V), getOSTypeName(OS),
+ getEnvironmentTypeName(E)) {
+ setObjectFormat(OF);
+}
+
static VersionTuple parseVersionFromName(StringRef Name);
static StringRef getDXILArchNameFromShaderModel(StringRef ShaderModelStr) {
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp b/llvm/unittests/TargetParser/TripleTest.cpp
index 5f83fdd0ba000..669c25663f3c4 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -1477,6 +1477,46 @@ TEST(TripleTest, ParsedIDs) {
EXPECT_EQ(Triple::ChipStar, T.getOS());
}
+TEST(TripleTest, EnumConstructor) {
+ {
+ Triple T(Triple::amdgcn, Triple::NoSubArch, Triple::AMD, Triple::AMDHSA,
+ Triple::LLVM, Triple::ELF);
+ EXPECT_EQ(T.getArch(), Triple::amdgcn);
+ EXPECT_EQ(T.getVendor(), Triple::AMD);
+ EXPECT_EQ(T.getOS(), Triple::AMDHSA);
+ EXPECT_EQ(T.getEnvironment(), Triple::LLVM);
+ EXPECT_EQ(T.getObjectFormat(), Triple::ELF);
+ }
+
+ {
+ Triple T(Triple::arm, Triple::ARMSubArch_v9_7a, Triple::PC, Triple::Linux,
+ Triple::GNU, Triple::COFF);
+ EXPECT_EQ(T.getArch(), Triple::arm);
+ EXPECT_EQ(T.getVendor(), Triple::PC);
+ EXPECT_EQ(T.getOS(), Triple::Linux);
+ EXPECT_EQ(T.getEnvironment(), Triple::GNU);
+ EXPECT_EQ(T.getObjectFormat(), Triple::COFF);
+ }
+
+ {
+ Triple T(Triple::x86_64);
+ EXPECT_EQ(T.getArch(), Triple::x86_64);
+ EXPECT_EQ(T.getVendor(), Triple::UnknownVendor);
+ EXPECT_EQ(T.getOS(), Triple::UnknownOS);
+ EXPECT_EQ(T.getEnvironment(), Triple::UnknownEnvironment);
+ EXPECT_EQ(T.getObjectFormat(), Triple::ELF);
+ }
+
+ {
+ Triple T(Triple::dxil);
+ EXPECT_EQ(T.getArch(), Triple::dxil);
+ EXPECT_EQ(T.getVendor(), Triple::UnknownVendor);
+ EXPECT_EQ(T.getOS(), Triple::UnknownOS);
+ EXPECT_EQ(T.getEnvironment(), Triple::UnknownEnvironment);
+ EXPECT_EQ(T.getObjectFormat(), Triple::DXContainer);
+ }
+}
+
static std::string Join(StringRef A, StringRef B, StringRef C) {
std::string Str = std::string(A);
Str += '-';
More information about the llvm-commits
mailing list