Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion clang/docs/OpenMPSupport.rst
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,8 @@ implementation.
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
| Changes to omp_target_is_accessible | :part:`In Progress` | :part:`In Progress` | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+

| defaultmap implicit-behavior 'storage' | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/158336 |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+

.. _OpenMP 6.1 implementation details:

Expand Down
1 change: 1 addition & 0 deletions clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,7 @@ OpenMP Support
- Fixed non-contiguous strided update in the ``omp target update`` directive with the ``from`` clause.
- Properly handle array section/assumed-size array privatization in C/C++.
- Added support for ``variable-category`` modifier in ``default clause``.
- Added support for ``defaultmap`` directive implicit-behavior ``storage``.

Improvements
^^^^^^^^^^^^
Expand Down
1 change: 1 addition & 0 deletions clang/include/clang/Basic/OpenMPKinds.def
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ OPENMP_DEFAULTMAP_MODIFIER(firstprivate)
OPENMP_DEFAULTMAP_MODIFIER(none)
OPENMP_DEFAULTMAP_MODIFIER(default)
OPENMP_DEFAULTMAP_MODIFIER(present)
OPENMP_DEFAULTMAP_MODIFIER(storage)

// Static attributes for 'depend' clause.
OPENMP_DEPEND_KIND(in)
Expand Down
10 changes: 7 additions & 3 deletions clang/lib/Basic/OpenMPKinds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,18 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, StringRef Str,
#define OPENMP_DIST_SCHEDULE_KIND(Name) .Case(#Name, OMPC_DIST_SCHEDULE_##Name)
#include "clang/Basic/OpenMPKinds.def"
.Default(OMPC_DIST_SCHEDULE_unknown);
case OMPC_defaultmap:
return llvm::StringSwitch<unsigned>(Str)
case OMPC_defaultmap: {
unsigned Type = llvm::StringSwitch<unsigned>(Str)
#define OPENMP_DEFAULTMAP_KIND(Name) \
.Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
#define OPENMP_DEFAULTMAP_MODIFIER(Name) \
.Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name))
#include "clang/Basic/OpenMPKinds.def"
.Default(OMPC_DEFAULTMAP_unknown);
.Default(OMPC_DEFAULTMAP_unknown);
if (LangOpts.OpenMP < 60 && Type == OMPC_DEFAULTMAP_MODIFIER_storage)
return OMPC_DEFAULTMAP_MODIFIER_unknown;
return Type;
}
case OMPC_atomic_default_mem_order:
return llvm::StringSwitch<OpenMPAtomicDefaultMemOrderClauseKind>(Str)
#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
Expand Down
11 changes: 8 additions & 3 deletions clang/lib/Sema/SemaOpenMP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -843,7 +843,8 @@ class DSAStackTy {
(M == OMPC_DEFAULTMAP_MODIFIER_to) ||
(M == OMPC_DEFAULTMAP_MODIFIER_from) ||
(M == OMPC_DEFAULTMAP_MODIFIER_tofrom) ||
(M == OMPC_DEFAULTMAP_MODIFIER_present);
(M == OMPC_DEFAULTMAP_MODIFIER_present) ||
(M == OMPC_DEFAULTMAP_MODIFIER_storage);
}
return true;
}
Expand Down Expand Up @@ -3748,6 +3749,7 @@ getMapClauseKindFromModifier(OpenMPDefaultmapClauseModifier M,
OpenMPMapClauseKind Kind = OMPC_MAP_unknown;
switch (M) {
case OMPC_DEFAULTMAP_MODIFIER_alloc:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be alloc disabled for 6.0 and above?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It wasn't officially deprecated in 6.0 and is considered an alias for the 6.0 modifier, 'storage'. Perhaps it will be deprecated in the next version?

case OMPC_DEFAULTMAP_MODIFIER_storage:
Kind = OMPC_MAP_alloc;
break;
case OMPC_DEFAULTMAP_MODIFIER_to:
Expand Down Expand Up @@ -23112,8 +23114,11 @@ OMPClause *SemaOpenMP::ActOnOpenMPDefaultmapClause(
}
} else {
StringRef ModifierValue =
"'alloc', 'from', 'to', 'tofrom', "
"'firstprivate', 'none', 'default', 'present'";
getLangOpts().OpenMP < 60
? "'alloc', 'from', 'to', 'tofrom', "
"'firstprivate', 'none', 'default', 'present'"
: "'storage', 'from', 'to', 'tofrom', "
"'firstprivate', 'none', 'default', 'present'";
if (!isDefaultmapKind && isDefaultmapModifier) {
Diag(KindLoc, diag::err_omp_unexpected_clause_value)
<< KindValue << getOpenMPClauseNameForDiag(OMPC_defaultmap);
Expand Down
12 changes: 10 additions & 2 deletions clang/test/OpenMP/target_defaultmap_codegen_01.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

///==========================================================================///
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -verify -Wno-vla -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1
// Verify implicit-behavior 'storage' as alias for 'alloc' in OpenMP 6.0
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -DOMP6 -verify -Wno-vla -fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
// RUN: %clang_cc1 -no-enable-noundef-analysis -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK1 -verify -Wno-vla -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1
Expand Down Expand Up @@ -43,8 +45,12 @@ void implicit_maps_double_complex (int a){
// CK1-DAG: store ptr [[PTR]], ptr [[P1]]

// CK1: call void [[KERNEL:@.+]](ptr [[PTR]])
#pragma omp target defaultmap(alloc \
: scalar)
#ifdef OMP6
// 'storage' is an alias for 'alloc' in OpenMP 6.0
#pragma omp target defaultmap(storage : scalar)
#else
#pragma omp target defaultmap(alloc : scalar)
#endif // OMP6
{
dc *= dc;
}
Expand Down Expand Up @@ -235,6 +241,8 @@ void implicit_maps_double (int a){
#endif
///==========================================================================///
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK5
// Verify implicit-behavior 'alloc' still accepted in OpenMP 6.0
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla -fopenmp -fopenmp-version=60 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK5
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
// RUN: %clang_cc1 -no-enable-noundef-analysis -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify -Wno-vla %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK5
// RUN: %clang_cc1 -no-enable-noundef-analysis -DCK5 -verify -Wno-vla -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK5
Expand Down
Loading