[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