[Openmp-commits] [PATCH] D85369: [OpenMP] Fix ref count dec for implicit map of partial data
Joel E. Denny via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Wed Aug 5 15:44:03 PDT 2020
jdenny created this revision.
jdenny added reviewers: grokos, RaviNarayanaswamy, jdoerfert, ABataev.
Herald added subscribers: openmp-commits, guansong, yaxunl.
Herald added a project: OpenMP.
jdenny requested review of this revision.
Herald added a subscriber: sstefan1.
D85342 <https://reviews.llvm.org/D85342> broke this case. The new test case presents an example.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D85369
Files:
openmp/libomptarget/src/omptarget.cpp
openmp/libomptarget/test/mapping/target_implicit_partial_map.c
Index: openmp/libomptarget/test/mapping/target_implicit_partial_map.c
===================================================================
--- /dev/null
+++ openmp/libomptarget/test/mapping/target_implicit_partial_map.c
@@ -0,0 +1,43 @@
+// RUN: %libomptarget-compile-aarch64-unknown-linux-gnu
+// RUN: env LIBOMPTARGET_DEBUG=1 \
+// RUN: %libomptarget-run-aarch64-unknown-linux-gnu 2>&1 \
+// RUN: | %fcheck-aarch64-unknown-linux-gnu
+
+// RUN: %libomptarget-compile-powerpc64-ibm-linux-gnu
+// RUN: env LIBOMPTARGET_DEBUG=1 \
+// RUN: %libomptarget-run-powerpc64-ibm-linux-gnu 2>&1 \
+// RUN: | %fcheck-powerpc64-ibm-linux-gnu
+
+// RUN: %libomptarget-compile-powerpc64le-ibm-linux-gnu
+// RUN: env LIBOMPTARGET_DEBUG=1 \
+// RUN: %libomptarget-run-powerpc64le-ibm-linux-gnu 2>&1 \
+// RUN: | %fcheck-powerpc64le-ibm-linux-gnu
+
+// RUN: %libomptarget-compile-x86_64-pc-linux-gnu
+// RUN: env LIBOMPTARGET_DEBUG=1 \
+// RUN: %libomptarget-run-x86_64-pc-linux-gnu 2>&1 \
+// RUN: | %fcheck-x86_64-pc-linux-gnu
+//
+// END.
+
+#include <stdio.h>
+
+int main() {
+ int arr[100];
+
+ // CHECK: size=[[#%u,SIZE:]]
+ fprintf(stderr, "size=%ld\n", 2 * sizeof arr[0]);
+
+#pragma omp target data map(alloc: arr[50:2]) // partially mapped
+ {
+#pragma omp target // would implicitly map with full size but already present
+ {
+ arr[50] = 5;
+ arr[51] = 6;
+ } // must treat as present (dec ref count) even though full size not present
+ } // wouldn't delete if previous ref count dec didn't happen
+
+ // CHECK: Deleting tgt data 0x[[#%x,]] of size [[#SIZE]]
+
+ return 0;
+}
Index: openmp/libomptarget/src/omptarget.cpp
===================================================================
--- openmp/libomptarget/src/omptarget.cpp
+++ openmp/libomptarget/src/omptarget.cpp
@@ -497,6 +497,7 @@
}
bool IsLast, IsHostPtr;
+ bool IsImplicit = ArgTypes[I] & OMP_TGT_MAPTYPE_IMPLICIT;
bool UpdateRef = !(ArgTypes[I] & OMP_TGT_MAPTYPE_MEMBER_OF) ||
(ArgTypes[I] & OMP_TGT_MAPTYPE_PTR_AND_OBJ);
bool ForceDelete = ArgTypes[I] & OMP_TGT_MAPTYPE_DELETE;
@@ -504,9 +505,8 @@
bool HasPresentModifier = ArgTypes[I] & OMP_TGT_MAPTYPE_PRESENT;
// If PTR_AND_OBJ, HstPtrBegin is address of pointee
- void *TgtPtrBegin = Device.getTgtPtrBegin(HstPtrBegin, DataSize, IsLast,
- UpdateRef, IsHostPtr,
- /*MustContain=*/true);
+ void *TgtPtrBegin = Device.getTgtPtrBegin(
+ HstPtrBegin, DataSize, IsLast, UpdateRef, IsHostPtr, !IsImplicit);
if (!TgtPtrBegin && (DataSize || HasPresentModifier)) {
DP("Mapping does not exist (%s)\n",
(HasPresentModifier ? "'present' map type modifier" : "ignored"));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85369.283423.patch
Type: text/x-patch
Size: 2778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20200805/64ffc2db/attachment.bin>
More information about the Openmp-commits
mailing list