[all-commits] [llvm/llvm-project] 1a7060: [OpenMP][Offload] Handle `present/to/from` when a ...

Abhinav Gaba via All-commits all-commits at lists.llvm.org
Mon Mar 2 13:14:14 PST 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 1a7060a7b07c2fd6e72537781a83f87941d26cda
      https://github.com/llvm/llvm-project/commit/1a7060a7b07c2fd6e72537781a83f87941d26cda
  Author: Abhinav Gaba <abhinav.gaba at intel.com>
  Date:   2026-03-02 (Mon, 02 Mar 2026)

  Changed paths:
    M offload/include/OpenMP/Mapping.h
    M offload/libomptarget/OpenMP/Mapping.cpp
    M offload/libomptarget/interface.cpp
    M offload/libomptarget/omptarget.cpp
    A offload/test/mapping/map_ordering_ptee_tgt_alloc_mapper_alloc_from_to.c
    A offload/test/mapping/map_ordering_ptee_tgt_data_alloc_tgt_mapper_present_delete_from_to.c
    A offload/test/mapping/map_ordering_tgt_alloc_from_to.c
    A offload/test/mapping/map_ordering_tgt_alloc_present_tofrom.c
    A offload/test/mapping/map_ordering_tgt_alloc_tofrom.c
    A offload/test/mapping/map_ordering_tgt_data_alloc_from.c
    A offload/test/mapping/map_ordering_tgt_data_alloc_to_from.c
    A offload/test/mapping/map_ordering_tgt_data_alloc_tofrom.c
    A offload/test/mapping/map_ordering_tgt_exit_data_always_always.c
    A offload/test/mapping/map_ordering_tgt_exit_data_delete_from.c
    A offload/test/mapping/map_ordering_tgt_exit_data_delete_from_assumedsize.c
    A offload/test/mapping/map_ordering_tgt_exit_data_from_delete_assumedsize.c
    A offload/test/mapping/map_ordering_tgt_exit_data_from_mapper_overlap.c

  Log Message:
  -----------
  [OpenMP][Offload] Handle `present/to/from` when a different entry did `alloc/delete`. (#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.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list