[clang] [HIP] Move HIP to the new driver by default (PR #123359)
Joseph Huber via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 28 11:51:00 PDT 2025
https://github.com/jhuber6 updated https://github.com/llvm/llvm-project/pull/123359
>From 185bed12285b6d27c23aa866174cd491db4f4ec7 Mon Sep 17 00:00:00 2001
From: Joseph Huber <huberjn at outlook.com>
Date: Fri, 17 Jan 2025 09:35:34 -0600
Subject: [PATCH 1/2] [HIP] Move HIP to the new driver by default
Summary:
This patch matches CUDA, moving the HIP compilation jobs to the new
driver by default. The old behavior will return with
`--no-offload-new-driver`. The main difference is that objects compiled
with the old driver are no longer compatible and will need to be
recompiled or the old driver used.
Currently, we only regress on one feature: surface and texture
registering in RDC mode. Those runtime functions require more
information than I can pack in the current struct. I don't know how
important that is, or if we could hack around it.
---
clang/lib/Driver/Driver.cpp | 14 +++-----
clang/lib/Driver/ToolChains/Clang.cpp | 7 ++--
clang/lib/Driver/ToolChains/Darwin.cpp | 4 ++-
clang/test/Driver/cl-offload.cu | 5 ++-
clang/test/Driver/cuda-arch-translation.cu | 36 +++++++++----------
...-file-flag-with-multiple-offload-archs.hip | 5 +--
clang/test/Driver/hip-code-object-version.hip | 5 +--
clang/test/Driver/hip-gz-options.hip | 7 ++--
clang/test/Driver/hip-macros.hip | 3 --
clang/test/Driver/hip-offload-arch.hip | 4 +--
clang/test/Driver/hip-options.hip | 14 ++------
clang/test/Driver/hip-sanitize-options.hip | 2 +-
clang/test/Driver/hip-save-temps.hip | 12 +++----
clang/test/Driver/hip-thinlto.hip | 8 ++---
.../test/Driver/hip-toolchain-device-only.hip | 4 ---
clang/test/Driver/hip-toolchain-mllvm.hip | 2 --
clang/test/Driver/hip-toolchain-no-rdc.hip | 6 ++--
clang/test/Driver/hip-toolchain-opt.hip | 35 ++++++------------
clang/test/Driver/hipspv-pass-plugin.hip | 8 ++---
clang/test/Driver/hipspv-toolchain.hip | 2 +-
clang/unittests/Tooling/ToolingTest.cpp | 6 ++--
21 files changed, 75 insertions(+), 114 deletions(-)
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 99de9519f3697..56bb634d7bf98 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -4324,14 +4324,9 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
handleArguments(C, Args, Inputs, Actions);
- bool UseNewOffloadingDriver =
- C.isOffloadingHostKind(Action::OFK_OpenMP) ||
- C.isOffloadingHostKind(Action::OFK_SYCL) ||
- Args.hasFlag(options::OPT_foffload_via_llvm,
- options::OPT_fno_offload_via_llvm, false) ||
- Args.hasFlag(options::OPT_offload_new_driver,
- options::OPT_no_offload_new_driver,
- C.isOffloadingHostKind(Action::OFK_Cuda));
+ bool UseNewOffloadingDriver = Args.hasFlag(
+ options::OPT_offload_new_driver, options::OPT_no_offload_new_driver,
+ C.getActiveOffloadKinds() != Action::OFK_None);
bool HIPNoRDC =
C.isOffloadingHostKind(Action::OFK_HIP) &&
@@ -5118,7 +5113,8 @@ Action *Driver::ConstructPhaseAction(
(TargetDeviceOffloadKind == Action::OFK_HIP &&
!Args.hasFlag(options::OPT_offload_new_driver,
options::OPT_no_offload_new_driver,
- C.isOffloadingHostKind(Action::OFK_Cuda))))
+ C.getActiveOffloadKinds() !=
+ Action::OFK_None)))
? types::TY_LLVM_IR
: types::TY_LLVM_BC;
return C.MakeAction<BackendJobAction>(Input, Output);
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 9d882dbfd0c65..80295a7f87e0a 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -4882,7 +4882,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
(JA.isHostOffloading(C.getActiveOffloadKinds()) &&
Args.hasFlag(options::OPT_offload_new_driver,
options::OPT_no_offload_new_driver,
- C.isOffloadingHostKind(Action::OFK_Cuda)));
+ C.getActiveOffloadKinds() != Action::OFK_None));
bool IsRDCMode =
Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, false);
@@ -5247,7 +5247,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
if (IsDeviceOffloadAction && !JA.isDeviceOffloading(Action::OFK_OpenMP) &&
!Args.hasFlag(options::OPT_offload_new_driver,
options::OPT_no_offload_new_driver,
- C.isOffloadingHostKind(Action::OFK_Cuda)) &&
+ C.getActiveOffloadKinds() != Action::OFK_None) &&
!Triple.isAMDGPU()) {
D.Diag(diag::err_drv_unsupported_opt_for_target)
<< Args.getLastArg(options::OPT_foffload_lto,
@@ -6720,7 +6720,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.append({"--offload-new-driver", "-foffload-via-llvm"});
} else if (Args.hasFlag(options::OPT_offload_new_driver,
options::OPT_no_offload_new_driver,
- C.isOffloadingHostKind(Action::OFK_Cuda))) {
+ C.getActiveOffloadKinds() != Action::OFK_None)) {
CmdArgs.push_back("--offload-new-driver");
}
@@ -9114,6 +9114,7 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
OPT_fno_lto,
OPT_flto,
OPT_flto_partitions_EQ,
+ OPT_hipspv_pass_plugin_EQ,
OPT_flto_EQ};
const llvm::DenseSet<unsigned> LinkerOptions{OPT_mllvm, OPT_Zlinker_input};
auto ShouldForward = [&](const llvm::DenseSet<unsigned> &Set, Arg *A) {
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index e5075cbcaf660..bbfd362e49417 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -573,7 +573,9 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA,
const InputInfoList &Inputs,
const ArgList &Args,
const char *LinkingOutput) const {
- assert(Output.getType() == types::TY_Image && "Invalid linker output type.");
+ assert((Output.getType() == types::TY_Image ||
+ Output.getType() == types::TY_Object) &&
+ "Invalid linker output type.");
// If the number of arguments surpasses the system limits, we will encode the
// input files in a separate file, shortening the command line. To this end,
diff --git a/clang/test/Driver/cl-offload.cu b/clang/test/Driver/cl-offload.cu
index b05bf3b97b7eb..8f1200f173359 100644
--- a/clang/test/Driver/cl-offload.cu
+++ b/clang/test/Driver/cl-offload.cu
@@ -18,11 +18,10 @@
// CUDA-SAME: "-Weverything"
// CUDA: link
-// HIP: "-cc1" "-triple" "x86_64-pc-windows-msvc{{.*}}" "-aux-triple" "amdgcn-amd-amdhsa"
-// HIP-SAME: "-Weverything"
// HIP: "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-pc-windows-msvc"
// HIP-SAME: "-Weverything"
-// HIP: {{lld.* "-flavor" "gnu" "-m" "elf64_amdgpu"}}
+// HIP: "-cc1" "-triple" "x86_64-pc-windows-msvc{{.*}}" "-aux-triple" "amdgcn-amd-amdhsa"
+// HIP-SAME: "-Weverything"
// HIP: {{link.* "amdhip64.lib"}}
// CMake uses this option when finding packages for HIP, so
diff --git a/clang/test/Driver/cuda-arch-translation.cu b/clang/test/Driver/cuda-arch-translation.cu
index e4f83740a92eb..b551c16c7b5cd 100644
--- a/clang/test/Driver/cuda-arch-translation.cu
+++ b/clang/test/Driver/cuda-arch-translation.cu
@@ -66,7 +66,7 @@
// CUDA-SAME: -m64
// CUDA: fatbinary
-// HIP: clang-offload-bundler
+// HIP: clang-offload-packager
// SM20:--image=profile=sm_20{{.*}}
// SM21:--image=profile=sm_21{{.*}}
@@ -81,20 +81,20 @@
// SM61:--image=profile=sm_61{{.*}}
// SM62:--image=profile=sm_62{{.*}}
// SM70:--image=profile=sm_70{{.*}}
-// GFX600:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx600
-// GFX601:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx601
-// GFX602:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx602
-// GFX700:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx700
-// GFX701:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx701
-// GFX702:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx702
-// GFX703:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx703
-// GFX704:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx704
-// GFX705:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx705
-// GFX801:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx801
-// GFX802:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx802
-// GFX803:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx803
-// GFX805:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx805
-// GFX810:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx810
-// GFX900:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx900
-// GFX902:-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx902
-// SPIRV:-targets=host-x86_64-unknown-linux-gnu,hip-spirv64-amd-amdhsa--amdgcnspirv
+// GFX600:triple=amdgcn-amd-amdhsa,arch=gfx600
+// GFX601:triple=amdgcn-amd-amdhsa,arch=gfx601
+// GFX602:triple=amdgcn-amd-amdhsa,arch=gfx602
+// GFX700:triple=amdgcn-amd-amdhsa,arch=gfx700
+// GFX701:triple=amdgcn-amd-amdhsa,arch=gfx701
+// GFX702:triple=amdgcn-amd-amdhsa,arch=gfx702
+// GFX703:triple=amdgcn-amd-amdhsa,arch=gfx703
+// GFX704:triple=amdgcn-amd-amdhsa,arch=gfx704
+// GFX705:triple=amdgcn-amd-amdhsa,arch=gfx705
+// GFX801:triple=amdgcn-amd-amdhsa,arch=gfx801
+// GFX802:triple=amdgcn-amd-amdhsa,arch=gfx802
+// GFX803:triple=amdgcn-amd-amdhsa,arch=gfx803
+// GFX805:triple=amdgcn-amd-amdhsa,arch=gfx805
+// GFX810:triple=amdgcn-amd-amdhsa,arch=gfx810
+// GFX900:triple=amdgcn-amd-amdhsa,arch=gfx900
+// GFX902:triple=amdgcn-amd-amdhsa,arch=gfx902
+// SPIRV:triple=spirv64-amd-amdhsa,arch=amdgcnspirv
diff --git a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip
index f17e56acfb7f7..557f6925d23f9 100644
--- a/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip
+++ b/clang/test/Driver/dep-file-flag-with-multiple-offload-archs.hip
@@ -1,12 +1,9 @@
// RUN: %clang -### -nogpuinc -nogpulib --offload-arch=gfx1030 --offload-arch=gfx1100 --offload-arch=gfx1101 --target=x86_64-linux-gnu -MD -MF tmp.d %s 2>&1 | FileCheck %s
// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1030"{{.*}}"-dependency-file" "tmp.d"
-// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1030"
// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1100"{{.*}}"-dependency-file" "tmp.d"
-// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1100"
// CHECK-NOT: {{.*}}clang{{.*}}"-target-cpu" "gfx1101"{{.*}}"-dependency-file" "tmp.d"
-// CHECK: {{.*}}lld{{.*}}"-plugin-opt=mcpu=gfx1101"
-// CHECK: {{.*}}clang-offload-bundler
+// CHECK: {{.*}}clang-offload-packager
// CHECK: {{.*}}clang{{.*}}"-target-cpu"{{.*}}"-dependency-file" "tmp.d"
void main(){}
diff --git a/clang/test/Driver/hip-code-object-version.hip b/clang/test/Driver/hip-code-object-version.hip
index 6767c27761d0a..d4887609f4547 100644
--- a/clang/test/Driver/hip-code-object-version.hip
+++ b/clang/test/Driver/hip-code-object-version.hip
@@ -7,7 +7,6 @@
// V4: "-mcode-object-version=4"
// V4: "-mllvm" "--amdhsa-code-object-version=4"
-// V4: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx906"
// Check bundle ID for code object version 5.
@@ -18,7 +17,6 @@
// V5: "-mcode-object-version=5"
// V5: "-mllvm" "--amdhsa-code-object-version=5"
-// V5: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx906"
// Check bundle ID for code object version 6.
@@ -29,11 +27,10 @@
// V6: "-mcode-object-version=6"
// V6: "-mllvm" "--amdhsa-code-object-version=6"
-// V6: "-targets=host-x86_64-unknown-linux-gnu,hipv4-amdgcn-amd-amdhsa--gfx906"
// Check bundle ID for code object version default
-// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN: %clang -### --target=x86_64-linux-gnu --no-offload-new-driver \
// RUN: --offload-arch=gfx906 -nogpuinc -nogpulib \
// RUN: %s 2>&1 | FileCheck -check-prefix=VD %s
diff --git a/clang/test/Driver/hip-gz-options.hip b/clang/test/Driver/hip-gz-options.hip
index 36de8e8404020..6d2709a172784 100644
--- a/clang/test/Driver/hip-gz-options.hip
+++ b/clang/test/Driver/hip-gz-options.hip
@@ -1,14 +1,13 @@
// REQUIRES: zlib
// RUN: %clang -### --target=x86_64-unknown-linux-gnu \
-// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \
+// RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \
// RUN: -ggdb -gz=zlib 2>&1 | FileCheck %s
// RUN: %clang -### --target=x86_64-unknown-linux-gnu \
// RUN: -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \
// RUN: -ggdb -gz=zlib 2>&1 | FileCheck %s
-// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "--compress-debug-sections=zlib"}}
-// CHECK-DAG: {{".*lld(.exe)?" .* "--compress-debug-sections=zlib"}}
-// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "--compress-debug-sections=zlib"}}
+// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "-triple" "amdgcn-amd-amdhsa" .* "--compress-debug-sections=zlib"}}
+// CHECK-DAG: {{".*clang(-[0-9]+)?(.exe)?" .* "-triple" "x86_64-unknown-linux-gnu".* "--compress-debug-sections=zlib"}}
// CHECK: "--compress-debug-sections=zlib"
diff --git a/clang/test/Driver/hip-macros.hip b/clang/test/Driver/hip-macros.hip
index bd93f9985a774..60456969c0e92 100644
--- a/clang/test/Driver/hip-macros.hip
+++ b/clang/test/Driver/hip-macros.hip
@@ -71,8 +71,6 @@
// RUN: %clang -E -dM --offload-arch=gfx942 --cuda-device-only -nogpuinc -nogpulib \
// RUN: %s 2>&1 | FileCheck --check-prefixes=NOPTS %s
// PTS-DAG: #define __HIP_API_PER_THREAD_DEFAULT_STREAM__ 1
-// PTS-DAG: #define __HIP_API_PER_THREAD_DEFAULT_STREAM__ 1
-// PTS-DAG: #define HIP_API_PER_THREAD_DEFAULT_STREAM 1
// PTS-DAG: #define HIP_API_PER_THREAD_DEFAULT_STREAM 1
// NOPTS-NOT: #define __HIP_API_PER_THREAD_DEFAULT_STREAM__
// NOPTS-NOT: #define HIP_API_PER_THREAD_DEFAULT_STREAM
@@ -83,4 +81,3 @@
// RUN: %s 2>&1 | FileCheck --check-prefix=APPROX %s
// NOAPPROX-NOT: #define __CLANG_GPU_APPROX_TRANSCENDENTALS__
// APPROX: #define __CLANG_GPU_APPROX_TRANSCENDENTALS__ 1
-// APPROX: #define __CLANG_GPU_APPROX_TRANSCENDENTALS__ 1
diff --git a/clang/test/Driver/hip-offload-arch.hip b/clang/test/Driver/hip-offload-arch.hip
index dd65a0e103ec6..1af53baf63da7 100644
--- a/clang/test/Driver/hip-offload-arch.hip
+++ b/clang/test/Driver/hip-offload-arch.hip
@@ -4,5 +4,5 @@
// RUN: -nogpuinc -nogpulib \
// RUN: %s 2>&1 | FileCheck %s
-// CHECK: {{"[^"]*clang[^"]*".* "-target-cpu" "gfx1030"}}
-// CHECK: {{"[^"]*clang[^"]*".* "-target-cpu" "gfx1031"}}
+// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx1030"
+// CHECK: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-target-cpu" "gfx1031"
diff --git a/clang/test/Driver/hip-options.hip b/clang/test/Driver/hip-options.hip
index ba23bc2d59b56..9e8dc9b584f8d 100644
--- a/clang/test/Driver/hip-options.hip
+++ b/clang/test/Driver/hip-options.hip
@@ -83,16 +83,12 @@
// RUN: --cuda-gpu-arch=gfx906 -foffload-lto=thin -fwhole-program-vtables %s 2>&1 \
// RUN: | FileCheck -check-prefix=HIPTHINLTO %s
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
-// RUN: --cuda-gpu-arch=gfx906 -fgpu-rdc -foffload-lto=thin -fwhole-program-vtables %s 2>&1 \
-// RUN: | FileCheck -check-prefix=HIPTHINLTO %s
-
// Ensure we don't error about -fwhole-program-vtables for the non-device offload compile.
// HIPTHINLTO-NOT: error: invalid argument '-fwhole-program-vtables' only allowed with '-flto'
// HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
// HIPTHINLTO: "-cc1"{{.*}} "-triple" "amdgcn-amd-amdhsa" {{.*}} "-flto=thin" "-flto-unit" {{.*}} "-fwhole-program-vtables"
// HIPTHINLTO-NOT: "-cc1"{{.*}} "-triple" "x86_64-unknown-linux-gnu" {{.*}} "-flto-unit"
-// HIPTHINLTO: lld{{.*}}"-plugin-opt=mcpu=gfx906" "-plugin-opt=thinlto" "-plugin-opt=-force-import-all"
+// HIPTHINLTO: clang-linker-wrapper{{.*}} "--device-compiler=amdgcn-amd-amdhsa=-flto=thin"
// Check that -flto=thin is handled correctly, particularly with -fwhole-program-vtables.
//
@@ -120,10 +116,7 @@
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
// RUN: --cuda-gpu-arch=gfx906 -fgpu-rdc -Xoffload-linker --build-id=md5 %s 2>&1 \
// RUN: | FileCheck -check-prefix=OFL-LINK %s
-// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
-// RUN: --cuda-gpu-arch=gfx906 -Xoffload-linker --build-id=md5 %s 2>&1 \
-// RUN: | FileCheck -check-prefix=OFL-LINK %s
-// OFL-LINK: lld{{.*}}"--build-id=md5"
+// OFL-LINK: clang-linker-wrapper{{.*}}"--device-linker=--build-id=md5"
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
// RUN: --offload-arch=gfx906 -fhip-kernel-arg-name %s 2>&1 \
@@ -240,8 +233,7 @@
// Check --offload-compress --offload-jobs=N does not cause warning.
// RUN: %clang -### -Werror --target=x86_64-unknown-linux-gnu -nogpuinc -nogpulib \
-// RUN: --offload-arch=gfx1100 --offload-compress --offload-host-only -M %s \
-// RUN: --offload-jobs=4
+// RUN: --offload-arch=gfx1100 --offload-compress --offload-jobs=4 -M %s
// Check --offload-jobs=N option.
diff --git a/clang/test/Driver/hip-sanitize-options.hip b/clang/test/Driver/hip-sanitize-options.hip
index 0c9c15b61fdc9..8e7e5e3986fb6 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -56,8 +56,8 @@
// NORDC-NOT: {{"[^"]*lld(\.exe){0,1}".*}} "[[OUT]]" {{".*asanrtl.bc" ".*hip.bc"}}
// NORDC: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address"}}
-// RDC: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address"}}
// RDC: {{"[^"]*clang[^"]*".* "-emit-llvm-bc".* "-fcuda-is-device".* "-mlink-bitcode-file" ".*asanrtl.bc".* "-fsanitize=address".*}} "-o" "[[OUT:[^"]*.bc]]"
+// RDC: {{"[^"]*clang[^"]*".* "-triple" "x86_64-unknown-linux-gnu".* "-fsanitize=address"}}
// RDC-NOT: {{"[^"]*lld(\.exe){0,1}".*}} "[[OUT]]" {{".*asanrtl.bc" ".*hip.bc"}}
// FAIL: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library
diff --git a/clang/test/Driver/hip-save-temps.hip b/clang/test/Driver/hip-save-temps.hip
index 142c3f1611a36..2e8489f65d7e0 100644
--- a/clang/test/Driver/hip-save-temps.hip
+++ b/clang/test/Driver/hip-save-temps.hip
@@ -1,31 +1,31 @@
// -fno-gpu-rdc without -o with -c
// RUN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// RUN: -nogpuinc --offload-arch=gfx900 -c %s 2>&1 | \
+// RUN: --no-offload-new-driver -nogpuinc --offload-arch=gfx900 -c %s 2>&1 | \
// RUN: FileCheck -check-prefixes=CHECK,NORDC %s
// -fno-gpu-rdc without -o
// RUN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// RUN: -nogpuinc --offload-arch=gfx900 %s 2>&1 | \
+// RUN: --no-offload-new-driver -nogpuinc --offload-arch=gfx900 %s 2>&1 | \
// RUN: FileCheck -check-prefixes=CHECK,NORDC,NOUT %s
// -fno-gpu-rdc with -o
// RUN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// RUN: -nogpuinc -o executable --offload-arch=gfx900 %s 2>&1 | \
+// RUN: --no-offload-new-driver -nogpuinc -o executable --offload-arch=gfx900 %s 2>&1 | \
// RUN: FileCheck -check-prefixes=CHECK,NORDC,WOUT %s
// -fgpu-rdc without -o with -c
// RUN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// RUN: -nogpuinc -fgpu-rdc --offload-arch=gfx900 -c %s 2>&1 | \
+// RUN: --no-offload-new-driver -nogpuinc -fgpu-rdc --offload-arch=gfx900 -c %s 2>&1 | \
// RUN: FileCheck -check-prefixes=CHECK,RDC,RDCC %s
// -fgpu-rdc without -o
// RUN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// RUN: -nogpuinc -fgpu-rdc --offload-arch=gfx900 %s 2>&1 | \
+// RUN: --no-offload-new-driver -nogpuinc -fgpu-rdc --offload-arch=gfx900 %s 2>&1 | \
// RUN: FileCheck -check-prefixes=CHECK,RDC,RDCL,NOUT %s
// -fgpu-rdc with -o
// UN: %clang -### --target=x86_64-linux-gnu -nogpulib -save-temps \
-// UN: -nogpuinc -o executable -fgpu-rdc --offload-arch=gfx900 %s 2>&1 | \
+// UN: --offload-new-driver -nogpuinc -o executable -fgpu-rdc --offload-arch=gfx900 %s 2>&1 | \
// UN: FileCheck -check-prefixes=CHECK,RDC,RDCL,WOUT %s
// -fgpu-rdc host object path
diff --git a/clang/test/Driver/hip-thinlto.hip b/clang/test/Driver/hip-thinlto.hip
index bcb7d4e6cb52e..53fd0485cb16b 100644
--- a/clang/test/Driver/hip-thinlto.hip
+++ b/clang/test/Driver/hip-thinlto.hip
@@ -1,9 +1,9 @@
// RUN: %clang -foffload-lto=thin -nogpulib -nogpuinc %s -### 2>&1 | FileCheck %s
-// CHECK: -plugin-opt=thinlto
-// CHECK-SAME: -plugin-opt=-force-import-all
-// CHECK-SAME: -plugin-opt=-avail-extern-to-local
-// CHECK-SAME: -plugin-opt=-avail-extern-gv-in-addrspace-to-local=3
+// CHECK: "--device-compiler=amdgcn-amd-amdhsa=-flto=thin"
+// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-force-import-all"
+// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-to-local"
+// CHECK-SAME: "--device-linker=amdgcn-amd-amdhsa=-plugin-opt=-avail-extern-gv-in-addrspace-to-local=3"
int main(int, char *[]) {
return 0;
}
diff --git a/clang/test/Driver/hip-toolchain-device-only.hip b/clang/test/Driver/hip-toolchain-device-only.hip
index 12097819f6688..c0621854f17ce 100644
--- a/clang/test/Driver/hip-toolchain-device-only.hip
+++ b/clang/test/Driver/hip-toolchain-device-only.hip
@@ -21,7 +21,3 @@
// CHECK: [[LLD]] "-flavor" "gnu" "-m" "elf64_amdgpu" "--no-undefined" "-shared"
// CHECK-SAME: "-o" "[[IMG_DEV_A_900:.*out]]" [[OBJ_DEV_A_900]]
-
-// CHECK: [[BUNDLER:".*clang-offload-bundler"]] "-type=o"
-// CHECK-SAME: "-targets={{.*}},hip{{.*}}-amdgcn-amd-amdhsa--gfx803,hip{{.*}}-amdgcn-amd-amdhsa--gfx900"
-// CHECK-SAME: "-input={{.*}}" "-input=[[IMG_DEV_A_803]]" "-input=[[IMG_DEV_A_900]]" "-output=[[BUNDLE_A:.*hipfb]]"
diff --git a/clang/test/Driver/hip-toolchain-mllvm.hip b/clang/test/Driver/hip-toolchain-mllvm.hip
index 33018cc398915..bedb053b9006c 100644
--- a/clang/test/Driver/hip-toolchain-mllvm.hip
+++ b/clang/test/Driver/hip-toolchain-mllvm.hip
@@ -30,13 +30,11 @@
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
// CHECK-SAME: {{.*}} "-target-cpu" "gfx803"
// CHECK-SAME: {{.*}} "-mllvm" "-unroll-count=10" {{.*}}
-// CHECK: [[LLD:".*lld.*"]] {{.*}}"-m" "elf64_amdgpu"{{.*}} "-plugin-opt=-unroll-count=10"{{.*}} "-plugin-opt=-inline-threshold=100"
// CHECK: [[CLANG]] "-cc1" "-triple" "amdgcn-amd-amdhsa"
// CHECK-SAME: "-aux-triple" "x86_64-unknown-linux-gnu"
// CHECK-SAME: {{.*}} "-target-cpu" "gfx900"
// CHECK-SAME: {{.*}} "-mllvm" "-unroll-count=10" {{.*}}
-// CHECK: [[LLD:".*lld.*"]] {{.*}} "-plugin-opt=-unroll-count=10"{{.*}} "-plugin-opt=-inline-threshold=100"
// NEG-NOT: {{".*opt"}}
// NEG-NOT: {{".*llc"}}
diff --git a/clang/test/Driver/hip-toolchain-no-rdc.hip b/clang/test/Driver/hip-toolchain-no-rdc.hip
index ddd251b67cc57..6bd337a9ef79b 100644
--- a/clang/test/Driver/hip-toolchain-no-rdc.hip
+++ b/clang/test/Driver/hip-toolchain-no-rdc.hip
@@ -4,7 +4,7 @@
// RUN: --hip-device-lib=lib1.bc --hip-device-lib=lib2.bc \
// RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \
// RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib2 \
-// RUN: -fuse-ld=lld -B%S/Inputs/lld -nogpuinc \
+// RUN: -fuse-ld=lld -B%S/Inputs/lld -nogpuinc --no-offload-new-driver \
// RUN: %S/Inputs/hip_multiple_inputs/a.cu \
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
// RUN: 2>&1 | FileCheck -check-prefixes=CHECK,LINK,OLD %s
@@ -14,7 +14,7 @@
// RUN: --hip-device-lib=lib1.bc --hip-device-lib=lib2.bc \
// RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib1 \
// RUN: --hip-device-lib-path=%S/Inputs/hip_multiple_inputs/lib2 \
-// RUN: -fuse-ld=lld -B%S/Inputs/lld -nogpuinc -c \
+// RUN: -fuse-ld=lld -B%S/Inputs/lld -nogpuinc -c --no-offload-new-driver \
// RUN: %S/Inputs/hip_multiple_inputs/a.cu \
// RUN: %S/Inputs/hip_multiple_inputs/b.hip \
// RUN: 2>&1 | FileCheck -check-prefixes=CHECK,OLD %s
@@ -36,7 +36,7 @@
// RUN: %t/a.o %t/b.o \
// RUN: 2>&1 | FileCheck -check-prefixes=LKONLY %s
-// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN: %clang -### --target=x86_64-linux-gnu --no-offload-new-driver \
// RUN: --offload-arch=amdgcnspirv --offload-arch=gfx900 \
// RUN: %s -nogpuinc -nogpulib \
// RUN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV %s
diff --git a/clang/test/Driver/hip-toolchain-opt.hip b/clang/test/Driver/hip-toolchain-opt.hip
index b104f6fff2034..bb033717deada 100644
--- a/clang/test/Driver/hip-toolchain-opt.hip
+++ b/clang/test/Driver/hip-toolchain-opt.hip
@@ -74,30 +74,6 @@
// O0-CGO2-SAME: "-O0"
// O0-CGO2-NOT: "--lto-CGO2"
-// ALL-NOT: "{{.*}}opt"
-
-// ALL-NOT: "{{.*}}llc"
-
-// ALL: "{{.*}}lld{{.*}}" {{.*}} "-plugin-opt=mcpu=gfx900"
-// DEFAULT-NOT: "-plugin-opt=O{{.*}}"
-// O0-SAME: "-plugin-opt=O0"
-// O0-SAME: "--lto-CGO0"
-// O1-SAME: "-plugin-opt=O1"
-// O1-SAME: "--lto-CGO1"
-// O2-SAME: "-plugin-opt=O2"
-// O2-SAME: "--lto-CGO2"
-// O3-SAME: "-plugin-opt=O3"
-// O3-SAME: "--lto-CGO3"
-// Os-SAME: "-plugin-opt=O2"
-// Os-SAME: "--lto-CGO2"
-// Oz-SAME: "-plugin-opt=O2"
-// Oz-SAME: "--lto-CGO2"
-// Og-SAME: "-plugin-opt=O1"
-// Og-SAME: "--lto-CGO1"
-// O0-CGO2-SAME: "-plugin-opt=O0"
-// O0-CGO2-SAME: "--lto-CGO0"
-// O0-CGO2-SAME: "--lto-CGO2"
-
// ALL: "-cc1" "-triple" "x86_64-unknown-linux-gnu"
// DEFAULT-NOT: "-O{{.}}"
// O0-SAME: "-O0"
@@ -109,3 +85,14 @@
// Og-SAME: "-Og"
// O0-CGO2-SAME: "-O0"
// O0-CGO2-NOT: "--lto-CGO2"
+
+// ALL: "{{.*}}clang-linker-wrapper{{.*}}" "--should-extract=gfx900"
+// DEFAULT-NOT: "--device-compiler=amdgcn-amd-amdhsa=-O{{.*}}"
+// O0-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O0"
+// O1-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O1"
+// O2-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O2"
+// O3-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O3"
+// Os-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Os"
+// Oz-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Oz"
+// Og-SAME: "--device-compiler=amdgcn-amd-amdhsa=-Og"
+// O0-CGO2-SAME: "--device-compiler=amdgcn-amd-amdhsa=-O0"
diff --git a/clang/test/Driver/hipspv-pass-plugin.hip b/clang/test/Driver/hipspv-pass-plugin.hip
index fc3c64b057352..de6e07b57bd6f 100644
--- a/clang/test/Driver/hipspv-pass-plugin.hip
+++ b/clang/test/Driver/hipspv-pass-plugin.hip
@@ -1,19 +1,19 @@
// UNSUPPORTED: system-windows
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: --hip-path=%S/Inputs/hipspv -nogpuinc %s \
+// RUN: --no-offload-new-driver --hip-path=%S/Inputs/hipspv -nogpuinc %s \
// RUN: 2>&1 | FileCheck --check-prefixes=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: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=%S/Inputs/pass-plugin.so %s \
// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION %s
// RUN: not %clang -### --target=x86_64-linux-gnu --offload=spirv64 \
-// RUN: -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \
+// RUN: --no-offload-new-driver -nogpuinc -nogpulib --hipspv-pass-plugin=foo.so %s \
// RUN: 2>&1 | FileCheck --check-prefixes=FROM-OPTION-INVALID %s
// RUN: %clang -### -target x86_64-linux-gnu --offload=spirv64 \
-// RUN: -nogpuinc -nogpulib %s \
+// RUN: --no-offload-new-driver -nogpuinc -nogpulib %s \
// RUN: 2>&1 | FileCheck --check-prefixes=NO-PLUGIN %s
// FROM-HIP-PATH: {{".*opt"}} {{".*.bc"}} "-load-pass-plugin"
diff --git a/clang/test/Driver/hipspv-toolchain.hip b/clang/test/Driver/hipspv-toolchain.hip
index b2187acbcd5ab..78a6163bebcdf 100644
--- a/clang/test/Driver/hipspv-toolchain.hip
+++ b/clang/test/Driver/hipspv-toolchain.hip
@@ -41,7 +41,7 @@
// RUN: && chmod +x %t/versioned/llvm-spirv-%llvm-version-major
// RUN: env "PATH=%t/versioned" %clang -### -target x86_64-linux-gnu \
// RUN: --offload=spirv64 --hip-path=%S/Inputs/hipspv -nohipwrapperinc \
-// RUN: %s 2>&1 \
+// RUN: --no-offload-new-driver %s 2>&1 \
// RUN: | FileCheck -DVERSION=%llvm-version-major \
// RUN: --check-prefix=VERSIONED %s
diff --git a/clang/unittests/Tooling/ToolingTest.cpp b/clang/unittests/Tooling/ToolingTest.cpp
index 32af4b6b3b359..8bbd2ecfbbd37 100644
--- a/clang/unittests/Tooling/ToolingTest.cpp
+++ b/clang/unittests/Tooling/ToolingTest.cpp
@@ -436,9 +436,9 @@ TEST_F(CommandLineExtractorTest, AcceptOffloadingCompile) {
TEST_F(CommandLineExtractorTest, AcceptOffloadingSyntaxOnly) {
addFile("test.c", "int main() {}\n");
const char *Args[] = {
- "clang", "-target", "arm64-apple-macosx11.0.0",
- "-fsyntax-only", "-x", "hip",
- "test.c", "-nogpulib", "-nogpuinc"};
+ "clang", "-target", "arm64-apple-macosx11.0.0", "-fsyntax-only",
+ "-x", "hip", "--no-offload-new-driver", "test.c",
+ "-nogpulib", "-nogpuinc"};
EXPECT_NE(extractCC1Arguments(Args), nullptr);
}
>From 6a1437dd4bddb6d891012435497d2bd0110c4d4f Mon Sep 17 00:00:00 2001
From: Joseph Huber <huberjn at outlook.com>
Date: Mon, 28 Jul 2025 13:29:30 -0500
Subject: [PATCH 2/2] Fix incorrect output for AMDGCN SPIR-V
---
clang/lib/Driver/Driver.cpp | 7 ++++++-
clang/test/Driver/hip-toolchain-no-rdc.hip | 6 ++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 56bb634d7bf98..be39b6cc70a9d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -5092,8 +5092,13 @@ Action *Driver::ConstructPhaseAction(
Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC;
return C.MakeAction<BackendJobAction>(Input, Output);
}
+
+ bool IsAMDGCNSPIRV = Input->getOffloadingToolChain() &&
+ Input->getOffloadingToolChain()->getTriple().getOS() ==
+ llvm::Triple::OSType::AMDHSA &&
+ Input->getOffloadingToolChain()->getTriple().isSPIRV();
if (Args.hasArg(options::OPT_emit_llvm) ||
- TargetDeviceOffloadKind == Action::OFK_SYCL ||
+ TargetDeviceOffloadKind == Action::OFK_SYCL || IsAMDGCNSPIRV ||
(((Input->getOffloadingToolChain() &&
Input->getOffloadingToolChain()->getTriple().isAMDGPU()) ||
TargetDeviceOffloadKind == Action::OFK_HIP) &&
diff --git a/clang/test/Driver/hip-toolchain-no-rdc.hip b/clang/test/Driver/hip-toolchain-no-rdc.hip
index 6bd337a9ef79b..0bc9cc45afb25 100644
--- a/clang/test/Driver/hip-toolchain-no-rdc.hip
+++ b/clang/test/Driver/hip-toolchain-no-rdc.hip
@@ -41,6 +41,11 @@
// RUN: %s -nogpuinc -nogpulib \
// RUN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV %s
+// RUN: %clang -### --target=x86_64-linux-gnu --offload-new-driver \
+// RUN: --offload-arch=amdgcnspirv --offload-arch=gfx900 \
+// RUN: %s -nogpuinc -nogpulib \
+// RUN: 2>&1 | FileCheck -check-prefixes=AMDGCNSPIRV-NEW %s
+
//
// Compile device code in a.cu to code object for gfx803.
//
@@ -214,3 +219,4 @@
// AMDGCNSPIRV: {{".*clang-offload-bundler.*"}} "-type=o"
// AMDGCNSPIRV-SAME: "-targets={{.*}}hipv4-spirv64-amd-amdhsa--amdgcnspirv,hipv4-amdgcn-amd-amdhsa--gfx900"
// AMDGCNSPIRV-SAME: "-input=[[AMDGCNSPV_CO]]" "-input=[[GFX900_CO]]"
+// AMDGCNSPIRV-NEW: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
More information about the cfe-commits
mailing list