1
1
! This test checks lowering of `FIRSTPRIVATE` clause for scalar types.
2
2
3
- ! REQUIRES: x86_64 -registered-target
3
+ ! REQUIRES: x86 -registered-target
4
4
! REQUIRES: shell
5
- ! RUN: bbc -fopenmp -emit-hlfir %s -o - \
5
+ ! RUN: bbc -target x86_64-unknown-linux-gnu - fopenmp -emit-hlfir %s -o - \
6
6
! RUN: | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%}
7
7
8
8
! CHECK: omp.private {type = firstprivate} @[[ARG2_LOGICAL_PRIVATIZER:_QFfirstprivate_logicalEarg2_firstprivate_l8]] : !fir.logical<1>
29
29
! CHECK: omp.parallel private(@[[ARG1_COMPLEX_PRIVATIZER]] %{{.*}}#0 -> %[[ARG1_PVT:.*]], @[[ARG2_COMPLEX_PRIVATIZER]] %{{.*}}#0 -> %[[ARG2_PVT:.*]] : {{.*}}) {
30
30
! 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>>)
31
31
! 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>>) -> ()
33
33
! CHECK: omp.terminator
34
34
! CHECK: }
35
35
@@ -57,8 +57,8 @@ subroutine firstprivate_complex(arg1, arg2)
57
57
! CHECK: %[[ARG4_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG4_PVT]] {uniq_name = "_QFfirstprivate_integerEarg4"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
58
58
! CHECK: %[[ARG5_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG5_PVT]] {uniq_name = "_QFfirstprivate_integerEarg5"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)
59
59
! 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>) -> ()
62
62
! CHECK: omp.terminator
63
63
! CHECK: }
64
64
@@ -88,7 +88,7 @@ subroutine firstprivate_integer(arg1, arg2, arg3, arg4, arg5, arg6)
88
88
! 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>>)
89
89
! 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>>)
90
90
! 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>>) -> ()
92
92
! CHECK: omp.terminator
93
93
! CHECK: }
94
94
@@ -116,7 +116,7 @@ subroutine firstprivate_logical(arg1, arg2, arg3, arg4, arg5)
116
116
! CHECK: %[[ARG2_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG2_PVT]] {uniq_name = "_QFfirstprivate_realEarg2"} : (!fir.ref<f16>) -> (!fir.ref<f16>, !fir.ref<f16>)
117
117
! CHECK: %[[ARG3_PVT_DECL:.*]]:2 = hlfir.declare %[[ARG3_PVT]] {uniq_name = "_QFfirstprivate_realEarg3"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
118
118
! 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>) -> ()
120
120
! CHECK: omp.terminator
121
121
! CHECK: }
122
122
subroutine firstprivate_real (arg1 , arg2 , arg3 , arg4 , arg5 , arg6 )
@@ -136,7 +136,7 @@ subroutine firstprivate_real(arg1, arg2, arg3, arg4, arg5, arg6)
136
136
! 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>)
137
137
! CHECK-KIND10: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[ARG1_PVT:.*]] : {{.*}}) {
138
138
! 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>) -> ()
140
140
! CHECK-KIND10: omp.terminator
141
141
! CHECK-KIND10: }
142
142
subroutine firstprivate_real10 (arg1 )
@@ -152,7 +152,7 @@ subroutine firstprivate_real10(arg1)
152
152
! 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>)
153
153
! CHECK-KIND16: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[ARG1_PVT:.*]] : {{.*}}) {
154
154
! 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>) -> ()
156
156
! CHECK-KIND16: omp.terminator
157
157
! CHECK-KIND16: }
158
158
subroutine firstprivate_real16 (arg1 )
@@ -171,7 +171,7 @@ subroutine firstprivate_real16(arg1)
171
171
! CHECK: omp.parallel private({{.*firstprivate.*}} {{.*}}#0 -> %[[A_PRIV_ADDR:.*]], {{.*firstprivate.*}} {{.*}}#0 -> %[[B_PRIV_ADDR:.*]] : {{.*}}) {
172
172
! CHECK: %[[A_PRIV_DECL:.*]]:2 = hlfir.declare %[[A_PRIV_ADDR]] {uniq_name = "_QFmultiple_firstprivateEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
173
173
! 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>) -> ()
175
175
! CHECK: omp.terminator
176
176
! CHECK: }
177
177
! CHECK: return
0 commit comments