diff options
| author | Paul Osmialowski <pawel.osmialowski@arm.com> | 2017-03-23 15:03:17 +0000 |
|---|---|---|
| committer | Paul Osmialowski <pawel.osmialowski@arm.com> | 2017-03-23 15:03:17 +0000 |
| commit | 0788515cb1712c4038e6309f246d0cddc2bb48be (patch) | |
| tree | d81981161bcf4c90c0bfa21bcb7f5dbc6bb7bde0 /openmp/runtime/src | |
| parent | e9ca32ae52613a94b622f5cdb57f5b7533cc1d35 (diff) | |
| download | bcm5719-llvm-0788515cb1712c4038e6309f246d0cddc2bb48be.tar.gz bcm5719-llvm-0788515cb1712c4038e6309f246d0cddc2bb48be.zip | |
GOMP compatibility: add missing OpenMP4.0 task deps handling code
Differential Revision: https://reviews.llvm.org/D31071
llvm-svn: 298605
Diffstat (limited to 'openmp/runtime/src')
| -rw-r--r-- | openmp/runtime/src/kmp_gsupport.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/openmp/runtime/src/kmp_gsupport.cpp b/openmp/runtime/src/kmp_gsupport.cpp index 2c6d097550a..ada7ce9e42a 100644 --- a/openmp/runtime/src/kmp_gsupport.cpp +++ b/openmp/runtime/src/kmp_gsupport.cpp @@ -918,7 +918,11 @@ PARALLEL_LOOP_START(xexpand(KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START), void xexpand(KMP_API_NAME_GOMP_TASK)(void (*func)(void *), void *data, void (*copy_func)(void *, void *), - long arg_size, long arg_align, bool if_cond, unsigned gomp_flags) + long arg_size, long arg_align, bool if_cond, unsigned gomp_flags +#if OMP_40_ENABLED + , void **depend +#endif +) { MKLOC(loc, "GOMP_task"); int gtid = __kmp_entry_gtid(); @@ -962,6 +966,23 @@ xexpand(KMP_API_NAME_GOMP_TASK)(void (*func)(void *), void *data, void (*copy_fu } if (if_cond) { +#if OMP_40_ENABLED + if (gomp_flags & 8) { + KMP_ASSERT(depend); + const size_t ndeps = (kmp_intptr_t)depend[0]; + const size_t nout = (kmp_intptr_t)depend[1]; + kmp_depend_info_t dep_list[ndeps]; + + for (size_t i = 0U; i < ndeps; i++) { + dep_list[i].base_addr = (kmp_intptr_t)depend[2U + i]; + dep_list[i].len = 0U; + dep_list[i].flags.in = 1; + dep_list[i].flags.out = (i < nout); + } + __kmpc_omp_task_with_deps(&loc, gtid, task, ndeps, dep_list, 0, NULL); + } + else +#endif __kmpc_omp_task(&loc, gtid, task); } else { |

