[clang] cc21395 - [AMDPU][Sanitizer] Refactor sanitizer options handling for AMDGPU Toolchain
Author: Ron Lieberman Date: 2022-04-02T11:01:09Z New Revision: cc2139524f77248c7e147d4cc3befb31fe3e6daa URL: https://github.com/llvm/llvm-project/commit/cc2139524f77248c7e147d4cc3befb31fe3e6daa DIFF: https://github.com/llvm/llvm-project/commit/cc2139524f77248c7e147d4cc3befb31fe3e6daa.diff LOG: [AMDPU][Sanitizer] Refactor sanitizer options handling for AMDGPU Toolchain authored by amit.pan...@amd.com ampandey-AMD Differential Revision: https://reviews.llvm.org/D122781 Added: Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/AMDGPU.h clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp clang/lib/Driver/ToolChains/AMDGPUOpenMP.h clang/lib/Driver/ToolChains/HIPAMD.cpp clang/test/Driver/hip-sanitize-options.hip Removed: diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 63913b933c8fb..fa17af52d6278 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -68,6 +68,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 123d92664495e..56b3a2d33cdab 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -911,6 +911,42 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } +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; +} + bool AMDGPUToolChain::shouldSkipArgument(const llvm::opt::Arg *A) const { Option O = A->getOption(); if (O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index ddcc124b25bac..6d8bb82c6449d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -99,6 +99,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; + /// Should skip argument. bool shouldSkipArgument(const llvm::opt::Arg *Arg) const; diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 998bb0b9f7c94..2989aabae5516 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -16,6 +16,7 @@ #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" #include "clang/Driver/Tool.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/FileSystem.h" @@ -304,7 +305,8 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( if (DeviceOffloadKind == Action::OFK_OpenMP)
[clang] f1e7eca - Revert "[AMDPU][Sanitizer] Refactor sanitizer options handling for AMDGPU Toolchain"
Author: Ron Lieberman Date: 2022-04-02T13:25:50Z New Revision: f1e7ecaa18a7b1c77fc95e4b83d3db02c4e2d211 URL: https://github.com/llvm/llvm-project/commit/f1e7ecaa18a7b1c77fc95e4b83d3db02c4e2d211 DIFF: https://github.com/llvm/llvm-project/commit/f1e7ecaa18a7b1c77fc95e4b83d3db02c4e2d211.diff LOG: Revert "[AMDPU][Sanitizer] Refactor sanitizer options handling for AMDGPU Toolchain" This reverts commit cc2139524f77248c7e147d4cc3befb31fe3e6daa. failed a few buildbots Added: Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/AMDGPU.h clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp clang/lib/Driver/ToolChains/AMDGPUOpenMP.h clang/lib/Driver/ToolChains/HIPAMD.cpp clang/test/Driver/hip-sanitize-options.hip Removed: diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index fa17af52d6278..63913b933c8fb 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -68,9 +68,6 @@ 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 56b3a2d33cdab..123d92664495e 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -911,42 +911,6 @@ RocmInstallationDetector::getCommonBitcodeLibs( return BCLibs; } -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; -} - bool AMDGPUToolChain::shouldSkipArgument(const llvm::opt::Arg *A) const { Option O = A->getOption(); if (O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index 6d8bb82c6449d..ddcc124b25bac 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -99,12 +99,6 @@ 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; - /// Should skip argument. bool shouldSkipArgument(const llvm::opt::Arg *Arg) const; diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index 2989aabae5516..998bb0b9f7c94 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -16,7 +16,6 @@ #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/InputInfo.h" #include "clang/Driver/Options.h" -#include "clang/Driver/SanitizerArgs.h" #include "clang/Driver/Tool.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Support/FileSystem.h" @@ -305,8 +304,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( if (DeviceOffloadKind == Action::OFK_OpenMP) {
[clang] 8b646f2 - xfail: reduction_implicit_map.cpp after reapply of Start calling setTargetAttributes
Author: Ron Lieberman Date: 2021-12-02T20:22:11Z New Revision: 8b646f212e9ccc8e0fbf1a84603d0a40bfca1338 URL: https://github.com/llvm/llvm-project/commit/8b646f212e9ccc8e0fbf1a84603d0a40bfca1338 DIFF: https://github.com/llvm/llvm-project/commit/8b646f212e9ccc8e0fbf1a84603d0a40bfca1338.diff LOG: xfail: reduction_implicit_map.cpp after reapply of Start calling setTargetAttributes Added: Modified: clang/test/OpenMP/reduction_implicit_map.cpp Removed: diff --git a/clang/test/OpenMP/reduction_implicit_map.cpp b/clang/test/OpenMP/reduction_implicit_map.cpp index 2d924820fbf7..64a4f36def64 100644 --- a/clang/test/OpenMP/reduction_implicit_map.cpp +++ b/clang/test/OpenMP/reduction_implicit_map.cpp @@ -1,3 +1,6 @@ +// amdgpu failing this test after Reapply "OpenMP: Start calling setTargetAttributes for generated kernels" +// XFAIL: * + // RUN: %clang_cc1 -verify -fopenmp -fopenmp-cuda-mode -x c++ \ // RUN: -triple powerpc64le-unknown-unknown -DCUDA \ // RUN: -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o \ ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] ef8e9be - Revert "xfail: reduction_implicit_map.cpp after reapply of Start calling setTargetAttributes"
Author: Ron Lieberman Date: 2021-12-02T20:30:03Z New Revision: ef8e9bee1a9b87ee750b193ed4a1f9b5d310daef URL: https://github.com/llvm/llvm-project/commit/ef8e9bee1a9b87ee750b193ed4a1f9b5d310daef DIFF: https://github.com/llvm/llvm-project/commit/ef8e9bee1a9b87ee750b193ed4a1f9b5d310daef.diff LOG: Revert "xfail: reduction_implicit_map.cpp after reapply of Start calling setTargetAttributes" This reverts commit 8b646f212e9ccc8e0fbf1a84603d0a40bfca1338. Added: Modified: clang/test/OpenMP/reduction_implicit_map.cpp Removed: diff --git a/clang/test/OpenMP/reduction_implicit_map.cpp b/clang/test/OpenMP/reduction_implicit_map.cpp index 64a4f36def64..2d924820fbf7 100644 --- a/clang/test/OpenMP/reduction_implicit_map.cpp +++ b/clang/test/OpenMP/reduction_implicit_map.cpp @@ -1,6 +1,3 @@ -// amdgpu failing this test after Reapply "OpenMP: Start calling setTargetAttributes for generated kernels" -// XFAIL: * - // RUN: %clang_cc1 -verify -fopenmp -fopenmp-cuda-mode -x c++ \ // RUN: -triple powerpc64le-unknown-unknown -DCUDA \ // RUN: -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o \ ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 8cf85a0 - Revert "Add map info for dereference pointer."
Author: Ron Lieberman Date: 2023-03-08T22:05:31-06:00 New Revision: 8cf85a0cadb033fed3d96aa5283deb4bfbbaf2c8 URL: https://github.com/llvm/llvm-project/commit/8cf85a0cadb033fed3d96aa5283deb4bfbbaf2c8 DIFF: https://github.com/llvm/llvm-project/commit/8cf85a0cadb033fed3d96aa5283deb4bfbbaf2c8.diff LOG: Revert "Add map info for dereference pointer." breaks amdgpu buildbot This reverts commit 0f2f378425821de77e50a0dcb67c4504389a56e8. Added: Modified: clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/target_update_codegen.cpp Removed: clang/test/OpenMP/target_map_deref_array_codegen.cpp openmp/libomptarget/test/mapping/target_derefence_array_pointrs.cpp diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 60e03320a391c..ff2e9423b6b2e 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -7163,7 +7163,6 @@ class MappableExprsHandler { // double d; // int i[100]; // float *p; -// int **a = &i; // // struct S1 { // int i; @@ -7197,14 +7196,6 @@ class MappableExprsHandler { // in unified shared memory mode or for local pointers // p, &p[1], 24*sizeof(float), TARGET_PARAM | TO | FROM // -// map((*a)[0:3]) -// &(*a), &(*a), sizeof(pointer), TARGET_PARAM | TO | FROM -// &(*a), &(*a)[0], 3*sizeof(int), PTR_AND_OBJ | TO | FROM -// -// map(**a) -// &(*a), &(*a), sizeof(pointer), TARGET_PARAM | TO | FROM -// &(*a), &(**a), sizeof(int), PTR_AND_OBJ | TO | FROM -// // map(s) // &s, &s, sizeof(S2), TARGET_PARAM | TO | FROM // @@ -7497,9 +7488,7 @@ class MappableExprsHandler { bool IsMemberReference = isa(I->getAssociatedExpression()) && MapDecl && MapDecl->getType()->isLValueReferenceType(); - bool IsNonDerefPointer = IsPointer && - !(UO && UO->getOpcode() != UO_Deref) && !BO && - !IsNonContiguous; + bool IsNonDerefPointer = IsPointer && !UO && !BO && !IsNonContiguous; if (OASE) ++DimSize; diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index e193fa3d19d5c..b87732ac195a2 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -2203,14 +2203,11 @@ bool Sema::isOpenMPCapturedByRef(const ValueDecl *D, unsigned Level, ++EI; if (EI == EE) return false; - auto Last = std::prev(EE); - const auto *UO = - dyn_cast(Last->getAssociatedExpression()); - if ((UO && UO->getOpcode() == UO_Deref) || - isa(Last->getAssociatedExpression()) || - isa(Last->getAssociatedExpression()) || + + if (isa(EI->getAssociatedExpression()) || + isa(EI->getAssociatedExpression()) || isa(EI->getAssociatedExpression()) || - isa(Last->getAssociatedExpression())) { + isa(EI->getAssociatedExpression())) { IsVariableAssociatedWithSection = true; // There is nothing more we need to know about this variable. return true; diff --git a/clang/test/OpenMP/target_map_deref_array_codegen.cpp b/clang/test/OpenMP/target_map_deref_array_codegen.cpp deleted file mode 100644 index 40b3b5f1a6f2c..0 --- a/clang/test/OpenMP/target_map_deref_array_codegen.cpp +++ /dev/null @@ -1,315 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _ -// RUN: %clang_cc1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s -// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s -// RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s - -// expected-no-diagnostics -#ifndef HEADER -#define HEADER - -extern void *malloc (int __size) throw () __attribute__ ((__malloc__)); - -void foo(int **t1d) -{ - *t1d = (int *) malloc(3 * sizeof(int)); - for (int j=0; j < 3; j++) -(*t1d)[j] = 1; - #pragma omp target map(to: (*t1d)[0:3]) -(*t1d)[2] = 2; - #pragma omp target map(tofrom : (**t1d)) -(*t1d)[0] = 3; - int a = 0, b = 0; - #pragma omp target map(tofrom : (*(*(t1d+a)+b))) -*(*(t1d+a)+b) = 4; -} - -#endif - -// CHECK: @.offload_maptypes = private unnamed_addr constant [2 x i64] [i64 33, i64 17] -// CHE