@@ -96,121 +96,6 @@ subroutine pointers_in_atomic_capture()
9696end subroutine
9797
9898
99- subroutine capture_with_convert_f32_to_i32 ()
100- implicit none
101- integer :: k, v, i
102-
103- k = 1
104- v = 0
105-
106- ! $acc atomic capture
107- v = k
108- k = (i + 1 ) * 3.14
109- ! $acc end atomic
110- end subroutine
111-
112- ! CHECK-LABEL: func.func @_QPcapture_with_convert_f32_to_i32()
113- ! CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"}
114- ! CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
115- ! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"}
116- ! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
117- ! CHECK: %[[CST:.*]] = arith.constant 3.140000e+00 : f32
118- ! CHECK: %[[MUL:.*]] = arith.mulf %{{.*}}, %[[CST]] fastmath<contract> : f32
119- ! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f32) -> i32
120- ! CHECK: acc.atomic.capture {
121- ! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[K_DECL]]#0 : !fir.ref<i32>, !fir.ref<i32>, i32
122- ! CHECK: acc.atomic.write %[[K_DECL]]#0 = %[[CONV]] : !fir.ref<i32>, i32
123- ! CHECK: }
124-
125- subroutine capture_with_convert_i32_to_f64 ()
126- real (8 ) :: x
127- integer :: v
128- x = 1.0
129- v = 0
130- ! $acc atomic capture
131- v = x
132- x = v
133- ! $acc end atomic
134- end subroutine capture_with_convert_i32_to_f64
135-
136- ! CHECK-LABEL: func.func @_QPcapture_with_convert_i32_to_f64()
137- ! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_i32_to_f64Ev"}
138- ! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_i32_to_f64Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
139- ! CHECK: %[[X:.*]] = fir.alloca f64 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_i32_to_f64Ex"}
140- ! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_i32_to_f64Ex"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
141- ! CHECK: %[[CST:.*]] = arith.constant 1.000000e+00 : f64
142- ! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f64, !fir.ref<f64>
143- ! CHECK: %c0_i32 = arith.constant 0 : i32
144- ! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
145- ! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
146- ! CHECK: %[[CONV:.*]] = fir.convert %[[LOAD]] : (i32) -> f64
147- ! CHECK: acc.atomic.capture {
148- ! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<i32>, !fir.ref<f64>, f64
149- ! CHECK: acc.atomic.write %[[X_DECL]]#0 = %[[CONV]] : !fir.ref<f64>, f64
150- ! CHECK: }
151-
152- subroutine capture_with_convert_f64_to_i32 ()
153- integer :: x
154- real (8 ) :: v
155- x = 1
156- v = 0
157- ! $acc atomic capture
158- x = v * v
159- v = x
160- ! $acc end atomic
161- end subroutine capture_with_convert_f64_to_i32
162-
163- ! CHECK-LABEL: func.func @_QPcapture_with_convert_f64_to_i32()
164- ! CHECK: %[[V:.*]] = fir.alloca f64 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_f64_to_i32Ev"}
165- ! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_f64_to_i32Ev"} : (!fir.ref<f64>) -> (!fir.ref<f64>, !fir.ref<f64>)
166- ! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_f64_to_i32Ex"}
167- ! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_f64_to_i32Ex"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
168- ! CHECK: %c1_i32 = arith.constant 1 : i32
169- ! CHECK: hlfir.assign %c1_i32 to %[[X_DECL]]#0 : i32, !fir.ref<i32>
170- ! CHECK: %[[CST:.*]] = arith.constant 0.000000e+00 : f64
171- ! CHECK: hlfir.assign %[[CST]] to %[[V_DECL]]#0 : f64, !fir.ref<f64>
172- ! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<f64>
173- ! CHECK: acc.atomic.capture {
174- ! CHECK: acc.atomic.update %[[X_DECL]]#0 : !fir.ref<i32> {
175- ! CHECK: ^bb0(%arg0: i32):
176- ! CHECK: %[[MUL:.*]] = arith.mulf %[[LOAD]], %[[LOAD]] fastmath<contract> : f64
177- ! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f64) -> i32
178- ! CHECK: acc.yield %[[CONV]] : i32
179- ! CHECK: }
180- ! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<f64>, !fir.ref<i32>, i32
181- ! CHECK: }
182-
183- subroutine capture_with_convert_i32_to_f32 ()
184- real (4 ) :: x
185- integer :: v
186- x = 1.0
187- v = 0
188- ! $acc atomic capture
189- v = x
190- x = x + v
191- ! $acc end atomic
192- end subroutine capture_with_convert_i32_to_f32
193-
194- ! CHECK-LABEL: func.func @_QPcapture_with_convert_i32_to_f32()
195- ! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_i32_to_f32Ev"}
196- ! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_i32_to_f32Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
197- ! CHECK: %[[X:.*]] = fir.alloca f32 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_i32_to_f32Ex"}
198- ! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcapture_with_convert_i32_to_f32Ex"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
199- ! CHECK: %[[CST:.*]] = arith.constant 1.000000e+00 : f32
200- ! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f32, !fir.ref<f32>
201- ! CHECK: %c0_i32 = arith.constant 0 : i32
202- ! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
203- ! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
204- ! CHECK: acc.atomic.capture {
205- ! CHECK: acc.atomic.read %[[V_DECL]]#0 = %[[X_DECL]]#0 : !fir.ref<i32>, !fir.ref<f32>, f32
206- ! CHECK: acc.atomic.update %[[X_DECL]]#0 : !fir.ref<f32> {
207- ! CHECK: ^bb0(%arg0: f32):
208- ! CHECK: %[[CONV:.*]] = fir.convert %[[LOAD]] : (i32) -> f32
209- ! CHECK: %[[ADD:.*]] = arith.addf %arg0, %[[CONV]] fastmath<contract> : f32
210- ! CHECK: acc.yield %[[ADD]] : f32
211- ! CHECK: }
212- ! CHECK: }
213-
21499subroutine array_ref_in_atomic_capture1
215100 integer :: x(10 ), v
216101 ! $acc atomic capture
0 commit comments