@@ -16,24 +16,21 @@ func TreeA_cases<T>(_ t: T, l: TreeA<T>, r: TreeA<T>) {
16
16
let _ = TreeA< T> . Nil
17
17
18
18
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeA<T>.Type
19
- // CHECK-NEXT: [[T_BUF:%.*]] = alloc_stack $T
20
- // CHECK-NEXT: copy_addr [[ARG1]] to [init] [[T_BUF]] : $*T
21
19
// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <T>
22
20
// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
23
- // CHECK-NEXT: copy_addr [take] [[T_BUF ]] to [init] [[PB]]
21
+ // CHECK-NEXT: copy_addr [[ARG1 ]] to [init] [[PB]]
24
22
// CHECK-NEXT: [[LEAF:%.*]] = enum $TreeA<T>, #TreeA.Leaf!enumelt, [[BOX]]
25
23
// CHECK-NEXT: destroy_value [[LEAF]]
26
- // CHECK-NEXT: dealloc_stack [[T_BUF]] : $*T
27
24
let _ = TreeA< T> . Leaf( t)
28
25
29
26
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeA<T>.Type
30
- // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]]
31
- // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]]
32
27
// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>
33
28
// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
34
29
// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 0
35
30
// CHECK-NEXT: [[RIGHT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 1
31
+ // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]]
36
32
// CHECK-NEXT: store [[ARG2_COPY]] to [init] [[LEFT]]
33
+ // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]]
37
34
// CHECK-NEXT: store [[ARG3_COPY]] to [init] [[RIGHT]]
38
35
// CHECK-NEXT: [[BRANCH:%.*]] = enum $TreeA<T>, #TreeA.Branch!enumelt, [[BOX]]
39
36
// CHECK-NEXT: destroy_value [[BRANCH]]
@@ -46,9 +43,9 @@ func TreeA_cases<T>(_ t: T, l: TreeA<T>, r: TreeA<T>) {
46
43
func TreeA_reabstract( _ f: @escaping ( Int ) -> Int ) {
47
44
// CHECK: bb0([[ARG:%.*]] : @guaranteed $@callee_guaranteed (Int) -> Int):
48
45
// CHECK: [[METATYPE:%.*]] = metatype $@thin TreeA<(Int) -> Int>.Type
49
- // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
50
46
// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(Int) -> Int>
51
47
// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
48
+ // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
52
49
// CHECK: [[THUNK:%.*]] = function_ref @$sS2iIegyd_S2iIegnr_TR
53
50
// CHECK-NEXT: [[FN:%.*]] = partial_apply [callee_guaranteed] [[THUNK]]([[ARG_COPY]])
54
51
// CHECK-NEXT: [[FNC:%.*]] = convert_function [[FN]]
@@ -77,36 +74,27 @@ func TreeB_cases<T>(_ t: T, l: TreeB<T>, r: TreeB<T>) {
77
74
let _ = TreeB< T> . Nil
78
75
79
76
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeB<T>.Type
80
- // CHECK-NEXT: [[T_BUF:%.*]] = alloc_stack $T
81
- // CHECK-NEXT: copy_addr %0 to [init] [[T_BUF]]
82
77
// CHECK-NEXT: [[LEAF:%.*]] = alloc_stack $TreeB<T>
83
78
// CHECK-NEXT: [[PAYLOAD:%.*]] = init_enum_data_addr [[LEAF]] : $*TreeB<T>, #TreeB.Leaf!enumelt
84
- // CHECK-NEXT: copy_addr [take] [[T_BUF]] to [init] [[PAYLOAD]]
79
+ // CHECK-NEXT: copy_addr %0 to [init] [[PAYLOAD]]
85
80
// CHECK-NEXT: inject_enum_addr [[LEAF]] : $*TreeB<T>, #TreeB.Leaf!enumelt
86
81
// CHECK-NEXT: destroy_addr [[LEAF]]
87
82
// CHECK-NEXT: dealloc_stack [[LEAF]]
88
- // CHECK-NEXT: dealloc_stack [[T_BUF]]
89
83
let _ = TreeB< T> . Leaf( t)
90
84
91
85
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeB<T>.Type
92
- // CHECK-NEXT: [[ARG1_COPY:%.*]] = alloc_stack $TreeB<T>
93
- // CHECK-NEXT: copy_addr %1 to [init] [[ARG1_COPY]] : $*TreeB<T>
94
- // CHECK-NEXT: [[ARG2_COPY:%.*]] = alloc_stack $TreeB<T>
95
- // CHECK-NEXT: copy_addr %2 to [init] [[ARG2_COPY]] : $*TreeB<T>
96
86
// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeB<τ_0_0>, right: TreeB<τ_0_0>) } <T>
97
87
// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
98
88
// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]]
99
89
// CHECK-NEXT: [[RIGHT:%.*]] = tuple_element_addr [[PB]]
100
- // CHECK-NEXT: copy_addr [take] [[ARG1_COPY]] to [init] [[LEFT]] : $*TreeB<T>
101
- // CHECK-NEXT: copy_addr [take] [[ARG2_COPY]] to [init] [[RIGHT]] : $*TreeB<T>
90
+ // CHECK-NEXT: copy_addr %1 to [init] [[LEFT]] : $*TreeB<T>
91
+ // CHECK-NEXT: copy_addr %2 to [init] [[RIGHT]] : $*TreeB<T>
102
92
// CHECK-NEXT: [[BRANCH:%.*]] = alloc_stack $TreeB<T>
103
93
// CHECK-NEXT: [[PAYLOAD:%.*]] = init_enum_data_addr [[BRANCH]]
104
94
// CHECK-NEXT: store [[BOX]] to [init] [[PAYLOAD]]
105
95
// CHECK-NEXT: inject_enum_addr [[BRANCH]] : $*TreeB<T>, #TreeB.Branch!enumelt
106
96
// CHECK-NEXT: destroy_addr [[BRANCH]]
107
97
// CHECK-NEXT: dealloc_stack [[BRANCH]]
108
- // CHECK-NEXT: dealloc_stack [[ARG2_COPY]]
109
- // CHECK-NEXT: dealloc_stack [[ARG1_COPY]]
110
98
let _ = TreeB< T> . Branch( left: l, right: r)
111
99
112
100
// CHECK: return
@@ -126,13 +114,13 @@ func TreeInt_cases(_ t: Int, l: TreeInt, r: TreeInt) {
126
114
let _ = TreeInt . Leaf ( t)
127
115
128
116
// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeInt.Type
129
- // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]] : $TreeInt
130
- // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]] : $TreeInt
131
117
// CHECK-NEXT: [[BOX:%.*]] = alloc_box ${ var (left: TreeInt, right: TreeInt) }
132
118
// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
133
119
// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]]
134
120
// CHECK-NEXT: [[RIGHT:%.*]] = tuple_element_addr [[PB]]
121
+ // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]] : $TreeInt
135
122
// CHECK-NEXT: store [[ARG2_COPY]] to [init] [[LEFT]]
123
+ // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]] : $TreeInt
136
124
// CHECK-NEXT: store [[ARG3_COPY]] to [init] [[RIGHT]]
137
125
// CHECK-NEXT: [[BRANCH:%.*]] = enum $TreeInt, #TreeInt.Branch!enumelt, [[BOX]]
138
126
// CHECK-NEXT: destroy_value [[BRANCH]]
0 commit comments