xref: /llvm-project/flang/test/Lower/OpenMP/distribute-parallel-do.f90 (revision cdb3ebf1e62df060767863e1e683409d6077ca6e)
1! This test checks lowering of OpenMP DISTRIBUTE PARALLEL DO composite
2! constructs.
3
4! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
5! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s
6
7! CHECK-LABEL: func.func @_QPdistribute_parallel_do_num_threads(
8subroutine distribute_parallel_do_num_threads()
9  !$omp teams
10
11  ! CHECK:      omp.parallel num_threads({{.*}}) private({{.*}}) {
12  ! CHECK:      omp.distribute {
13  ! CHECK-NEXT: omp.wsloop {
14  ! CHECK-NEXT: omp.loop_nest
15  !$omp distribute parallel do num_threads(10)
16  do index_ = 1, 10
17  end do
18  !$omp end distribute parallel do
19
20  !$omp end teams
21end subroutine distribute_parallel_do_num_threads
22
23! CHECK-LABEL: func.func @_QPdistribute_parallel_do_dist_schedule(
24subroutine distribute_parallel_do_dist_schedule()
25  !$omp teams
26
27  ! CHECK:      omp.parallel private({{.*}}) {
28  ! CHECK:      omp.distribute dist_schedule_static dist_schedule_chunk_size({{.*}}) {
29  ! CHECK-NEXT: omp.wsloop {
30  ! CHECK-NEXT: omp.loop_nest
31  !$omp distribute parallel do dist_schedule(static, 4)
32  do index_ = 1, 10
33  end do
34  !$omp end distribute parallel do
35
36  !$omp end teams
37end subroutine distribute_parallel_do_dist_schedule
38
39! CHECK-LABEL: func.func @_QPdistribute_parallel_do_schedule(
40subroutine distribute_parallel_do_schedule()
41  !$omp teams
42
43  ! CHECK:      omp.parallel private({{.*}}) {
44  ! CHECK:      omp.distribute {
45  ! CHECK-NEXT: omp.wsloop schedule(runtime) {
46  ! CHECK-NEXT: omp.loop_nest
47  !$omp distribute parallel do schedule(runtime)
48  do index_ = 1, 10
49  end do
50  !$omp end distribute parallel do
51
52  !$omp end teams
53end subroutine distribute_parallel_do_schedule
54
55! CHECK-LABEL: func.func @_QPdistribute_parallel_do_private(
56subroutine distribute_parallel_do_private()
57  ! CHECK: %[[INDEX_ALLOC:.*]] = fir.alloca i32
58  ! CHECK: %[[INDEX:.*]]:2 = hlfir.declare %[[INDEX_ALLOC]]
59  ! CHECK: %[[X_ALLOC:.*]] = fir.alloca i64
60  ! CHECK: %[[X:.*]]:2 = hlfir.declare %[[X_ALLOC]]
61  integer(8) :: x
62
63  ! CHECK: omp.teams {
64  !$omp teams
65
66  ! CHECK:      omp.parallel private(@{{.*}} %[[X]]#0 -> %[[X_ARG:[^,]+]],
67  ! CHECK-SAME:                      @{{.*}} %[[INDEX]]#0 -> %[[INDEX_ARG:.*]] : !fir.ref<i64>, !fir.ref<i32>) {
68  ! CHECK:      %[[X_PRIV:.*]]:2 = hlfir.declare %[[X_ARG]]
69  ! CHECK:      %[[INDEX_PRIV:.*]]:2 = hlfir.declare %[[INDEX_ARG]]
70  ! CHECK:      omp.distribute {
71  ! CHECK-NEXT: omp.wsloop {
72  ! CHECK-NEXT: omp.loop_nest
73  !$omp distribute parallel do private(x)
74  do index_ = 1, 10
75  end do
76  !$omp end distribute parallel do
77
78  !$omp end teams
79end subroutine distribute_parallel_do_private
80