Slide 103
Slide 103 text
sumϝιου
define hidden swiftcc void @"$sST1dAA7Addable7ElementRpzrlE3sumADyF"(
%swift.opaque* noalias nocapture sret,
%swift.type* %Self,
i8** %Self.Sequence,
i8** %Self.Element.Addable,
%swift.opaque* noalias nocapture swiftself) #0 {
entry:
%Self1 = alloca %swift.type*, align 8
%Self.Element2 = alloca %swift.type*, align 8
%swifterror = alloca swifterror %swift.error*, align 8
store %swift.error* null, %swift.error** %swifterror, align 8
store %swift.type* %Self, %swift.type** %Self1, align 8
%2 = call swiftcc %swift.metadata_response @swift_getAssociatedTypeWitness(
i64 0, i8** %Self.Sequence, %swift.type* %Self,
%swift.protocol_requirement* @"$sSTTL",
%swift.protocol_requirement* @"$s7ElementSTTl") #6
%Self.Element = extractvalue %swift.metadata_response %2, 0
store %swift.type* %Self.Element, %swift.type** %Self.Element2, align 8
%3 = bitcast %swift.type* %Self.Element to i8***
%4 = getelementptr inbounds i8**, i8*** %3, i64 -1
%Self.Element.valueWitnesses = load i8**, i8*** %4, align 8, !invariant.load !23, !dereferenceable !24
%5 = getelementptr inbounds i8*, i8** %Self.Element.valueWitnesses, i32 8
%6 = load i8*, i8** %5, align 8, !invariant.load !23
%size = ptrtoint i8* %6 to i64
%7 = alloca i8, i64 %size, align 16
call void @llvm.lifetime.start.p0i8(i64 -1, i8* %7)
%8 = bitcast i8* %7 to %swift.opaque*
%9 = getelementptr inbounds i8*, i8** %Self.Element.Addable, i32 1
%10 = load i8*, i8** %9, align 8, !invariant.load !23
%11 = bitcast i8* %10 to void (%swift.opaque*, %swift.type*, %swift.type*, i8**)*
call swiftcc void %11(
%swift.opaque* noalias nocapture sret %8,
%swift.type* swiftself %Self.Element,
%swift.type* %Self.Element,
i8** %Self.Element.Addable)
%12 = call noalias %swift.refcounted* @swift_allocObject(
%swift.type* getelementptr inbounds (
%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata,
i32 0, i32 2),
i64 40, i64 7) #5
%13 = bitcast %swift.refcounted* %12 to <{ %swift.refcounted, [24 x i8] }>*
%14 = getelementptr inbounds <{ %swift.refcounted, [24 x i8] }>,
<{ %swift.refcounted, [24 x i8] }>* %13, i32 0, i32 1
%15 = bitcast [24 x i8]* %14 to %swift.type**
store %swift.type* %Self, %swift.type** %15, align 8
%16 = getelementptr inbounds %swift.type*, %swift.type** %15, i32 1
%17 = bitcast %swift.type** %16 to i8***
store i8** %Self.Sequence, i8*** %17, align 8
%18 = getelementptr inbounds %swift.type*, %swift.type** %15, i32 2
%19 = bitcast %swift.type** %18 to i8***
store i8** %Self.Element.Addable, i8*** %19, align 8
%20 = call %swift.refcounted* @swift_retain(%swift.refcounted* returned %12) #5
%21 = bitcast %swift.refcounted* %12 to %swift.opaque*
call swiftcc void @"$sSTsE6reduceyqd__qd___qd__qd___7ElementQztKXEtKlF"(
%swift.opaque* noalias nocapture sret %0,
%swift.opaque* noalias nocapture %8,
i8* bitcast (
void (%swift.opaque*, %swift.opaque*, %swift.opaque*, %swift.refcounted*)*
@"$sST1dAA7Addable7ElementRpzrlE3sumADyFA2D_ADtXEfU_TA"
to i8*),
%swift.opaque* %21,
%swift.type* %Self,
%swift.type* %Self.Element,
i8** %Self.Sequence,
%swift.opaque* noalias nocapture swiftself %1,
%swift.error** noalias nocapture swifterror dereferenceable(8) %swifterror)
%22 = load %swift.error*, %swift.error** %swifterror, align 8
%23 = icmp ne %swift.error* %22, null
br i1 %23, label %28, label %24
; :24: ; preds = %entry
call void @swift_release(%swift.refcounted* %12) #5
call void @swift_release(%swift.refcounted* %12) #5
%25 = getelementptr inbounds i8*, i8** %Self.Element.valueWitnesses, i32 1
%26 = load i8*, i8** %25, align 8, !invariant.load !23
%destroy = bitcast i8* %26 to void (%swift.opaque*, %swift.type*)*
call void %destroy(%swift.opaque* noalias %8, %swift.type* %Self.Element) #5
%27 = bitcast %swift.opaque* %8 to i8*
call void @llvm.lifetime.end.p0i8(i64 -1, i8* %27)
ret void
; :28: ; preds = %entry
%29 = phi %swift.error* [ %22, %entry ]
store %swift.error* null, %swift.error** %swifterror, align 8
call void @swift_release(%swift.refcounted* %12) #5
unreachable
}
103