brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · c54b804 Raw
209 lines · plain
1! REQUIRES: openmp_runtime2 3!RUN: %flang_fc1 -emit-hlfir %openmp_flags %s -o - | FileCheck %s4 5!CHECK-LABEL: func @_QPparallel_simple6subroutine parallel_simple()7   !CHECK: omp.parallel8!$omp parallel9   !CHECK: fir.call10   call f1()11!$omp end parallel12end subroutine parallel_simple13 14!===============================================================================15! `if` clause16!===============================================================================17 18!CHECK-LABEL: func @_QPparallel_if19subroutine parallel_if(alpha, beta, gamma)20   integer, intent(in) :: alpha21   logical, intent(in) :: beta22   logical(1) :: logical123   logical(2) :: logical224   logical(4) :: logical425   logical(8) :: logical826 27   !CHECK: omp.parallel if(%{{.*}}) {28   !$omp parallel if(alpha .le. 0)29   !CHECK: fir.call30   call f1()31   !CHECK: omp.terminator32   !$omp end parallel33 34   !CHECK: omp.parallel if(%{{.*}}) {35   !$omp parallel if(.false.)36   !CHECK: fir.call37   call f2()38   !CHECK: omp.terminator39   !$omp end parallel40 41   !CHECK: omp.parallel if(%{{.*}}) {42   !$omp parallel if(alpha .ge. 0)43   !CHECK: fir.call44   call f3()45   !CHECK: omp.terminator46   !$omp end parallel47 48   !CHECK: omp.parallel if(%{{.*}}) {49   !$omp parallel if(.true.)50   !CHECK: fir.call51   call f4()52   !CHECK: omp.terminator53   !$omp end parallel54 55   !CHECK: omp.parallel if(%{{.*}}) {56   !$omp parallel if(beta)57   !CHECK: fir.call58   call f1()59   !CHECK: omp.terminator60   !$omp end parallel61 62   !CHECK: omp.parallel if(%{{.*}}) {63   !$omp parallel if(logical1)64   !CHECK: fir.call65   call f1()66   !CHECK: omp.terminator67   !$omp end parallel68 69   !CHECK: omp.parallel if(%{{.*}}) {70   !$omp parallel if(logical2)71   !CHECK: fir.call72   call f1()73   !CHECK: omp.terminator74   !$omp end parallel75 76   !CHECK: omp.parallel if(%{{.*}}) {77   !$omp parallel if(logical4)78   !CHECK: fir.call79   call f1()80   !CHECK: omp.terminator81   !$omp end parallel82 83   !CHECK: omp.parallel if(%{{.*}}) {84   !$omp parallel if(logical8)85   !CHECK: fir.call86   call f1()87   !CHECK: omp.terminator88   !$omp end parallel89 90end subroutine parallel_if91 92!===============================================================================93! `num_threads` clause94!===============================================================================95 96!CHECK-LABEL: func @_QPparallel_numthreads97subroutine parallel_numthreads(num_threads)98   integer, intent(inout) :: num_threads99 100   !CHECK: omp.parallel num_threads(%{{.*}}: i32) {101   !$omp parallel num_threads(16)102   !CHECK: fir.call103   call f1()104   !CHECK: omp.terminator105   !$omp end parallel106 107   num_threads = 4108 109   !CHECK: omp.parallel num_threads(%{{.*}} : i32) {110   !$omp parallel num_threads(num_threads)111   !CHECK: fir.call112   call f2()113   !CHECK: omp.terminator114   !$omp end parallel115 116end subroutine parallel_numthreads117 118!===============================================================================119! `proc_bind` clause120!===============================================================================121 122!CHECK-LABEL: func @_QPparallel_proc_bind123subroutine parallel_proc_bind()124 125   !CHECK: omp.parallel proc_bind(master) {126   !$omp parallel proc_bind(master)127   !CHECK: fir.call128   call f1()129   !CHECK: omp.terminator130   !$omp end parallel131 132   !CHECK: omp.parallel proc_bind(close) {133   !$omp parallel proc_bind(close)134   !CHECK: fir.call135   call f2()136   !CHECK: omp.terminator137   !$omp end parallel138 139   !CHECK: omp.parallel proc_bind(spread) {140   !$omp parallel proc_bind(spread)141   !CHECK: fir.call142   call f3()143   !CHECK: omp.terminator144   !$omp end parallel145 146end subroutine parallel_proc_bind147 148!===============================================================================149! `allocate` clause150!===============================================================================151 152!CHECK-LABEL: func @_QPparallel_allocate153subroutine parallel_allocate()154   use omp_lib155   integer :: x156   !CHECK: omp.parallel allocate(157   !CHECK: %{{.+}} : i64 -> %{{.+}} : !fir.ref<i32>158   !CHECK: ) {159   !$omp parallel allocate(omp_high_bw_mem_alloc: x) private(x)160   !CHECK: arith.addi161   x = x + 12162   !CHECK: omp.terminator163   !$omp end parallel164end subroutine parallel_allocate165 166!===============================================================================167! multiple clauses168!===============================================================================169 170!CHECK-LABEL: func @_QPparallel_multiple_clauses171subroutine parallel_multiple_clauses(alpha, num_threads)172   use omp_lib173   integer, intent(inout) :: alpha174   integer, intent(in) :: num_threads175 176   !CHECK: omp.parallel if({{.*}}) proc_bind(master) {177   !$omp parallel if(alpha .le. 0) proc_bind(master)178   !CHECK: fir.call179   call f1()180   !CHECK: omp.terminator181   !$omp end parallel182 183   !CHECK: omp.parallel num_threads({{.*}} : i32) proc_bind(close) {184   !$omp parallel proc_bind(close) num_threads(num_threads)185   !CHECK: fir.call186   call f2()187   !CHECK: omp.terminator188   !$omp end parallel189 190   !CHECK: omp.parallel if({{.*}}) num_threads({{.*}} : i32) {191   !$omp parallel num_threads(num_threads) if(alpha .le. 0)192   !CHECK: fir.call193   call f3()194   !CHECK: omp.terminator195   !$omp end parallel196 197   !CHECK: omp.parallel allocate(%{{.+}} : i64 -> %{{.+}}#0 : !fir.ref<i32>)198   !CHECK: if({{.*}}) num_threads({{.*}} : i32)199   !CHECK: private(@{{.+}} %{{.+}}#0 -> %{{.+}} : !fir.ref<i32>) {200   !$omp parallel num_threads(num_threads) if(alpha .le. 0) allocate(omp_high_bw_mem_alloc: alpha) private(alpha)201   !CHECK: fir.call202   call f3()203   !CHECK: arith.addi204   alpha = alpha + 12205   !CHECK: omp.terminator206   !$omp end parallel207 208end subroutine parallel_multiple_clauses209