[PATCH] D84422: [OpenMP] Fix `present` for exit from `omp target data`
Joel E. Denny via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 23 09:06:22 PDT 2020
jdenny created this revision.
jdenny added reviewers: grokos, ABataev, jdoerfert.
Herald added subscribers: llvm-commits, openmp-commits, cfe-commits, sstefan1, guansong, yaxunl.
Herald added projects: clang, OpenMP, LLVM.
Without this patch, the following example fails but shouldn't
according to my read of OpenMP TR8:
#pragma omp target enter data map(alloc:i)
#pragma omp target data map(present, alloc: i)
{
#pragma omp target exit data map(delete:i)
} // fails presence check here
OpenMP TR8 sec. 2.22.7.1 "map Clause", p. 321, L23-26 states:
> If the map clause appears on a target, target data, target enter
> data or target exit data construct with a present map-type-modifier
> then on entry to the region if the corresponding list item does not
> appear in the device data environment an error occurs and the
> program terminates.
I see no corresponding statement about the exit from a region. Thus,
the `present` modifier should:
1. Check for presence upon entry into a `target exit data` construct.
2. Should not check for presence upon exit from a `target data` region, as in the above example.
The problem is that Clang calls the same set of
`__tgt_target_data_end_*` functions for these two cases, making them
indistinguishable in the runtime where the presence check is
implemented. To fix that, this patch changes Clang to generate calls
to a new set of runtime functions, `__tgt_target_exit_data_*`, for the
case of `target exit data`.
For symmetry, this patch makes a similar change for `target enter
data`, but that change isn't required for the above fix.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D84422
Files:
clang/lib/CodeGen/CGOpenMPRuntime.cpp
clang/test/OpenMP/declare_mapper_codegen.cpp
clang/test/OpenMP/target_enter_data_codegen.cpp
clang/test/OpenMP/target_enter_data_depend_codegen.cpp
clang/test/OpenMP/target_exit_data_codegen.cpp
clang/test/OpenMP/target_exit_data_depend_codegen.cpp
clang/test/OpenMP/target_map_member_expr_array_section_codegen.cpp
llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
openmp/libomptarget/include/omptarget.h
openmp/libomptarget/src/exports
openmp/libomptarget/src/interface.cpp
openmp/libomptarget/src/omptarget.cpp
openmp/libomptarget/src/private.h
openmp/libomptarget/test/mapping/present/target_data_at_exit.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84422.280155.patch
Type: text/x-patch
Size: 47700 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200723/8fcf1a55/attachment-0001.bin>
More information about the llvm-commits
mailing list