[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