[clang] [llvm] [HIPSPV] Add chipStar SPIR-V support for the new offload driver (PR #180903)

via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 11 02:08:25 PST 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- clang/include/clang/Basic/AlignedAllocation.h clang/lib/Basic/Targets/SPIR.h clang/lib/CodeGen/CGCUDANV.cpp clang/lib/Driver/ToolChains/CommonArgs.cpp clang/lib/Driver/ToolChains/Darwin.cpp clang/lib/Driver/ToolChains/HIPSPV.cpp clang/lib/Driver/ToolChains/HIPUtility.cpp clang/lib/Driver/ToolChains/SPIRV.cpp clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp llvm/lib/Target/SPIRV/SPIRVSubtarget.cpp llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp llvm/lib/Target/SPIRV/SPIRVUtils.cpp llvm/tools/llvm-link/llvm-link.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index af0549221..a7d25d6a4 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3550,7 +3550,8 @@ void tools::constructLLVMLinkCommand(Compilation &C, const Tool &T,
   LlvmLinkArgs.append(LinkerInputs);
 
   const ToolChain &TC = T.getToolChain();
-  // Derive llvm-link path from clang path to ensure we use the same LLVM version
+  // Derive llvm-link path from clang path to ensure we use the same LLVM
+  // version
   std::string ClangPath = C.getDriver().getClangProgramPath();
   SmallString<128> LlvmLinkPath(ClangPath);
   llvm::sys::path::remove_filename(LlvmLinkPath);
diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp
index cce04756f..600c3a6f8 100644
--- a/clang/lib/Driver/ToolChains/HIPSPV.cpp
+++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp
@@ -92,9 +92,9 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
       llvm::sys::path::remove_filename(OptPath);
       llvm::sys::path::append(OptPath, "opt");
       const char *Opt = C.getArgs().MakeArgString(OptPath);
-      C.addCommand(std::make_unique<Command>(
-          JA, *this, ResponseFileSupport::None(), Opt, OptArgs, Inputs,
-          Output));
+      C.addCommand(std::make_unique<Command>(JA, *this,
+                                             ResponseFileSupport::None(), Opt,
+                                             OptArgs, Inputs, Output));
       TempFile = OptOutput;
     }
 
@@ -103,8 +103,7 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
     ArgStringList ClangArgs;
     ClangArgs.push_back("--no-default-config");
     ClangArgs.push_back("-c");
-    ClangArgs.push_back(
-        C.getArgs().MakeArgString("--target=" + T.getTriple()));
+    ClangArgs.push_back(C.getArgs().MakeArgString("--target=" + T.getTriple()));
 
     ClangArgs.push_back("-mllvm");
     ClangArgs.push_back("-spirv-ext=+SPV_INTEL_function_pointers"
@@ -117,9 +116,9 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
 
     const char *Clang =
         C.getArgs().MakeArgString(C.getDriver().getClangProgramPath());
-    C.addCommand(std::make_unique<Command>(
-        JA, *this, ResponseFileSupport::None(), Clang, ClangArgs, Inputs,
-        Output));
+    C.addCommand(std::make_unique<Command>(JA, *this,
+                                           ResponseFileSupport::None(), Clang,
+                                           ClangArgs, Inputs, Output));
     return;
   }
 
diff --git a/clang/lib/Driver/ToolChains/SPIRV.cpp b/clang/lib/Driver/ToolChains/SPIRV.cpp
index b9a62b735..42a95451f 100644
--- a/clang/lib/Driver/ToolChains/SPIRV.cpp
+++ b/clang/lib/Driver/ToolChains/SPIRV.cpp
@@ -36,15 +36,17 @@ void SPIRV::constructTranslateCommand(Compilation &C, const Tool &T,
 
   CmdArgs.append({"-o", Output.getFilename()});
 
-  // Derive llvm-spirv path from clang path to ensure we use the same LLVM version.
-  // Try versioned tool first, then fall back to unversioned.
+  // Derive llvm-spirv path from clang path to ensure we use the same LLVM
+  // version. Try versioned tool first, then fall back to unversioned.
   std::string TranslateCmdClangPath = C.getDriver().getClangProgramPath();
   SmallString<128> TranslateCmdPath(TranslateCmdClangPath);
   llvm::sys::path::remove_filename(TranslateCmdPath);
   SmallString<128> TranslateCmdVersionedPath(TranslateCmdPath);
-  llvm::sys::path::append(TranslateCmdVersionedPath, "llvm-spirv-" + std::to_string(LLVM_VERSION_MAJOR));
+  llvm::sys::path::append(TranslateCmdVersionedPath,
+                          "llvm-spirv-" + std::to_string(LLVM_VERSION_MAJOR));
   if (llvm::sys::fs::can_execute(TranslateCmdVersionedPath)) {
-    llvm::sys::path::append(TranslateCmdPath, "llvm-spirv-" + std::to_string(LLVM_VERSION_MAJOR));
+    llvm::sys::path::append(TranslateCmdPath,
+                            "llvm-spirv-" + std::to_string(LLVM_VERSION_MAJOR));
   } else {
     llvm::sys::path::append(TranslateCmdPath, "llvm-spirv");
   }
@@ -165,8 +167,9 @@ void SPIRV::Linker::ConstructJob(Compilation &C, const JobAction &JA,
     CpArgs.push_back(Inputs[0].getFilename());
     CpArgs.push_back(Output.getFilename());
     const char *CpPath = Args.MakeArgString("/usr/bin/cp");
-    C.addCommand(std::make_unique<Command>(JA, *this, ResponseFileSupport::None(),
-                                           CpPath, CpArgs, Inputs, Output));
+    C.addCommand(std::make_unique<Command>(JA, *this,
+                                           ResponseFileSupport::None(), CpPath,
+                                           CpArgs, Inputs, Output));
     return;
   }
 
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index ba12287ef..444beb98e 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -411,9 +411,9 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles,
 } // namespace nvptx
 
 namespace amdgcn {
-Expected<StringRef>
-fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFilesWithTriple,
-          const ArgList &Args) {
+Expected<StringRef> fatbinary(
+    ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFilesWithTriple,
+    const ArgList &Args) {
   llvm::TimeTraceScope TimeScope("AMDGPU Fatbinary");
 
   // AMDGPU uses the clang-offload-bundler to bundle the linked images.
@@ -454,7 +454,8 @@ fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFilesWithTr
     if (EffectiveArch == "amdgcnspirv") {
       BundleID = Saver.save("hip-spirv64-amd-amdhsa--" + EffectiveArch);
     } else if (Triple.isSPIRV()) {
-      // ChipStar and other SPIR-V HIP targets: use hip-spirv64-<vendor>-<os>--<arch>
+      // ChipStar and other SPIR-V HIP targets: use
+      // hip-spirv64-<vendor>-<os>--<arch>
       BundleID = Saver.save("hip-spirv64-" + Triple.getVendorName() + "-" +
                             Triple.getOSName() + "--" + EffectiveArch);
     } else {
@@ -580,8 +581,7 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args,
       sys::path::append(PluginPath, "lib", "libLLVMHipSpvPasses.so");
       if (!sys::fs::exists(PluginPath)) {
         PluginPath.assign(HipPath);
-        sys::path::append(PluginPath, "lib", "llvm",
-                          "libLLVMHipSpvPasses.so");
+        sys::path::append(PluginPath, "lib", "llvm", "libLLVMHipSpvPasses.so");
       }
       if (!sys::fs::exists(PluginPath))
         PluginPath.clear();
@@ -939,7 +939,8 @@ bundleCuda(ArrayRef<OffloadingImage> Images, const ArgList &Args) {
 Expected<SmallVector<std::unique_ptr<MemoryBuffer>>>
 bundleHIP(ArrayRef<OffloadingImage> Images, const ArgList &Args) {
   // Collect (file, arch, triple) tuples for bundling
-  SmallVector<std::tuple<StringRef, StringRef, StringRef>, 4> InputFilesWithTriple;
+  SmallVector<std::tuple<StringRef, StringRef, StringRef>, 4>
+      InputFilesWithTriple;
   for (const OffloadingImage &Image : Images)
     InputFilesWithTriple.emplace_back(Image.Image->getBufferIdentifier(),
                                       Image.StringData.lookup("arch"),

``````````

</details>


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


More information about the cfe-commits mailing list