1d1653c8eSKiran Chandramohan!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s 2d1653c8eSKiran Chandramohan 3d1653c8eSKiran Chandramohan!=============================================================================== 4d1653c8eSKiran Chandramohan! parallel construct with function call which has master construct internally 5d1653c8eSKiran Chandramohan!=============================================================================== 6d1653c8eSKiran Chandramohan!CHECK-LABEL: func @_QPomp_master 7d1653c8eSKiran Chandramohansubroutine omp_master() 8d1653c8eSKiran Chandramohan 9d1653c8eSKiran Chandramohan!CHECK: omp.master { 10d1653c8eSKiran Chandramohan!$omp master 11d1653c8eSKiran Chandramohan 12d1653c8eSKiran Chandramohan !CHECK: fir.call @_QPmaster() {{.*}}: () -> () 13d1653c8eSKiran Chandramohan call master() 14d1653c8eSKiran Chandramohan 15d1653c8eSKiran Chandramohan!CHECK: omp.terminator 16d1653c8eSKiran Chandramohan!$omp end master 17d1653c8eSKiran Chandramohan 18d1653c8eSKiran Chandramohanend subroutine omp_master 19d1653c8eSKiran Chandramohan 20d1653c8eSKiran Chandramohan!CHECK-LABEL: func @_QPparallel_function_master 21d1653c8eSKiran Chandramohansubroutine parallel_function_master() 22d1653c8eSKiran Chandramohan 23d1653c8eSKiran Chandramohan!CHECK: omp.parallel { 24d1653c8eSKiran Chandramohan!$omp parallel 25d1653c8eSKiran Chandramohan 26d1653c8eSKiran Chandramohan !CHECK: fir.call @_QPfoo() {{.*}}: () -> () 27d1653c8eSKiran Chandramohan call foo() 28d1653c8eSKiran Chandramohan 29d1653c8eSKiran Chandramohan!CHECK: omp.terminator 30d1653c8eSKiran Chandramohan!$omp end parallel 31d1653c8eSKiran Chandramohan 32d1653c8eSKiran Chandramohanend subroutine parallel_function_master 33d1653c8eSKiran Chandramohan 34d1653c8eSKiran Chandramohan!=============================================================================== 35d1653c8eSKiran Chandramohan! master construct nested inside parallel construct 36d1653c8eSKiran Chandramohan!=============================================================================== 37d1653c8eSKiran Chandramohan 38d1653c8eSKiran Chandramohan!CHECK-LABEL: func @_QPomp_parallel_master 39d1653c8eSKiran Chandramohansubroutine omp_parallel_master() 40d1653c8eSKiran Chandramohan 41d1653c8eSKiran Chandramohan!CHECK: omp.parallel { 42d1653c8eSKiran Chandramohan!$omp parallel 43d1653c8eSKiran Chandramohan !CHECK: fir.call @_QPparallel() {{.*}}: () -> () 44d1653c8eSKiran Chandramohan call parallel() 45d1653c8eSKiran Chandramohan 46d1653c8eSKiran Chandramohan!CHECK: omp.master { 47d1653c8eSKiran Chandramohan!$omp master 48d1653c8eSKiran Chandramohan 49d1653c8eSKiran Chandramohan !CHECK: fir.call @_QPparallel_master() {{.*}}: () -> () 50d1653c8eSKiran Chandramohan call parallel_master() 51d1653c8eSKiran Chandramohan 52d1653c8eSKiran Chandramohan!CHECK: omp.terminator 53d1653c8eSKiran Chandramohan!$omp end master 54d1653c8eSKiran Chandramohan 55d1653c8eSKiran Chandramohan!CHECK: omp.terminator 56d1653c8eSKiran Chandramohan!$omp end parallel 57d1653c8eSKiran Chandramohan 58d1653c8eSKiran Chandramohanend subroutine omp_parallel_master 59d1653c8eSKiran Chandramohan 60d1653c8eSKiran Chandramohan!=============================================================================== 61d1653c8eSKiran Chandramohan! master construct nested inside parallel construct with conditional flow 62d1653c8eSKiran Chandramohan!=============================================================================== 63d1653c8eSKiran Chandramohan 64d1653c8eSKiran Chandramohan!CHECK-LABEL: func @_QPomp_master_parallel 65d1653c8eSKiran Chandramohansubroutine omp_master_parallel() 66d1653c8eSKiran Chandramohan integer :: alpha, beta, gama 67d1653c8eSKiran Chandramohan alpha = 4 68d1653c8eSKiran Chandramohan beta = 5 69d1653c8eSKiran Chandramohan gama = 6 70d1653c8eSKiran Chandramohan 71d1653c8eSKiran Chandramohan!CHECK: omp.master { 72d1653c8eSKiran Chandramohan!$omp master 73d1653c8eSKiran Chandramohan 74d1653c8eSKiran Chandramohan !CHECK: %{{.*}} = fir.load %{{.*}} 75d1653c8eSKiran Chandramohan !CHECK: %{{.*}} = fir.load %{{.*}} 76d1653c8eSKiran Chandramohan !CHECK: %[[RESULT:.*]] = arith.cmpi sge, %{{.*}}, %{{.*}} 77d1653c8eSKiran Chandramohan !CHECK: fir.if %[[RESULT]] { 78d1653c8eSKiran Chandramohan if (alpha .ge. gama) then 79d1653c8eSKiran Chandramohan 80d1653c8eSKiran Chandramohan!CHECK: omp.parallel { 81d1653c8eSKiran Chandramohan!$omp parallel 82d1653c8eSKiran Chandramohan !CHECK: fir.call @_QPinside_if_parallel() {{.*}}: () -> () 83d1653c8eSKiran Chandramohan call inside_if_parallel() 84d1653c8eSKiran Chandramohan 85d1653c8eSKiran Chandramohan!CHECK: omp.terminator 86d1653c8eSKiran Chandramohan!$omp end parallel 87d1653c8eSKiran Chandramohan 88d1653c8eSKiran Chandramohan !CHECK: %{{.*}} = fir.load %{{.*}} 89d1653c8eSKiran Chandramohan !CHECK: %{{.*}} = fir.load %{{.*}} 90d1653c8eSKiran Chandramohan !CHECK: %{{.*}} = arith.addi %{{.*}}, %{{.*}} 91d1653c8eSKiran Chandramohan !CHECK: hlfir.assign %{{.*}} to %{{.*}}#0 : i32, !fir.ref<i32> 92d1653c8eSKiran Chandramohan beta = alpha + gama 93d1653c8eSKiran Chandramohan end if 94*8586d033Svdonaldson !CHECK: } 95d1653c8eSKiran Chandramohan 96d1653c8eSKiran Chandramohan!CHECK: omp.terminator 97d1653c8eSKiran Chandramohan!$omp end master 98d1653c8eSKiran Chandramohan 99d1653c8eSKiran Chandramohanend subroutine omp_master_parallel 100