nested-function-1.f90 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. ! Exercise nested function decomposition, gcc/tree-nested.c.
  2. ! { dg-do run }
  3. ! { dg-options "-std=legacy" }
  4. program collapse2
  5. call test1
  6. call test2
  7. contains
  8. subroutine test1
  9. integer :: i, j, k, a(1:3, 4:6, 5:7)
  10. logical :: l
  11. l = .false.
  12. a(:, :, :) = 0
  13. !$acc parallel reduction (.or.:l)
  14. !$acc loop worker vector collapse(4 - 1)
  15. do 164 i = 1, 3
  16. do 164 j = 4, 6
  17. do 164 k = 5, 7
  18. a(i, j, k) = i + j + k
  19. 164 end do
  20. !$acc loop worker vector reduction(.or.:l) collapse(2)
  21. firstdo: do i = 1, 3
  22. do j = 4, 6
  23. do k = 5, 7
  24. if (a(i, j, k) .ne. (i + j + k)) l = .true.
  25. end do
  26. end do
  27. end do firstdo
  28. !$acc end parallel
  29. if (l) STOP 1
  30. end subroutine test1
  31. subroutine test2
  32. integer :: a(3,3,3), k, kk, kkk, l, ll, lll
  33. a = 0
  34. !$acc parallel num_workers(8)
  35. ! Use "gang(static:1)" here and below to effectively turn gang-redundant
  36. ! execution mode into something like gang-single.
  37. !$acc loop gang(static:1) collapse(1)
  38. do 115 k=1,3
  39. !$acc loop collapse(2)
  40. dokk: do kk=1,3
  41. do kkk=1,3
  42. a(k,kk,kkk) = 1
  43. enddo
  44. enddo dokk
  45. 115 continue
  46. !$acc loop gang(static:1) collapse(1)
  47. do k=1,3
  48. if (any(a(k,1:3,1:3).ne.1)) STOP 2
  49. enddo
  50. ! Use "gang(static:1)" here and below to effectively turn gang-redundant
  51. ! execution mode into something like gang-single.
  52. !$acc loop gang(static:1) collapse(1)
  53. dol: do 120 l=1,3
  54. !$acc loop collapse(2)
  55. doll: do ll=1,3
  56. do lll=1,3
  57. a(l,ll,lll) = 2
  58. enddo
  59. enddo doll
  60. 120 end do dol
  61. !$acc loop gang(static:1) collapse(1)
  62. do l=1,3
  63. if (any(a(l,1:3,1:3).ne.2)) STOP 3
  64. enddo
  65. !$acc end parallel
  66. end subroutine test2
  67. end program collapse2