Last active
August 3, 2018 11:25
-
-
Save koher/2e253fb22e61d191366669ad01b87053 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
protocol Animal { | |
func foo() -> Int | |
} | |
struct Cat: Animal { | |
var value: Int = 42 | |
func foo() -> Int { return value } | |
} | |
func useAnimal(_ animal: Animal) -> Int { | |
return animal.foo() | |
} | |
func useCat(_ cat: Cat) -> Int { | |
return useAnimal(cat) | |
} | |
print(useCat(Cat())) |
This file contains hidden or 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
; ModuleID = '-' | |
source_filename = "-" | |
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-apple-macosx10.13.0" | |
%swift.type = type { i64 } | |
%swift.protocol_conformance_descriptor = type { i32, i32, i32, i32 } | |
%swift.protocol_requirement = type { i32, i32, i32 } | |
%swift.protocol = type { i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32 } | |
%swift.protocolref = type { i32 } | |
%swift.type_metadata_record = type { i32 } | |
%swift.bridge = type opaque | |
%Any = type { [24 x i8], %swift.type* } | |
%TSi = type <{ i64 }> | |
%T4main3CatV = type <{ %TSi }> | |
%T4main6AnimalP = type { [24 x i8], %swift.type*, i8** } | |
%swift.opaque = type opaque | |
%swift.refcounted = type { %swift.type*, i64 } | |
%swift.metadata_response = type { %swift.type*, i64 } | |
@"$SSiN" = external global %swift.type, align 8 | |
@"$S4main3CatVAA6AnimalAAMc" = hidden constant %swift.protocol_conformance_descriptor { i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol* @"$S4main6AnimalMp" to i64), i64 ptrtoint (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol_conformance_descriptor, %swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc", i32 0, i32 1) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([2 x i8*]* @"$S4main3CatVAA6AnimalAAWP" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol_conformance_descriptor, %swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc", i32 0, i32 2) to i64)) to i32), i32 0 }, align 8 | |
@"$S4main3CatVAA6AnimalAAWP" = hidden constant [2 x i8*] [i8* bitcast (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i8*), i8* bitcast (i64 (%T4main3CatV*, %swift.type*, i8**)* @"$S4main3CatVAA6AnimalA2aDP3fooSiyFTW" to i8*)], align 8 | |
@"symbolic $S4main6AnimalP" = linkonce_odr hidden constant <{ [15 x i8], i8 }> <{ [15 x i8] c"$S4main6AnimalP", i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@"$S4main6Animal_pMF" = internal constant { i32, i32, i16, i16, i32 } { i32 trunc (i64 sub (i64 ptrtoint (<{ [15 x i8], i8 }>* @"symbolic $S4main6AnimalP" to i64), i64 ptrtoint ({ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF" to i64)) to i32), i32 0, i16 4, i16 12, i32 0 }, section "__TEXT,__swift4_fieldmd, regular, no_dead_strip", align 4 | |
@0 = private unnamed_addr constant [16 x i8] c"$S4main6AnimalP\00" | |
@"$S4main6AnimalWR" = internal constant [1 x %swift.protocol_requirement] [%swift.protocol_requirement { i32 17, i32 0, i32 0 }], section "__TEXT,__const", align 4 | |
@"$S4main6AnimalMp" = hidden constant %swift.protocol { i8* null, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @0, i64 0, i64 0), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 72, i32 7, i32 1, i32 trunc (i64 sub (i64 ptrtoint ([1 x %swift.protocol_requirement]* @"$S4main6AnimalWR" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol, %swift.protocol* @"$S4main6AnimalMp", i32 0, i32 11) to i64)) to i32), i32 0, i32 0 }, align 8 | |
@"$SBi64_WV" = external global i8*, align 8 | |
@1 = 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 ([5 x i8]* @1 to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32 }>, <{ i32, i32, i32 }>* @"$S4mainMXM", i32 0, i32 2) to i64)) to i32) }>, section "__TEXT,__const", align 4 | |
@2 = private constant [4 x i8] c"Cat\00" | |
@"$S4main3CatVMn" = hidden constant <{ i32, i32, i32, i32, i32, i32 }> <{ i32 262225, i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32 }>* @"$S4mainMXM" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 1) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @2 to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (%swift.metadata_response (i64)* @"$S4main3CatVMa" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 3) to i64)) to i32), i32 1, i32 2 }>, section "__TEXT,__const", align 4 | |
@"$S4main3CatVMf" = internal constant <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }> <{ i8** @"$SBi64_WV", i64 1, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, [4 x i8] zeroinitializer }>, align 8 | |
@"symbolic \01____ 4main3CatV" = linkonce_odr hidden constant <{ [1 x i8], i32, i8 }> <{ [1 x i8] c"\01", i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ [1 x i8], i32, i8 }>, <{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV", i32 0, i32 1) to i64)) to i32), i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@"symbolic Si" = linkonce_odr hidden constant <{ [2 x i8], i8 }> <{ [2 x i8] c"Si", i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@3 = private constant [6 x i8] c"value\00", section "__TEXT,__swift4_reflstr, regular, no_dead_strip" | |
@"$S4main3CatVMF" = internal constant { i32, i32, i16, i16, i32, i32, i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (<{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV" to i64), i64 ptrtoint ({ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF" to i64)) to i32), i32 0, i16 0, i16 12, i32 1, i32 2, i32 trunc (i64 sub (i64 ptrtoint (<{ [2 x i8], i8 }>* @"symbolic Si" to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, { i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", i32 0, i32 6) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @3 to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, { i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", i32 0, i32 7) to i64)) to i32) }, section "__TEXT,__swift4_fieldmd, regular, no_dead_strip", align 4 | |
@"\01l_protocols" = private constant [1 x %swift.protocolref] [%swift.protocolref { i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol* @"$S4main6AnimalMp" to i64), i64 ptrtoint ([1 x %swift.protocolref]* @"\01l_protocols" to i64)) to i32) }], section "__TEXT, __swift4_protos, regular, no_dead_strip", align 4 | |
@"\01l_protocol_conformances" = private constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i64), i64 ptrtoint ([1 x i32]* @"\01l_protocol_conformances" to i64)) to i32)], section "__TEXT, __swift4_proto, regular, no_dead_strip", align 4 | |
@"\01l_type_metadata_table" = private constant [1 x %swift.type_metadata_record] [%swift.type_metadata_record { i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint ([1 x %swift.type_metadata_record]* @"\01l_type_metadata_table" to i64)) to i32) }], section "__TEXT, __swift4_types, regular, no_dead_strip", align 4 | |
@__swift_reflection_version = linkonce_odr hidden constant i16 3 | |
@llvm.used = appending global [6 x i8*] [i8* bitcast ({ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF" to i8*), i8* bitcast ({ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF" to i8*), i8* bitcast ([1 x %swift.protocolref]* @"\01l_protocols" to i8*), i8* bitcast ([1 x i32]* @"\01l_protocol_conformances" to i8*), i8* bitcast ([1 x %swift.type_metadata_record]* @"\01l_type_metadata_table" to i8*), i8* bitcast (i16* @__swift_reflection_version to i8*)], section "llvm.metadata", align 8 | |
@"$S4main3CatVN" = hidden alias %swift.type, bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*) | |
define i32 @main(i32, i8**) #0 { | |
entry: | |
%2 = bitcast i8** %1 to i8* | |
%3 = call swiftcc { %swift.bridge*, i8* } @"$Ss27_allocateUninitializedArrayySayxG_BptBwlFyp_Tg5"(i64 1) | |
%4 = extractvalue { %swift.bridge*, i8* } %3, 0 | |
%5 = extractvalue { %swift.bridge*, i8* } %3, 1 | |
%6 = call %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge* %4) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %4) #1 | |
%7 = bitcast i8* %5 to %Any* | |
%8 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 1 | |
store %swift.type* @"$SSiN", %swift.type** %8, align 8 | |
%9 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 0 | |
%10 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 0 | |
%11 = bitcast [24 x i8]* %10 to %TSi* | |
%12 = call swiftcc i64 @"$S4main3CatVACycfC"() | |
%13 = call swiftcc i64 @"$S4main6useCatySiAA0C0VF"(i64 %12) | |
%._value = getelementptr inbounds %TSi, %TSi* %11, i32 0, i32 0 | |
store i64 %13, i64* %._value, align 8 | |
%14 = call swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA0_"() | |
%15 = extractvalue { %swift.bridge*, i64 } %14, 0 | |
%16 = extractvalue { %swift.bridge*, i64 } %14, 1 | |
%17 = call swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA1_"() | |
%18 = extractvalue { %swift.bridge*, i64 } %17, 0 | |
%19 = extractvalue { %swift.bridge*, i64 } %17, 1 | |
call swiftcc void @"$Ss5print_9separator10terminatoryypd_S2StF"(%swift.bridge* %4, %swift.bridge* %15, i64 %16, %swift.bridge* %18, i64 %19) | |
call void @swift_bridgeObjectRelease(%swift.bridge* %18) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %15) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %4) #1 | |
ret i32 0 | |
} | |
declare swiftcc { %swift.bridge*, i8* } @"$Ss27_allocateUninitializedArrayySayxG_BptBwlFyp_Tg5"(i64) #0 | |
; Function Attrs: nounwind | |
declare %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge*) #1 | |
; Function Attrs: nounwind | |
declare void @swift_bridgeObjectRelease(%swift.bridge*) #1 | |
define hidden swiftcc i64 @"$S4main3CatV5valueSivpfi"() #0 { | |
entry: | |
ret i64 42 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV5valueSivg"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc void @"$S4main3CatV5valueSivs"(i64, %T4main3CatV* nocapture swiftself dereferenceable(8)) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %1, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 %0, i64* %.value._value, align 8 | |
ret void | |
} | |
define hidden swiftcc { i8*, i64 } @"$S4main3CatV5valueSivm"(i8*, [24 x i8]* nocapture dereferenceable(24), %T4main3CatV* nocapture swiftself dereferenceable(8)) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %2, i32 0, i32 0 | |
%3 = bitcast %TSi* %.value to i8* | |
%4 = insertvalue { i8*, i64 } undef, i8* %3, 0 | |
%5 = insertvalue { i8*, i64 } %4, i64 0, 1 | |
ret { i8*, i64 } %5 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV3fooSiyF"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV5valueACSi_tcfC"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc i64 @"$S4main3CatVACycfC"() #0 { | |
entry: | |
%0 = alloca %T4main3CatV, align 8 | |
%1 = bitcast %T4main3CatV* %0 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %0, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 42, i64* %.value._value, align 8 | |
%2 = bitcast %T4main3CatV* %0 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %2) | |
ret i64 42 | |
} | |
define internal swiftcc i64 @"$S4main3CatVAA6AnimalA2aDP3fooSiyFTW"(%T4main3CatV* noalias nocapture swiftself dereferenceable(8), %swift.type* %Self, i8** %SelfWitnessTable) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %0, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
%1 = load i64, i64* %.value._value, align 8 | |
%2 = call swiftcc i64 @"$S4main3CatV3fooSiyF"(i64 %1) #6 | |
ret i64 %2 | |
} | |
define hidden swiftcc i64 @"$S4main9useAnimalySiAA0C0_pF"(%T4main6AnimalP* noalias nocapture dereferenceable(40)) #0 { | |
entry: | |
%1 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %0, i32 0, i32 1 | |
%2 = load %swift.type*, %swift.type** %1, align 8 | |
%3 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %0, i32 0, i32 2 | |
%4 = load i8**, i8*** %3, align 8 | |
%5 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %0, i32 0, i32 0 | |
%6 = call %swift.opaque* @__swift_project_boxed_opaque_existential_1([24 x i8]* %5, %swift.type* %2) #1 | |
%7 = getelementptr inbounds i8*, i8** %4, i32 1 | |
%8 = load i8*, i8** %7, align 8, !invariant.load !25 | |
%9 = bitcast i8* %8 to i64 (%swift.opaque*, %swift.type*, i8**)* | |
%10 = call swiftcc i64 %9(%swift.opaque* noalias nocapture swiftself %6, %swift.type* %2, i8** %4) | |
ret i64 %10 | |
} | |
define hidden swiftcc i64 @"$S4main6useCatySiAA0C0VF"(i64) #0 { | |
entry: | |
%1 = alloca %T4main6AnimalP, align 8 | |
%2 = bitcast %T4main6AnimalP* %1 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 40, i8* %2) | |
%3 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %1, i32 0, i32 1 | |
store %swift.type* bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*), %swift.type** %3, align 8 | |
%4 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %1, i32 0, i32 2 | |
store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$S4main3CatVAA6AnimalAAWP", i32 0, i32 0), i8*** %4, align 8 | |
%5 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %1, i32 0, i32 0 | |
%6 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %1, i32 0, i32 0 | |
%7 = bitcast [24 x i8]* %6 to %T4main3CatV* | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %7, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 %0, i64* %.value._value, align 8 | |
%8 = call swiftcc i64 @"$S4main9useAnimalySiAA0C0_pF"(%T4main6AnimalP* noalias nocapture dereferenceable(40) %1) | |
call void @__swift_destroy_boxed_opaque_existential_1(%T4main6AnimalP* %1) #1 | |
%9 = bitcast %T4main6AnimalP* %1 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 40, i8* %9) | |
ret i64 %8 | |
} | |
; Function Attrs: noinline | |
declare swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA0_"() #2 | |
; Function Attrs: noinline | |
declare swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA1_"() #2 | |
; Function Attrs: noinline | |
declare swiftcc void @"$Ss5print_9separator10terminatoryypd_S2StF"(%swift.bridge*, %swift.bridge*, i64, %swift.bridge*, i64) #2 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #3 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #3 | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden %swift.opaque* @__swift_project_boxed_opaque_existential_1([24 x i8]*, %swift.type*) #4 { | |
entry: | |
%2 = bitcast %swift.type* %1 to i8*** | |
%3 = getelementptr inbounds i8**, i8*** %2, i64 -1 | |
%.valueWitnesses = load i8**, i8*** %3, align 8, !invariant.load !25, !dereferenceable !26 | |
%4 = getelementptr inbounds i8*, i8** %.valueWitnesses, i32 10 | |
%5 = load i8*, i8** %4, align 8, !invariant.load !25 | |
%flags = ptrtoint i8* %5 to i64 | |
%6 = and i64 %flags, 131072 | |
%flags.isInline = icmp eq i64 %6, 0 | |
%7 = bitcast [24 x i8]* %0 to %swift.opaque* | |
br i1 %flags.isInline, label %done, label %boxed | |
done: ; preds = %entry | |
ret %swift.opaque* %7 | |
boxed: ; preds = %entry | |
%8 = bitcast [24 x i8]* %0 to %swift.refcounted** | |
%9 = load %swift.refcounted*, %swift.refcounted** %8, align 8 | |
%flags.alignmentMask = and i64 %flags, 65535 | |
%10 = add i64 16, %flags.alignmentMask | |
%11 = xor i64 %flags.alignmentMask, -1 | |
%12 = and i64 %10, %11 | |
%13 = bitcast %swift.refcounted* %9 to i8* | |
%14 = getelementptr inbounds i8, i8* %13, i64 %12 | |
%15 = bitcast i8* %14 to %swift.opaque* | |
ret %swift.opaque* %15 | |
} | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden void @__swift_destroy_boxed_opaque_existential_1(%T4main6AnimalP*) #4 { | |
entry: | |
%1 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %0, i32 0, i32 1 | |
%2 = load %swift.type*, %swift.type** %1, align 8 | |
%3 = getelementptr inbounds %T4main6AnimalP, %T4main6AnimalP* %0, i32 0, i32 0 | |
%4 = bitcast %swift.type* %2 to i8*** | |
%5 = getelementptr inbounds i8**, i8*** %4, i64 -1 | |
%.valueWitnesses = load i8**, i8*** %5, align 8, !invariant.load !25, !dereferenceable !26 | |
%6 = getelementptr inbounds i8*, i8** %.valueWitnesses, i32 10 | |
%7 = load i8*, i8** %6, align 8, !invariant.load !25 | |
%flags = ptrtoint i8* %7 to i64 | |
%8 = and i64 %flags, 131072 | |
%flags.isInline = icmp eq i64 %8, 0 | |
br i1 %flags.isInline, label %inline, label %outline | |
inline: ; preds = %entry | |
%9 = bitcast [24 x i8]* %3 to %swift.opaque* | |
%10 = bitcast %swift.type* %2 to i8*** | |
%11 = getelementptr inbounds i8**, i8*** %10, i64 -1 | |
%.valueWitnesses1 = load i8**, i8*** %11, align 8, !invariant.load !25, !dereferenceable !26 | |
%12 = getelementptr inbounds i8*, i8** %.valueWitnesses1, i32 1 | |
%13 = load i8*, i8** %12, align 8, !invariant.load !25 | |
%destroy = bitcast i8* %13 to void (%swift.opaque*, %swift.type*)* | |
call void %destroy(%swift.opaque* noalias %9, %swift.type* %2) #1 | |
ret void | |
outline: ; preds = %entry | |
%14 = bitcast [24 x i8]* %3 to %swift.refcounted** | |
%15 = load %swift.refcounted*, %swift.refcounted** %14, align 8 | |
call void @swift_release(%swift.refcounted* %15) #1 | |
ret void | |
} | |
; Function Attrs: nounwind | |
declare void @swift_release(%swift.refcounted*) #1 | |
define hidden i8** @"$S4main3CatVAA6AnimalAAWa"() #0 { | |
entry: | |
ret i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$S4main3CatVAA6AnimalAAWP", i32 0, i32 0) | |
} | |
; Function Attrs: nounwind readnone | |
define hidden swiftcc %swift.metadata_response @"$S4main3CatVMa"(i64) #5 { | |
entry: | |
ret %swift.metadata_response { %swift.type* bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*), i64 0 } | |
} | |
declare swiftcc %swift.metadata_response @"$SSiMa"(i64) #0 | |
attributes #0 = { "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #1 = { nounwind } | |
attributes #2 = { noinline "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #3 = { argmemonly nounwind } | |
attributes #4 = { noinline nounwind } | |
attributes #5 = { nounwind readnone "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #6 = { noinline } | |
!llvm.asan.globals = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13} | |
!llvm.module.flags = !{!14, !15, !16, !17, !18, !19, !20, !21} | |
!llvm.linker.options = !{!22, !23, !24} | |
!0 = !{<{ [15 x i8], i8 }>* @"symbolic $S4main6AnimalP", null, null, i1 false, i1 true} | |
!1 = !{{ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF", null, null, i1 false, i1 true} | |
!2 = !{[1 x %swift.protocol_requirement]* @"$S4main6AnimalWR", null, null, i1 false, i1 true} | |
!3 = !{%swift.protocol* @"$S4main6AnimalMp", null, null, i1 false, i1 true} | |
!4 = !{<{ i32, i32, i32 }>* @"$S4mainMXM", null, null, i1 false, i1 true} | |
!5 = !{<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", null, null, i1 false, i1 true} | |
!6 = !{<{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV", null, null, i1 false, i1 true} | |
!7 = !{<{ [2 x i8], i8 }>* @"symbolic Si", null, null, i1 false, i1 true} | |
!8 = !{[6 x i8]* @3, null, null, i1 false, i1 true} | |
!9 = !{{ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", null, null, i1 false, i1 true} | |
!10 = !{[1 x %swift.protocolref]* @"\01l_protocols", null, null, i1 false, i1 true} | |
!11 = !{[1 x i32]* @"\01l_protocol_conformances", null, null, i1 false, i1 true} | |
!12 = !{[1 x %swift.type_metadata_record]* @"\01l_type_metadata_table", null, null, i1 false, i1 true} | |
!13 = !{[6 x i8*]* @llvm.used, null, null, i1 false, i1 true} | |
!14 = !{i32 1, !"Objective-C Version", i32 2} | |
!15 = !{i32 1, !"Objective-C Image Info Version", i32 0} | |
!16 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"} | |
!17 = !{i32 4, !"Objective-C Garbage Collection", i32 1536} | |
!18 = !{i32 1, !"Objective-C Class Properties", i32 64} | |
!19 = !{i32 1, !"wchar_size", i32 4} | |
!20 = !{i32 7, !"PIC Level", i32 2} | |
!21 = !{i32 1, !"Swift Version", i32 6} | |
!22 = !{!"-lswiftSwiftOnoneSupport"} | |
!23 = !{!"-lswiftCore"} | |
!24 = !{!"-lobjc"} | |
!25 = !{} | |
!26 = !{i64 96} |
This file contains hidden or 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
protocol Animal { | |
associatedtype Value | |
func foo() -> Value | |
} | |
struct Cat: Animal { | |
var value: Int = 42 | |
func foo() -> Int { return value } | |
} | |
func useAnimal<A: Animal>(_ animal: A) -> Int where A.Value == Int { | |
return animal.foo() | |
} | |
func useCat(_ cat: Cat) -> Int { | |
return useAnimal(cat) | |
} | |
print(useCat(Cat())) |
This file contains hidden or 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
; ModuleID = '-' | |
source_filename = "-" | |
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-apple-macosx10.13.0" | |
%swift.type = type { i64 } | |
%swift.protocol_conformance_descriptor = type { i32, i32, i32, i32 } | |
%swift.protocol_requirement = type { i32, i32, i32 } | |
%swift.protocol = type { i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32, i32, i32, i32, i32 } | |
%swift.protocolref = type { i32 } | |
%swift.type_metadata_record = type { i32 } | |
%swift.bridge = type opaque | |
%Any = type { [24 x i8], %swift.type* } | |
%TSi = type <{ i64 }> | |
%T4main3CatV = type <{ %TSi }> | |
%swift.opaque = type opaque | |
%swift.metadata_response = type { %swift.type*, i64 } | |
@"$SSiN" = external global %swift.type, align 8 | |
@"$S4main3CatVAA6AnimalAAMc" = hidden constant %swift.protocol_conformance_descriptor { i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol* @"$S4main6AnimalMp" to i64), i64 ptrtoint (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol_conformance_descriptor, %swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc", i32 0, i32 1) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([3 x i8*]* @"$S4main3CatVAA6AnimalAAWP" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol_conformance_descriptor, %swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc", i32 0, i32 2) to i64)) to i32), i32 0 }, align 8 | |
@"$S4main3CatVAA6AnimalAAWP" = hidden constant [3 x i8*] [i8* bitcast (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i8*), i8* bitcast (%swift.metadata_response (i64)* @"$SSiMa" to i8*), i8* bitcast (void (%TSi*, %T4main3CatV*, %swift.type*, i8**)* @"$S4main3CatVAA6AnimalA2aDP3foo5ValueQzyFTW" to i8*)], align 8 | |
@"symbolic $S4main6AnimalP" = linkonce_odr hidden constant <{ [15 x i8], i8 }> <{ [15 x i8] c"$S4main6AnimalP", i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@"$S4main6Animal_pMF" = internal constant { i32, i32, i16, i16, i32 } { i32 trunc (i64 sub (i64 ptrtoint (<{ [15 x i8], i8 }>* @"symbolic $S4main6AnimalP" to i64), i64 ptrtoint ({ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF" to i64)) to i32), i32 0, i16 4, i16 12, i32 0 }, section "__TEXT,__swift4_fieldmd, regular, no_dead_strip", align 4 | |
@0 = private unnamed_addr constant [16 x i8] c"$S4main6AnimalP\00" | |
@"$S4main6AnimalWR" = internal constant [2 x %swift.protocol_requirement] [%swift.protocol_requirement { i32 6, i32 0, i32 0 }, %swift.protocol_requirement { i32 17, i32 0, i32 0 }], section "__TEXT,__const", align 4 | |
@1 = private constant [6 x i8] c"Value\00" | |
@"$S4main6AnimalMp" = hidden constant %swift.protocol { i8* null, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @0, i64 0, i64 0), i8* null, i8* null, i8* null, i8* null, i8* null, i8* null, i32 72, i32 7, i32 2, i32 trunc (i64 sub (i64 ptrtoint ([2 x %swift.protocol_requirement]* @"$S4main6AnimalWR" to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol, %swift.protocol* @"$S4main6AnimalMp", i32 0, i32 11) to i64)) to i32), i32 0, i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @1 to i64), i64 ptrtoint (i32* getelementptr inbounds (%swift.protocol, %swift.protocol* @"$S4main6AnimalMp", i32 0, i32 13) to i64)) to i32) }, align 8 | |
@"$SBi64_WV" = external global i8*, align 8 | |
@2 = 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 ([5 x i8]* @2 to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32 }>, <{ i32, i32, i32 }>* @"$S4mainMXM", i32 0, i32 2) to i64)) to i32) }>, section "__TEXT,__const", align 4 | |
@3 = private constant [4 x i8] c"Cat\00" | |
@"$S4main3CatVMn" = hidden constant <{ i32, i32, i32, i32, i32, i32 }> <{ i32 262225, i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32 }>* @"$S4mainMXM" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 1) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @3 to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (%swift.metadata_response (i64)* @"$S4main3CatVMa" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32 }>, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, i32 3) to i64)) to i32), i32 1, i32 2 }>, section "__TEXT,__const", align 4 | |
@"$S4main3CatVMf" = internal constant <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }> <{ i8** @"$SBi64_WV", i64 1, <{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", i32 0, [4 x i8] zeroinitializer }>, align 8 | |
@"symbolic \01____ 4main3CatV" = linkonce_odr hidden constant <{ [1 x i8], i32, i8 }> <{ [1 x i8] c"\01", i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint (i32* getelementptr inbounds (<{ [1 x i8], i32, i8 }>, <{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV", i32 0, i32 1) to i64)) to i32), i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@"symbolic Si" = linkonce_odr hidden constant <{ [2 x i8], i8 }> <{ [2 x i8] c"Si", i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@4 = private constant [6 x i8] c"value\00", section "__TEXT,__swift4_reflstr, regular, no_dead_strip" | |
@"$S4main3CatVMF" = internal constant { i32, i32, i16, i16, i32, i32, i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (<{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV" to i64), i64 ptrtoint ({ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF" to i64)) to i32), i32 0, i16 0, i16 12, i32 1, i32 2, i32 trunc (i64 sub (i64 ptrtoint (<{ [2 x i8], i8 }>* @"symbolic Si" to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, { i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", i32 0, i32 6) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @4 to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i16, i16, i32, i32, i32, i32 }, { i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", i32 0, i32 7) to i64)) to i32) }, section "__TEXT,__swift4_fieldmd, regular, no_dead_strip", align 4 | |
@"\01l_protocols" = private constant [1 x %swift.protocolref] [%swift.protocolref { i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol* @"$S4main6AnimalMp" to i64), i64 ptrtoint ([1 x %swift.protocolref]* @"\01l_protocols" to i64)) to i32) }], section "__TEXT, __swift4_protos, regular, no_dead_strip", align 4 | |
@"symbolic 4main3CatV" = linkonce_odr hidden constant <{ [10 x i8], i8 }> <{ [10 x i8] c"4main3CatV", i8 0 }>, section "__TEXT,__swift4_typeref, regular, no_dead_strip", align 1 | |
@5 = private constant [6 x i8] c"Value\00", section "__TEXT,__swift4_reflstr, regular, no_dead_strip" | |
@"$S4main3CatVAA6AnimalAAMA" = internal constant { i32, i32, i32, i32, i32, i32 } { i32 trunc (i64 sub (i64 ptrtoint (<{ [10 x i8], i8 }>* @"symbolic 4main3CatV" to i64), i64 ptrtoint ({ i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA" to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (<{ [15 x i8], i8 }>* @"symbolic $S4main6AnimalP" to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i32, i32 }, { i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA", i32 0, i32 1) to i64)) to i32), i32 1, i32 8, i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @5 to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i32, i32 }, { i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA", i32 0, i32 4) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (<{ [2 x i8], i8 }>* @"symbolic Si" to i64), i64 ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i32, i32 }, { i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA", i32 0, i32 5) to i64)) to i32) }, section "__TEXT,__swift4_assocty, regular, no_dead_strip", align 4 | |
@"\01l_protocol_conformances" = private constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (%swift.protocol_conformance_descriptor* @"$S4main3CatVAA6AnimalAAMc" to i64), i64 ptrtoint ([1 x i32]* @"\01l_protocol_conformances" to i64)) to i32)], section "__TEXT, __swift4_proto, regular, no_dead_strip", align 4 | |
@"\01l_type_metadata_table" = private constant [1 x %swift.type_metadata_record] [%swift.type_metadata_record { i32 trunc (i64 sub (i64 ptrtoint (<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn" to i64), i64 ptrtoint ([1 x %swift.type_metadata_record]* @"\01l_type_metadata_table" to i64)) to i32) }], section "__TEXT, __swift4_types, regular, no_dead_strip", align 4 | |
@__swift_reflection_version = linkonce_odr hidden constant i16 3 | |
@llvm.used = appending global [7 x i8*] [i8* bitcast ({ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF" to i8*), i8* bitcast ({ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF" to i8*), i8* bitcast ([1 x %swift.protocolref]* @"\01l_protocols" to i8*), i8* bitcast ({ i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA" to i8*), i8* bitcast ([1 x i32]* @"\01l_protocol_conformances" to i8*), i8* bitcast ([1 x %swift.type_metadata_record]* @"\01l_type_metadata_table" to i8*), i8* bitcast (i16* @__swift_reflection_version to i8*)], section "llvm.metadata", align 8 | |
@"$S4main3CatVN" = hidden alias %swift.type, bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*) | |
define i32 @main(i32, i8**) #0 { | |
entry: | |
%2 = bitcast i8** %1 to i8* | |
%3 = call swiftcc { %swift.bridge*, i8* } @"$Ss27_allocateUninitializedArrayySayxG_BptBwlFyp_Tg5"(i64 1) | |
%4 = extractvalue { %swift.bridge*, i8* } %3, 0 | |
%5 = extractvalue { %swift.bridge*, i8* } %3, 1 | |
%6 = call %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge* %4) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %4) #1 | |
%7 = bitcast i8* %5 to %Any* | |
%8 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 1 | |
store %swift.type* @"$SSiN", %swift.type** %8, align 8 | |
%9 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 0 | |
%10 = getelementptr inbounds %Any, %Any* %7, i32 0, i32 0 | |
%11 = bitcast [24 x i8]* %10 to %TSi* | |
%12 = call swiftcc i64 @"$S4main3CatVACycfC"() | |
%13 = call swiftcc i64 @"$S4main6useCatySiAA0C0VF"(i64 %12) | |
%._value = getelementptr inbounds %TSi, %TSi* %11, i32 0, i32 0 | |
store i64 %13, i64* %._value, align 8 | |
%14 = call swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA0_"() | |
%15 = extractvalue { %swift.bridge*, i64 } %14, 0 | |
%16 = extractvalue { %swift.bridge*, i64 } %14, 1 | |
%17 = call swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA1_"() | |
%18 = extractvalue { %swift.bridge*, i64 } %17, 0 | |
%19 = extractvalue { %swift.bridge*, i64 } %17, 1 | |
call swiftcc void @"$Ss5print_9separator10terminatoryypd_S2StF"(%swift.bridge* %4, %swift.bridge* %15, i64 %16, %swift.bridge* %18, i64 %19) | |
call void @swift_bridgeObjectRelease(%swift.bridge* %18) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %15) #1 | |
call void @swift_bridgeObjectRelease(%swift.bridge* %4) #1 | |
ret i32 0 | |
} | |
declare swiftcc { %swift.bridge*, i8* } @"$Ss27_allocateUninitializedArrayySayxG_BptBwlFyp_Tg5"(i64) #0 | |
; Function Attrs: nounwind | |
declare %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge*) #1 | |
; Function Attrs: nounwind | |
declare void @swift_bridgeObjectRelease(%swift.bridge*) #1 | |
define hidden swiftcc i64 @"$S4main3CatV5valueSivpfi"() #0 { | |
entry: | |
ret i64 42 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV5valueSivg"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc void @"$S4main3CatV5valueSivs"(i64, %T4main3CatV* nocapture swiftself dereferenceable(8)) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %1, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 %0, i64* %.value._value, align 8 | |
ret void | |
} | |
define hidden swiftcc { i8*, i64 } @"$S4main3CatV5valueSivm"(i8*, [24 x i8]* nocapture dereferenceable(24), %T4main3CatV* nocapture swiftself dereferenceable(8)) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %2, i32 0, i32 0 | |
%3 = bitcast %TSi* %.value to i8* | |
%4 = insertvalue { i8*, i64 } undef, i8* %3, 0 | |
%5 = insertvalue { i8*, i64 } %4, i64 0, 1 | |
ret { i8*, i64 } %5 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV3fooSiyF"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc i64 @"$S4main3CatV5valueACSi_tcfC"(i64) #0 { | |
entry: | |
ret i64 %0 | |
} | |
define hidden swiftcc i64 @"$S4main3CatVACycfC"() #0 { | |
entry: | |
%0 = alloca %T4main3CatV, align 8 | |
%1 = bitcast %T4main3CatV* %0 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %1) | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %0, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 42, i64* %.value._value, align 8 | |
%2 = bitcast %T4main3CatV* %0 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %2) | |
ret i64 42 | |
} | |
define internal swiftcc void @"$S4main3CatVAA6AnimalA2aDP3foo5ValueQzyFTW"(%TSi* noalias nocapture sret, %T4main3CatV* noalias nocapture swiftself dereferenceable(8), %swift.type* %Self, i8** %SelfWitnessTable) #0 { | |
entry: | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %1, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
%2 = load i64, i64* %.value._value, align 8 | |
%3 = call swiftcc i64 @"$S4main3CatV3fooSiyF"(i64 %2) #5 | |
%._value = getelementptr inbounds %TSi, %TSi* %0, i32 0, i32 0 | |
store i64 %3, i64* %._value, align 8 | |
ret void | |
} | |
define hidden swiftcc i64 @"$S4main9useAnimalySixAA0C0RzSi5ValueRtzlF"(%swift.opaque* noalias nocapture, %swift.type* %A, i8** %A.Animal) #0 { | |
entry: | |
%1 = alloca %TSi, align 8 | |
%2 = bitcast %TSi* %1 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) | |
%3 = getelementptr inbounds i8*, i8** %A.Animal, i32 2 | |
%4 = load i8*, i8** %3, align 8, !invariant.load !28 | |
%5 = bitcast i8* %4 to void (%swift.opaque*, %swift.opaque*, %swift.type*, i8**)* | |
%6 = bitcast %TSi* %1 to %swift.opaque* | |
call swiftcc void %5(%swift.opaque* noalias nocapture sret %6, %swift.opaque* noalias nocapture swiftself %0, %swift.type* %A, i8** %A.Animal) | |
%._value = getelementptr inbounds %TSi, %TSi* %1, i32 0, i32 0 | |
%7 = load i64, i64* %._value, align 8 | |
%8 = bitcast %TSi* %1 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %8) | |
ret i64 %7 | |
} | |
define hidden swiftcc i64 @"$S4main6useCatySiAA0C0VF"(i64) #0 { | |
entry: | |
%1 = alloca %T4main3CatV, align 8 | |
%2 = bitcast %T4main3CatV* %1 to i8* | |
call void @llvm.lifetime.start.p0i8(i64 8, i8* %2) | |
%.value = getelementptr inbounds %T4main3CatV, %T4main3CatV* %1, i32 0, i32 0 | |
%.value._value = getelementptr inbounds %TSi, %TSi* %.value, i32 0, i32 0 | |
store i64 %0, i64* %.value._value, align 8 | |
%3 = bitcast %T4main3CatV* %1 to %swift.opaque* | |
%4 = call swiftcc i64 @"$S4main9useAnimalySixAA0C0RzSi5ValueRtzlF"(%swift.opaque* noalias nocapture %3, %swift.type* bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*), i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$S4main3CatVAA6AnimalAAWP", i32 0, i32 0)) | |
%5 = bitcast %T4main3CatV* %1 to i8* | |
call void @llvm.lifetime.end.p0i8(i64 8, i8* %5) | |
ret i64 %4 | |
} | |
; Function Attrs: noinline | |
declare swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA0_"() #2 | |
; Function Attrs: noinline | |
declare swiftcc { %swift.bridge*, i64 } @"$Ss5print_9separator10terminatoryypd_S2StFfA1_"() #2 | |
; Function Attrs: noinline | |
declare swiftcc void @"$Ss5print_9separator10terminatoryypd_S2StF"(%swift.bridge*, %swift.bridge*, i64, %swift.bridge*, i64) #2 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #3 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #3 | |
declare swiftcc %swift.metadata_response @"$SSiMa"(i64) #0 | |
define hidden i8** @"$S4main3CatVAA6AnimalAAWa"() #0 { | |
entry: | |
ret i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$S4main3CatVAA6AnimalAAWP", i32 0, i32 0) | |
} | |
; Function Attrs: nounwind readnone | |
define hidden swiftcc %swift.metadata_response @"$S4main3CatVMa"(i64) #4 { | |
entry: | |
ret %swift.metadata_response { %swift.type* bitcast (i64* getelementptr inbounds (<{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>, <{ i8**, i64, <{ i32, i32, i32, i32, i32, i32 }>*, i32, [4 x i8] }>* @"$S4main3CatVMf", i32 0, i32 1) to %swift.type*), i64 0 } | |
} | |
attributes #0 = { "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #1 = { nounwind } | |
attributes #2 = { noinline "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #3 = { argmemonly nounwind } | |
attributes #4 = { nounwind readnone "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" } | |
attributes #5 = { noinline } | |
!llvm.asan.globals = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16} | |
!llvm.module.flags = !{!17, !18, !19, !20, !21, !22, !23, !24} | |
!llvm.linker.options = !{!25, !26, !27} | |
!0 = !{<{ [15 x i8], i8 }>* @"symbolic $S4main6AnimalP", null, null, i1 false, i1 true} | |
!1 = !{{ i32, i32, i16, i16, i32 }* @"$S4main6Animal_pMF", null, null, i1 false, i1 true} | |
!2 = !{[2 x %swift.protocol_requirement]* @"$S4main6AnimalWR", null, null, i1 false, i1 true} | |
!3 = !{%swift.protocol* @"$S4main6AnimalMp", null, null, i1 false, i1 true} | |
!4 = !{<{ i32, i32, i32 }>* @"$S4mainMXM", null, null, i1 false, i1 true} | |
!5 = !{<{ i32, i32, i32, i32, i32, i32 }>* @"$S4main3CatVMn", null, null, i1 false, i1 true} | |
!6 = !{<{ [1 x i8], i32, i8 }>* @"symbolic \01____ 4main3CatV", null, null, i1 false, i1 true} | |
!7 = !{<{ [2 x i8], i8 }>* @"symbolic Si", null, null, i1 false, i1 true} | |
!8 = !{[6 x i8]* @4, null, null, i1 false, i1 true} | |
!9 = !{{ i32, i32, i16, i16, i32, i32, i32, i32 }* @"$S4main3CatVMF", null, null, i1 false, i1 true} | |
!10 = !{[1 x %swift.protocolref]* @"\01l_protocols", null, null, i1 false, i1 true} | |
!11 = !{<{ [10 x i8], i8 }>* @"symbolic 4main3CatV", null, null, i1 false, i1 true} | |
!12 = !{[6 x i8]* @5, null, null, i1 false, i1 true} | |
!13 = !{{ i32, i32, i32, i32, i32, i32 }* @"$S4main3CatVAA6AnimalAAMA", null, null, i1 false, i1 true} | |
!14 = !{[1 x i32]* @"\01l_protocol_conformances", null, null, i1 false, i1 true} | |
!15 = !{[1 x %swift.type_metadata_record]* @"\01l_type_metadata_table", null, null, i1 false, i1 true} | |
!16 = !{[7 x i8*]* @llvm.used, null, null, i1 false, i1 true} | |
!17 = !{i32 1, !"Objective-C Version", i32 2} | |
!18 = !{i32 1, !"Objective-C Image Info Version", i32 0} | |
!19 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"} | |
!20 = !{i32 4, !"Objective-C Garbage Collection", i32 1536} | |
!21 = !{i32 1, !"Objective-C Class Properties", i32 64} | |
!22 = !{i32 1, !"wchar_size", i32 4} | |
!23 = !{i32 7, !"PIC Level", i32 2} | |
!24 = !{i32 1, !"Swift Version", i32 6} | |
!25 = !{!"-lswiftSwiftOnoneSupport"} | |
!26 = !{!"-lswiftCore"} | |
!27 = !{!"-lobjc"} | |
!28 = !{} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment