Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4791,8 +4791,11 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createTargetData(
return InsertPointTy();

// Disable TargetData CodeGen on Device pass.
if (Config.IsTargetDevice.value_or(false))
if (Config.IsTargetDevice.value_or(false)){
if(BodyGenCB)
Builder.restoreIP(BodyGenCB(Builder.saveIP(), BodyGenTy::NoPriv));
return Builder.saveIP();
}

Builder.restoreIP(CodeGenIP);
bool IsStandAlone = !BodyGenCB;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
! Basic offloading test of arrays with provided lower
! and upper bounds as specified by OpenMP's sectioning
! REQUIRES: flang
! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
! UNSUPPORTED: aarch64-unknown-linux-gnu
! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
! UNSUPPORTED: x86_64-pc-linux-gnu
! UNSUPPORTED: x86_64-pc-linux-gnu-LTO

! RUN: %libomptarget-compile-fortran-run-and-check-generic
program main
integer :: A(10), B(10), C(10)

do I = 1, 10
A(I) = 1
B(I) = 2
end do
!$omp target data map(to: A, B) map(alloc: C)
!$omp target map(from: C)
do I = 1, 10
C(I) = A(I) + B(I) ! assigns 3, A:1 + B:2
end do
!$omp end target
!$omp target update from(C) ! updates C device -> host
!$omp end target data

print *, C ! should be all 3's

end program

! CHECK: 3 3 3 3 3 3 3 3 3 3