[PATCH] D69204: [OpenMP 5.0] - Extend defaultmap
Alexey Bataev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 1 07:25:22 PDT 2019
ABataev added inline comments.
================
Comment at: clang/include/clang/Basic/OpenMPKinds.def:426-436
+OPENMP_DEFAULTMAP_KIND(aggregate)
+OPENMP_DEFAULTMAP_KIND(pointer)
// Modifiers for 'defaultmap' clause.
+OPENMP_DEFAULTMAP_MODIFIER(alloc)
+OPENMP_DEFAULTMAP_MODIFIER(to)
+OPENMP_DEFAULTMAP_MODIFIER(from)
----------------
Add some guards in the code, these values must be enabled only for OpenMP 5.0, for 4.5 only scalar:tofrom is allowed. Add a test that the error messages are emitted for new cases in OpenMP 4.5
================
Comment at: clang/lib/CodeGen/CGOpenMPRuntime.cpp:7274
+ case OMPC_DEFAULTMAP_MODIFIER_none:
+ Bits = OMP_MAP_NONE;
+ break;
----------------
I think you just need to keep the original value of the `Bits` variable set in line 7242
================
Comment at: clang/lib/CodeGen/CGOpenMPRuntime.cpp:7276
+ break;
+ default:
+ llvm_unreachable("Unexpected implicit behavior!");
----------------
It is not recommended to use `default:` case in switches over enumerics, just add a case for each enum value and remove `default:`
================
Comment at: clang/lib/CodeGen/CGOpenMPRuntime.cpp:7368-7370
+ bool IsImplicit, OpenMPDefaultmapClauseModifier ImplicitBehavior =
+ OMPC_DEFAULTMAP_MODIFIER_default,
+ OpenMPDefaultmapClauseKind VariableCategory = OMPC_DEFAULTMAP_unknown,
----------------
Do you really need the default params values here?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:134
+ DefaultMapVariableCategory VariableCategory = DMVC_unspecified;
+ SourceLocation SLoc = SourceLocation();
+ DefaultmapInfo() = default;
----------------
No need to call the constructor for classes as a default value, just `SourceLocation SLoc;` is enough
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:149
SourceLocation DefaultAttrLoc;
- DefaultMapAttributes DefaultMapAttr = DMA_unspecified;
- SourceLocation DefaultMapAttrLoc;
+ DefaultmapInfo DefaultmapMap[3];
+
----------------
Maybe, it would be better to make `DMVC_unspecified` the last one in the `DefaultMapVariableCategory` and use it as an array dimension here rather than rely on the magical number?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:623
+ auto &DefaultmapInfo = getTopOfStack().
+ DefaultmapMap[static_cast<int>(DMVC-1)];
+ DefaultmapInfo.ImplicitBehavior = DMIB;
----------------
Do you really need the static_cast here?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:625
+ DefaultmapInfo.ImplicitBehavior = DMIB;
+ DefaultmapInfo.VariableCategory = DMVC;
+ DefaultmapInfo.SLoc = Loc;
----------------
Do you really need this field if your DefaultmapMap already variable category based array?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:630
+ bool hasSetDefaultmapCategory(OpenMPDefaultmapClauseKind VariableCategory) {
+ int VC = static_cast<int>(VariableCategory);
+ return getTopOfStack().DefaultmapMap[VC].ImplicitBehavior != DMIB_unspecified &&
----------------
Do you really need a cast here?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:656
+ DefaultMapVariableCategory DMVC) const {
+ if (DMVC == DMVC_scalar) {
+ return (getDefaultDMIBAtLevel(Level, OMPC_DEFAULTMAP_scalar) ==
----------------
Better to use switch here.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:657-673
+ return (getDefaultDMIBAtLevel(Level, OMPC_DEFAULTMAP_scalar) ==
+ DMIB_alloc) ||
+ (getDefaultDMIBAtLevel(Level, OMPC_DEFAULTMAP_scalar) ==
+ DMIB_to) ||
+ (getDefaultDMIBAtLevel(Level, OMPC_DEFAULTMAP_scalar) ==
+ DMIB_from) ||
+ (getDefaultDMIBAtLevel(Level, OMPC_DEFAULTMAP_scalar) ==
----------------
Seems to me, these 2 checks are very similar, you cam merge them
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:2928
+ bool IsDMIBNone = false;
+ if (VD->getType()->isPointerType() || VD->getType()->isMemberPointerType()) {
+ IsDMIBNone =
----------------
Just `isAnyPointerType()`
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:2932-2933
+ } else if (VD->getType()->isScalarType() &&
+ !VD->getType()->isBlockPointerType() &&
+ !VD->getType()->isObjCObjectPointerType()) {
+ IsDMIBNone =
----------------
Just `!VD->getType()->isAnyPointerType()`. Plus, I think you won't need it here in case of fixed condition in the main `if`.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:2936
+ Stack->getDefaultDMIB(OMPC_DEFAULTMAP_scalar) == DMIB_none;
+ } else if (VD->getType()->isArrayType() || VD->getType()->isRecordType()) {
+ IsDMIBNone =
----------------
Just `isAggregateType()`?
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:2996-3003
+ DMIB_unspecified ||
+ Stack->getDefaultDMIB(OMPC_DEFAULTMAP_scalar) ==
+ DMIB_default)) ||
+ (VD->getType().getNonReferenceType()->isPointerType() &&
+ (Stack->getDefaultDMIB(OMPC_DEFAULTMAP_pointer) ==
+ DMIB_unspecified ||
+ Stack->getDefaultDMIB(OMPC_DEFAULTMAP_pointer) ==
----------------
Also must include DMIB_firstprivate.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:16365
+ if (M != OMPC_DEFAULTMAP_MODIFIER_to && M != OMPC_DEFAULTMAP_MODIFIER_from &&
+ M != OMPC_DEFAULTMAP_MODIFIER_tofrom && M != OMPC_DEFAULTMAP_MODIFIER_firstprivate &&
+ M != OMPC_DEFAULTMAP_MODIFIER_none && M != OMPC_DEFAULTMAP_MODIFIER_default) {
----------------
The code is not formatted.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:16386
+
+ if (Kind == OMPC_DEFAULTMAP_scalar) {
+ switch (M) {
----------------
Better to use switch here too
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:16409
+ break;
+ default:
+ llvm_unreachable("Unknown OMPC_DEFAULTMAP_MODIFIER");
----------------
No default
================
Comment at: clang/test/OpenMP/target_defaultmap_codegen.cpp:44
+ // CK1: call void [[KERNEL:@.+]]({ double, double }* [[PTR]])
+ #pragma omp target defaultmap(alloc:scalar)
+ {
----------------
Why it is allowed in OpenMP 4.5? I don't see an option in your tests for OpenMP 5.0. In 4.5 there must be an error.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69204/new/
https://reviews.llvm.org/D69204
More information about the cfe-commits
mailing list