@@ -175,3 +175,26 @@ end subroutine
175175! CHECK: %[[VAL:.*]] = fir.convert %c14{{.*}} : (i32) -> i64
176176! CHECK: %[[ADDR:.*]] = builtin.unrealized_conversion_cast %{{.*}}#1 : !fir.ref<i64> to !llvm.ptr
177177! 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