Slide 41
Slide 41 text
define internal swiftcc %swift.metadata_response @"$S1g6RefBoxCMr"(%swift.type* %"RefBox", i8*, i8**) #0 {
entry:
%classFields = alloca [1 x i8**], align 8
%T1 = alloca %swift.type*, align 8
%2 = bitcast %swift.type* %"RefBox" to i64*
%3 = getelementptr inbounds i64, i64* %2, i64 15
%4 = bitcast [1 x i8**]* %classFields to i8*
call void @llvm.lifetime.start.p0i8(i64 8, i8* %4)
%5 = getelementptr inbounds [1 x i8**], [1 x i8**]* %classFields, i32 0, i32 0
%6 = bitcast %swift.type* %"RefBox" to %swift.type**
%7 = getelementptr inbounds %swift.type*, %swift.type** %6, i64 10
%T = load %swift.type*, %swift.type** %7, align 8, !invariant.load !33
%8 = call swiftcc %swift.metadata_response @swift_checkMetadataState(i64 319, %swift.type* %T)
%9 = extractvalue %swift.metadata_response %8, 0
%10 = extractvalue %swift.metadata_response %8, 1
%11 = icmp ule i64 %10, 63
br i1 %11, label %dependency-satisfied, label %metadata-dependencies.cont
dependency-satisfied: ; preds = %entry
store %swift.type* %9, %swift.type** %T1, align 8
%12 = bitcast %swift.type* %9 to i8***
%13 = getelementptr inbounds i8**, i8*** %12, i64 -1
%.valueWitnesses = load i8**, i8*** %13, align 8, !invariant.load !33, !dereferenceable !34
%14 = getelementptr inbounds i8*, i8** %.valueWitnesses, i32 8
%15 = getelementptr inbounds i8**, i8*** %5, i32 0
store i8** %14, i8*** %15, align 8
call void @swift_initClassMetadata(%swift.type* %"RefBox", %swift.type* null, i64 0, i64 1, i8*** %5, i64* %3)
%16 = bitcast i8*** %5 to i8*
call void @llvm.lifetime.end.p0i8(i64 8, i8* %16)
br label %metadata-dependencies.cont
metadata-dependencies.cont: ; preds = %dependency-satisfied, %entry
%17 = phi %swift.type* [ %9, %entry ], [ null, %dependency-satisfied ]
%18 = phi i64 [ 63, %entry ], [ 0, %dependency-satisfied ]
%19 = insertvalue %swift.metadata_response undef, %swift.type* %17, 0
%20 = insertvalue %swift.metadata_response %19, i64 %18, 1
ret %swift.metadata_response %20
}
41