https://github.com/AdityaSinha149 updated 
https://github.com/llvm/llvm-project/pull/225049

>From 1a0d5d8e595b1734bc4bf676264956643de6077e Mon Sep 17 00:00:00 2001
From: AdityaSinha149 <[email protected]>
Date: Mon, 21 Sep 2026 14:33:02 +0530
Subject: [PATCH] [NFC][clang][Driver] Move normalizeForBundler to
 OffloadBundler for reuse

---
 clang/include/clang/Driver/OffloadBundler.h   |  3 +++
 clang/lib/Driver/OffloadBundler.cpp           | 20 +++++++++++++++
 clang/lib/Driver/ToolChains/HIPUtility.cpp    | 22 +---------------
 .../tools/clang-linker-wrapper/CMakeLists.txt |  1 +
 .../ClangLinkerWrapper.cpp                    | 25 ++-----------------
 5 files changed, 27 insertions(+), 44 deletions(-)

diff --git a/clang/include/clang/Driver/OffloadBundler.h 
b/clang/include/clang/Driver/OffloadBundler.h
index 96839240543af..193584869209d 100644
--- a/clang/include/clang/Driver/OffloadBundler.h
+++ b/clang/include/clang/Driver/OffloadBundler.h
@@ -96,6 +96,9 @@ struct OffloadTargetInfo {
 /// <kind>-<triple>[-<target id>[:target features]]
 /// <triple> := <arch>-<vendor>-<os>-<env>
 bool checkOffloadBundleID(const llvm::StringRef Str);
+/// Constructs the normalized triple string used in an offload bundle entry ID.
+std::string normalizeForBundler(const llvm::Triple &OrigT,
+                                llvm::StringRef BoundArch);
 } // namespace clang
 
 #endif // LLVM_CLANG_DRIVER_OFFLOADBUNDLER_H
diff --git a/clang/lib/Driver/OffloadBundler.cpp 
b/clang/lib/Driver/OffloadBundler.cpp
index 2d0c326ab6f40..a4ad17905a887 100644
--- a/clang/lib/Driver/OffloadBundler.cpp
+++ b/clang/lib/Driver/OffloadBundler.cpp
@@ -1752,3 +1752,23 @@ bool clang::checkOffloadBundleID(const llvm::StringRef 
Str) {
   Str.split(Components, '-', /*MaxSplit=*/5);
   return Components.size() == 5 || Components.size() == 6;
 }
+
+std::string clang::normalizeForBundler(const llvm::Triple &OrigT,
+                                       StringRef BoundArch) {
+  llvm::Triple T(OrigT);
+  bool HasTargetID = !BoundArch.empty();
+
+  // FIXME: Short-term hack. The HIP runtime hardcodes the legacy
+  // "amdgcn-amd-amdhsa--" prefix when parsing the target IDs embedded in the
+  // fatbin bundle, so force it.
+  if (HasTargetID && T.isAMDGCN()) {
+    return ("amdgcn-" + T.getVendorName() + "-" + T.getOSName() + "-" +
+            T.getEnvironmentName())
+        .str();
+  }
+
+  return HasTargetID ? (T.getArchName() + "-" + T.getVendorName() + "-" +
+                        T.getOSName() + "-" + T.getEnvironmentName())
+                           .str()
+                     : T.normalize(llvm::Triple::CanonicalForm::FOUR_IDENT);
+}
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp 
b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 34a35e18c2e12..4fad72bab15bf 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -9,6 +9,7 @@
 #include "HIPUtility.h"
 #include "clang/Driver/CommonArgs.h"
 #include "clang/Driver/Compilation.h"
+#include "clang/Driver/OffloadBundler.h"
 #include "clang/Options/Options.h"
 #include "llvm/Support/Path.h"
 
@@ -27,27 +28,6 @@ namespace {
 const unsigned HIPCodeObjectAlign = 4096;
 } // namespace
 
