llvm/flang/test/Lower/branching-directive.f90

!RUN: bbc -emit-hlfir -fopenacc -fopenmp -o - %s | FileCheck %s

!https://github.com/llvm/llvm-project/issues/91526

!CHECK-LABEL: func.func @_QPsimple1
!CHECK:   cf.cond_br %{{[0-9]+}}, ^bb[[THEN:[0-9]+]], ^bb[[ELSE:[0-9]+]]
!CHECK: ^bb[[THEN]]:
!CHECK:   omp.parallel
!CHECK:   cf.br ^bb[[ENDIF:[0-9]+]]
!CHECK: ^bb[[ELSE]]:
!CHECK:   fir.call @_FortranAStopStatement
!CHECK:   fir.unreachable
!CHECK: ^bb[[ENDIF]]:
!CHECK:   return

subroutine simple1(y)
  implicit none
  logical, intent(in) :: y
  integer :: i
  if (y) then
    !$omp parallel
    i = 1
    !$omp end parallel
  else
    stop 1
  end if
end subroutine

!CHECK-LABEL: func.func @_QPsimple2
!CHECK:   cf.cond_br %{{[0-9]+}}, ^bb[[THEN:[0-9]+]], ^bb[[ELSE:[0-9]+]]
!CHECK: ^bb[[THEN]]:
!CHECK:   omp.parallel
!CHECK:   cf.br ^bb[[ENDIF:[0-9]+]]
!CHECK: ^bb[[ELSE]]:
!CHECK:   fir.call @_FortranAStopStatement
!CHECK:   fir.unreachable
!CHECK: ^bb[[ENDIF]]:
!CHECK:   fir.call @_FortranAioOutputReal64
!CHECK:   return
subroutine simple2(x, yn)
  implicit none
  logical, intent(in) :: yn
  integer, intent(in) :: x
  integer :: i
  real(8) :: E
  E = 0d0

  if (yn) then
     !$omp parallel do private(i) reduction(+:E)
     do i = 1, x
        E = E + i
     end do
     !$omp end parallel do
  else
     stop 1
  end if
  print *, E
end subroutine

!CHECK-LABEL: func.func @_QPacccase
!CHECK: fir.select_case %{{[0-9]+}} : i32 [{{.*}}, ^bb[[CASE1:[0-9]+]], {{.*}}, ^bb[[CASE2:[0-9]+]], {{.*}}, ^bb[[CASE3:[0-9]+]]]
!CHECK: ^bb[[CASE1]]:
!CHECK:   acc.serial
!CHECK:   cf.br ^bb[[EXIT:[0-9]+]]
!CHECK: ^bb[[CASE2]]:
!CHECK:   fir.call @_FortranAioOutputAscii
!CHECK:   cf.br ^bb[[EXIT]]
!CHECK: ^bb[[CASE3]]:
!CHECK:   fir.call @_FortranAioOutputAscii
!CHECK:   cf.br ^bb[[EXIT]]
!CHECK: ^bb[[EXIT]]:
!CHECK:   return
subroutine acccase(var)
  integer :: var
  integer :: res(10)
  select case (var)
    case (1)
      print *, "case 1"
      !$acc serial
      res(1) = 1
      !$acc end serial
    case (2)
      print *, "case 2"
    case default
      print *, "case default"
  end select
end subroutine