Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions flang/lib/Lower/Runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ static void genUnreachable(fir::FirOpBuilder &builder, mlir::Location loc) {
if (parentOp->getDialect()->getNamespace() ==
mlir::omp::OpenMPDialect::getDialectNamespace())
Fortran::lower::genOpenMPTerminator(builder, parentOp, loc);
else if (parentOp->getDialect()->getNamespace() ==
mlir::acc::OpenACCDialect::getDialectNamespace())
else if (Fortran::lower::isInsideOpenACCComputeConstruct(builder))
Fortran::lower::genOpenACCTerminator(builder, parentOp, loc);
else
fir::UnreachableOp::create(builder, loc);
Expand Down
53 changes: 53 additions & 0 deletions flang/test/Lower/OpenACC/acc-terminator.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
! 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
Loading