[llvm-branch-commits] [clang] clang: Move Triple computing logic to separate function (PR #189262)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Mar 29 09:41:00 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: Matt Arsenault (arsenm)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/189262.diff


3 Files Affected:

- (modified) clang/include/clang/Basic/OffloadArch.h (+4) 
- (modified) clang/lib/Basic/OffloadArch.cpp (+16) 
- (modified) clang/lib/Driver/Driver.cpp (+7-12) 


``````````diff
diff --git a/clang/include/clang/Basic/OffloadArch.h b/clang/include/clang/Basic/OffloadArch.h
index b2aa891462289..531e5e37935eb 100644
--- a/clang/include/clang/Basic/OffloadArch.h
+++ b/clang/include/clang/Basic/OffloadArch.h
@@ -11,6 +11,7 @@
 
 namespace llvm {
 class StringRef;
+class Triple;
 } // namespace llvm
 
 namespace clang {
@@ -151,6 +152,9 @@ const char *OffloadArchToVirtualArchString(OffloadArch A);
 // OffloadArch::Unknown if the string is not recognized.
 OffloadArch StringToOffloadArch(llvm::StringRef S);
 
+llvm::StringRef OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple,
+                                    OffloadArch ID);
+
 } // namespace clang
 
 #endif // LLVM_CLANG_BASIC_OFFLOADARCH_H
diff --git a/clang/lib/Basic/OffloadArch.cpp b/clang/lib/Basic/OffloadArch.cpp
index 56a1dad8222ba..d15df3deca74b 100644
--- a/clang/lib/Basic/OffloadArch.cpp
+++ b/clang/lib/Basic/OffloadArch.cpp
@@ -9,6 +9,7 @@
 
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/TargetParser/Triple.h"
 
 namespace clang {
 
@@ -146,4 +147,19 @@ OffloadArch StringToOffloadArch(llvm::StringRef S) {
   return Result->Arch;
 }
 
+llvm::StringRef OffloadArchToTriple(const llvm::Triple &DefaultToolchainTriple,
+                                    OffloadArch ID) {
+  if (ID == OffloadArch::AMDGCNSPIRV)
+    return "spirv64-amd-amdhsa";
+
+  if (IsNVIDIAOffloadArch(ID))
+    return DefaultToolchainTriple.isArch64Bit() ? "nvptx64-nvidia-cuda"
+                                                : "nvptx-nvidia-cuda";
+
+  if (IsAMDOffloadArch(ID))
+    return "amdgcn-amd-amdhsa";
+
+  return "";
+}
+
 } // namespace clang
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index f67dfcf1d3609..6afdf58f3c5da 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -995,30 +995,25 @@ inferOffloadToolchains(Compilation &C, Action::OffloadKind Kind) {
       return llvm::DenseSet<llvm::StringRef>();
     }
 
-    StringRef Triple;
-    if (ID == OffloadArch::AMDGCNSPIRV)
-      Triple = "spirv64-amd-amdhsa";
-    else if (IsNVIDIAOffloadArch(ID))
-      Triple = C.getDefaultToolChain().getTriple().isArch64Bit()
-                   ? "nvptx64-nvidia-cuda"
-                   : "nvptx-nvidia-cuda";
-    else if (IsAMDOffloadArch(ID))
-      Triple = "amdgcn-amd-amdhsa";
-    else
+    llvm::StringRef TripleStr =
+        OffloadArchToTriple(C.getDefaultToolChain().getTriple(), ID);
+    if (TripleStr.empty())
       continue;
 
+    llvm::Triple Triple(TripleStr);
+
     // Make a new argument that dispatches this argument to the appropriate
     // toolchain. This is required when we infer it and create potentially
     // incompatible toolchains from the global option.
     Option Opt = C.getDriver().getOpts().getOption(options::OPT_Xarch__);
     unsigned Index = C.getArgs().getBaseArgs().MakeIndex("-Xarch_");
     Arg *A = new Arg(Opt, C.getArgs().getArgString(Index), Index,
-                     C.getArgs().MakeArgString(Triple.split("-").first),
+                     C.getArgs().MakeArgString(Triple.getArchName()),
                      C.getArgs().MakeArgString("--offload-arch=" + Arch));
     A->claim();
     C.getArgs().append(A);
     C.getArgs().AddSynthesizedArg(A);
-    Triples.insert(Triple);
+    Triples.insert(TripleStr);
   }
 
   // Infer the default target triple if no specific architectures are given.

``````````

</details>


https://github.com/llvm/llvm-project/pull/189262


More information about the llvm-branch-commits mailing list