@@ -11,7 +11,7 @@ program acc_atomic_capture_test
1111! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %2 {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
1212! CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
1313! CHECK: acc.atomic.capture {
14- ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, i32
14+ ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, !fir.ref<i32>, i32
1515! CHECK: acc.atomic.update %[[Y_DECL]]#1 : !fir.ref<i32> {
1616! CHECK: ^bb0(%[[ARG:.*]]: i32):
1717! CHECK: %[[result:.*]] = arith.addi %[[temp]], %[[ARG]] : i32
@@ -32,7 +32,7 @@ program acc_atomic_capture_test
3232! CHECK: %[[result:.*]] = arith.muli %[[temp]], %[[ARG]] : i32
3333! CHECK: acc.yield %[[result]] : i32
3434! CHECK: }
35- ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, i32
35+ ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, !fir.ref<i32>, i32
3636! CHECK: }
3737
3838 ! $acc atomic capture
@@ -47,7 +47,7 @@ program acc_atomic_capture_test
4747! CHECK: %[[result_noreassoc:.*]] = hlfir.no_reassoc %[[result]] : i32
4848! CHECK: %[[result:.*]] = arith.addi %[[constant_20]], %[[result_noreassoc]] : i32
4949! CHECK: acc.atomic.capture {
50- ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, i32
50+ ! CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>, !fir.ref<i32>, i32
5151! CHECK: acc.atomic.write %[[Y_DECL]]#1 = %[[result]] : !fir.ref<i32>, i32
5252! CHECK: }
5353
@@ -82,7 +82,7 @@ subroutine pointers_in_atomic_capture()
8282! CHECK: %[[result:.*]] = arith.addi %[[ARG]], %[[loaded_value]] : i32
8383! CHECK: acc.yield %[[result]] : i32
8484! CHECK: }
85- ! CHECK: acc.atomic.read %[[loaded_B_addr]] = %[[loaded_A_addr]] : !fir.ptr<i32>, i32
85+ ! CHECK: acc.atomic.read %[[loaded_B_addr]] = %[[loaded_A_addr]] : !fir.ptr<i32>, !fir.ptr<i32>, i32
8686! CHECK: }
8787 integer , pointer :: a, b
8888 integer , target :: c, d
@@ -118,7 +118,7 @@ subroutine capture_with_convert_f32_to_i32()
118118! CHECK: %[[MUL:.*]] = arith.mulf %{{.*}}, %[[CST]] fastmath<contract> : f32
119119! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f32) -> i32
120120! CHECK: acc.atomic.capture {
121- ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[K_DECL]]#1 : !fir.ref<i32>, i32
121+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[K_DECL]]#1 : !fir.ref<i32>, !fir.ref<i32>, i32
122122! CHECK: acc.atomic.write %[[K_DECL]]#1 = %[[CONV]] : !fir.ref<i32>, i32
123123! CHECK: }
124124
@@ -138,15 +138,14 @@ end subroutine capture_with_convert_i32_to_f64
138138! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_i32_to_f64Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
139139! CHECK: %[[X:.*]] = fir.alloca f64 {bindc_name = "x", uniq_name = "_QFcapture_with_convert_i32_to_f64Ex"}
140140! 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: %[[X_CONV:.*]] = fir.convert %[[X_DECL]]#1 : (!fir.ref<f64>) -> !fir.ref<i32>
142141! CHECK: %[[CST:.*]] = arith.constant 1.000000e+00 : f64
143142! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f64, !fir.ref<f64>
144143! CHECK: %c0_i32 = arith.constant 0 : i32
145144! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
146145! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
147146! CHECK: %[[CONV:.*]] = fir.convert %[[LOAD]] : (i32) -> f64
148147! CHECK: acc.atomic.capture {
149- ! CHECK: acc.atomic.read %[[V_DECL]] = %[[X_CONV ]]#1 : !fir.ref<f64>, i32
148+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_DECL ]]#1 : !fir.ref<i32>, !fir.ref< f64>, f64
150149! CHECK: acc.atomic.write %[[X_DECL]]#1 = %[[CONV]] : !fir.ref<f64>, f64
151150! CHECK: }
152151
@@ -170,20 +169,16 @@ end subroutine capture_with_convert_f64_to_i32
170169! CHECK: hlfir.assign %c1_i32 to %[[X_DECL]]#0 : i32, !fir.ref<i32>
171170! CHECK: %[[CST:.*]] = arith.constant 0.000000e+00 : f64
172171! CHECK: hlfir.assign %[[CST]] to %[[V_DECL]]#0 : f64, !fir.ref<f64>
173- ! CHECK: %[[ALLOCA]] = fir.alloca i32
174- ! CHECK: %[[LOAD1:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<f64>
172+ ! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<f64>
175173! CHECK: acc.atomic.capture {
176174! CHECK: acc.atomic.update %[[X_DECL]]#1 : !fir.ref<i32> {
177175! CHECK: ^bb0(%arg0: i32):
178- ! CHECK: %[[MUL:.*]] = arith.mulf %[[LOAD1 ]], %[[LOAD1 ]] fastmath<contract> : f64
179- ! CHECK: %[[CONV1 :.*]] = fir.convert %[[MUL]] : (f64) -> i32
180- ! CHECK: acc.yield %[[CONV1 ]] : 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
181179! CHECK: }
182- ! CHECK: acc.atomic.read %[[ALLOCA]] = %[[X_DECL]]#1 : !fir.ref<i32>, i32
180+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_DECL]]#1 : !fir.ref<f64>, !fir.ref<i32>, i32
183181! CHECK: }
184- ! CHECK: %[[LOAD2:.*]] = fir.load %[[ALLOCA]] : !fir.ref<i32>
185- ! CHECK: %[[CONV2:.*]] = fir.convert %[[LOAD2]] : (i32) -> f64
186- ! CHECK: fir.store %[[CONV2]] to %[[V_DECL]]#1 : !fir.ref<f64>
187182
188183subroutine capture_with_convert_i32_to_f32 ()
189184 real (4 ) :: x
@@ -205,21 +200,16 @@ end subroutine capture_with_convert_i32_to_f32
205200! CHECK: hlfir.assign %[[CST]] to %[[X_DECL]]#0 : f32, !fir.ref<f32>
206201! CHECK: %c0_i32 = arith.constant 0 : i32
207202! CHECK: hlfir.assign %c0_i32 to %[[V_DECL]]#0 : i32, !fir.ref<i32>
208- ! CHECK: %[[ALLOCA:.*]] = fir.alloca f32
209- ! CHECK: %[[LOAD1:.*]] = fir.load %[[ALLOCA]] : !fir.ref<f32>
210- ! CHECK: %[[CONV1:.*]] = fir.convert %5 : (f32) -> i32
203+ ! CHECK: %[[LOAD:.*]] = fir.load %[[V_DECL]]#0 : !fir.ref<i32>
211204! CHECK: acc.atomic.capture {
212- ! CHECK: acc.atomic.read %[[ALLOCA]] = %[[X_DECL]]#1 : !fir.ref<f32>, f32
205+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_DECL]]#1 : !fir.ref<i32>, !fir.ref<f32>, f32
213206! CHECK: acc.atomic.update %[[X_DECL]]#1 : !fir.ref<f32> {
214207! CHECK: ^bb0(%arg0: f32):
215- ! CHECK: %[[CONV2 :.*]] = fir.convert %[[CONV1 ]] : (i32) -> f32
216- ! CHECK: %[[ADD:.*]] = arith.addf %arg0, %[[CONV2 ]] fastmath<contract> : f32
208+ ! CHECK: %[[CONV :.*]] = fir.convert %[[LOAD ]] : (i32) -> f32
209+ ! CHECK: %[[ADD:.*]] = arith.addf %arg0, %[[CONV ]] fastmath<contract> : f32
217210! CHECK: acc.yield %[[ADD]] : f32
218211! CHECK: }
219212! CHECK: }
220- ! CHECK: %[[LOAD2:.*]] = fir.load %[[ALLOCA]] : !fir.ref<f32>
221- ! CHECK: %[[CONV3:.*]] = fir.convert %[[LOAD2]] : (f32) -> i32
222- ! CHECK: fir.store %[[CONV3]] to %[[V_DECL]]#1 : !fir.ref<i32>
223213
224214subroutine array_ref_in_atomic_capture1
225215 integer :: x(10 ), v
@@ -235,7 +225,7 @@ end subroutine array_ref_in_atomic_capture1
235225! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]](%{{.*}}) {uniq_name = "_QFarray_ref_in_atomic_capture1Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)
236226! CHECK: %[[X_REF:.*]] = hlfir.designate %[[X_DECL]]#0 (%{{.*}}) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>
237227! CHECK: acc.atomic.capture {
238- ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32
228+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, !fir.ref<i32>, i32
239229! CHECK: acc.atomic.update %[[X_REF]] : !fir.ref<i32> {
240230! CHECK: ^bb0(%[[VAL_7:.*]]: i32):
241231! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32
@@ -262,7 +252,7 @@ end subroutine array_ref_in_atomic_capture2
262252! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32
263253! CHECK: acc.yield %[[VAL_8]] : i32
264254! CHECK: }
265- ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32
255+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, !fir.ref<i32>, i32
266256! CHECK: }
267257
268258subroutine comp_ref_in_atomic_capture1
@@ -283,7 +273,7 @@ end subroutine comp_ref_in_atomic_capture1
283273! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcomp_ref_in_atomic_capture1Ex"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) -> (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>, !fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>)
284274! CHECK: %[[C:.*]] = hlfir.designate %[[X_DECL]]#0{"c"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) -> !fir.ref<i32>
285275! CHECK: acc.atomic.capture {
286- ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32
276+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, !fir.ref<i32>, i32
287277! CHECK: acc.atomic.update %[[C]] : !fir.ref<i32> {
288278! CHECK: ^bb0(%[[VAL_5:.*]]: i32):
289279! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32
@@ -314,5 +304,5 @@ end subroutine comp_ref_in_atomic_capture2
314304! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32
315305! CHECK: acc.yield %[[VAL_6]] : i32
316306! CHECK: }
317- ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32
307+ ! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, !fir.ref<i32>, i32
318308! CHECK: }
0 commit comments