@@ -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,13 @@ 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 =
225
+ ! "_QFnested_default_clause_testsEx"}
224
226
! 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
227
! CHECK: %[[PRIVATE_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_default_clause_testsEy"}
226
228
! 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
229
! CHECK: %[[PRIVATE_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_default_clause_testsEz"}
228
230
! 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
231
! CHECK: omp.parallel {
232
232
! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
233
233
! 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 +242,16 @@ subroutine nested_default_clause_tests
242
242
! CHECK: omp.terminator
243
243
! CHECK: }
244
244
! CHECK: omp.parallel {
245
+ ! CHECK: %[[PRIVATE_INNER_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name =
246
+ ! "_QFnested_default_clause_testsEz"}
247
+ ! CHECK: %[[PRIVATE_INNER_Z_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_INNER_Z]] {uniq_name =
248
+ ! "_QFnested_default_clause_testsEz"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
245
249
! CHECK: %[[PRIVATE_INNER_W:.*]] = fir.alloca i32 {bindc_name = "w", pinned, uniq_name = "_QFnested_default_clause_testsEw"}
246
250
! 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
251
! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
248
252
! 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
253
! 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>
254
+ ! CHECK: %[[TEMP_2:.*]] = fir.load %[[PRIVATE_INNER_Z_DECL ]]#0 : !fir.ref<i32>
251
255
! CHECK: %[[RESULT:.*]] = arith.addi %{{.*}}, %{{.*}} : i32
252
256
! CHECK: hlfir.assign %[[RESULT]] to %[[PRIVATE_INNER_W_DECL]]#0 : i32, !fir.ref<i32>
253
257
! CHECK: omp.terminator
@@ -384,6 +388,7 @@ subroutine skipped_default_clause_checks()
384
388
! $omp end parallel
385
389
end subroutine
386
390
391
+
387
392
! CHECK: func.func @_QPthreadprivate_with_default() {
388
393
! CHECK: %[[VAR_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFthreadprivate_with_defaultEi"}
389
394
! CHECK: %[[VAR_I_DECLARE:.*]] = hlfir.declare %[[VAR_I]] {uniq_name = "_QFthreadprivate_with_defaultEi"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
@@ -412,3 +417,49 @@ subroutine threadprivate_with_default
412
417
end do
413
418
! $omp end parallel do
414
419
end subroutine
420
+
421
+ subroutine nested_constructs
422
+ ! CHECK: %[[I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFnested_constructsEi"}
423
+ ! CHECK: %[[I_DECL:.*]]:2 = hlfir.declare %[[I]] {{.*}}
424
+ ! CHECK: %[[J:.*]] = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFnested_constructsEj"}
425
+ ! CHECK: %[[J_DECL:.*]]:2 = hlfir.declare %[[J]] {{.*}}
426
+ ! CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFnested_constructsEy"}
427
+ ! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {{.*}}
428
+ ! CHECK: %[[Z:.*]] = fir.alloca i32 {bindc_name = "z", uniq_name = "_QFnested_constructsEz"}
429
+ ! CHECK: %[[Z_DECL:.*]]:2 = hlfir.declare %[[Z]] {{.*}}
430
+
431
+ integer :: y, z
432
+ ! CHECK: omp.parallel {
433
+ ! CHECK: %[[INNER_J:.*]] = fir.alloca i32 {bindc_name = "j", pinned}
434
+ ! CHECK: %[[INNER_J_DECL:.*]]:2 = hlfir.declare %[[INNER_J]] {{.*}}
435
+ ! CHECK: %[[INNER_I:.*]] = fir.alloca i32 {bindc_name = "i", pinned}
436
+ ! CHECK: %[[INNER_I_DECL:.*]]:2 = hlfir.declare %[[INNER_I]] {{.*}}
437
+ ! CHECK: %[[INNER_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_constructsEy"}
438
+ ! CHECK: %[[INNER_Y_DECL:.*]]:2 = hlfir.declare %[[INNER_Y]] {{.*}}
439
+ ! CHECK: %[[TEMP:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<i32>
440
+ ! CHECK: hlfir.assign %[[TEMP]] to %[[INNER_Y_DECL]]#0 temporary_lhs : i32, !fir.ref<i32>
441
+ ! CHECK: %[[INNER_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_constructsEz"}
442
+ ! CHECK: %[[INNER_Z_DECL:.*]]:2 = hlfir.declare %[[INNER_Z]] {{.*}}
443
+ ! $omp parallel default(private) firstprivate(y)
444
+ ! CHECK: {{.*}} = fir.do_loop {{.*}} {
445
+ do i = 1 , 10
446
+ ! CHECK: %[[CONST_1:.*]] = arith.constant 1 : i32
447
+ ! CHECK: hlfir.assign %[[CONST_1]] to %[[INNER_Y_DECL]]#0 : i32, !fir.ref<i32>
448
+ y = 1
449
+ ! CHECK: {{.*}} = fir.do_loop {{.*}} {
450
+ do j = 1 , 10
451
+ ! CHECK: %[[CONST_20:.*]] = arith.constant 20 : i32
452
+ ! CHECK: hlfir.assign %[[CONST_20]] to %[[INNER_Z_DECL]]#0 : i32, !fir.ref<i32>
453
+ z = 20
454
+ ! CHECK: omp.parallel {
455
+ ! CHECK: %[[NESTED_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_constructsEy"}
456
+ ! CHECK: %[[NESTED_Y_DECL:.*]]:2 = hlfir.declare %[[NESTED_Y]] {{.*}}
457
+ ! CHECK: %[[CONST_2:.*]] = arith.constant 2 : i32
458
+ ! CHECK: hlfir.assign %[[CONST_2]] to %[[NESTED_Y_DECL]]#0 : i32, !fir.ref<i32>
459
+ ! $omp parallel default(private)
460
+ y = 2
461
+ ! $omp end parallel
462
+ end do
463
+ end do
464
+ ! $omp end parallel
465
+ end subroutine
0 commit comments