@@ -175,3 +175,26 @@ end subroutine
175
175
! CHECK: %[[VAL:.*]] = fir.convert %c14{{.*}} : (i32) -> i64
176
176
! CHECK: %[[ADDR:.*]] = builtin.unrealized_conversion_cast %{{.*}}#1 : !fir.ref<i64> to !llvm.ptr
177
177
! CHECK: llvm.cmpxchg %{{.*}}, %{{.*}}, %[[VAL]] acq_rel monotonic : !llvm.ptr, i64
178
+
179
+ attributes(device) subroutine testAtomic3()
180
+ real :: a, i, istat
181
+ istat = atomiccas(a, i, 14.0)
182
+ end subroutine
183
+
184
+ ! CHECK-LABEL: func.func @_QPtestatomic3()
185
+ ! CHECK: %[[BCAST1:.*]] = llvm.bitcast %{{.*}} : f32 to i32
186
+ ! CHECK: %[[BCAST2:.*]] = llvm.bitcast %{{.*}} : f32 to i32
187
+ ! CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %{{.*}}#1 : !fir.ref<f32> to !llvm.ptr
188
+ ! CHECK: llvm.cmpxchg %[[CAST]], %[[BCAST1]], %[[BCAST2]] acq_rel monotonic : !llvm.ptr, i32
189
+
190
+ attributes(device) subroutine testAtomic4()
191
+ real(8) :: a, i, istat
192
+ istat = atomiccas(a, i, 14.0d0)
193
+ end subroutine
194
+
195
+ ! CHECK-LABEL: func.func @_QPtestatomic4()
196
+ ! CHECK: %[[BCAST1:.*]] = llvm.bitcast %{{.*}} : f64 to i64
197
+ ! CHECK: %[[BCAST2:.*]] = llvm.bitcast %{{.*}} : f64 to i64
198
+ ! CHECK: %[[CAST:.*]] = builtin.unrealized_conversion_cast %{{.*}}#1 : !fir.ref<f64> to !llvm.ptr
199
+ ! CHECK: %[[ATOMIC:.*]] = llvm.cmpxchg %[[CAST]], %[[BCAST1]], %[[BCAST2]] acq_rel monotonic : !llvm.ptr, i64
200
+ ! CHECK: %[[RES:.*]] = llvm.extractvalue %[[ATOMIC]][1] : !llvm.struct<(i64, i1)>
0 commit comments