| ! Offloading test for generic target regions containing different kinds of | |
| ! loop constructs inside. | |
| ! REQUIRES: flang, amdgpu | |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic | |
| program main | |
| integer :: i1, i2, n1, n2, counter | |
| n1 = 100 | |
| n2 = 50 | |
| counter = 0 | |
| !$omp target map(tofrom:counter) | |
| !$omp teams distribute reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| !$omp end target | |
| ! CHECK: 1 100 | |
| print '(I2" "I0)', 1, counter | |
| counter = 0 | |
| !$omp target map(tofrom:counter) | |
| !$omp parallel do reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| !$omp parallel do reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| !$omp end target | |
| ! CHECK: 2 200 | |
| print '(I2" "I0)', 2, counter | |
| counter = 0 | |
| !$omp target map(tofrom:counter) | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| !$omp end target | |
| ! CHECK: 3 203 | |
| print '(I2" "I0)', 3, counter | |
| counter = 0 | |
| !$omp target map(tofrom: counter) | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| !$omp end target | |
| ! CHECK: 4 102 | |
| print '(I2" "I0)', 4, counter | |
| counter = 0 | |
| !$omp target teams distribute reduction(+:counter) | |
| do i1=1, n1 | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| end do | |
| ! CHECK: 5 5000 | |
| print '(I2" "I0)', 5, counter | |
| counter = 0 | |
| !$omp target teams distribute reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| end do | |
| ! CHECK: 6 5200 | |
| print '(I2" "I0)', 6, counter | |
| counter = 0 | |
| !$omp target teams distribute reduction(+:counter) | |
| do i1=1, n1 | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| end do | |
| ! CHECK: 7 10000 | |
| print '(I2" "I0)', 7, counter | |
| counter = 0 | |
| !$omp target teams distribute reduction(+:counter) | |
| do i1=1, n1 | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| !$omp parallel do reduction(+:counter) | |
| do i2=1, n2 | |
| counter = counter + 1 | |
| end do | |
| counter = counter + 1 | |
| end do | |
| ! CHECK: 8 10300 | |
| print '(I2" "I0)', 8, counter | |
| end program |