@@ -106,3 +106,31 @@ bb0(%pack : $*Pack{Int, repeat each T, Int}, %value : $Int):
106
106
%ret = tuple ()
107
107
return %ret : $()
108
108
}
109
+
110
+ sil @blackhole : $<T> (@in T) -> () {
111
+ entry(%addr : $*T):
112
+ %ret = tuple ()
113
+ return %ret : $()
114
+ }
115
+
116
+ // CHECK-LABEL: define swiftcc void @test_tuple_pack_element_addr_1(
117
+ // CHECK-SAME: {{.*}}* nocapture [[TUPLE_ADDR:%[^,]+]], i{{(64|32)}} [[INDEX:%[^,]+]]
118
+ // CHECK: [[RESPONSE:%[^,]+]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata
119
+ // CHECK: [[UNCAST_METADATA:%[^,]+]] = extractvalue %swift.metadata_response [[RESPONSE]], 0
120
+ // CHECK: [[METADATA:%[^,]+]] = bitcast %swift.type* [[UNCAST_METADATA]] to %swift.tuple_type*
121
+ // CHECK: [[OFFSET_PTR:%[^,]+]] = getelementptr inbounds %swift.tuple_type, %swift.tuple_type* [[METADATA]], i{{(64|32)}} 0, i32 3, i{{(64|32)}} [[INDEX]]
122
+ // CHECK: [[OFFSET:%[^,]+]] = load i32, i32* [[OFFSET_PTR]], align 8
123
+ // CHECK: [[CAST_TUPLE_ADDR:%[^,]+]] = bitcast <{ %TSS }>* [[TUPLE_ADDR]] to i8*
124
+ // CHECK: [[UNCAST_ELEMENT_ADDR:%[^,]+]] = getelementptr inbounds i8, i8* [[CAST_TUPLE_ADDR]], i32 [[OFFSET]]
125
+ // CHECK: [[ELEMENT_ADDR:%[^,]+]] = bitcast i8* [[UNCAST_ELEMENT_ADDR]] to %swift.opaque*
126
+ // CHECK: call swiftcc void @blackhole(%swift.opaque* noalias nocapture [[ELEMENT_ADDR]], %swift.type* %"\CF\84_1_0")
127
+ sil @test_tuple_pack_element_addr_1 : $<T, U> (@inout (String, T, U, Int), Builtin.Word) -> () {
128
+ bb0(%tuple : $*(String, T, U, Int), %i : $Builtin.Word):
129
+ %index = dynamic_pack_index %i of $Pack{Float, T, U, Float}
130
+ %0 = open_pack_element %index of <U_1...> at <Pack{String, T, U, Int}>, shape $U_1, uuid "01234567-89AB-CDEF-0123-000000000004"
131
+ %elt = tuple_pack_element_addr %index of %tuple : $*(String, T, U, Int) as $*@pack_element("01234567-89AB-CDEF-0123-000000000004") U_1
132
+ %blackhole = function_ref @blackhole : $@convention(thin) <T> (@in T) -> ()
133
+ apply %blackhole<(@pack_element("01234567-89AB-CDEF-0123-000000000004") U_1)>(%elt) : $@convention(thin) <T> (@in T) -> ()
134
+ %ret = tuple ()
135
+ return %ret : $()
136
+ }
0 commit comments