Last active
October 23, 2017 05:31
-
-
Save omochi/0e823119a114f8412c04e708da03d5a8 to your computer and use it in GitHub Desktop.
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
import Foundation | |
let ns = 0..<10000 | |
let loop = 1000 * 100 | |
func measure(_ f: () -> Void) { | |
var t: TimeInterval = 0 | |
for _ in 0..<loop { | |
let start = Date() | |
f() | |
let end = Date() | |
t += end.timeIntervalSince(start) | |
} | |
print("x1000: \(t)") | |
} | |
func testForLoop() { | |
print("testForLoop") | |
var k = 0 | |
measure { | |
var result: Int = 0 | |
for n in ns { | |
result += n * n | |
} | |
k = (k + result) / 2 | |
} | |
print(k) | |
} | |
func testMapReduce() { | |
print("testMapReduce") | |
var k = 0 | |
measure { | |
let result = ns.map { $0 * $0 }.reduce(0) { $0 + $1 } | |
k = (k + result) / 2 | |
} | |
print(k) | |
} | |
func testLazyMapReduce() { | |
print("testLazyMapReduce") | |
var k = 0 | |
measure { | |
let result = ns.lazy.map { $0 * $0 }.reduce(0) { $0 + $1 } | |
k = (k + result) / 2 | |
} | |
print(k) | |
} | |
func main() { | |
testForLoop() | |
testMapReduce() | |
testLazyMapReduce() | |
} | |
main() |
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
; ModuleID = '-' | |
source_filename = "-" | |
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-apple-macosx10.9" | |
%Ts14CountableRangeVySiG = type <{ %TSi, %TSi }> | |
%TSi = type <{ i64 }> | |
%Ts6UInt32V = type <{ i32 }> | |
%struct._SwiftEmptyArrayStorage = type { %struct.HeapObject, %struct._SwiftArrayBodyStorage } | |
%struct.HeapObject = type { %struct.HeapMetadata*, %struct.InlineRefCounts } | |
%struct.HeapMetadata = type opaque | |
%struct.InlineRefCounts = type { i32, i32 } | |
%struct._SwiftArrayBodyStorage = type { i64, i64 } | |
%swift.refcounted = type { %swift.type*, i32, i32 } | |
%swift.type = type { i64 } | |
%swift.protocol = type { i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, i32, i16, i16, i32 } | |
%TSS = type <{ %Ts11_StringCoreV }> | |
%Ts11_StringCoreV = type <{ %TSvSg, %TSu, %TyXlSg }> | |
%TSvSg = type <{ [8 x i8] }> | |
%TSu = type <{ i64 }> | |
%TyXlSg = type <{ [8 x i8] }> | |
%TSd = type <{ double }> | |
%swift.bridge = type opaque | |
%objc_object = type opaque | |
%Ts15ContiguousArrayV = type <{ %Ts22_ContiguousArrayBufferV }> | |
%Ts22_ContiguousArrayBufferV = type <{ %Ts27_ContiguousArrayStorageBaseC* }> | |
%Ts27_ContiguousArrayStorageBaseC = type <{ %swift.refcounted, %Ts10_ArrayBodyV }> | |
%Ts10_ArrayBodyV = type <{ %TSC22_SwiftArrayBodyStorageV }> | |
%TSC22_SwiftArrayBodyStorageV = type <{ %TSi, %TSu }> | |
%Ts6UInt16V = type <{ i16 }> | |
%Ts14_IgnorePointerV = type opaque | |
@_T01a2nss14CountableRangeVySiGv = hidden local_unnamed_addr global %Ts14CountableRangeVySiG zeroinitializer, align 16 | |
@_T01a4loopSiv = hidden local_unnamed_addr global %TSi zeroinitializer, align 8 | |
@_T0s19_emptyStringStorages6UInt32Vv = external global %Ts6UInt32V, align 4 | |
@_swiftEmptyArrayStorage = external global %struct._SwiftEmptyArrayStorage, align 8 | |
@_swift_release = external local_unnamed_addr global void (%swift.refcounted*)* | |
@_T0s23_ContiguousArrayStorageCyypGML = linkonce_odr hidden local_unnamed_addr global %swift.type* null, align 8 | |
@_T0ypML = linkonce_odr hidden local_unnamed_addr global %swift.type* null, align 8 | |
@_swift_getExistentialTypeMetadata = external local_unnamed_addr global %swift.type* (i1, %swift.type*, i64, %swift.protocol**)* | |
@_swift_allocObject = external local_unnamed_addr global %swift.refcounted* (%swift.type*, i64, i64)* | |
@_T0SSN = external global %swift.type, align 8 | |
@0 = private unnamed_addr constant [12 x i8] c"testForLoop\00" | |
@_T0s23_ContiguousArrayStorageCySSGML = linkonce_odr hidden local_unnamed_addr global %swift.type* null, align 8 | |
@1 = private unnamed_addr constant [8 x i8] c"x1000: \00" | |
@2 = private unnamed_addr constant [1 x i8] zeroinitializer | |
@_T0SiN = external global %swift.type, align 8 | |
@3 = private unnamed_addr constant [14 x i8] c"testMapReduce\00" | |
@_swift_retain = external local_unnamed_addr global void (%swift.refcounted*)* | |
@_swift_isUniquelyReferenced_nonNull_native = external local_unnamed_addr global i1 (%swift.refcounted*)* | |
@4 = private unnamed_addr constant [18 x i8] c"testLazyMapReduce\00" | |
@"_swift_FORCE_LOAD_$_swiftFoundation" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftFoundation_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftFoundation" | |
@"_swift_FORCE_LOAD_$_swiftObjectiveC" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftObjectiveC_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftObjectiveC" | |
@"_swift_FORCE_LOAD_$_swiftDarwin" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftDarwin_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftDarwin" | |
@"_swift_FORCE_LOAD_$_swiftIOKit" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftIOKit_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftIOKit" | |
@"_swift_FORCE_LOAD_$_swiftDispatch" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftDispatch_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftDispatch" | |
@"_swift_FORCE_LOAD_$_swiftCoreFoundation" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftCoreFoundation_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftCoreFoundation" | |
@"_swift_FORCE_LOAD_$_swiftCoreGraphics" = external global i1 | |
@"_swift_FORCE_LOAD_$_swiftCoreGraphics_$_a" = weak hidden constant i1* @"_swift_FORCE_LOAD_$_swiftCoreGraphics" | |
@_T0s23_ContiguousArrayStorageCySiGML = linkonce_odr hidden local_unnamed_addr global %swift.type* null, align 8 | |
@__swift_reflection_version = linkonce_odr hidden constant i16 3 | |
@llvm.used = appending global [8 x i8*] [i8* bitcast (i16* @__swift_reflection_version to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftCoreFoundation_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftCoreGraphics_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftDarwin_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftDispatch_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftFoundation_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftIOKit_$_a" to i8*), i8* bitcast (i1** @"_swift_FORCE_LOAD_$_swiftObjectiveC_$_a" to i8*)], section "llvm.metadata" | |
define i32 @main(i32, i8** nocapture readnone) local_unnamed_addr #0 { | |
entry: | |
store <2 x i64> <i64 0, i64 10000>, <2 x i64>* bitcast (%Ts14CountableRangeVySiG* @_T01a2nss14CountableRangeVySiGv to <2 x i64>*), align 16 | |
store i64 100000, i64* getelementptr inbounds (%TSi, %TSi* @_T01a4loopSiv, i64 0, i32 0), align 8 | |
tail call swiftcc void @_T01a11testForLoopyyF() | |
tail call swiftcc void @_T01a13testMapReduceyyF() | |
tail call swiftcc void @_T01a17testLazyMapReduceyyF() | |
ret i32 0 | |
} | |
define hidden swiftcc void @_T01a7measureyyycF(i8*, %swift.refcounted*) local_unnamed_addr #0 { | |
entry: | |
tail call swiftcc void @_T01a7measureyyycFTf4g_n(i8* %0, %swift.refcounted* %1) #8 | |
tail call void @swift_rt_swift_release(%swift.refcounted* %1) #9 | |
ret void | |
} | |
define hidden swiftcc void @_T01a11testForLoopyyF() local_unnamed_addr #0 { | |
entry: | |
%protocols.i.i = alloca [0 x %swift.protocol*], align 8 | |
%reference.raw13 = alloca [104 x i8], align 8 | |
%0 = alloca %TSS, align 16 | |
%1 = alloca %TSd, align 8 | |
%2 = alloca %TSS, align 8 | |
%3 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML, align 8 | |
%4 = icmp eq %swift.type* %3, null | |
br i1 %4, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
cacheIsNull.i: ; preds = %entry | |
%5 = load %swift.type*, %swift.type** @_T0ypML, align 8 | |
%6 = icmp eq %swift.type* %5, null | |
br i1 %6, label %cacheIsNull.i.i, label %_T0ypMa.exit.i | |
cacheIsNull.i.i: ; preds = %cacheIsNull.i | |
%7 = bitcast [0 x %swift.protocol*]* %protocols.i.i to i8* | |
call void @llvm.lifetime.start(i64 0, i8* nonnull %7) #9 | |
%8 = getelementptr inbounds [0 x %swift.protocol*], [0 x %swift.protocol*]* %protocols.i.i, i64 0, i64 0 | |
%9 = call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 0, %swift.protocol** nonnull %8) #9 | |
call void @llvm.lifetime.end(i64 0, i8* nonnull %7) #9 | |
store atomic %swift.type* %9, %swift.type** @_T0ypML release, align 8 | |
br label %_T0ypMa.exit.i | |
_T0ypMa.exit.i: ; preds = %cacheIsNull.i.i, %cacheIsNull.i | |
%10 = phi %swift.type* [ %5, %cacheIsNull.i ], [ %9, %cacheIsNull.i.i ] | |
%11 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* %10) #5 | |
store atomic %swift.type* %11, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
_T0s23_ContiguousArrayStorageCyypGMa.exit: ; preds = %entry, %_T0ypMa.exit.i | |
%12 = phi %swift.type* [ %3, %entry ], [ %11, %_T0ypMa.exit.i ] | |
%13 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%14 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 1 | |
%15 = bitcast %swift.refcounted* %14 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %15, align 8 | |
%16 = bitcast %swift.refcounted* %13 to %swift.bridge* | |
%17 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 2 | |
%18 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 3, i32 1 | |
%19 = bitcast i32* %18 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %19, align 8 | |
%20 = bitcast %swift.refcounted* %17 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([12 x i8]* @0 to i64), i64 11>, <2 x i64>* %20, align 8 | |
%._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 3 | |
%21 = bitcast %swift.refcounted* %._core._owner to i64* | |
store i64 0, i64* %21, align 8 | |
%22 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%23 = extractvalue { i64, i64, i64 } %22, 0 | |
%24 = extractvalue { i64, i64, i64 } %22, 1 | |
%25 = extractvalue { i64, i64, i64 } %22, 2 | |
%26 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%27 = extractvalue { i64, i64, i64 } %26, 0 | |
%28 = extractvalue { i64, i64, i64 } %26, 1 | |
%29 = extractvalue { i64, i64, i64 } %26, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %16, i64 %23, i64 %24, i64 %25, i64 %27, i64 %28, i64 %29) | |
br label %30 | |
; <label>:30: ; preds = %54, %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
%31 = phi double [ 0.000000e+00, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %59, %54 ] | |
%32 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %51, %54 ] | |
%33 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %56, %54 ] | |
%34 = call swiftcc double @_T010Foundation4DateVACycfC() | |
br label %35 | |
; <label>:35: ; preds = %145, %30 | |
%36 = phi i64 [ 0, %30 ], [ %143, %145 ] | |
%37 = phi i64 [ 0, %30 ], [ %47, %145 ] | |
%38 = or i64 %37, 1 | |
%39 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %37, i64 %37) | |
%40 = extractvalue { i64, i1 } %39, 1 | |
br i1 %40, label %137, label %41 | |
; <label>:41: ; preds = %35 | |
%42 = extractvalue { i64, i1 } %39, 0 | |
%43 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %36, i64 %42) | |
%44 = extractvalue { i64, i1 } %43, 0 | |
%45 = extractvalue { i64, i1 } %43, 1 | |
br i1 %45, label %138, label %46 | |
; <label>:46: ; preds = %41 | |
%47 = add nsw i64 %37, 2 | |
%48 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %38, i64 %38) | |
%49 = extractvalue { i64, i1 } %48, 1 | |
br i1 %49, label %137, label %140 | |
; <label>:50: ; preds = %145 | |
%51 = add nuw nsw i64 %32, 1 | |
%52 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %33, i64 %143) | |
%53 = extractvalue { i64, i1 } %52, 1 | |
br i1 %53, label %139, label %54 | |
; <label>:54: ; preds = %50 | |
%55 = extractvalue { i64, i1 } %52, 0 | |
%56 = sdiv i64 %55, 2 | |
%57 = call swiftcc double @_T010Foundation4DateVACycfC() | |
%58 = call swiftcc double @_T010Foundation4DateV17timeIntervalSinceSdACF(double %34, double %57) | |
%59 = fadd double %31, %58 | |
%60 = icmp eq i64 %51, 100000 | |
br i1 %60, label %61, label %30 | |
; <label>:61: ; preds = %54 | |
%62 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%63 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %62, i64 1 | |
%64 = bitcast %swift.refcounted* %63 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %64, align 8 | |
%65 = bitcast %swift.refcounted* %62 to %swift.bridge* | |
%66 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %62, i64 2 | |
%67 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %62, i64 3, i32 1 | |
%68 = bitcast i32* %67 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %68, align 8 | |
%69 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML, align 8 | |
%70 = icmp eq %swift.type* %69, null | |
br i1 %70, label %cacheIsNull.i14, label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
cacheIsNull.i14: ; preds = %61 | |
%71 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SSN) #5 | |
store atomic %swift.type* %71, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
_T0s23_ContiguousArrayStorageCySSGMa.exit: ; preds = %61, %cacheIsNull.i14 | |
%72 = phi %swift.type* [ %69, %61 ], [ %71, %cacheIsNull.i14 ] | |
%73 = bitcast [104 x i8]* %reference.raw13 to %swift.refcounted* | |
%reference.new = call %swift.refcounted* @swift_initStackObject(%swift.type* %72, %swift.refcounted* nonnull %73) #9 | |
%74 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 1 | |
%75 = bitcast %swift.refcounted* %74 to <2 x i64>* | |
store <2 x i64> <i64 3, i64 6>, <2 x i64>* %75, align 8 | |
%76 = bitcast %swift.refcounted* %reference.new to %swift.bridge* | |
%77 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2 | |
%78 = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %78) | |
%79 = bitcast %TSS* %0 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([8 x i8]* @1 to i64), i64 7>, <2 x i64>* %79, align 16 | |
%._core5._owner = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 2 | |
%80 = bitcast %TyXlSg* %._core5._owner to i64* | |
store i64 0, i64* %80, align 16 | |
%81 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %0) | |
%82 = extractvalue { i64, i64, i64 } %81, 0 | |
%83 = extractvalue { i64, i64, i64 } %81, 1 | |
%84 = extractvalue { i64, i64, i64 } %81, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %78) | |
%85 = bitcast %swift.refcounted* %77 to i64* | |
store i64 %82, i64* %85, align 8 | |
%tailaddr4._core._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2, i32 1 | |
%tailaddr4._core._countAndFlags._value = bitcast i32* %tailaddr4._core._countAndFlags to i64* | |
store i64 %83, i64* %tailaddr4._core._countAndFlags._value, align 8 | |
%tailaddr4._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3 | |
%86 = bitcast %swift.refcounted* %tailaddr4._core._owner to i64* | |
store i64 %84, i64* %86, align 8 | |
%87 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3, i32 1 | |
%88 = bitcast %TSd* %1 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %88) | |
%._value = getelementptr inbounds %TSd, %TSd* %1, i64 0, i32 0 | |
store double %59, double* %._value, align 8 | |
%89 = call swiftcc { i64, i64, i64 } @_T0s26_toStringReadOnlyPrintableSSxs06CustomB11ConvertibleRzlFTfq4g_nSd_Tg5(%TSd* noalias nocapture nonnull dereferenceable(8) %1) | |
%90 = extractvalue { i64, i64, i64 } %89, 0 | |
%91 = extractvalue { i64, i64, i64 } %89, 1 | |
%92 = extractvalue { i64, i64, i64 } %89, 2 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %88) | |
%93 = bitcast i32* %87 to i64* | |
store i64 %90, i64* %93, align 8 | |
%._core6._countAndFlags = getelementptr inbounds i32, i32* %87, i64 2 | |
%._core6._countAndFlags._value = bitcast i32* %._core6._countAndFlags to i64* | |
store i64 %91, i64* %._core6._countAndFlags._value, align 8 | |
%._core6._owner = getelementptr inbounds i32, i32* %87, i64 4 | |
%94 = bitcast i32* %._core6._owner to i64* | |
store i64 %92, i64* %94, align 8 | |
%95 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5 | |
%96 = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %96) | |
%97 = bitcast %TSS* %2 to i64* | |
store i64 ptrtoint ([1 x i8]* @2 to i64), i64* %97, align 8 | |
%._core7._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 1, i32 0 | |
%98 = bitcast i64* %._core7._countAndFlags._value to i8* | |
call void @llvm.memset.p0i8.i64(i8* %98, i8 0, i64 16, i32 8, i1 false) | |
%99 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %2) | |
%100 = extractvalue { i64, i64, i64 } %99, 0 | |
%101 = extractvalue { i64, i64, i64 } %99, 1 | |
%102 = extractvalue { i64, i64, i64 } %99, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %96) | |
%103 = bitcast %swift.refcounted* %95 to i64* | |
store i64 %100, i64* %103, align 8 | |
%._core8._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5, i32 1 | |
%._core8._countAndFlags._value = bitcast i32* %._core8._countAndFlags to i64* | |
store i64 %101, i64* %._core8._countAndFlags._value, align 8 | |
%._core8._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 6 | |
%104 = bitcast %swift.refcounted* %._core8._owner to i64* | |
store i64 %102, i64* %104, align 8 | |
%105 = inttoptr i64 %84 to %objc_object* | |
%106 = inttoptr i64 %102 to %objc_object* | |
call void @swift_unknownRetain(%objc_object* %106) #9 | |
call void @swift_unknownRetain(%objc_object* %105) #9 | |
%107 = call swiftcc { i64, i64, i64 } @_T0S2SSaySSG19stringInterpolationd_tcfCTfq4nd_n(%swift.bridge* %76) | |
%108 = extractvalue { i64, i64, i64 } %107, 0 | |
%109 = extractvalue { i64, i64, i64 } %107, 1 | |
%110 = extractvalue { i64, i64, i64 } %107, 2 | |
%111 = bitcast %swift.refcounted* %reference.new to i8* | |
call void @llvm.lifetime.end(i64 -1, i8* %111) | |
%112 = bitcast %swift.refcounted* %66 to i64* | |
store i64 %108, i64* %112, align 8 | |
%._core9._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %62, i64 2, i32 1 | |
%._core9._countAndFlags._value = bitcast i32* %._core9._countAndFlags to i64* | |
store i64 %109, i64* %._core9._countAndFlags._value, align 8 | |
%._core9._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %62, i64 3 | |
%113 = bitcast %swift.refcounted* %._core9._owner to i64* | |
store i64 %110, i64* %113, align 8 | |
%114 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%115 = extractvalue { i64, i64, i64 } %114, 0 | |
%116 = extractvalue { i64, i64, i64 } %114, 1 | |
%117 = extractvalue { i64, i64, i64 } %114, 2 | |
%118 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%119 = extractvalue { i64, i64, i64 } %118, 0 | |
%120 = extractvalue { i64, i64, i64 } %118, 1 | |
%121 = extractvalue { i64, i64, i64 } %118, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %65, i64 %115, i64 %116, i64 %117, i64 %119, i64 %120, i64 %121) | |
%122 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%123 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %122, i64 1 | |
%124 = bitcast %swift.refcounted* %123 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %124, align 8 | |
%125 = bitcast %swift.refcounted* %122 to %swift.bridge* | |
%126 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %122, i64 2 | |
%127 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %122, i64 3, i32 1 | |
%128 = bitcast i32* %127 to %swift.type** | |
store %swift.type* @_T0SiN, %swift.type** %128, align 8 | |
%._value12 = bitcast %swift.refcounted* %126 to i64* | |
store i64 %56, i64* %._value12, align 8 | |
%129 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%130 = extractvalue { i64, i64, i64 } %129, 0 | |
%131 = extractvalue { i64, i64, i64 } %129, 1 | |
%132 = extractvalue { i64, i64, i64 } %129, 2 | |
%133 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%134 = extractvalue { i64, i64, i64 } %133, 0 | |
%135 = extractvalue { i64, i64, i64 } %133, 1 | |
%136 = extractvalue { i64, i64, i64 } %133, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %125, i64 %130, i64 %131, i64 %132, i64 %134, i64 %135, i64 %136) | |
ret void | |
; <label>:137: ; preds = %46, %35 | |
call void asm sideeffect "", "n"(i32 0) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:138: ; preds = %140, %41 | |
call void asm sideeffect "", "n"(i32 1) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:139: ; preds = %50 | |
call void asm sideeffect "", "n"(i32 2) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:140: ; preds = %46 | |
%141 = extractvalue { i64, i1 } %48, 0 | |
%142 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %44, i64 %141) | |
%143 = extractvalue { i64, i1 } %142, 0 | |
%144 = extractvalue { i64, i1 } %142, 1 | |
br i1 %144, label %138, label %145 | |
; <label>:145: ; preds = %140 | |
%146 = icmp eq i64 %47, 10000 | |
br i1 %146, label %50, label %35 | |
} | |
define hidden swiftcc void @_T01a13testMapReduceyyF() local_unnamed_addr #0 { | |
entry: | |
%protocols.i.i = alloca [0 x %swift.protocol*], align 8 | |
%0 = alloca %swift.refcounted*, align 8 | |
%tmpcast = bitcast %swift.refcounted** %0 to %Ts15ContiguousArrayV* | |
%reference.raw21 = alloca [104 x i8], align 8 | |
%1 = alloca %TSS, align 16 | |
%2 = alloca %TSd, align 8 | |
%3 = alloca %TSS, align 8 | |
%4 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML, align 8 | |
%5 = icmp eq %swift.type* %4, null | |
br i1 %5, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
cacheIsNull.i: ; preds = %entry | |
%6 = load %swift.type*, %swift.type** @_T0ypML, align 8 | |
%7 = icmp eq %swift.type* %6, null | |
br i1 %7, label %cacheIsNull.i.i, label %_T0ypMa.exit.i | |
cacheIsNull.i.i: ; preds = %cacheIsNull.i | |
%8 = bitcast [0 x %swift.protocol*]* %protocols.i.i to i8* | |
call void @llvm.lifetime.start(i64 0, i8* nonnull %8) #9 | |
%9 = getelementptr inbounds [0 x %swift.protocol*], [0 x %swift.protocol*]* %protocols.i.i, i64 0, i64 0 | |
%10 = call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 0, %swift.protocol** nonnull %9) #9 | |
call void @llvm.lifetime.end(i64 0, i8* nonnull %8) #9 | |
store atomic %swift.type* %10, %swift.type** @_T0ypML release, align 8 | |
br label %_T0ypMa.exit.i | |
_T0ypMa.exit.i: ; preds = %cacheIsNull.i.i, %cacheIsNull.i | |
%11 = phi %swift.type* [ %6, %cacheIsNull.i ], [ %10, %cacheIsNull.i.i ] | |
%12 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* %11) #5 | |
store atomic %swift.type* %12, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
_T0s23_ContiguousArrayStorageCyypGMa.exit: ; preds = %entry, %_T0ypMa.exit.i | |
%13 = phi %swift.type* [ %4, %entry ], [ %12, %_T0ypMa.exit.i ] | |
%14 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %13, i64 64, i64 7) #9 | |
%15 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %14, i64 1 | |
%16 = bitcast %swift.refcounted* %15 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %16, align 8 | |
%17 = bitcast %swift.refcounted* %14 to %swift.bridge* | |
%18 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %14, i64 2 | |
%19 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %14, i64 3, i32 1 | |
%20 = bitcast i32* %19 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %20, align 8 | |
%21 = bitcast %swift.refcounted* %18 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([14 x i8]* @3 to i64), i64 13>, <2 x i64>* %21, align 8 | |
%._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %14, i64 3 | |
%22 = bitcast %swift.refcounted* %._core._owner to i64* | |
store i64 0, i64* %22, align 8 | |
%23 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%24 = extractvalue { i64, i64, i64 } %23, 0 | |
%25 = extractvalue { i64, i64, i64 } %23, 1 | |
%26 = extractvalue { i64, i64, i64 } %23, 2 | |
%27 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%28 = extractvalue { i64, i64, i64 } %27, 0 | |
%29 = extractvalue { i64, i64, i64 } %27, 1 | |
%30 = extractvalue { i64, i64, i64 } %27, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %17, i64 %24, i64 %25, i64 %26, i64 %28, i64 %29, i64 %30) | |
%31 = bitcast %swift.refcounted** %0 to i8* | |
%._buffer._storage = bitcast %swift.refcounted** %0 to %Ts27_ContiguousArrayStorageBaseC** | |
br label %32 | |
; <label>:32: ; preds = %71, %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
%33 = phi double [ 0.000000e+00, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %76, %71 ] | |
%34 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %68, %71 ] | |
%35 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %73, %71 ] | |
%36 = call swiftcc double @_T010Foundation4DateVACycfC() | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %31) | |
store %Ts27_ContiguousArrayStorageBaseC* bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %Ts27_ContiguousArrayStorageBaseC*), %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
call void @swift_rt_swift_retain(%swift.refcounted* bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %swift.refcounted*)) #9 | |
call swiftcc void @_T0s15ContiguousArrayV15reserveCapacityySiFSi_Tg5(i64 10000, %Ts15ContiguousArrayV* nocapture nonnull swiftself dereferenceable(8) %tmpcast) | |
%37 = load %swift.refcounted*, %swift.refcounted** %0, align 8 | |
%38 = call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %37) #9 | |
br i1 %38, label %.preheader23.preheader, label %39, !prof !30 | |
; <label>:39: ; preds = %32 | |
%._storage2.count._value = getelementptr inbounds %swift.refcounted, %swift.refcounted* %37, i64 1 | |
%40 = bitcast %swift.refcounted* %._storage2.count._value to i64* | |
%41 = load i64, i64* %40, align 8, !range !31 | |
call swiftcc void @_T0s15ContiguousArrayV16_copyToNewBufferySi8oldCount_tFSi_Tg5(i64 %41, %Ts15ContiguousArrayV* nocapture nonnull swiftself dereferenceable(8) %tmpcast) | |
br label %.preheader23.preheader | |
.preheader23.preheader: ; preds = %32, %39 | |
br label %.preheader23 | |
.preheader23: ; preds = %.preheader23.preheader, %57 | |
%42 = phi i64 [ %59, %57 ], [ 0, %.preheader23.preheader ] | |
%43 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %42, i64 %42) | |
%44 = extractvalue { i64, i1 } %43, 0 | |
%45 = extractvalue { i64, i1 } %43, 1 | |
br i1 %45, label %165, label %46 | |
; <label>:46: ; preds = %.preheader23 | |
%47 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
%._storage3.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %47, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%48 = load i64, i64* %._storage3.count._value, align 8, !range !31 | |
%49 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %48, i64 1) | |
%50 = extractvalue { i64, i1 } %49, 0 | |
%51 = extractvalue { i64, i1 } %49, 1 | |
br i1 %51, label %166, label %52 | |
; <label>:52: ; preds = %46 | |
%._storage3._capacityAndFlags._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %47, i64 0, i32 1, i32 0, i32 1, i32 0 | |
%53 = load i64, i64* %._storage3._capacityAndFlags._value, align 8 | |
%54 = lshr i64 %53, 1 | |
%55 = icmp slt i64 %54, %50 | |
br i1 %55, label %56, label %57, !prof !32 | |
; <label>:56: ; preds = %52 | |
call swiftcc void @_T0s15ContiguousArrayV16_copyToNewBufferySi8oldCount_tFSi_Tg5(i64 %48, %Ts15ContiguousArrayV* nocapture nonnull swiftself dereferenceable(8) %tmpcast) | |
%.pre = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
br label %57 | |
; <label>:57: ; preds = %52, %56 | |
%58 = phi %Ts27_ContiguousArrayStorageBaseC* [ %47, %52 ], [ %.pre, %56 ] | |
%59 = add nuw nsw i64 %42, 1 | |
%._storage4.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %58, i64 0, i32 1, i32 0, i32 0, i32 0 | |
store i64 %50, i64* %._storage4.count._value, align 8 | |
%60 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %58, i64 1 | |
%tailaddr5 = bitcast %Ts27_ContiguousArrayStorageBaseC* %60 to %TSi* | |
%._value = getelementptr inbounds %TSi, %TSi* %tailaddr5, i64 %48, i32 0 | |
store i64 %44, i64* %._value, align 8 | |
%61 = icmp eq i64 %59, 10000 | |
br i1 %61, label %62, label %.preheader23 | |
; <label>:62: ; preds = %57 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %31) | |
%63 = icmp eq i64 %50, 0 | |
br i1 %63, label %64, label %.preheader.preheader | |
.preheader.preheader: ; preds = %62 | |
br label %.preheader | |
; <label>:64: ; preds = %62 | |
%65 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %58, i64 0, i32 0 | |
call void @swift_rt_swift_release(%swift.refcounted* %65) #9 | |
br label %66 | |
; <label>:66: ; preds = %64, %163 | |
%67 = phi i64 [ %159, %163 ], [ 0, %64 ] | |
%68 = add nuw nsw i64 %34, 1 | |
%69 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %35, i64 %67) | |
%70 = extractvalue { i64, i1 } %69, 1 | |
br i1 %70, label %168, label %71 | |
; <label>:71: ; preds = %66 | |
%72 = extractvalue { i64, i1 } %69, 0 | |
%73 = sdiv i64 %72, 2 | |
%74 = call swiftcc double @_T010Foundation4DateVACycfC() | |
%75 = call swiftcc double @_T010Foundation4DateV17timeIntervalSinceSdACF(double %36, double %74) | |
%76 = fadd double %33, %75 | |
%77 = icmp eq i64 %68, 100000 | |
br i1 %77, label %78, label %32 | |
; <label>:78: ; preds = %71 | |
%79 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %13, i64 64, i64 7) #9 | |
%80 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %79, i64 1 | |
%81 = bitcast %swift.refcounted* %80 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %81, align 8 | |
%82 = bitcast %swift.refcounted* %79 to %swift.bridge* | |
%83 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %79, i64 2 | |
%84 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %79, i64 3, i32 1 | |
%85 = bitcast i32* %84 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %85, align 8 | |
%86 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML, align 8 | |
%87 = icmp eq %swift.type* %86, null | |
br i1 %87, label %cacheIsNull.i22, label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
cacheIsNull.i22: ; preds = %78 | |
%88 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SSN) #5 | |
store atomic %swift.type* %88, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
_T0s23_ContiguousArrayStorageCySSGMa.exit: ; preds = %78, %cacheIsNull.i22 | |
%89 = phi %swift.type* [ %86, %78 ], [ %88, %cacheIsNull.i22 ] | |
%90 = bitcast [104 x i8]* %reference.raw21 to %swift.refcounted* | |
%reference.new = call %swift.refcounted* @swift_initStackObject(%swift.type* %89, %swift.refcounted* nonnull %90) #9 | |
%91 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 1 | |
%92 = bitcast %swift.refcounted* %91 to <2 x i64>* | |
store <2 x i64> <i64 3, i64 6>, <2 x i64>* %92, align 8 | |
%93 = bitcast %swift.refcounted* %reference.new to %swift.bridge* | |
%94 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2 | |
%95 = getelementptr inbounds %TSS, %TSS* %1, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %95) | |
%96 = bitcast %TSS* %1 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([8 x i8]* @1 to i64), i64 7>, <2 x i64>* %96, align 16 | |
%._core12._owner = getelementptr inbounds %TSS, %TSS* %1, i64 0, i32 0, i32 2 | |
%97 = bitcast %TyXlSg* %._core12._owner to i64* | |
store i64 0, i64* %97, align 16 | |
%98 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %1) | |
%99 = extractvalue { i64, i64, i64 } %98, 0 | |
%100 = extractvalue { i64, i64, i64 } %98, 1 | |
%101 = extractvalue { i64, i64, i64 } %98, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %95) | |
%102 = bitcast %swift.refcounted* %94 to i64* | |
store i64 %99, i64* %102, align 8 | |
%tailaddr11._core._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2, i32 1 | |
%tailaddr11._core._countAndFlags._value = bitcast i32* %tailaddr11._core._countAndFlags to i64* | |
store i64 %100, i64* %tailaddr11._core._countAndFlags._value, align 8 | |
%tailaddr11._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3 | |
%103 = bitcast %swift.refcounted* %tailaddr11._core._owner to i64* | |
store i64 %101, i64* %103, align 8 | |
%104 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3, i32 1 | |
%105 = bitcast %TSd* %2 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %105) | |
%._value13 = getelementptr inbounds %TSd, %TSd* %2, i64 0, i32 0 | |
store double %76, double* %._value13, align 8 | |
%106 = call swiftcc { i64, i64, i64 } @_T0s26_toStringReadOnlyPrintableSSxs06CustomB11ConvertibleRzlFTfq4g_nSd_Tg5(%TSd* noalias nocapture nonnull dereferenceable(8) %2) | |
%107 = extractvalue { i64, i64, i64 } %106, 0 | |
%108 = extractvalue { i64, i64, i64 } %106, 1 | |
%109 = extractvalue { i64, i64, i64 } %106, 2 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %105) | |
%110 = bitcast i32* %104 to i64* | |
store i64 %107, i64* %110, align 8 | |
%._core14._countAndFlags = getelementptr inbounds i32, i32* %104, i64 2 | |
%._core14._countAndFlags._value = bitcast i32* %._core14._countAndFlags to i64* | |
store i64 %108, i64* %._core14._countAndFlags._value, align 8 | |
%._core14._owner = getelementptr inbounds i32, i32* %104, i64 4 | |
%111 = bitcast i32* %._core14._owner to i64* | |
store i64 %109, i64* %111, align 8 | |
%112 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5 | |
%113 = getelementptr inbounds %TSS, %TSS* %3, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %113) | |
%114 = bitcast %TSS* %3 to i64* | |
store i64 ptrtoint ([1 x i8]* @2 to i64), i64* %114, align 8 | |
%._core15._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %3, i64 0, i32 0, i32 1, i32 0 | |
%115 = bitcast i64* %._core15._countAndFlags._value to i8* | |
call void @llvm.memset.p0i8.i64(i8* %115, i8 0, i64 16, i32 8, i1 false) | |
%116 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %3) | |
%117 = extractvalue { i64, i64, i64 } %116, 0 | |
%118 = extractvalue { i64, i64, i64 } %116, 1 | |
%119 = extractvalue { i64, i64, i64 } %116, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %113) | |
%120 = bitcast %swift.refcounted* %112 to i64* | |
store i64 %117, i64* %120, align 8 | |
%._core16._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5, i32 1 | |
%._core16._countAndFlags._value = bitcast i32* %._core16._countAndFlags to i64* | |
store i64 %118, i64* %._core16._countAndFlags._value, align 8 | |
%._core16._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 6 | |
%121 = bitcast %swift.refcounted* %._core16._owner to i64* | |
store i64 %119, i64* %121, align 8 | |
%122 = inttoptr i64 %101 to %objc_object* | |
%123 = inttoptr i64 %119 to %objc_object* | |
call void @swift_unknownRetain(%objc_object* %123) #9 | |
call void @swift_unknownRetain(%objc_object* %122) #9 | |
%124 = call swiftcc { i64, i64, i64 } @_T0S2SSaySSG19stringInterpolationd_tcfCTfq4nd_n(%swift.bridge* %93) | |
%125 = extractvalue { i64, i64, i64 } %124, 0 | |
%126 = extractvalue { i64, i64, i64 } %124, 1 | |
%127 = extractvalue { i64, i64, i64 } %124, 2 | |
%128 = bitcast %swift.refcounted* %reference.new to i8* | |
call void @llvm.lifetime.end(i64 -1, i8* %128) | |
%129 = bitcast %swift.refcounted* %83 to i64* | |
store i64 %125, i64* %129, align 8 | |
%._core17._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %79, i64 2, i32 1 | |
%._core17._countAndFlags._value = bitcast i32* %._core17._countAndFlags to i64* | |
store i64 %126, i64* %._core17._countAndFlags._value, align 8 | |
%._core17._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %79, i64 3 | |
%130 = bitcast %swift.refcounted* %._core17._owner to i64* | |
store i64 %127, i64* %130, align 8 | |
%131 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%132 = extractvalue { i64, i64, i64 } %131, 0 | |
%133 = extractvalue { i64, i64, i64 } %131, 1 | |
%134 = extractvalue { i64, i64, i64 } %131, 2 | |
%135 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%136 = extractvalue { i64, i64, i64 } %135, 0 | |
%137 = extractvalue { i64, i64, i64 } %135, 1 | |
%138 = extractvalue { i64, i64, i64 } %135, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %82, i64 %132, i64 %133, i64 %134, i64 %136, i64 %137, i64 %138) | |
%139 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %13, i64 64, i64 7) #9 | |
%140 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %139, i64 1 | |
%141 = bitcast %swift.refcounted* %140 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %141, align 8 | |
%142 = bitcast %swift.refcounted* %139 to %swift.bridge* | |
%143 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %139, i64 2 | |
%144 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %139, i64 3, i32 1 | |
%145 = bitcast i32* %144 to %swift.type** | |
store %swift.type* @_T0SiN, %swift.type** %145, align 8 | |
%._value20 = bitcast %swift.refcounted* %143 to i64* | |
store i64 %73, i64* %._value20, align 8 | |
%146 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%147 = extractvalue { i64, i64, i64 } %146, 0 | |
%148 = extractvalue { i64, i64, i64 } %146, 1 | |
%149 = extractvalue { i64, i64, i64 } %146, 2 | |
%150 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%151 = extractvalue { i64, i64, i64 } %150, 0 | |
%152 = extractvalue { i64, i64, i64 } %150, 1 | |
%153 = extractvalue { i64, i64, i64 } %150, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %142, i64 %147, i64 %148, i64 %149, i64 %151, i64 %152, i64 %153) | |
ret void | |
.preheader: ; preds = %.preheader.preheader, %161 | |
%154 = phi i64 [ %159, %161 ], [ 0, %.preheader.preheader ] | |
%155 = phi i64 [ %157, %161 ], [ 0, %.preheader.preheader ] | |
%._value7 = getelementptr inbounds %TSi, %TSi* %tailaddr5, i64 %155, i32 0 | |
%156 = load i64, i64* %._value7, align 8 | |
%157 = add nuw nsw i64 %155, 1 | |
%158 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %154, i64 %156) | |
%159 = extractvalue { i64, i1 } %158, 0 | |
%160 = extractvalue { i64, i1 } %158, 1 | |
br i1 %160, label %167, label %161 | |
; <label>:161: ; preds = %.preheader | |
%162 = icmp eq i64 %157, %50 | |
br i1 %162, label %163, label %.preheader | |
; <label>:163: ; preds = %161 | |
%164 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %58, i64 0, i32 0 | |
call void @swift_rt_swift_release(%swift.refcounted* %164) #9 | |
br label %66 | |
; <label>:165: ; preds = %.preheader23 | |
call void asm sideeffect "", "n"(i32 0) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:166: ; preds = %46 | |
call void asm sideeffect "", "n"(i32 1) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:167: ; preds = %.preheader | |
call void asm sideeffect "", "n"(i32 5) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:168: ; preds = %66 | |
call void asm sideeffect "", "n"(i32 6) #9 | |
call void @llvm.trap() | |
unreachable | |
} | |
define hidden swiftcc void @_T01a17testLazyMapReduceyyF() local_unnamed_addr #0 { | |
entry: | |
%protocols.i.i = alloca [0 x %swift.protocol*], align 8 | |
%reference.raw13 = alloca [104 x i8], align 8 | |
%0 = alloca %TSS, align 16 | |
%1 = alloca %TSd, align 8 | |
%2 = alloca %TSS, align 8 | |
%3 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML, align 8 | |
%4 = icmp eq %swift.type* %3, null | |
br i1 %4, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
cacheIsNull.i: ; preds = %entry | |
%5 = load %swift.type*, %swift.type** @_T0ypML, align 8 | |
%6 = icmp eq %swift.type* %5, null | |
br i1 %6, label %cacheIsNull.i.i, label %_T0ypMa.exit.i | |
cacheIsNull.i.i: ; preds = %cacheIsNull.i | |
%7 = bitcast [0 x %swift.protocol*]* %protocols.i.i to i8* | |
call void @llvm.lifetime.start(i64 0, i8* nonnull %7) #9 | |
%8 = getelementptr inbounds [0 x %swift.protocol*], [0 x %swift.protocol*]* %protocols.i.i, i64 0, i64 0 | |
%9 = call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 0, %swift.protocol** nonnull %8) #9 | |
call void @llvm.lifetime.end(i64 0, i8* nonnull %7) #9 | |
store atomic %swift.type* %9, %swift.type** @_T0ypML release, align 8 | |
br label %_T0ypMa.exit.i | |
_T0ypMa.exit.i: ; preds = %cacheIsNull.i.i, %cacheIsNull.i | |
%10 = phi %swift.type* [ %5, %cacheIsNull.i ], [ %9, %cacheIsNull.i.i ] | |
%11 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* %10) #5 | |
store atomic %swift.type* %11, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
_T0s23_ContiguousArrayStorageCyypGMa.exit: ; preds = %entry, %_T0ypMa.exit.i | |
%12 = phi %swift.type* [ %3, %entry ], [ %11, %_T0ypMa.exit.i ] | |
%13 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%14 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 1 | |
%15 = bitcast %swift.refcounted* %14 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %15, align 8 | |
%16 = bitcast %swift.refcounted* %13 to %swift.bridge* | |
%17 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 2 | |
%18 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 3, i32 1 | |
%19 = bitcast i32* %18 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %19, align 8 | |
%20 = bitcast %swift.refcounted* %17 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([18 x i8]* @4 to i64), i64 17>, <2 x i64>* %20, align 8 | |
%._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %13, i64 3 | |
%21 = bitcast %swift.refcounted* %._core._owner to i64* | |
store i64 0, i64* %21, align 8 | |
%22 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%23 = extractvalue { i64, i64, i64 } %22, 0 | |
%24 = extractvalue { i64, i64, i64 } %22, 1 | |
%25 = extractvalue { i64, i64, i64 } %22, 2 | |
%26 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%27 = extractvalue { i64, i64, i64 } %26, 0 | |
%28 = extractvalue { i64, i64, i64 } %26, 1 | |
%29 = extractvalue { i64, i64, i64 } %26, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %16, i64 %23, i64 %24, i64 %25, i64 %27, i64 %28, i64 %29) | |
br label %30 | |
; <label>:30: ; preds = %39, %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
%31 = phi double [ 0.000000e+00, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %44, %39 ] | |
%32 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %36, %39 ] | |
%33 = phi i64 [ 0, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %41, %39 ] | |
%34 = call swiftcc double @_T010Foundation4DateVACycfC() | |
br label %122 | |
; <label>:35: ; preds = %145 | |
%36 = add nuw nsw i64 %32, 1 | |
%37 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %33, i64 %143) | |
%38 = extractvalue { i64, i1 } %37, 1 | |
br i1 %38, label %139, label %39 | |
; <label>:39: ; preds = %35 | |
%40 = extractvalue { i64, i1 } %37, 0 | |
%41 = sdiv i64 %40, 2 | |
%42 = call swiftcc double @_T010Foundation4DateVACycfC() | |
%43 = call swiftcc double @_T010Foundation4DateV17timeIntervalSinceSdACF(double %34, double %42) | |
%44 = fadd double %31, %43 | |
%45 = icmp eq i64 %36, 100000 | |
br i1 %45, label %46, label %30 | |
; <label>:46: ; preds = %39 | |
%47 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%48 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %47, i64 1 | |
%49 = bitcast %swift.refcounted* %48 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %49, align 8 | |
%50 = bitcast %swift.refcounted* %47 to %swift.bridge* | |
%51 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %47, i64 2 | |
%52 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %47, i64 3, i32 1 | |
%53 = bitcast i32* %52 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %53, align 8 | |
%54 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML, align 8 | |
%55 = icmp eq %swift.type* %54, null | |
br i1 %55, label %cacheIsNull.i14, label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
cacheIsNull.i14: ; preds = %46 | |
%56 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SSN) #5 | |
store atomic %swift.type* %56, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
_T0s23_ContiguousArrayStorageCySSGMa.exit: ; preds = %46, %cacheIsNull.i14 | |
%57 = phi %swift.type* [ %54, %46 ], [ %56, %cacheIsNull.i14 ] | |
%58 = bitcast [104 x i8]* %reference.raw13 to %swift.refcounted* | |
%reference.new = call %swift.refcounted* @swift_initStackObject(%swift.type* %57, %swift.refcounted* nonnull %58) #9 | |
%59 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 1 | |
%60 = bitcast %swift.refcounted* %59 to <2 x i64>* | |
store <2 x i64> <i64 3, i64 6>, <2 x i64>* %60, align 8 | |
%61 = bitcast %swift.refcounted* %reference.new to %swift.bridge* | |
%62 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2 | |
%63 = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %63) | |
%64 = bitcast %TSS* %0 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([8 x i8]* @1 to i64), i64 7>, <2 x i64>* %64, align 16 | |
%._core5._owner = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 2 | |
%65 = bitcast %TyXlSg* %._core5._owner to i64* | |
store i64 0, i64* %65, align 16 | |
%66 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %0) | |
%67 = extractvalue { i64, i64, i64 } %66, 0 | |
%68 = extractvalue { i64, i64, i64 } %66, 1 | |
%69 = extractvalue { i64, i64, i64 } %66, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %63) | |
%70 = bitcast %swift.refcounted* %62 to i64* | |
store i64 %67, i64* %70, align 8 | |
%tailaddr4._core._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2, i32 1 | |
%tailaddr4._core._countAndFlags._value = bitcast i32* %tailaddr4._core._countAndFlags to i64* | |
store i64 %68, i64* %tailaddr4._core._countAndFlags._value, align 8 | |
%tailaddr4._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3 | |
%71 = bitcast %swift.refcounted* %tailaddr4._core._owner to i64* | |
store i64 %69, i64* %71, align 8 | |
%72 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3, i32 1 | |
%73 = bitcast %TSd* %1 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %73) | |
%._value = getelementptr inbounds %TSd, %TSd* %1, i64 0, i32 0 | |
store double %44, double* %._value, align 8 | |
%74 = call swiftcc { i64, i64, i64 } @_T0s26_toStringReadOnlyPrintableSSxs06CustomB11ConvertibleRzlFTfq4g_nSd_Tg5(%TSd* noalias nocapture nonnull dereferenceable(8) %1) | |
%75 = extractvalue { i64, i64, i64 } %74, 0 | |
%76 = extractvalue { i64, i64, i64 } %74, 1 | |
%77 = extractvalue { i64, i64, i64 } %74, 2 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %73) | |
%78 = bitcast i32* %72 to i64* | |
store i64 %75, i64* %78, align 8 | |
%._core6._countAndFlags = getelementptr inbounds i32, i32* %72, i64 2 | |
%._core6._countAndFlags._value = bitcast i32* %._core6._countAndFlags to i64* | |
store i64 %76, i64* %._core6._countAndFlags._value, align 8 | |
%._core6._owner = getelementptr inbounds i32, i32* %72, i64 4 | |
%79 = bitcast i32* %._core6._owner to i64* | |
store i64 %77, i64* %79, align 8 | |
%80 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5 | |
%81 = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %81) | |
%82 = bitcast %TSS* %2 to i64* | |
store i64 ptrtoint ([1 x i8]* @2 to i64), i64* %82, align 8 | |
%._core7._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 1, i32 0 | |
%83 = bitcast i64* %._core7._countAndFlags._value to i8* | |
call void @llvm.memset.p0i8.i64(i8* %83, i8 0, i64 16, i32 8, i1 false) | |
%84 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %2) | |
%85 = extractvalue { i64, i64, i64 } %84, 0 | |
%86 = extractvalue { i64, i64, i64 } %84, 1 | |
%87 = extractvalue { i64, i64, i64 } %84, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %81) | |
%88 = bitcast %swift.refcounted* %80 to i64* | |
store i64 %85, i64* %88, align 8 | |
%._core8._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5, i32 1 | |
%._core8._countAndFlags._value = bitcast i32* %._core8._countAndFlags to i64* | |
store i64 %86, i64* %._core8._countAndFlags._value, align 8 | |
%._core8._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 6 | |
%89 = bitcast %swift.refcounted* %._core8._owner to i64* | |
store i64 %87, i64* %89, align 8 | |
%90 = inttoptr i64 %69 to %objc_object* | |
%91 = inttoptr i64 %87 to %objc_object* | |
call void @swift_unknownRetain(%objc_object* %91) #9 | |
call void @swift_unknownRetain(%objc_object* %90) #9 | |
%92 = call swiftcc { i64, i64, i64 } @_T0S2SSaySSG19stringInterpolationd_tcfCTfq4nd_n(%swift.bridge* %61) | |
%93 = extractvalue { i64, i64, i64 } %92, 0 | |
%94 = extractvalue { i64, i64, i64 } %92, 1 | |
%95 = extractvalue { i64, i64, i64 } %92, 2 | |
%96 = bitcast %swift.refcounted* %reference.new to i8* | |
call void @llvm.lifetime.end(i64 -1, i8* %96) | |
%97 = bitcast %swift.refcounted* %51 to i64* | |
store i64 %93, i64* %97, align 8 | |
%._core9._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %47, i64 2, i32 1 | |
%._core9._countAndFlags._value = bitcast i32* %._core9._countAndFlags to i64* | |
store i64 %94, i64* %._core9._countAndFlags._value, align 8 | |
%._core9._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %47, i64 3 | |
%98 = bitcast %swift.refcounted* %._core9._owner to i64* | |
store i64 %95, i64* %98, align 8 | |
%99 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%100 = extractvalue { i64, i64, i64 } %99, 0 | |
%101 = extractvalue { i64, i64, i64 } %99, 1 | |
%102 = extractvalue { i64, i64, i64 } %99, 2 | |
%103 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%104 = extractvalue { i64, i64, i64 } %103, 0 | |
%105 = extractvalue { i64, i64, i64 } %103, 1 | |
%106 = extractvalue { i64, i64, i64 } %103, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %50, i64 %100, i64 %101, i64 %102, i64 %104, i64 %105, i64 %106) | |
%107 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %12, i64 64, i64 7) #9 | |
%108 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %107, i64 1 | |
%109 = bitcast %swift.refcounted* %108 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %109, align 8 | |
%110 = bitcast %swift.refcounted* %107 to %swift.bridge* | |
%111 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %107, i64 2 | |
%112 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %107, i64 3, i32 1 | |
%113 = bitcast i32* %112 to %swift.type** | |
store %swift.type* @_T0SiN, %swift.type** %113, align 8 | |
%._value12 = bitcast %swift.refcounted* %111 to i64* | |
store i64 %41, i64* %._value12, align 8 | |
%114 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%115 = extractvalue { i64, i64, i64 } %114, 0 | |
%116 = extractvalue { i64, i64, i64 } %114, 1 | |
%117 = extractvalue { i64, i64, i64 } %114, 2 | |
%118 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%119 = extractvalue { i64, i64, i64 } %118, 0 | |
%120 = extractvalue { i64, i64, i64 } %118, 1 | |
%121 = extractvalue { i64, i64, i64 } %118, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %110, i64 %115, i64 %116, i64 %117, i64 %119, i64 %120, i64 %121) | |
ret void | |
; <label>:122: ; preds = %145, %30 | |
%123 = phi i64 [ 0, %30 ], [ %143, %145 ] | |
%124 = phi i64 [ 0, %30 ], [ %134, %145 ] | |
%125 = or i64 %124, 1 | |
%126 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %124, i64 %124) | |
%127 = extractvalue { i64, i1 } %126, 1 | |
br i1 %127, label %137, label %128 | |
; <label>:128: ; preds = %122 | |
%129 = extractvalue { i64, i1 } %126, 0 | |
%130 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %123, i64 %129) | |
%131 = extractvalue { i64, i1 } %130, 0 | |
%132 = extractvalue { i64, i1 } %130, 1 | |
br i1 %132, label %138, label %133 | |
; <label>:133: ; preds = %128 | |
%134 = add nsw i64 %124, 2 | |
%135 = call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %125, i64 %125) | |
%136 = extractvalue { i64, i1 } %135, 1 | |
br i1 %136, label %137, label %140 | |
; <label>:137: ; preds = %133, %122 | |
call void asm sideeffect "", "n"(i32 0) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:138: ; preds = %140, %128 | |
call void asm sideeffect "", "n"(i32 1) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:139: ; preds = %35 | |
call void asm sideeffect "", "n"(i32 2) #9 | |
call void @llvm.trap() | |
unreachable | |
; <label>:140: ; preds = %133 | |
%141 = extractvalue { i64, i1 } %135, 0 | |
%142 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %131, i64 %141) | |
%143 = extractvalue { i64, i1 } %142, 0 | |
%144 = extractvalue { i64, i1 } %142, 1 | |
br i1 %144, label %138, label %145 | |
; <label>:145: ; preds = %140 | |
%146 = icmp eq i64 %134, 10000 | |
br i1 %146, label %35, label %122 | |
} | |
define hidden swiftcc void @_T01a4mainyyF() local_unnamed_addr #0 { | |
entry: | |
tail call swiftcc void @_T01a11testForLoopyyF() | |
tail call swiftcc void @_T01a13testMapReduceyyF() | |
tail call swiftcc void @_T01a17testLazyMapReduceyyF() | |
ret void | |
} | |
; Function Attrs: noinline | |
define linkonce_odr hidden swiftcc { i64, i64, i64 } @_T0s26_toStringReadOnlyPrintableSSxs06CustomB11ConvertibleRzlFTfq4g_nSd_Tg5(%TSd* noalias nocapture dereferenceable(8)) local_unnamed_addr #1 { | |
entry: | |
%._value = getelementptr inbounds %TSd, %TSd* %0, i64 0, i32 0 | |
%1 = load double, double* %._value, align 8 | |
%2 = tail call swiftcc { i64, i64, i64 } @_T0s16_float64ToStringSSSd_Sb5debugtF(double %1, i1 false) | |
ret { i64, i64, i64 } %2 | |
} | |
define linkonce_odr hidden swiftcc { i64, i64, i64 } @_T0S2SSaySSG19stringInterpolationd_tcfCTfq4nd_n(%swift.bridge*) local_unnamed_addr #0 { | |
entry: | |
%1 = alloca %Ts11_StringCoreV, align 8 | |
%2 = getelementptr inbounds %Ts11_StringCoreV, %Ts11_StringCoreV* %1, i64 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %2) | |
%3 = bitcast %Ts11_StringCoreV* %1 to i64* | |
store i64 ptrtoint (%Ts6UInt32V* @_T0s19_emptyStringStorages6UInt32Vv to i64), i64* %3, align 8 | |
%._countAndFlags._value = getelementptr inbounds %Ts11_StringCoreV, %Ts11_StringCoreV* %1, i64 0, i32 1, i32 0 | |
%._owner = getelementptr inbounds %Ts11_StringCoreV, %Ts11_StringCoreV* %1, i64 0, i32 2 | |
%4 = bitcast %TyXlSg* %._owner to i64* | |
%5 = bitcast %swift.bridge* %0 to %Ts27_ContiguousArrayStorageBaseC* | |
%._storage.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%6 = bitcast i64* %._countAndFlags._value to i8* | |
call void @llvm.memset.p0i8.i64(i8* %6, i8 0, i64 16, i32 8, i1 false) | |
%7 = load i64, i64* %._storage.count._value, align 8, !range !31 | |
%8 = icmp eq i64 %7, 0 | |
br i1 %8, label %33, label %9 | |
; <label>:9: ; preds = %entry | |
%10 = bitcast %swift.bridge* %0 to i8* | |
%11 = getelementptr inbounds i8, i8* %10, i64 32 | |
%tailaddr = bitcast i8* %11 to %TSS* | |
%12 = bitcast %TyXlSg* %._owner to %objc_object** | |
%13 = tail call %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge* nonnull %0) #9 | |
br label %14 | |
; <label>:14: ; preds = %._crit_edge, %9 | |
%15 = phi i64 [ 0, %9 ], [ %.pre, %._crit_edge ] | |
%16 = phi i64 [ 0, %9 ], [ %30, %._crit_edge ] | |
%._core = getelementptr inbounds %TSS, %TSS* %tailaddr, i64 %16, i32 0 | |
%17 = bitcast %Ts11_StringCoreV* %._core to i64* | |
%18 = load i64, i64* %17, align 8 | |
%._core._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %tailaddr, i64 %16, i32 0, i32 1, i32 0 | |
%19 = load i64, i64* %._core._countAndFlags._value, align 8 | |
%._core._owner = getelementptr inbounds %TSS, %TSS* %tailaddr, i64 %16, i32 0, i32 2 | |
%20 = bitcast %TyXlSg* %._core._owner to i64* | |
%21 = load i64, i64* %20, align 8 | |
%22 = and i64 %15, 4611686018427387903 | |
%23 = icmp eq i64 %22, 0 | |
br i1 %23, label %26, label %24 | |
; <label>:24: ; preds = %14 | |
%25 = inttoptr i64 %21 to %objc_object* | |
tail call void @swift_unknownRetain(%objc_object* %25) #9 | |
call swiftcc void @_T0s11_StringCoreV6appendyABFTfq4gXn_n(i64 %18, i64 %19, i64 %21, %Ts11_StringCoreV* nocapture nonnull swiftself dereferenceable(24) %1) | |
tail call void @swift_unknownRelease(%objc_object* %25) #9 | |
br label %29 | |
; <label>:26: ; preds = %14 | |
%27 = load %objc_object*, %objc_object** %12, align 8 | |
store i64 %18, i64* %3, align 8 | |
store i64 %19, i64* %._countAndFlags._value, align 8 | |
store i64 %21, i64* %4, align 8 | |
%28 = inttoptr i64 %21 to %objc_object* | |
tail call void @swift_unknownRetain(%objc_object* %28) #9 | |
tail call void @swift_unknownRelease(%objc_object* %27) #9 | |
br label %29 | |
; <label>:29: ; preds = %26, %24 | |
%30 = add nuw nsw i64 %16, 1 | |
%31 = icmp eq i64 %30, %7 | |
br i1 %31, label %32, label %._crit_edge | |
._crit_edge: ; preds = %29 | |
%.pre = load i64, i64* %._countAndFlags._value, align 8 | |
br label %14 | |
; <label>:32: ; preds = %29 | |
tail call void @swift_bridgeObjectRelease(%swift.bridge* nonnull %0) #9 | |
%.pre10 = load i64, i64* %3, align 8 | |
%.pre11 = load i64, i64* %._countAndFlags._value, align 8 | |
%.pre12 = load i64, i64* %4, align 8 | |
br label %33 | |
; <label>:33: ; preds = %entry, %32 | |
%34 = phi i64 [ 0, %entry ], [ %.pre12, %32 ] | |
%35 = phi i64 [ 0, %entry ], [ %.pre11, %32 ] | |
%36 = phi i64 [ ptrtoint (%Ts6UInt32V* @_T0s19_emptyStringStorages6UInt32Vv to i64), %entry ], [ %.pre10, %32 ] | |
tail call void @swift_bridgeObjectRelease(%swift.bridge* nonnull %0) #9 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %2) | |
%37 = insertvalue { i64, i64, i64 } undef, i64 %36, 0 | |
%38 = insertvalue { i64, i64, i64 } %37, i64 %35, 1 | |
%39 = insertvalue { i64, i64, i64 } %38, i64 %34, 2 | |
ret { i64, i64, i64 } %39 | |
} | |
; Function Attrs: noinline | |
define linkonce_odr hidden swiftcc void @_T0s11_StringCoreV6appendyABFTfq4gXn_n(i64, i64, i64, %Ts11_StringCoreV* nocapture swiftself dereferenceable(24)) local_unnamed_addr #1 { | |
entry: | |
%._countAndFlags._value = getelementptr inbounds %Ts11_StringCoreV, %Ts11_StringCoreV* %3, i64 0, i32 1, i32 0 | |
%4 = load i64, i64* %._countAndFlags._value, align 8 | |
%5 = lshr i64 %4, 63 | |
%6 = add nuw nsw i64 %5, 1 | |
%7 = lshr i64 %1, 63 | |
%8 = add nuw nsw i64 %7, 1 | |
%9 = icmp ult i64 %6, %8 | |
br i1 %9, label %10, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit | |
; <label>:10: ; preds = %entry | |
%11 = icmp eq i64 %0, 0 | |
br i1 %11, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit, label %12 | |
; <label>:12: ; preds = %10 | |
%13 = icmp sgt i64 %1, -1 | |
br i1 %13, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit, label %14, !prof !30 | |
; <label>:14: ; preds = %12 | |
%15 = and i64 %1, 4611686018427387903 | |
%16 = inttoptr i64 %0 to %Ts6UInt16V* | |
%17 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %16, i64 %15 | |
%18 = icmp eq %Ts6UInt16V* %17, null | |
%19 = bitcast %Ts6UInt16V* %17 to i8* | |
br label %20 | |
; <label>:20: ; preds = %27, %14 | |
%.sroa.0.0.i.i = phi i64 [ %0, %14 ], [ %32, %27 ] | |
%21 = icmp eq i64 %.sroa.0.0.i.i, 0 | |
br i1 %18, label %22, label %23 | |
; <label>:22: ; preds = %20 | |
br i1 %21, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit, label %27 | |
; <label>:23: ; preds = %20 | |
br i1 %21, label %33, label %24 | |
; <label>:24: ; preds = %23 | |
%25 = inttoptr i64 %.sroa.0.0.i.i to i8* | |
%26 = icmp eq i8* %25, %19 | |
br i1 %26, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit, label %27 | |
; <label>:27: ; preds = %24, %22 | |
%28 = inttoptr i64 %.sroa.0.0.i.i to %Ts6UInt16V* | |
%._value.i.i = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %28, i64 0, i32 0 | |
%29 = load i16, i16* %._value.i.i, align 2, !noalias !33 | |
%30 = icmp ugt i16 %29, 127 | |
%31 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %28, i64 1 | |
%32 = ptrtoint %Ts6UInt16V* %31 to i64 | |
br i1 %30, label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit, label %20 | |
; <label>:33: ; preds = %23 | |
tail call void asm sideeffect "", "n"(i32 0) #9, !noalias !33 | |
tail call void @llvm.trap(), !noalias !33 | |
unreachable | |
_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit: ; preds = %22, %24, %27 | |
%.ph = phi i64 [ 1, %22 ], [ 1, %24 ], [ 2, %27 ] | |
br label %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit | |
_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit: ; preds = %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit, %10, %12, %entry | |
%34 = phi i64 [ %6, %entry ], [ 2, %10 ], [ 1, %12 ], [ %.ph, %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit.loopexit ] | |
%35 = and i64 %4, 4611686018427387903 | |
%36 = and i64 %1, 4611686018427387903 | |
%._owner = getelementptr inbounds %Ts11_StringCoreV, %Ts11_StringCoreV* %3, i64 0, i32 2 | |
%37 = add nuw nsw i64 %35, %36 | |
%38 = bitcast %TyXlSg* %._owner to i64* | |
%39 = load i64, i64* %38, align 8 | |
%.mask = and i64 %4, 4611686018427387904 | |
%40 = icmp ne i64 %.mask, 0 | |
%41 = icmp eq i64 %39, 0 | |
%or.cond7 = or i1 %40, %41 | |
%42 = inttoptr i64 %39 to %objc_object* | |
%43 = icmp slt i64 %6, %34 | |
%or.cond = or i1 %or.cond7, %43 | |
br i1 %or.cond, label %82, label %44 | |
; <label>:44: ; preds = %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit | |
%45 = tail call i1 @swift_isUniquelyReferencedNonObjC(%objc_object* %42) #9 | |
br i1 %45, label %46, label %82, !prof !30 | |
; <label>:46: ; preds = %44 | |
%47 = bitcast %Ts11_StringCoreV* %3 to i64* | |
%48 = load i64, i64* %47, align 8 | |
%49 = icmp eq i64 %48, 0 | |
br i1 %49, label %111, label %50 | |
; <label>:50: ; preds = %46 | |
%51 = inttoptr i64 %48 to i8* | |
%52 = bitcast %objc_object* %42 to i8* | |
%53 = getelementptr inbounds i8, i8* %52, i64 32 | |
%54 = icmp eq i8* %53, %51 | |
%.value2.capacityAndElementShift = getelementptr inbounds i8, i8* %52, i64 24 | |
%.value2.capacityAndElementShift._value = bitcast i8* %.value2.capacityAndElementShift to i64* | |
%55 = load i64, i64* %.value2.capacityAndElementShift._value, align 8 | |
br i1 %54, label %56, label %._crit_edge | |
; <label>:56: ; preds = %50 | |
%57 = and i64 %55, -2 | |
%58 = and i64 %55, 1 | |
%59 = ashr i64 %57, %58 | |
%60 = icmp slt i64 %59, %37 | |
br i1 %60, label %._crit_edge, label %61, !prof !32 | |
; <label>:61: ; preds = %56 | |
%62 = getelementptr inbounds i8, i8* %52, i64 16 | |
%63 = shl i64 %37, %5 | |
%64 = getelementptr inbounds i8, i8* %51, i64 %63 | |
%65 = ptrtoint i8* %64 to i64 | |
%66 = bitcast i8* %62 to i64* | |
store i64 %65, i64* %66, align 8 | |
%67 = load i64, i64* %._countAndFlags._value, align 8 | |
%68 = shl i64 %35, %5 | |
%69 = getelementptr inbounds i8, i8* %51, i64 %68 | |
%70 = and i64 %67, -4611686018427387904 | |
%71 = or i64 %70, %37 | |
store i64 %71, i64* %._countAndFlags._value, align 8 | |
br label %93 | |
._crit_edge: ; preds = %50, %56 | |
%72 = and i64 %55, -2 | |
%73 = and i64 %55, 1 | |
%74 = ashr i64 %72, %73 | |
%75 = icmp slt i64 %74, %37 | |
br i1 %75, label %76, label %82 | |
; <label>:76: ; preds = %._crit_edge | |
%77 = tail call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %74, i64 2) | |
%78 = extractvalue { i64, i1 } %77, 0 | |
%79 = extractvalue { i64, i1 } %77, 1 | |
br i1 %79, label %112, label %80 | |
; <label>:80: ; preds = %76 | |
%81 = icmp slt i64 %37, %78 | |
%.5 = select i1 %81, i64 %78, i64 %37 | |
br label %82 | |
; <label>:82: ; preds = %80, %._crit_edge, %44, %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit | |
%83 = phi i64 [ %.5, %80 ], [ %37, %._crit_edge ], [ %37, %44 ], [ %37, %_T0s11_StringCoreV22isRepresentableAsASCIISbyFTfq4x_n.exit ] | |
tail call swiftcc void @_T0s11_StringCoreV12_copyInPlaceySi7newSize_Si0F8CapacitySi15minElementWidthtF(i64 %37, i64 %83, i64 %34, %Ts11_StringCoreV* nocapture nonnull swiftself dereferenceable(24) %3) | |
%84 = bitcast %Ts11_StringCoreV* %3 to i64* | |
%85 = load i64, i64* %84, align 8 | |
%86 = load i64, i64* %._countAndFlags._value, align 8 | |
%87 = icmp eq i64 %85, 0 | |
br i1 %87, label %108, label %88 | |
; <label>:88: ; preds = %82 | |
%89 = inttoptr i64 %85 to i8* | |
%90 = lshr i64 %86, 63 | |
%91 = shl i64 %35, %90 | |
%92 = getelementptr inbounds i8, i8* %89, i64 %91 | |
br label %93 | |
; <label>:93: ; preds = %61, %88 | |
%94 = phi i8* [ %92, %88 ], [ %69, %61 ] | |
%95 = phi i64 [ %86, %88 ], [ %71, %61 ] | |
%96 = icmp eq i64 %0, 0 | |
br i1 %96, label %101, label %97 | |
; <label>:97: ; preds = %93 | |
%98 = lshr i64 %95, 63 | |
%99 = add nuw nsw i64 %98, 1 | |
%100 = inttoptr i64 %0 to i8* | |
tail call swiftcc void @_T0s11_StringCoreV13_copyElementsySv_Si15srcElementWidthSv8dstStartSi0hfG0Si5counttFZTfq4nnnnnd_n(i8* %100, i64 %8, i8* %94, i64 %99, i64 %36) | |
br label %107 | |
; <label>:101: ; preds = %93 | |
%.mask21 = and i64 %1, 4611686018427387904 | |
%102 = icmp eq i64 %.mask21, 0 | |
br i1 %102, label %109, label %103 | |
; <label>:103: ; preds = %101 | |
%104 = icmp eq i64 %2, 0 | |
br i1 %104, label %110, label %105 | |
; <label>:105: ; preds = %103 | |
%106 = inttoptr i64 %2 to %objc_object* | |
tail call void @swift_unknownRetain(%objc_object* %106) #9 | |
tail call swiftcc void @_T0s19_cocoaStringReadAllyyXl_Spys6UInt16VGtFTfq4gn_n(%objc_object* %106, i8* %94) | |
tail call void @swift_unknownRelease(%objc_object* %106) #9 | |
br label %107 | |
; <label>:107: ; preds = %105, %97 | |
ret void | |
; <label>:108: ; preds = %82 | |
tail call void asm sideeffect "", "n"(i32 1) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:109: ; preds = %101 | |
tail call void asm sideeffect "", "n"(i32 3) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:110: ; preds = %103 | |
tail call void asm sideeffect "", "n"(i32 4) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:111: ; preds = %46 | |
tail call void asm sideeffect "", "n"(i32 7) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:112: ; preds = %76 | |
tail call void asm sideeffect "", "n"(i32 11) #9 | |
tail call void @llvm.trap() | |
unreachable | |
} | |
declare swiftcc void @_T0s11_StringCoreV12_copyInPlaceySi7newSize_Si0F8CapacitySi15minElementWidthtF(i64, i64, i64, %Ts11_StringCoreV* nocapture swiftself dereferenceable(24)) local_unnamed_addr #0 | |
define linkonce_odr hidden swiftcc void @_T0s11_StringCoreV13_copyElementsySv_Si15srcElementWidthSv8dstStartSi0hfG0Si5counttFZTfq4nnnnnd_n(i8*, i64, i8*, i64, i64) local_unnamed_addr #0 { | |
entry: | |
%5 = icmp eq i64 %1, %3 | |
br i1 %5, label %79, label %6, !prof !30 | |
; <label>:6: ; preds = %entry | |
%7 = icmp slt i64 %1, %3 | |
br i1 %7, label %29, label %8 | |
; <label>:8: ; preds = %6 | |
%9 = bitcast i8* %0 to %Ts6UInt16V* | |
%10 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %9, i64 %4 | |
%11 = bitcast %Ts6UInt16V* %10 to i8* | |
%12 = icmp eq i8* %11, %0 | |
br i1 %12, label %.loopexit, label %.preheader6 | |
.preheader6: ; preds = %8 | |
%._value8 = bitcast i8* %0 to i16* | |
%13 = load i16, i16* %._value8, align 2 | |
%14 = and i16 %13, 255 | |
%15 = icmp ne i16 %14, %13 | |
%16 = icmp ugt i16 %13, 255 | |
%or.cond9 = and i1 %16, %15 | |
br i1 %or.cond9, label %._crit_edge, label %.lr.ph.preheader | |
.lr.ph.preheader: ; preds = %.preheader6 | |
br label %.lr.ph | |
; <label>:17: ; preds = %.lr.ph | |
%18 = getelementptr inbounds i8, i8* %25, i64 1 | |
%._value = bitcast i8* %27 to i16* | |
%19 = load i16, i16* %._value, align 2 | |
%20 = and i16 %19, 255 | |
%21 = icmp ne i16 %20, %19 | |
%22 = icmp ugt i16 %19, 255 | |
%or.cond = and i1 %22, %21 | |
br i1 %or.cond, label %._crit_edge.loopexit, label %.lr.ph | |
.lr.ph: ; preds = %.lr.ph.preheader, %17 | |
%23 = phi i16 [ %19, %17 ], [ %13, %.lr.ph.preheader ] | |
%24 = phi i8* [ %27, %17 ], [ %0, %.lr.ph.preheader ] | |
%25 = phi i8* [ %18, %17 ], [ %2, %.lr.ph.preheader ] | |
%26 = trunc i16 %23 to i8 | |
store i8 %26, i8* %25, align 1 | |
%27 = getelementptr inbounds i8, i8* %24, i64 2 | |
%28 = icmp eq i8* %27, %11 | |
br i1 %28, label %.loopexit.loopexit22, label %17 | |
; <label>:29: ; preds = %6 | |
%30 = getelementptr inbounds i8, i8* %0, i64 %4 | |
%31 = icmp eq i64 %4, 0 | |
br i1 %31, label %.loopexit, label %32 | |
; <label>:32: ; preds = %29 | |
%33 = load i8, i8* %0, align 1 | |
%34 = zext i8 %33 to i16 | |
%._value3 = bitcast i8* %2 to i16* | |
store i16 %34, i16* %._value3, align 2 | |
%35 = icmp eq i64 %4, 1 | |
br i1 %35, label %.loopexit, label %.preheader.preheader | |
.preheader.preheader: ; preds = %32 | |
%36 = getelementptr inbounds i8, i8* %0, i64 1 | |
%37 = bitcast i8* %2 to %Ts6UInt16V* | |
%38 = add i64 %4, -1 | |
%min.iters.check = icmp ult i64 %38, 16 | |
br i1 %min.iters.check, label %.preheader.preheader20, label %min.iters.checked | |
min.iters.checked: ; preds = %.preheader.preheader | |
%n.vec = and i64 %38, -16 | |
%cmp.zero = icmp eq i64 %n.vec, 0 | |
br i1 %cmp.zero, label %.preheader.preheader20, label %vector.memcheck | |
vector.memcheck: ; preds = %min.iters.checked | |
%scevgep = getelementptr i8, i8* %2, i64 2 | |
%39 = shl i64 %4, 1 | |
%scevgep13 = getelementptr i8, i8* %2, i64 %39 | |
%bound0 = icmp ult i8* %scevgep, %30 | |
%bound1 = icmp ult i8* %36, %scevgep13 | |
%memcheck.conflict = and i1 %bound0, %bound1 | |
%ind.end = getelementptr %Ts6UInt16V, %Ts6UInt16V* %37, i64 %n.vec | |
%ind.end15 = getelementptr i8, i8* %36, i64 %n.vec | |
br i1 %memcheck.conflict, label %.preheader.preheader20, label %vector.body.preheader | |
vector.body.preheader: ; preds = %vector.memcheck | |
%40 = add i64 %n.vec, -16 | |
%41 = lshr exact i64 %40, 4 | |
%42 = and i64 %41, 1 | |
%lcmp.mod = icmp eq i64 %42, 0 | |
br i1 %lcmp.mod, label %vector.body.prol.preheader, label %vector.body.prol.loopexit | |
vector.body.prol.preheader: ; preds = %vector.body.preheader | |
br label %vector.body.prol | |
vector.body.prol: ; preds = %vector.body.prol.preheader | |
%43 = getelementptr inbounds i8, i8* %2, i64 2 | |
%44 = bitcast i8* %36 to <8 x i8>* | |
%wide.load.prol = load <8 x i8>, <8 x i8>* %44, align 1, !alias.scope !36 | |
%45 = getelementptr i8, i8* %0, i64 9 | |
%46 = bitcast i8* %45 to <8 x i8>* | |
%wide.load19.prol = load <8 x i8>, <8 x i8>* %46, align 1, !alias.scope !36 | |
%47 = zext <8 x i8> %wide.load.prol to <8 x i16> | |
%48 = zext <8 x i8> %wide.load19.prol to <8 x i16> | |
%49 = bitcast i8* %43 to <8 x i16>* | |
store <8 x i16> %47, <8 x i16>* %49, align 2, !alias.scope !39, !noalias !36 | |
%50 = getelementptr i8, i8* %2, i64 18 | |
%51 = bitcast i8* %50 to <8 x i16>* | |
store <8 x i16> %48, <8 x i16>* %51, align 2, !alias.scope !39, !noalias !36 | |
br label %vector.body.prol.loopexit | |
vector.body.prol.loopexit: ; preds = %vector.body.prol, %vector.body.preheader | |
%index.unr = phi i64 [ 0, %vector.body.preheader ], [ 16, %vector.body.prol ] | |
%52 = icmp eq i64 %41, 0 | |
br i1 %52, label %middle.block, label %vector.body.preheader.new | |
vector.body.preheader.new: ; preds = %vector.body.prol.loopexit | |
br label %vector.body | |
vector.body: ; preds = %vector.body, %vector.body.preheader.new | |
%index = phi i64 [ %index.unr, %vector.body.preheader.new ], [ %index.next.1, %vector.body ] | |
%next.gep = getelementptr %Ts6UInt16V, %Ts6UInt16V* %37, i64 %index | |
%next.gep17 = getelementptr i8, i8* %36, i64 %index | |
%53 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %next.gep, i64 1 | |
%54 = bitcast i8* %next.gep17 to <8 x i8>* | |
%wide.load = load <8 x i8>, <8 x i8>* %54, align 1, !alias.scope !36 | |
%55 = getelementptr i8, i8* %next.gep17, i64 8 | |
%56 = bitcast i8* %55 to <8 x i8>* | |
%wide.load19 = load <8 x i8>, <8 x i8>* %56, align 1, !alias.scope !36 | |
%57 = zext <8 x i8> %wide.load to <8 x i16> | |
%58 = zext <8 x i8> %wide.load19 to <8 x i16> | |
%59 = bitcast %Ts6UInt16V* %53 to <8 x i16>* | |
store <8 x i16> %57, <8 x i16>* %59, align 2, !alias.scope !39, !noalias !36 | |
%60 = getelementptr %Ts6UInt16V, %Ts6UInt16V* %53, i64 8 | |
%61 = bitcast %Ts6UInt16V* %60 to <8 x i16>* | |
store <8 x i16> %58, <8 x i16>* %61, align 2, !alias.scope !39, !noalias !36 | |
%index.next = add i64 %index, 16 | |
%next.gep.1 = getelementptr %Ts6UInt16V, %Ts6UInt16V* %37, i64 %index.next | |
%next.gep17.1 = getelementptr i8, i8* %36, i64 %index.next | |
%62 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %next.gep.1, i64 1 | |
%63 = bitcast i8* %next.gep17.1 to <8 x i8>* | |
%wide.load.1 = load <8 x i8>, <8 x i8>* %63, align 1, !alias.scope !36 | |
%64 = getelementptr i8, i8* %next.gep17.1, i64 8 | |
%65 = bitcast i8* %64 to <8 x i8>* | |
%wide.load19.1 = load <8 x i8>, <8 x i8>* %65, align 1, !alias.scope !36 | |
%66 = zext <8 x i8> %wide.load.1 to <8 x i16> | |
%67 = zext <8 x i8> %wide.load19.1 to <8 x i16> | |
%68 = bitcast %Ts6UInt16V* %62 to <8 x i16>* | |
store <8 x i16> %66, <8 x i16>* %68, align 2, !alias.scope !39, !noalias !36 | |
%69 = getelementptr %Ts6UInt16V, %Ts6UInt16V* %62, i64 8 | |
%70 = bitcast %Ts6UInt16V* %69 to <8 x i16>* | |
store <8 x i16> %67, <8 x i16>* %70, align 2, !alias.scope !39, !noalias !36 | |
%index.next.1 = add i64 %index, 32 | |
%71 = icmp eq i64 %index.next.1, %n.vec | |
br i1 %71, label %middle.block.unr-lcssa, label %vector.body, !llvm.loop !41 | |
middle.block.unr-lcssa: ; preds = %vector.body | |
br label %middle.block | |
middle.block: ; preds = %vector.body.prol.loopexit, %middle.block.unr-lcssa | |
%cmp.n = icmp eq i64 %38, %n.vec | |
br i1 %cmp.n, label %.loopexit, label %.preheader.preheader20 | |
.preheader.preheader20: ; preds = %middle.block, %vector.memcheck, %min.iters.checked, %.preheader.preheader | |
%.ph = phi %Ts6UInt16V* [ %37, %vector.memcheck ], [ %37, %min.iters.checked ], [ %37, %.preheader.preheader ], [ %ind.end, %middle.block ] | |
%.ph21 = phi i8* [ %36, %vector.memcheck ], [ %36, %min.iters.checked ], [ %36, %.preheader.preheader ], [ %ind.end15, %middle.block ] | |
br label %.preheader | |
.preheader: ; preds = %.preheader.preheader20, %.preheader | |
%72 = phi %Ts6UInt16V* [ %74, %.preheader ], [ %.ph, %.preheader.preheader20 ] | |
%73 = phi i8* [ %77, %.preheader ], [ %.ph21, %.preheader.preheader20 ] | |
%74 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %72, i64 1 | |
%75 = load i8, i8* %73, align 1 | |
%76 = zext i8 %75 to i16 | |
%._value5 = getelementptr inbounds %Ts6UInt16V, %Ts6UInt16V* %74, i64 0, i32 0 | |
store i16 %76, i16* %._value5, align 2 | |
%77 = getelementptr inbounds i8, i8* %73, i64 1 | |
%78 = icmp eq i8* %77, %30 | |
br i1 %78, label %.loopexit.loopexit, label %.preheader, !llvm.loop !44 | |
; <label>:79: ; preds = %entry | |
%80 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %1, i64 1) | |
%81 = extractvalue { i64, i1 } %80, 1 | |
br i1 %81, label %88, label %82 | |
; <label>:82: ; preds = %79 | |
%83 = extractvalue { i64, i1 } %80, 0 | |
%84 = and i64 %83, 63 | |
%85 = shl i64 %4, %84 | |
%86 = icmp slt i64 %85, 0 | |
br i1 %86, label %89, label %87 | |
; <label>:87: ; preds = %82 | |
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %0, i64 %85, i32 1, i1 false) | |
br label %.loopexit | |
.loopexit.loopexit: ; preds = %.preheader | |
br label %.loopexit | |
.loopexit.loopexit22: ; preds = %.lr.ph | |
br label %.loopexit | |
.loopexit: ; preds = %.loopexit.loopexit22, %.loopexit.loopexit, %middle.block, %32, %29, %8, %87 | |
ret void | |
._crit_edge.loopexit: ; preds = %17 | |
br label %._crit_edge | |
._crit_edge: ; preds = %._crit_edge.loopexit, %.preheader6 | |
tail call void asm sideeffect "", "n"(i32 0) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:88: ; preds = %79 | |
tail call void asm sideeffect "", "n"(i32 1) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:89: ; preds = %82 | |
tail call void asm sideeffect "", "n"(i32 2) #9 | |
tail call void @llvm.trap() | |
unreachable | |
} | |
define linkonce_odr hidden swiftcc void @_T0s15ContiguousArrayV15reserveCapacityySiFSi_Tg5(i64, %Ts15ContiguousArrayV* nocapture swiftself dereferenceable(8)) local_unnamed_addr #0 { | |
entry: | |
%._buffer._storage = getelementptr inbounds %Ts15ContiguousArrayV, %Ts15ContiguousArrayV* %1, i64 0, i32 0, i32 0 | |
%2 = bitcast %Ts15ContiguousArrayV* %1 to %swift.refcounted** | |
%3 = load %swift.refcounted*, %swift.refcounted** %2, align 8 | |
%4 = tail call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %3) #9 | |
%5 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
br i1 %4, label %6, label %entry._crit_edge | |
; <label>:6: ; preds = %entry | |
%._storage5._capacityAndFlags._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 1, i32 0, i32 1, i32 0 | |
%7 = load i64, i64* %._storage5._capacityAndFlags._value, align 8 | |
%8 = lshr i64 %7, 1 | |
%9 = icmp slt i64 %8, %0 | |
br i1 %9, label %entry._crit_edge, label %23, !prof !32 | |
entry._crit_edge: ; preds = %entry, %6 | |
%._storage.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%10 = load i64, i64* %._storage.count._value, align 8, !range !31 | |
%11 = icmp sgt i64 %10, %0 | |
%. = select i1 %11, i64 %10, i64 %0 | |
%12 = icmp eq i64 %., 0 | |
br i1 %12, label %13, label %24 | |
; <label>:13: ; preds = %entry._crit_edge | |
tail call void @swift_rt_swift_retain(%swift.refcounted* bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %swift.refcounted*)) #9 | |
br label %14 | |
; <label>:14: ; preds = %13, %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
%15 = phi i64 [ %.pre6, %_T0s23_ContiguousArrayStorageCySiGMa.exit ], [ %10, %13 ] | |
%16 = phi %Ts27_ContiguousArrayStorageBaseC* [ %32, %_T0s23_ContiguousArrayStorageCySiGMa.exit ], [ bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %Ts27_ContiguousArrayStorageBaseC*), %13 ] | |
%17 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %16, i64 1 | |
%18 = bitcast %Ts27_ContiguousArrayStorageBaseC* %17 to i8* | |
%19 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 1 | |
%20 = bitcast %Ts27_ContiguousArrayStorageBaseC* %19 to i8* | |
%21 = shl nuw i64 %15, 3 | |
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %20, i64 %21, i32 8, i1 false) | |
%22 = load %swift.refcounted*, %swift.refcounted** %2, align 8 | |
store %Ts27_ContiguousArrayStorageBaseC* %16, %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
tail call void @swift_rt_swift_release(%swift.refcounted* %22) #9 | |
br label %23 | |
; <label>:23: ; preds = %6, %14 | |
ret void | |
; <label>:24: ; preds = %entry._crit_edge | |
%25 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySiGML, align 8 | |
%26 = icmp eq %swift.type* %25, null | |
br i1 %26, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
cacheIsNull.i: ; preds = %24 | |
%27 = tail call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SiN) #5 | |
store atomic %swift.type* %27, %swift.type** @_T0s23_ContiguousArrayStorageCySiGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
_T0s23_ContiguousArrayStorageCySiGMa.exit: ; preds = %24, %cacheIsNull.i | |
%28 = phi %swift.type* [ %25, %24 ], [ %27, %cacheIsNull.i ] | |
%29 = shl i64 %., 3 | |
%30 = add i64 %29, 32 | |
%31 = tail call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %28, i64 %30, i64 7) #9 | |
%32 = bitcast %swift.refcounted* %31 to %Ts27_ContiguousArrayStorageBaseC* | |
%33 = bitcast %swift.refcounted* %31 to i8* | |
%34 = tail call i64 @_swift_stdlib_malloc_size(i8* %33) | |
%35 = add i64 %34, -32 | |
%36 = sdiv i64 %35, 8 | |
%37 = shl nsw i64 %36, 1 | |
%38 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %31, i64 1 | |
%._storage1.count._value = bitcast %swift.refcounted* %38 to i64* | |
store i64 %10, i64* %._storage1.count._value, align 8 | |
%._storage1._capacityAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %31, i64 1, i32 1 | |
%._storage1._capacityAndFlags._value = bitcast i32* %._storage1._capacityAndFlags to i64* | |
store i64 %37, i64* %._storage1._capacityAndFlags._value, align 8 | |
%.pre6 = load i64, i64* %._storage.count._value, align 8, !range !31 | |
br label %14 | |
} | |
; Function Attrs: noinline | |
define linkonce_odr hidden swiftcc void @_T0s15ContiguousArrayV16_copyToNewBufferySi8oldCount_tFSi_Tg5(i64, %Ts15ContiguousArrayV* nocapture swiftself dereferenceable(8)) local_unnamed_addr #1 { | |
entry: | |
%2 = alloca %swift.refcounted*, align 8 | |
%3 = alloca %swift.refcounted*, align 8 | |
%4 = tail call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %0, i64 1) | |
%5 = extractvalue { i64, i1 } %4, 1 | |
br i1 %5, label %15, label %6 | |
; <label>:6: ; preds = %entry | |
%tmpcast4 = bitcast %swift.refcounted** %2 to %Ts22_ContiguousArrayBufferV* | |
%tmpcast = bitcast %swift.refcounted** %3 to %Ts22_ContiguousArrayBufferV* | |
%7 = extractvalue { i64, i1 } %4, 0 | |
%8 = bitcast %swift.refcounted** %2 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %8) | |
%._buffer = getelementptr inbounds %Ts15ContiguousArrayV, %Ts15ContiguousArrayV* %1, i64 0, i32 0 | |
%._buffer._storage = getelementptr inbounds %Ts15ContiguousArrayV, %Ts15ContiguousArrayV* %1, i64 0, i32 0, i32 0 | |
%9 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._buffer._storage, align 8 | |
%10 = bitcast %swift.refcounted** %3 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %10) | |
%._storage = bitcast %swift.refcounted** %3 to %Ts27_ContiguousArrayStorageBaseC** | |
store %Ts27_ContiguousArrayStorageBaseC* %9, %Ts27_ContiguousArrayStorageBaseC** %._storage, align 8 | |
%11 = call swiftcc %Ts27_ContiguousArrayStorageBaseC* @_T0s20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB0s011_ContiguousaB0Vy7ElementQzGSi011countForNewB0_Si03minL8CapacitytFAEySiG_Tg5(i64 %0, i64 %7, %Ts22_ContiguousArrayBufferV* noalias nocapture nonnull swiftself dereferenceable(8) %tmpcast) | |
%12 = load %swift.refcounted*, %swift.refcounted** %3, align 8 | |
%13 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %9, i64 0, i32 0 | |
tail call void @swift_rt_swift_retain(%swift.refcounted* %13) #9 | |
tail call void @swift_rt_swift_release(%swift.refcounted* %12) #9 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %10) | |
%._storage2 = bitcast %swift.refcounted** %2 to %Ts27_ContiguousArrayStorageBaseC** | |
store %Ts27_ContiguousArrayStorageBaseC* %11, %Ts27_ContiguousArrayStorageBaseC** %._storage2, align 8 | |
call swiftcc void @_T0s20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateys011_ContiguousaB0Vy7ElementQzGz_S2iqd__ts16_PointerFunctionRd__AFQyd__AGRSlFTfq4nnngn_nAEySiG_s07_IgnoreK0VySiGTg5(%Ts22_ContiguousArrayBufferV* nocapture nonnull dereferenceable(8) %tmpcast4, i64 %0, i64 0, %Ts14_IgnorePointerV* noalias nocapture undef, %Ts22_ContiguousArrayBufferV* nocapture nonnull swiftself dereferenceable(8) %._buffer) | |
%14 = load %swift.refcounted*, %swift.refcounted** %2, align 8 | |
tail call void @swift_rt_swift_release(%swift.refcounted* %14) #9 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %8) | |
ret void | |
; <label>:15: ; preds = %entry | |
tail call void asm sideeffect "", "n"(i32 0) #9 | |
tail call void @llvm.trap() | |
unreachable | |
} | |
; Function Attrs: noinline | |
define linkonce_odr hidden swiftcc %Ts27_ContiguousArrayStorageBaseC* @_T0s20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB0s011_ContiguousaB0Vy7ElementQzGSi011countForNewB0_Si03minL8CapacitytFAEySiG_Tg5(i64, i64, %Ts22_ContiguousArrayBufferV* noalias nocapture swiftself dereferenceable(8)) local_unnamed_addr #1 { | |
entry: | |
%._storage = getelementptr inbounds %Ts22_ContiguousArrayBufferV, %Ts22_ContiguousArrayBufferV* %2, i64 0, i32 0 | |
%3 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._storage, align 8 | |
%._storage1._capacityAndFlags._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %3, i64 0, i32 1, i32 0, i32 1, i32 0 | |
%4 = load i64, i64* %._storage1._capacityAndFlags._value, align 8 | |
%5 = lshr i64 %4, 1 | |
%6 = icmp slt i64 %5, %1 | |
br i1 %6, label %7, label %11 | |
; <label>:7: ; preds = %entry | |
%8 = tail call { i64, i1 } @llvm.smul.with.overflow.i64(i64 %5, i64 2) | |
%9 = extractvalue { i64, i1 } %8, 0 | |
%10 = extractvalue { i64, i1 } %8, 1 | |
br i1 %10, label %34, label %11 | |
; <label>:11: ; preds = %entry, %7 | |
%12 = phi i64 [ %9, %7 ], [ %5, %entry ] | |
%13 = icmp slt i64 %12, %1 | |
%. = select i1 %13, i64 %1, i64 %12 | |
%14 = icmp slt i64 %., %0 | |
%.. = select i1 %14, i64 %0, i64 %. | |
%15 = icmp eq i64 %.., 0 | |
br i1 %15, label %16, label %19 | |
; <label>:16: ; preds = %11 | |
tail call void @swift_rt_swift_retain(%swift.refcounted* bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %swift.refcounted*)) #9 | |
br label %17 | |
; <label>:17: ; preds = %16, %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
%18 = phi %Ts27_ContiguousArrayStorageBaseC* [ %27, %_T0s23_ContiguousArrayStorageCySiGMa.exit ], [ bitcast (%struct._SwiftEmptyArrayStorage* @_swiftEmptyArrayStorage to %Ts27_ContiguousArrayStorageBaseC*), %16 ] | |
ret %Ts27_ContiguousArrayStorageBaseC* %18 | |
; <label>:19: ; preds = %11 | |
%20 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySiGML, align 8 | |
%21 = icmp eq %swift.type* %20, null | |
br i1 %21, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
cacheIsNull.i: ; preds = %19 | |
%22 = tail call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SiN) #5 | |
store atomic %swift.type* %22, %swift.type** @_T0s23_ContiguousArrayStorageCySiGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySiGMa.exit | |
_T0s23_ContiguousArrayStorageCySiGMa.exit: ; preds = %19, %cacheIsNull.i | |
%23 = phi %swift.type* [ %20, %19 ], [ %22, %cacheIsNull.i ] | |
%24 = shl i64 %.., 3 | |
%25 = add i64 %24, 32 | |
%26 = tail call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %23, i64 %25, i64 7) #9 | |
%27 = bitcast %swift.refcounted* %26 to %Ts27_ContiguousArrayStorageBaseC* | |
%28 = bitcast %swift.refcounted* %26 to i8* | |
%29 = tail call i64 @_swift_stdlib_malloc_size(i8* %28) | |
%30 = add i64 %29, -32 | |
%31 = sdiv i64 %30, 8 | |
%32 = shl nsw i64 %31, 1 | |
%33 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %26, i64 1 | |
%._storage2.count._value = bitcast %swift.refcounted* %33 to i64* | |
store i64 %0, i64* %._storage2.count._value, align 8 | |
%._storage2._capacityAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %26, i64 1, i32 1 | |
%._storage2._capacityAndFlags._value = bitcast i32* %._storage2._capacityAndFlags to i64* | |
store i64 %32, i64* %._storage2._capacityAndFlags._value, align 8 | |
br label %17 | |
; <label>:34: ; preds = %7 | |
tail call void asm sideeffect "", "n"(i32 2) #9 | |
tail call void @llvm.trap() | |
unreachable | |
} | |
; Function Attrs: noinline | |
define linkonce_odr hidden swiftcc void @_T0s20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateys011_ContiguousaB0Vy7ElementQzGz_S2iqd__ts16_PointerFunctionRd__AFQyd__AGRSlFTfq4nnngn_nAEySiG_s07_IgnoreK0VySiGTg5(%Ts22_ContiguousArrayBufferV* nocapture dereferenceable(8), i64, i64, %Ts14_IgnorePointerV* noalias nocapture, %Ts22_ContiguousArrayBufferV* nocapture swiftself dereferenceable(8)) local_unnamed_addr #1 { | |
entry: | |
%._storage = getelementptr inbounds %Ts22_ContiguousArrayBufferV, %Ts22_ContiguousArrayBufferV* %4, i64 0, i32 0 | |
%5 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._storage, align 8 | |
%._storage1.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%6 = load i64, i64* %._storage1.count._value, align 8, !range !31 | |
%._storage2 = getelementptr inbounds %Ts22_ContiguousArrayBufferV, %Ts22_ContiguousArrayBufferV* %0, i64 0, i32 0 | |
%7 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._storage2, align 8 | |
%._storage3.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %7, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%8 = load i64, i64* %._storage3.count._value, align 8, !range !31 | |
%9 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %8, i64 %1) | |
%10 = extractvalue { i64, i1 } %9, 1 | |
%11 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 0 | |
br i1 %10, label %71, label %12 | |
; <label>:12: ; preds = %entry | |
%13 = extractvalue { i64, i1 } %9, 0 | |
%14 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %13, i64 %2) | |
%15 = extractvalue { i64, i1 } %14, 0 | |
%16 = extractvalue { i64, i1 } %14, 1 | |
br i1 %16, label %72, label %17 | |
; <label>:17: ; preds = %12 | |
%18 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %6, i64 %1) | |
%19 = extractvalue { i64, i1 } %18, 1 | |
br i1 %19, label %73, label %20 | |
; <label>:20: ; preds = %17 | |
%21 = extractvalue { i64, i1 } %18, 0 | |
%22 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %21, i64 %15) | |
%23 = extractvalue { i64, i1 } %22, 0 | |
%24 = extractvalue { i64, i1 } %22, 1 | |
br i1 %24, label %74, label %25 | |
; <label>:25: ; preds = %20 | |
%26 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %7, i64 1 | |
%27 = bitcast %Ts27_ContiguousArrayStorageBaseC* %26 to i8* | |
%tailaddr = bitcast %Ts27_ContiguousArrayStorageBaseC* %26 to %TSi* | |
%28 = getelementptr inbounds %TSi, %TSi* %tailaddr, i64 %1 | |
%29 = getelementptr inbounds %TSi, %TSi* %28, i64 %2 | |
%30 = bitcast %TSi* %29 to i8* | |
%31 = bitcast %Ts22_ContiguousArrayBufferV* %4 to %swift.refcounted** | |
%32 = tail call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %11) #9 | |
br i1 %32, label %33, label %37 | |
; <label>:33: ; preds = %25 | |
%._storage1._capacityAndFlags._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 0, i32 1, i32 0, i32 1, i32 0 | |
%34 = load i64, i64* %._storage1._capacityAndFlags._value, align 8 | |
%35 = lshr i64 %34, 1 | |
%36 = icmp ult i64 %35, %6 | |
br i1 %36, label %37, label %59, !prof !32 | |
; <label>:37: ; preds = %33, %25 | |
%38 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 1 | |
%39 = bitcast %Ts27_ContiguousArrayStorageBaseC* %38 to i8* | |
%40 = shl nuw i64 %1, 3 | |
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %27, i8* %39, i64 %40, i32 8, i1 false) | |
%41 = tail call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %1, i64 %23) | |
%42 = extractvalue { i64, i1 } %41, 0 | |
%43 = extractvalue { i64, i1 } %41, 1 | |
br i1 %43, label %75, label %44 | |
; <label>:44: ; preds = %37 | |
%45 = icmp slt i64 %1, 0 | |
%46 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._storage, align 8 | |
%._storage5.count._value = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %46, i64 0, i32 1, i32 0, i32 0, i32 0 | |
%47 = load i64, i64* %._storage5.count._value, align 8, !range !31 | |
%48 = icmp slt i64 %47, %42 | |
%49 = or i1 %45, %48 | |
br i1 %49, label %76, label %50 | |
; <label>:50: ; preds = %44 | |
%51 = tail call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %47, i64 %42) | |
%52 = extractvalue { i64, i1 } %51, 1 | |
br i1 %52, label %77, label %53 | |
; <label>:53: ; preds = %50 | |
%54 = extractvalue { i64, i1 } %51, 0 | |
%55 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %46, i64 1 | |
%tailaddr6 = bitcast %Ts27_ContiguousArrayStorageBaseC* %55 to %TSi* | |
%56 = getelementptr inbounds %TSi, %TSi* %tailaddr6, i64 %42 | |
%57 = bitcast %TSi* %56 to i8* | |
%58 = shl nuw i64 %54, 3 | |
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %57, i64 %58, i32 8, i1 false) | |
br label %67 | |
; <label>:59: ; preds = %33 | |
%60 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %5, i64 1 | |
%tailaddr8 = bitcast %Ts27_ContiguousArrayStorageBaseC* %60 to %TSi* | |
%61 = bitcast %Ts27_ContiguousArrayStorageBaseC* %60 to i8* | |
%62 = getelementptr inbounds %TSi, %TSi* %tailaddr8, i64 %1 | |
%63 = shl nuw i64 %1, 3 | |
tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %27, i8* %61, i64 %63, i32 8, i1 false) | |
%64 = getelementptr inbounds %TSi, %TSi* %62, i64 %23 | |
%65 = bitcast %TSi* %64 to i8* | |
%66 = shl nuw i64 %15, 3 | |
tail call void @llvm.memmove.p0i8.p0i8.i64(i8* %30, i8* %65, i64 %66, i32 8, i1 false) | |
store i64 0, i64* %._storage1.count._value, align 8 | |
br label %67 | |
; <label>:67: ; preds = %59, %53 | |
%68 = load %Ts27_ContiguousArrayStorageBaseC*, %Ts27_ContiguousArrayStorageBaseC** %._storage2, align 8 | |
%69 = load %swift.refcounted*, %swift.refcounted** %31, align 8 | |
%70 = getelementptr inbounds %Ts27_ContiguousArrayStorageBaseC, %Ts27_ContiguousArrayStorageBaseC* %68, i64 0, i32 0 | |
tail call void @swift_rt_swift_retain(%swift.refcounted* %70) #9 | |
tail call void @swift_rt_swift_release(%swift.refcounted* %69) #9 | |
store %Ts27_ContiguousArrayStorageBaseC* %68, %Ts27_ContiguousArrayStorageBaseC** %._storage, align 8 | |
ret void | |
; <label>:71: ; preds = %entry | |
tail call void asm sideeffect "", "n"(i32 0) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:72: ; preds = %12 | |
tail call void asm sideeffect "", "n"(i32 1) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:73: ; preds = %17 | |
tail call void asm sideeffect "", "n"(i32 2) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:74: ; preds = %20 | |
tail call void asm sideeffect "", "n"(i32 3) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:75: ; preds = %37 | |
tail call void asm sideeffect "", "n"(i32 4) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:76: ; preds = %44 | |
tail call void asm sideeffect "", "n"(i32 5) #9 | |
tail call void @llvm.trap() | |
unreachable | |
; <label>:77: ; preds = %50 | |
tail call void asm sideeffect "", "n"(i32 6) #9 | |
tail call void @llvm.trap() | |
unreachable | |
} | |
declare swiftcc { i64, i64, i64 } @_T0s16_float64ToStringSSSd_Sb5debugtF(double, i1) local_unnamed_addr #0 | |
; Function Attrs: noinline norecurse | |
define linkonce_odr hidden swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture dereferenceable(24)) local_unnamed_addr #2 { | |
entry: | |
%1 = bitcast %TSS* %0 to i64* | |
%2 = load i64, i64* %1, align 8 | |
%._core._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 1, i32 0 | |
%3 = load i64, i64* %._core._countAndFlags._value, align 8 | |
%._core._owner = getelementptr inbounds %TSS, %TSS* %0, i64 0, i32 0, i32 2 | |
%4 = bitcast %TyXlSg* %._core._owner to i64* | |
%5 = load i64, i64* %4, align 8 | |
%6 = insertvalue { i64, i64, i64 } undef, i64 %2, 0 | |
%7 = insertvalue { i64, i64, i64 } %6, i64 %3, 1 | |
%8 = insertvalue { i64, i64, i64 } %7, i64 %5, 2 | |
ret { i64, i64, i64 } %8 | |
} | |
define linkonce_odr hidden swiftcc void @_T01a7measureyyycFTf4g_n(i8*, %swift.refcounted*) local_unnamed_addr #0 { | |
entry: | |
%protocols.i.i = alloca [0 x %swift.protocol*], align 8 | |
%reference.raw7 = alloca [104 x i8], align 8 | |
%2 = alloca %TSS, align 16 | |
%3 = alloca %TSd, align 8 | |
%4 = alloca %TSS, align 8 | |
%5 = bitcast i8* %0 to void (%swift.refcounted*)* | |
br label %77 | |
; <label>:6: ; preds = %77 | |
%7 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML, align 8 | |
%8 = icmp eq %swift.type* %7, null | |
br i1 %8, label %cacheIsNull.i, label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
cacheIsNull.i: ; preds = %6 | |
%9 = load %swift.type*, %swift.type** @_T0ypML, align 8 | |
%10 = icmp eq %swift.type* %9, null | |
br i1 %10, label %cacheIsNull.i.i, label %_T0ypMa.exit.i | |
cacheIsNull.i.i: ; preds = %cacheIsNull.i | |
%11 = bitcast [0 x %swift.protocol*]* %protocols.i.i to i8* | |
call void @llvm.lifetime.start(i64 0, i8* nonnull %11) #9 | |
%12 = getelementptr inbounds [0 x %swift.protocol*], [0 x %swift.protocol*]* %protocols.i.i, i64 0, i64 0 | |
%13 = call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 0, %swift.protocol** nonnull %12) #9 | |
call void @llvm.lifetime.end(i64 0, i8* nonnull %11) #9 | |
store atomic %swift.type* %13, %swift.type** @_T0ypML release, align 8 | |
br label %_T0ypMa.exit.i | |
_T0ypMa.exit.i: ; preds = %cacheIsNull.i.i, %cacheIsNull.i | |
%14 = phi %swift.type* [ %9, %cacheIsNull.i ], [ %13, %cacheIsNull.i.i ] | |
%15 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* %14) #5 | |
store atomic %swift.type* %15, %swift.type** @_T0s23_ContiguousArrayStorageCyypGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
_T0s23_ContiguousArrayStorageCyypGMa.exit: ; preds = %6, %_T0ypMa.exit.i | |
%16 = phi %swift.type* [ %7, %6 ], [ %15, %_T0ypMa.exit.i ] | |
%17 = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %16, i64 64, i64 7) #9 | |
%18 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %17, i64 1 | |
%19 = bitcast %swift.refcounted* %18 to <2 x i64>* | |
store <2 x i64> <i64 1, i64 2>, <2 x i64>* %19, align 8 | |
%20 = bitcast %swift.refcounted* %17 to %swift.bridge* | |
%21 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %17, i64 2 | |
%22 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %17, i64 3, i32 1 | |
%23 = bitcast i32* %22 to %swift.type** | |
store %swift.type* @_T0SSN, %swift.type** %23, align 8 | |
%24 = load %swift.type*, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML, align 8 | |
%25 = icmp eq %swift.type* %24, null | |
br i1 %25, label %cacheIsNull.i8, label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
cacheIsNull.i8: ; preds = %_T0s23_ContiguousArrayStorageCyypGMa.exit | |
%26 = call %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type* nonnull @_T0SSN) #5 | |
store atomic %swift.type* %26, %swift.type** @_T0s23_ContiguousArrayStorageCySSGML release, align 8 | |
br label %_T0s23_ContiguousArrayStorageCySSGMa.exit | |
_T0s23_ContiguousArrayStorageCySSGMa.exit: ; preds = %_T0s23_ContiguousArrayStorageCyypGMa.exit, %cacheIsNull.i8 | |
%27 = phi %swift.type* [ %24, %_T0s23_ContiguousArrayStorageCyypGMa.exit ], [ %26, %cacheIsNull.i8 ] | |
%28 = bitcast [104 x i8]* %reference.raw7 to %swift.refcounted* | |
%reference.new = call %swift.refcounted* @swift_initStackObject(%swift.type* %27, %swift.refcounted* nonnull %28) #9 | |
%29 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 1 | |
%30 = bitcast %swift.refcounted* %29 to <2 x i64>* | |
store <2 x i64> <i64 3, i64 6>, <2 x i64>* %30, align 8 | |
%31 = bitcast %swift.refcounted* %reference.new to %swift.bridge* | |
%32 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2 | |
%33 = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %33) | |
%34 = bitcast %TSS* %2 to <2 x i64>* | |
store <2 x i64> <i64 ptrtoint ([8 x i8]* @1 to i64), i64 7>, <2 x i64>* %34, align 16 | |
%._core._owner = getelementptr inbounds %TSS, %TSS* %2, i64 0, i32 0, i32 2 | |
%35 = bitcast %TyXlSg* %._core._owner to i64* | |
store i64 0, i64* %35, align 16 | |
%36 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %2) | |
%37 = extractvalue { i64, i64, i64 } %36, 0 | |
%38 = extractvalue { i64, i64, i64 } %36, 1 | |
%39 = extractvalue { i64, i64, i64 } %36, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %33) | |
%40 = bitcast %swift.refcounted* %32 to i64* | |
store i64 %37, i64* %40, align 8 | |
%tailaddr2._core._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 2, i32 1 | |
%tailaddr2._core._countAndFlags._value = bitcast i32* %tailaddr2._core._countAndFlags to i64* | |
store i64 %38, i64* %tailaddr2._core._countAndFlags._value, align 8 | |
%tailaddr2._core._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3 | |
%41 = bitcast %swift.refcounted* %tailaddr2._core._owner to i64* | |
store i64 %39, i64* %41, align 8 | |
%42 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 3, i32 1 | |
%43 = bitcast %TSd* %3 to i8* | |
call void @llvm.lifetime.start(i64 8, i8* nonnull %43) | |
%._value = getelementptr inbounds %TSd, %TSd* %3, i64 0, i32 0 | |
store double %84, double* %._value, align 8 | |
%44 = call swiftcc { i64, i64, i64 } @_T0s26_toStringReadOnlyPrintableSSxs06CustomB11ConvertibleRzlFTfq4g_nSd_Tg5(%TSd* noalias nocapture nonnull dereferenceable(8) %3) | |
%45 = extractvalue { i64, i64, i64 } %44, 0 | |
%46 = extractvalue { i64, i64, i64 } %44, 1 | |
%47 = extractvalue { i64, i64, i64 } %44, 2 | |
call void @llvm.lifetime.end(i64 8, i8* nonnull %43) | |
%48 = bitcast i32* %42 to i64* | |
store i64 %45, i64* %48, align 8 | |
%._core3._countAndFlags = getelementptr inbounds i32, i32* %42, i64 2 | |
%._core3._countAndFlags._value = bitcast i32* %._core3._countAndFlags to i64* | |
store i64 %46, i64* %._core3._countAndFlags._value, align 8 | |
%._core3._owner = getelementptr inbounds i32, i32* %42, i64 4 | |
%49 = bitcast i32* %._core3._owner to i64* | |
store i64 %47, i64* %49, align 8 | |
%50 = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5 | |
%51 = getelementptr inbounds %TSS, %TSS* %4, i64 0, i32 0, i32 0, i32 0, i64 0 | |
call void @llvm.lifetime.start(i64 24, i8* nonnull %51) | |
%52 = bitcast %TSS* %4 to i64* | |
store i64 ptrtoint ([1 x i8]* @2 to i64), i64* %52, align 8 | |
%._core4._countAndFlags._value = getelementptr inbounds %TSS, %TSS* %4, i64 0, i32 0, i32 1, i32 0 | |
%53 = bitcast i64* %._core4._countAndFlags._value to i8* | |
call void @llvm.memset.p0i8.i64(i8* %53, i8 0, i64 16, i32 8, i1 false) | |
%54 = call swiftcc { i64, i64, i64 } @_T0s27_toStringReadOnlyStreamableSSxs010TextOutputE0RzlFTfq4g_nSS_Tg5Tf4n_g(%TSS* noalias nocapture nonnull dereferenceable(24) %4) | |
%55 = extractvalue { i64, i64, i64 } %54, 0 | |
%56 = extractvalue { i64, i64, i64 } %54, 1 | |
%57 = extractvalue { i64, i64, i64 } %54, 2 | |
call void @llvm.lifetime.end(i64 24, i8* nonnull %51) | |
%58 = bitcast %swift.refcounted* %50 to i64* | |
store i64 %55, i64* %58, align 8 | |
%._core5._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 5, i32 1 | |
%._core5._countAndFlags._value = bitcast i32* %._core5._countAndFlags to i64* | |
store i64 %56, i64* %._core5._countAndFlags._value, align 8 | |
%._core5._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %reference.new, i64 6 | |
%59 = bitcast %swift.refcounted* %._core5._owner to i64* | |
store i64 %57, i64* %59, align 8 | |
%60 = inttoptr i64 %39 to %objc_object* | |
%61 = inttoptr i64 %57 to %objc_object* | |
call void @swift_unknownRetain(%objc_object* %61) #9 | |
call void @swift_unknownRetain(%objc_object* %60) #9 | |
%62 = call swiftcc { i64, i64, i64 } @_T0S2SSaySSG19stringInterpolationd_tcfCTfq4nd_n(%swift.bridge* %31) | |
%63 = extractvalue { i64, i64, i64 } %62, 0 | |
%64 = extractvalue { i64, i64, i64 } %62, 1 | |
%65 = extractvalue { i64, i64, i64 } %62, 2 | |
%66 = bitcast %swift.refcounted* %reference.new to i8* | |
call void @llvm.lifetime.end(i64 -1, i8* %66) | |
%67 = bitcast %swift.refcounted* %21 to i64* | |
store i64 %63, i64* %67, align 8 | |
%._core6._countAndFlags = getelementptr inbounds %swift.refcounted, %swift.refcounted* %17, i64 2, i32 1 | |
%._core6._countAndFlags._value = bitcast i32* %._core6._countAndFlags to i64* | |
store i64 %64, i64* %._core6._countAndFlags._value, align 8 | |
%._core6._owner = getelementptr inbounds %swift.refcounted, %swift.refcounted* %17, i64 3 | |
%68 = bitcast %swift.refcounted* %._core6._owner to i64* | |
store i64 %65, i64* %68, align 8 | |
%69 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() | |
%70 = extractvalue { i64, i64, i64 } %69, 0 | |
%71 = extractvalue { i64, i64, i64 } %69, 1 | |
%72 = extractvalue { i64, i64, i64 } %69, 2 | |
%73 = call swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() | |
%74 = extractvalue { i64, i64, i64 } %73, 0 | |
%75 = extractvalue { i64, i64, i64 } %73, 1 | |
%76 = extractvalue { i64, i64, i64 } %73, 2 | |
call swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge* %20, i64 %70, i64 %71, i64 %72, i64 %74, i64 %75, i64 %76) | |
ret void | |
; <label>:77: ; preds = %77, %entry | |
%78 = phi double [ 0.000000e+00, %entry ], [ %84, %77 ] | |
%79 = phi i64 [ 0, %entry ], [ %80, %77 ] | |
%80 = add nuw nsw i64 %79, 1 | |
%81 = tail call swiftcc double @_T010Foundation4DateVACycfC() | |
tail call void @swift_rt_swift_retain(%swift.refcounted* %1) #9 | |
tail call swiftcc void %5(%swift.refcounted* swiftself %1) | |
%82 = tail call swiftcc double @_T010Foundation4DateVACycfC() | |
%83 = tail call swiftcc double @_T010Foundation4DateV17timeIntervalSinceSdACF(double %81, double %82) | |
%84 = fadd double %78, %83 | |
%85 = icmp eq i64 %80, 100000 | |
br i1 %85, label %6, label %77 | |
} | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden void @swift_rt_swift_release(%swift.refcounted*) local_unnamed_addr #3 { | |
entry: | |
%load = load void (%swift.refcounted*)*, void (%swift.refcounted*)** @_swift_release, align 8 | |
tail call void %load(%swift.refcounted* %0) #9 | |
ret void | |
} | |
; Function Attrs: noinline | |
declare swiftcc void @_T0s5printySayypGd_SS9separatorSS10terminatortF(%swift.bridge*, i64, i64, i64, i64, i64, i64) local_unnamed_addr #1 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.start(i64, i8* nocapture) #4 | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1, %swift.type*, i64, %swift.protocol**) local_unnamed_addr #3 { | |
entry: | |
%load = load %swift.type* (i1, %swift.type*, i64, %swift.protocol**)*, %swift.type* (i1, %swift.type*, i64, %swift.protocol**)** @_swift_getExistentialTypeMetadata, align 8 | |
%4 = tail call %swift.type* %load(i1 %0, %swift.type* %1, i64 %2, %swift.protocol** %3) #9 | |
ret %swift.type* %4 | |
} | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.lifetime.end(i64, i8* nocapture) #4 | |
declare %swift.type* @_T0s23_ContiguousArrayStorageCMa(%swift.type*) local_unnamed_addr #0 | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden %swift.refcounted* @swift_rt_swift_allocObject(%swift.type*, i64, i64) local_unnamed_addr #3 { | |
entry: | |
%load = load %swift.refcounted* (%swift.type*, i64, i64)*, %swift.refcounted* (%swift.type*, i64, i64)** @_swift_allocObject, align 8 | |
%3 = tail call %swift.refcounted* %load(%swift.type* %0, i64 %1, i64 %2) #9 | |
ret %swift.refcounted* %3 | |
} | |
; Function Attrs: noinline | |
declare swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA0_() local_unnamed_addr #1 | |
; Function Attrs: noinline | |
declare swiftcc { i64, i64, i64 } @_T0s5printySayypGd_SS9separatorSS10terminatortFfA1_() local_unnamed_addr #1 | |
declare swiftcc double @_T010Foundation4DateVACycfC() local_unnamed_addr #0 | |
declare swiftcc double @_T010Foundation4DateV17timeIntervalSinceSdACF(double, double) local_unnamed_addr #0 | |
; Function Attrs: nounwind readnone | |
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #5 | |
; Function Attrs: nounwind readnone | |
declare { i64, i1 } @llvm.smul.with.overflow.i64(i64, i64) #5 | |
; Function Attrs: noreturn nounwind | |
declare void @llvm.trap() #6 | |
declare %swift.refcounted* @swift_initStackObject(%swift.type*, %swift.refcounted*) local_unnamed_addr | |
declare void @swift_unknownRetain(%objc_object*) local_unnamed_addr | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden void @swift_rt_swift_retain(%swift.refcounted*) local_unnamed_addr #3 { | |
entry: | |
%load = load void (%swift.refcounted*)*, void (%swift.refcounted*)** @_swift_retain, align 8 | |
tail call void %load(%swift.refcounted* %0) #9 | |
ret void | |
} | |
; Function Attrs: noinline nounwind | |
define linkonce_odr hidden i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted*) local_unnamed_addr #3 { | |
entry: | |
%load = load i1 (%swift.refcounted*)*, i1 (%swift.refcounted*)** @_swift_isUniquelyReferenced_nonNull_native, align 8 | |
%1 = tail call i1 %load(%swift.refcounted* %0) #9 | |
ret i1 %1 | |
} | |
; Function Attrs: nounwind readnone | |
declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #5 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #4 | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #4 | |
; Function Attrs: nounwind readnone | |
declare i64 @_swift_stdlib_malloc_size(i8*) local_unnamed_addr #7 | |
declare %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge*) local_unnamed_addr | |
declare void @swift_unknownRelease(%objc_object*) local_unnamed_addr | |
declare void @swift_bridgeObjectRelease(%swift.bridge*) local_unnamed_addr | |
; Function Attrs: noinline | |
declare swiftcc void @_T0s19_cocoaStringReadAllyyXl_Spys6UInt16VGtFTfq4gn_n(%objc_object*, i8*) local_unnamed_addr #1 | |
declare i1 @swift_isUniquelyReferencedNonObjC(%objc_object*) local_unnamed_addr | |
; Function Attrs: argmemonly nounwind | |
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #4 | |
attributes #0 = { "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="core2" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+ssse3,+x87" } | |
attributes #1 = { noinline "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="core2" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+ssse3,+x87" } | |
attributes #2 = { noinline norecurse "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "target-cpu"="core2" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+ssse3,+x87" } | |
attributes #3 = { noinline nounwind } | |
attributes #4 = { argmemonly nounwind } | |
attributes #5 = { nounwind readnone } | |
attributes #6 = { noreturn nounwind } | |
attributes #7 = { nounwind readnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="core2" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+ssse3,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
attributes #8 = { noinline } | |
attributes #9 = { nounwind } | |
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !28, !29} | |
!0 = !{i32 1, !"Objective-C Version", i32 2} | |
!1 = !{i32 1, !"Objective-C Image Info Version", i32 0} | |
!2 = !{i32 1, !"Objective-C Image Info Section", !"__DATA, __objc_imageinfo, regular, no_dead_strip"} | |
!3 = !{i32 4, !"Objective-C Garbage Collection", i32 1280} | |
!4 = !{i32 1, !"Objective-C Class Properties", i32 64} | |
!5 = !{i32 6, !"Linker Options", !6} | |
!6 = !{!7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27} | |
!7 = !{!"-lswiftCore"} | |
!8 = !{!"-lswiftFoundation"} | |
!9 = !{!"-framework", !"Foundation"} | |
!10 = !{!"-lswiftObjectiveC"} | |
!11 = !{!"-lswiftDarwin"} | |
!12 = !{!"-framework", !"CoreServices"} | |
!13 = !{!"-lswiftIOKit"} | |
!14 = !{!"-framework", !"IOKit"} | |
!15 = !{!"-lswiftDispatch"} | |
!16 = !{!"-lswiftCoreFoundation"} | |
!17 = !{!"-framework", !"CoreFoundation"} | |
!18 = !{!"-framework", !"DiskArbitration"} | |
!19 = !{!"-framework", !"CFNetwork"} | |
!20 = !{!"-framework", !"Security"} | |
!21 = !{!"-lswiftCoreGraphics"} | |
!22 = !{!"-framework", !"CoreGraphics"} | |
!23 = !{!"-framework", !"ApplicationServices"} | |
!24 = !{!"-framework", !"ColorSync"} | |
!25 = !{!"-framework", !"CoreText"} | |
!26 = !{!"-framework", !"ImageIO"} | |
!27 = !{!"-lobjc"} | |
!28 = !{i32 1, !"PIC Level", i32 2} | |
!29 = !{i32 1, !"Swift Version", i32 5} | |
!30 = !{!"branch_weights", i32 2000, i32 1} | |
!31 = !{i64 0, i64 9223372036854775807} | |
!32 = !{!"branch_weights", i32 1, i32 2000} | |
!33 = !{!34} | |
!34 = distinct !{!34, !35, !"_T0s8SequencePsE8containsS2b7ElementQzKc5where_tKFSRys6UInt16VG_Tgq505_T0s6E37VSbs5Error_pIxydzo_ABSbsAC_pIxidzo_TRAHSbs0H0_pIxydzo_Tfq1cn_nTfq4ng_n: argument 0"} | |
!35 = distinct !{!35, !"_T0s8SequencePsE8containsS2b7ElementQzKc5where_tKFSRys6UInt16VG_Tgq505_T0s6E37VSbs5Error_pIxydzo_ABSbsAC_pIxidzo_TRAHSbs0H0_pIxydzo_Tfq1cn_nTfq4ng_n"} | |
!36 = !{!37} | |
!37 = distinct !{!37, !38} | |
!38 = distinct !{!38, !"LVerDomain"} | |
!39 = !{!40} | |
!40 = distinct !{!40, !38} | |
!41 = distinct !{!41, !42, !43} | |
!42 = !{!"llvm.loop.vectorize.width", i32 1} | |
!43 = !{!"llvm.loop.interleave.count", i32 1} | |
!44 = distinct !{!44, !42, !43} |
testForLoop
x1000: 0.485580742359161
333283334999
testMapReduce
x1000: 1.91254037618637
333283334999
testLazyMapReduce
x1000: 0.489482939243317
333283334999
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
_T01a17testLazyMapReduceyyF
30 -> 122 -> 128 -> 133 -> 140 -> 145 -> 35 -> 41 -> 46 -> 140