ABataev added a comment. In D79972#2069366 <https://reviews.llvm.org/D79972#2069366>, @cchen wrote:
> In D79972#2069358 <https://reviews.llvm.org/D79972#2069358>, @ABataev wrote: > > > In D79972#2069322 <https://reviews.llvm.org/D79972#2069322>, @cchen wrote: > > > > > In D79972#2068976 <https://reviews.llvm.org/D79972#2068976>, @ABataev > > > wrote: > > > > > > > Still: Did you think about implementing it in the compiler instead of > > > > the runtime? > > > > > > > > > I'm not sure I understand your question, which part of code are you > > > asking? > > > The main work compiler needs to do is to send the {offset, count, > > > stride} struct to runtime. > > > > > > I mean did you think about calling `__tgt_target_data_update` function in a > > loop in the compiler-generated code instead of putting it into the runtime? > > > Oh, I would prefer to call `tgt_target_data_update` once in the compiler and > I'm also doing it now. I was not quite correct. What I mean, is to generate the array with the array section as VLA in the compiler, and fill it in the loop generated by the compiler for non-contiguous sections but not in the runtime? Say, we have the code: int arr[3][3] ... #pragma omp update to(arr[1:2][1:2] In this case, we're going to transfer the next elements: 000 0xx 0xx In the compiler-generated code we emit something like this: void *bptr[<n>]; void *ptr[<n>]; int64 sizes[<n>]; int64 maptypes[<n>]; for (int i = 0; i < <n>; ++i) { bptr[i] = &arr[1+i][1]; ptr[i] = &arr[1+i][1]; sizes[i] = ...;' maptypes[i] = ...; } call void @__tgt_target_data_update(i64 -1, i32 <n>, bptr, ptr, sizes, maptypes); With this solution, you won't need to modify the runtime and add a new mapping flag. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79972/new/ https://reviews.llvm.org/D79972 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits