Skip to content

Instantly share code, notes, and snippets.

@vanvoorden
Created July 16, 2024 20:05
Show Gist options
  • Save vanvoorden/aa279eb43920870f70dac07343c5fcc2 to your computer and use it in GitHub Desktop.
Save vanvoorden/aa279eb43920870f70dac07343c5fcc2 to your computer and use it in GitHub Desktop.
2024-07-16-1.txt
echo 'struct Foo<each T> {let tuple: (repeat () -> each T)};func test(_: Foo<Int>) {}' | swiftc -emit-ir -
; ModuleID = '<swift-imported-modules>'
source_filename = "<swift-imported-modules>"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx14.0.0"
%swift.vwtable = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, i32 }
%swift.full_existential_type = type { ptr, %swift.type }
%swift.type = type { i64 }
%swift.type_metadata_record = type { i32 }
%swift.opaque = type opaque
%swift.metadata_response = type { ptr, i64 }
%swift.tuple_type = type { %swift.type, i64, ptr, [0 x %swift.tuple_element_type] }
%swift.tuple_element_type = type { ptr, i32 }
%swift.function = type { ptr, ptr }
%T4main3FooVySi_QPG = type <{ %swift.function }>
@"symbolic yyc" = linkonce_odr hidden constant <{ [3 x i8], i8 }> <{ [3 x i8] c"yyc", i8 0 }>, section "__TEXT,__swift5_typeref, regular", no_sanitize_address, align 2
@"$syycMD" = linkonce_odr hidden global { i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (ptr @"symbolic yyc" to i64), i64 ptrtoint (ptr @"$syycMD" to i64)) to i32), i32 -3 }, align 8
@"\01l_entry_point" = private constant { i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (ptr @main to i64), i64 ptrtoint (ptr @"\01l_entry_point" to i64)) to i32), i32 0 }, section "__TEXT, __swift5_entry, regular, no_dead_strip", align 4
@"$s4main3FooVWV" = internal constant %swift.vwtable { ptr @"$s4main3FooVwCP", ptr @"$s4main3FooVwxx", ptr @"$s4main3FooVwcp", ptr @"$s4main3FooVwca", ptr @"$s4main3FooVwtk", ptr @"$s4main3FooVwta", ptr @"$s4main3FooVwet", ptr @"$s4main3FooVwst", i64 0, i64 0, i32 4194304, i32 0 }, align 8
@.str.4.main = private constant [5 x i8] c"main\00"
@"$s4mainMXM" = linkonce_odr hidden constant <{ i32, i32, i32 }> <{ i32 0, i32 0, i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.4.main to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32 }>, ptr @"$s4mainMXM", i32 0, i32 2) to i64)) to i32) }>, section "__TEXT,__constg_swiftt", align 4
@.str.3.Foo = private constant [4 x i8] c"Foo\00"
@"$s4main3FooVMI" = internal global [16 x ptr] zeroinitializer, align 8
@"$s4main3FooVMn" = hidden constant <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }> <{ i32 209, i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4mainMXM" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 1) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @.str.3.Foo to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMa" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 3) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMF" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 4) to i64)) to i32), i32 1, i32 4, i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMI" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 7) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMP" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i16, i16, i8, i8, i8, i8, i16, i16, i16, i16, i16, i16 }>, ptr @"$s4main3FooVMn", i32 0, i32 8) to i64)) to i32), i16 1, i16 0, i16 2, i16 1, i8 -127, i8 0, i8 0, i8 0, i16 1, i16 1, i16 0, i16 1, i16 0, i16 0 }>, section "__TEXT,__constg_swiftt", align 4
@"$syycML" = linkonce_odr hidden global ptr null, align 8
@"$sytN" = external global %swift.full_existential_type
@"$s4main3FooVMP" = internal constant <{ i32, i32, i32, i32 }> <{ i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMi" to i64), i64 ptrtoint (ptr @"$s4main3FooVMP" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMr" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32 }>, ptr @"$s4main3FooVMP", i32 0, i32 1) to i64)) to i32), i32 1073741824, i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVWV" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i32, i32, i32, i32 }>, ptr @"$s4main3FooVMP", i32 0, i32 3) to i64)) to i32) }>, align 8
@"symbolic _____ 4main3FooV" = linkonce_odr hidden constant <{ i8, i32, i8 }> <{ i8 1, i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMn" to i64), i64 ptrtoint (ptr getelementptr inbounds (<{ i8, i32, i8 }>, ptr @"symbolic _____ 4main3FooV", i32 0, i32 1) to i64)) to i32), i8 0 }>, section "__TEXT,__swift5_typeref, regular", no_sanitize_address, align 2
@"symbolic xycxQp_t" = linkonce_odr hidden constant <{ [8 x i8], i8 }> <{ [8 x i8] c"xycxQp_t", i8 0 }>, section "__TEXT,__swift5_typeref, regular", no_sanitize_address, align 2
@0 = private constant [6 x i8] c"tuple\00", section "__TEXT,__swift5_reflstr, regular", no_sanitize_address
@"$s4main3FooVMF" = internal constant { i32, i32, i16, i16, i32, i32, i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (ptr @"symbolic _____ 4main3FooV" to i64), i64 ptrtoint (ptr @"$s4main3FooVMF" to i64)) to i32), i32 0, i16 0, i16 12, i32 1, i32 0, i32 trunc (i64 sub (i64 ptrtoint (ptr @"symbolic xycxQp_t" to i64), i64 ptrtoint (ptr getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, ptr @"$s4main3FooVMF", i32 0, i32 6) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @0 to i64), i64 ptrtoint (ptr getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, ptr @"$s4main3FooVMF", i32 0, i32 7) to i64)) to i32) }, section "__TEXT,__swift5_fieldmd, regular", no_sanitize_address, align 4
@"$s4main3FooVHn" = private constant %swift.type_metadata_record { i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s4main3FooVMn" to i64), i64 ptrtoint (ptr @"$s4main3FooVHn" to i64)) to i32) }, section "__TEXT, __swift5_types, regular", no_sanitize_address, align 4
@__swift_reflection_version = linkonce_odr hidden constant i16 3
@llvm.used = appending global [5 x ptr] [ptr @main, ptr @"\01l_entry_point", ptr @"$s4main3FooVMF", ptr @"$s4main3FooVHn", ptr @__swift_reflection_version], section "llvm.metadata"
define i32 @main(i32 %0, ptr %1) #0 {
entry:
ret i32 0
}
define hidden swiftcc void @"$s4main3FooV5tuplexycxQp_tvg"(ptr noalias nocapture sret(%swift.opaque) %0, ptr %"Foo<repeat each T>", ptr noalias nocapture swiftself %1) #0 {
entry:
%2 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%3 = load i64, ptr %2, align 8, !invariant.load !18
%4 = icmp eq i64 %3, 1
br i1 %4, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%5 = add i64 0, %3
%6 = icmp ult i64 0, %5
br i1 %6, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%7 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %7, align 8, !invariant.load !18
%8 = ptrtoint ptr %"Pack{repeat each T}" to i64
%9 = and i64 %8, -2
%10 = inttoptr i64 %9 to ptr
%11 = getelementptr inbounds ptr, ptr %10, i64 0
%12 = load ptr, ptr %11, align 8
%13 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%14 = phi ptr [ %13, %pack-index-element-metadata ]
%15 = insertvalue %swift.metadata_response undef, ptr %14, 0
%16 = insertvalue %swift.metadata_response %15, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%17 = alloca ptr, i64 %3, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%18 = phi i64 [ 0, %actual-tuple ], [ %29, %pack-expansion-loop ]
%19 = icmp ult i64 %18, %3
br i1 %19, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%20 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %20, align 8, !invariant.load !18
%21 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%22 = and i64 %21, -2
%23 = inttoptr i64 %22 to ptr
%24 = getelementptr inbounds ptr, ptr %23, i64 %18
%25 = load ptr, ptr %24, align 8
%26 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%27 = add i64 0, %18
%28 = getelementptr inbounds ptr, ptr %17, i64 %27
store ptr %26, ptr %28, align 8
%29 = add i64 %18, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%30 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %3, ptr %17, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%31 = phi %swift.metadata_response [ %16, %pack-index-element-exit ], [ %30, %pack-expansion-rest ]
%32 = extractvalue %swift.metadata_response %31, 0
%33 = getelementptr inbounds ptr, ptr %32, i64 -1
%.valueWitnesses = load ptr, ptr %33, align 8, !invariant.load !18, !dereferenceable !19
%34 = getelementptr inbounds %swift.vwtable, ptr %.valueWitnesses, i32 0, i32 8
%size = load i64, ptr %34, align 8, !invariant.load !18
%spsave2 = call ptr @llvm.stacksave()
%35 = alloca i8, i64 %size, align 16
call void @llvm.lifetime.start.p0(i64 -1, ptr %35)
%36 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 2
%37 = load ptr, ptr %36, align 8, !invariant.load !18
%38 = call ptr %37(ptr noalias %35, ptr noalias %1, ptr %32) #13
br label %39
39: ; preds = %tuple-rest6, %tuple-rest
%40 = phi i64 [ 0, %tuple-rest ], [ %57, %tuple-rest6 ]
%41 = icmp eq i64 %40, %3
br i1 %41, label %58, label %42
42: ; preds = %39
%43 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}3" = load ptr, ptr %43, align 8, !invariant.load !18
%44 = ptrtoint ptr %"Pack{repeat each T}3" to i64
%45 = and i64 %44, -2
%46 = inttoptr i64 %45 to ptr
%47 = getelementptr inbounds ptr, ptr %46, i64 %40
%48 = load ptr, ptr %47, align 8
%49 = getelementptr inbounds ptr, ptr %0, i64 %40
%50 = load ptr, ptr %49, align 8
%51 = icmp eq i64 %3, 1
br i1 %51, label %vanishing-tuple4, label %actual-tuple5
vanishing-tuple4: ; preds = %42
br label %tuple-rest6
actual-tuple5: ; preds = %42
%52 = getelementptr inbounds %swift.tuple_type, ptr %32, i64 0, i32 3, i64 %40, i32 1
%.dynamic.offset = load i32, ptr %52, align 8
br label %tuple-rest6
tuple-rest6: ; preds = %actual-tuple5, %vanishing-tuple4
%53 = phi i32 [ 0, %vanishing-tuple4 ], [ %.dynamic.offset, %actual-tuple5 ]
%54 = getelementptr inbounds i8, ptr %35, i32 %53
%.fn = getelementptr inbounds %swift.function, ptr %54, i32 0, i32 0
%55 = load ptr, ptr %.fn, align 8
%.data = getelementptr inbounds %swift.function, ptr %54, i32 0, i32 1
%56 = load ptr, ptr %.data, align 8
%.fn7 = getelementptr inbounds %swift.function, ptr %50, i32 0, i32 0
store ptr %55, ptr %.fn7, align 8
%.data8 = getelementptr inbounds %swift.function, ptr %50, i32 0, i32 1
store ptr %56, ptr %.data8, align 8
%57 = add i64 %40, 1
br label %39
58: ; preds = %39
call void @llvm.lifetime.end.p0(i64 -1, ptr %35)
call void @llvm.stackrestore(ptr %spsave2)
ret void
}
; Function Attrs: noinline nounwind readonly willreturn
define linkonce_odr hidden ptr @__swift_instantiateConcreteTypeFromMangledName(ptr %0) #1 {
entry:
%1 = load atomic i64, ptr %0 monotonic, align 8
%2 = icmp slt i64 %1, 0
%3 = call i1 @llvm.expect.i1(i1 %2, i1 false)
br i1 %3, label %7, label %4
4: ; preds = %7, %entry
%5 = phi i64 [ %1, %entry ], [ %16, %7 ]
%6 = inttoptr i64 %5 to ptr
ret ptr %6
7: ; preds = %entry
%8 = ashr i64 %1, 32
%9 = sub i64 0, %8
%10 = trunc i64 %1 to i32
%11 = sext i32 %10 to i64
%12 = ptrtoint ptr %0 to i64
%13 = add i64 %12, %11
%14 = inttoptr i64 %13 to ptr
%15 = call swiftcc ptr @swift_getTypeByMangledNameInContext2(ptr %14, i64 %9, ptr null, ptr null) #16
%16 = ptrtoint ptr %15 to i64
store atomic i64 %16, ptr %0 monotonic, align 8
br label %4
}
; Function Attrs: nocallback nofree nosync nounwind readnone willreturn
declare i1 @llvm.expect.i1(i1, i1) #2
; Function Attrs: argmemonly nounwind
declare swiftcc ptr @swift_getTypeByMangledNameInContext2(ptr, i64, ptr, ptr) #3
; Function Attrs: cold noreturn nounwind
declare void @llvm.trap() #4
; Function Attrs: nocallback nofree nosync nounwind willreturn
declare ptr @llvm.stacksave() #5
; Function Attrs: noinline nounwind readonly willreturn
define linkonce_odr hidden ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr %0) #1 {
entry:
%1 = load atomic i64, ptr %0 monotonic, align 8
%2 = icmp slt i64 %1, 0
%3 = call i1 @llvm.expect.i1(i1 %2, i1 false)
br i1 %3, label %7, label %4
4: ; preds = %7, %entry
%5 = phi i64 [ %1, %entry ], [ %16, %7 ]
%6 = inttoptr i64 %5 to ptr
ret ptr %6
7: ; preds = %entry
%8 = ashr i64 %1, 32
%9 = sub i64 0, %8
%10 = trunc i64 %1 to i32
%11 = sext i32 %10 to i64
%12 = ptrtoint ptr %0 to i64
%13 = add i64 %12, %11
%14 = inttoptr i64 %13 to ptr
%15 = call swiftcc ptr @swift_getTypeByMangledNameInContextInMetadataState2(i64 255, ptr %14, i64 %9, ptr null, ptr null) #16
%16 = ptrtoint ptr %15 to i64
store atomic i64 %16, ptr %0 monotonic, align 8
br label %4
}
; Function Attrs: argmemonly nounwind
declare swiftcc ptr @swift_getTypeByMangledNameInContextInMetadataState2(i64, ptr, i64, ptr, ptr) #3
; Function Attrs: nounwind readonly willreturn
declare swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64, i64, ptr, ptr, ptr) #6
; Function Attrs: nocallback nofree nosync nounwind willreturn
declare void @llvm.stackrestore(ptr) #5
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #7
; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #7
define hidden swiftcc void @"$s4main3FooV5tupleACyxxQp_QPGxycxQp_t_tcfC"(ptr noalias nocapture sret(%swift.opaque) %0, ptr noalias nocapture %1, i64 %2, ptr %"each T") #0 {
entry:
%T = alloca ptr, align 8
%3 = ptrtoint ptr %"each T" to i64
%4 = and i64 %3, -2
%5 = inttoptr i64 %4 to ptr
store ptr %5, ptr %T, align 8
%6 = icmp eq i64 %2, 1
br i1 %6, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%7 = add i64 0, %2
%8 = icmp ult i64 0, %7
br i1 %8, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%9 = ptrtoint ptr %"each T" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %2, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %29, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %2
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = ptrtoint ptr %"each T" to i64
%22 = and i64 %21, -2
%23 = inttoptr i64 %22 to ptr
%24 = getelementptr inbounds ptr, ptr %23, i64 %19
%25 = load ptr, ptr %24, align 8
%26 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%27 = add i64 0, %19
%28 = getelementptr inbounds ptr, ptr %18, i64 %27
store ptr %26, ptr %28, align 8
%29 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%30 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %2, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%31 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %30, %pack-expansion-rest ]
%32 = extractvalue %swift.metadata_response %31, 0
%33 = getelementptr inbounds ptr, ptr %32, i64 -1
%.valueWitnesses = load ptr, ptr %33, align 8, !invariant.load !18, !dereferenceable !19
%34 = getelementptr inbounds %swift.vwtable, ptr %.valueWitnesses, i32 0, i32 8
%size = load i64, ptr %34, align 8, !invariant.load !18
%spsave1 = call ptr @llvm.stacksave()
%35 = alloca i8, i64 %size, align 16
call void @llvm.lifetime.start.p0(i64 -1, ptr %35)
br label %36
36: ; preds = %tuple-rest4, %tuple-rest
%37 = phi i64 [ 0, %tuple-rest ], [ %53, %tuple-rest4 ]
%38 = icmp eq i64 %37, %2
br i1 %38, label %54, label %39
39: ; preds = %36
%40 = ptrtoint ptr %"each T" to i64
%41 = and i64 %40, -2
%42 = inttoptr i64 %41 to ptr
%43 = getelementptr inbounds ptr, ptr %42, i64 %37
%44 = load ptr, ptr %43, align 8
%45 = icmp eq i64 %2, 1
br i1 %45, label %vanishing-tuple2, label %actual-tuple3
vanishing-tuple2: ; preds = %39
br label %tuple-rest4
actual-tuple3: ; preds = %39
%46 = getelementptr inbounds %swift.tuple_type, ptr %32, i64 0, i32 3, i64 %37, i32 1
%.dynamic.offset = load i32, ptr %46, align 8
br label %tuple-rest4
tuple-rest4: ; preds = %actual-tuple3, %vanishing-tuple2
%47 = phi i32 [ 0, %vanishing-tuple2 ], [ %.dynamic.offset, %actual-tuple3 ]
%48 = getelementptr inbounds i8, ptr %35, i32 %47
%49 = getelementptr inbounds ptr, ptr %1, i64 %37
%50 = load ptr, ptr %49, align 8
%.fn = getelementptr inbounds %swift.function, ptr %50, i32 0, i32 0
%51 = load ptr, ptr %.fn, align 8
%.data = getelementptr inbounds %swift.function, ptr %50, i32 0, i32 1
%52 = load ptr, ptr %.data, align 8
%.fn5 = getelementptr inbounds %swift.function, ptr %48, i32 0, i32 0
store ptr %51, ptr %.fn5, align 8
%.data6 = getelementptr inbounds %swift.function, ptr %48, i32 0, i32 1
store ptr %52, ptr %.data6, align 8
%53 = add i64 %37, 1
br label %36
54: ; preds = %36
%55 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 4
%56 = load ptr, ptr %55, align 8, !invariant.load !18
%57 = call ptr %56(ptr noalias %0, ptr noalias %35, ptr %32) #13
call void @llvm.lifetime.end.p0(i64 -1, ptr %35)
call void @llvm.stackrestore(ptr %spsave1)
ret void
}
define hidden swiftcc void @"$s4main4testyyAA3FooVySi_QPGF"(ptr %0, ptr %1) #0 {
entry:
%_0.debug = alloca %T4main3FooVySi_QPG, align 8
call void @llvm.memset.p0.i64(ptr align 8 %_0.debug, i8 0, i64 16, i1 false)
call void @llvm.lifetime.start.p0(i64 16, ptr %_0.debug)
%_0.debug.tuple = getelementptr inbounds %T4main3FooVySi_QPG, ptr %_0.debug, i32 0, i32 0
%_0.debug.tuple.fn = getelementptr inbounds %swift.function, ptr %_0.debug.tuple, i32 0, i32 0
store ptr %0, ptr %_0.debug.tuple.fn, align 8
%_0.debug.tuple.data = getelementptr inbounds %swift.function, ptr %_0.debug.tuple, i32 0, i32 1
store ptr %1, ptr %_0.debug.tuple.data, align 8
ret void
}
; Function Attrs: argmemonly nocallback nofree nounwind willreturn writeonly
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #8
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVMi"(ptr %0, ptr %1, ptr %2) #9 {
entry:
%T = alloca ptr, align 8
%3 = load i64, ptr %1, align 8
%4 = getelementptr inbounds ptr, ptr %1, i32 1
%"each T" = load ptr, ptr %4, align 8
%5 = ptrtoint ptr %"each T" to i64
%6 = and i64 %5, -2
%7 = inttoptr i64 %6 to ptr
store ptr %7, ptr %T, align 8
%8 = call ptr @swift_allocateGenericValueMetadata(ptr %0, ptr %1, ptr %2, i64 24) #13
ret ptr %8
}
; Function Attrs: nounwind
define internal swiftcc %swift.metadata_response @"$s4main3FooVMr"(ptr %"Foo<repeat each T>", ptr %0, ptr %1) #9 {
entry:
%classFields = alloca [1 x ptr], align 8
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%2 = getelementptr inbounds i32, ptr %"Foo<repeat each T>", i64 8
call void @llvm.lifetime.start.p0(i64 8, ptr %classFields)
%3 = getelementptr inbounds [1 x ptr], ptr %classFields, i32 0, i32 0
%4 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%5 = load i64, ptr %4, align 8, !invariant.load !18
%6 = icmp eq i64 %5, 1
br i1 %6, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%7 = add i64 0, %5
%8 = icmp ult i64 0, %7
br i1 %8, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%9 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %9, align 8, !invariant.load !18
%10 = ptrtoint ptr %"Pack{repeat each T}" to i64
%11 = and i64 %10, -2
%12 = inttoptr i64 %11 to ptr
store ptr %12, ptr %T, align 8
%13 = ptrtoint ptr %"Pack{repeat each T}" to i64
%14 = and i64 %13, -2
%15 = inttoptr i64 %14 to ptr
%16 = getelementptr inbounds ptr, ptr %15, i64 0
%17 = load ptr, ptr %16, align 8
%18 = call swiftcc %swift.metadata_response @"$syycMa"(i64 319) #14
%19 = extractvalue %swift.metadata_response %18, 0
%20 = extractvalue %swift.metadata_response %18, 1
%21 = icmp ule i64 %20, 63
br i1 %21, label %dependency-satisfied, label %metadata-dependencies.cont
dependency-satisfied: ; preds = %pack-index-element-metadata
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %dependency-satisfied
%22 = phi ptr [ %19, %dependency-satisfied ]
%23 = call swiftcc %swift.metadata_response @swift_checkMetadataState(i64 256, ptr %22) #6
%24 = extractvalue %swift.metadata_response %23, 0
%25 = extractvalue %swift.metadata_response %23, 1
%26 = insertvalue %swift.metadata_response undef, ptr %24, 0
%27 = insertvalue %swift.metadata_response %26, i64 %25, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%28 = alloca ptr, i64 %5, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%29 = phi i64 [ 0, %actual-tuple ], [ %43, %pack-expansion-loop ]
%30 = icmp ult i64 %29, %5
br i1 %30, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%31 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %31, align 8, !invariant.load !18
%32 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%33 = and i64 %32, -2
%34 = inttoptr i64 %33 to ptr
store ptr %34, ptr %T2, align 8
%35 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%36 = and i64 %35, -2
%37 = inttoptr i64 %36 to ptr
%38 = getelementptr inbounds ptr, ptr %37, i64 %29
%39 = load ptr, ptr %38, align 8
%40 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%41 = add i64 0, %29
%42 = getelementptr inbounds ptr, ptr %28, i64 %41
store ptr %40, ptr %42, align 8
%43 = add i64 %29, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%44 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 319, i64 %5, ptr %28, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%45 = phi %swift.metadata_response [ %27, %pack-index-element-exit ], [ %44, %pack-expansion-rest ]
%46 = extractvalue %swift.metadata_response %45, 0
%47 = extractvalue %swift.metadata_response %45, 1
%48 = icmp ule i64 %47, 63
br i1 %48, label %dependency-satisfied3, label %metadata-dependencies.cont
dependency-satisfied3: ; preds = %tuple-rest
%49 = getelementptr inbounds ptr, ptr %46, i64 -1
%.valueWitnesses = load ptr, ptr %49, align 8, !invariant.load !18, !dereferenceable !19
%50 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 8
%51 = getelementptr inbounds ptr, ptr %3, i32 0
store ptr %50, ptr %51, align 8
call void @swift_initStructMetadata(ptr %"Foo<repeat each T>", i64 0, i64 1, ptr %3, ptr %2) #13
call void @llvm.lifetime.end.p0(i64 8, ptr %3)
br label %metadata-dependencies.cont
metadata-dependencies.cont: ; preds = %dependency-satisfied3, %tuple-rest, %pack-index-element-metadata
%52 = phi ptr [ %19, %pack-index-element-metadata ], [ %46, %tuple-rest ], [ null, %dependency-satisfied3 ]
%53 = phi i64 [ 63, %pack-index-element-metadata ], [ 63, %tuple-rest ], [ 0, %dependency-satisfied3 ]
%54 = insertvalue %swift.metadata_response undef, ptr %52, 0
%55 = insertvalue %swift.metadata_response %54, i64 %53, 1
ret %swift.metadata_response %55
}
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVwCP"(ptr noalias %dest, ptr noalias %src, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = load ptr, ptr %.valueWitnesses, align 8, !invariant.load !18
%39 = call ptr %38(ptr noalias %dest, ptr noalias %src, ptr %36) #13
ret ptr %39
}
; Function Attrs: nounwind
define internal void @"$s4main3FooVwxx"(ptr noalias %object, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 1
%39 = load ptr, ptr %38, align 8, !invariant.load !18
call void %39(ptr noalias %object, ptr %36) #13
ret void
}
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVwcp"(ptr noalias %dest, ptr noalias %src, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 2
%39 = load ptr, ptr %38, align 8, !invariant.load !18
%40 = call ptr %39(ptr noalias %dest, ptr noalias %src, ptr %36) #13
ret ptr %dest
}
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVwca"(ptr %dest, ptr %src, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 3
%39 = load ptr, ptr %38, align 8, !invariant.load !18
%40 = call ptr %39(ptr %dest, ptr %src, ptr %36) #13
ret ptr %dest
}
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVwtk"(ptr noalias %dest, ptr noalias %src, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 4
%39 = load ptr, ptr %38, align 8, !invariant.load !18
%40 = call ptr %39(ptr noalias %dest, ptr noalias %src, ptr %36) #13
ret ptr %dest
}
; Function Attrs: nounwind
define internal ptr @"$s4main3FooVwta"(ptr noalias %dest, ptr noalias %src, ptr %"Foo<repeat each T>") #9 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%0 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%1 = load i64, ptr %0, align 8, !invariant.load !18
%2 = icmp eq i64 %1, 1
br i1 %2, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%3 = add i64 0, %1
%4 = icmp ult i64 0, %3
br i1 %4, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%5 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %5, align 8, !invariant.load !18
%6 = ptrtoint ptr %"Pack{repeat each T}" to i64
%7 = and i64 %6, -2
%8 = inttoptr i64 %7 to ptr
store ptr %8, ptr %T, align 8
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
%12 = getelementptr inbounds ptr, ptr %11, i64 0
%13 = load ptr, ptr %12, align 8
%14 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%15 = phi ptr [ %14, %pack-index-element-metadata ]
%16 = insertvalue %swift.metadata_response undef, ptr %15, 0
%17 = insertvalue %swift.metadata_response %16, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%18 = alloca ptr, i64 %1, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%19 = phi i64 [ 0, %actual-tuple ], [ %33, %pack-expansion-loop ]
%20 = icmp ult i64 %19, %1
br i1 %20, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%21 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %21, align 8, !invariant.load !18
%22 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%23 = and i64 %22, -2
%24 = inttoptr i64 %23 to ptr
store ptr %24, ptr %T2, align 8
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
%28 = getelementptr inbounds ptr, ptr %27, i64 %19
%29 = load ptr, ptr %28, align 8
%30 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%31 = add i64 0, %19
%32 = getelementptr inbounds ptr, ptr %18, i64 %31
store ptr %30, ptr %32, align 8
%33 = add i64 %19, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%34 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %1, ptr %18, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%35 = phi %swift.metadata_response [ %17, %pack-index-element-exit ], [ %34, %pack-expansion-rest ]
%36 = extractvalue %swift.metadata_response %35, 0
%37 = getelementptr inbounds ptr, ptr %36, i64 -1
%.valueWitnesses = load ptr, ptr %37, align 8, !invariant.load !18, !dereferenceable !19
%38 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 5
%39 = load ptr, ptr %38, align 8, !invariant.load !18
%40 = call ptr %39(ptr noalias %dest, ptr noalias %src, ptr %36) #13
ret ptr %dest
}
; Function Attrs: nounwind readonly
define internal i32 @"$s4main3FooVwet"(ptr noalias %value, i32 %numEmptyCases, ptr %"Foo<repeat each T>") #10 {
entry:
%0 = call swiftcc i32 @swift_getEnumTagSinglePayloadGeneric(ptr %value, i32 %numEmptyCases, ptr %"Foo<repeat each T>", ptr @__swift_get_extra_inhabitant_index) #6
ret i32 %0
}
define private swiftcc i32 @__swift_get_extra_inhabitant_index(ptr %0, i32 %1, ptr %"Foo<repeat each T>") #0 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%2 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%3 = load i64, ptr %2, align 8, !invariant.load !18
%4 = icmp eq i64 %3, 1
br i1 %4, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%5 = add i64 0, %3
%6 = icmp ult i64 0, %5
br i1 %6, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%7 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %7, align 8, !invariant.load !18
%8 = ptrtoint ptr %"Pack{repeat each T}" to i64
%9 = and i64 %8, -2
%10 = inttoptr i64 %9 to ptr
store ptr %10, ptr %T, align 8
%11 = ptrtoint ptr %"Pack{repeat each T}" to i64
%12 = and i64 %11, -2
%13 = inttoptr i64 %12 to ptr
%14 = getelementptr inbounds ptr, ptr %13, i64 0
%15 = load ptr, ptr %14, align 8
%16 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%17 = phi ptr [ %16, %pack-index-element-metadata ]
%18 = insertvalue %swift.metadata_response undef, ptr %17, 0
%19 = insertvalue %swift.metadata_response %18, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%20 = alloca ptr, i64 %3, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%21 = phi i64 [ 0, %actual-tuple ], [ %35, %pack-expansion-loop ]
%22 = icmp ult i64 %21, %3
br i1 %22, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%23 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %23, align 8, !invariant.load !18
%24 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%25 = and i64 %24, -2
%26 = inttoptr i64 %25 to ptr
store ptr %26, ptr %T2, align 8
%27 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%28 = and i64 %27, -2
%29 = inttoptr i64 %28 to ptr
%30 = getelementptr inbounds ptr, ptr %29, i64 %21
%31 = load ptr, ptr %30, align 8
%32 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%33 = add i64 0, %21
%34 = getelementptr inbounds ptr, ptr %20, i64 %33
store ptr %32, ptr %34, align 8
%35 = add i64 %21, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%36 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %3, ptr %20, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%37 = phi %swift.metadata_response [ %19, %pack-index-element-exit ], [ %36, %pack-expansion-rest ]
%38 = extractvalue %swift.metadata_response %37, 0
%39 = getelementptr inbounds ptr, ptr %38, i64 -1
%.valueWitnesses = load ptr, ptr %39, align 8, !invariant.load !18, !dereferenceable !19
%40 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 6
%41 = load ptr, ptr %40, align 8, !invariant.load !18
%42 = call i32 %41(ptr noalias %0, i32 %1, ptr %38) #15
ret i32 %42
}
; Function Attrs: nounwind readonly willreturn
declare swiftcc i32 @swift_getEnumTagSinglePayloadGeneric(ptr, i32, ptr, ptr) #6
; Function Attrs: nounwind
define internal void @"$s4main3FooVwst"(ptr noalias %value, i32 %whichCase, i32 %numEmptyCases, ptr %"Foo<repeat each T>") #9 {
entry:
call swiftcc void @swift_storeEnumTagSinglePayloadGeneric(ptr %value, i32 %whichCase, i32 %numEmptyCases, ptr %"Foo<repeat each T>", ptr @__swift_store_extra_inhabitant_index) #11
ret void
}
define private swiftcc void @__swift_store_extra_inhabitant_index(ptr %0, i32 %1, i32 %2, ptr %"Foo<repeat each T>") #0 {
entry:
%T = alloca ptr, align 8
%T2 = alloca ptr, align 8
%3 = getelementptr inbounds i64, ptr %"Foo<repeat each T>", i64 2
%4 = load i64, ptr %3, align 8, !invariant.load !18
%5 = icmp eq i64 %4, 1
br i1 %5, label %vanishing-tuple, label %actual-tuple
vanishing-tuple: ; preds = %entry
br label %pack-index-element-bounds
pack-index-element-bounds: ; preds = %vanishing-tuple
%6 = add i64 0, %4
%7 = icmp ult i64 0, %6
br i1 %7, label %pack-index-element-metadata, label %pack-index-element-trap
pack-index-element-trap: ; preds = %pack-index-element-bounds
call void @llvm.trap()
unreachable
pack-index-element-metadata: ; preds = %pack-index-element-bounds
%8 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}" = load ptr, ptr %8, align 8, !invariant.load !18
%9 = ptrtoint ptr %"Pack{repeat each T}" to i64
%10 = and i64 %9, -2
%11 = inttoptr i64 %10 to ptr
store ptr %11, ptr %T, align 8
%12 = ptrtoint ptr %"Pack{repeat each T}" to i64
%13 = and i64 %12, -2
%14 = inttoptr i64 %13 to ptr
%15 = getelementptr inbounds ptr, ptr %14, i64 0
%16 = load ptr, ptr %15, align 8
%17 = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$syycMD") #15
br label %pack-index-element-exit
pack-index-element-exit: ; preds = %pack-index-element-metadata
%18 = phi ptr [ %17, %pack-index-element-metadata ]
%19 = insertvalue %swift.metadata_response undef, ptr %18, 0
%20 = insertvalue %swift.metadata_response %19, i64 0, 1
br label %tuple-rest
actual-tuple: ; preds = %entry
%spsave = call ptr @llvm.stacksave()
%21 = alloca ptr, i64 %4, align 8
br label %pack-expansion-check
pack-expansion-check: ; preds = %pack-expansion-loop, %actual-tuple
%22 = phi i64 [ 0, %actual-tuple ], [ %36, %pack-expansion-loop ]
%23 = icmp ult i64 %22, %4
br i1 %23, label %pack-expansion-loop, label %pack-expansion-rest
pack-expansion-loop: ; preds = %pack-expansion-check
%24 = getelementptr inbounds ptr, ptr %"Foo<repeat each T>", i64 3
%"Pack{repeat each T}1" = load ptr, ptr %24, align 8, !invariant.load !18
%25 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%26 = and i64 %25, -2
%27 = inttoptr i64 %26 to ptr
store ptr %27, ptr %T2, align 8
%28 = ptrtoint ptr %"Pack{repeat each T}1" to i64
%29 = and i64 %28, -2
%30 = inttoptr i64 %29 to ptr
%31 = getelementptr inbounds ptr, ptr %30, i64 %22
%32 = load ptr, ptr %31, align 8
%33 = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$syycMD") #15
%34 = add i64 0, %22
%35 = getelementptr inbounds ptr, ptr %21, i64 %34
store ptr %33, ptr %35, align 8
%36 = add i64 %22, 1
br label %pack-expansion-check
pack-expansion-rest: ; preds = %pack-expansion-check
%37 = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata(i64 0, i64 %4, ptr %21, ptr null, ptr null) #6
call void @llvm.stackrestore(ptr %spsave)
br label %tuple-rest
tuple-rest: ; preds = %pack-expansion-rest, %pack-index-element-exit
%38 = phi %swift.metadata_response [ %20, %pack-index-element-exit ], [ %37, %pack-expansion-rest ]
%39 = extractvalue %swift.metadata_response %38, 0
%40 = getelementptr inbounds ptr, ptr %39, i64 -1
%.valueWitnesses = load ptr, ptr %40, align 8, !invariant.load !18, !dereferenceable !19
%41 = getelementptr inbounds ptr, ptr %.valueWitnesses, i32 7
%42 = load ptr, ptr %41, align 8, !invariant.load !18
call void %42(ptr noalias %0, i32 %1, i32 %1, ptr %39) #13
ret void
}
; Function Attrs: nounwind willreturn
declare swiftcc void @swift_storeEnumTagSinglePayloadGeneric(ptr, i32, i32, ptr, ptr) #11
; Function Attrs: noinline nounwind readnone
define hidden swiftcc %swift.metadata_response @"$s4main3FooVMa"(i64 %0, i64 %1, ptr %2) #12 {
entry:
%3 = inttoptr i64 %1 to ptr
%4 = call swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(i64 %0, ptr %3, ptr %2, ptr undef, ptr @"$s4main3FooVMn") #14
%5 = extractvalue %swift.metadata_response %4, 0
%6 = extractvalue %swift.metadata_response %4, 1
%7 = insertvalue %swift.metadata_response undef, ptr %5, 0
%8 = insertvalue %swift.metadata_response %7, i64 %6, 1
ret %swift.metadata_response %8
}
; Function Attrs: nounwind
declare ptr @swift_allocateGenericValueMetadata(ptr, ptr, ptr, i64) #13
; Function Attrs: noinline nounwind readnone
define linkonce_odr hidden swiftcc %swift.metadata_response @"$syycMa"(i64 %0) #12 {
entry:
%1 = load ptr, ptr @"$syycML", align 8
%2 = icmp eq ptr %1, null
br i1 %2, label %cacheIsNull, label %cont
cacheIsNull: ; preds = %entry
%3 = call ptr @swift_getFunctionTypeMetadata0(i64 67108864, ptr getelementptr inbounds (%swift.full_existential_type, ptr @"$sytN", i32 0, i32 1)) #14
store atomic ptr %3, ptr @"$syycML" release, align 8
br label %cont
cont: ; preds = %cacheIsNull, %entry
%4 = phi ptr [ %1, %entry ], [ %3, %cacheIsNull ]
%5 = insertvalue %swift.metadata_response undef, ptr %4, 0
%6 = insertvalue %swift.metadata_response %5, i64 0, 1
ret %swift.metadata_response %6
}
; Function Attrs: nounwind readnone
declare ptr @swift_getFunctionTypeMetadata0(i64, ptr) #14
; Function Attrs: nounwind readonly willreturn
declare swiftcc %swift.metadata_response @swift_checkMetadataState(i64, ptr) #6
; Function Attrs: nounwind
declare void @swift_initStructMetadata(ptr, i64, i64, ptr, ptr) #13
; Function Attrs: noinline nounwind readonly willreturn
define linkonce_odr hidden swiftcc %swift.metadata_response @__swift_instantiateGenericMetadata(i64 %0, ptr %1, ptr %2, ptr %3, ptr %4) #1 {
entry:
%generic.arguments = alloca [3 x ptr], align 8
call void @llvm.lifetime.start.p0(i64 24, ptr %generic.arguments)
%5 = getelementptr inbounds [3 x ptr], ptr %generic.arguments, i32 0, i32 0
store ptr %1, ptr %5, align 8
%6 = getelementptr inbounds [3 x ptr], ptr %generic.arguments, i32 0, i32 1
store ptr %2, ptr %6, align 8
%7 = getelementptr inbounds [3 x ptr], ptr %generic.arguments, i32 0, i32 2
store ptr %3, ptr %7, align 8
%8 = call swiftcc %swift.metadata_response @swift_getGenericMetadata(i64 %0, ptr %generic.arguments, ptr %4) #15
ret %swift.metadata_response %8
}
; Function Attrs: nounwind readonly
declare swiftcc %swift.metadata_response @swift_getGenericMetadata(i64, ptr, ptr) #15
attributes #0 = { "frame-pointer"="non-leaf" "no-trapping-math"="true" "probe-stack"="__chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="apple-a12" "target-features"="+aes,+crc,+crypto,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+v8.1a,+v8.2a,+v8.3a,+v8a,+zcm,+zcz" }
attributes #1 = { noinline nounwind readonly willreturn "frame-pointer"="non-leaf" "no-trapping-math"="true" "probe-stack"="__chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="apple-a12" "target-features"="+aes,+crc,+crypto,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+v8.1a,+v8.2a,+v8.3a,+v8a,+zcm,+zcz" }
attributes #2 = { nocallback nofree nosync nounwind readnone willreturn }
attributes #3 = { argmemonly nounwind }
attributes #4 = { cold noreturn nounwind }
attributes #5 = { nocallback nofree nosync nounwind willreturn }
attributes #6 = { nounwind readonly willreturn }
attributes #7 = { argmemonly nocallback nofree nosync nounwind willreturn }
attributes #8 = { argmemonly nocallback nofree nounwind willreturn writeonly }
attributes #9 = { nounwind "frame-pointer"="non-leaf" "no-trapping-math"="true" "probe-stack"="__chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="apple-a12" "target-features"="+aes,+crc,+crypto,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+v8.1a,+v8.2a,+v8.3a,+v8a,+zcm,+zcz" }
attributes #10 = { nounwind readonly "frame-pointer"="non-leaf" "no-trapping-math"="true" "probe-stack"="__chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="apple-a12" "target-features"="+aes,+crc,+crypto,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+v8.1a,+v8.2a,+v8.3a,+v8a,+zcm,+zcz" }
attributes #11 = { nounwind willreturn }
attributes #12 = { noinline nounwind readnone "frame-pointer"="non-leaf" "no-trapping-math"="true" "probe-stack"="__chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="apple-a12" "target-features"="+aes,+crc,+crypto,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rcpc,+rdm,+sha2,+v8.1a,+v8.2a,+v8.3a,+v8a,+zcm,+zcz" }
attributes #13 = { nounwind }
attributes #14 = { nounwind readnone }
attributes #15 = { nounwind readonly }
attributes #16 = { argmemonly nounwind readonly }
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11}
!swift.module.flags = !{!12}
!llvm.linker.options = !{!13, !14, !15, !16, !17}
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 14, i32 5]}
!1 = !{i32 1, !"Objective-C Version", i32 2}
!2 = !{i32 1, !"Objective-C Image Info Version", i32 0}
!3 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
!4 = !{i32 4, !"Objective-C Garbage Collection", i32 84543232}
!5 = !{i32 1, !"Objective-C Class Properties", i32 64}
!6 = !{i32 1, !"Objective-C Enforce ClassRO Pointer Signing", i8 0}
!7 = !{i32 1, !"wchar_size", i32 4}
!8 = !{i32 8, !"PIC Level", i32 2}
!9 = !{i32 7, !"uwtable", i32 1}
!10 = !{i32 7, !"frame-pointer", i32 1}
!11 = !{i32 1, !"Swift Version", i32 7}
!12 = !{!"standard-library", i1 false}
!13 = !{!"-lswiftSwiftOnoneSupport"}
!14 = !{!"-lswiftCore"}
!15 = !{!"-lswift_Concurrency"}
!16 = !{!"-lswift_StringProcessing"}
!17 = !{!"-lobjc"}
!18 = !{}
!19 = !{i64 88}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment