1f46f5a01STom Eccles! This test checks lowering of OpenMP parallel directive 2f46f5a01STom Eccles! with `DEFAULT` clause present. 3f46f5a01STom Eccles 410df3207SKareem Ergawy! RUN: %flang_fc1 -emit-hlfir -fopenmp -mmlir --force-byref-reduction %s -o - \ 510df3207SKareem Ergawy! RUN: | FileCheck %s 6f46f5a01STom Eccles 710df3207SKareem Ergawy! RUN: bbc -fopenmp -emit-hlfir --force-byref-reduction %s -o - \ 810df3207SKareem Ergawy! RUN: | FileCheck %s 910df3207SKareem Ergawy 1010df3207SKareem Ergawy!CHECK: omp.private {type = firstprivate} @[[W_FIRSTPRIVATIZER:_QFEw_firstprivate_ref_i32]] : !fir.ref<i32> alloc { 1110df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 1210df3207SKareem Ergawy!CHECK: %[[PRIV_W_ALLOC:.*]] = fir.alloca i32 {bindc_name = "w", {{.*}}} 1310df3207SKareem Ergawy!CHECK: %[[PRIV_W_DECL:.*]]:2 = hlfir.declare %[[PRIV_W_ALLOC]] {uniq_name = "_QFEw"} 1410df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_W_DECL]]#0 : !fir.ref<i32>) 1510df3207SKareem Ergawy!CHECK: } copy { 1610df3207SKareem Ergawy!CHECK: ^bb0(%[[ORIG_W:.*]]: !fir.ref<i32>, %[[PRIV_W:.*]]: !fir.ref<i32>): 1710df3207SKareem Ergawy!CHECK: %[[ORIG_W_VAL:.*]] = fir.load %[[ORIG_W]] 18797f0119SLeandro Lupori!CHECK: hlfir.assign %[[ORIG_W_VAL]] to %[[PRIV_W]] 1910df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_W]] : !fir.ref<i32>) 2010df3207SKareem Ergawy!CHECK: } 2110df3207SKareem Ergawy 2210df3207SKareem Ergawy!CHECK: omp.private {type = firstprivate} @[[Y_FIRSTPRIVATIZER:_QFEy_firstprivate_ref_i32]] : !fir.ref<i32> alloc { 2310df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 2410df3207SKareem Ergawy!CHECK: %[[PRIV_Y_ALLOC:.*]] = fir.alloca i32 {bindc_name = "y", {{.*}}} 2510df3207SKareem Ergawy!CHECK: %[[PRIV_Y_DECL:.*]]:2 = hlfir.declare %[[PRIV_Y_ALLOC]] {uniq_name = "_QFEy"} 2610df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_Y_DECL]]#0 : !fir.ref<i32>) 2710df3207SKareem Ergawy!CHECK: } copy { 2810df3207SKareem Ergawy!CHECK: ^bb0(%[[ORIG_Y:.*]]: !fir.ref<i32>, %[[PRIV_Y:.*]]: !fir.ref<i32>): 2910df3207SKareem Ergawy!CHECK: %[[ORIG_Y_VAL:.*]] = fir.load %[[ORIG_Y]] 30797f0119SLeandro Lupori!CHECK: hlfir.assign %[[ORIG_Y_VAL]] to %[[PRIV_Y]] 3110df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_Y]] : !fir.ref<i32>) 3210df3207SKareem Ergawy!CHECK: } 3310df3207SKareem Ergawy 3410df3207SKareem Ergawy!CHECK: omp.private {type = private} @[[X_PRIVATIZER:_QFEx_private_ref_i32]] : !fir.ref<i32> alloc { 3510df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 3610df3207SKareem Ergawy!CHECK: %[[PRIV_X_ALLOC:.*]] = fir.alloca i32 {bindc_name = "x", {{.*}}} 3710df3207SKareem Ergawy!CHECK: %[[PRIV_X_DECL:.*]]:2 = hlfir.declare %[[PRIV_X_ALLOC]] {uniq_name = "_QFEx"} 3810df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_X_DECL]]#0 : !fir.ref<i32>) 3910df3207SKareem Ergawy!CHECK: } 4010df3207SKareem Ergawy 4110df3207SKareem Ergawy!CHECK: omp.private {type = private} @[[W_PRIVATIZER:_QFEw_private_ref_i32]] : !fir.ref<i32> alloc { 4210df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 4310df3207SKareem Ergawy!CHECK: %[[PRIV_W_ALLOC:.*]] = fir.alloca i32 {bindc_name = "w", {{.*}}} 4410df3207SKareem Ergawy!CHECK: %[[PRIV_W_DECL:.*]]:2 = hlfir.declare %[[PRIV_W_ALLOC]] {uniq_name = "_QFEw"} 4510df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_W_DECL]]#0 : !fir.ref<i32>) 4610df3207SKareem Ergawy!CHECK: } 4710df3207SKareem Ergawy 4810df3207SKareem Ergawy!CHECK: omp.private {type = private} @[[Y_PRIVATIZER:_QFEy_private_ref_i32]] : !fir.ref<i32> alloc { 4910df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 5010df3207SKareem Ergawy!CHECK: %[[PRIV_Y_ALLOC:.*]] = fir.alloca i32 {bindc_name = "y", {{.*}}} 5110df3207SKareem Ergawy!CHECK: %[[PRIV_Y_DECL:.*]]:2 = hlfir.declare %[[PRIV_Y_ALLOC]] {uniq_name = "_QFEy"} 5210df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_Y_DECL]]#0 : !fir.ref<i32>) 5310df3207SKareem Ergawy!CHECK: } 5410df3207SKareem Ergawy 5510df3207SKareem Ergawy!CHECK: omp.private {type = firstprivate} @[[X_FIRSTPRIVATIZER:_QFEx_firstprivate_ref_i32]] : !fir.ref<i32> alloc { 5610df3207SKareem Ergawy!CHECK: ^bb0(%{{.*}}: !fir.ref<i32>): 5710df3207SKareem Ergawy!CHECK: %[[PRIV_X_ALLOC:.*]] = fir.alloca i32 {bindc_name = "x", {{.*}}} 5810df3207SKareem Ergawy!CHECK: %[[PRIV_X_DECL:.*]]:2 = hlfir.declare %[[PRIV_X_ALLOC]] {uniq_name = "_QFEx"} 5910df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_X_DECL]]#0 : !fir.ref<i32>) 6010df3207SKareem Ergawy!CHECK: } copy { 6110df3207SKareem Ergawy!CHECK: ^bb0(%[[ORIG_X:.*]]: !fir.ref<i32>, %[[PRIV_X:.*]]: !fir.ref<i32>): 6210df3207SKareem Ergawy!CHECK: %[[ORIG_X_VAL:.*]] = fir.load %[[ORIG_X]] 63797f0119SLeandro Lupori!CHECK: hlfir.assign %[[ORIG_X_VAL]] to %[[PRIV_X]] 6410df3207SKareem Ergawy!CHECK: omp.yield(%[[PRIV_X]] : !fir.ref<i32>) 6510df3207SKareem Ergawy!CHECK: } 66f46f5a01STom Eccles 67f46f5a01STom Eccles!CHECK: func @_QQmain() attributes {fir.bindc_name = "default_clause_lowering"} { 68f46f5a01STom Eccles!CHECK: %[[W:.*]] = fir.alloca i32 {bindc_name = "w", uniq_name = "_QFEw"} 69f46f5a01STom Eccles!CHECK: %[[W_DECL:.*]]:2 = hlfir.declare %[[W]] {uniq_name = "_QFEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 70f46f5a01STom Eccles!CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"} 71f46f5a01STom Eccles!CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 72f46f5a01STom Eccles!CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"} 73f46f5a01STom Eccles!CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 74f46f5a01STom Eccles!CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFEz"} 75f46f5a01STom Eccles!CHECK: %[[Z_DECL:.*]]:2 = hlfir.declare %[[Z]] {uniq_name = "_QFEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 7610df3207SKareem Ergawy!CHECK: omp.parallel private( 77cdb3ebf1SSergio Afonso!CHECK-SAME: @[[X_FIRSTPRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]], @[[Y_PRIVATIZER]] %[[Y_DECL]]#0 -> %[[PRIVATE_Y:.*]], @[[W_PRIVATIZER]] %[[W_DECL]]#0 -> %[[PRIVATE_W:.*]] : {{.*}}) { 78f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 79f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 80f46f5a01STom Eccles!CHECK: %[[PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_W]] {uniq_name = "_QFEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 81f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 2 : i32 82f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 83f46f5a01STom Eccles!CHECK: %[[RESULT:.*]] = arith.muli %[[CONST]], %[[TEMP]] : i32 84f46f5a01STom Eccles!CHECK: hlfir.assign %[[RESULT]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 85f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_W_DECL]]#0 : !fir.ref<i32> 86f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 45 : i32 87f46f5a01STom Eccles!CHECK: %[[RESULT:.*]] = arith.addi %[[TEMP]], %[[CONST]] : i32 88f46f5a01STom Eccles!CHECK: hlfir.assign %[[RESULT]] to %[[Z_DECL]]#0 : i32, !fir.ref<i32> 89f46f5a01STom Eccles!CHECK: omp.terminator 90f46f5a01STom Eccles!CHECK: } 91f46f5a01STom Eccles 92f46f5a01STom Ecclesprogram default_clause_lowering 93f46f5a01STom Eccles integer :: x, y, z, w 94f46f5a01STom Eccles 95f46f5a01STom Eccles !$omp parallel default(private) firstprivate(x) shared(z) 96f46f5a01STom Eccles x = y * 2 97f46f5a01STom Eccles z = w + 45 98f46f5a01STom Eccles !$omp end parallel 99f46f5a01STom Eccles 100f46f5a01STom Eccles!CHECK: omp.parallel { 101f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<i32> 102f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[X_DECL]]#0 : i32, !fir.ref<i32> 103f46f5a01STom Eccles!CHECK: omp.terminator 104f46f5a01STom Eccles!CHECK: } 105f46f5a01STom Eccles 106f46f5a01STom Eccles !$omp parallel default(shared) 107f46f5a01STom Eccles x = y 108f46f5a01STom Eccles !$omp end parallel 109f46f5a01STom Eccles 11010df3207SKareem Ergawy!CHECK: omp.parallel private( 111cdb3ebf1SSergio Afonso!CHECK-SAME: @[[X_PRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]], @[[Y_PRIVATIZER]] %[[Y_DECL]]#0 -> %[[PRIVATE_Y:.*]] : {{.*}}) { 112f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 113f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 114f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 115f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 116f46f5a01STom Eccles!CHECK: omp.terminator 117f46f5a01STom Eccles!CHECK: } 118f46f5a01STom Eccles 119f46f5a01STom Eccles !$omp parallel default(none) private(x, y) 120f46f5a01STom Eccles x = y 121f46f5a01STom Eccles !$omp end parallel 122f46f5a01STom Eccles 12310df3207SKareem Ergawy!CHECK: omp.parallel private( 124cdb3ebf1SSergio Afonso!CHECK-SAME: @[[Y_FIRSTPRIVATIZER]] %[[Y_DECL]]#0 -> %[[PRIVATE_Y:.*]], @[[X_FIRSTPRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]] : {{.*}}) { 125f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 126f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 127f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 128f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 129f46f5a01STom Eccles!CHECK: omp.terminator 130f46f5a01STom Eccles!CHECK: } 131f46f5a01STom Eccles 132f46f5a01STom Eccles !$omp parallel default(firstprivate) firstprivate(y) 133f46f5a01STom Eccles x = y 134f46f5a01STom Eccles !$omp end parallel 135f46f5a01STom Eccles 13610df3207SKareem Ergawy!CHECK: omp.parallel private( 137cdb3ebf1SSergio Afonso!CHECK-SAME: @[[X_PRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]], @[[Y_FIRSTPRIVATIZER]] %[[Y_DECL]]#0 -> %[[PRIVATE_Y:.*]], @[[W_FIRSTPRIVATIZER]] %[[W_DECL]]#0 -> %[[PRIVATE_W:.*]] : {{.*}}) { 138f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 139f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 140f46f5a01STom Eccles!CHECK: %[[PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_W]] {uniq_name = "_QFEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 141f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 2 : i32 142f46f5a01STom Eccles!CHECK: %[[RESULT:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 143f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = arith.muli %[[CONST]], %[[RESULT]] : i32 144f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 145f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_W_DECL]]#0 : !fir.ref<i32> 146f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 45 : i32 147f46f5a01STom Eccles!CHECK: %[[RESULT:.*]] = arith.addi %[[TEMP]], %[[CONST]] : i32 148f46f5a01STom Eccles!CHECK: hlfir.assign %[[RESULT]] to %[[Z_DECL]]#0 : i32, !fir.ref<i32> 149f46f5a01STom Eccles!CHECK: omp.terminator 150f46f5a01STom Eccles!CHECK: } 151f46f5a01STom Eccles 152f46f5a01STom Eccles !$omp parallel default(firstprivate) private(x) shared(z) 153f46f5a01STom Eccles x = y * 2 154f46f5a01STom Eccles z = w + 45 155f46f5a01STom Eccles !$omp end parallel 156f46f5a01STom Eccles 157f46f5a01STom Eccles!CHECK: omp.parallel { 15810df3207SKareem Ergawy!CHECK: omp.parallel private( 159cdb3ebf1SSergio Afonso!CHECK-SAME: @[[X_PRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]], @[[Y_PRIVATIZER]] %[[Y_DECL]]#0 -> %[[PRIVATE_Y:.*]] : {{.*}}) { 160f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 161f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 162f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 163f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 164f46f5a01STom Eccles!CHECK: omp.terminator 165f46f5a01STom Eccles!CHECK: } 16610df3207SKareem Ergawy!CHECK: omp.parallel private( 167cdb3ebf1SSergio Afonso!CHECK-SAME: @[[W_FIRSTPRIVATIZER]] %[[W_DECL]]#0 -> %[[PRIVATE_W:.*]], @[[X_FIRSTPRIVATIZER]] %[[X_DECL]]#0 -> %[[PRIVATE_X:.*]] : {{.*}}) { 168f46f5a01STom Eccles!CHECK: %[[PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_W]] {uniq_name = "_QFEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 169f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 170f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_X_DECL]]#0 : !fir.ref<i32> 171f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_W_DECL]]#0 : i32, !fir.ref<i32> 172f46f5a01STom Eccles!CHECK: omp.terminator 173f46f5a01STom Eccles!CHECK: } 174f46f5a01STom Eccles!CHECK: omp.terminator 175f46f5a01STom Eccles!CHECK: } 176f46f5a01STom Eccles !$omp parallel 177f46f5a01STom Eccles !$omp parallel default(private) 178f46f5a01STom Eccles x = y 179f46f5a01STom Eccles !$omp end parallel 180f46f5a01STom Eccles 181f46f5a01STom Eccles !$omp parallel default(firstprivate) 182f46f5a01STom Eccles w = x 183f46f5a01STom Eccles !$omp end parallel 184f46f5a01STom Eccles !$omp end parallel 185f46f5a01STom Eccles 186f46f5a01STom Ecclesend program default_clause_lowering 187f46f5a01STom Eccles 188f46f5a01STom Ecclessubroutine nested_default_clause_tests 189f46f5a01STom Eccles integer :: x, y, z, w, k, a 190f46f5a01STom Eccles!CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFnested_default_clause_testsEk"} 191f46f5a01STom Eccles!CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFnested_default_clause_testsEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 192f46f5a01STom Eccles!CHECK: %[[W:.*]] = fir.alloca i32 {bindc_name = "w", uniq_name = "_QFnested_default_clause_testsEw"} 193f46f5a01STom Eccles!CHECK: %[[W_DECL:.*]]:2 = hlfir.declare %[[W]] {uniq_name = "_QFnested_default_clause_testsEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 194f46f5a01STom Eccles!CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFnested_default_clause_testsEx"} 195f46f5a01STom Eccles!CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 196f46f5a01STom Eccles!CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFnested_default_clause_testsEy"} 197f46f5a01STom Eccles!CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 198f46f5a01STom Eccles!CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFnested_default_clause_testsEz"} 199f46f5a01STom Eccles!CHECK: %[[Z_DECL:.*]]:2 = hlfir.declare %[[Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 200cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[PRIVATE_X:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Y:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Z:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_K:.*]] : {{.*}}) { 201f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 202aa875cfeSSergio Afonso!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 203f46f5a01STom Eccles!CHECK: %[[PRIVATE_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 204f46f5a01STom Eccles!CHECK: %[[PRIVATE_K_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_K]] {uniq_name = "_QFnested_default_clause_testsEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 205cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[INNER_PRIVATE_Y:.*]], {{.*}} {{.*}}#0 -> %[[INNER_PRIVATE_X:.*]] : {{.*}}) { 206f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 207f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 208f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 20 : i32 209f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[INNER_PRIVATE_Y_DECL]]#0 : i32, !fir.ref<i32> 210f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 10 : i32 211f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[INNER_PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 212f46f5a01STom Eccles!CHECK: omp.terminator 213f46f5a01STom Eccles!CHECK: } 214cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[INNER_PRIVATE_W:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[INNER_PRIVATE_Z:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[INNER_PRIVATE_K:.*]] : {{.*}}) { 215f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_W]] {uniq_name = "_QFnested_default_clause_testsEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 216f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_Z_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 217f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_K_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_K]] {uniq_name = "_QFnested_default_clause_testsEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 218f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 30 : i32 219f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[PRIVATE_Y_DECL]]#0 : i32, !fir.ref<i32> 220f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 40 : i32 221f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[INNER_PRIVATE_W_DECL]]#0 : i32, !fir.ref<i32> 222f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 50 : i32 223f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[INNER_PRIVATE_Z_DECL]]#0 : i32, !fir.ref<i32> 224f46f5a01STom Eccles!CHECK: %[[CONST:.*]] = arith.constant 40 : i32 225f46f5a01STom Eccles!CHECK: hlfir.assign %[[CONST]] to %[[INNER_PRIVATE_K_DECL]]#0 : i32, !fir.ref<i32> 226f46f5a01STom Eccles!CHECK: omp.terminator 227f46f5a01STom Eccles!CHECK: } 228f46f5a01STom Eccles!CHECK: omp.terminator 229f46f5a01STom Eccles!CHECK: } 230f46f5a01STom Eccles !$omp parallel firstprivate(x) private(y) shared(w) default(private) 231f46f5a01STom Eccles !$omp parallel default(private) 232f46f5a01STom Eccles y = 20 233f46f5a01STom Eccles x = 10 234f46f5a01STom Eccles !$omp end parallel 235f46f5a01STom Eccles 236f46f5a01STom Eccles !$omp parallel default(firstprivate) shared(y) private(w) 237f46f5a01STom Eccles y = 30 238f46f5a01STom Eccles w = 40 239f46f5a01STom Eccles z = 50 240f46f5a01STom Eccles k = 40 241f46f5a01STom Eccles !$omp end parallel 242f46f5a01STom Eccles !$omp end parallel 243f46f5a01STom Eccles 244f46f5a01STom Eccles 245cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[PRIVATE_X:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Y:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Z:.*]] : {{.*}}) { 246f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 247f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 248f46f5a01STom Eccles!CHECK: %[[PRIVATE_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 249cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[PRIVATE_INNER_X:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[PRIVATE_INNER_Y:.*]] : {{.*}}) { 250f46f5a01STom Eccles!CHECK: %[[PRIVATE_INNER_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_INNER_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 251f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 252f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[INNER_PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 253f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_INNER_X_DECL]]#0 : i32, !fir.ref<i32> 254f46f5a01STom Eccles!CHECK: omp.terminator 255f46f5a01STom Eccles!CHECK: } 256cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[PRIVATE_INNER_W:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_INNER_X:.*]] : {{.*}}) { 257f46f5a01STom Eccles!CHECK: %[[PRIVATE_INNER_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_INNER_W]] {uniq_name = "_QFnested_default_clause_testsEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 258f46f5a01STom Eccles!CHECK: %[[PRIVATE_INNER_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_INNER_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 259f46f5a01STom Eccles!CHECK: %[[TEMP_1:.*]] = fir.load %[[PRIVATE_INNER_X_DECL]]#0 : !fir.ref<i32> 2601e9625e5SLeandro Lupori!CHECK: %[[TEMP_2:.*]] = fir.load %[[PRIVATE_Z_DECL]]#0 : !fir.ref<i32> 261f46f5a01STom Eccles!CHECK: %[[RESULT:.*]] = arith.addi %{{.*}}, %{{.*}} : i32 262f46f5a01STom Eccles!CHECK: hlfir.assign %[[RESULT]] to %[[PRIVATE_INNER_W_DECL]]#0 : i32, !fir.ref<i32> 263f46f5a01STom Eccles!CHECK: omp.terminator 264f46f5a01STom Eccles!CHECK: } 265f46f5a01STom Eccles !$omp parallel default(private) 266f46f5a01STom Eccles !$omp parallel default(firstprivate) 267f46f5a01STom Eccles x = y 268f46f5a01STom Eccles !$omp end parallel 269f46f5a01STom Eccles 270f46f5a01STom Eccles !$omp parallel default(private) shared(z) 271f46f5a01STom Eccles w = x + z 272f46f5a01STom Eccles !$omp end parallel 273f46f5a01STom Eccles !$omp end parallel 274f46f5a01STom Eccles 275cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[PRIVATE_X:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Y:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_W:.*]], {{.*}} {{.*}}#0 -> %[[PRIVATE_Z:.*]] : {{.*}}) { 276f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 277f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 278f46f5a01STom Eccles!CHECK: %[[PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_W]] {uniq_name = "_QFnested_default_clause_testsEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 279f46f5a01STom Eccles!CHECK: %[[PRIVATE_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 280cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[INNER_PRIVATE_X:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[INNER_PRIVATE_Y:.*]] : {{.*}}) { 281f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 282f46f5a01STom Eccles!CHECK: %[[INNER_PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[INNER_PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 283f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[INNER_PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 284f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[INNER_PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 285f46f5a01STom Eccles!CHECK: omp.terminator 286f46f5a01STom Eccles!CHECK: } 287f46f5a01STom Eccles!CHECK: omp.parallel { 288f46f5a01STom Eccles!CHECK: %[[TEMP_1:.*]] = fir.load %[[PRIVATE_X_DECL]]#0 : !fir.ref<i32> 289f46f5a01STom Eccles!CHECK: %[[TEMP_2:.*]] = fir.load %[[PRIVATE_Z_DECL]]#0 : !fir.ref<i32> 290f46f5a01STom Eccles!CHECK: %[[TEMP_3:.*]] = arith.addi %[[TEMP_1]], %[[TEMP_2]] : i32 291f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP_3]] to %[[PRIVATE_W_DECL]]#0 : i32, !fir.ref<i32> 292f46f5a01STom Eccles!CHECK: omp.terminator 293f46f5a01STom Eccles!CHECK: } 294f46f5a01STom Eccles!CHECK: } 295f46f5a01STom Eccles !$omp parallel default(private) 296f46f5a01STom Eccles !$omp parallel default(firstprivate) 297f46f5a01STom Eccles x = y 298f46f5a01STom Eccles !$omp end parallel 299f46f5a01STom Eccles 300f46f5a01STom Eccles !$omp parallel default(shared) 301f46f5a01STom Eccles w = x + z 302f46f5a01STom Eccles !$omp end parallel 303f46f5a01STom Eccles !$omp end parallel 304f46f5a01STom Eccles 305cdb3ebf1SSergio Afonso!CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[PRIVATE_X:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[PRIVATE_Y:.*]] : {{.*}}) { 306f46f5a01STom Eccles!CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 307f46f5a01STom Eccles!CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) 308f46f5a01STom Eccles!CHECK: omp.single { 309f46f5a01STom Eccles!CHECK: %[[TEMP:.*]] = fir.load %[[PRIVATE_Y_DECL]]#0 : !fir.ref<i32> 310f46f5a01STom Eccles!CHECK: hlfir.assign %[[TEMP]] to %[[PRIVATE_X_DECL]]#0 : i32, !fir.ref<i32> 311f46f5a01STom Eccles!CHECK: omp.terminator 312f46f5a01STom Eccles!CHECK: } 313f46f5a01STom Eccles!CHECK: omp.terminator 314f46f5a01STom Eccles!CHECK: } 315f46f5a01STom Eccles!CHECK: return 316f46f5a01STom Eccles!CHECK: } 317f46f5a01STom Eccles !$omp parallel default(firstprivate) 318f46f5a01STom Eccles !$omp single 319f46f5a01STom Eccles x = y 320f46f5a01STom Eccles !$omp end single 321f46f5a01STom Eccles !$omp end parallel 322f46f5a01STom Ecclesend subroutine 323f46f5a01STom Eccles 324f46f5a01STom Eccles!CHECK: func.func @_QPskipped_default_clause_checks() { 325f46f5a01STom Eccles!CHECK: %[[TYPE_ADDR:.*]] = fir.address_of(@_QFskipped_default_clause_checksE.n.i1) : !fir.ref<!fir.char<1,2>> 326f46f5a01STom Eccles!CHECK: %[[VAL_CONST_2:.*]] = arith.constant 2 : index 327f46f5a01STom Eccles!CHECK: %[[VAL_I1_DECLARE:.*]]:2 = hlfir.declare %[[TYPE_ADDR]] typeparams %[[VAL_CONST_2]] {{.*}} 328f46f5a01STom Eccles!CHECK: %[[TYPE_ADDR_IT:.*]] = fir.address_of(@_QFskipped_default_clause_checksE.n.it) : !fir.ref<!fir.char<1,2>> 329f46f5a01STom Eccles!CHECK: %[[VAL_CONST_2_0:.*]] = arith.constant 2 : index 330f46f5a01STom Eccles!CHECK: %[[VAL_IT_DECLARE:.*]]:2 = hlfir.declare %[[TYPE_ADDR_IT]] typeparams %[[VAL_CONST_2_0]] {{.*}} 331f46f5a01STom Eccles!CHECK: %[[VAL_I_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFskipped_default_clause_checksEi"} 332f46f5a01STom Eccles!CHECK: %[[VAL_I_DECLARE:.*]]:2 = hlfir.declare %[[VAL_I_ALLOCA]] {{.*}} 333f46f5a01STom Eccles!CHECK: %[[VAL_III_ALLOCA:.*]] = fir.alloca !fir.type<_QFskipped_default_clause_checksTit{i1:i32}> {bindc_name = "iii", uniq_name = "_QFskipped_default_clause_checksEiii"} 334f46f5a01STom Eccles!CHECK: %[[VAL_III_DECLARE:.*]]:2 = hlfir.declare %[[VAL_III_ALLOCA]] {{.*}} 335f46f5a01STom Eccles!CHECK: %[[VAL_X_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFskipped_default_clause_checksEx"} 336f46f5a01STom Eccles!CHECK: %[[VAL_X_DECLARE:.*]]:2 = hlfir.declare %[[VAL_X_ALLOCA]] {{.*}} 337f46f5a01STom Eccles!CHECK: %[[VAL_Y_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFskipped_default_clause_checksEy"} 338f46f5a01STom Eccles!CHECK: %[[VAL_Y_DECLARE:.*]]:2 = hlfir.declare %[[VAL_Y_ALLOCA]] {{.*}} 339f46f5a01STom Eccles!CHECK: %[[VAL_Z_ALLOCA:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFskipped_default_clause_checksEz"} 340f46f5a01STom Eccles!CHECK: %[[VAL_Z_DECLARE:.*]]:2 = hlfir.declare %[[VAL_Z_ALLOCA]] {{.*}} 341f46f5a01STom Ecclessubroutine skipped_default_clause_checks() 342f46f5a01STom Eccles integer :: x,y,z 343f46f5a01STom Eccles type it 344f46f5a01STom Eccles integer::i1 345f46f5a01STom Eccles end type 346f46f5a01STom Eccles type(it)::iii 347f46f5a01STom Eccles 34810df3207SKareem Ergawy!CHECK: omp.parallel {{.*}} { 349*937cbce1SKareem Ergawy!CHECK: omp.wsloop reduction(byref @min_byref_i32 %[[VAL_Z_DECLARE]]#0 -> %[[PRV:.+]] : !fir.ref<i32>) { 350ca4dbc27SSergio Afonso!CHECK-NEXT: omp.loop_nest (%[[ARG:.*]]) {{.*}} { 351f46f5a01STom Eccles!CHECK: omp.yield 352f46f5a01STom Eccles!CHECK: } 353f46f5a01STom Eccles!CHECK: } 354ca4dbc27SSergio Afonso!CHECK: omp.terminator 355ca4dbc27SSergio Afonso!CHECK: } 356f46f5a01STom Eccles !$omp parallel do default(private) REDUCTION(MIN:z) 357f46f5a01STom Eccles do i = 1, 10 358f46f5a01STom Eccles x = x + MIN(y,x) 359f46f5a01STom Eccles enddo 360f46f5a01STom Eccles !$omp end parallel do 361f46f5a01STom Eccles 362f46f5a01STom Eccles!CHECK: omp.parallel { 363f46f5a01STom Eccles!CHECK: omp.terminator 364f46f5a01STom Eccles!CHECK: } 365f46f5a01STom Eccles namelist /nam/i 366f46f5a01STom Eccles !$omp parallel default(private) 367f46f5a01STom Eccles write(1,nam ) 368f46f5a01STom Eccles !$omp endparallel 369f46f5a01STom Eccles 37010df3207SKareem Ergawy!CHECK: omp.parallel private({{.*}} {{.*}}#0 -> %[[PRIVATE_III:.*]] : {{.*}}) { 37110df3207SKareem Ergawy!CHECK: %[[PRIVATE_III_DECLARE:.*]]:2 = hlfir.declare %[[PRIVATE_III]] {{.*}} 372f46f5a01STom Eccles!CHECK: %[[PRIVATE_ADDR:.*]] = fir.address_of(@_QQro._QFskipped_default_clause_checksTit.0) : !fir.ref<!fir.type<_QFskipped_default_clause_checksTit{i1:i32}>> 373f46f5a01STom Eccles!CHECK: %[[PRIVATE_PARAM:.*]]:2 = hlfir.declare %[[PRIVATE_ADDR]] {{.*}} 374f46f5a01STom Eccles!CHECK: hlfir.assign %[[PRIVATE_PARAM]]#0 to %[[PRIVATE_III_DECLARE]]#0 {{.*}} 375f46f5a01STom Eccles!CHECK: omp.terminator 376f46f5a01STom Eccles!CHECK: } 377f46f5a01STom Eccles !$omp parallel default(private) 378f46f5a01STom Eccles iii=it(11) 379f46f5a01STom Eccles !$omp end parallel 380f46f5a01STom Ecclesend subroutine 381