@@ -149,7 +149,7 @@ program default_clause_lowering
149
149
end program default_clause_lowering
150
150
151
151
subroutine nested_default_clause_tests
152
- integer :: x, y, z, w, k, a
152
+ integer :: x, y, z, w, k
153
153
! CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFnested_default_clause_testsEk"}
154
154
! CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFnested_default_clause_testsEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
155
155
! CHECK: %[[W:.*]] = fir.alloca i32 {bindc_name = "w", uniq_name = "_QFnested_default_clause_testsEw"}
@@ -221,13 +221,12 @@ subroutine nested_default_clause_tests
221
221
222
222
223
223
! CHECK: omp.parallel {
224
+ ! CHECK: %[[PRIVATE_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
224
225
! CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
225
226
! CHECK: %[[PRIVATE_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_default_clause_testsEy"}
226
227
! CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
227
228
! CHECK: %[[PRIVATE_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_default_clause_testsEz"}
228
229
! CHECK: %[[PRIVATE_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
229
- ! CHECK: %[[PRIVATE_W:.*]] = fir.alloca i32 {bindc_name = "w", pinned, uniq_name = "_QFnested_default_clause_testsEw"}
230
- ! CHECK: %[[PRIVATE_W_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_W]] {uniq_name = "_QFnested_default_clause_testsEw"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
231
230
! CHECK: omp.parallel {
232
231
! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
233
232
! 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>)
@@ -242,12 +241,14 @@ subroutine nested_default_clause_tests
242
241
! CHECK: omp.terminator
243
242
! CHECK: }
244
243
! CHECK: omp.parallel {
244
+ ! CHECK: %[[PRIVATE_INNER_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_default_clause_testsEz"}
245
+ ! CHECK: %[[PRIVATE_INNER_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_INNER_Z]] {uniq_name = "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
245
246
! CHECK: %[[PRIVATE_INNER_W:.*]] = fir.alloca i32 {bindc_name = "w", pinned, uniq_name = "_QFnested_default_clause_testsEw"}
246
247
! 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>)
247
248
! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
248
249
! 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>)
249
250
! CHECK: %[[TEMP_1:.*]] = fir.load %[[PRIVATE_INNER_X_DECL]]#0 : !fir.ref<i32>
250
- ! CHECK: %[[TEMP_2:.*]] = fir.load %[[PRIVATE_Z_DECL ]]#0 : !fir.ref<i32>
251
+ ! CHECK: %[[TEMP_2:.*]] = fir.load %[[PRIVATE_INNER_Z_DECL ]]#0 : !fir.ref<i32>
251
252
! CHECK: %[[RESULT:.*]] = arith.addi %{{.*}}, %{{.*}} : i32
252
253
! CHECK: hlfir.assign %[[RESULT]] to %[[PRIVATE_INNER_W_DECL]]#0 : i32, !fir.ref<i32>
253
254
! CHECK: omp.terminator
@@ -415,3 +416,49 @@ subroutine threadprivate_with_default
415
416
end do
416
417
! $omp end parallel do
417
418
end subroutine
419
+
420
+ subroutine nested_constructs
421
+ ! CHECK: %[[I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFnested_constructsEi"}
422
+ ! CHECK: %[[I_DECL:.*]]:2 = hlfir.declare %[[I]] {{.*}}
423
+ ! CHECK: %[[J:.*]] = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFnested_constructsEj"}
424
+ ! CHECK: %[[J_DECL:.*]]:2 = hlfir.declare %[[J]] {{.*}}
425
+ ! CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFnested_constructsEy"}
426
+ ! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {{.*}}
427
+ ! CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFnested_constructsEz"}
428
+ ! CHECK: %[[Z_DECL:.*]]:2 = hlfir.declare %[[Z]] {{.*}}
429
+
430
+ integer :: y, z
431
+ ! CHECK: omp.parallel {
432
+ ! CHECK: %[[INNER_J:.*]] = fir.alloca i32 {bindc_name = "j", pinned}
433
+ ! CHECK: %[[INNER_J_DECL:.*]]:2 = hlfir.declare %[[INNER_J]] {{.*}}
434
+ ! CHECK: %[[INNER_I:.*]] = fir.alloca i32 {bindc_name = "i", pinned}
435
+ ! CHECK: %[[INNER_I_DECL:.*]]:2 = hlfir.declare %[[INNER_I]] {{.*}}
436
+ ! CHECK: %[[INNER_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_constructsEy"}
437
+ ! CHECK: %[[INNER_Y_DECL:.*]]:2 = hlfir.declare %[[INNER_Y]] {{.*}}
438
+ ! CHECK: %[[TEMP:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<i32>
439
+ ! CHECK: hlfir.assign %[[TEMP]] to %[[INNER_Y_DECL]]#0 temporary_lhs : i32, !fir.ref<i32>
440
+ ! CHECK: %[[INNER_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_constructsEz"}
441
+ ! CHECK: %[[INNER_Z_DECL:.*]]:2 = hlfir.declare %[[INNER_Z]] {{.*}}
442
+ ! $omp parallel default(private) firstprivate(y)
443
+ ! CHECK: {{.*}} = fir.do_loop {{.*}} {
444
+ do i = 1 , 10
445
+ ! CHECK: %[[CONST_1:.*]] = arith.constant 1 : i32
446
+ ! CHECK: hlfir.assign %[[CONST_1]] to %[[INNER_Y_DECL]]#0 : i32, !fir.ref<i32>
447
+ y = 1
448
+ ! CHECK: {{.*}} = fir.do_loop {{.*}} {
449
+ do j = 1 , 10
450
+ ! CHECK: %[[CONST_20:.*]] = arith.constant 20 : i32
451
+ ! CHECK: hlfir.assign %[[CONST_20]] to %[[INNER_Z_DECL]]#0 : i32, !fir.ref<i32>
452
+ z = 20
453
+ ! CHECK: omp.parallel {
454
+ ! CHECK: %[[NESTED_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_constructsEy"}
455
+ ! CHECK: %[[NESTED_Y_DECL:.*]]:2 = hlfir.declare %[[NESTED_Y]] {{.*}}
456
+ ! CHECK: %[[CONST_2:.*]] = arith.constant 2 : i32
457
+ ! CHECK: hlfir.assign %[[CONST_2]] to %[[NESTED_Y_DECL]]#0 : i32, !fir.ref<i32>
458
+ ! $omp parallel default(private)
459
+ y = 2
460
+ ! $omp end parallel
461
+ end do
462
+ end do
463
+ ! $omp end parallel
464
+ end subroutine
0 commit comments