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