@@ -149,7 +149,7 @@ program default_clause_lowering
149149end program default_clause_lowering
150150
151151subroutine nested_default_clause_tests
152- integer :: x, y, z, w, k, a
152+ integer :: x, y, z, w, k
153153! CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFnested_default_clause_testsEk"}
154154! CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFnested_default_clause_testsEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
155155! CHECK: %[[W:.*]] = fir.alloca i32 {bindc_name = "w", uniq_name = "_QFnested_default_clause_testsEw"}
@@ -221,13 +221,13 @@ subroutine nested_default_clause_tests
221221
222222
223223! CHECK: omp.parallel {
224+ ! CHECK: %[[PRIVATE_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name =
225+ ! "_QFnested_default_clause_testsEx"}
224226! CHECK: %[[PRIVATE_X_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_X]] {uniq_name = "_QFnested_default_clause_testsEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
225227! CHECK: %[[PRIVATE_Y:.*]] = fir.alloca i32 {bindc_name = "y", pinned, uniq_name = "_QFnested_default_clause_testsEy"}
226228! CHECK: %[[PRIVATE_Y_DECL:.*]]:2 = hlfir.declare %[[PRIVATE_Y]] {uniq_name = "_QFnested_default_clause_testsEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
227229! CHECK: %[[PRIVATE_Z:.*]] = fir.alloca i32 {bindc_name = "z", pinned, uniq_name = "_QFnested_default_clause_testsEz"}
228230! 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>)
231231! CHECK: omp.parallel {
232232! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
233233! 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
242242! CHECK: omp.terminator
243243! CHECK: }
244244! 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>)
245249! CHECK: %[[PRIVATE_INNER_W:.*]] = fir.alloca i32 {bindc_name = "w", pinned, uniq_name = "_QFnested_default_clause_testsEw"}
246250! 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>)
247251! CHECK: %[[PRIVATE_INNER_X:.*]] = fir.alloca i32 {bindc_name = "x", pinned, uniq_name = "_QFnested_default_clause_testsEx"}
248252! 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>)
249253! 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>
251255! CHECK: %[[RESULT:.*]] = arith.addi %{{.*}}, %{{.*}} : i32
252256! CHECK: hlfir.assign %[[RESULT]] to %[[PRIVATE_INNER_W_DECL]]#0 : i32, !fir.ref<i32>
253257! CHECK: omp.terminator
@@ -384,6 +388,7 @@ subroutine skipped_default_clause_checks()
384388 ! $omp end parallel
385389end subroutine
386390
391+
387392! CHECK: func.func @_QPthreadprivate_with_default() {
388393! CHECK: %[[VAR_I:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFthreadprivate_with_defaultEi"}
389394! 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
412417 end do
413418 ! $omp end parallel do
414419end 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