xref: /llvm-project/flang/test/Lower/branching-directive.f90 (revision c1b5b7c19b76f8d153f7ae9350d217b74888ed93)
1!RUN: bbc -emit-hlfir -fopenacc -fopenmp -o - %s | FileCheck %s
2
3!https://github.com/llvm/llvm-project/issues/91526
4
5!CHECK-LABEL: func.func @_QPsimple1
6!CHECK:   cf.cond_br %{{[0-9]+}}, ^bb[[THEN:[0-9]+]], ^bb[[ELSE:[0-9]+]]
7!CHECK: ^bb[[THEN]]:
8!CHECK:   omp.parallel
9!CHECK:   cf.br ^bb[[ENDIF:[0-9]+]]
10!CHECK: ^bb[[ELSE]]:
11!CHECK:   fir.call @_FortranAStopStatement
12!CHECK:   fir.unreachable
13!CHECK: ^bb[[ENDIF]]:
14!CHECK:   return
15
16subroutine simple1(y)
17  implicit none
18  logical, intent(in) :: y
19  integer :: i
20  if (y) then
21    !$omp parallel
22    i = 1
23    !$omp end parallel
24  else
25    stop 1
26  end if
27end subroutine
28
29!CHECK-LABEL: func.func @_QPsimple2
30!CHECK:   cf.cond_br %{{[0-9]+}}, ^bb[[THEN:[0-9]+]], ^bb[[ELSE:[0-9]+]]
31!CHECK: ^bb[[THEN]]:
32!CHECK:   omp.parallel
33!CHECK:   cf.br ^bb[[ENDIF:[0-9]+]]
34!CHECK: ^bb[[ELSE]]:
35!CHECK:   fir.call @_FortranAStopStatement
36!CHECK:   fir.unreachable
37!CHECK: ^bb[[ENDIF]]:
38!CHECK:   fir.call @_FortranAioOutputReal64
39!CHECK:   return
40subroutine simple2(x, yn)
41  implicit none
42  logical, intent(in) :: yn
43  integer, intent(in) :: x
44  integer :: i
45  real(8) :: E
46  E = 0d0
47
48  if (yn) then
49     !$omp parallel do private(i) reduction(+:E)
50     do i = 1, x
51        E = E + i
52     end do
53     !$omp end parallel do
54  else
55     stop 1
56  end if
57  print *, E
58end subroutine
59
60!CHECK-LABEL: func.func @_QPacccase
61!CHECK: fir.select_case %{{[0-9]+}} : i32 [{{.*}}, ^bb[[CASE1:[0-9]+]], {{.*}}, ^bb[[CASE2:[0-9]+]], {{.*}}, ^bb[[CASE3:[0-9]+]]]
62!CHECK: ^bb[[CASE1]]:
63!CHECK:   acc.serial
64!CHECK:   cf.br ^bb[[EXIT:[0-9]+]]
65!CHECK: ^bb[[CASE2]]:
66!CHECK:   fir.call @_FortranAioOutputAscii
67!CHECK:   cf.br ^bb[[EXIT]]
68!CHECK: ^bb[[CASE3]]:
69!CHECK:   fir.call @_FortranAioOutputAscii
70!CHECK:   cf.br ^bb[[EXIT]]
71!CHECK: ^bb[[EXIT]]:
72!CHECK:   return
73subroutine acccase(var)
74  integer :: var
75  integer :: res(10)
76  select case (var)
77    case (1)
78      print *, "case 1"
79      !$acc serial
80      res(1) = 1
81      !$acc end serial
82    case (2)
83      print *, "case 2"
84    case default
85      print *, "case default"
86  end select
87end subroutine
88
89