[Mlir-commits] [llvm] [mlir] [OMPIRBuilder] - Make offloading input data persist for deferred target tasks (PR #133499)

Sergio Afonso llvmlistbot at llvm.org
Thu May 8 05:50:53 PDT 2025


================
@@ -7378,13 +7530,43 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
 
     TaskData = Builder.CreateCall(TaskAllocFn, TaskAllocArgs);
 
+    Align Alignment = TaskData->getPointerAlignment(M.getDataLayout());
     if (HasShareds) {
-      Value *Shareds = StaleCI->getArgOperand(1);
-      Align Alignment = TaskData->getPointerAlignment(M.getDataLayout());
-      Value *TaskShareds = Builder.CreateLoad(VoidPtr, TaskData);
+      Value *Shareds = StaleCI->getArgOperand(SharedArgOperandNo);
+      Value *TaskT = Builder.CreateStructGEP(TaskWithPrivatesTy, TaskData, 0);
+      Value *TaskSharedsPtr = TaskT;
+      if (TaskWithPrivatesTy != Task) {
+        TaskSharedsPtr = Builder.CreateStructGEP(Task, TaskT, 0);
+      }
+      Value *TaskShareds = Builder.CreateLoad(VoidPtr, TaskSharedsPtr);
+
       Builder.CreateMemCpy(TaskShareds, Alignment, Shareds, Alignment,
                            SharedsSize);
     }
+    if (OffloadingArraysToPrivatize.size()) {
----------------
skatrak wrote:

```suggestion
    if (!OffloadingArraysToPrivatize.empty()) {
```

https://github.com/llvm/llvm-project/pull/133499


More information about the Mlir-commits mailing list