@@ -16,24 +16,21 @@ func TreeA_cases<T>(_ t: T, l: TreeA<T>, r: TreeA<T>) {
1616 let _ = TreeA< T> . Nil
1717
1818// 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
2119// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <T>
2220// 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]]
2422// CHECK-NEXT: [[LEAF:%.*]] = enum $TreeA<T>, #TreeA.Leaf!enumelt, [[BOX]]
2523// CHECK-NEXT: destroy_value [[LEAF]]
26- // CHECK-NEXT: dealloc_stack [[T_BUF]] : $*T
2724 let _ = TreeA< T> . Leaf( t)
2825
2926// CHECK-NEXT: [[METATYPE:%.*]] = metatype $@thin TreeA<T>.Type
30- // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]]
31- // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]]
3227// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>
3328// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
3429// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 0
3530// CHECK-NEXT: [[RIGHT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 1
31+ // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]]
3632// CHECK-NEXT: store [[ARG2_COPY]] to [init] [[LEFT]]
33+ // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]]
3734// CHECK-NEXT: store [[ARG3_COPY]] to [init] [[RIGHT]]
3835// CHECK-NEXT: [[BRANCH:%.*]] = enum $TreeA<T>, #TreeA.Branch!enumelt, [[BOX]]
3936// CHECK-NEXT: destroy_value [[BRANCH]]
@@ -46,9 +43,9 @@ func TreeA_cases<T>(_ t: T, l: TreeA<T>, r: TreeA<T>) {
4643func TreeA_reabstract( _ f: @escaping ( Int ) -> Int ) {
4744// CHECK: bb0([[ARG:%.*]] : @guaranteed $@callee_guaranteed (Int) -> Int):
4845// CHECK: [[METATYPE:%.*]] = metatype $@thin TreeA<(Int) -> Int>.Type
49- // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
5046// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(Int) -> Int>
5147// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
48+ // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
5249// CHECK: [[THUNK:%.*]] = function_ref @$sS2iIegyd_S2iIegnr_TR
5350// CHECK-NEXT: [[FN:%.*]] = partial_apply [callee_guaranteed] [[THUNK]]([[ARG_COPY]])
5451// CHECK-NEXT: [[FNC:%.*]] = convert_function [[FN]]
@@ -77,36 +74,27 @@ func TreeB_cases<T>(_ t: T, l: TreeB<T>, r: TreeB<T>) {
7774 let _ = TreeB< T> . Nil
7875
7976// 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]]
8277// CHECK-NEXT: [[LEAF:%.*]] = alloc_stack $TreeB<T>
8378// 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]]
8580// CHECK-NEXT: inject_enum_addr [[LEAF]] : $*TreeB<T>, #TreeB.Leaf!enumelt
8681// CHECK-NEXT: destroy_addr [[LEAF]]
8782// CHECK-NEXT: dealloc_stack [[LEAF]]
88- // CHECK-NEXT: dealloc_stack [[T_BUF]]
8983 let _ = TreeB< T> . Leaf( t)
9084
9185// 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>
9686// CHECK-NEXT: [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeB<τ_0_0>, right: TreeB<τ_0_0>) } <T>
9787// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
9888// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]]
9989// 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>
10292// CHECK-NEXT: [[BRANCH:%.*]] = alloc_stack $TreeB<T>
10393// CHECK-NEXT: [[PAYLOAD:%.*]] = init_enum_data_addr [[BRANCH]]
10494// CHECK-NEXT: store [[BOX]] to [init] [[PAYLOAD]]
10595// CHECK-NEXT: inject_enum_addr [[BRANCH]] : $*TreeB<T>, #TreeB.Branch!enumelt
10696// CHECK-NEXT: destroy_addr [[BRANCH]]
10797// CHECK-NEXT: dealloc_stack [[BRANCH]]
108- // CHECK-NEXT: dealloc_stack [[ARG2_COPY]]
109- // CHECK-NEXT: dealloc_stack [[ARG1_COPY]]
11098 let _ = TreeB< T> . Branch( left: l, right: r)
11199
112100// CHECK: return
@@ -126,13 +114,13 @@ func TreeInt_cases(_ t: Int, l: TreeInt, r: TreeInt) {
126114 let _ = TreeInt . Leaf ( t)
127115
128116// 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
131117// CHECK-NEXT: [[BOX:%.*]] = alloc_box ${ var (left: TreeInt, right: TreeInt) }
132118// CHECK-NEXT: [[PB:%.*]] = project_box [[BOX]]
133119// CHECK-NEXT: [[LEFT:%.*]] = tuple_element_addr [[PB]]
134120// CHECK-NEXT: [[RIGHT:%.*]] = tuple_element_addr [[PB]]
121+ // CHECK-NEXT: [[ARG2_COPY:%.*]] = copy_value [[ARG2]] : $TreeInt
135122// CHECK-NEXT: store [[ARG2_COPY]] to [init] [[LEFT]]
123+ // CHECK-NEXT: [[ARG3_COPY:%.*]] = copy_value [[ARG3]] : $TreeInt
136124// CHECK-NEXT: store [[ARG3_COPY]] to [init] [[RIGHT]]
137125// CHECK-NEXT: [[BRANCH:%.*]] = enum $TreeInt, #TreeInt.Branch!enumelt, [[BOX]]
138126// CHECK-NEXT: destroy_value [[BRANCH]]
0 commit comments