@@ -8,63 +8,52 @@ import Synchronization
88// Ensure that we don't destroy the atomic before operations
99//===----------------------------------------------------------------------===//
1010
11- // CHECK-LABEL: @localLoad
12- // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
13- // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]] : $*Atomic<Int> to $Builtin.RawPointer
14- // CHECK-NEXT: [[LOAD:%.*]] = builtin "atomicload_monotonic_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer) : $Builtin.Int64
15- // CHECK-NEXT: [[INT:%.*]] = struct $Int ([[LOAD]] : $Builtin.Int64)
16- // CHECK-NEXT: destroy_addr [[ATOMIC]] : $*Atomic<Int>
17- // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
18- // CHECK-NEXT: return [[INT]] : $Int
11+ // CHECK-LABEL: sil {{.*}} @localLoad {{.*}} {
12+ // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
13+ // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
14+ // CHECK: builtin "atomicload_monotonic_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer)
15+ // CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
16+ // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
17+ // CHECK-LABEL: } // end sil function 'localLoad'
1918@_silgen_name ( " localLoad " )
2019func localLoad( ) -> Int {
2120 let x = Atomic ( 128 )
2221 return x. load ( ordering: . relaxed)
2322}
2423
25- // CHECK-LABEL: @localStore
26- // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
27- // CHECK: [[STORE_INT:%.*]] = integer_literal $Builtin.Int64, 0
28- // CHECK-NEXT: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]] : $*Atomic<Int> to $Builtin.RawPointer
29- // CHECK-NEXT: {{%.*}} = builtin "atomicstore_release_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer, [[STORE_INT]] : $Builtin.Int64) : $()
30- // CHECK-NEXT: destroy_addr [[ATOMIC]] : $*Atomic<Int>
31- // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
32- // CHECK: return {{%.*}} : $()
24+ // CHECK-LABEL: sil {{.*}} @localStore {{.*}} {
25+ // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
26+ // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
27+ // CHECK: builtin "atomicstore_release_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
28+ // CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
29+ // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
30+ // CHECK-LABEL: } // end sil function 'localStore'
3331@_silgen_name ( " localStore " )
3432func localStore( ) {
3533 let x = Atomic ( 128 )
3634 x. store ( 0 , ordering: . releasing)
3735}
3836
39- // CHECK-LABEL: @localExchange
40- // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
41- // CHECK: [[EXCHANGE_INT:%.*]] = integer_literal $Builtin.Int64, 0
42- // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]] : $*Atomic<Int> to $Builtin.RawPointer
43- // CHECK-NEXT: [[LOAD:%.*]] = builtin "atomicrmw_xchg_acquire_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer, [[EXCHANGE_INT]] : $Builtin.Int64) : $Builtin.Int64
44- // CHECK-NEXT: [[INT:%.*]] = struct $Int ([[LOAD]] : $Builtin.Int64)
45- // CHECK-NEXT: destroy_addr [[ATOMIC]] : $*Atomic<Int>
46- // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
47- // CHECK-NEXT: return [[INT]] : $Int
37+ // CHECK-LABEL: sil {{.*}} @localExchange {{.*}} {
38+ // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
39+ // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
40+ // CHECK: builtin "atomicrmw_xchg_acquire_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
41+ // CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
42+ // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
43+ // CHECK-LABEL: } // end sil function 'localExchange'
4844@_silgen_name ( " localExchange " )
4945func localExchange( ) -> Int {
5046 let x = Atomic ( 128 )
5147 return x. exchange ( 0 , ordering: . acquiring)
5248}
5349
54- // CHECK-LABEL: @localCompareExchange
55- // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
56- // CHECK-NEXT: [[EXPECTED_INT:%.*]] = integer_literal $Builtin.Int64, 128
57- // CHECK: [[DESIRED_INT:%.*]] = integer_literal $Builtin.Int64, 316
58- // CHECK-NEXT: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]] : $*Atomic<Int> to $Builtin.RawPointer
59- // CHECK-NEXT: [[CMPXCHG:%.*]] = builtin "cmpxchg_seqcst_seqcst_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer, [[EXPECTED_INT]] : $Builtin.Int64, [[DESIRED_INT]] : $Builtin.Int64) : $(Builtin.Int64, Builtin.Int1)
60- // CHECK-NEXT: [[LOADED:%.*]] = tuple_extract [[CMPXCHG]] : $(Builtin.Int64, Builtin.Int1), 0
61- // CHECK-NEXT: [[EXCHANGED:%.*]] = tuple_extract [[CMPXCHG]] : $(Builtin.Int64, Builtin.Int1), 1
62- // CHECK-NEXT: [[BOOL:%.*]] = struct $Bool ([[EXCHANGED]] : $Builtin.Int1)
63- // CHECK-NEXT: [[INT:%.*]] = struct $Int ([[LOADED]] : $Builtin.Int64)
64- // CHECK-NEXT: destroy_addr [[ATOMIC]] : $*Atomic<Int>
65- // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
66- // CHECK-NEXT: [[RETURN:%.*]] = tuple ([[BOOL]] : $Bool, [[INT]] : $Int)
67- // CHECK-NEXT: return [[RETURN]] : $(Bool, Int)
50+ // CHECK-LABEL: sil {{.*}} @localCompareExchange {{.*}} {
51+ // CHECK: [[ATOMIC:%.*]] = alloc_stack [lexical] $Atomic<Int>
52+ // CHECK: [[ATOMIC_PTR:%.*]] = address_to_pointer [[ATOMIC]]
53+ // CHECK: builtin "cmpxchg_seqcst_seqcst_Int64"([[ATOMIC_PTR]] : $Builtin.RawPointer
54+ // CHECK: destroy_addr [[ATOMIC]] : $*Atomic<Int>
55+ // CHECK-NEXT: dealloc_stack [[ATOMIC]] : $*Atomic<Int>
56+ // CHECK-LABEL: } // end sil function 'localCompareExchange'
6857@_silgen_name ( " localCompareExchange " )
6958func localCompareExchange( ) -> ( exchanged: Bool , original: Int ) {
7059 let x = Atomic ( 128 )
0 commit comments