@@ -96,121 +96,6 @@ subroutine pointers_in_atomic_capture()
96
96
end subroutine
97
97
98
98
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
-
214
99
subroutine array_ref_in_atomic_capture1
215
100
integer :: x(10 ), v
216
101
! $acc atomic capture
0 commit comments