| ! Check that acc.terminator is not inserted in data construct |
| |
| ! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s |
| |
| program main |
| use, intrinsic :: iso_c_binding |
| implicit none |
| |
| real(8), pointer :: a(:,:,:),b(:,:,:),c(:,:,:),c2(:,:,:) |
| integer, parameter :: n1 = 400, n2 = 20 |
| integer*4 :: stat |
| integer :: i,j,k |
| |
| stat = 0 |
| do i=1,n2 |
| |
| !$acc data copyin(a(:,:,i),b(:,:,i),c(:,:,i)) copyout(c2(:,:,i)) |
| |
| !$acc host_data use_device(a(:,:,i),b(:,:,i),c(:,:,i)) |
| |
| !$acc end host_data |
| |
| if ( stat .ne. 0 ) then |
| print *, "stat = ",stat |
| stop ! terminator here should be fir.unreachable |
| end if |
| |
| !$acc parallel loop present(c(:,:,i),c2(:,:,i)) |
| do j = 1,n1 |
| do k = 1,n1 |
| c2(k,j,i) = 1.5d0 * c(k,j,i) |
| enddo |
| enddo |
| !$acc end parallel loop |
| |
| !$acc end data |
| |
| enddo |
| |
| !$acc wait |
| |
| deallocate(a,b,c,c2) |
| end program |
| |
| ! CHECK-LABEL: func.func @_QQmain() |
| ! CHECK: acc.data |
| ! CHECK: acc.host_data |
| ! CHECK: acc.terminator |
| ! CHECK: fir.call @_FortranAStopStatement |
| ! CHECK: fir.unreachable |
| ! CHECK: acc.parallel |
| ! CHECK-COUNT-3: acc.yield |
| ! CHECK: acc.terminator |