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