Skip to content

[flang][OpenMP] Omitting optional mapper-identifier in declare mapper breaks data mapping #156466

@jfuchs-kmt

Description

@jfuchs-kmt

I am using the most recent flang version 22.0.0git ([email protected]:llvm/llvm-project.git 89f53af3fffed3e41167fbb7bc10d4885cd97c7f).

The snippet below shows that when omitting the optional mapper-identifier (custom in this case), then real_arr is not mapped properly from and/or to the device.

! flang -O2 -fopenmp -fopenmp-version=52 -fopenmp-targets=nvptx64-nvidia-cuda main.F90 -D_IDENTIFIER_

PROGRAM reproducer
    IMPLICIT NONE

    TYPE :: real_t
        REAL, ALLOCATABLE :: real_arr(:)
    END TYPE real_t
#ifdef _IDENTIFIER_
    !$omp declare mapper(custom: real_t :: t) map(tofrom: t%real_arr)
#else
    !$omp declare mapper(real_t :: t) map(tofrom: t%real_arr)
#endif

    TYPE(real_t) :: r
    ALLOCATE(r%real_arr(10), source=1.0)

    PRINT*, "BEFORE TARGET REGION:"
    PRINT*, "real_arr: ", r%real_arr
    PRINT*, ""

    !$omp target map(tofrom: r)
        r%real_arr = 3.0
    !$omp end target

    PRINT*, "AFTER TARGET REGION:"
    PRINT*, "real_arr: ", r%real_arr

    DEALLOCATE(r%real_arr)
END PROGRAM reproducer
  1. Compiling the program with -D_IDENTIFIER_ gives the expected result where real_arr contains the values 3.0 after the target region since it is being written to there and mapped back to the host
  2. Compiling without the flag gives the bad behavior, where real_arr contains the values 1.0 after the target region. Thus the data mapping is not performed properly

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions