[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/107997 HIPAMDToolChain and AMDGPUToolChain both depends on the "shouldSkipSanitizeOption" api to sanitize/not sanitize device code. >From 4a9c7b7412f4f8f03d69b255ce1e7b46877db4fd Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 10 Sep 2024 15:53:28 +0530 Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. HIPAMDToolChain and AMDGPUToolChain both depends on the "shouldSkipSanitizeOption" api to sanitize/not sanitize device code. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 + clang/lib/Driver/ToolChains/AMDGPU.h | 6 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 -- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a788aba57546c8..74f70573c5feb8 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP); } + +bool AMDGPUToolChain::shouldSkipSanitizeOption( +const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, const llvm::opt::Arg *A) const { + // For actions without targetID, do nothing. + if (TargetID.empty()) +return false; + Option O = A->getOption(); + if (!O.matches(options::OPT_fsanitize_EQ)) +return false; + + if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true)) +return true; + + auto &Diags = TC.getDriver().getDiags(); + + // For simplicity, we only allow -fsanitize=address + SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); + if (K != SanitizerKind::Address) +return true; + + llvm::StringMap FeatureMap; + auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); + + assert(OptionalGpuArch && "Invalid Target ID"); + (void)OptionalGpuArch; + auto Loc = FeatureMap.find("xnack"); + if (Loc == FeatureMap.end() || !Loc->second) { +Diags.Report( +clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) +<< A->getAsString(DriverArgs) << TargetID << "xnack+"; +return true; + } + return false; +} \ No newline at end of file diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index 7e70dae8ce152e..a9b4552a1f91a4 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Needed for translating LTO options. const char *getDefaultLinker() const override { return "ld.lld"; } + /// Should skip sanitize options. + bool shouldSkipSanitizeOption(const ToolChain &TC, +const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, +const llvm::opt::Arg *A) const; + /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error /// if unable to find one. virtual Expected> diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index cbb8fab69a316d..bae05cc0bb7353 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -36,43 +36,6 @@ using namespace llvm::opt; #define NULL_FILE "/dev/null" #endif -static bool shouldSkipSanitizeOption(const ToolChain &TC, - const llvm::opt::ArgList &DriverArgs, - StringRef TargetID, - const llvm::opt::Arg *A) { - // For actions without targetID, do nothing. - if (TargetID.empty()) -return false; - Option O = A->getOption(); - if (!O.matches(options::OPT_fsanitize_EQ)) -return false; - - if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize, true)) -return true; - - auto &Diags = TC.getDriver().getDiags(); - - // For simplicity, we only allow -fsanitize=address - SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) -return true; - - llvm::StringMap FeatureMap; - auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); - - assert(OptionalGpuArch && "Invalid Target ID"); - (void)OptionalGpuArch; - auto Loc = FeatureMap.find("xnack"); - if (Loc == FeatureMap.end() || !Loc->second) { -Diags.Report( -clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) -<< A->getAsString(DriverArgs) << TargetID << "xnack+"; -return true; - } - return false; -} - void
[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/107997 >From 01e86b92efbb311ddc1a4383d0c63c23f757e33f Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 10 Sep 2024 15:53:28 +0530 Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' API to AMDGPU. HIPAMDToolChain and AMDGPUOpenMPToolChain both depends on the "shouldSkipSanitizeOption" api to sanitize/not sanitize device code. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 + clang/lib/Driver/ToolChains/AMDGPU.h | 6 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 -- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a788aba57546c8..74f70573c5feb8 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP); } + +bool AMDGPUToolChain::shouldSkipSanitizeOption( +const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, const llvm::opt::Arg *A) const { + // For actions without targetID, do nothing. + if (TargetID.empty()) +return false; + Option O = A->getOption(); + if (!O.matches(options::OPT_fsanitize_EQ)) +return false; + + if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true)) +return true; + + auto &Diags = TC.getDriver().getDiags(); + + // For simplicity, we only allow -fsanitize=address + SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); + if (K != SanitizerKind::Address) +return true; + + llvm::StringMap FeatureMap; + auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); + + assert(OptionalGpuArch && "Invalid Target ID"); + (void)OptionalGpuArch; + auto Loc = FeatureMap.find("xnack"); + if (Loc == FeatureMap.end() || !Loc->second) { +Diags.Report( +clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) +<< A->getAsString(DriverArgs) << TargetID << "xnack+"; +return true; + } + return false; +} \ No newline at end of file diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index 7e70dae8ce152e..a9b4552a1f91a4 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Needed for translating LTO options. const char *getDefaultLinker() const override { return "ld.lld"; } + /// Should skip sanitize options. + bool shouldSkipSanitizeOption(const ToolChain &TC, +const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, +const llvm::opt::Arg *A) const; + /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error /// if unable to find one. virtual Expected> diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index cbb8fab69a316d..bae05cc0bb7353 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -36,43 +36,6 @@ using namespace llvm::opt; #define NULL_FILE "/dev/null" #endif -static bool shouldSkipSanitizeOption(const ToolChain &TC, - const llvm::opt::ArgList &DriverArgs, - StringRef TargetID, - const llvm::opt::Arg *A) { - // For actions without targetID, do nothing. - if (TargetID.empty()) -return false; - Option O = A->getOption(); - if (!O.matches(options::OPT_fsanitize_EQ)) -return false; - - if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize, true)) -return true; - - auto &Diags = TC.getDriver().getDiags(); - - // For simplicity, we only allow -fsanitize=address - SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) -return true; - - llvm::StringMap FeatureMap; - auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); - - assert(OptionalGpuArch && "Invalid Target ID"); - (void)OptionalGpuArch; - auto Loc = FeatureMap.find("xnack"); - if (Loc == FeatureMap.end() || !Loc->second) { -Diags.Report( -clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) -<< A->getAsString(DriverArgs) << TargetID << "xnack+"; -return true; - } - return false; -} - void AMDGCN::Linker::constructLlvmLinkCommand(Compilation &C, const JobAction &JA,
[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/107997 >From 4c6b015445e5820d8b09db0d3b4dba23f1413c77 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 10 Sep 2024 15:53:28 +0530 Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. HIPAMDToolChain and AMDGPUOpenMPToolChain both depends on the "shouldSkipSanitizeOption" api to sanitize/not sanitize device code. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 + clang/lib/Driver/ToolChains/AMDGPU.h | 6 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 -- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a788aba57546c8..74f70573c5feb8 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP); } + +bool AMDGPUToolChain::shouldSkipSanitizeOption( +const ToolChain &TC, const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, const llvm::opt::Arg *A) const { + // For actions without targetID, do nothing. + if (TargetID.empty()) +return false; + Option O = A->getOption(); + if (!O.matches(options::OPT_fsanitize_EQ)) +return false; + + if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true)) +return true; + + auto &Diags = TC.getDriver().getDiags(); + + // For simplicity, we only allow -fsanitize=address + SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); + if (K != SanitizerKind::Address) +return true; + + llvm::StringMap FeatureMap; + auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); + + assert(OptionalGpuArch && "Invalid Target ID"); + (void)OptionalGpuArch; + auto Loc = FeatureMap.find("xnack"); + if (Loc == FeatureMap.end() || !Loc->second) { +Diags.Report( +clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) +<< A->getAsString(DriverArgs) << TargetID << "xnack+"; +return true; + } + return false; +} \ No newline at end of file diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index 7e70dae8ce152e..a9b4552a1f91a4 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Needed for translating LTO options. const char *getDefaultLinker() const override { return "ld.lld"; } + /// Should skip sanitize options. + bool shouldSkipSanitizeOption(const ToolChain &TC, +const llvm::opt::ArgList &DriverArgs, +StringRef TargetID, +const llvm::opt::Arg *A) const; + /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error /// if unable to find one. virtual Expected> diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index cbb8fab69a316d..bae05cc0bb7353 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -36,43 +36,6 @@ using namespace llvm::opt; #define NULL_FILE "/dev/null" #endif -static bool shouldSkipSanitizeOption(const ToolChain &TC, - const llvm::opt::ArgList &DriverArgs, - StringRef TargetID, - const llvm::opt::Arg *A) { - // For actions without targetID, do nothing. - if (TargetID.empty()) -return false; - Option O = A->getOption(); - if (!O.matches(options::OPT_fsanitize_EQ)) -return false; - - if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize, true)) -return true; - - auto &Diags = TC.getDriver().getDiags(); - - // For simplicity, we only allow -fsanitize=address - SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) -return true; - - llvm::StringMap FeatureMap; - auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap); - - assert(OptionalGpuArch && "Invalid Target ID"); - (void)OptionalGpuArch; - auto Loc = FeatureMap.find("xnack"); - if (Loc == FeatureMap.end() || !Loc->second) { -Diags.Report( -clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature) -<< A->getAsString(DriverArgs) << TargetID << "xnack+"; -return true; - } - return false; -} - void AMDGCN::Linker::constructLlvmLinkCommand(Compilation &C, const JobAction &JA,
[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/107997 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/107997 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
ampandey-1995 wrote: ping https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/124754 >From 741fcf90830c6a30be851c43924e9ab95c40b8a7 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 28 Jan 2025 15:15:01 +0530 Subject: [PATCH 1/3] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 16 - .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 2b8917106afc14..243d9aac019498 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -72,9 +82,11 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); if (DeviceOffloadKind == Action::OFK_OpenMP) { -for (Arg *A : Args) - if (!llvm::is_contained(*DAL, A)) +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) DAL->append(A); +} if (!DAL->hasArg(options::OPT_march_EQ)) { StringRef Arch = BoundArch; diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 00..03adeb8e6a7833 --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', o
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( // For simplicity, we only allow -fsanitize=address SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) + if (K != SanitizerKind::Address) { ampandey-1995 wrote: Hi @Joseph , Does this patch resolves the above issue https://github.com/llvm/llvm-project/pull/125095. https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 deleted https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( // For simplicity, we only allow -fsanitize=address SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) + if (K != SanitizerKind::Address) { ampandey-1995 wrote: Hi @Joseph , Does this patch resolves the above issue https://github.com/llvm/llvm-project/pull/125095. https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( // For simplicity, we only allow -fsanitize=address SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); - if (K != SanitizerKind::Address) + if (K != SanitizerKind::Address) { ampandey-1995 wrote: Done. Hi @yxsamliu & @jhuber6 , there is one complication with respect to OpenMP toolchain i.e ```AMDGPUOpenMPToolchain```. I am seeing diagnoseUnsupportedSanitizers is getting called twice for AMDGPUOpenMP toolchain. In ```Driver.cpp``` AMDGPUOpenMPToolchain objects are created twice. **1. At line number 988.** `#0 clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers (this=0x7e1ff5c21900, Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154 #1 0x5c2e0b53 in clang::driver::toolchains::AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain (this=0x7e1ff5c21900, D=..., Triple=..., HostTC=..., Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp:41 #2 0x5c22489b in std::make_unique (__parameter_pack#0=..., __parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at /usr/include/c++/12/bits/unique_ptr.h:1065 #3 0x5c1fa1ca in clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8420, C=..., Inputs=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:988 #4 0x5c2006d6 in clang::driver::Driver::BuildCompilation (this=0x7fff8420, ArgList=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780 #5 0x59685f47 in clang_main(int, char**, llvm::ToolContext const&) () #6 0x5969a83a in main ()` **2. At line number 1058** `#0 clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers (this=0x7e1ff5c23100, Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154 #1 0x5c2e0b53 in clang::driver::toolchains::AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain (this=0x7e1ff5c23100, D=..., Triple=..., HostTC=..., Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp:41 #2 0x5c22489b in std::make_unique (__parameter_pack#0=..., __parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at /usr/include/c++/12/bits/unique_ptr.h:1065 #3 0x5c1fad00 in clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8420, C=..., Inputs=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1058 #4 0x5c2006d6 in clang::driver::Driver::BuildCompilation (this=0x7fff8420, ArgList=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780 #5 0x59685f47 in clang_main(int, char**, llvm::ToolContext const&) () #6 0x5969a83a in main ()` With Hip there is only one HIPAMD toolchain. `#0 clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers (this=0x7e1ff5c21900, Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154 #1 0x5c3e4727 in clang::driver::toolchains::HIPAMDToolChain::HIPAMDToolChain (this=0x7e1ff5c21900, D=..., Triple=..., HostTC=..., Args=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/HIPAMD.cpp:220 #2 0x5c23278a in std::make_unique (__parameter_pack#0=..., __parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at /usr/include/c++/12/bits/unique_ptr.h:1065 #3 0x5c21df4c in clang::driver::Driver::getOffloadingDeviceToolChain (this=0x7fff8400, Args=..., Target=..., HostTC=..., TargetDeviceOffloadKind=@0x7fff78f0: clang::driver::Action::OFK_HIP) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:6817 #4 0x5c1f9b47 in clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8400, C=..., Inputs=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:922 #5 0x5c2006d6 in clang::driver::Driver::BuildCompilation (this=0x7fff8400, ArgList=...) at /home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780 #6 0x59685f47 in clang_main(
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -71,10 +71,10 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); - for (Arg *A : Args) { -if (!llvm::is_contained(*DAL, A)) + for (Arg *A : Args) +if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && ampandey-1995 wrote: Currently I think the scope of ```shouldSkipSanitizeOption``` is limited to AMDGPU Derived Toolchains only. https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126186 >From 666f907b6b1c37d515a72d0bb1278399575db817 Mon Sep 17 00:00:00 2001 From: Amit Pandey 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 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 55 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 37 insertions(+), 37 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..aba79f5fa6fa7b3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e8..3fb864152766674 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,5 +1,3 @@ -// REQUIRES: x86-registered-target, amdgpu-registered-target - // Fail on invalid ROCm Path. // RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s @@ -13,38 +11,40 @@ // RUN: | FileCheck --check-prefix=NOTSUPPORTED %s // GPU ASan Enabled Test Cases -// 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 - -// GPU ASan enabled for amdgpu-arch [gfx908:xnack-] -// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s // GPU ASan enabled for amdgpu-arch [gfx908:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -ch
[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/126186 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
@@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions( ABIVer)) return; + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), ampandey-1995 wrote: Yes , sorry one misstep is here is that GPUSan object created while not checking that ```-fsanitize=address``` available. This GPUSan should be a pointer and should be initialized when ```-fsanitize=address``` is detected on Args. https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [AMDGPU] Do not enable GPU sanitizers by default (PR #126090)
ampandey-1995 wrote: Accepting this PR right now , will come with fix https://github.com/llvm/llvm-project/pull/123922/files#r1945159951 soon https://github.com/llvm/llvm-project/pull/126090 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/125857 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/125857 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126186 >From 030e486cbd0cff569ea17028ab22dbd42edf8e5a Mon Sep 17 00:00:00 2001 From: Amit Pandey 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 | 13 - clang/test/Driver/amdgpu-openmp-sanitize-options.c | 5 + clang/test/Driver/hip-sanitize-options.hip | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58acdc..efa6c83538f34e2 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(GPUSan).needsAsanRt(); + }; auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; @@ -1022,8 +1027,6 @@ RocmInstallationDetector::getCommonBitcodeLibs( }; auto AddSanBCLibs = [&]() { if (GPUSanEnabled()) { - auto SanArgs = std::get(GPUSan); - if (SanArgs.needsAsanRt()) AddBCLib(getAsanRTLPath(), false); } }; @@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // them all? std::tuple 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 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/126186 ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link 'ockl.bc' only when ASan is enabled for openmp amdgpu offloading application. >From a1a255fa2d14549deb9ebe780355f0adef00aff7 Mon Sep 17 00:00:00 2001 From: Amit Pandey 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 | 11 --- clang/test/Driver/amdgpu-openmp-sanitize-options.c | 5 + clang/test/Driver/hip-sanitize-options.hip | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58acdc..62247842bcdfa5a 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(GPUSan).needsAsanRt(); + }; auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; @@ -1066,7 +1071,7 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // them all? std::tuple 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 +1104,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 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)
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 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/125857 Using 'compiler-rt' in 'LLVM_ENABLE_PROJECTS' causes the clang runtime libraries to be build and installed with arch suffix names i.e '*-.a' and '*-.so'. >From 0fcf9f91a38d4f2131eefe6af6444aaf83328ba8 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 5 Feb 2025 19:12:00 +0530 Subject: [PATCH] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. Using 'compiler-rt' in 'LLVM_ENABLE_PROJECTS' causes the clang runtime libraries to be build and installed with arch suffix names i.e '*-.a' and '*-.so'. --- clang/test/Driver/amdgpu-openmp-sanitize-options.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index ac25d7fd802e1fb..49aae8bd42d3aae 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -56,10 +56,10 @@ // GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}} // GPUSAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}} // GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}} -// GPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" "--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* "--whole-archive" "[^"]*libclang_rt.asan_static.a".* "--whole-archive" "[^"]*libclang_rt.asan.a".*}} +// GPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" "--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* "--whole-archive" "[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}} // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "c".*}} // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}} // NOGPUSAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}} // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}} -// NOGPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" "--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* "--whole-archive" "[^"]*libclang_rt.asan_static.a".* "--whole-archive" "[^"]*libclang_rt.asan.a".*}} +// NOGPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" "--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* "--whole-archive" "[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
ampandey-1995 wrote: Fixes https://github.com/llvm/llvm-project/pull/125857 https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH 1/2] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..aba79f5fa6fa7b3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e8..f6a8a7dc57cccd9 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // R
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH 1/2] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58acd..202198e96c0127 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd1..aba79f5fa6fa7b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e..f6a8a7dc57cccd 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // RUN:
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..aba79f5fa6fa7b3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e8..f6a8a7dc57cccd9 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // RUN:
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: Sorry, actually here the DAL computed from the HostTC picks up the sanitize option like ```-fsanitize=address``` and pass forward to ```DAL``` of device toolchain. The ```shouldSkipSanitizeOption ``` runs over each argument of ```Args [The user provided arguments which are not derived]``` and checks if the ```-fsanitize=address``` is there it early returns false which then avoids checking the :xnack+ capability. So, assume the case where when we pass ```-fsanitize=address --offload-arch=gfx90a``` . This should avoid appending ```-fsanitize=address``` in the DAL for device toolchain but it dosen't since the DAL already has -fsanitize=address from host toolchain and due to early return from ```shouldSkipSanitizeOption``` where it checks for the ```:xnack+``` capability is skipped. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: What I have seen for HIPAMDToolChain , the DAL is always constructed every time dynamically allocated every time. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: Should The ```shouldSkipSanitizeOption``` consider an extra parameter ```DAL``` allocated by the host and resolve that issue ? @jhuber6 and @yxsamliu is that the correct way ,anything I am missing @yxsamliu ? https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: > Sorry I'm still confused. If the user cannot enable `-fsanitize=address` if > the GPU target doesn't support `xnack` then that should be separate driver > check / error. Unless we're just silently ignoring that? Yes we are silently ignoring that and that ```-fsanitize=address``` is there for the host only, but for device it is skipped. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: > if it's not legal for some case, then emit an error. If the user doesn't want > it then they can do `-Xarch-host -fsanitize=address`. We actually emit the warning not error, since it's legal for the host to be asan instrumented but for device it depends based on ```--offload-arch=``` containing :xnack+. If :xnack+ then allow it otherwise emit warning silently skip it. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + // Skip sanitize options passed from the HostTC. The decision to instrument + // device code is computed only by 'shouldSkipSanitizeOption'. + if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ)) ampandey-1995 wrote: We actually in check it in this part of code https://github.com/llvm/llvm-project/blob/752ebec054f8b0bf7c221813724984f10096355a/clang/lib/Driver/ToolChains/AMDGPU.cpp#L1118 https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/126671 … (#126628) This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. >From 3ddcfd96fac0ee0cc11dae494435a2aca7bcd7e5 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 55 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 38 insertions(+), 36 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..aba79f5fa6fa7b3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e8..6b315672eb7ef8b 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,7 +1,7 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. @@ -13,38 +13,40 @@ // RUN: | FileCheck --check-prefix=NOTSUPPORTED %s // GPU ASan Enabled Test Cases -// 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 - -// GPU ASan enabled for amdgpu-arch [gfx908:xnack-] -// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// R
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From e735ed1d3a577dcb66336515c1a6e9955b397dd3 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 55 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 38 insertions(+), 36 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd11..aba79f5fa6fa7b3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e8..6b315672eb7ef8b 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,7 +1,7 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. @@ -13,38 +13,40 @@ // RUN: | FileCheck --check-prefix=NOTSUPPORTED %s // GPU ASan Enabled Test Cases -// 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 - -// GPU ASan enabled for amdgpu-arch [gfx908:xnack-] -// RUN: %clang -no-canonical-prefixes -### --target=x86
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH 1/3] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58ac..202198e96c012 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd..aba79f5fa6fa7 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5..f6a8a7dc57ccc 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // RUN: | File
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -1014,17 +1014,20 @@ RocmInstallationDetector::getCommonBitcodeLibs( bool isOpenMP = false) const { llvm::SmallVector BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(GPUSan).needsAsanRt(); + }; ampandey-1995 wrote: > Why is this using a lambda and capture for a simple and? If we have other sanitizers apart from asan such as msan for GPU. Then , what I think we would be having another msanrtl.bc linked so that future code would be something like below for easy readability and maintainability purpose. Note: we cannot enable both ASan and MSan simultaneously at compile time. ``` auto GPUSanEnabled = [GPUSan](){ auto SanArgs = std::get(GPUSan); return std::get(GPUSan) && (SanArgs.needsAsanRt() || SanArgs.needsMsanRt()) ; }; ``` > I'm also surprised `get` works instead of `get<0>` Yes, since the tuple contents are of unique types it works. Should I change it? https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH 1/3] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58acd..202198e96c0127 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd1..aba79f5fa6fa7b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5e..f6a8a7dc57cccd 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // RUN:
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
@@ -1014,25 +1014,27 @@ RocmInstallationDetector::getCommonBitcodeLibs( bool isOpenMP = false) const { llvm::SmallVector BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + bool GPUSanEnabled = std::get(GPUSan) && + std::get(GPUSan).needsAsanRt(); + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; BCLibs.emplace_back(BCLib); }; auto AddSanBCLibs = [&]() { -if (GPUSanEnabled()) { - auto SanArgs = std::get(GPUSan); - if (SanArgs.needsAsanRt()) -AddBCLib(getAsanRTLPath(), false); +if (GPUSanEnabled) { + AddBCLib(getAsanRTLPath(), false); } ampandey-1995 wrote: Done. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)
@@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( assert(OptionalGpuArch && "Invalid Target ID"); (void)OptionalGpuArch; + + // Skip checking 'xnack+' feature availability for gfx12 family. ampandey-1995 wrote: Sorry, but I didn't understand , could you please elaborate? https://github.com/llvm/llvm-project/pull/126885 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126885 >From cfa9342304a03671ed261a4f0b0cbe0297bb050b Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 12 Feb 2025 15:47:33 +0530 Subject: [PATCH] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. Enable ASan instrumentation for 'gfx12' family targets.The GPU features like ':xnack+ or :sramecc+' are implicitly handled in the hardware for gfx12 family. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 5 + .../rocm/amdgcn/bitcode/oclc_isa_version_1200.bc | 0 clang/test/Driver/amdgpu-openmp-sanitize-options.c | 12 +++- clang/test/Driver/hip-sanitize-options.hip | 5 + clang/test/Driver/rocm-device-libs.cl| 6 ++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 8d5cb91ebad9a..3edd9f37897f1 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( assert(OptionalGpuArch && "Invalid Target ID"); (void)OptionalGpuArch; + + // Skip checking 'xnack+' feature availability for gfx12 family. + if (llvm::AMDGPU::getIsaVersion(TargetID).Major == 12) +return false; + auto Loc = FeatureMap.find("xnack"); if (Loc == FeatureMap.end() || !Loc->second) { Diags.Report( diff --git a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc new file mode 100644 index 0..e69de29bb2d1d diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index f6a8a7dc57ccc..bd3250a73f5b2 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -13,7 +13,6 @@ // RUN: | FileCheck --check-prefix=NOTSUPPORTED %s // GPU ASan Enabled Test Cases - // GPU ASan enabled for amdgpu-arch [gfx908:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s @@ -22,12 +21,15 @@ // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s -// ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+] +// GPU ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ --offload-arch=gfx900:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s -// GPU ASan Disabled Test Cases +// GPU ASan enabled for amdgpu-arch [gfx1200] +// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx1200 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s +// GPU ASan Disabled Test Cases // GPU ASan disabled through '-fsanitize=address' without '-fgpu-sanitize' 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,HOSTSAN,NOGPUSAN,SAN %s @@ -56,9 +58,9 @@ // HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "c".*}} -// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" "[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}} +// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" "[^"]*ockl.bc".* "-target-cpu" "(gfx1200|gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}} // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}} -// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=g
[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/126885 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126885 >From 1917d82e52350d8c65781cfc6694a6d1e12b8eb7 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 12 Feb 2025 15:47:33 +0530 Subject: [PATCH] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. Enable GPU ASan instrumentation for 'gfx12' family targets.The GPU features like ':xnack+ or :sramecc+' are implicitly handled in the hardware for gfx12 family. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 5 + .../rocm/amdgcn/bitcode/oclc_isa_version_1200.bc | 0 clang/test/Driver/amdgpu-openmp-sanitize-options.c | 12 +++- clang/test/Driver/hip-sanitize-options.hip | 5 + clang/test/Driver/rocm-device-libs.cl| 6 ++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 8d5cb91ebad9a..3edd9f37897f1 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( assert(OptionalGpuArch && "Invalid Target ID"); (void)OptionalGpuArch; + + // Skip checking 'xnack+' feature availability for gfx12 family. + if (llvm::AMDGPU::getIsaVersion(TargetID).Major == 12) +return false; + auto Loc = FeatureMap.find("xnack"); if (Loc == FeatureMap.end() || !Loc->second) { Diags.Report( diff --git a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc new file mode 100644 index 0..e69de29bb2d1d diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index f6a8a7dc57ccc..bd3250a73f5b2 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -13,7 +13,6 @@ // RUN: | FileCheck --check-prefix=NOTSUPPORTED %s // GPU ASan Enabled Test Cases - // GPU ASan enabled for amdgpu-arch [gfx908:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s @@ -22,12 +21,15 @@ // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s -// ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+] +// GPU ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ --offload-arch=gfx900:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ // RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s -// GPU ASan Disabled Test Cases +// GPU ASan enabled for amdgpu-arch [gfx1200] +// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx1200 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s +// GPU ASan Disabled Test Cases // GPU ASan disabled through '-fsanitize=address' without '-fgpu-sanitize' 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,HOSTSAN,NOGPUSAN,SAN %s @@ -56,9 +58,9 @@ // HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "c".*}} -// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" "[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}} +// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" "[^"]*ockl.bc".* "-target-cpu" "(gfx1200|gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}} // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" "-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}} -// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,ar
[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/126885 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/124754 >From 960eb5de4abcf21dec34e8932c94621733b9d11b Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Mon, 3 Feb 2025 10:57:17 +0530 Subject: [PATCH 1/4] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 37 .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 95 insertions(+) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 24d244ba6f0e18b..01f84a4e4bc5637 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -71,6 +81,33 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); + if (DeviceOffloadKind == Action::OFK_OpenMP) { +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) +DAL->append(A); +} + +if (!DAL->hasArg(options::OPT_march_EQ)) { + StringRef Arch = BoundArch; + if (Arch.empty()) { +auto ArchsOrErr = getSystemGPUArchs(Args); +if (!ArchsOrErr) { + std::string ErrMsg = + llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError())); + getDriver().Diag(diag::err_drv_undetermined_gpu_arch) + << llvm::Triple::getArchTypeName(getArch()) << ErrMsg << "-march"; + Arch = OffloadArchToString(OffloadArch::HIPDefault); +} else { + Arch = Args.MakeArgString(ArchsOrErr->front()); +} + } + DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch); +} + +return DAL; + } + for (Arg *A : Args) { if (!llvm::is_contained(*DAL, A)) DAL->append(A); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 000..03adeb8e6a7833c --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN:
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/124754 >From 960eb5de4abcf21dec34e8932c94621733b9d11b Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Mon, 3 Feb 2025 10:57:17 +0530 Subject: [PATCH 1/4] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 37 .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 95 insertions(+) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 24d244ba6f0e18b..01f84a4e4bc5637 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -71,6 +81,33 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); + if (DeviceOffloadKind == Action::OFK_OpenMP) { +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) +DAL->append(A); +} + +if (!DAL->hasArg(options::OPT_march_EQ)) { + StringRef Arch = BoundArch; + if (Arch.empty()) { +auto ArchsOrErr = getSystemGPUArchs(Args); +if (!ArchsOrErr) { + std::string ErrMsg = + llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError())); + getDriver().Diag(diag::err_drv_undetermined_gpu_arch) + << llvm::Triple::getArchTypeName(getArch()) << ErrMsg << "-march"; + Arch = OffloadArchToString(OffloadArch::HIPDefault); +} else { + Arch = Args.MakeArgString(ArchsOrErr->front()); +} + } + DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch); +} + +return DAL; + } + for (Arg *A : Args) { if (!llvm::is_contained(*DAL, A)) DAL->append(A); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 000..03adeb8e6a7833c --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN:
[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/125322 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/124754 >From 741fcf90830c6a30be851c43924e9ab95c40b8a7 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 28 Jan 2025 15:15:01 +0530 Subject: [PATCH 1/2] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 16 - .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 2b8917106afc14..243d9aac019498 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -72,9 +82,11 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); if (DeviceOffloadKind == Action::OFK_OpenMP) { -for (Arg *A : Args) - if (!llvm::is_contained(*DAL, A)) +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) DAL->append(A); +} if (!DAL->hasArg(options::OPT_march_EQ)) { StringRef Arch = BoundArch; diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 00..03adeb8e6a7833 --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', o
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/125322 Associate '-mlink-bitcode-file' as both CC1 and FC1 option. Fixes https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327 >From c0eed4a42d294aac3237915ab83b4482936f206a Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Sat, 1 Feb 2025 07:02:52 +0530 Subject: [PATCH] [Driver] Refactor option '-mlink-bitcode-file'. Associate '-mlink-bitcode-file' as both CC1 and FC1 option. Fixes https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327 --- clang/include/clang/Driver/Options.td | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index d8123cc39fdc951..e602e9ba9cceb97 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -7302,6 +7302,8 @@ let Visibility = [CC1Option, FC1Option] in { def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">, HelpText<"Link and internalize needed symbols from the given bitcode file " "before performing optimizations.">; +def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">, + HelpText<"Link the given bitcode file before performing optimizations.">; } // let Visibility = [CC1Option, FC1Option] let Visibility = [CC1Option] in { @@ -7411,8 +7413,6 @@ defm constructor_aliases : BoolMOption<"constructor-aliases", NegFlag, BothFlags<[], [ClangOption, CC1Option], " emitting complete constructors and destructors as aliases when possible">>; -def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">, - HelpText<"Link the given bitcode file before performing optimizations.">; defm link_builtin_bitcode_postopt: BoolMOption<"link-builtin-bitcode-postopt", CodeGenOpts<"LinkBitcodePostopt">, DefaultFalse, PosFlaghttps://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
ampandey-1995 wrote: PR https://github.com/llvm/llvm-project/pull/125322 is up for fixes. https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/125322 >From c1c3563865977cd4bd5878f3b81992637fbded5b Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Sat, 1 Feb 2025 07:02:52 +0530 Subject: [PATCH] [Driver] Refactor option '-mlink-bitcode-file'. Associate '-mlink-bitcode-file' as both CC1 and FC1 option. Fixes https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327 --- clang/include/clang/Driver/Options.td | 18 ++ 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index d8123cc39fdc95..0ab923fcdd5838 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -7302,6 +7302,9 @@ let Visibility = [CC1Option, FC1Option] in { def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">, HelpText<"Link and internalize needed symbols from the given bitcode file " "before performing optimizations.">; +def mlink_bitcode_file +: Separate<["-"], "mlink-bitcode-file">, + HelpText<"Link the given bitcode file before performing optimizations.">; } // let Visibility = [CC1Option, FC1Option] let Visibility = [CC1Option] in { @@ -7405,14 +7408,13 @@ def msmall_data_limit : Separate<["-"], "msmall-data-limit">, def funwind_tables_EQ : Joined<["-"], "funwind-tables=">, HelpText<"Generate unwinding tables for all functions">, MarshallingInfoInt>; -defm constructor_aliases : BoolMOption<"constructor-aliases", - CodeGenOpts<"CXXCtorDtorAliases">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[], [ClangOption, CC1Option], - " emitting complete constructors and destructors as aliases when possible">>; -def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">, - HelpText<"Link the given bitcode file before performing optimizations.">; +defm constructor_aliases +: BoolMOption<"constructor-aliases", CodeGenOpts<"CXXCtorDtorAliases">, + DefaultFalse, PosFlag, + NegFlag, + BothFlags<[], [ClangOption, CC1Option], +" emitting complete constructors and destructors " +"as aliases when possible">>; defm link_builtin_bitcode_postopt: BoolMOption<"link-builtin-bitcode-postopt", CodeGenOpts<"LinkBitcodePostopt">, DefaultFalse, PosFlaghttps://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From bb518655127ad49e527bbc2a57a5fd8a3f9f0495 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- .../clang/Basic/DiagnosticDriverKinds.td | 4 ++ clang/lib/Driver/ToolChains/AMDGPU.cpp| 71 +-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +- clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++- clang/lib/Driver/ToolChains/ROCm.h| 18 ++--- clang/test/Driver/hip-sanitize-options.hip| 6 +- clang/test/Driver/rocm-device-libs.cl | 2 +- 8 files changed, 74 insertions(+), 61 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 42c39ac6606c7f..90859e62582101 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; def err_drv_no_hip_runtime : Error< "cannot find HIP runtime; provide its path via '--rocm-path', or pass " "'-nogpuinc' to build without HIP runtime">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..7a6b38f13c102f 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,8 +946,12 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, -ABIVer)) +ABIVer, GPUSan)) return; bool Wave64 = isWave64(DriverArgs, Kind); @@ -965,28 +969,32 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } bool RocmInstallationDetector::checkCommonBitcodeLibs( -StringRef GPUArch, StringRef LibDeviceFile, -DeviceLibABIVersion ABIVer) const { +StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer, +std::tuple &GPUSan) const { + if (std::get(GPUSan)) +if (std::get(GPUSan).needsAsanRt() && +getAsanRTLPath().empty()) { + D.Diag(diag::err_drv_no_asan_rt_lib); + return false; +} if (!hasDeviceLibrary()) { D.Diag(diag::err_drv_no_rocm_device_lib) << 0; return false; @@ -1002,18 +1010,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/123922 ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. >From f6e05b8327ac12ad80ac0f4fabc3c66526d1a4f4 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- .../clang/Basic/DiagnosticDriverKinds.td | 3 + clang/lib/Driver/ToolChains/AMDGPU.cpp| 55 --- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp| 19 +-- clang/lib/Driver/ToolChains/ROCm.h| 7 ++- clang/test/Driver/hip-sanitize-options.hip| 6 +- clang/test/Driver/rocm-device-libs.cl | 2 +- 8 files changed, 49 insertions(+), 52 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 42c39ac6606c7f..14125ecff5a114 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -70,6 +70,9 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib : Error< + "AMDGPU address sanitizer runtime library (asanrtl) is not found. " + "Please install ROCm device library which supports address sanitizer">; def err_drv_no_hip_runtime : Error< "cannot find HIP runtime; provide its path via '--rocm-path', or pass " "'-nogpuinc' to build without HIP runtime">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..bdbd9c6351078a 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,8 +946,9 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan(DriverArgs.hasFlag(options::OPT_fgpu_sanitize,options::OPT_fno_gpu_sanitize,true),getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, -ABIVer)) +ABIVer,GPUSan)) return; bool Wave64 = isWave64(DriverArgs, Kind); @@ -965,28 +966,31 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { + for (auto [BCFile,Internalize] : BCLibs) { + if(Internalize) CC1Args.push_back("-mlink-builtin-bitcode"); + else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } bool RocmInstallationDetector::checkCommonBitcodeLibs( StringRef GPUArch, StringRef LibDeviceFile, -DeviceLibABIVersion ABIVer) const { +DeviceLibABIVersion ABIVer,std::tuple &GPUSan) const { + if(std::get(GPUSan)) + if(std::get(GPUSan).needsAsanRt() && getAsanRTLPath().empty()){ + D.Diag(diag::err_drv_no_asan_rt_lib); + return false; + } if (!hasDeviceLibrary()) { D.Diag(diag::err_drv_no_rocm_device_lib) << 0; return false; @@ -1002,18 +1006,28 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool F
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 0c62a289551a2b867448cb3f04ef901ad93799a3 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- .../clang/Basic/DiagnosticDriverKinds.td | 4 ++ clang/lib/Driver/ToolChains/AMDGPU.cpp| 71 +-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +- clang/lib/Driver/ToolChains/HIPAMD.cpp| 19 + clang/lib/Driver/ToolChains/ROCm.h| 18 ++--- clang/test/Driver/hip-sanitize-options.hip| 6 +- clang/test/Driver/rocm-device-libs.cl | 2 +- 8 files changed, 71 insertions(+), 58 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 42c39ac6606c7f..90859e62582101 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; def err_drv_no_hip_runtime : Error< "cannot find HIP runtime; provide its path via '--rocm-path', or pass " "'-nogpuinc' to build without HIP runtime">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..7a6b38f13c102f 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,8 +946,12 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, -ABIVer)) +ABIVer, GPUSan)) return; bool Wave64 = isWave64(DriverArgs, Kind); @@ -965,28 +969,32 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } bool RocmInstallationDetector::checkCommonBitcodeLibs( -StringRef GPUArch, StringRef LibDeviceFile, -DeviceLibABIVersion ABIVer) const { +StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer, +std::tuple &GPUSan) const { + if (std::get(GPUSan)) +if (std::get(GPUSan).needsAsanRt() && +getAsanRTLPath().empty()) { + D.Diag(diag::err_drv_no_asan_rt_lib); + return false; +} if (!hasDeviceLibrary()) { D.Diag(diag::err_drv_no_rocm_device_lib) << 0; return false; @@ -1002,18 +1010,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer,
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; ampandey-1995 wrote: Thanks, @arsenm . We discussed internally and now removing the ```asanrtl bitcode is not found``` diagnostic. Hi @arsenm, @yxsamliu, @b-sumner , should I edit the lit test(https://github.com/llvm/llvm-project/blob/bb518655127ad49e527bbc2a57a5fd8a3f9f0495/clang/test/Driver/hip-sanitize-options.hip#L63) with generic diagnostic or remove it also? https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 edited https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 341fa64bf30585dea8193565142d713f11e008eb Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- .../clang/Basic/DiagnosticDriverKinds.td | 4 ++ clang/lib/Driver/ToolChains/AMDGPU.cpp| 60 +-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++-- clang/lib/Driver/ToolChains/ROCm.h| 17 +++--- clang/test/Driver/hip-sanitize-options.hip| 8 +-- clang/test/Driver/rocm-device-libs.cl | 2 +- 8 files changed, 65 insertions(+), 60 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 42c39ac6606c7f..90859e62582101 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; def err_drv_no_hip_runtime : Error< "cannot find HIP runtime; provide its path via '--rocm-path', or pass " "'-nogpuinc' to build without HIP runtime">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..0448d1b7e71013 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, ABIVer)) return; @@ -965,28 +969,25 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } bool RocmInstallationDetector::checkCommonBitcodeLibs( -StringRef GPUArch, StringRef LibDeviceFile, -DeviceLibABIVersion ABIVer) const { +StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer) const { if (!hasDeviceLibrary()) { D.Diag(diag::err_drv_no_rocm_device_lib) << 0; return false; @@ -1002,18 +1003,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabl
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 5a800480f205497f9f22e833e41f4bb0065b768b Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- .../clang/Basic/DiagnosticDriverKinds.td | 4 ++ clang/lib/Driver/ToolChains/AMDGPU.cpp| 57 +-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++-- clang/lib/Driver/ToolChains/ROCm.h| 12 ++-- clang/test/Driver/hip-sanitize-options.hip| 8 +-- clang/test/Driver/rocm-device-libs.cl | 2 +- 8 files changed, 61 insertions(+), 56 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 42c39ac6606c7f..90859e62582101 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; def err_drv_no_hip_runtime : Error< "cannot find HIP runtime; provide its path via '--rocm-path', or pass " "'-nogpuinc' to build without HIP runtime">; diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..4fb77ecedaf4a5 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, ABIVer)) return; @@ -965,21 +969,19 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } @@ -1002,18 +1004,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, + bool Internalize = true) { +BCLib.ShouldInternalize = Internalize; +BCLibs.emplace_back(BCLib); + }; + auto AddSanBCLibs = [&]() { +auto SanArgs = std::get(GPUSan); +if (GPUSanEnabled()) { +
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 55582eeada535b101ec43dadbad3922021951343 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 57 ++-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp | 25 ++--- clang/lib/Driver/ToolChains/ROCm.h | 12 ++--- clang/test/Driver/hip-sanitize-options.hip | 8 +-- clang/test/Driver/rocm-device-libs.cl| 2 +- 7 files changed, 57 insertions(+), 56 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..4fb77ecedaf4a5 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions( StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion( getAMDGPUCodeObjectVersion(getDriver(), DriverArgs)); + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile, ABIVer)) return; @@ -965,21 +969,19 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } @@ -1002,18 +1004,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, + bool Internalize = true) { +BCLib.ShouldInternalize = Internalize; +BCLibs.emplace_back(BCLib); + }; + auto AddSanBCLibs = [&]() { +auto SanArgs = std::get(GPUSan); +if (GPUSanEnabled()) { + if (SanArgs.needsAsanRt()) +AddBCLib(getAsanRTLPath(), false); +} + }; + AddSanBCLibs(); AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); + else if (GPUSanEnabled() && isOpenMP) +AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath)); @@ -1027,7 +1046,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } -llvm::SmallVector +llvm::SmallVector ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, const std::string &GPUArch, bool isOpenMP) const { @@ -1037,6 +1056,10 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch); auto ABIVer = Devic
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error< "cannot find ROCm device library%select{| for %1| for ABI version %1}0; provide its path via " "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build " "without ROCm device library">; +def err_drv_no_asan_rt_lib +: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. " +"Please install ROCm device library which supports address " +"sanitizer">; ampandey-1995 wrote: Done. https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 58 ++-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp | 25 ++--- clang/lib/Driver/ToolChains/ROCm.h | 12 ++-- clang/test/Driver/hip-sanitize-options.hip | 8 +-- clang/test/Driver/rocm-device-libs.cl| 2 +- 7 files changed, 58 insertions(+), 56 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f58..83f486611bc9466 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions( ABIVer)) return; + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); + bool Wave64 = isWave64(DriverArgs, Kind); // TODO: There are way too many flags that change this. Do we need to check @@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } @@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, + bool Internalize = true) { +BCLib.ShouldInternalize = Internalize; +BCLibs.emplace_back(BCLib); + }; + auto AddSanBCLibs = [&]() { +if (GPUSanEnabled()) { + auto SanArgs = std::get(GPUSan); + if (SanArgs.needsAsanRt()) +AddBCLib(getAsanRTLPath(), false); +} + }; + AddSanBCLibs(); AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); + else if (GPUSanEnabled() && isOpenMP) +AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath)); @@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } -llvm::SmallVector +llvm::SmallVector ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, const std::string &GPUArch, bool isOpenMP) const { @@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // If --hip-device-lib is not set, add the default bitcode libraries. // TODO: There are way too many flags that change this. Do we need to check // them all? + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sani
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH 1/3] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 58 ++-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp | 25 ++--- clang/lib/Driver/ToolChains/ROCm.h | 12 ++-- clang/test/Driver/hip-sanitize-options.hip | 8 +-- clang/test/Driver/rocm-device-libs.cl| 2 +- 7 files changed, 58 insertions(+), 56 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..83f486611bc946 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions( ABIVer)) return; + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); + bool Wave64 = isWave64(DriverArgs, Kind); // TODO: There are way too many flags that change this. Do we need to check @@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } @@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, + bool Internalize = true) { +BCLib.ShouldInternalize = Internalize; +BCLibs.emplace_back(BCLib); + }; + auto AddSanBCLibs = [&]() { +if (GPUSanEnabled()) { + auto SanArgs = std::get(GPUSan); + if (SanArgs.needsAsanRt()) +AddBCLib(getAsanRTLPath(), false); +} + }; + AddSanBCLibs(); AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); + else if (GPUSanEnabled() && isOpenMP) +AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath)); @@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } -llvm::SmallVector +llvm::SmallVector ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, const std::string &GPUArch, bool isOpenMP) const { @@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // If --hip-device-lib is not set, add the default bitcode libraries. // TODO: There are way too many flags that change this. Do we need to check // them all? + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sa
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, ampandey-1995 wrote: Yes. We actually had a flag ```**-fgpu-sanitize**``` from the beginning of ASan project which actually used by every toolchain(hip,openmp,opencl) to enable device code instrumentation. Using ```**-fsanitize=address**``` enables asan instrumentation for host code , now for device when ```**-fgpu-sanitize**[Default always on]``` can be used alongwith ```**-fsanitize=address**``` but since it value is by default on so using ```-fgpu-sanitize``` only(without -fsanitize=address) would be a no-op effect for both host and device code. We only use the negative ```-fno-gpu-sanitize``` to disable device code asan instrumentation leaving only the host code asan instrumented. BTW, other checks are also done in progression i.e in ```shouldSkipSanitizeFunction``` which checks for ```:xnack+``` feature also in ```--offload-arch=``` option. In short asan instrumentation for both host and device is done using ```-fsanitize=address``` , there are inbuilt clang-driver checks for hip,openmp,opencl which if successful allows -fsanitize=address to pass forward to device toolchain cmd line job invocation otherwise it is skipped. If any edge tests cases missing please let me know @b-sumner , @yxsamliu , @jhuber6 ? https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
ampandey-1995 wrote: Hi all , the lit test is failing because it is dependent on PR **https://github.com/llvm/llvm-project/pull/123922** . Requesting @b-sumner , @yxsamliu , @jhuber6 to rereview again. Sorry in advance! https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 created https://github.com/llvm/llvm-project/pull/124754 Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. >From 913db08256a8ee3077067d55667e37628d9ebd7c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 28 Jan 2025 15:15:01 +0530 Subject: [PATCH] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 16 - .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 3f0b3f2d86b3ed..9e9ee7ed26f501 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -72,9 +82,11 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); if (DeviceOffloadKind == Action::OFK_OpenMP) { -for (Arg *A : Args) - if (!llvm::is_contained(*DAL, A)) +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) DAL->append(A); +} if (!DAL->hasArg(options::OPT_march_EQ)) { StringRef Arch = BoundArch; diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 00..03adeb8e6a7833 --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// FAIL-DAG: error: cannot find
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/123922 >From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 22 Jan 2025 15:41:41 +0530 Subject: [PATCH 1/2] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. Moving sanitizer specific common parts of logic to appropriate API's so as to reduce code redundancy and maintainability. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 58 ++-- clang/lib/Driver/ToolChains/AMDGPU.h | 2 +- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 7 +-- clang/lib/Driver/ToolChains/HIPAMD.cpp | 25 ++--- clang/lib/Driver/ToolChains/ROCm.h | 12 ++-- clang/test/Driver/hip-sanitize-options.hip | 8 +-- clang/test/Driver/rocm-device-libs.cl| 2 +- 7 files changed, 58 insertions(+), 56 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index a8061ffd9321f5..83f486611bc946 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions( ABIVer)) return; + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true), + getSanitizerArgs(DriverArgs)); + bool Wave64 = isWave64(DriverArgs, Kind); // TODO: There are way too many flags that change this. Do we need to check @@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions( DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); // Add the OpenCL specific bitcode library. - llvm::SmallVector BCLibs; - BCLibs.push_back(RocmInstallation->getOpenCLPath().str()); + llvm::SmallVector BCLibs; + BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); // Add the generic set of libraries. BCLibs.append(RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, - FastRelaxedMath, CorrectSqrt, ABIVer, false)); + FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false)); - if (getSanitizerArgs(DriverArgs).needsAsanRt()) { -CC1Args.push_back("-mlink-bitcode-file"); -CC1Args.push_back( -DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath())); - } - for (StringRef BCFile : BCLibs) { -CC1Args.push_back("-mlink-builtin-bitcode"); + for (auto [BCFile, Internalize] : BCLibs) { +if (Internalize) + CC1Args.push_back("-mlink-builtin-bitcode"); +else + CC1Args.push_back("-mlink-bitcode-file"); CC1Args.push_back(DriverArgs.MakeArgString(BCFile)); } } @@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs( return true; } -llvm::SmallVector +llvm::SmallVector RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, -bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const { - llvm::SmallVector BCLibs; - - auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); }; +bool CorrectSqrt, DeviceLibABIVersion ABIVer, +const std::tuple &GPUSan, +bool isOpenMP = false) const { + llvm::SmallVector BCLibs; + + auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, + bool Internalize = true) { +BCLib.ShouldInternalize = Internalize; +BCLibs.emplace_back(BCLib); + }; + auto AddSanBCLibs = [&]() { +if (GPUSanEnabled()) { + auto SanArgs = std::get(GPUSan); + if (SanArgs.needsAsanRt()) +AddBCLib(getAsanRTLPath(), false); +} + }; + AddSanBCLibs(); AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); + else if (GPUSanEnabled() && isOpenMP) +AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath)); @@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } -llvm::SmallVector +llvm::SmallVector ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, const std::string &GPUArch, bool isOpenMP) const { @@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // If --hip-device-lib is not set, add the default bitcode libraries. // TODO: There are way too many flags that change this. Do we need to check // them all? + std::tuple GPUSan( + DriverArgs.hasFlag(options::OPT_fgpu_sa
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/124754 >From 913db08256a8ee3077067d55667e37628d9ebd7c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 28 Jan 2025 15:15:01 +0530 Subject: [PATCH 1/2] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. Enable device code ASan instrumentation for openmp offload applications using option '-fsanitize=address'. --- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 16 - .../Driver/amdgpu-openmp-sanitize-options.c | 58 +++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 3f0b3f2d86b3ede..9e9ee7ed26f5018 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } } void AMDGPUOpenMPToolChain::addClangTargetOptions( @@ -72,9 +82,11 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( const OptTable &Opts = getDriver().getOpts(); if (DeviceOffloadKind == Action::OFK_OpenMP) { -for (Arg *A : Args) - if (!llvm::is_contained(*DAL, A)) +for (Arg *A : Args) { + if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && + !llvm::is_contained(*DAL, A)) DAL->append(A); +} if (!DAL->hasArg(options::OPT_march_EQ)) { StringRef Arch = BoundArch; diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c new file mode 100644 index 000..03adeb8e6a7833c --- /dev/null +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -0,0 +1,58 @@ +// REQUIRES: x86-registered-target, amdgpu-registered-target + +// Fail on invalid ROCm Path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: | FileCheck --check-prefix=FAIL %s + +// Enable multiple sanitizer's apart from ASan with invalid rocm-path. +// RUN: not %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s + +// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported. +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc %s 2>&1 \ +// RUN: | FileCheck --check-prefix=UNSUPPORTED %s + + +// ASan Enabled Test Cases +// ASan enabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOXNACK,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s + +// ASan enabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=GPUSAN %s + +// ASan Disabled Test Cases +// ASan disabled for amdgpu-arch [gfx908] +// RUN: %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack-] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// ASan disabled for amdgpu-arch [gfx908:xnack+] +// RUN: %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ +// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path
[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D, // Lookup binaries into the driver directory, this is used to // discover the 'amdgpu-arch' executable. getProgramPaths().push_back(getDriver().Dir); + // Diagnose unsupported sanitizer options only once. + if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize, +true)) +return; + for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) { +SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false); +if (K != SanitizerKind::Address) + D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target) + << A->getAsString(Args) << getTriple().str(); + } ampandey-1995 wrote: Yes Thanks for reviewing. https://github.com/llvm/llvm-project/pull/124754 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/123922 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/126671 >From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Tue, 11 Feb 2025 08:06:21 +0530 Subject: [PATCH 1/4] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP." (#126628) - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf. - Add '-mcode-object-version=5' as to explicitly use code object version 5 to match with 'FAIL' diagnostic. - Add Requires directive to support lit test run on platforms registered with x86_64 and amdgpu. --- clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 2 +- .../Driver/amdgpu-openmp-sanitize-options.c | 57 +-- clang/test/Driver/hip-sanitize-options.hip| 2 +- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index e66e5a32e58ac..202198e96c012 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 BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { +return std::get(GPUSan) && + std::get(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(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 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/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 00bf9c7338edd..aba79f5fa6fa7 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,7 +68,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL) + if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c b/clang/test/Driver/amdgpu-openmp-sanitize-options.c index c28a758bfc0c5..f6a8a7dc57ccc 100644 --- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c +++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c @@ -1,11 +1,11 @@ // REQUIRES: x86-registered-target, amdgpu-registered-target // Fail on invalid ROCm Path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid %s 2>&1 \ // RUN: | FileCheck --check-prefix=FAIL %s // Enable multiple sanitizer's apart from ASan with invalid rocm-path. -// RUN: not %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ +// RUN: not %clang -no-canonical-prefixes -### -mcode-object-version=5 --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm-invalid -nogpuinc %s 2>&1 \ // RUN: | File
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
ampandey-1995 wrote: Hi @arsenm & @jhuber6 , I removed the usage of ```std::tuple``` in the last commit f738420 so as to simplify it much further. https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)
https://github.com/ampandey-1995 closed https://github.com/llvm/llvm-project/pull/126671 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/137759 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; font-size: 14px; line-height: 1.5; margin: 0; } .container { margin: 50px auto; max-width: 600px; text-align: center; padding: 0 24px; } a { color: #0366d6; text-decoration: none; } a:hover { text-decoration: underline; } h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; text-shadow: 0 1px 0 #fff; } p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; } ul { list-style: none; margin: 25px 0; padding: 0; } li { display: table-cell; font-weight: bold; width: 1%; } .logo { display: inline-block; margin-top: 35px; } .logo-img-2x { display: none; } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { .logo-img-1x { display: none; } .logo-img-2x { display: inline-block; } } #suggestions { margin-top: 35px; color: #ccc; } #suggestions a { color: #66; font-weight: 200; font-size: 14px; margin: 0 10px; } Whoa there! You have exceeded a secondary rate limit. Please wait a few minutes before you try again; in some cases this may take up to an hour. https://support.github.com/contact";>Contact Support — https://githubstatus.com";>GitHub Status — https://twitter.com/githubstatus";>@githubstatus ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [HIP][Clang][Driver] Move BC preference logic into ROCm detection (PR #149294)
https://github.com/ampandey-1995 approved this pull request. https://github.com/llvm/llvm-project/pull/149294 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/137759 Rate limit · GitHub body { background-color: #f6f8fa; color: #24292e; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; font-size: 14px; line-height: 1.5; margin: 0; } .container { margin: 50px auto; max-width: 600px; text-align: center; padding: 0 24px; } a { color: #0366d6; text-decoration: none; } a:hover { text-decoration: underline; } h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; text-shadow: 0 1px 0 #fff; } p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; } ul { list-style: none; margin: 25px 0; padding: 0; } li { display: table-cell; font-weight: bold; width: 1%; } .logo { display: inline-block; margin-top: 35px; } .logo-img-2x { display: none; } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { .logo-img-1x { display: none; } .logo-img-2x { display: inline-block; } } #suggestions { margin-top: 35px; color: #ccc; } #suggestions a { color: #66; font-weight: 200; font-size: 14px; margin: 0 10px; } Whoa there! You have exceeded a secondary rate limit. Please wait a few minutes before you try again; in some cases this may take up to an hour. https://support.github.com/contact";>Contact Support — https://githubstatus.com";>GitHub Status — https://twitter.com/githubstatus";>@githubstatus ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [flang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)
https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/137759 >From aa3caaeaa72ab2f0de8beac416875dc466ac1051 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Thu, 1 May 2025 13:51:12 +0530 Subject: [PATCH 1/2] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. Flang Driver currently dosen't support option sanitizer flags such as '-fsanitize='. This patch currently supports enabling sanitizer flags for the flang driver apart from clang independently. --- clang/include/clang/Driver/Options.td | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index e69cd6b833c3a..32cd93f9a5e36 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1555,11 +1555,15 @@ defm xl_pragma_pack : BoolFOption<"xl-pragma-pack", "Enable IBM XL #pragma pack handling">, NegFlag>; def shared_libsan : Flag<["-"], "shared-libsan">, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Dynamically link the sanitizer runtime">; def static_libsan : Flag<["-"], "static-libsan">, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>, HelpText<"Statically link the sanitizer runtime (Not supported for ASan, TSan or UBSan on darwin)">; -def : Flag<["-"], "shared-libasan">, Alias; -def : Flag<["-"], "static-libasan">, Alias; +def : Flag<["-"], "shared-libasan">, Alias, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; +def : Flag<["-"], "static-libasan">, Alias, + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; def fasm : Flag<["-"], "fasm">, Group; defm assume_unique_vtables : BoolFOption<"assume-unique-vtables", @@ -2309,7 +2313,7 @@ def fmemory_profile_use_EQ : Joined<["-"], "fmemory-profile-use=">, // Begin sanitizer flags. These should all be core options exposed in all driver // modes. -let Visibility = [ClangOption, CC1Option, CLOption] in { +let Visibility = [ClangOption, CC1Option, CLOption, FlangOption, FC1Option] in { def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group, MetaVarName<"">, >From f938acc7557bd37edac3b7a38ecb32e069a13a97 Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Wed, 14 May 2025 21:44:15 +0530 Subject: [PATCH 2/2] Support ASan in LLVM Flang. --- clang/include/clang/Driver/Options.td | 92 +-- clang/lib/Driver/ToolChains/Flang.cpp | 13 +++ clang/lib/Driver/ToolChains/Flang.h | 9 ++ .../include/flang/Frontend/CodeGenOptions.def | 67 ++ flang/include/flang/Frontend/CodeGenOptions.h | 47 ++ flang/include/flang/Support/LangOptions.def | 1 + flang/include/flang/Support/LangOptions.h | 11 ++- flang/lib/Frontend/CodeGenOptions.cpp | 29 ++ flang/lib/Frontend/CompilerInvocation.cpp | 82 + flang/lib/Frontend/FrontendActions.cpp| 37 10 files changed, 341 insertions(+), 47 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index f4307f02d9175..3e89a1f7b28aa 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2339,7 +2339,7 @@ def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group, HelpText<"Turn on runtime checks for various forms of undefined " "or suspicious behavior. See user manual for available checks">; def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, Group, - Visibility<[ClangOption, CLOption]>; + Visibility<[ClangOption, CLOption, FlangOption]>; def fsanitize_ignorelist_EQ : Joined<["-"], "fsanitize-ignorelist=">, Group, HelpText<"Path to ignorelist file for sanitizers">; @@ -2349,7 +2349,7 @@ def : Joined<["-"], "fsanitize-blacklist=">, def fsanitize_system_ignorelist_EQ : Joined<["-"], "fsanitize-system-ignorelist=">, HelpText<"Path to system ignorelist file for sanitizers">, - Visibility<[ClangOption, CC1Option]>; + Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>; def fno_sanitize_ignorelist : Flag<["-"], "fno-sanitize-ignorelist">, Group, HelpText<"Don't use ignorelist file for sanitizers">; @@ -2360,17 +2360,17 @@ def fsanitize_coverage : CommaJoined<["-"], "fsanitize-coverage=">, Group, HelpText<"Specify the type of coverage instrumentation for Sanitizers">; def fno_sanitize_coverage : CommaJoined<["-"], "fno-sanitize-coverage=">, - Group, Visibility<[ClangOption, CLOption]>, + Group, Visibility<[ClangOption, CLOption, FlangOption]>, HelpText<"Disable features of coverage instrumentation for Sanitizers">, Values<"func,bb,edge,indirect-calls,trace-bb,trace-cmp,trace-div,trace-gep," "8bit-counters,trace-pc,trace-pc-guard,no-prune,inline-8bit-counters," "inline-bool-flag">; def fsanitize_coverage_allo