[OpenMP] Avoid checking parent reference count in targetDataEnd

The patch has the following benefits:

* Eliminates a lock/unlock of the data mapping table.
* Clarifies the logic that determines whether a struct member's
  device-to-host transfer occurs.  The old logic, which checks the
  parent struct's reference count, is a leftover from back when we had
  a different map interface (as pointed out at
  <https://reviews.llvm.org/D104924#2846972>).

Reviewed By: grokos

Differential Revision: https://reviews.llvm.org/D104924
This commit is contained in:
Joel E. Denny 2021-07-10 12:01:34 -04:00
parent 8f4e5474de
commit 1d0456361a
1 changed files with 2 additions and 8 deletions

View File

@ -731,14 +731,8 @@ int targetDataEnd(ident_t *loc, DeviceTy &Device, int32_t ArgNum,
if (!(PM->RTLs.RequiresFlags & OMP_REQ_UNIFIED_SHARED_MEMORY) ||
HasCloseModifier) {
if ((ArgTypes[I] & OMP_TGT_MAPTYPE_MEMBER_OF) &&
!(ArgTypes[I] & OMP_TGT_MAPTYPE_PTR_AND_OBJ)) {
// Copy data only if the "parent" struct has RefCount==1.
int32_t ParentIdx = getParentIndex(ArgTypes[I]);
uint64_t ParentRC = Device.getMapEntryRefCnt(Args[ParentIdx]);
assert(ParentRC > 0 && "parent struct not found");
if (ParentRC == 1)
CopyMember = true;
}
!(ArgTypes[I] & OMP_TGT_MAPTYPE_PTR_AND_OBJ))
CopyMember = IsLast;
}
if ((DelEntry || Always || CopyMember) &&