@@ -8,63 +8,52 @@ import Synchronization
8
8
// Ensure that we don't destroy the atomic before operations
9
9
//===----------------------------------------------------------------------===//
10
10
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'
19
18
@_silgen_name ( " localLoad " )
20
19
func localLoad( ) -> Int {
21
20
let x = Atomic ( 128 )
22
21
return x. load ( ordering: . relaxed)
23
22
}
24
23
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'
33
31
@_silgen_name ( " localStore " )
34
32
func localStore( ) {
35
33
let x = Atomic ( 128 )
36
34
x. store ( 0 , ordering: . releasing)
37
35
}
38
36
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'
48
44
@_silgen_name ( " localExchange " )
49
45
func localExchange( ) -> Int {
50
46
let x = Atomic ( 128 )
51
47
return x. exchange ( 0 , ordering: . acquiring)
52
48
}
53
49
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'
68
57
@_silgen_name ( " localCompareExchange " )
69
58
func localCompareExchange( ) -> ( exchanged: Bool , original: Int ) {
70
59
let x = Atomic ( 128 )
0 commit comments