[clang] [Clang][retry 2] Lift HIPSPV onto the new offload driver (PR #179902)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 5 02:29:08 PST 2026
Henry =?utf-8?q?Linjamäki?= <henry.linjamaki at tuni.fi>,
Henry =?utf-8?q?Linjamäki?= <henry.linjamaki at tuni.fi>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/179902 at github.com>
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Henry Linjamäki (linehill)
<details>
<summary>Changes</summary>
Update HIPSPV toolchain to support `--offload-new-driver`. Additionally, tailor llvm-spirv invocation for [chipStar](github.com/CHIP-SPV/chipStar) via `spirv64-*-chipstar` offload triple.
AFAICT, all the relevant test failures in the previous PR (#<!-- -->178664) came from tests involving `-Xoffload-compiler ‘-###’` in their RUN directives. I have reworked those tests in this PR.
---
Patch is 40.83 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/179902.diff
15 Files Affected:
- (modified) clang/docs/ReleaseNotes.rst (+7)
- (modified) clang/lib/Basic/Targets.cpp (+2-2)
- (modified) clang/lib/Basic/Targets/SPIR.h (+6-4)
- (modified) clang/lib/Driver/Driver.cpp (+15-7)
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+1)
- (modified) clang/lib/Driver/ToolChains/HIPSPV.cpp (+59-11)
- (modified) clang/lib/Driver/ToolChains/HIPSPV.h (+5-2)
- (added) clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc ()
- (modified) clang/test/Driver/hipspv-device-libs.hip (+1-1)
- (modified) clang/test/Driver/hipspv-link-static-library.hip (+39-10)
- (modified) clang/test/Driver/hipspv-pass-plugin.hip (+27-8)
- (added) clang/test/Driver/hipspv-toolchain-rdc-separate.hip (+66)
- (modified) clang/test/Driver/hipspv-toolchain-rdc.hip (+100-44)
- (modified) clang/test/Driver/hipspv-toolchain.hip (+92-16)
- (modified) clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp (+21-9)
``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 7dc6881ed43e6..24d4e07ca68b3 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -52,6 +52,13 @@ AST Dumping Potentially Breaking Changes
Clang Frontend Potentially Breaking Changes
-------------------------------------------
+- HIPSPV toolchain: `--offload-targets=spirv{32,64}` option is
+ deprecated and will be removed when the new offload driver becomes
+ default. The replacement for the option is
+ `--offload-targets=spirv{32,64}-unknown-chipstar` when using the new
+ offload driver (`--offload-new-driver`).
+
+
Clang Python Bindings Potentially Breaking Changes
--------------------------------------------------
- Remove ``CompletionString.Availability``. No libclang interfaces returned instances of it.
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 263253918d965..919fb0703b7a4 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -680,13 +680,13 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
return std::make_unique<SPIRVTargetInfo>(Triple, Opts);
}
case llvm::Triple::spirv32: {
- if (os != llvm::Triple::UnknownOS ||
+ if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) ||
Triple.getEnvironment() != llvm::Triple::UnknownEnvironment)
return nullptr;
return std::make_unique<SPIRV32TargetInfo>(Triple, Opts);
}
case llvm::Triple::spirv64: {
- if (os != llvm::Triple::UnknownOS ||
+ if ((os != llvm::Triple::UnknownOS && os != llvm::Triple::ChipStar) ||
Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) {
if (os == llvm::Triple::OSType::AMDHSA)
return std::make_unique<SPIRV64AMDGCNTargetInfo>(Triple, Opts);
diff --git a/clang/lib/Basic/Targets/SPIR.h b/clang/lib/Basic/Targets/SPIR.h
index ea992b0e01dbe..eef9521c7434a 100644
--- a/clang/lib/Basic/Targets/SPIR.h
+++ b/clang/lib/Basic/Targets/SPIR.h
@@ -362,8 +362,9 @@ class LLVM_LIBRARY_VISIBILITY SPIRV32TargetInfo : public BaseSPIRVTargetInfo {
: BaseSPIRVTargetInfo(Triple, Opts) {
assert(Triple.getArch() == llvm::Triple::spirv32 &&
"Invalid architecture for 32-bit SPIR-V.");
- assert(getTriple().getOS() == llvm::Triple::UnknownOS &&
- "32-bit SPIR-V target must use unknown OS");
+ assert((getTriple().getOS() == llvm::Triple::UnknownOS ||
+ getTriple().getOS() == llvm::Triple::ChipStar) &&
+ "32-bit SPIR-V target must use unknown or chipstar OS");
assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment &&
"32-bit SPIR-V target must use unknown environment type");
PointerWidth = PointerAlign = 32;
@@ -385,8 +386,9 @@ class LLVM_LIBRARY_VISIBILITY SPIRV64TargetInfo : public BaseSPIRVTargetInfo {
: BaseSPIRVTargetInfo(Triple, Opts) {
assert(Triple.getArch() == llvm::Triple::spirv64 &&
"Invalid architecture for 64-bit SPIR-V.");
- assert(getTriple().getOS() == llvm::Triple::UnknownOS &&
- "64-bit SPIR-V target must use unknown OS");
+ assert((getTriple().getOS() == llvm::Triple::UnknownOS ||
+ getTriple().getOS() == llvm::Triple::ChipStar) &&
+ "64-bit SPIR-V target must use unknown or chipstar OS");
assert(getTriple().getEnvironment() == llvm::Triple::UnknownEnvironment &&
"64-bit SPIR-V target must use unknown environment type");
PointerWidth = PointerAlign = 64;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 5df1a3a25b8ab..5322fb399a404 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -4938,21 +4938,26 @@ Action *Driver::BuildOffloadingActions(Compilation &C,
// Compiling HIP in device-only non-RDC mode requires linking each action
// individually.
for (Action *&A : DeviceActions) {
- bool IsAMDGCNSPIRV = A->getOffloadingToolChain() &&
- A->getOffloadingToolChain()->getTriple().getOS() ==
- llvm::Triple::OSType::AMDHSA &&
- A->getOffloadingToolChain()->getTriple().isSPIRV();
+ auto *OffloadTriple = A->getOffloadingToolChain()
+ ? &A->getOffloadingToolChain()->getTriple()
+ : nullptr;
+ bool IsHIPSPV =
+ OffloadTriple && OffloadTriple->isSPIRV() &&
+ (OffloadTriple->getOS() == llvm::Triple::OSType::AMDHSA ||
+ OffloadTriple->getOS() == llvm::Triple::OSType::ChipStar);
bool UseSPIRVBackend = Args.hasFlag(options::OPT_use_spirv_backend,
options::OPT_no_use_spirv_backend,
/*Default=*/false);
- // Special handling for the HIP SPIR-V toolchain in device-only.
+ // Special handling for the HIP SPIR-V toolchains in device-only.
// The translator path has a linking step, whereas the SPIR-V backend path
// does not to avoid any external dependency such as spirv-link. The
// linking step is skipped for the SPIR-V backend path.
- bool IsAMDGCNSPIRVWithBackend = IsAMDGCNSPIRV && UseSPIRVBackend;
+ bool IsAMDGCNSPIRVWithBackend =
+ IsHIPSPV && OffloadTriple->getOS() == llvm::Triple::OSType::AMDHSA &&
+ UseSPIRVBackend;
- if ((A->getType() != types::TY_Object && !IsAMDGCNSPIRV &&
+ if ((A->getType() != types::TY_Object && !IsHIPSPV &&
A->getType() != types::TY_LTO_BC) ||
HIPRelocatableObj || !HIPNoRDC || !offloadDeviceOnly() ||
(IsAMDGCNSPIRVWithBackend && offloadDeviceOnly()))
@@ -6961,6 +6966,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
case llvm::Triple::ShaderModel:
TC = std::make_unique<toolchains::HLSLToolChain>(*this, Target, Args);
break;
+ case llvm::Triple::ChipStar:
+ TC = std::make_unique<toolchains::HIPSPVToolChain>(*this, Target, Args);
+ break;
default:
// Of these targets, Hexagon is the only one that might have
// an OS of Linux, in which case it got handled above already.
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index fe006051e60f2..b31381d269171 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -9203,6 +9203,7 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
OPT_v,
OPT_cuda_path_EQ,
OPT_rocm_path_EQ,
+ OPT_hip_path_EQ,
OPT_O_Group,
OPT_g_Group,
OPT_g_flags_Group,
diff --git a/clang/lib/Driver/ToolChains/HIPSPV.cpp b/clang/lib/Driver/ToolChains/HIPSPV.cpp
index 0d7311f2b569c..8bdb7ab042b2b 100644
--- a/clang/lib/Driver/ToolChains/HIPSPV.cpp
+++ b/clang/lib/Driver/ToolChains/HIPSPV.cpp
@@ -90,9 +90,27 @@ void HIPSPV::Linker::constructLinkAndEmitSpirvCommand(
}
// Emit SPIR-V binary.
+ llvm::opt::ArgStringList TrArgs;
+ auto T = getToolChain().getTriple();
+ bool HasNoSubArch = T.getSubArch() == llvm::Triple::NoSubArch;
+ if (T.getOS() == llvm::Triple::ChipStar) {
+ // chipStar needs 1.2 for supporting warp-level primitivies via sub-group
+ // extensions. Strictly put we'd need 1.3 for the standard non-extension
+ // shuffle operations, but it's not supported by any backend driver of the
+ // chipStar.
+ if (HasNoSubArch)
+ TrArgs.push_back("--spirv-max-version=1.2");
+ TrArgs.push_back("--spirv-ext=-all"
+ // Needed for experimental indirect call support.
+ ",+SPV_INTEL_function_pointers"
+ // Needed for shuffles below SPIR-V 1.3
+ ",+SPV_INTEL_subgroups");
+ } else {
+ if (HasNoSubArch)
+ TrArgs.push_back("--spirv-max-version=1.1");
+ TrArgs.push_back("--spirv-ext=+all");
+ }
- llvm::opt::ArgStringList TrArgs{"--spirv-max-version=1.1",
- "--spirv-ext=+all"};
InputInfo TrInput = InputInfo(types::TY_LLVM_BC, TempFile, "");
SPIRV::constructTranslateCommand(C, *this, JA, Output, TrInput, TrArgs);
}
@@ -116,7 +134,16 @@ void HIPSPV::Linker::ConstructJob(Compilation &C, const JobAction &JA,
HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,
const ToolChain &HostTC, const ArgList &Args)
- : ToolChain(D, Triple, Args), HostTC(HostTC) {
+ : ToolChain(D, Triple, Args), HostTC(&HostTC) {
+ // Lookup binaries into the driver directory, this is used to
+ // discover the clang-offload-bundler executable.
+ getProgramPaths().push_back(getDriver().Dir);
+}
+
+// Non-offloading toolchain. Primaly used by clang-offload-linker.
+HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,
+ const ArgList &Args)
+ : ToolChain(D, Triple, Args), HostTC(nullptr) {
// Lookup binaries into the driver directory, this is used to
// discover the clang-offload-bundler executable.
getProgramPaths().push_back(getDriver().Dir);
@@ -125,7 +152,14 @@ HIPSPVToolChain::HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,
void HIPSPVToolChain::addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadingKind) const {
- HostTC.addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadingKind);
+
+ if (!HostTC) {
+ assert(DeviceOffloadingKind == Action::OFK_None &&
+ "Need host toolchain for offloading!");
+ return;
+ }
+
+ HostTC->addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadingKind);
assert(DeviceOffloadingKind == Action::OFK_HIP &&
"Only HIP offloading kinds are supported for GPUs.");
@@ -156,27 +190,37 @@ Tool *HIPSPVToolChain::buildLinker() const {
}
void HIPSPVToolChain::addClangWarningOptions(ArgStringList &CC1Args) const {
- HostTC.addClangWarningOptions(CC1Args);
+ if (HostTC)
+ HostTC->addClangWarningOptions(CC1Args);
+ ToolChain::addClangWarningOptions(CC1Args);
}
ToolChain::CXXStdlibType
HIPSPVToolChain::GetCXXStdlibType(const ArgList &Args) const {
- return HostTC.GetCXXStdlibType(Args);
+ if (HostTC)
+ return HostTC->GetCXXStdlibType(Args);
+ return ToolChain::GetCXXStdlibType(Args);
}
void HIPSPVToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
ArgStringList &CC1Args) const {
- HostTC.AddClangSystemIncludeArgs(DriverArgs, CC1Args);
+ if (HostTC)
+ HostTC->AddClangSystemIncludeArgs(DriverArgs, CC1Args);
+ ToolChain::AddClangSystemIncludeArgs(DriverArgs, CC1Args);
}
void HIPSPVToolChain::AddClangCXXStdlibIncludeArgs(
const ArgList &Args, ArgStringList &CC1Args) const {
- HostTC.AddClangCXXStdlibIncludeArgs(Args, CC1Args);
+ if (HostTC)
+ HostTC->AddClangCXXStdlibIncludeArgs(Args, CC1Args);
+ ToolChain::AddClangCXXStdlibIncludeArgs(Args, CC1Args);
}
void HIPSPVToolChain::AddIAMCUIncludeArgs(const ArgList &Args,
ArgStringList &CC1Args) const {
- HostTC.AddIAMCUIncludeArgs(Args, CC1Args);
+ if (HostTC)
+ HostTC->AddIAMCUIncludeArgs(Args, CC1Args);
+ ToolChain::AddIAMCUIncludeArgs(Args, CC1Args);
}
void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs,
@@ -270,12 +314,16 @@ SanitizerMask HIPSPVToolChain::getSupportedSanitizers() const {
// This behavior is necessary because the host and device toolchains
// invocations often share the command line, so the device toolchain must
// tolerate flags meant only for the host toolchain.
- return HostTC.getSupportedSanitizers();
+ if (HostTC)
+ return HostTC->getSupportedSanitizers();
+ return ToolChain::getSupportedSanitizers();
}
VersionTuple HIPSPVToolChain::computeMSVCVersion(const Driver *D,
const ArgList &Args) const {
- return HostTC.computeMSVCVersion(D, Args);
+ if (HostTC)
+ return HostTC->computeMSVCVersion(D, Args);
+ return ToolChain::computeMSVCVersion(D, Args);
}
void HIPSPVToolChain::adjustDebugInfoKind(
diff --git a/clang/lib/Driver/ToolChains/HIPSPV.h b/clang/lib/Driver/ToolChains/HIPSPV.h
index caf6924151446..068040ee4f491 100644
--- a/clang/lib/Driver/ToolChains/HIPSPV.h
+++ b/clang/lib/Driver/ToolChains/HIPSPV.h
@@ -47,9 +47,12 @@ class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain {
public:
HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,
const ToolChain &HostTC, const llvm::opt::ArgList &Args);
+ HIPSPVToolChain(const Driver &D, const llvm::Triple &Triple,
+ const llvm::opt::ArgList &Args);
const llvm::Triple *getAuxTriple() const override {
- return &HostTC.getTriple();
+ assert(HostTC);
+ return &HostTC->getTriple();
}
void
@@ -90,7 +93,7 @@ class LLVM_LIBRARY_VISIBILITY HIPSPVToolChain final : public ToolChain {
bool isPICDefaultForced() const override { return false; }
bool SupportsProfiling() const override { return false; }
- const ToolChain &HostTC;
+ const ToolChain *HostTC = nullptr;
protected:
Tool *buildLinker() const override;
diff --git a/clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc b/clang/test/Driver/Inputs/hipspv/lib/hip-device-lib/hipspv-spirv64-unknown-chipstar.bc
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/hipspv-device-libs.hip b/clang/test/Driver/hipspv-device-libs.hip
index 9d6af54b10255..71bf0897e39dd 100644
--- a/clang/test/Driver/hipspv-device-libs.hip
+++ b/clang/test/Driver/hipspv-device-libs.hip
@@ -6,7 +6,7 @@
// Test --hip-device-lib-path
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: --hip-path=%S/Inputs/hipspv \
+// RUN: --hip-path=%S/Inputs/hipspv \
// RUN: --hip-device-lib-path=%S/Inputs/hipspv-dev-lib %s \
// RUN: 2>&1 | FileCheck --check-prefixes=ALL,HIP-DEV-LIB-PATH %s
diff --git a/clang/test/Driver/hipspv-link-static-library.hip b/clang/test/Driver/hipspv-link-static-library.hip
index cf16236738c12..eb114ada49020 100644
--- a/clang/test/Driver/hipspv-link-static-library.hip
+++ b/clang/test/Driver/hipspv-link-static-library.hip
@@ -1,28 +1,57 @@
// Test HIPSPV static device library linking
// REQUIRES: system-linux
+// REQUIRES: x86-registered-target
+// REQUIRES: spirv-registered-target
// UNSUPPORTED: system-windows
// Create a dummy archive to test SDL linking
// RUN: rm -rf %t && mkdir %t
-// RUN: touch %t/dummy.bc
+// RUN: touch %t/dummy.bc
// RUN: llvm-ar cr %t/libSDL.a %t/dummy.bc
// Test that -l options are passed to llvm-link for --offload=spirv64
// RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \
-// RUN: -L%t -lSDL \
-// RUN: 2>&1 | FileCheck -check-prefix=SDL-LINK %s
+// RUN: --no-offload-new-driver -L%t -lSDL \
+// RUN: 2>&1 | FileCheck -check-prefixes=SDL %s
-// Test that .a files are properly unbundled and passed to llvm-link
+// Test that .a files are properly unbundled and passed to llvm-link
// RUN: %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
// RUN: --hip-path=%S/Inputs/hipspv -nohipwrapperinc %s \
-// RUN: %t/libSDL.a \
-// RUN: 2>&1 | FileCheck -check-prefix=SDL-ARCHIVE %s
+// RUN: --no-offload-new-driver %t/libSDL.a \
+// RUN: 2>&1 | FileCheck -check-prefixes=SDL %s
+
+// RUN: %clang -cc1 %s -triple spirv64-unknown-chipstar -emit-llvm-bc -o %t/dev.bc
+// RUN: llvm-offload-binary -o %t/dev.out \
+// RUN: --image=file=%t/dev.bc,kind=hip,triple=spirv64-unknown-chipstar,arch=generic
+// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t/tu0.o \
+// RUN: -fembed-offload-object=%t/dev.out
+// RUN: cp %t/tu0.o %t/tu1.o
+// RUN: llvm-ar cr %t/libSDL2.a %t/tu1.o
+
+// RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver -fgpu-rdc \
+// RUN: -Xoffload-compiler-spirv64-unknown-chipstar \
+// RUN: --hip-path=%S/Inputs/hipspv -no-hip-rt %t/tu0.o %t/libSDL2.a \
+// RUN: 2>&1 | FileCheck -check-prefixes=SDL-NEW %s -DHIP_PATH=%S/Inputs/hipspv
+
+// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
+// RUN: --device-compiler=spirv64-unknown-chipstar=--hip-path=%S/Inputs/hipspv \
+// RUN: --linker-path=/usr/bin/ld -o a.out %t/tu0.o %t/libSDL2.a \
+// RUN: 2>&1 | FileCheck -check-prefixes=SDL-NEW-WRAPPER %s -DHIP_PATH=%S/Inputs/hipspv
// Verify that the input files are added before the SDL files in llvm-link command
// This tests the ordering fix to match HIPAMD behavior
-// SDL-LINK: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles"
-// SDL-LINK: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]"
+// SDL: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles"
+// SDL: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]"
+// SDL-NEW: "{{.*}}clang-linker-wrapper"
+// SDL-NEW-SAME: "--device-compiler=spirv64-unknown-chipstar=--hip-path=[[HIP_PATH]]"
+// SDL-NEW-SAME: "{{.*}}/tu0.o" "{{.*}}/libSDL2.a"
+// DELETE-SDL-NEW: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.o" "{{.*}}.o"
+
+// SDL-NEW-WRAPPER: clang{{.*}}" --no-default-config -o {{[^ ]*.img}}
+// SDL-NEW-WRAPPER-SAME: {{[^ ]*.o}} {{[^ ]*.o}}
+// SDL-NEW-WRAPPER-SAME: --hip-path=[[HIP_PATH]]
-// SDL-ARCHIVE: "{{.*}}clang-offload-bundler" "-unbundle" "-type=a" "-input={{.*}}libSDL.a" "-targets=hip-spirv64-unknown-unknown-unknown-generic" "-output=[[SDL_A:.*\.a]]" "-allow-missing-bundles"
-// SDL-ARCHIVE: "{{.*}}llvm-link" "-o" "{{.*}}.bc" "{{.*}}.bc" "[[SDL_A]]"
+// SDL: "{{.*}}opt"
+// SDL-SAME: "-load-pass-plugin" {{".*/hipspv/lib/libLLVMHipSpvPasses.so"}}
+// SDL-SAME: "-passes=hip-post-link-passes"
diff --git a/clang/test/Driver/hipspv-pass-plugin.hip b/clang/test/Driver/hipspv-pass-plugin.hip
index fc3c64b057352..3a0979ad6df01 100644
--- a/clang/test/Driver/hipspv-pass-plugin.hip
+++ b/clang/test/Driver/hipspv-pass-plugin.hip
@@ -1,20 +1,38 @@
// UNSUPPORTED: system-windows
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: --hip-path=%S/Inputs/hipspv -nogpuinc %s \
-// RUN: 2>&1 | FileCheck --check-prefixes=FROM-HIP-PATH %s
+// RUN: --no-offload-new-driver --hip-path=%S/Inputs/hipspv -nogpuinc %s \
+// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-HIP-PATH %s
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: -nogpuinc -nogpulib --hipspv-pass-plugin=%S/Inputs/pass-plugin.so %s \
-// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION %s
+// RUN: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=%S/Inputs/pass-plugin.so %s \
+// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-OPTION %s
// RUN: not %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
-// RUN: -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \
-// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION-INVALID %s
+// RUN: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \
+// RUN: 2>&1 | FileCheck --check-prefixes=ALL,FROM-OPTION-INVALID %s
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: -nogpuinc -nogpulib %s \
-// RUN: 2>&1 | FileCheck --check-prefixes=NO-PLUGIN %s
+// RUN: --no-offload-new-driver -nogpuinc -nogpulib %s \
+// RUN: 2>&1 | FileCheck --check-prefixes=ALL,NO-PLUGIN %s
+
+// Run commands for the new offload driver:
+
+// RUN: touch %t.dummy.o
+// RUN: %clang -### --no-default-config -o /dev/null --target=spirv64-unknown-chipstar \
+// RUN: %t.dummy.o --hip-path=%S/Inputs/hipspv \
+// RUN: 2>&1 | FileCheck %s --check-prefixes=ALL,FROM-HIP-PATH
+
+// RUN: %clang -### --no-default-config -o /dev/null --target=spirv64-unknown-chipstar \
+// RUN: %t.dummy.o --hipspv-pass-plugin=%S/Inputs/pass-plugin.so \
+// RUN: 2>&1 | FileCheck %s --check-prefixes=ALL,FROM-OPTION
+
+// RUN: not %clang -### --no-default-config -o /dev/null --target=spirv64-unknown-chipstar \
+// RUN: %t.dummy.o --hipspv-pass-plugin=foo.so \
+// RUN: 2>&1 | FileCheck %s --check-prefixes=ALL,FROM-OPTION-I...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/179902
More information about the cfe-commits
mailing list