-
-
Save vanvoorden/aa279eb43920870f70dac07343c5fcc2 to your computer and use it in GitHub Desktop.
2024-07-16-1.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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