Handle implicit firstprivate DSAs on task generating constructs. Fixes https://github.com/llvm/llvm-project/issues/64480
159 lines
5.4 KiB
Fortran
159 lines
5.4 KiB
Fortran
! RUN: %python %S/../test_symbols.py %s %flang_fc1 -fopenmp
|
|
|
|
! Test symbols generated in block constructs that have implicitly
|
|
! determined DSAs.
|
|
|
|
! Basic cases.
|
|
!DEF: /implicit_dsa_test1 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test1
|
|
!DEF: /implicit_dsa_test1/i ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test1/x ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test1/y ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test1/z ObjectEntity INTEGER(4)
|
|
integer i, x, y, z
|
|
|
|
!$omp task private(y) shared(z)
|
|
!DEF: /implicit_dsa_test1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
!DEF: /implicit_dsa_test1/OtherConstruct1/y (OmpPrivate) HostAssoc INTEGER(4)
|
|
!REF: /implicit_dsa_test1/z
|
|
x = y + z
|
|
!$omp end task
|
|
|
|
!$omp task default(shared)
|
|
!REF: /implicit_dsa_test1/x
|
|
!REF: /implicit_dsa_test1/y
|
|
!REF: /implicit_dsa_test1/z
|
|
x = y + z
|
|
!$omp end task
|
|
|
|
!$omp taskloop
|
|
!DEF: /implicit_dsa_test1/OtherConstruct3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i = 0, 10
|
|
!DEF: /implicit_dsa_test1/OtherConstruct3/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
!DEF: /implicit_dsa_test1/OtherConstruct3/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
!REF: /implicit_dsa_test1/OtherConstruct3/i
|
|
x = y + i
|
|
end do
|
|
!$omp end taskloop
|
|
end subroutine
|
|
|
|
! Nested task with implicit firstprivate DSA variable.
|
|
!DEF: /implicit_dsa_test2 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test2
|
|
!DEF: /implicit_dsa_test2/x ObjectEntity INTEGER(4)
|
|
integer x
|
|
|
|
!$omp task
|
|
!$omp task
|
|
!DEF: /implicit_dsa_test2/OtherConstruct1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
x = 1
|
|
!$omp end task
|
|
!$omp end task
|
|
end subroutine
|
|
|
|
! Nested tasks with implicit shared DSA variables.
|
|
!DEF: /implicit_dsa_test3 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test3
|
|
!DEF: /implicit_dsa_test3/x ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test3/y ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test3/z ObjectEntity INTEGER(4)
|
|
integer x, y, z
|
|
|
|
!$omp parallel
|
|
!$omp task
|
|
!REF: /implicit_dsa_test3/x
|
|
x = 1
|
|
!REF: /implicit_dsa_test3/y
|
|
y = 1
|
|
!$omp end task
|
|
|
|
!$omp task firstprivate(x)
|
|
!DEF: /implicit_dsa_test3/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate) HostAssoc INTEGER(4)
|
|
x = 1
|
|
!REF: /implicit_dsa_test3/z
|
|
z = 1
|
|
!$omp end task
|
|
!$omp end parallel
|
|
end subroutine
|
|
|
|
! Task with implicit firstprivate DSA variables, enclosed in private context.
|
|
!DEF: /implicit_dsa_test4 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test4
|
|
!DEF: /implicit_dsa_test4/x ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test4/y ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test4/z ObjectEntity INTEGER(4)
|
|
integer x, y, z
|
|
|
|
!$omp parallel default(private)
|
|
!$omp task
|
|
!DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
x = 0
|
|
!DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct1/z (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
z = 1
|
|
!$omp end task
|
|
|
|
!$omp task
|
|
!DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
x = 1
|
|
!DEF: /implicit_dsa_test4/OtherConstruct1/OtherConstruct2/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
y = 0
|
|
!$omp end task
|
|
!$omp end parallel
|
|
end subroutine
|
|
|
|
! Inner parallel using implicit firstprivate symbol.
|
|
!DEF: /implicit_dsa_test5 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test5
|
|
!DEF: /implicit_dsa_test5/x ObjectEntity INTEGER(4)
|
|
integer x
|
|
|
|
!$omp parallel default(private)
|
|
!$omp task
|
|
!$omp parallel
|
|
!DEF: /implicit_dsa_test5/OtherConstruct1/OtherConstruct1/OtherConstruct1/x HostAssoc INTEGER(4)
|
|
x = 1
|
|
!$omp end parallel
|
|
!$omp end task
|
|
!$omp end parallel
|
|
end subroutine
|
|
|
|
! Constructs nested inside a task with implicit DSA variables.
|
|
!DEF: /implicit_dsa_test6 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test6
|
|
!DEF: /implicit_dsa_test6/x ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test6/y ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test6/z ObjectEntity INTEGER(4)
|
|
integer x, y, z
|
|
|
|
!$omp task
|
|
!$omp parallel default(private)
|
|
!DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct1/x (OmpPrivate) HostAssoc INTEGER(4)
|
|
!DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct1/y (OmpPrivate) HostAssoc INTEGER(4)
|
|
x = y
|
|
!$omp end parallel
|
|
|
|
!$omp parallel default(firstprivate) shared(y)
|
|
!DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/y HostAssoc INTEGER(4)
|
|
!DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/x (OmpFirstPrivate) HostAssocINTEGER(4)
|
|
!DEF: /implicit_dsa_test6/OtherConstruct1/OtherConstruct2/z (OmpFirstPrivate) HostAssocINTEGER(4)
|
|
y = x + z
|
|
!$omp end parallel
|
|
!$omp end task
|
|
end subroutine
|
|
|
|
! Test taskgroup - it uses the same scope as task.
|
|
!DEF: /implicit_dsa_test7 (Subroutine) Subprogram
|
|
subroutine implicit_dsa_test7
|
|
!DEF: /implicit_dsa_test7/x ObjectEntity INTEGER(4)
|
|
!DEF: /implicit_dsa_test7/y ObjectEntity INTEGER(4)
|
|
integer x, y
|
|
|
|
!$omp task
|
|
!$omp taskgroup
|
|
!DEF: /implicit_dsa_test7/OtherConstruct1/x (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
!DEF: /implicit_dsa_test7/OtherConstruct1/y (OmpFirstPrivate, OmpImplicit) HostAssoc INTEGER(4)
|
|
x = y
|
|
!$omp end taskgroup
|
|
!$omp end task
|
|
end subroutine
|