11! This test checks lowering of `FIRSTPRIVATE` clause for scalar types.
22
3- ! REQUIRES: x86_64 -registered-target
3+ ! REQUIRES: x86 -registered-target
44! REQUIRES: shell
5- ! RUN: bbc -fopenmp -emit-hlfir %s -o - \
5+ ! RUN: bbc -target x86_64-unknown-linux-gnu - fopenmp -emit-hlfir %s -o - \
66! RUN: | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%}
77
88! CHECK: omp.private {type = firstprivate} @[[ARG2_LOGICAL_PRIVATIZER:_QFfirstprivate_logicalEarg2_firstprivate_l8]] : !fir.logical<1>
2929! CHECK: omp.parallel private(@[[ARG1_COMPLEX_PRIVATIZER]] %{{.*}}#0 -> %[[ARG1_PVT:.*]], @[[ARG2_COMPLEX_PRIVATIZER]] %{{.*}}#0 -> %[[ARG2_PVT:.*]] : {{.*}}) {
3030! CHECK: %[[ARG1_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG1_PVT]] {uniq_name = "_QFfirstprivate_complexEarg1"} : (!fir.ref<complex<f32>>) -> (!fir.ref<complex<f32>>, !fir.ref<complex<f32>>)
3131! CHECK: %[[ARG2_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG2_PVT]] {uniq_name = "_QFfirstprivate_complexEarg2"} : (!fir.ref<complex<f64>>) -> (!fir.ref<complex<f64>>, !fir.ref<complex<f64>>)
32- ! CHECK: fir.call @_QPfoo(%[[ARG1_PVT_DECL]]#1 , %[[ARG2_PVT_DECL]]#1 ) {{.*}}: (!fir.ref<complex<f32>>, !fir.ref<complex<f64>>) -> ()
32+ ! CHECK: fir.call @_QPfoo(%[[ARG1_PVT_DECL]]#0 , %[[ARG2_PVT_DECL]]#0 ) {{.*}}: (!fir.ref<complex<f32>>, !fir.ref<complex<f64>>) -> ()
3333! CHECK: omp.terminator
3434! CHECK: }
3535
@@ -57,8 +57,8 @@ subroutine firstprivate_complex(arg1, arg2)
5757! CHECK: %[[ARG4_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG4_PVT]] {uniq_name = "_QFfirstprivate_integerEarg4"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
5858! CHECK: %[[ARG5_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG5_PVT]] {uniq_name = "_QFfirstprivate_integerEarg5"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)
5959! CHECK: %[[ARG6_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG6_PVT]] {uniq_name = "_QFfirstprivate_integerEarg6"} : (!fir.ref<i128>) -> (!fir.ref<i128>, !fir.ref<i128>)
60- ! CHECK: fir.call @_QPbar(%[[ARG1_PVT_DECL]]#1 , %[[ARG2_PVT_DECL]]#1 , %[[ARG3_PVT_DECL]]#1 , %[[ARG4_PVT_DECL]]#1 ,
61- ! %[[ARG5_PVT_DECL]]#1 , %[[ARG6_PVT_DECL]]#1 ) {{.*}}: (!fir.ref<i32>, !fir.ref<i8>, !fir.ref<i16>, !fir.ref<i32>, !fir.ref<i64>, !fir.ref<i128>) -> ()
60+ ! CHECK: fir.call @_QPbar(%[[ARG1_PVT_DECL]]#0 , %[[ARG2_PVT_DECL]]#0 , %[[ARG3_PVT_DECL]]#0 , %[[ARG4_PVT_DECL]]#0 ,
61+ ! %[[ARG5_PVT_DECL]]#0 , %[[ARG6_PVT_DECL]]#0 ) {{.*}}: (!fir.ref<i32>, !fir.ref<i8>, !fir.ref<i16>, !fir.ref<i32>, !fir.ref<i64>, !fir.ref<i128>) -> ()
6262! CHECK: omp.terminator
6363! CHECK: }
6464
@@ -88,7 +88,7 @@ subroutine firstprivate_integer(arg1, arg2, arg3, arg4, arg5, arg6)
8888! CHECK: %[[ARG3_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG3_PVT]] {uniq_name = "_QFfirstprivate_logicalEarg3"} : (!fir.ref<!fir.logical<2>>) -> (!fir.ref<!fir.logical<2>>, !fir.ref<!fir.logical<2>>)
8989! CHECK: %[[ARG4_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG4_PVT]] {uniq_name = "_QFfirstprivate_logicalEarg4"} : (!fir.ref<!fir.logical<4>>) -> (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<4>>)
9090! CHECK: %[[ARG5_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG5_PVT]] {uniq_name = "_QFfirstprivate_logicalEarg5"} : (!fir.ref<!fir.logical<8>>) -> (!fir.ref<!fir.logical<8>>, !fir.ref<!fir.logical<8>>)
91- ! CHECK: fir.call @_QPbaz(%[[ARG1_PVT_DECL]]#1 , %[[ARG2_PVT_DECL]]#1 , %[[ARG3_PVT_DECL]]#1 , %[[ARG4_PVT_DECL]]#1 , %[[ARG5_PVT_DECL]]#1 ) {{.*}}: (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<1>>, !fir.ref<!fir.logical<2>>, !fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<8>>) -> ()
91+ ! CHECK: fir.call @_QPbaz(%[[ARG1_PVT_DECL]]#0 , %[[ARG2_PVT_DECL]]#0 , %[[ARG3_PVT_DECL]]#0 , %[[ARG4_PVT_DECL]]#0 , %[[ARG5_PVT_DECL]]#0 ) {{.*}}: (!fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<1>>, !fir.ref<!fir.logical<2>>, !fir.ref<!fir.logical<4>>, !fir.ref<!fir.logical<8>>) -> ()
9292! CHECK: omp.terminator
9393! CHECK: }
9494
@@ -116,7 +116,7 @@ subroutine firstprivate_logical(arg1, arg2, arg3, arg4, arg5)
116116! CHECK: %[[ARG2_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG2_PVT]] {uniq_name = "_QFfirstprivate_realEarg2"} : (!fir.ref<f16>) -> (!fir.ref<f16>, !fir.ref<f16>)
117117! CHECK: %[[ARG3_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG3_PVT]] {uniq_name = "_QFfirstprivate_realEarg3"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
118118! CHECK: %[[ARG4_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG4_PVT]] {uniq_name = "_QFfirstprivate_realEarg4"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
119- ! CHECK: fir.call @_QPqux(%[[ARG1_PVT_DECL]]#1 , %[[ARG2_PVT_DECL]]#1 , %[[ARG3_PVT_DECL]]#1 , %[[ARG4_PVT_DECL]]#1 ) {{.*}}: (!fir.ref<f32>, !fir.ref<f16>, !fir.ref<f32>, !fir.ref<f64>) -> ()
119+ ! CHECK: fir.call @_QPqux(%[[ARG1_PVT_DECL]]#0 , %[[ARG2_PVT_DECL]]#0 , %[[ARG3_PVT_DECL]]#0 , %[[ARG4_PVT_DECL]]#0 ) {{.*}}: (!fir.ref<f32>, !fir.ref<f16>, !fir.ref<f32>, !fir.ref<f64>) -> ()
120120! CHECK: omp.terminator
121121! CHECK: }
122122subroutine firstprivate_real (arg1 , arg2 , arg3 , arg4 , arg5 , arg6 )
@@ -136,7 +136,7 @@ subroutine firstprivate_real(arg1, arg2, arg3, arg4, arg5, arg6)
136136! CHECK-KIND10: %[[ARG1_DECL:.*]]:2 = hlfir.declare %[[ARG1]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFfirstprivate_real10Earg1"} : (!fir.ref<f80>, !fir.dscope) -> (!fir.ref<f80>, !fir.ref<f80>)
137137! CHECK-KIND10: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[ARG1_PVT:.*]] : {{.*}}) {
138138! CHECK-KIND10: %[[ARG1_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG1_PVT]] {uniq_name = "_QFfirstprivate_real10Earg1"} : (!fir.ref<f80>) -> (!fir.ref<f80>, !fir.ref<f80>)
139- ! CHECK-KIND10: fir.call @_QPqux10(%[[ARG1_PVT_DECL]]#1 ) {{.*}} : (!fir.ref<f80>) -> ()
139+ ! CHECK-KIND10: fir.call @_QPqux10(%[[ARG1_PVT_DECL]]#0 ) {{.*}} : (!fir.ref<f80>) -> ()
140140! CHECK-KIND10: omp.terminator
141141! CHECK-KIND10: }
142142subroutine firstprivate_real10 (arg1 )
@@ -152,7 +152,7 @@ subroutine firstprivate_real10(arg1)
152152! CHECK-KIND16: %[[ARG1_DECL:.*]]:2 = hlfir.declare %[[ARG1]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFfirstprivate_real16Earg1"} : (!fir.ref<f128>, !fir.dscope) -> (!fir.ref<f128>, !fir.ref<f128>)
153153! CHECK-KIND16: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[ARG1_PVT:.*]] : {{.*}}) {
154154! CHECK-KIND16: %[[ARG1_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG1_PVT]] {uniq_name = "_QFfirstprivate_real16Earg1"} : (!fir.ref<f128>) -> (!fir.ref<f128>, !fir.ref<f128>)
155- ! CHECK-KIND16: fir.call @_QPqux16(%[[ARG1_PVT_DECL]]#1 ) {{.*}} : (!fir.ref<f128>) -> ()
155+ ! CHECK-KIND16: fir.call @_QPqux16(%[[ARG1_PVT_DECL]]#0 ) {{.*}} : (!fir.ref<f128>) -> ()
156156! CHECK-KIND16: omp.terminator
157157! CHECK-KIND16: }
158158subroutine firstprivate_real16 (arg1 )
@@ -171,7 +171,7 @@ subroutine firstprivate_real16(arg1)
171171! CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[A_PRIV_ADDR:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[B_PRIV_ADDR:.*]] : {{.*}}) {
172172! CHECK: %[[A_PRIV_DECL:.*]]:2 = hlfir.declare %[[A_PRIV_ADDR]] {uniq_name = "_QFmultiple_firstprivateEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
173173! CHECK: %[[B_PRIV_DECL:.*]]:2 = hlfir.declare %[[B_PRIV_ADDR]] {uniq_name = "_QFmultiple_firstprivateEb"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
174- ! CHECK: fir.call @_QPquux(%[[A_PRIV_DECL]]#1 , %[[B_PRIV_DECL]]#1 ) {{.*}}: (!fir.ref<i32>, !fir.ref<i32>) -> ()
174+ ! CHECK: fir.call @_QPquux(%[[A_PRIV_DECL]]#0 , %[[B_PRIV_DECL]]#0 ) {{.*}}: (!fir.ref<i32>, !fir.ref<i32>) -> ()
175175! CHECK: omp.terminator
176176! CHECK: }
177177! CHECK: return
0 commit comments