-// Constructs a triple string for clang offload bundler.
-static std::string normalizeForBundler(const llvm::Triple &OrigT,
-                                       StringRef BoundArch) {
-  llvm::Triple T(OrigT);
-  bool HasTargetID = !BoundArch.empty();
-
-  // FIXME: Short-term hack. The HIP runtime hardcodes the legacy
-  // "amdgcn-amd-amdhsa--" prefix when parsing the target IDs embedded in the
-  // fatbin bundle, so force it.
-  if (HasTargetID && T.isAMDGCN()) {
-    return ("amdgcn-" + T.getVendorName() + "-" + T.getOSName() + "-" +
-            T.getEnvironmentName())
-        .str();
-  }
-
-  return HasTargetID ? (T.getArchName() + "-" + T.getVendorName() + "-" +
-                        T.getOSName() + "-" + T.getEnvironmentName())
-                           .str()
-                     : T.normalize(llvm::Triple::CanonicalForm::FOUR_IDENT);
-}
-
 // Construct a clang-offload-bundler command to bundle code objects for
 // different devices into a HIP fat binary.
 void HIP::constructHIPFatbinCommand(Compilation &C, const JobAction &JA,
diff --git a/clang/tools/clang-linker-wrapper/CMakeLists.txt 
b/clang/tools/clang-linker-wrapper/CMakeLists.txt
index 0c2dea328f856..a7d81d045d74b 100644
--- a/clang/tools/clang-linker-wrapper/CMakeLists.txt
+++ b/clang/tools/clang-linker-wrapper/CMakeLists.txt
@@ -36,6 +36,7 @@ add_clang_tool(clang-linker-wrapper
 
 set(CLANG_LINKER_WRAPPER_LIB_DEPS
   clangBasic
+  clangDriver
   )
 
 target_link_libraries(clang-linker-wrapper
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp 
b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 0e71d0020c071..ff75266d0b13a 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -16,6 +16,7 @@
 
 #include "clang/Basic/TargetID.h"
 #include "clang/Basic/Version.h"
+#include "clang/Driver/OffloadBundler.h"
 #include "llvm/ADT/MapVector.h"
 #include "llvm/BinaryFormat/Magic.h"
 #include "llvm/Bitcode/BitcodeWriter.h"
@@ -423,28 +424,6 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> 
InputFiles,
 
 namespace amdgcn {
 
-// Constructs a triple string for clang offload bundler.
-// NOTE: copied from HIPUtility.cpp.
-static std::string normalizeForBundler(const llvm::Triple &T,
-                                       bool HasTargetID) {
-  // FIXME: Short-term hack, mirrors HIPUtility.cpp. The HIP runtime (CLR)
-  // hardcodes the legacy "amdgcn-amd-amdhsa" spelling when parsing the target
-  // IDs embedded in the fatbin bundle. The new amdgpu subarch triples (e.g.
-  // "amdgpu9.00-amd-amdhsa"), and the plain canonical "amdgpu" arch name, do
-  // not match, producing hipErrorInvalidImage at load time. Force the legacy
-  // "amdgcn-amd-amdhsa" spelling in the bundle entry until CLR stops
-  // hardcoding this.
-  if (HasTargetID && T.isAMDGCN())
-    return ("amdgcn-" + T.getVendorName() + "-" + T.getOSName() + "-" +
-            T.getEnvironmentName())
-        .str();
-
-  return HasTargetID ? (T.getArchName() + "-" + T.getVendorName() + "-" +
-                        T.getOSName() + "-" + T.getEnvironmentName())
-                           .str()
-                     : T.normalize(llvm::Triple::CanonicalForm::FOUR_IDENT);
-}
-
 Expected<StringRef>
 fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFiles,
           const ArgList &Args) {
@@ -481,7 +460,7 @@ fatbinary(ArrayRef<std::tuple<StringRef, StringRef, 
StringRef>> InputFiles,
       Saver.save("-targets=host-" + HostTriple.normalize())};
   for (const auto &[File, TripleRef, Arch] : InputFiles) {
     std::string NormalizedTriple =
-        normalizeForBundler(Triple(TripleRef), !Arch.empty());
+        clang::normalizeForBundler(Triple(TripleRef), Arch);
     Targets.push_back(Saver.save("hip-" + NormalizedTriple + "-" + Arch));
   }
   CmdArgs.push_back(Saver.save(llvm::join(Targets, ",")));

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to