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 <pandey.kumaramit2...@gmail.com> 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<ToolChain::BitCodeLibraryInfo, 12> BCLibs; - auto GPUSanEnabled = [GPUSan]() { return std::get<bool>(GPUSan); }; + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + auto GPUSanEnabled = [GPUSan]() { + return std::get<bool>(GPUSan) && + std::get<const SanitizerArgs>(GPUSan).needsAsanRt(); + }; auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; @@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( }; auto AddSanBCLibs = [&]() { if (GPUSanEnabled()) { - auto SanArgs = std::get<const SanitizerArgs>(GPUSan); - if (SanArgs.needsAsanRt()) - AddBCLib(getAsanRTLPath(), false); + AddBCLib(getAsanRTLPath(), false); } }; @@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, // them all? std::tuple<bool, const SanitizerArgs> GPUSan( DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize, false), + options::OPT_fno_gpu_sanitize, true), getSanitizerArgs(DriverArgs)); bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero, options::OPT_fno_gpu_flush_denormals_to_zero, @@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( return false; if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - options::OPT_fno_gpu_sanitize, false)) + options::OPT_fno_gpu_sanitize, true)) return true; auto &Diags = TC.getDriver().getDiags(); diff --git a/clang/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: | FileCheck --check-prefixes=NOTSUPPORTED,FAIL %s // Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported on AMDGPU. @@ -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 \ -// 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 -check-prefixes=GPUSAN %s +// RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s + +// GPU ASan enabled through '-fsanitize=address' flag without '-fgpu-sanitize' for amdgpu-arch [gfx908:xnack+] +// 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+] // 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=GPUSAN %s +// RUN: | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s // GPU ASan Disabled Test Cases -// ASan disabled for amdgpu-arch [gfx908] -// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -check-prefixes=NOGPUSAN %s + +// 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 + +// GPU ASan disabled 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,HOSTSAN,NOGPUSAN,SAN %s // GPU ASan disabled for amdgpu-arch [gfx908:xnack-] -// RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack- -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -check-prefixes=NOGPUSAN %s +// 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,HOSTSAN,NOGPUSAN,SAN %s -// GPU ASan disabled for amdgpu-arch [gfx908:xnack+] +// GPU ASan disabled using '-fno-gpu-sanitize' for amdgpu-arch [gfx908:xnack+] // RUN: %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -check-prefixes=NOGPUSAN %s +// RUN: | FileCheck -check-prefixes=HOSTSAN,NOGPUSAN,SAN %s -// ASan disabled for amdgpu-arch [gfx908:xnack+,gfx900:xnack+] +// GPU ASan disabled 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 -fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \ -// RUN: | FileCheck -check-prefixes=NOGPUSAN %s +// RUN: | FileCheck -check-prefixes=HOSTSAN,NOGPUSAN,SAN %s // FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide its path via '--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build without ROCm device library // NOTSUPPORTED-DAG: warning: ignoring '-fsanitize=leak' option as it is not currently supported for target 'amdgcn-amd-amdhsa' @@ -52,14 +54,11 @@ // NOXNACK: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead // XNACKNEG: warning: ignoring '-fsanitize=address' option for offload arch 'gfx908:xnack-' as it is not currently supported there. Use it with an offload arch containing 'xnack+' instead -// GPUSAN: {{"[^"]*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".* "-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|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}} +// HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "c".*}} -// NOGPUSAN: {{"[^"]*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".*}} // 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|libclang_rt.asan_static-x86_64.a)".* "--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}} + +// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* "--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}} +// SAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* "-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" "ir".*}} +// SAN: {{"[^"]*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)".*}} diff --git a/clang/test/Driver/hip-sanitize-options.hip b/clang/test/Driver/hip-sanitize-options.hip index 8a852867f5b3b..8de0ee9e18426 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 >From d0b644e19f34a0e14003083efd89700920661773 Mon Sep 17 00:00:00 2001 From: Amit Pandey <pandey.kumaramit2...@gmail.com> Date: Tue, 11 Feb 2025 19:14:45 +0530 Subject: [PATCH 2/4] Address Comments of @arsenm. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 202198e96c012..39a837b56271b 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1016,17 +1016,16 @@ RocmInstallationDetector::getCommonBitcodeLibs( // GPU Sanitizer currently only supports ASan and is enabled through host // ASan. - auto GPUSanEnabled = [GPUSan]() { - return std::get<bool>(GPUSan) && - std::get<const SanitizerArgs>(GPUSan).needsAsanRt(); - }; + bool GPUSanEnabled = std::get<bool>(GPUSan) && + std::get<const SanitizerArgs>(GPUSan).needsAsanRt(); + auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; BCLibs.emplace_back(BCLib); }; auto AddSanBCLibs = [&]() { - if (GPUSanEnabled()) { + if (GPUSanEnabled) { AddBCLib(getAsanRTLPath(), false); } }; @@ -1035,7 +1034,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); - else if (GPUSanEnabled() && isOpenMP) + else if (GPUSanEnabled && isOpenMP) AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); >From da6fbed132be1e84c2c3e9b41941654b88532d7b Mon Sep 17 00:00:00 2001 From: Amit Pandey <pandey.kumaramit2...@gmail.com> Date: Tue, 11 Feb 2025 21:13:43 +0530 Subject: [PATCH 3/4] Address @jhuber6 comments. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 4 ++-- clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 39a837b56271b..05366fdd1e579 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -1025,9 +1025,8 @@ RocmInstallationDetector::getCommonBitcodeLibs( BCLibs.emplace_back(BCLib); }; auto AddSanBCLibs = [&]() { - if (GPUSanEnabled) { + if (GPUSanEnabled) AddBCLib(getAsanRTLPath(), false); - } }; AddSanBCLibs(); @@ -1097,6 +1096,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption( if (TargetID.empty()) return false; Option O = A->getOption(); + if (!O.matches(options::OPT_fsanitize_EQ)) return false; diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index aba79f5fa6fa7..85247f7bd5a9e 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -68,11 +68,18 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( Action::OffloadKind DeviceOffloadKind) const { DerivedArgList *DAL = HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind); - if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ)) + + if (!DAL) DAL = new DerivedArgList(Args.getBaseArgs()); const OptTable &Opts = getDriver().getOpts(); + // Skip sanitize options passed from the HostTC. Claim them early. + // The decision to sanitize device code is computed only by + // 'shouldSkipSanitizeOption'. + if (DAL->hasArg(options::OPT_fsanitize_EQ)) + DAL->claimAllArgs(options::OPT_fsanitize_EQ); + for (Arg *A : Args) if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) && !llvm::is_contained(*DAL, A)) >From f73842033f4b4cd57e46424fddbb6600798f9cd4 Mon Sep 17 00:00:00 2001 From: Amit Pandey <pandey.kumaramit2...@gmail.com> Date: Wed, 12 Feb 2025 11:35:50 +0530 Subject: [PATCH 4/4] [NFC] Remove std::tuple for GPUSan. Don't require std::tuple<bool,const SanitizerArgs> parameter. Simplify it to single boolean 'GPUSan'. --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 ++++++++++++-------------- clang/lib/Driver/ToolChains/ROCm.h | 2 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 05366fdd1e579..8d5cb91ebad9a 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -950,13 +950,7 @@ void ROCMToolChain::addClangTargetOptions( ABIVer)) return; - std::tuple<bool, const SanitizerArgs> 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 // them all? bool DAZ = DriverArgs.hasArg(options::OPT_cl_denorms_are_zero) || @@ -969,6 +963,12 @@ void ROCMToolChain::addClangTargetOptions( bool CorrectSqrt = DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt); + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + bool GPUSan = DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true) && + getSanitizerArgs(DriverArgs).needsAsanRt(); + // Add the OpenCL specific bitcode library. llvm::SmallVector<BitCodeLibraryInfo, 12> BCLibs; BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str()); @@ -1009,23 +1009,17 @@ llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> RocmInstallationDetector::getCommonBitcodeLibs( const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, - bool CorrectSqrt, DeviceLibABIVersion ABIVer, - const std::tuple<bool, const SanitizerArgs> &GPUSan, - bool isOpenMP = false) const { + bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool GPUSan, + bool isOpenMP) const { llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> BCLibs; - // GPU Sanitizer currently only supports ASan and is enabled through host - // ASan. - bool GPUSanEnabled = std::get<bool>(GPUSan) && - std::get<const SanitizerArgs>(GPUSan).needsAsanRt(); - auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib, bool Internalize = true) { BCLib.ShouldInternalize = Internalize; BCLibs.emplace_back(BCLib); }; auto AddSanBCLibs = [&]() { - if (GPUSanEnabled) + if (GPUSan) AddBCLib(getAsanRTLPath(), false); }; @@ -1033,7 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs( AddBCLib(getOCMLPath()); if (!isOpenMP) AddBCLib(getOCKLPath()); - else if (GPUSanEnabled && isOpenMP) + else if (GPUSan && isOpenMP) AddBCLib(getOCKLPath(), false); AddBCLib(getDenormalsAreZeroPath(DAZ)); AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath)); @@ -1065,10 +1059,6 @@ 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<bool, const SanitizerArgs> GPUSan( - DriverArgs.hasFlag(options::OPT_fgpu_sanitize, - 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, getDefaultDenormsAreZeroForTarget(Kind)); @@ -1084,6 +1074,12 @@ ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs, options::OPT_fno_hip_fp32_correctly_rounded_divide_sqrt, true); bool Wave64 = isWave64(DriverArgs, Kind); + // GPU Sanitizer currently only supports ASan and is enabled through host + // ASan. + bool GPUSan = DriverArgs.hasFlag(options::OPT_fgpu_sanitize, + options::OPT_fno_gpu_sanitize, true) && + getSanitizerArgs(DriverArgs).needsAsanRt(); + return RocmInstallation->getCommonBitcodeLibs( DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt, FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, isOpenMP); diff --git a/clang/lib/Driver/ToolChains/ROCm.h b/clang/lib/Driver/ToolChains/ROCm.h index 681c242b0678e..a6cc41db383b6 100644 --- a/clang/lib/Driver/ToolChains/ROCm.h +++ b/clang/lib/Driver/ToolChains/ROCm.h @@ -178,7 +178,7 @@ class RocmInstallationDetector { const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64, bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath, bool CorrectSqrt, DeviceLibABIVersion ABIVer, - const std::tuple<bool, const SanitizerArgs> &GPUSan, bool isOpenMP) const; + bool GPUSan, bool isOpenMP) const; /// Check file paths of default bitcode libraries common to AMDGPU based /// toolchains. \returns false if there are invalid or missing files. bool checkCommonBitcodeLibs(StringRef GPUArch, StringRef LibDeviceFile, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits