[llvm] [openmp] [OpenMP] Fix target data region codegen being omitted for device pass (PR #85218)
Akash Banerjee via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 14 05:59:04 PDT 2024
https://github.com/TIFitis updated https://github.com/llvm/llvm-project/pull/85218
>From 81e72eeaea0db015f84c6fc93e8e9537d37a53a6 Mon Sep 17 00:00:00 2001
From: Akash Banerjee <Akash.Banerjee at amd.com>
Date: Thu, 14 Mar 2024 12:44:39 +0000
Subject: [PATCH 1/2] [OpenMP] Fix target data region codegen being ommitted
for device pass
---
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp | 5 ++-
.../fortran/target-nested-target-data.f90 | 31 +++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
create mode 100644 openmp/libomptarget/test/offloading/fortran/target-nested-target-data.f90
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index f6cf358119fb71..bd58f9ebba1c21 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -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;
diff --git a/openmp/libomptarget/test/offloading/fortran/target-nested-target-data.f90 b/openmp/libomptarget/test/offloading/fortran/target-nested-target-data.f90
new file mode 100644
index 00000000000000..5508690c82ddd9
--- /dev/null
+++ b/openmp/libomptarget/test/offloading/fortran/target-nested-target-data.f90
@@ -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
>From 6bbd9d99dcb7264e610c52f63f06eb27cc4d683f Mon Sep 17 00:00:00 2001
From: Akash Banerjee <Akash.Banerjee at amd.com>
Date: Thu, 14 Mar 2024 12:58:31 +0000
Subject: [PATCH 2/2] Fix clang-format.
---
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index bd58f9ebba1c21..d9baf3fa82797f 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -4791,8 +4791,8 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createTargetData(
return InsertPointTy();
// Disable TargetData CodeGen on Device pass.
- if (Config.IsTargetDevice.value_or(false)){
- if(BodyGenCB)
+ if (Config.IsTargetDevice.value_or(false)) {
+ if (BodyGenCB)
Builder.restoreIP(BodyGenCB(Builder.saveIP(), BodyGenTy::NoPriv));
return Builder.saveIP();
}
More information about the llvm-commits
mailing list