@@ -165,3 +165,40 @@ func wrapTupleElements<each T>(_ value: repeat each T) -> (repeat Wrapper<each T
165
165
// CHECK-NEXT: [[RET:%.*]] = tuple ()
166
166
// CHECK-NEXT: return [[RET]] : $()
167
167
}
168
+
169
+ // CHECK-LABEL: sil hidden [ossa] @$s4main20projectTupleElementsyyAA7WrapperVyxGxQpRvzlF : $@convention(thin) <each T> (@pack_guaranteed Pack{repeat Wrapper<each T>}) -> () {
170
+ func projectTupleElements< each T > ( _ value: repeat Wrapper < each T > ) {
171
+ // CHECK: [[VAR:%.*]] = alloc_stack [lexical] $(repeat each T)
172
+
173
+ // CHECK-NEXT: [[ZERO:%.*]] = integer_literal $Builtin.Word, 0
174
+ // CHECK-NEXT: [[ONE:%.*]] = integer_literal $Builtin.Word, 1
175
+ // CHECK-NEXT: [[PACK_LEN:%.*]] = pack_length $Pack{repeat each T}
176
+
177
+ // CHECK-NEXT: br bb1([[ZERO]] : $Builtin.Word)
178
+
179
+ // CHECK: bb1([[INDEX:%.*]] : $Builtin.Word):
180
+ // CHECK-NEXT: [[INDEX_EQ_LEN:%.*]] = builtin "cmp_eq_Word"([[INDEX]] : $Builtin.Word, [[PACK_LEN]] : $Builtin.Word)
181
+ // CHECK-NEXT: cond_br [[INDEX_EQ_LEN]], bb3, bb2
182
+
183
+ // CHECK: bb2:
184
+ // CHECK-NEXT: [[CUR_INDEX:%.*]] = dynamic_pack_index [[INDEX]] of $Pack{repeat each T}
185
+ // CHECK-NEXT: open_pack_element [[CUR_INDEX]] of <each T> at <Pack{repeat each T}>, shape $T, uuid "[[UUID:[0-9A-F-]*]]"
186
+ // CHECK-NEXT: [[TUPLE_ELT_ADDR:%.*]] = tuple_pack_element_addr [[CUR_INDEX]] of [[VAR]] : $*(repeat each T) as $*@pack_element("[[UUID]]") T
187
+ // CHECK-NEXT: [[VAL_ELT_ADDR:%.*]] = pack_element_get [[CUR_INDEX]] of %0 : $*Pack{repeat Wrapper<each T>} as $*Wrapper<@pack_element("[[UUID]]") T>
188
+ // CHECK-NEXT: [[TEMP:%.*]] = alloc_stack $Wrapper<@pack_element("[[UUID]]") T>
189
+ // CHECK-NEXT: copy_addr [[VAL_ELT_ADDR]] to [init] [[TEMP]] : $*Wrapper<@pack_element("[[UUID]]") T>
190
+ // CHECK-NEXT: [[MEMBER:%.*]] = struct_element_addr [[TEMP]] : $*Wrapper<@pack_element("[[UUID]]") T>, #Wrapper.value
191
+ // CHECK-NEXT: copy_addr [[MEMBER]] to [init] [[TUPLE_ELT_ADDR]] : $*@pack_element("[[UUID]]") T
192
+ // CHECK-NEXT: destroy_addr [[TEMP]] : $*Wrapper<@pack_element("[[UUID]]") T>
193
+ // CHECK-NEXT: dealloc_stack [[TEMP]] : $*Wrapper<@pack_element("[[UUID]]") T>
194
+ // CHECK-NEXT: [[NEXT_INDEX:%.*]] = builtin "add_Word"([[INDEX]] : $Builtin.Word, [[ONE]] : $Builtin.Word) : $Builtin.Word
195
+ // CHECK-NEXT: br bb1([[NEXT_INDEX]] : $Builtin.Word)
196
+
197
+ // CHECK: bb3:
198
+ // CHECK-NEXT: destroy_addr [[VAR]] : $*(repeat each T)
199
+ // CHECK-NEXT: dealloc_stack [[VAR]] : $*(repeat each T)
200
+ // CHECK-NEXT: [[RET:%.*]] = tuple ()
201
+ // CHECK-NEXT: return [[RET]] : $()
202
+
203
+ let tuple = ( repeat ( each value) . value)
204
+ }
0 commit comments