Skip to content

Commit dfcf9fe

Browse files
authored
[flang][openacc][NFC] Check only HLFIR lowering for atomic tests (#72922)
HLFIR lowering has been set by default now and FIR lowering support will be removed in the near future. This patch is the first of a series to update the OpenACC lowering tests to check only the HLFIR lowering and remove and specific FIR check lines.
1 parent abd85cd commit dfcf9fe

File tree

6 files changed

+130
-120
lines changed

6 files changed

+130
-120
lines changed

flang/test/Lower/OpenACC/acc-atomic-capture.f90

Lines changed: 54 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
! RUN: %flang_fc1 -I nowhere -emit-fir -flang-deprecated-no-hlfir -fopenacc %s -o - | FileCheck %s
1+
! RUN: %flang_fc1 -I nowhere -emit-hlfir -fopenacc %s -o - | FileCheck %s
22

33
! This test checks the lowering of atomic capture
44

5-
program acc_atomic_capture_test
5+
program acc_atomic_capture_test
66
integer :: x, y
77

88
!CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"}
9+
!CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %0 {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
910
!CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"}
10-
!CHECK: %[[temp:.*]] = fir.load %[[X]] : !fir.ref<i32>
11+
!CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %2 {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
12+
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
1113
!CHECK: acc.atomic.capture {
12-
!CHECK: acc.atomic.read %[[X]] = %[[Y]] : !fir.ref<i32>
13-
!CHECK: acc.atomic.update %[[Y]] : !fir.ref<i32> {
14+
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>
15+
!CHECK: acc.atomic.update %[[Y_DECL]]#1 : !fir.ref<i32> {
1416
!CHECK: ^bb0(%[[ARG:.*]]: i32):
1517
!CHECK: %[[result:.*]] = arith.addi %[[temp]], %[[ARG]] : i32
1618
!CHECK: acc.yield %[[result]] : i32
@@ -23,14 +25,14 @@ program acc_atomic_capture_test
2325
!$acc end atomic
2426

2527

26-
!CHECK: %[[temp:.*]] = fir.load %[[X]] : !fir.ref<i32>
28+
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
2729
!CHECK: acc.atomic.capture {
28-
!CHECK: acc.atomic.update %[[Y]] : !fir.ref<i32> {
30+
!CHECK: acc.atomic.update %[[Y_DECL]]#1 : !fir.ref<i32> {
2931
!CHECK: ^bb0(%[[ARG:.*]]: i32):
3032
!CHECK: %[[result:.*]] = arith.muli %[[temp]], %[[ARG]] : i32
3133
!CHECK: acc.yield %[[result]] : i32
3234
!CHECK: }
33-
!CHECK: acc.atomic.read %[[X]] = %[[Y]] : !fir.ref<i32>
35+
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>
3436
!CHECK: }
3537

3638
!$acc atomic capture
@@ -40,13 +42,13 @@ program acc_atomic_capture_test
4042

4143
!CHECK: %[[constant_20:.*]] = arith.constant 20 : i32
4244
!CHECK: %[[constant_8:.*]] = arith.constant 8 : i32
43-
!CHECK: %[[temp:.*]] = fir.load %[[X]] : !fir.ref<i32>
45+
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32>
4446
!CHECK: %[[result:.*]] = arith.subi %[[constant_8]], %[[temp]] : i32
45-
!CHECK: %[[result_noreassoc:.*]] = fir.no_reassoc %[[result]] : i32
47+
!CHECK: %[[result_noreassoc:.*]] = hlfir.no_reassoc %[[result]] : i32
4648
!CHECK: %[[result:.*]] = arith.addi %[[constant_20]], %[[result_noreassoc]] : i32
4749
!CHECK: acc.atomic.capture {
48-
!CHECK: acc.atomic.read %[[X]] = %[[Y]] : !fir.ref<i32>
49-
!CHECK: acc.atomic.write %[[Y]] = %[[result]] : !fir.ref<i32>, i32
50+
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32>
51+
!CHECK: acc.atomic.write %[[Y_DECL]]#1 = %[[result]] : !fir.ref<i32>, i32
5052
!CHECK: }
5153

5254
!$acc atomic capture
@@ -59,24 +61,19 @@ program acc_atomic_capture_test
5961

6062
subroutine pointers_in_atomic_capture()
6163
!CHECK: %[[A:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "a", uniq_name = "_QFpointers_in_atomic_captureEa"}
62-
!CHECK: {{.*}} = fir.zero_bits !fir.ptr<i32>
63-
!CHECK: {{.*}} = fir.embox {{.*}} : (!fir.ptr<i32>) -> !fir.box<!fir.ptr<i32>>
64-
!CHECK: fir.store {{.*}} to %[[A]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
64+
!CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFpointers_in_atomic_captureEa"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
6565
!CHECK: %[[B:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "b", uniq_name = "_QFpointers_in_atomic_captureEb"}
66-
!CHECK: {{.*}} = fir.zero_bits !fir.ptr<i32>
67-
!CHECK: {{.*}} = fir.embox {{.*}} : (!fir.ptr<i32>) -> !fir.box<!fir.ptr<i32>>
68-
!CHECK: fir.store {{.*}} to %[[B]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
66+
!CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFpointers_in_atomic_captureEb"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
6967
!CHECK: %[[C:.*]] = fir.alloca i32 {bindc_name = "c", fir.target, uniq_name = "_QFpointers_in_atomic_captureEc"}
68+
!CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QFpointers_in_atomic_captureEc"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
7069
!CHECK: %[[D:.*]] = fir.alloca i32 {bindc_name = "d", fir.target, uniq_name = "_QFpointers_in_atomic_captureEd"}
71-
!CHECK: {{.*}} = fir.embox {{.*}} : (!fir.ref<i32>) -> !fir.box<!fir.ptr<i32>>
72-
!CHECK: fir.store {{.*}} to %[[A]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
73-
!CHECK: {{.*}} = fir.embox {{.*}} : (!fir.ref<i32>) -> !fir.box<!fir.ptr<i32>>
74-
!CHECK: fir.store {{.*}} to %[[B]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
75-
!CHECK: %[[loaded_A:.*]] = fir.load %[[A]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
70+
!CHECK: %[[D_DECL:.*]]:2 = hlfir.declare %[[D]] {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QFpointers_in_atomic_captureEd"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
71+
72+
!CHECK: %[[loaded_A:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
7673
!CHECK: %[[loaded_A_addr:.*]] = fir.box_addr %[[loaded_A]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
77-
!CHECK: %[[loaded_B:.*]] = fir.load %[[B]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
74+
!CHECK: %[[loaded_B:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
7875
!CHECK: %[[loaded_B_addr:.*]] = fir.box_addr %[[loaded_B]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
79-
!CHECK: %[[PRIVATE_LOADED_B:.*]] = fir.load %[[B]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
76+
!CHECK: %[[PRIVATE_LOADED_B:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
8077
!CHECK: %[[PRIVATE_LOADED_B_addr:.*]] = fir.box_addr %[[PRIVATE_LOADED_B]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
8178
!CHECK: %[[loaded_value:.*]] = fir.load %[[PRIVATE_LOADED_B_addr]] : !fir.ptr<i32>
8279
!CHECK: acc.atomic.capture {
@@ -114,13 +111,15 @@ subroutine capture_with_convert_f32_to_i32()
114111

115112
! CHECK-LABEL: func.func @_QPcapture_with_convert_f32_to_i32()
116113
! 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>)
117115
! 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>)
118117
! CHECK: %[[CST:.*]] = arith.constant 3.140000e+00 : f32
119118
! CHECK: %[[MUL:.*]] = arith.mulf %{{.*}}, %[[CST]] fastmath<contract> : f32
120119
! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f32) -> i32
121120
! CHECK: acc.atomic.capture {
122-
! CHECK: acc.atomic.read %[[V]] = %[[K]] : !fir.ref<i32>, i32
123-
! CHECK: acc.atomic.write %[[K]] = %[[CONV]] : !fir.ref<i32>, i32
121+
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[K_DECL]]#1 : !fir.ref<i32>, i32
122+
! CHECK: acc.atomic.write %[[K_DECL]]#1 = %[[CONV]] : !fir.ref<i32>, i32
124123
! CHECK: }
125124

126125
subroutine array_ref_in_atomic_capture1
@@ -131,12 +130,14 @@ subroutine array_ref_in_atomic_capture1
131130
!$acc end atomic
132131
end subroutine array_ref_in_atomic_capture1
133132
! CHECK-LABEL: func.func @_QParray_ref_in_atomic_capture1() {
134-
! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture1Ev"}
135-
! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture1Ex"}
136-
! CHECK: %[[VAL_5:.*]] = fir.coordinate_of %[[VAL_1]], %{{.*}} : (!fir.ref<!fir.array<10xi32>>, i64) -> !fir.ref<i32>
133+
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture1Ev"}
134+
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFarray_ref_in_atomic_capture1Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
135+
! CHECK: %[[X:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture1Ex"}
136+
! 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>>)
137+
! CHECK: %[[X_REF:.*]] = hlfir.designate %[[X_DECL]]#0 (%{{.*}}) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>
137138
! CHECK: acc.atomic.capture {
138-
! CHECK: acc.atomic.read %[[VAL_0]] = %[[VAL_5]] : !fir.ref<i32>, i32
139-
! CHECK: acc.atomic.update %[[VAL_5]] : !fir.ref<i32> {
139+
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32
140+
! CHECK: acc.atomic.update %[[X_REF]] : !fir.ref<i32> {
140141
! CHECK: ^bb0(%[[VAL_7:.*]]: i32):
141142
! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32
142143
! CHECK: acc.yield %[[VAL_8]] : i32
@@ -151,16 +152,18 @@ subroutine array_ref_in_atomic_capture2
151152
!$acc end atomic
152153
end subroutine array_ref_in_atomic_capture2
153154
! CHECK-LABEL: func.func @_QParray_ref_in_atomic_capture2() {
154-
! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture2Ev"}
155-
! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture2Ex"}
156-
! CHECK: %[[VAL_5:.*]] = fir.coordinate_of %[[VAL_1]], %{{.*}} : (!fir.ref<!fir.array<10xi32>>, i64) -> !fir.ref<i32>
155+
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture2Ev"}
156+
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFarray_ref_in_atomic_capture2Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
157+
! CHECK: %[[X:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture2Ex"}
158+
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]](%{{.*}}) {uniq_name = "_QFarray_ref_in_atomic_capture2Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)
159+
! CHECK: %[[X_REF:.*]] = hlfir.designate %[[X_DECL]]#0 (%{{.*}}) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>
157160
! CHECK: acc.atomic.capture {
158-
! CHECK: acc.atomic.update %[[VAL_5]] : !fir.ref<i32> {
161+
! CHECK: acc.atomic.update %[[X_REF]] : !fir.ref<i32> {
159162
! CHECK: ^bb0(%[[VAL_7:.*]]: i32):
160163
! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32
161164
! CHECK: acc.yield %[[VAL_8]] : i32
162165
! CHECK: }
163-
! CHECK: acc.atomic.read %[[VAL_0]] = %[[VAL_5]] : !fir.ref<i32>, i32
166+
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32
164167
! CHECK: }
165168

166169
subroutine comp_ref_in_atomic_capture1
@@ -175,13 +178,14 @@ subroutine comp_ref_in_atomic_capture1
175178
!$acc end atomic
176179
end subroutine comp_ref_in_atomic_capture1
177180
! CHECK-LABEL: func.func @_QPcomp_ref_in_atomic_capture1() {
178-
! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture1Ev"}
179-
! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture1Ex"}
180-
! CHECK: %[[VAL_2:.*]] = fir.field_index c, !fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>
181-
! CHECK: %[[VAL_3:.*]] = fir.coordinate_of %[[VAL_1]], %[[VAL_2]] : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>, !fir.field) -> !fir.ref<i32>
181+
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture1Ev"}
182+
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcomp_ref_in_atomic_capture1Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
183+
! CHECK: %[[X:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture1Ex"}
184+
! 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}>>)
185+
! CHECK: %[[C:.*]] = hlfir.designate %[[X_DECL]]#0{"c"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) -> !fir.ref<i32>
182186
! CHECK: acc.atomic.capture {
183-
! CHECK: acc.atomic.read %[[VAL_0]] = %[[VAL_3]] : !fir.ref<i32>, i32
184-
! CHECK: acc.atomic.update %[[VAL_3]] : !fir.ref<i32> {
187+
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32
188+
! CHECK: acc.atomic.update %[[C]] : !fir.ref<i32> {
185189
! CHECK: ^bb0(%[[VAL_5:.*]]: i32):
186190
! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32
187191
! CHECK: acc.yield %[[VAL_6]] : i32
@@ -200,15 +204,16 @@ subroutine comp_ref_in_atomic_capture2
200204
!$acc end atomic
201205
end subroutine comp_ref_in_atomic_capture2
202206
! CHECK-LABEL: func.func @_QPcomp_ref_in_atomic_capture2() {
203-
! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture2Ev"}
204-
! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture2Ex"}
205-
! CHECK: %[[VAL_2:.*]] = fir.field_index c, !fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>
206-
! CHECK: %[[VAL_3:.*]] = fir.coordinate_of %[[VAL_1]], %[[VAL_2]] : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>, !fir.field) -> !fir.ref<i32>
207+
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture2Ev"}
208+
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcomp_ref_in_atomic_capture2Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
209+
! CHECK: %[[X:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture2Ex"}
210+
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcomp_ref_in_atomic_capture2Ex"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>) -> (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>, !fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>)
211+
! CHECK: %[[C:.*]] = hlfir.designate %[[X_DECL]]#0{"c"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>) -> !fir.ref<i32>
207212
! CHECK: acc.atomic.capture {
208-
! CHECK: acc.atomic.update %[[VAL_3]] : !fir.ref<i32> {
213+
! CHECK: acc.atomic.update %[[C]] : !fir.ref<i32> {
209214
! CHECK: ^bb0(%[[VAL_5:.*]]: i32):
210215
! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32
211216
! CHECK: acc.yield %[[VAL_6]] : i32
212217
! CHECK: }
213-
! CHECK: acc.atomic.read %[[VAL_0]] = %[[VAL_3]] : !fir.ref<i32>, i32
218+
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32
214219
! CHECK: }
Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,26 @@
1-
! RUN: bbc -fopenacc -emit-fir -hlfir=false %s -o - | FileCheck %s
1+
! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s
22

33
! This test checks the lowering of atomic read
44

5-
!CHECK: func @_QQmain() attributes {fir.bindc_name = "acc_atomic_test"} {
6-
!CHECK: %[[VAR_G:.*]] = fir.alloca f32 {bindc_name = "g", uniq_name = "_QFEg"}
7-
!CHECK: %[[VAR_H:.*]] = fir.alloca f32 {bindc_name = "h", uniq_name = "_QFEh"}
8-
!CHECK: acc.atomic.read %[[VAR_G]] = %[[VAR_H]] : !fir.ref<f32>, f32
9-
!CHECK: return
10-
!CHECK: }
11-
125
program acc_atomic_test
13-
real g, h
14-
!$acc atomic read
15-
g = h
6+
real g, h
7+
!$acc atomic read
8+
g = h
169
end program acc_atomic_test
1710

11+
! CHECK: func @_QQmain() attributes {fir.bindc_name = "acc_atomic_test"} {
12+
! CHECK: %[[VAR_G:.*]] = fir.alloca f32 {bindc_name = "g", uniq_name = "_QFEg"}
13+
! CHECK: %[[G_DECL:.*]]:2 = hlfir.declare %[[VAR_G]] {uniq_name = "_QFEg"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
14+
! CHECK: %[[VAR_H:.*]] = fir.alloca f32 {bindc_name = "h", uniq_name = "_QFEh"}
15+
! CHECK: %[[H_DECL:.*]]:2 = hlfir.declare %[[VAR_H]] {uniq_name = "_QFEh"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
16+
! CHECK: acc.atomic.read %[[G_DECL]]#1 = %[[H_DECL]]#1 : !fir.ref<f32>, f32
17+
! CHECK: return
18+
! CHECK: }
19+
1820
! Test lowering atomic read for pointer variables.
1921
! Please notice to use %[[VAL_4]] and %[[VAL_1]] for operands of atomic
2022
! operation, instead of %[[VAL_3]] and %[[VAL_0]].
2123

22-
!CHECK-LABEL: func.func @_QPatomic_read_pointer() {
23-
! CHECK: %[[X:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "x", uniq_name = "_QFatomic_read_pointerEx"}
24-
! CHECK: %[[Y:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "y", uniq_name = "_QFatomic_read_pointerEy"}
25-
! CHECK: %[[LOAD_X:.*]] = fir.load %[[X]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
26-
! CHECK: %[[BOX_ADDR_X:.*]] = fir.box_addr %[[LOAD_X]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
27-
! CHECK: %[[LOAD_Y:.*]] = fir.load %[[Y]] : !fir.ref<!fir.box<!fir.ptr<i32>>>
28-
! CHECK: %[[BOX_ADDR_Y:.*]] = fir.box_addr %[[LOAD_Y]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
29-
! CHECK: acc.atomic.read %[[BOX_ADDR_Y]] = %[[BOX_ADDR_X]] : !fir.ptr<i32>, i32
30-
! CHECK: }
31-
3224
subroutine atomic_read_pointer()
3325
integer, pointer :: x, y
3426

@@ -38,6 +30,18 @@ subroutine atomic_read_pointer()
3830
x = y
3931
end
4032

33+
! CHECK-LABEL: func.func @_QPatomic_read_pointer() {
34+
! CHECK: %[[X:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "x", uniq_name = "_QFatomic_read_pointerEx"}
35+
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFatomic_read_pointerEx"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
36+
! CHECK: %[[Y:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "y", uniq_name = "_QFatomic_read_pointerEy"}
37+
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFatomic_read_pointerEy"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>)
38+
! CHECK: %[[LOAD_X:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
39+
! CHECK: %[[BOX_ADDR_X:.*]] = fir.box_addr %[[LOAD_X]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
40+
! CHECK: %[[LOAD_Y:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>>
41+
! CHECK: %[[BOX_ADDR_Y:.*]] = fir.box_addr %[[LOAD_Y]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32>
42+
! CHECK: acc.atomic.read %[[BOX_ADDR_Y]] = %[[BOX_ADDR_X]] : !fir.ptr<i32>, i32
43+
! CHECK: }
44+
4145
subroutine atomic_read_with_convert()
4246
integer(4) :: x
4347
integer(8) :: y
@@ -48,6 +52,8 @@ subroutine atomic_read_with_convert()
4852

4953
! CHECK-LABEL: func.func @_QPatomic_read_with_convert() {
5054
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFatomic_read_with_convertEx"}
55+
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFatomic_read_with_convertEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
5156
! CHECK: %[[Y:.*]] = fir.alloca i64 {bindc_name = "y", uniq_name = "_QFatomic_read_with_convertEy"}
52-
! CHECK: %[[CONV:.*]] = fir.convert %[[X]] : (!fir.ref<i32>) -> !fir.ref<i64>
53-
! CHECK: acc.atomic.read %[[Y]] = %[[CONV]] : !fir.ref<i64>, i32
57+
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFatomic_read_with_convertEy"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)
58+
! CHECK: %[[CONV:.*]] = fir.convert %[[X_DECL]]#1 : (!fir.ref<i32>) -> !fir.ref<i64>
59+
! CHECK: acc.atomic.read %[[Y_DECL]]#1 = %[[CONV]] : !fir.ref<i64>, i32

0 commit comments

Comments
 (0)