[Openmp-commits] [openmp] r346407 - [OPENMP]Make lambda mapping follow reqs for PTR_AND_OBJ mapping.

Alexey Bataev via Openmp-commits openmp-commits at lists.llvm.org
Thu Nov 8 07:47:30 PST 2018


Author: abataev
Date: Thu Nov  8 07:47:30 2018
New Revision: 346407

URL: http://llvm.org/viewvc/llvm-project?rev=346407&view=rev
Log:
[OPENMP]Make lambda mapping follow reqs for PTR_AND_OBJ mapping.

Summary:
The base pointer for the lambda mapping must point to the lambda capture
placement and pointer must point to the captured variable itself. Patch
fixes this problem.

Reviewers: gtbercea

Subscribers: guansong, openmp-commits, kkwli0, caomhin

Differential Revision: https://reviews.llvm.org/D54260

Modified:
    openmp/trunk/libomptarget/src/omptarget.cpp

Modified: openmp/trunk/libomptarget/src/omptarget.cpp
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/src/omptarget.cpp?rev=346407&r1=346406&r2=346407&view=diff
==============================================================================
--- openmp/trunk/libomptarget/src/omptarget.cpp (original)
+++ openmp/trunk/libomptarget/src/omptarget.cpp Thu Nov  8 07:47:30 2018
@@ -638,19 +638,20 @@ int target(int64_t device_id, void *host
         assert(tgtIdx != -1 && "Base address must be translated already.");
         // The parent lambda must be processed already and it must be the last
         // in tgt_args and tgt_offsets arrays.
-        void *HstPtrBegin = args[i];
-        void *HstPtrBase = args_base[i];
+        void *HstPtrVal = args[i];
+        void *HstPtrBegin = args_base[i];
+        void *HstPtrBase = args[idx];
         bool IsLast; // unused.
         void *TgtPtrBase =
             (void *)((intptr_t)tgt_args[tgtIdx] + tgt_offsets[tgtIdx]);
         DP("Parent lambda base " DPxMOD "\n", DPxPTR(TgtPtrBase));
         uint64_t Delta = (uint64_t)HstPtrBegin - (uint64_t)HstPtrBase;
         void *TgtPtrBegin = (void *)((uintptr_t)TgtPtrBase + Delta);
-        void *Pointer_TgtPtrBegin = Device.getTgtPtrBegin(
-            *(void **)HstPtrBegin, arg_sizes[i], IsLast, false);
+        void *Pointer_TgtPtrBegin =
+            Device.getTgtPtrBegin(HstPtrVal, arg_sizes[i], IsLast, false);
         if (!Pointer_TgtPtrBegin) {
           DP("No lambda captured variable mapped (" DPxMOD ") - ignored\n",
-             DPxPTR(*(void **)HstPtrBegin));
+             DPxPTR(HstPtrVal));
           continue;
         }
         DP("Update lambda reference (" DPxMOD ") -> [" DPxMOD "]\n",




More information about the Openmp-commits mailing list