1 !RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | FileCheck %s --check-prefixes="FIRDialect,OMPDialect"
2 !RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | fir-opt --fir-to-llvm-ir | FileCheck %s --check-prefixes="LLVMDialect,OMPDialect"
4 !FIRDialect-LABEL: func @_QPparallel_simple
5 subroutine parallel_simple()
6 !OMPDialect: omp.parallel
11 end subroutine parallel_simple
13 !===============================================================================
15 !===============================================================================
17 !FIRDialect-LABEL: func @_QPparallel_if
18 subroutine parallel_if(alpha
, beta
, gamma
)
19 integer, intent(in
) :: alpha
20 logical, intent(in
) :: beta
21 logical(1) :: logical1
22 logical(2) :: logical2
23 logical(4) :: logical4
24 logical(8) :: logical8
26 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
27 !$omp parallel if(alpha .le. 0)
30 !OMPDialect: omp.terminator
33 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
34 !$omp parallel if(.false.)
37 !OMPDialect: omp.terminator
40 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
41 !$omp parallel if(alpha .ge. 0)
44 !OMPDialect: omp.terminator
47 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
48 !$omp parallel if(.true.)
51 !OMPDialect: omp.terminator
54 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
55 !$omp parallel if(beta)
58 !OMPDialect: omp.terminator
61 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
62 !$omp parallel if(logical1)
65 !OMPDialect: omp.terminator
68 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
69 !$omp parallel if(logical2)
72 !OMPDialect: omp.terminator
75 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
76 !$omp parallel if(logical4)
79 !OMPDialect: omp.terminator
82 !OMPDialect: omp.parallel if(%{{.*}} : i1) {
83 !$omp parallel if(logical8)
86 !OMPDialect: omp.terminator
89 end subroutine parallel_if
91 !===============================================================================
92 ! `num_threads` clause
93 !===============================================================================
95 !FIRDialect-LABEL: func @_QPparallel_numthreads
96 subroutine parallel_numthreads(num_threads
)
97 integer, intent(inout
) :: num_threads
99 !OMPDialect: omp.parallel num_threads(%{{.*}}: i32) {
100 !$omp parallel num_threads(16)
101 !FIRDialect: fir.call
103 !OMPDialect: omp.terminator
108 !OMPDialect: omp.parallel num_threads(%{{.*}} : i32) {
109 !$omp parallel num_threads(num_threads)
110 !FIRDialect: fir.call
112 !OMPDialect: omp.terminator
115 end subroutine parallel_numthreads
117 !===============================================================================
119 !===============================================================================
121 !FIRDialect-LABEL: func @_QPparallel_proc_bind
122 subroutine parallel_proc_bind()
124 !OMPDialect: omp.parallel proc_bind(master) {
125 !$omp parallel proc_bind(master)
126 !FIRDialect: fir.call
128 !OMPDialect: omp.terminator
131 !OMPDialect: omp.parallel proc_bind(close) {
132 !$omp parallel proc_bind(close)
133 !FIRDialect: fir.call
135 !OMPDialect: omp.terminator
138 !OMPDialect: omp.parallel proc_bind(spread) {
139 !$omp parallel proc_bind(spread)
140 !FIRDialect: fir.call
142 !OMPDialect: omp.terminator
145 end subroutine parallel_proc_bind
147 !===============================================================================
149 !===============================================================================
151 !FIRDialect-LABEL: func @_QPparallel_allocate
152 subroutine parallel_allocate()
155 !OMPDialect: omp.parallel allocate(
156 !FIRDialect: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
157 !LLVMDialect: %{{.+}} : i32 -> %{{.+}} : !llvm.ptr<i32>
159 !$omp parallel allocate(omp_high_bw_mem_alloc: x) private(x)
160 !FIRDialect: arith.addi
162 !OMPDialect: omp.terminator
164 end subroutine parallel_allocate
166 !===============================================================================
168 !===============================================================================
170 !FIRDialect-LABEL: func @_QPparallel_multiple_clauses
171 subroutine parallel_multiple_clauses(alpha
, num_threads
)
173 integer, intent(inout
) :: alpha
174 integer, intent(in
) :: num_threads
176 !OMPDialect: omp.parallel if({{.*}} : i1) proc_bind(master) {
177 !$omp parallel if(alpha .le. 0) proc_bind(master)
178 !FIRDialect: fir.call
180 !OMPDialect: omp.terminator
183 !OMPDialect: omp.parallel num_threads({{.*}} : i32) proc_bind(close) {
184 !$omp parallel proc_bind(close) num_threads(num_threads)
185 !FIRDialect: fir.call
187 !OMPDialect: omp.terminator
190 !OMPDialect: omp.parallel if({{.*}} : i1) num_threads({{.*}} : i32) {
191 !$omp parallel num_threads(num_threads) if(alpha .le. 0)
192 !FIRDialect: fir.call
194 !OMPDialect: omp.terminator
197 !OMPDialect: omp.parallel if({{.*}} : i1) num_threads({{.*}} : i32) allocate(
198 !FIRDialect: %{{.+}} : i32 -> %{{.+}} : !fir.ref<i32>
199 !LLVMDialect: %{{.+}} : i32 -> %{{.+}} : !llvm.ptr<i32>
201 !$omp parallel num_threads(num_threads) if(alpha .le. 0) allocate(omp_high_bw_mem_alloc: alpha) private(alpha)
202 !FIRDialect: fir.call
204 !FIRDialect: arith.addi
206 !OMPDialect: omp.terminator
209 end subroutine parallel_multiple_clauses