[flang-commits] [flang] [flang][OpenMP] Move reductions from `loop` to `teams` when `loop` is mapped to `distribute` (PR #132920)
Michael Klemm via flang-commits
flang-commits at lists.llvm.org
Fri Mar 28 04:22:36 PDT 2025
================
@@ -358,3 +358,40 @@ subroutine multi_block_teams
end select
!$omp end target teams
end subroutine
+
+
+! Verifies that reductions are hoisted to the parent `teams` directive and removed
+! from the `loop` dreictive when `loop` is mapped to `distribute`.
+
+! CHECK-LABEL: func.func @_QPteams_loop_cannot_be_parallel_for_with_reductions
+subroutine teams_loop_cannot_be_parallel_for_with_reductions
+ implicit none
+ integer :: x, y, i, p
+
+ ! CHECK: %[[ADD_RED:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QF{{.*}}Ex"}
+ ! CHECK: %[[MUL_RED:.*]]:2 = hlfir.declare %{{.*}} {uniq_name = "_QF{{.*}}Ey"}
+ ! CHECK: omp.teams reduction(
+ ! CHECK-SAME: @add_reduction_i32 %[[ADD_RED]]#0 -> %[[ADD_RED_ARG:[^[:space:]]*]],
+ ! CHECK-SAME: @multiply_reduction_i32 %[[MUL_RED]]#0 -> %[[MUL_RED_ARG:.*]] : {{.*}}) {
+
+ ! CHECK: omp.distribute private(@{{.*}} %{{.*}} -> %{{.*}}, @{{.*}} %{{.*}} -> %{{.*}} : {{.*}}) {
+ ! CHECK: %[[ADD_RED_DECL:.*]]:2 = hlfir.declare %[[ADD_RED_ARG]] {uniq_name = "_QF{{.*}}Ex"}
+ ! CHECK: %[[MUL_RED_DECL:.*]]:2 = hlfir.declare %[[MUL_RED_ARG]] {uniq_name = "_QF{{.*}}Ey"}
+
+ ! CHECK: %[[ADD_RES:.*]] = arith.addi %{{.*}}, %{{.*}} : i32
+ ! CHECK: hlfir.assign %[[ADD_RES]] to %[[ADD_RED_DECL]]#0 : i32, !fir.ref<i32>
+
+ ! CHECK: %[[MUL_RES:.*]] = arith.muli %{{.*}}, %{{.*}} : i32
+ ! CHECK: hlfir.assign %[[MUL_RES]] to %[[MUL_RED_DECL]]#0 : i32, !fir.ref<i32>
+ ! CHECK: omp.yield
+ ! CHECK: }
+ ! CHECK: omp.terminator
+ ! CHECK: }
+ !$omp teams loop reduction(+: x) reduction(*: y) private(p)
+ DO i = 1, 5
+ call foo()
+ x = x + i
+ y = y * i
+ p = 42
+ END DO
----------------
mjklemm wrote:
```suggestion
end do
```
https://github.com/llvm/llvm-project/pull/132920
More information about the flang-commits
mailing list