llvm-project
1d1c83ad - Reland "[OpenMP][Offload] Handle `present/to/from` when a different entry did `alloc/delete`." (#184260)

Commit
90 days ago
Reland "[OpenMP][Offload] Handle `present/to/from` when a different entry did `alloc/delete`." (#184260) Some tests that were checking for prints inside/outside `target` regions needed to be updated to work on systems where the ordering wasn't deterministic. Reverts llvm/llvm-project#184240 Original description from #165494: ----- OpenMP allows cases like the following: ```c int *p1, *p2, x; p1 = p2 = &x; ... #pragma omp target_exit_data map(delete: p1[:]) from(p2[0]) ``` Which means, when the runtime encounters the `from` entry, the ref-count may not be zero, but it will go down to zero at the end of the current construct, which should cause the "from" transfer to happen. Similarly, a user may have: ```c struct S { int *p; }; #pragma omp declare_mapper (id1: S s) map(s.p) map(present, alloc: s.p[0:10]) #pragma omp declare_mapper (id2: S s) map(s.p, s.p[0:10]) S s1; // present-check should fail here #pragma omp target_enter_data map(alloc: s.p[0:10]) map(mapper(id1), to: s) // "to" should be honored here #pragma omp target_enter_data map(alloc: s.p[0:10]) map(mapper(id2), to: s) ``` Where the allocation happens before the "to" entry is encountered by the runtime. Or, an allocation happens before a "present" entry is encountered. To handle cases like this, we need to use the state information of previously seen new allocations, deletions, "from" entries, when honoring `to`/`from`/`present` map entries. -----
Author
Parents
Loading