[all-commits] [llvm/llvm-project] 1d1c83: Reland "[OpenMP][Offload] Handle `present/to/from`...

Abhinav Gaba via All-commits all-commits at lists.llvm.org
Mon Mar 2 15:32:52 PST 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 1d1c83ad73977a17b06e34243a9b74f41af6da78
      https://github.com/llvm/llvm-project/commit/1d1c83ad73977a17b06e34243a9b74f41af6da78
  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:
  -----------
  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.

-----



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