|
Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4 |
|
| #
13de7593 |
| 27-Oct-2023 |
harishch4 <harishcse44@gmail.com> |
[Flang][OpenMP] Port openmp threadprivate tests to HLFIR flow (#70440)
|
|
Revision tags: llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, working, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5 |
|
| #
411bd2d4 |
| 07-Jun-2022 |
Peixin-Qiao <qiaopeixin@huawei.com> |
[flang][OpenMP] Support lowering parse-tree to MLIR for threadprivate directive
This supports lowering parse-tree to MLIR for threadprivate directive following the OpenMP 5.1 [2.21.2] standard. Take
[flang][OpenMP] Support lowering parse-tree to MLIR for threadprivate directive
This supports lowering parse-tree to MLIR for threadprivate directive following the OpenMP 5.1 [2.21.2] standard. Take the following as an example:
``` program m integer, save :: i !$omp threadprivate(i) call sub(i) !$omp parallel call sub(i) !$omp end parallel end ``` ``` func.func @_QQmain() { %0 = fir.address_of(@_QFEi) : !fir.ref<i32> %1 = omp.threadprivate %0 : !fir.ref<i32> -> !fir.ref<i32> fir.call @_QPsub(%1) : (!fir.ref<i32>) -> () omp.parallel { %2 = omp.threadprivate %0 : !fir.ref<i32> -> !fir.ref<i32> fir.call @_QPsub(%2) : (!fir.ref<i32>) -> () omp.terminator } return } ```
A threadprivate operation (omp.threadprivate) is created for all references to a threadprivate variable. The runtime will appropriately return a threadprivate var (%1 as above) or its copy (%2 as above) depending on whether it is outside or inside a parallel region. For threadprivate access outside the parallel region, the threadprivate operation is created in instantiateVar. Inside the parallel region, it is created in createBodyOfOp.
One new utility function collectSymbolSet is created for collecting all the variables with a property within a evaluation, which may be one Fortran, or OpenMP, or OpenACC construct.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D124226
show more ...
|