[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


================
@@ -7204,55 +7287,80 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
   // (iii) Create a task with the task entry point created in (ii)
   //
   // That is we create the following
-  //
+  //   struct task_with_privates {
+  //      struct kmp_task_ompbuilder_t;
+  //      struct privates {
+  //         [2 x ptr], ; baseptrs
+  //         [2 x ptr]  ; ptrs
+  //         [2 x i64]  ; sizes
+  //      }
+  //   }
   //   void user_code_that_offloads(...) {
-  //     %.offload_baseptrs = alloca [3 x ptr], align 8
-  //     %.offload_ptrs = alloca [3 x ptr], align 8
-  //     %.offload_mappers = alloca [3 x ptr], align 8
+  //     %.offload_baseptrs = alloca [2 x ptr], align 8
+  //     %.offload_ptrs = alloca [2 x ptr], align 8
+  //     %.offload_sizes = alloca [2 x i64], align 8
   //
   //     %structArg = alloca { ptr, ptr, ptr }, align 8
-  //     %strucArg[0] = %.offload_baseptrs
-  //     %strucArg[1] = %.offload_ptrs
-  //     %strucArg[2] = %.offload_mappers
-  //     proxy_target_task = @__kmpc_omp_task_alloc(...,
-  //                                               @.omp_target_task_proxy_func)
-  //     memcpy(proxy_target_task->shareds, %structArg, sizeof(structArg))
+  //     %strucArg[0] = a
+  //     %strucArg[1] = b
+  //     %strucArg[2] = &n
+  //
+  //     target_task_with_privates = @__kmpc_omp_target_task_alloc(...,
+  //                                               sizeof(kmp_task_ompbuilder_t),
+  //                                               sizeof(structArg),
+  //                                               @.omp_target_task_proxy_func,
+  //                                               ...)
+  //     memcpy(target_task->shareds, %structArg, sizeof(structArg))
+  //     memcpy(target_task->privates->baseptrs,
+  //            offload_baseptrs, sizeof(offload_baseptrs)
+  //     memcpy(target_task->privates->ptrs,
+  //            offload_ptrs, sizeof(offload_ptrs)
+  //     memcpy(target_task->privates->sizes,
+  //            offload_sizes, sizeof(offload_sizes)
----------------
skatrak wrote:

```suggestion
  //     memcpy(target_task_with_privates->shareds, %structArg, sizeof(structArg))
  //     memcpy(target_task_with_privates->privates->baseptrs,
  //            offload_baseptrs, sizeof(offload_baseptrs)
  //     memcpy(target_task_with_privates->privates->ptrs,
  //            offload_ptrs, sizeof(offload_ptrs)
  //     memcpy(target_task_with_privates->privates->sizes,
  //            offload_sizes, sizeof(offload_sizes)
```

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


More information about the Mlir-commits mailing list