| ! 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 |