[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
Amit Kumar Pandey via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 7 05:08:45 PST 2025
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126186
>From 43433affa692b2690bc3dbb738ab5c76811e68e8 Mon Sep 17 00:00:00 2001
From: Amit Pandey <pandey.kumaramit2023 at gmail.com>
Date: Fri, 7 Feb 2025 12:11:23 +0530
Subject: [PATCH] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP.
ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link
'ockl.bc' only when ASan is enabled for openmp amdgpu offloading
application.
---
clang/lib/Driver/ToolChains/AMDGPU.cpp | 15 +++++++++------
.../test/Driver/amdgpu-openmp-sanitize-options.c | 5 +++++
clang/test/Driver/hip-sanitize-options.hip | 2 +-
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
bool isOpenMP = false) const {
llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> BCLibs;
- auto GPUSanEnabled = [GPUSan]() { return std::get<bool>(GPUSan); };
+ // GPU Sanitizer currently only supports ASan and is enabled through host
+ // ASan.
+ auto GPUSanEnabled = [GPUSan]() {
+ return std::get<bool>(GPUSan) &&
+ std::get<const SanitizerArgs>(GPUSan).needsAsanRt();
+ };
auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
bool Internalize = true) {
BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
};
auto AddSanBCLibs = [&]() {
if (GPUSanEnabled()) {
- auto SanArgs = std::get<const SanitizerArgs>(GPUSan);
- if (SanArgs.needsAsanRt())
- AddBCLib(getAsanRTLPath(), false);
+ AddBCLib(getAsanRTLPath(), false);
}
};
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
// them all?
std::tuple<bool, const SanitizerArgs> GPUSan(
DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
getSanitizerArgs(DriverArgs));
bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
return false;
if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false))
+ options::OPT_fno_gpu_sanitize, true))
return true;
auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..50fae71f369bbf2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,6 +13,11 @@
// RUN: | FileCheck --check-prefix=NOTSUPPORTED %s
// GPU ASan Enabled Test Cases
+
+// GPU ASan enabled through -fsanitize=address flag for amdgpu-arch [gfx908]
+// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908 -fsanitize=address --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
// ASan enabled for amdgpu-arch [gfx908]
// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
diff --git a/clang/test/Driver/hip-sanitize-options.hip b/clang/test/Driver/hip-sanitize-options.hip
index 8a852867f5b3b34..8de0ee9e18426b6 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -1,5 +1,5 @@
// RUN: %clang -### --target=x86_64-unknown-linux-gnu --offload-arch=gfx900:xnack+ \
-// RUN: -fsanitize=address -fgpu-sanitize \
+// RUN: -fsanitize=address \
// RUN: -nogpuinc --rocm-path=%S/Inputs/rocm \
// RUN: %s 2>&1 | FileCheck -check-prefixes=NORDC %s
More information about the cfe-commits
mailing list