Slide 26
Slide 26 text
define hidden swiftcc void @"$s1a5callFyyF"() #0 {
entry:
%p2.debug = alloca i8*, align 8
%0 = bitcast i8** %p2.debug to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %0, i8 0, i64 8, i1 false)
%p1.debug = alloca i8*, align 8
%1 = bitcast i8** %p1.debug to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %1, i8 0, i64 8, i1 false)
%2 = call swiftcc %swift.metadata_response
@swift_getOpaqueTypeMetadata(
i64 0, i8* undef,
%swift.type_descriptor* bitcast (
<{ i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i32, i32, i32, i32, i32 }>*
@"$s1a1fQryFQOMQ"
to %swift.type_descriptor*
), i64 0
) #5
%3 = extractvalue %swift.metadata_response %2, 0
%4 = bitcast %swift.type* %3 to i8***
%5 = getelementptr inbounds i8**, i8*** %4, i64 -1
%.valueWitnesses = load i8**, i8*** %5, align 8, !invariant.load !42, !dereferenceable !43
%6 = bitcast i8** %.valueWitnesses to %swift.vwtable*
%7 = getelementptr inbounds %swift.vwtable, %swift.vwtable* %6, i32 0, i32 8
%size = load i64, i64* %7, align 8, !invariant.load !42
%p2 = alloca i8, i64 %size, align 16
call void @llvm.lifetime.start.p0i8(i64 -1, i8* %p2)
%8 = bitcast i8* %p2 to %swift.opaque*
store i8* %p2, i8** %p2.debug, align 8
%p1 = alloca i8, i64 %size, align 16
call void @llvm.lifetime.start.p0i8(i64 -1, i8* %p1)
%9 = bitcast i8* %p1 to %swift.opaque*
store i8* %p1, i8** %p1.debug, align 8
call swiftcc void @"$s1a1fQryF"(%swift.opaque* noalias nocapture sret %9)
%10 = getelementptr inbounds i8*, i8** %.valueWitnesses, i32 2
%11 = load i8*, i8** %10, align 8, !invariant.load !42
%initializeWithCopy = bitcast i8* %11 to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)*
%12 = call %swift.opaque* %initializeWithCopy(%swift.opaque* noalias %8, %swift.opaque* noalias %9, %swift.type* %3) #3
%13 = call swiftcc i8**
@swift_getOpaqueTypeConformance(
i8* undef,
%swift.type_descriptor* bitcast (
<{ i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i32, i32, i32, i32, i32 }>*
@"$s1a1fQryFQOMQ"
to %swift.type_descriptor*
), i64 1
) #5
%14 = getelementptr inbounds i8*, i8** %13, i32 1
%15 = load i8*, i8** %14, align 8, !invariant.load !42
%16 = bitcast i8* %15 to void (%swift.opaque*, %swift.type*, i8**)*
call swiftcc void %16(%swift.opaque* noalias nocapture swiftself %8, %swift.type* %3, i8** %13)
%17 = getelementptr inbounds i8*, i8** %.valueWitnesses, i32 1
%18 = load i8*, i8** %17, align 8, !invariant.load !42
%destroy = bitcast i8* %18 to void (%swift.opaque*, %swift.type*)*
call void %destroy(%swift.opaque* noalias %8, %swift.type* %3) #3
call void %destroy(%swift.opaque* noalias %9, %swift.type* %3) #3
%19 = bitcast %swift.opaque* %9 to i8*
call void @llvm.lifetime.end.p0i8(i64 -1, i8* %19)
%20 = bitcast %swift.opaque* %8 to i8*
call void @llvm.lifetime.end.p0i8(i64 -1, i8* %20)
ret void
}
26