[clang] [Clang][HIP] Forward hipstdpar flag to clang-linker-wrapper (PR #206497)
Marcos Maronas via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 30 01:10:51 PDT 2026
https://github.com/maarquitos14 updated https://github.com/llvm/llvm-project/pull/206497
>From 4629781052af485b8cbffeb4f1a31a20cead5dc5 Mon Sep 17 00:00:00 2001
From: Marcos Maronas <mmaronas at amd.com>
Date: Mon, 29 Jun 2026 08:29:23 -0500
Subject: [PATCH 1/3] [Clang][HIP] Forward hipstdpar flag to
clang-linker-wrapper
---
clang/lib/Driver/ToolChains/Clang.cpp | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index a3a3954bc464e..d39983a4922b6 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -9915,6 +9915,18 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
!UsesProfileGenerate && !TC->getTriple().isSPIRV())
CmdArgs.push_back("--no-lto");
}
+
+ if (Kind == Action::OFK_HIP && TC->getTriple().isAMDGCN() &&
+ Args.hasArg(options::OPT_hipstdpar)) {
+ CmdArgs.push_back(Args.MakeArgString(
+ "--device-compiler=" + TC->getTripleString() + "=-mllvm"));
+ CmdArgs.push_back(Args.MakeArgString(
+ "--device-compiler=" + TC->getTripleString() +
+ "=-amdgpu-enable-hipstdpar"));
+ CmdArgs.push_back(Args.MakeArgString(
+ "--device-linker=" + TC->getTripleString() +
+ "=-plugin-opt=-amdgpu-enable-hipstdpar"));
+ }
}
}
>From f49ef7ba15fd14336a7b045bdde55e60ce483498 Mon Sep 17 00:00:00 2001
From: Marcos Maronas <mmaronas at amd.com>
Date: Mon, 29 Jun 2026 10:23:07 -0500
Subject: [PATCH 2/3] Move to AMDGPU toolchain.
---
clang/lib/Driver/ToolChains/AMDGPU.cpp | 6 ++++++
clang/lib/Driver/ToolChains/Clang.cpp | 15 ++-------------
2 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 325dba03c4136..032c108d3d10d 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -610,6 +610,9 @@ void amdgpu::Linker::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("-shared");
}
+ if (Args.hasArg(options::OPT_hipstdpar))
+ CmdArgs.push_back("-plugin-opt=-amdgpu-enable-hipstdpar");
+
if (auto LTO = getToolChain().getLTOMode(Args); LTO != LTOK_None) {
addLTOOptions(getToolChain(), Args, CmdArgs, Output, Inputs,
LTO == LTOK_Thin);
@@ -893,6 +896,9 @@ void AMDGPUToolChain::addClangTargetOptions(
!DriverArgs.hasArg(options::OPT_disable_llvm_optzns))
CC1Args.push_back("-disable-llvm-optzns");
+ if (DriverArgs.hasArg(options::OPT_hipstdpar))
+ CC1Args.append({"-mllvm", "-amdgpu-enable-hipstdpar"});
+
if (DeviceOffloadingKind == Action::OFK_None)
addOpenCLBuiltinsLib(getDriver(), getTriple(), DriverArgs, CC1Args);
}
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index d39983a4922b6..bdacc39fecea4 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -9787,7 +9787,8 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
OPT_fsanitize_trap_EQ,
OPT_fno_sanitize_trap_EQ,
OPT_fslp_vectorize,
- OPT_fno_slp_vectorize};
+ OPT_fno_slp_vectorize,
+ OPT_hipstdpar};
const llvm::DenseSet<unsigned> LinkerOptions{OPT_mllvm, OPT_Zlinker_input};
auto ToolChainHasRT = [&](const ToolChain &TC, StringRef Name) {
return TC.getVFS().exists(
@@ -9915,18 +9916,6 @@ void LinkerWrapper::ConstructJob(Compilation &C, const JobAction &JA,
!UsesProfileGenerate && !TC->getTriple().isSPIRV())
CmdArgs.push_back("--no-lto");
}
-
- if (Kind == Action::OFK_HIP && TC->getTriple().isAMDGCN() &&
- Args.hasArg(options::OPT_hipstdpar)) {
- CmdArgs.push_back(Args.MakeArgString(
- "--device-compiler=" + TC->getTripleString() + "=-mllvm"));
- CmdArgs.push_back(Args.MakeArgString(
- "--device-compiler=" + TC->getTripleString() +
- "=-amdgpu-enable-hipstdpar"));
- CmdArgs.push_back(Args.MakeArgString(
- "--device-linker=" + TC->getTripleString() +
- "=-plugin-opt=-amdgpu-enable-hipstdpar"));
- }
}
}
>From 5b8a3d3a0f0e89e5b8faa54bbaf74ffe8ef9a567 Mon Sep 17 00:00:00 2001
From: Marcos Maronas <mmaronas at amd.com>
Date: Tue, 30 Jun 2026 03:10:33 -0500
Subject: [PATCH 3/3] Add testing
---
clang/test/Driver/hipstdpar.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/clang/test/Driver/hipstdpar.c b/clang/test/Driver/hipstdpar.c
index 7d02e0258853e..8420b55f4bfd3 100644
--- a/clang/test/Driver/hipstdpar.c
+++ b/clang/test/Driver/hipstdpar.c
@@ -21,3 +21,34 @@
// HIPSTDPAR-COMPILE: "-include" "hipstdpar_lib.hpp"
// HIPSTDPAR-LINK: "-rpath"
// HIPSTDPAR-LINK: "{{.*hip.*}}"
+
+// Check that --hipstdpar is forwarded to the linker wrapper as a device
+// compiler arg when using the new offloading driver.
+// RUN: %clang -### --target=x86_64-unknown-linux-gnu \
+// RUN: --hipstdpar --hipstdpar-path=%S/Inputs/hipstdpar \
+// RUN: -nogpulib -nogpuinc -c %s 2>&1 | \
+// RUN: FileCheck --check-prefix=HIPSTDPAR-NEW-DRV %s
+// HIPSTDPAR-NEW-DRV: {{".*clang-linker-wrapper"}}
+// HIPSTDPAR-NEW-DRV-SAME: "--device-compiler=amdgcn-amd-amdhsa=--hipstdpar"
+
+// Check that the base AMDGPU toolchain translates --hipstdpar to the backend
+// flag. This is the path taken by the inner clang invocation from the linker
+// wrapper (clang --target=amdgcn-amd-amdhsa --hipstdpar ...).
+// RUN: %clang -### --target=amdgcn-amd-amdhsa \
+// RUN: --hipstdpar %s 2>&1 | \
+// RUN: FileCheck --check-prefix=HIPSTDPAR-AMDGPU-TC %s
+// HIPSTDPAR-AMDGPU-TC: "-mllvm" "-amdgpu-enable-hipstdpar"
+
+// Check that the base AMDGPU toolchain linker forwards the hipstdpar flag as a
+// plugin-opt for the LTO path.
+// RUN: %clang -### --target=amdgcn-amd-amdhsa \
+// RUN: --hipstdpar -flto %s 2>&1 | \
+// RUN: FileCheck --check-prefix=HIPSTDPAR-AMDGPU-LTO %s
+// HIPSTDPAR-AMDGPU-LTO: ld.lld
+// HIPSTDPAR-AMDGPU-LTO-SAME: "-plugin-opt=-amdgpu-enable-hipstdpar"
+
+// Check that without --hipstdpar none of the backend flags are added.
+// RUN: %clang -### --target=amdgcn-amd-amdhsa \
+// RUN: -flto %s 2>&1 | \
+// RUN: FileCheck --check-prefix=NO-HIPSTDPAR %s
+// NO-HIPSTDPAR-NOT: "-amdgpu-enable-hipstdpar"
More information about the cfe-commits
mailing list