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