xref: /llvm-project/flang/test/Lower/OpenMP/default-clause-byref.f90 (revision 937cbce14c9aa956342a9c818c26a8a557802843)
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