Coder Social home page Coder Social logo

Comments (6)

gbaraldi avatar gbaraldi commented on June 20, 2024 2

I'm running creduce on it ;)

from julia.

gbaraldi avatar gbaraldi commented on June 20, 2024 1

Creduce didn't do it right, but looking at it. We put some garbage in the GC roots.
The function is +(FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1}, FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1})

; ModuleID = '+'
source_filename = "+"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@"+Main.FixedSizeArrays.FixedSizeArray#943" = private unnamed_addr constant ptr @"+Main.FixedSizeArrays.FixedSizeArray#943.jit", !julia.constgv !0
@jl_undefref_exception = external constant ptr
@jl_nothing = external constant ptr

@"+Main.Base.LazyString#977.jit" = private alias ptr, inttoptr (i64 140293568847376 to ptr)
@"+Core.Tuple#978.jit" = private alias ptr, inttoptr (i64 140293576064224 to ptr)
@"+Main.Base.DimensionMismatch#980.jit" = private alias ptr, inttoptr (i64 140293584366464 to ptr)
@"+Core.ArgumentError#955.jit" = private alias ptr, inttoptr (i64 140293625686976 to ptr)
@"jl_global#974.jit" = private alias ptr, inttoptr (i64 140293633272480 to ptr)
@"jl_global#973.jit" = private alias ptr, inttoptr (i64 140293633272528 to ptr)
@"+Main.FixedSizeArrays.FixedSizeArray#943.jit" = private alias ptr, inttoptr (i64 140293723992016 to ptr)
@"+Core.GenericMemoryRef#966.jit" = private alias ptr, inttoptr (i64 140293725504592 to ptr)
@"+Core.GenericMemory#958.jit" = private alias ptr, inttoptr (i64 140293725504720 to ptr)
@"jl_global#953.jit" = private alias ptr, inttoptr (i64 140293745993680 to ptr)
@"jl_global#956.jit" = private alias ptr, inttoptr (i64 140293745993872 to ptr)

; Function Signature: +(FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1}, FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1})
; Function Attrs: sspstrong
define swiftcc void @"julia_+_941"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) align 8 dereferenceable(16) %sret_return, ptr noalias nocapture noundef nonnull align 8 dereferenceable(8) %return_roots, ptr nonnull swiftself %pgcstack, ptr nocapture noundef nonnull readonly align 8 dereferenceable(16) %"A::FixedSizeArray", ptr nocapture noundef nonnull readonly align 8 dereferenceable(16) %"B::FixedSizeArray") #0 !dbg !7 {
top:
  %gcframe1 = alloca [23 x ptr], align 16
  call void @llvm.memset.p0.i64(ptr align 16 %gcframe1, i8 0, i64 184, i1 true)
  %gc_slot_addr16 = getelementptr inbounds ptr, ptr %gcframe1, i64 18
  %gc_slot_addr15 = getelementptr inbounds ptr, ptr %gcframe1, i64 17
  %gc_slot_addr14 = getelementptr inbounds ptr, ptr %gcframe1, i64 16
  %gc_slot_addr13 = getelementptr inbounds ptr, ptr %gcframe1, i64 15
  %gc_slot_addr12 = getelementptr inbounds ptr, ptr %gcframe1, i64 14
  %gc_slot_addr11 = getelementptr inbounds ptr, ptr %gcframe1, i64 13
  %gc_slot_addr10 = getelementptr inbounds ptr, ptr %gcframe1, i64 12
  %gc_slot_addr9 = getelementptr inbounds ptr, ptr %gcframe1, i64 11
  %gc_slot_addr8 = getelementptr inbounds ptr, ptr %gcframe1, i64 10
  %gc_slot_addr7 = getelementptr inbounds ptr, ptr %gcframe1, i64 9
  %gc_slot_addr6 = getelementptr inbounds ptr, ptr %gcframe1, i64 8
  %gc_slot_addr5 = getelementptr inbounds ptr, ptr %gcframe1, i64 7
  %gc_slot_addr4 = getelementptr inbounds ptr, ptr %gcframe1, i64 6
  %gc_slot_addr3 = getelementptr inbounds ptr, ptr %gcframe1, i64 5
  %0 = getelementptr inbounds ptr, ptr %gcframe1, i64 4
  %1 = getelementptr inbounds ptr, ptr %gcframe1, i64 3
  %2 = getelementptr inbounds ptr, ptr %gcframe1, i64 2
  %"new::Tuple" = alloca [1 x [1 x i64]], align 8
  %"new::Tuple6" = alloca [1 x [1 x i64]], align 8
  %3 = alloca { ptr, [1 x i64] }, align 8
  %4 = alloca { ptr, [1 x i64] }, align 8
  %5 = alloca { ptr, [1 x i64] }, align 8
  %6 = alloca { ptr, [1 x i64] }, align 8
  %7 = alloca { ptr, [1 x i64] }, align 8
  %8 = alloca { ptr, [1 x i64] }, align 8
  %9 = alloca { ptr, [1 x i64] }, align 8
  store i64 84, ptr %gcframe1, align 16, !tbaa !25
  %frame.prev = getelementptr inbounds ptr, ptr %gcframe1, i64 1
  %task.gcstack = load ptr, ptr %pgcstack, align 8
  store ptr %task.gcstack, ptr %frame.prev, align 8, !tbaa !25
  store ptr %gcframe1, ptr %pgcstack, align 8
  call void @llvm.dbg.declare(metadata ptr %"A::FixedSizeArray", metadata !23, metadata !DIExpression()), !dbg !29
  call void @llvm.dbg.declare(metadata ptr %"B::FixedSizeArray", metadata !24, metadata !DIExpression()), !dbg !29
  %ptls_field = getelementptr inbounds ptr, ptr %pgcstack, i64 2
  %ptls_load = load ptr, ptr %ptls_field, align 8, !tbaa !25
  %10 = getelementptr inbounds ptr, ptr %ptls_load, i64 2
  %safepoint = load ptr, ptr %10, align 8, !tbaa !30
  fence syncscope("singlethread") seq_cst
  %11 = load volatile i64, ptr %safepoint, align 8, !dbg !29
  fence syncscope("singlethread") seq_cst
  %"A::FixedSizeArray.size_ptr" = getelementptr inbounds { ptr, [1 x i64] }, ptr %"A::FixedSizeArray", i64 0, i32 1, !dbg !32
  %12 = load i64, ptr %"A::FixedSizeArray.size_ptr", align 8, !dbg !43, !tbaa !49, !alias.scope !50, !noalias !54
  store i64 %12, ptr %"new::Tuple", align 8, !dbg !43, !tbaa !49, !alias.scope !50, !noalias !54
  %"B::FixedSizeArray.size_ptr" = getelementptr inbounds { ptr, [1 x i64] }, ptr %"B::FixedSizeArray", i64 0, i32 1, !dbg !32
  %13 = load i64, ptr %"B::FixedSizeArray.size_ptr", align 8, !dbg !43, !tbaa !49, !alias.scope !50, !noalias !54
  store i64 %13, ptr %"new::Tuple6", align 8, !dbg !43, !tbaa !49, !alias.scope !50, !noalias !54
  %.not = icmp eq i64 %12, %13, !dbg !58
  br i1 %.not, label %L47, label %L14, !dbg !66

L14:                                              ; preds = %top
  call swiftcc void @j_throw_promote_shape_mismatch_949(ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %"new::Tuple", ptr nocapture nonnull readonly %"new::Tuple6", i64 signext 1) #7, !dbg !66
  unreachable, !dbg !66

L47:                                              ; preds = %top
  %14 = icmp sgt i64 %12, -1, !dbg !67
  br i1 %14, label %L81, label %L78, !dbg !97

L78:                                              ; preds = %L47
  %15 = call swiftcc [1 x ptr] @j_ArgumentError_952(ptr nonnull swiftself %pgcstack, ptr nonnull @"jl_global#953.jit"), !dbg !98
  %gc_slot_addr_17 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  %16 = extractvalue [1 x ptr] %15, 0, !dbg !98
  store ptr %16, ptr %gc_slot_addr_17, align 8
  %ptls_load986 = load ptr, ptr %ptls_field, align 8, !dbg !98, !tbaa !25
  %"box::ArgumentError" = call noalias nonnull align 8 dereferenceable(16) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load986, i32 752, i32 16, i64 140293625686976) #15, !dbg !98
  %"box::ArgumentError.tag_addr" = getelementptr inbounds i64, ptr %"box::ArgumentError", i64 -1, !dbg !98
  store atomic i64 140293625686976, ptr %"box::ArgumentError.tag_addr" unordered, align 8, !dbg !98, !tbaa !99
  store ptr %16, ptr %"box::ArgumentError", align 8, !dbg !98, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_throw(ptr nonnull %"box::ArgumentError"), !dbg !98
  unreachable, !dbg !98

L81:                                              ; preds = %L47
  %.not362.not = icmp eq i64 %12, 9223372036854775807, !dbg !107
  br i1 %.not362.not, label %L82, label %L86, !dbg !113

L82:                                              ; preds = %L81
  %17 = call swiftcc [1 x ptr] @j_ArgumentError_952(ptr nonnull swiftself %pgcstack, ptr nonnull @"jl_global#956.jit"), !dbg !114
  %gc_slot_addr_17939 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  %18 = extractvalue [1 x ptr] %17, 0, !dbg !114
  store ptr %18, ptr %gc_slot_addr_17939, align 8
  %ptls_load989 = load ptr, ptr %ptls_field, align 8, !dbg !114, !tbaa !25
  %"box::ArgumentError34" = call noalias nonnull align 8 dereferenceable(16) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load989, i32 752, i32 16, i64 140293625686976) #15, !dbg !114
  %"box::ArgumentError34.tag_addr" = getelementptr inbounds i64, ptr %"box::ArgumentError34", i64 -1, !dbg !114
  store atomic i64 140293625686976, ptr %"box::ArgumentError34.tag_addr" unordered, align 8, !dbg !114, !tbaa !99
  store ptr %18, ptr %"box::ArgumentError34", align 8, !dbg !114, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_throw(ptr nonnull %"box::ArgumentError34"), !dbg !114
  unreachable, !dbg !114

L86:                                              ; preds = %L81
  %.not363 = icmp eq i64 %12, 0, !dbg !115
  br i1 %.not363, label %L88, label %L107.thread, !dbg !115

L88:                                              ; preds = %L86
  %.instance = load atomic ptr, ptr getelementptr inbounds (ptr, ptr @"+Core.GenericMemory#958.jit", i64 4) unordered, align 16, !dbg !118, !tbaa !30, !alias.scope !119, !noalias !120
  %.not364 = icmp eq ptr %.instance, null, !dbg !118
  br i1 %.not364, label %fail, label %L107, !dbg !118

L107:                                             ; preds = %L88
  %"A::FixedSizeArray.mem" = load atomic ptr, ptr %"A::FixedSizeArray" unordered, align 8, !dbg !121, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  br label %L133, !dbg !121

L107.thread:                                      ; preds = %L86
  %"Memory{FixedSizeArray}[]" = call ptr @jl_alloc_genericmemory(ptr nonnull @"+Core.GenericMemory#958.jit", i64 %12), !dbg !133
  %"A::FixedSizeArray.mem681" = load atomic ptr, ptr %"A::FixedSizeArray" unordered, align 8, !dbg !121, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  %.not662682 = icmp eq ptr %"Memory{FixedSizeArray}[]", %"A::FixedSizeArray.mem681", !dbg !121
  br i1 %.not662682, label %L133, label %L126, !dbg !121

L126:                                             ; preds = %L107.thread
  store ptr %"Memory{FixedSizeArray}[]", ptr %gc_slot_addr3, align 8
  store ptr %"Memory{FixedSizeArray}[]", ptr %8, align 8, !dbg !134
  %.fca.1.0.gep = getelementptr inbounds { ptr, [1 x i64] }, ptr %8, i64 0, i32 1, i64 0, !dbg !134
  store i64 %12, ptr %.fca.1.0.gep, align 8, !dbg !134
  %gc_slot_addr_17940 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %"Memory{FixedSizeArray}[]", ptr %gc_slot_addr_17940, align 8
  %object_id166 = call i64 @ijl_object_id_(i64 ptrtoint (ptr @"+Main.FixedSizeArrays.FixedSizeArray#943.jit" to i64), ptr nonnull %8), !dbg !134
  %object_id169 = call i64 @ijl_object_id_(i64 ptrtoint (ptr @"+Main.FixedSizeArrays.FixedSizeArray#943.jit" to i64), ptr nonnull %"A::FixedSizeArray"), !dbg !134
  %.not425 = icmp eq i64 %object_id166, %object_id169, !dbg !143
  br i1 %.not425, label %L133.thread, label %L126.L130_crit_edge, !dbg !141

L126.L130_crit_edge:                              ; preds = %L126
  %"A::FixedSizeArray.unbox329.unpack.pre" = load ptr, ptr %"A::FixedSizeArray", align 8
  %"A::FixedSizeArray.unbox329.unpack427.unpack.pre" = load i64, ptr %"A::FixedSizeArray.size_ptr", align 8
  br label %L133, !dbg !141

L133:                                             ; preds = %L107, %L126.L130_crit_edge, %L107.thread
  %19 = phi ptr [ %"Memory{FixedSizeArray}[]", %L107.thread ], [ %"Memory{FixedSizeArray}[]", %L126.L130_crit_edge ], [ %.instance, %L107 ]
  %"A::FixedSizeArray.mem693.pn" = phi ptr [ %"Memory{FixedSizeArray}[]", %L107.thread ], [ %"A::FixedSizeArray.unbox329.unpack.pre", %L126.L130_crit_edge ], [ %"A::FixedSizeArray.mem", %L107 ]
  %.pn836 = phi i64 [ %12, %L107.thread ], [ %"A::FixedSizeArray.unbox329.unpack427.unpack.pre", %L126.L130_crit_edge ], [ 0, %L107 ]
  %"A::FixedSizeArray.unbox.unpack370372.pn" = insertvalue [1 x i64] zeroinitializer, i64 %.pn836, 0
  %.pn = insertvalue { ptr, [1 x i64] } zeroinitializer, ptr %"A::FixedSizeArray.mem693.pn", 0
  %value_phi44 = insertvalue { ptr, [1 x i64] } %.pn, [1 x i64] %"A::FixedSizeArray.unbox.unpack370372.pn", 1
  %value_phi44.fr = freeze { ptr, [1 x i64] } %value_phi44, !dbg !147
  %value_phi44.size = extractvalue { ptr, [1 x i64] } %value_phi44.fr, 1, !dbg !147
  %value_phi44.size.fca.0.extract = extractvalue [1 x i64] %value_phi44.size, 0, !dbg !147
  %.not373 = icmp eq i64 %value_phi44.size.fca.0.extract, 1, !dbg !153
  %"B::FixedSizeArray.mem" = load atomic ptr, ptr %"B::FixedSizeArray" unordered, align 8, !dbg !159, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  %.not663 = icmp eq ptr %19, %"B::FixedSizeArray.mem", !dbg !159
  br i1 %.not663, label %L168, label %L145, !dbg !159

L133.thread:                                      ; preds = %L126
  call swiftcc void @j_unaliascopy_982(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %9, ptr noalias nocapture noundef nonnull %1, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %"A::FixedSizeArray"), !dbg !141
  %.unbox322.fca.0.load = load ptr, ptr %9, align 8
  %.unbox322.fca.0.insert = insertvalue { ptr, [1 x i64] } zeroinitializer, ptr %.unbox322.fca.0.load, 0
  %.unbox322.fca.1.0.gep = getelementptr inbounds { ptr, [1 x i64] }, ptr %9, i64 0, i32 1, i64 0
  %.unbox322.fca.1.0.load = load i64, ptr %.unbox322.fca.1.0.gep, align 8
  %.unbox322.fca.1.0.insert = insertvalue { ptr, [1 x i64] } %.unbox322.fca.0.insert, i64 %.unbox322.fca.1.0.load, 1, 0
  %value_phi44.fr701 = freeze { ptr, [1 x i64] } %.unbox322.fca.1.0.insert, !dbg !147
  %value_phi44.size702 = extractvalue { ptr, [1 x i64] } %value_phi44.fr701, 1, !dbg !147
  %value_phi44.size.fca.0.extract703 = extractvalue [1 x i64] %value_phi44.size702, 0, !dbg !147
  %.not373704 = icmp eq i64 %value_phi44.size.fca.0.extract703, 1, !dbg !153
  %"B::FixedSizeArray.mem705" = load atomic ptr, ptr %"B::FixedSizeArray" unordered, align 8, !dbg !159, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  %.not663706 = icmp eq ptr %"Memory{FixedSizeArray}[]", %"B::FixedSizeArray.mem705", !dbg !159
  br i1 %.not663706, label %L168, label %L161, !dbg !159

L145:                                             ; preds = %L133
  br i1 %.not363, label %L168, label %L161, !dbg !162

L161:                                             ; preds = %L145, %L133.thread
  %20 = phi ptr [ %19, %L145 ], [ %"Memory{FixedSizeArray}[]", %L133.thread ]
  %value_phi44.fr711724 = phi { ptr, [1 x i64] } [ %value_phi44.fr, %L145 ], [ %value_phi44.fr701, %L133.thread ]
  %.not373714722 = phi i1 [ %.not373, %L145 ], [ %.not373704, %L133.thread ]
  store ptr %20, ptr %gc_slot_addr4, align 16
  store ptr %20, ptr %6, align 8, !dbg !164
  %.fca.1.0.gep341 = getelementptr inbounds { ptr, [1 x i64] }, ptr %6, i64 0, i32 1, i64 0, !dbg !164
  store i64 %12, ptr %.fca.1.0.gep341, align 8, !dbg !164
  %gc_slot_addr_19 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %20, ptr %gc_slot_addr_19, align 8
  %gc_slot_addr_18 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  %21 = extractvalue { ptr, [1 x i64] } %value_phi44.fr711724, 0, !dbg !164
  store ptr %21, ptr %gc_slot_addr_18, align 16
  %gc_slot_addr_17941 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %20, ptr %gc_slot_addr_17941, align 8
  %object_id = call i64 @ijl_object_id_(i64 ptrtoint (ptr @"+Main.FixedSizeArrays.FixedSizeArray#943.jit" to i64), ptr nonnull %6), !dbg !164
  %object_id151 = call i64 @ijl_object_id_(i64 ptrtoint (ptr @"+Main.FixedSizeArrays.FixedSizeArray#943.jit" to i64), ptr nonnull %"B::FixedSizeArray"), !dbg !164
  %.not418.not = icmp eq i64 %object_id, %object_id151, !dbg !166
  br i1 %.not418.not, label %L168.thread, label %L161.L165_crit_edge, !dbg !163

L161.L165_crit_edge:                              ; preds = %L161
  %"B::FixedSizeArray.unbox315.unpack.pre" = load ptr, ptr %"B::FixedSizeArray", align 8
  br label %L168, !dbg !163

L168.thread:                                      ; preds = %L161
  call swiftcc void @j_unaliascopy_982(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %7, ptr noalias nocapture noundef nonnull %0, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %"B::FixedSizeArray"), !dbg !163
  %.unbox308.fca.0.load = load ptr, ptr %7, align 8
  %.unbox308.fca.0.insert = insertvalue { ptr, [1 x i64] } zeroinitializer, ptr %.unbox308.fca.0.load, 0
  %.unbox308.fca.1.0.gep = getelementptr inbounds { ptr, [1 x i64] }, ptr %7, i64 0, i32 1, i64 0
  %.unbox308.fca.1.0.load = load i64, ptr %.unbox308.fca.1.0.gep, align 8
  %.unbox308.fca.1.0.insert = insertvalue { ptr, [1 x i64] } %.unbox308.fca.0.insert, i64 %.unbox308.fca.1.0.load, 1, 0
  %value_phi57.fr732 = freeze { ptr, [1 x i64] } %.unbox308.fca.1.0.insert, !dbg !169
  br label %L188.lr.ph, !dbg !173

L168:                                             ; preds = %L161.L165_crit_edge, %L145, %L133.thread, %L133
  %.not373713 = phi i1 [ %.not373704, %L133.thread ], [ %.not373, %L133 ], [ %.not373714722, %L161.L165_crit_edge ], [ %.not373, %L145 ]
  %value_phi44.fr710 = phi { ptr, [1 x i64] } [ %value_phi44.fr701, %L133.thread ], [ %value_phi44.fr, %L133 ], [ %value_phi44.fr711724, %L161.L165_crit_edge ], [ %value_phi44.fr, %L145 ]
  %22 = phi ptr [ %"Memory{FixedSizeArray}[]", %L133.thread ], [ %19, %L133 ], [ %20, %L161.L165_crit_edge ], [ %19, %L145 ]
  %"B::FixedSizeArray.mem716.pn" = phi ptr [ %"Memory{FixedSizeArray}[]", %L133.thread ], [ %19, %L133 ], [ %"B::FixedSizeArray.unbox315.unpack.pre", %L161.L165_crit_edge ], [ %"B::FixedSizeArray.mem", %L145 ]
  br i1 %.not363, label %L249, label %L168.L188.lr.ph_crit_edge, !dbg !173

L168.L188.lr.ph_crit_edge:                        ; preds = %L168
  %.pn837 = insertvalue { ptr, [1 x i64] } zeroinitializer, ptr %"B::FixedSizeArray.mem716.pn", 0
  %"B::FixedSizeArray.unbox.unpack378.unpack.pn" = load i64, ptr %"B::FixedSizeArray.size_ptr", align 8
  %"B::FixedSizeArray.unbox.unpack378380.pn" = insertvalue [1 x i64] zeroinitializer, i64 %"B::FixedSizeArray.unbox.unpack378.unpack.pn", 0
  %value_phi57 = insertvalue { ptr, [1 x i64] } %.pn837, [1 x i64] %"B::FixedSizeArray.unbox.unpack378380.pn", 1
  %value_phi57.fr = freeze { ptr, [1 x i64] } %value_phi57, !dbg !169
  %.pre = extractvalue { ptr, [1 x i64] } %value_phi44.fr710, 0
  br label %L188.lr.ph, !dbg !173

L188.lr.ph:                                       ; preds = %L168.L188.lr.ph_crit_edge, %L168.thread
  %value_phi44.mem.pre-phi = phi ptr [ %.pre, %L168.L188.lr.ph_crit_edge ], [ %21, %L168.thread ]
  %value_phi57.fr739 = phi { ptr, [1 x i64] } [ %value_phi57.fr, %L168.L188.lr.ph_crit_edge ], [ %value_phi57.fr732, %L168.thread ]
  %gclift938 = phi ptr [ %22, %L168.L188.lr.ph_crit_edge ], [ %20, %L168.thread ]
  %.not373713736 = phi i1 [ %.not373713, %L168.L188.lr.ph_crit_edge ], [ %.not373714722, %L168.thread ]
  %value_phi57.size733.pn = extractvalue { ptr, [1 x i64] } %value_phi57.fr739, 1, !dbg !169
  %.not381740.in = extractvalue [1 x i64] %value_phi57.size733.pn, 0, !dbg !169
  %.not381740 = icmp eq i64 %.not381740.in, 1, !dbg !177
  %.data_ptr = getelementptr inbounds { i64, ptr }, ptr %value_phi44.mem.pre-phi, i64 0, i32 1
  %23 = load ptr, ptr %.data_ptr, align 8, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %24 = load i64, ptr %value_phi44.mem.pre-phi, align 8, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %25 = shl nuw nsw i64 %24, 1
  %26 = shl nuw nsw i64 %24, 4
  %value_phi57.mem = extractvalue { ptr, [1 x i64] } %value_phi57.fr739, 0
  %.data_ptr87 = getelementptr inbounds { i64, ptr }, ptr %value_phi57.mem, i64 0, i32 1
  %.fca.1.0.gep349 = getelementptr inbounds { ptr, [1 x i64] }, ptr %4, i64 0, i32 1, i64 0
  %.fca.1.0.gep345 = getelementptr inbounds { ptr, [1 x i64] }, ptr %5, i64 0, i32 1, i64 0
  %.data_ptr101 = getelementptr inbounds { i64, ptr }, ptr %gclift938, i64 0, i32 1
  %27 = getelementptr inbounds ptr, ptr %gclift938, i64 2
  %.unbox.fca.1.0.gep = getelementptr inbounds { ptr, [1 x i64] }, ptr %3, i64 0, i32 1, i64 0
  br i1 %.not373713736, label %L188.lr.ph.split.us, label %L188.lr.ph.split, !dbg !187

L188.lr.ph.split.us:                              ; preds = %L188.lr.ph
  %.not675 = icmp eq i64 %24, 0
  %.elt386.us = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 0, i32 1
  br i1 %.not675, label %oob, label %L188.lr.ph.split.us.split.us, !dbg !202

L188.lr.ph.split.us.split.us:                     ; preds = %L188.lr.ph.split.us
  br i1 %.not381740, label %L188.us.us.us, label %L188.us.us, !dbg !206

L188.us.us.us:                                    ; preds = %L188.lr.ph.split.us.split.us, %41
  %value_phi67481.us.us.us = phi i64 [ %28, %41 ], [ 0, %L188.lr.ph.split.us.split.us ]
  %28 = add nuw nsw i64 %value_phi67481.us.us.us, 1, !dbg !210
  %.unpack.us.us.us = load ptr, ptr %23, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.unpack387.unpack.us.us.us = load i64, ptr %.elt386.us, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389.us.us.us = icmp eq ptr %.unpack.us.us.us, null, !dbg !202
  br i1 %.not389.us.us.us, label %fail81, label %pass82.us.us.us, !dbg !202

pass82.us.us.us:                                  ; preds = %L188.us.us.us
  %29 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %30 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %.not678 = icmp eq i64 %30, 0, !dbg !217
  br i1 %.not678, label %oob90, label %idxend95.us.us.us, !dbg !217

idxend95.us.us.us:                                ; preds = %pass82.us.us.us
  %.unpack393.us.us.us = load ptr, ptr %29, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397.us.us.us = icmp eq ptr %.unpack393.us.us.us, null, !dbg !217
  br i1 %.not397.us.us.us, label %fail98, label %pass99.us.us.us, !dbg !217

pass99.us.us.us:                                  ; preds = %idxend95.us.us.us
  %.elt394.us.us.us = getelementptr inbounds { ptr, [1 x i64] }, ptr %29, i64 0, i32 1, !dbg !217
  %.unpack395.unpack.us.us.us = load i64, ptr %.elt394.us.us.us, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack.us.us.us, ptr %gc_slot_addr6, align 16
  store ptr %.unpack.us.us.us, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack.us.us.us, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393.us.us.us, ptr %gc_slot_addr5, align 8
  store ptr %.unpack393.us.us.us, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack.us.us.us, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20, align 16
  %gc_slot_addr_19942 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19942, align 8
  %gc_slot_addr_18943 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18943, align 16
  %gc_slot_addr_17944 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17944, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %31 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %32 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %33 = shl nuw nsw i64 %32, 1, !dbg !222
  %34 = add nuw i64 %32, %value_phi67481.us.us.us, !dbg !222
  %.not398.us.us.us = icmp ult i64 %34, %33, !dbg !222
  %35 = icmp ult i64 %value_phi67481.us.us.us, %32, !dbg !222
  %36 = and i1 %.not398.us.us.us, %35, !dbg !222
  br i1 %36, label %load.us.us.us, label %oob104, !dbg !222

load.us.us.us:                                    ; preds = %pass99.us.us.us
  %37 = getelementptr inbounds { ptr, [1 x i64] }, ptr %31, i64 %value_phi67481.us.us.us, !dbg !227
  %.not401.us.us.us = icmp eq ptr %27, %31, !dbg !227
  br i1 %.not401.us.us.us, label %guard_exit.us.us.us, label %guard_pass.us.us.us, !dbg !227

guard_pass.us.us.us:                              ; preds = %load.us.us.us
  %38 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %39 = icmp eq ptr %38, null, !dbg !227
  %40 = select i1 %39, ptr %gclift938, ptr %38, !dbg !227
  br label %guard_exit.us.us.us, !dbg !227

guard_exit.us.us.us:                              ; preds = %guard_pass.us.us.us, %load.us.us.us
  %guard_res.us.us.us = phi ptr [ %gclift938, %load.us.us.us ], [ %40, %guard_pass.us.us.us ], !dbg !227
  %.unbox.fca.0.load.us.us.us = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load.us.us.us = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load.us.us.us, ptr %37, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402.us.us.us = getelementptr inbounds { ptr, [1 x i64] }, ptr %31, i64 %value_phi67481.us.us.us, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load.us.us.us, ptr %.repack402.us.us.us, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.us.us.us.tag_addr = getelementptr inbounds i64, ptr %guard_res.us.us.us, i64 -1, !dbg !227
  %guard_res.us.us.us.tag = load atomic i64, ptr %guard_res.us.us.us.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits = and i64 %guard_res.us.us.us.tag, 3, !dbg !227
  %parent_old_marked = icmp eq i64 %parent_bits, 3, !dbg !227
  br i1 %parent_old_marked, label %may_trigger_wb, label %41, !dbg !227

may_trigger_wb:                                   ; preds = %guard_exit.us.us.us
  %.unbox.fca.0.load.us.us.us.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load.us.us.us, i64 -1, !dbg !227
  %.unbox.fca.0.load.us.us.us.tag = load atomic i64, ptr %.unbox.fca.0.load.us.us.us.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit = and i64 %.unbox.fca.0.load.us.us.us.tag, 1, !dbg !227
  %child_not_marked = icmp eq i64 %child_bit, 0, !dbg !227
  br i1 %child_not_marked, label %trigger_wb, label %41, !dbg !227, !prof !233

trigger_wb:                                       ; preds = %may_trigger_wb
  call void @ijl_gc_queue_root(ptr %guard_res.us.us.us), !dbg !227
  br label %41, !dbg !227

41:                                               ; preds = %may_trigger_wb, %trigger_wb, %guard_exit.us.us.us
  %exitcond.not = icmp eq i64 %28, %12, !dbg !234
  br i1 %exitcond.not, label %L249, label %L188.us.us.us, !dbg !235, !llvm.loop !236

L188.us.us:                                       ; preds = %L188.lr.ph.split.us.split.us, %60
  %value_phi67481.us.us = phi i64 [ %42, %60 ], [ 0, %L188.lr.ph.split.us.split.us ]
  %42 = add nuw nsw i64 %value_phi67481.us.us, 1, !dbg !210
  %.unpack.us.us = load ptr, ptr %23, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.unpack387.unpack.us.us = load i64, ptr %.elt386.us, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389.us.us = icmp eq ptr %.unpack.us.us, null, !dbg !202
  br i1 %.not389.us.us, label %fail81, label %pass82.us.us, !dbg !202

pass82.us.us:                                     ; preds = %L188.us.us
  %43 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %44 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %45 = shl nuw nsw i64 %44, 1, !dbg !217
  %46 = add nuw i64 %44, %value_phi67481.us.us, !dbg !217
  %.not390.us.us = icmp ult i64 %46, %45, !dbg !217
  %47 = icmp ult i64 %value_phi67481.us.us, %44, !dbg !217
  %48 = and i1 %.not390.us.us, %47, !dbg !217
  br i1 %48, label %idxend95.us.us, label %oob90, !dbg !217

idxend95.us.us:                                   ; preds = %pass82.us.us
  %49 = getelementptr inbounds { ptr, [1 x i64] }, ptr %43, i64 %value_phi67481.us.us, !dbg !217
  %.unpack393.us.us = load ptr, ptr %49, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397.us.us = icmp eq ptr %.unpack393.us.us, null, !dbg !217
  br i1 %.not397.us.us, label %fail98, label %pass99.us.us, !dbg !217

pass99.us.us:                                     ; preds = %idxend95.us.us
  %.elt394.us.us = getelementptr inbounds { ptr, [1 x i64] }, ptr %43, i64 %value_phi67481.us.us, i32 1, !dbg !217
  %.unpack395.unpack.us.us = load i64, ptr %.elt394.us.us, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack.us.us, ptr %gc_slot_addr8, align 16
  store ptr %.unpack.us.us, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack.us.us, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393.us.us, ptr %gc_slot_addr7, align 8
  store ptr %.unpack393.us.us, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack.us.us, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20945 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20945, align 16
  %gc_slot_addr_19946 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19946, align 8
  %gc_slot_addr_18947 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18947, align 16
  %gc_slot_addr_17948 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17948, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %50 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %51 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %52 = shl nuw nsw i64 %51, 1, !dbg !222
  %53 = add nuw i64 %51, %value_phi67481.us.us, !dbg !222
  %.not398.us.us = icmp ult i64 %53, %52, !dbg !222
  %54 = icmp ult i64 %value_phi67481.us.us, %51, !dbg !222
  %55 = and i1 %.not398.us.us, %54, !dbg !222
  br i1 %55, label %load.us.us, label %oob104, !dbg !222

load.us.us:                                       ; preds = %pass99.us.us
  %56 = getelementptr inbounds { ptr, [1 x i64] }, ptr %50, i64 %value_phi67481.us.us, !dbg !227
  %.not401.us.us = icmp eq ptr %27, %50, !dbg !227
  br i1 %.not401.us.us, label %guard_exit.us.us, label %guard_pass.us.us, !dbg !227

guard_pass.us.us:                                 ; preds = %load.us.us
  %57 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %58 = icmp eq ptr %57, null, !dbg !227
  %59 = select i1 %58, ptr %gclift938, ptr %57, !dbg !227
  br label %guard_exit.us.us, !dbg !227

guard_exit.us.us:                                 ; preds = %guard_pass.us.us, %load.us.us
  %guard_res.us.us = phi ptr [ %gclift938, %load.us.us ], [ %59, %guard_pass.us.us ], !dbg !227
  %.unbox.fca.0.load.us.us = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load.us.us = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load.us.us, ptr %56, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402.us.us = getelementptr inbounds { ptr, [1 x i64] }, ptr %50, i64 %value_phi67481.us.us, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load.us.us, ptr %.repack402.us.us, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.us.us.tag_addr = getelementptr inbounds i64, ptr %guard_res.us.us, i64 -1, !dbg !227
  %guard_res.us.us.tag = load atomic i64, ptr %guard_res.us.us.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits1039 = and i64 %guard_res.us.us.tag, 3, !dbg !227
  %parent_old_marked1040 = icmp eq i64 %parent_bits1039, 3, !dbg !227
  br i1 %parent_old_marked1040, label %may_trigger_wb1041, label %60, !dbg !227

may_trigger_wb1041:                               ; preds = %guard_exit.us.us
  %.unbox.fca.0.load.us.us.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load.us.us, i64 -1, !dbg !227
  %.unbox.fca.0.load.us.us.tag = load atomic i64, ptr %.unbox.fca.0.load.us.us.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit1042 = and i64 %.unbox.fca.0.load.us.us.tag, 1, !dbg !227
  %child_not_marked1044 = icmp eq i64 %child_bit1042, 0, !dbg !227
  br i1 %child_not_marked1044, label %trigger_wb1045, label %60, !dbg !227, !prof !233

trigger_wb1045:                                   ; preds = %may_trigger_wb1041
  call void @ijl_gc_queue_root(ptr %guard_res.us.us), !dbg !227
  br label %60, !dbg !227

60:                                               ; preds = %may_trigger_wb1041, %trigger_wb1045, %guard_exit.us.us
  %exitcond568.not = icmp eq i64 %42, %12, !dbg !234
  br i1 %exitcond568.not, label %L249, label %L188.us.us, !dbg !235, !llvm.loop !236

L188.lr.ph.split:                                 ; preds = %L188.lr.ph
  %smin = call i64 @llvm.smin.i64(i64 %12, i64 %24), !dbg !235
  %.not669 = icmp eq i64 %smin, 0, !dbg !235
  br i1 %.not381740, label %L188.lr.ph.split.split.us, label %L188.lr.ph.split.split, !dbg !206

L188.lr.ph.split.split.us:                        ; preds = %L188.lr.ph.split
  br i1 %.not669, label %main.pseudo.exit, label %L188.us487, !dbg !235

L188.us487:                                       ; preds = %L188.lr.ph.split.split.us, %75
  %value_phi67481.us488 = phi i64 [ %61, %75 ], [ 0, %L188.lr.ph.split.split.us ]
  %61 = add nuw nsw i64 %value_phi67481.us488, 1, !dbg !210
  %exitcond570.not = icmp eq i64 %value_phi67481.us488, %24, !dbg !202
  br i1 %exitcond570.not, label %oob, label %idxend.us489, !dbg !202

idxend.us489:                                     ; preds = %L188.us487
  %62 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.us488, !dbg !202
  %.unpack.us490 = load ptr, ptr %62, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.elt386.us491 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.us488, i32 1, !dbg !202
  %.unpack387.unpack.us492 = load i64, ptr %.elt386.us491, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389.us493 = icmp eq ptr %.unpack.us490, null, !dbg !202
  br i1 %.not389.us493, label %fail81, label %pass82.us494, !dbg !202

pass82.us494:                                     ; preds = %idxend.us489
  %63 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %64 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %.not673 = icmp eq i64 %64, 0, !dbg !217
  br i1 %.not673, label %oob90, label %idxend95.us495, !dbg !217

idxend95.us495:                                   ; preds = %pass82.us494
  %.unpack393.us496 = load ptr, ptr %63, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397.us497 = icmp eq ptr %.unpack393.us496, null, !dbg !217
  br i1 %.not397.us497, label %fail98, label %pass99.us498, !dbg !217

pass99.us498:                                     ; preds = %idxend95.us495
  %.elt394.us499 = getelementptr inbounds { ptr, [1 x i64] }, ptr %63, i64 0, i32 1, !dbg !217
  %.unpack395.unpack.us500 = load i64, ptr %.elt394.us499, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack.us490, ptr %gc_slot_addr10, align 16
  store ptr %.unpack.us490, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack.us492, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393.us496, ptr %gc_slot_addr9, align 8
  store ptr %.unpack393.us496, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack.us500, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20949 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20949, align 16
  %gc_slot_addr_19950 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19950, align 8
  %gc_slot_addr_18951 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18951, align 16
  %gc_slot_addr_17952 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17952, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %65 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %66 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %67 = shl nuw nsw i64 %66, 1, !dbg !222
  %68 = add nuw i64 %66, %value_phi67481.us488, !dbg !222
  %.not398.us501 = icmp ult i64 %68, %67, !dbg !222
  %69 = icmp ult i64 %value_phi67481.us488, %66, !dbg !222
  %70 = and i1 %.not398.us501, %69, !dbg !222
  br i1 %70, label %load.us503, label %oob104, !dbg !222

load.us503:                                       ; preds = %pass99.us498
  %71 = getelementptr inbounds { ptr, [1 x i64] }, ptr %65, i64 %value_phi67481.us488, !dbg !227
  %.not401.us504 = icmp eq ptr %27, %65, !dbg !227
  br i1 %.not401.us504, label %guard_exit.us506, label %guard_pass.us505, !dbg !227

guard_pass.us505:                                 ; preds = %load.us503
  %72 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %73 = icmp eq ptr %72, null, !dbg !227
  %74 = select i1 %73, ptr %gclift938, ptr %72, !dbg !227
  br label %guard_exit.us506, !dbg !227

guard_exit.us506:                                 ; preds = %guard_pass.us505, %load.us503
  %guard_res.us507 = phi ptr [ %gclift938, %load.us503 ], [ %74, %guard_pass.us505 ], !dbg !227
  %.unbox.fca.0.load.us508 = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load.us509 = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load.us508, ptr %71, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402.us510 = getelementptr inbounds { ptr, [1 x i64] }, ptr %65, i64 %value_phi67481.us488, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load.us509, ptr %.repack402.us510, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.us507.tag_addr = getelementptr inbounds i64, ptr %guard_res.us507, i64 -1, !dbg !227
  %guard_res.us507.tag = load atomic i64, ptr %guard_res.us507.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits1046 = and i64 %guard_res.us507.tag, 3, !dbg !227
  %parent_old_marked1047 = icmp eq i64 %parent_bits1046, 3, !dbg !227
  br i1 %parent_old_marked1047, label %may_trigger_wb1048, label %75, !dbg !227

may_trigger_wb1048:                               ; preds = %guard_exit.us506
  %.unbox.fca.0.load.us508.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load.us508, i64 -1, !dbg !227
  %.unbox.fca.0.load.us508.tag = load atomic i64, ptr %.unbox.fca.0.load.us508.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit1049 = and i64 %.unbox.fca.0.load.us508.tag, 1, !dbg !227
  %child_not_marked1051 = icmp eq i64 %child_bit1049, 0, !dbg !227
  br i1 %child_not_marked1051, label %trigger_wb1052, label %75, !dbg !227, !prof !233

trigger_wb1052:                                   ; preds = %may_trigger_wb1048
  call void @ijl_gc_queue_root(ptr %guard_res.us507), !dbg !227
  br label %75, !dbg !227

75:                                               ; preds = %may_trigger_wb1048, %trigger_wb1052, %guard_exit.us506
  %exitcond569.not = icmp eq i64 %61, %smin, !dbg !235
  br i1 %exitcond569.not, label %main.exit.selector, label %L188.us487, !dbg !235, !llvm.loop !236

main.exit.selector:                               ; preds = %75
  %76 = icmp sgt i64 %12, %24, !dbg !235
  br i1 %76, label %main.pseudo.exit, label %L249, !dbg !235

main.pseudo.exit:                                 ; preds = %main.exit.selector, %L188.lr.ph.split.split.us
  br label %L188.us487.postloop

L188.lr.ph.split.split:                           ; preds = %L188.lr.ph.split
  br i1 %.not669, label %main.pseudo.exit553, label %L188, !dbg !235

L188:                                             ; preds = %L188.lr.ph.split.split, %98
  %value_phi67481 = phi i64 [ %77, %98 ], [ 0, %L188.lr.ph.split.split ]
  %77 = add nuw nsw i64 %value_phi67481, 1, !dbg !210
  %exitcond572.not = icmp eq i64 %value_phi67481, %24, !dbg !202
  br i1 %exitcond572.not, label %oob, label %idxend, !dbg !202

L249:                                             ; preds = %140, %117, %60, %41, %main.exit.selector552, %main.exit.selector, %L168
  %value_phi38686 = phi ptr [ %22, %L168 ], [ %gclift938, %main.exit.selector ], [ %gclift938, %main.exit.selector552 ], [ %gclift938, %41 ], [ %gclift938, %60 ], [ %gclift938, %117 ], [ %gclift938, %140 ]
  %"new::OneTo120.sroa.0.0.copyload" = load i64, ptr %"A::FixedSizeArray.size_ptr", align 8, !dbg !237
  %"new::OneTo124.sroa.0.0.copyload" = load i64, ptr %"B::FixedSizeArray.size_ptr", align 8, !dbg !237, !tbaa !49, !alias.scope !50, !noalias !54
  %78 = icmp eq i64 %"new::OneTo124.sroa.0.0.copyload", %"new::OneTo120.sroa.0.0.copyload", !dbg !247
  %value_phi126.v404 = icmp eq i64 %"new::OneTo120.sroa.0.0.copyload", 1, !dbg !249
  %value_phi126.v.not.not841 = or i1 %value_phi126.v404, %78, !dbg !251
  %value_phi130.v408.not = icmp eq i64 %"new::OneTo124.sroa.0.0.copyload", 1
  %or.cond = or i1 %value_phi126.v.not.not841, %value_phi130.v408.not, !dbg !251
  br i1 %or.cond, label %L284, label %L273, !dbg !251

L273:                                             ; preds = %L249
  %ptls_load1013 = load ptr, ptr %ptls_field, align 8, !dbg !257, !tbaa !25
  %"new::LazyString" = call noalias nonnull align 8 dereferenceable(32) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1013, i32 800, i32 32, i64 140293568847376) #15, !dbg !257
  %"new::LazyString.tag_addr" = getelementptr inbounds i64, ptr %"new::LazyString", i64 -1, !dbg !257
  store atomic i64 140293568847376, ptr %"new::LazyString.tag_addr" unordered, align 8, !dbg !257, !tbaa !99
  store ptr null, ptr %"new::LazyString", align 8, !dbg !257, !tbaa !260, !alias.scope !105, !noalias !106
  %79 = getelementptr inbounds ptr, ptr %"new::LazyString", i64 1, !dbg !257
  store ptr null, ptr %79, align 8, !dbg !257, !tbaa !260, !alias.scope !105, !noalias !106
  %gc_slot_addr_17953 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %"new::LazyString", ptr %gc_slot_addr_17953, align 8
  %"box::Tuple" = call noalias nonnull align 8 dereferenceable(48) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1013, i32 848, i32 48, i64 140293576064224) #15, !dbg !257
  %"box::Tuple.tag_addr" = getelementptr inbounds i64, ptr %"box::Tuple", i64 -1, !dbg !257
  store atomic i64 140293576064224, ptr %"box::Tuple.tag_addr" unordered, align 8, !dbg !257, !tbaa !99
  store ptr @"jl_global#973.jit", ptr %"box::Tuple", align 8, !dbg !257, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::Tuple.repack410" = getelementptr inbounds { ptr, [1 x i64], ptr, [1 x i64] }, ptr %"box::Tuple", i64 0, i32 1, !dbg !257
  store i64 %"new::OneTo120.sroa.0.0.copyload", ptr %"box::Tuple.repack410", align 8, !dbg !257, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::Tuple.repack412" = getelementptr inbounds { ptr, [1 x i64], ptr, [1 x i64] }, ptr %"box::Tuple", i64 0, i32 2, !dbg !257
  store ptr @"jl_global#974.jit", ptr %"box::Tuple.repack412", align 8, !dbg !257, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::Tuple.repack414" = getelementptr inbounds { ptr, [1 x i64], ptr, [1 x i64] }, ptr %"box::Tuple", i64 0, i32 3, !dbg !257
  store i64 %"new::OneTo124.sroa.0.0.copyload", ptr %"box::Tuple.repack414", align 8, !dbg !257, !tbaa !102, !alias.scope !105, !noalias !106
  store atomic ptr %"box::Tuple", ptr %"new::LazyString" release, align 8, !dbg !257, !tbaa !260, !alias.scope !105, !noalias !106
  %jl_nothing = load ptr, ptr @jl_nothing, align 8, !dbg !257, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  store atomic ptr %jl_nothing, ptr %79 release, align 8, !dbg !257, !tbaa !260, !alias.scope !105, !noalias !106
  %"box::DimensionMismatch" = call noalias nonnull align 8 dereferenceable(16) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1013, i32 752, i32 16, i64 140293584366464) #15, !dbg !251
  %"box::DimensionMismatch.tag_addr" = getelementptr inbounds i64, ptr %"box::DimensionMismatch", i64 -1, !dbg !251
  store atomic i64 140293584366464, ptr %"box::DimensionMismatch.tag_addr" unordered, align 8, !dbg !251, !tbaa !99
  store ptr %"new::LazyString", ptr %"box::DimensionMismatch", align 8, !dbg !251, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_throw(ptr nonnull %"box::DimensionMismatch"), !dbg !251
  unreachable, !dbg !251

L284:                                             ; preds = %L249
  store ptr %value_phi38686, ptr %return_roots, align 8, !dbg !246
  store ptr %value_phi38686, ptr %sret_return, align 8, !dbg !246
  %sret_return.repack406 = getelementptr inbounds { ptr, [1 x i64] }, ptr %sret_return, i64 0, i32 1, !dbg !246
  store i64 %12, ptr %sret_return.repack406, align 8, !dbg !246
  %frame.prev1083 = load ptr, ptr %frame.prev, align 8, !tbaa !25
  store ptr %frame.prev1083, ptr %pgcstack, align 8, !tbaa !25
  ret void, !dbg !246

fail:                                             ; preds = %L88
  %jl_undefref_exception = load ptr, ptr @jl_undefref_exception, align 8, !dbg !118, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  call void @ijl_throw(ptr nonnull %jl_undefref_exception), !dbg !118
  unreachable, !dbg !118

oob:                                              ; preds = %L188, %L188.postloop, %L188.us487, %L188.us487.postloop, %L188.lr.ph.split.us
  %.us-phi485 = phi i64 [ 1, %L188.lr.ph.split.us ], [ %100, %L188.us487.postloop ], [ %61, %L188.us487 ], [ %118, %L188.postloop ], [ %77, %L188 ]
  %gc_slot_addr_20954 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20954, align 16
  %ptls_load1021 = load ptr, ptr %ptls_field, align 8, !dbg !202, !tbaa !25
  %"box::GenericMemoryRef" = call noalias nonnull align 8 dereferenceable(32) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1021, i32 800, i32 32, i64 140293725504592) #15, !dbg !202
  %"box::GenericMemoryRef.tag_addr" = getelementptr inbounds i64, ptr %"box::GenericMemoryRef", i64 -1, !dbg !202
  store atomic i64 140293725504592, ptr %"box::GenericMemoryRef.tag_addr" unordered, align 8, !dbg !202, !tbaa !99
  store ptr %23, ptr %"box::GenericMemoryRef", align 8, !dbg !202, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::GenericMemoryRef.repack384" = getelementptr inbounds { ptr, ptr }, ptr %"box::GenericMemoryRef", i64 0, i32 1, !dbg !202
  store ptr %value_phi44.mem.pre-phi, ptr %"box::GenericMemoryRef.repack384", align 8, !dbg !202, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_bounds_error_int(ptr nonnull %"box::GenericMemoryRef", i64 %.us-phi485), !dbg !202
  unreachable, !dbg !202

idxend:                                           ; preds = %L188
  %80 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481, !dbg !202
  %.unpack = load ptr, ptr %80, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.elt386 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481, i32 1, !dbg !202
  %.unpack387.unpack = load i64, ptr %.elt386, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389 = icmp eq ptr %.unpack, null, !dbg !202
  br i1 %.not389, label %fail81, label %pass82, !dbg !202

fail81:                                           ; preds = %idxend, %idxend.postloop, %idxend.us489, %idxend.us489.postloop, %L188.us.us, %L188.us.us.us
  %jl_undefref_exception80 = load ptr, ptr @jl_undefref_exception, align 8, !dbg !202, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  call void @ijl_throw(ptr nonnull %jl_undefref_exception80), !dbg !202
  unreachable, !dbg !202

pass82:                                           ; preds = %idxend
  %81 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %82 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %83 = shl nuw nsw i64 %82, 1, !dbg !217
  %84 = add nuw i64 %82, %value_phi67481, !dbg !217
  %.not390 = icmp ult i64 %84, %83, !dbg !217
  %85 = icmp ult i64 %value_phi67481, %82, !dbg !217
  %86 = and i1 %.not390, %85, !dbg !217
  br i1 %86, label %idxend95, label %oob90, !dbg !217

oob90:                                            ; preds = %pass82, %pass82.postloop, %pass82.us494, %pass82.us494.postloop, %pass82.us.us, %pass82.us.us.us
  %.us-phi = phi i64 [ 1, %pass82.us.us.us ], [ %42, %pass82.us.us ], [ 1, %pass82.us494.postloop ], [ 1, %pass82.us494 ], [ %118, %pass82.postloop ], [ %77, %pass82 ]
  %.us-phi482 = phi ptr [ %29, %pass82.us.us.us ], [ %43, %pass82.us.us ], [ %105, %pass82.us494.postloop ], [ %63, %pass82.us494 ], [ %123, %pass82.postloop ], [ %81, %pass82 ]
  %gc_slot_addr_17955 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17955, align 8
  %ptls_load1024 = load ptr, ptr %ptls_field, align 8, !dbg !217, !tbaa !25
  %"box::GenericMemoryRef94" = call noalias nonnull align 8 dereferenceable(32) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1024, i32 800, i32 32, i64 140293725504592) #15, !dbg !217
  %"box::GenericMemoryRef94.tag_addr" = getelementptr inbounds i64, ptr %"box::GenericMemoryRef94", i64 -1, !dbg !217
  store atomic i64 140293725504592, ptr %"box::GenericMemoryRef94.tag_addr" unordered, align 8, !dbg !217, !tbaa !99
  store ptr %.us-phi482, ptr %"box::GenericMemoryRef94", align 8, !dbg !217, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::GenericMemoryRef94.repack391" = getelementptr inbounds { ptr, ptr }, ptr %"box::GenericMemoryRef94", i64 0, i32 1, !dbg !217
  store ptr %value_phi57.mem, ptr %"box::GenericMemoryRef94.repack391", align 8, !dbg !217, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_bounds_error_int(ptr nonnull %"box::GenericMemoryRef94", i64 %.us-phi), !dbg !217
  unreachable, !dbg !217

idxend95:                                         ; preds = %pass82
  %87 = getelementptr inbounds { ptr, [1 x i64] }, ptr %81, i64 %value_phi67481, !dbg !217
  %.unpack393 = load ptr, ptr %87, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397 = icmp eq ptr %.unpack393, null, !dbg !217
  br i1 %.not397, label %fail98, label %pass99, !dbg !217

fail98:                                           ; preds = %idxend95, %idxend95.postloop, %idxend95.us495, %idxend95.us495.postloop, %idxend95.us.us, %idxend95.us.us.us
  %jl_undefref_exception97 = load ptr, ptr @jl_undefref_exception, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  call void @ijl_throw(ptr nonnull %jl_undefref_exception97), !dbg !217
  unreachable, !dbg !217

pass99:                                           ; preds = %idxend95
  %.elt394 = getelementptr inbounds { ptr, [1 x i64] }, ptr %81, i64 %value_phi67481, i32 1, !dbg !217
  %.unpack395.unpack = load i64, ptr %.elt394, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack, ptr %gc_slot_addr12, align 16
  store ptr %.unpack, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393, ptr %gc_slot_addr11, align 8
  store ptr %.unpack393, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20956 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20956, align 16
  %gc_slot_addr_19957 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19957, align 8
  %gc_slot_addr_18958 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18958, align 16
  %gc_slot_addr_17959 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17959, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %88 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %89 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %90 = shl nuw nsw i64 %89, 1, !dbg !222
  %91 = add nuw i64 %89, %value_phi67481, !dbg !222
  %.not398 = icmp ult i64 %91, %90, !dbg !222
  %92 = icmp ult i64 %value_phi67481, %89, !dbg !222
  %93 = and i1 %.not398, %92, !dbg !222
  br i1 %93, label %load, label %oob104, !dbg !222

oob104:                                           ; preds = %pass99, %pass99.postloop, %pass99.us498, %pass99.us498.postloop, %pass99.us.us, %pass99.us.us.us
  %.us-phi483 = phi ptr [ %31, %pass99.us.us.us ], [ %50, %pass99.us.us ], [ %107, %pass99.us498.postloop ], [ %65, %pass99.us498 ], [ %130, %pass99.postloop ], [ %88, %pass99 ]
  %.us-phi484 = phi i64 [ %28, %pass99.us.us.us ], [ %42, %pass99.us.us ], [ %100, %pass99.us498.postloop ], [ %61, %pass99.us498 ], [ %118, %pass99.postloop ], [ %77, %pass99 ]
  %ptls_load1030 = load ptr, ptr %ptls_field, align 8, !dbg !222, !tbaa !25
  %"box::GenericMemoryRef108" = call noalias nonnull align 8 dereferenceable(32) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load1030, i32 800, i32 32, i64 140293725504592) #15, !dbg !222
  %"box::GenericMemoryRef108.tag_addr" = getelementptr inbounds i64, ptr %"box::GenericMemoryRef108", i64 -1, !dbg !222
  store atomic i64 140293725504592, ptr %"box::GenericMemoryRef108.tag_addr" unordered, align 8, !dbg !222, !tbaa !99
  store ptr %.us-phi483, ptr %"box::GenericMemoryRef108", align 8, !dbg !222, !tbaa !102, !alias.scope !105, !noalias !106
  %"box::GenericMemoryRef108.repack399" = getelementptr inbounds { ptr, ptr }, ptr %"box::GenericMemoryRef108", i64 0, i32 1, !dbg !222
  store ptr %gclift938, ptr %"box::GenericMemoryRef108.repack399", align 8, !dbg !222, !tbaa !102, !alias.scope !105, !noalias !106
  call void @ijl_bounds_error_int(ptr nonnull %"box::GenericMemoryRef108", i64 %.us-phi484), !dbg !222
  unreachable, !dbg !222

load:                                             ; preds = %pass99
  %94 = getelementptr inbounds { ptr, [1 x i64] }, ptr %88, i64 %value_phi67481, !dbg !227
  %.not401 = icmp eq ptr %27, %88, !dbg !227
  br i1 %.not401, label %guard_exit, label %guard_pass, !dbg !227

guard_pass:                                       ; preds = %load
  %95 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %96 = icmp eq ptr %95, null, !dbg !227
  %97 = select i1 %96, ptr %gclift938, ptr %95, !dbg !227
  br label %guard_exit, !dbg !227

guard_exit:                                       ; preds = %guard_pass, %load
  %guard_res = phi ptr [ %gclift938, %load ], [ %97, %guard_pass ], !dbg !227
  %.unbox.fca.0.load = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load, ptr %94, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402 = getelementptr inbounds { ptr, [1 x i64] }, ptr %88, i64 %value_phi67481, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load, ptr %.repack402, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.tag_addr = getelementptr inbounds i64, ptr %guard_res, i64 -1, !dbg !227
  %guard_res.tag = load atomic i64, ptr %guard_res.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits1062 = and i64 %guard_res.tag, 3, !dbg !227
  %parent_old_marked1063 = icmp eq i64 %parent_bits1062, 3, !dbg !227
  br i1 %parent_old_marked1063, label %may_trigger_wb1064, label %98, !dbg !227

may_trigger_wb1064:                               ; preds = %guard_exit
  %.unbox.fca.0.load.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load, i64 -1, !dbg !227
  %.unbox.fca.0.load.tag = load atomic i64, ptr %.unbox.fca.0.load.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit1065 = and i64 %.unbox.fca.0.load.tag, 1, !dbg !227
  %child_not_marked1067 = icmp eq i64 %child_bit1065, 0, !dbg !227
  br i1 %child_not_marked1067, label %trigger_wb1068, label %98, !dbg !227, !prof !233

trigger_wb1068:                                   ; preds = %may_trigger_wb1064
  call void @ijl_gc_queue_root(ptr %guard_res), !dbg !227
  br label %98, !dbg !227

98:                                               ; preds = %may_trigger_wb1064, %trigger_wb1068, %guard_exit
  %exitcond571.not = icmp eq i64 %77, %smin, !dbg !235
  br i1 %exitcond571.not, label %main.exit.selector552, label %L188, !dbg !235, !llvm.loop !236

main.exit.selector552:                            ; preds = %98
  %99 = icmp sgt i64 %12, %24, !dbg !235
  br i1 %99, label %main.pseudo.exit553, label %L249, !dbg !235

main.pseudo.exit553:                              ; preds = %main.exit.selector552, %L188.lr.ph.split.split
  br label %L188.postloop

L188.us487.postloop:                              ; preds = %117, %main.pseudo.exit
  %value_phi67481.us488.postloop = phi i64 [ %smin, %main.pseudo.exit ], [ %100, %117 ]
  %100 = add nuw nsw i64 %value_phi67481.us488.postloop, 1, !dbg !210
  %101 = add i64 %24, %value_phi67481.us488.postloop, !dbg !202
  %.not383.us512.postloop = icmp ult i64 %101, %25, !dbg !202
  %.idx670 = shl nsw i64 %value_phi67481.us488.postloop, 4, !dbg !202
  %102 = icmp ult i64 %.idx670, %26, !dbg !202
  %103 = and i1 %.not383.us512.postloop, %102, !dbg !202
  br i1 %103, label %idxend.us489.postloop, label %oob, !dbg !202

idxend.us489.postloop:                            ; preds = %L188.us487.postloop
  %104 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.us488.postloop, !dbg !202
  %.unpack.us490.postloop = load ptr, ptr %104, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.elt386.us491.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.us488.postloop, i32 1, !dbg !202
  %.unpack387.unpack.us492.postloop = load i64, ptr %.elt386.us491.postloop, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389.us493.postloop = icmp eq ptr %.unpack.us490.postloop, null, !dbg !202
  br i1 %.not389.us493.postloop, label %fail81, label %pass82.us494.postloop, !dbg !202

pass82.us494.postloop:                            ; preds = %idxend.us489.postloop
  %105 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %106 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %.not671 = icmp eq i64 %106, 0, !dbg !217
  br i1 %.not671, label %oob90, label %idxend95.us495.postloop, !dbg !217

idxend95.us495.postloop:                          ; preds = %pass82.us494.postloop
  %.unpack393.us496.postloop = load ptr, ptr %105, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397.us497.postloop = icmp eq ptr %.unpack393.us496.postloop, null, !dbg !217
  br i1 %.not397.us497.postloop, label %fail98, label %pass99.us498.postloop, !dbg !217

pass99.us498.postloop:                            ; preds = %idxend95.us495.postloop
  %.elt394.us499.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %105, i64 0, i32 1, !dbg !217
  %.unpack395.unpack.us500.postloop = load i64, ptr %.elt394.us499.postloop, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack.us490.postloop, ptr %gc_slot_addr14, align 16
  store ptr %.unpack.us490.postloop, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack.us492.postloop, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393.us496.postloop, ptr %gc_slot_addr13, align 8
  store ptr %.unpack393.us496.postloop, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack.us500.postloop, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20960 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20960, align 16
  %gc_slot_addr_19961 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19961, align 8
  %gc_slot_addr_18962 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18962, align 16
  %gc_slot_addr_17963 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17963, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %107 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %108 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %109 = shl nuw nsw i64 %108, 1, !dbg !222
  %110 = add i64 %108, %value_phi67481.us488.postloop, !dbg !222
  %.not398.us501.postloop = icmp ult i64 %110, %109, !dbg !222
  %111 = icmp ult i64 %value_phi67481.us488.postloop, %108, !dbg !222
  %112 = and i1 %.not398.us501.postloop, %111, !dbg !222
  br i1 %112, label %load.us503.postloop, label %oob104, !dbg !222

load.us503.postloop:                              ; preds = %pass99.us498.postloop
  %113 = getelementptr inbounds { ptr, [1 x i64] }, ptr %107, i64 %value_phi67481.us488.postloop, !dbg !227
  %.not401.us504.postloop = icmp eq ptr %27, %107, !dbg !227
  br i1 %.not401.us504.postloop, label %guard_exit.us506.postloop, label %guard_pass.us505.postloop, !dbg !227

guard_pass.us505.postloop:                        ; preds = %load.us503.postloop
  %114 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %115 = icmp eq ptr %114, null, !dbg !227
  %116 = select i1 %115, ptr %gclift938, ptr %114, !dbg !227
  br label %guard_exit.us506.postloop, !dbg !227

guard_exit.us506.postloop:                        ; preds = %guard_pass.us505.postloop, %load.us503.postloop
  %guard_res.us507.postloop = phi ptr [ %gclift938, %load.us503.postloop ], [ %116, %guard_pass.us505.postloop ], !dbg !227
  %.unbox.fca.0.load.us508.postloop = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load.us509.postloop = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load.us508.postloop, ptr %113, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402.us510.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %107, i64 %value_phi67481.us488.postloop, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load.us509.postloop, ptr %.repack402.us510.postloop, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.us507.postloop.tag_addr = getelementptr inbounds i64, ptr %guard_res.us507.postloop, i64 -1, !dbg !227
  %guard_res.us507.postloop.tag = load atomic i64, ptr %guard_res.us507.postloop.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits1069 = and i64 %guard_res.us507.postloop.tag, 3, !dbg !227
  %parent_old_marked1070 = icmp eq i64 %parent_bits1069, 3, !dbg !227
  br i1 %parent_old_marked1070, label %may_trigger_wb1071, label %117, !dbg !227

may_trigger_wb1071:                               ; preds = %guard_exit.us506.postloop
  %.unbox.fca.0.load.us508.postloop.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load.us508.postloop, i64 -1, !dbg !227
  %.unbox.fca.0.load.us508.postloop.tag = load atomic i64, ptr %.unbox.fca.0.load.us508.postloop.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit1072 = and i64 %.unbox.fca.0.load.us508.postloop.tag, 1, !dbg !227
  %child_not_marked1074 = icmp eq i64 %child_bit1072, 0, !dbg !227
  br i1 %child_not_marked1074, label %trigger_wb1075, label %117, !dbg !227, !prof !233

trigger_wb1075:                                   ; preds = %may_trigger_wb1071
  call void @ijl_gc_queue_root(ptr %guard_res.us507.postloop), !dbg !227
  br label %117, !dbg !227

117:                                              ; preds = %may_trigger_wb1071, %trigger_wb1075, %guard_exit.us506.postloop
  %.not382.us511.postloop = icmp slt i64 %100, %12, !dbg !234
  br i1 %.not382.us511.postloop, label %L188.us487.postloop, label %L249, !dbg !235, !llvm.loop !262, !irce.loop.clone !0

L188.postloop:                                    ; preds = %140, %main.pseudo.exit553
  %value_phi67481.postloop = phi i64 [ %smin, %main.pseudo.exit553 ], [ %118, %140 ]
  %118 = add nuw nsw i64 %value_phi67481.postloop, 1, !dbg !210
  %119 = add i64 %24, %value_phi67481.postloop, !dbg !202
  %.not383.postloop = icmp ult i64 %119, %25, !dbg !202
  %.idx = shl nsw i64 %value_phi67481.postloop, 4, !dbg !202
  %120 = icmp ult i64 %.idx, %26, !dbg !202
  %121 = and i1 %.not383.postloop, %120, !dbg !202
  br i1 %121, label %idxend.postloop, label %oob, !dbg !202

idxend.postloop:                                  ; preds = %L188.postloop
  %122 = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.postloop, !dbg !202
  %.unpack.postloop = load ptr, ptr %122, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.elt386.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %23, i64 %value_phi67481.postloop, i32 1, !dbg !202
  %.unpack387.unpack.postloop = load i64, ptr %.elt386.postloop, align 8, !dbg !202, !tbaa !215, !alias.scope !105, !noalias !106
  %.not389.postloop = icmp eq ptr %.unpack.postloop, null, !dbg !202
  br i1 %.not389.postloop, label %fail81, label %pass82.postloop, !dbg !202

pass82.postloop:                                  ; preds = %idxend.postloop
  %123 = load ptr, ptr %.data_ptr87, align 8, !dbg !217, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %124 = load i64, ptr %value_phi57.mem, align 8, !dbg !217, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %125 = shl nuw nsw i64 %124, 1, !dbg !217
  %126 = add i64 %124, %value_phi67481.postloop, !dbg !217
  %.not390.postloop = icmp ult i64 %126, %125, !dbg !217
  %127 = icmp ult i64 %value_phi67481.postloop, %124, !dbg !217
  %128 = and i1 %.not390.postloop, %127, !dbg !217
  br i1 %128, label %idxend95.postloop, label %oob90, !dbg !217

idxend95.postloop:                                ; preds = %pass82.postloop
  %129 = getelementptr inbounds { ptr, [1 x i64] }, ptr %123, i64 %value_phi67481.postloop, !dbg !217
  %.unpack393.postloop = load ptr, ptr %129, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  %.not397.postloop = icmp eq ptr %.unpack393.postloop, null, !dbg !217
  br i1 %.not397.postloop, label %fail98, label %pass99.postloop, !dbg !217

pass99.postloop:                                  ; preds = %idxend95.postloop
  %.elt394.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %123, i64 %value_phi67481.postloop, i32 1, !dbg !217
  %.unpack395.unpack.postloop = load i64, ptr %.elt394.postloop, align 8, !dbg !217, !tbaa !215, !alias.scope !105, !noalias !106
  store ptr %.unpack.postloop, ptr %gc_slot_addr16, align 16
  store ptr %.unpack.postloop, ptr %4, align 8, !dbg !219
  store i64 %.unpack387.unpack.postloop, ptr %.fca.1.0.gep349, align 8, !dbg !219
  store ptr %.unpack393.postloop, ptr %gc_slot_addr15, align 8
  store ptr %.unpack393.postloop, ptr %5, align 8, !dbg !219
  store i64 %.unpack395.unpack.postloop, ptr %.fca.1.0.gep345, align 8, !dbg !219
  %gc_slot_addr_20964 = getelementptr inbounds ptr, ptr %gcframe1, i64 22
  store ptr %value_phi44.mem.pre-phi, ptr %gc_slot_addr_20964, align 16
  %gc_slot_addr_19965 = getelementptr inbounds ptr, ptr %gcframe1, i64 21
  store ptr %gclift938, ptr %gc_slot_addr_19965, align 8
  %gc_slot_addr_18966 = getelementptr inbounds ptr, ptr %gcframe1, i64 20
  store ptr %gclift938, ptr %gc_slot_addr_18966, align 16
  %gc_slot_addr_17967 = getelementptr inbounds ptr, ptr %gcframe1, i64 19
  store ptr %value_phi57.mem, ptr %gc_slot_addr_17967, align 8
  call swiftcc void @"j_+_968"(ptr noalias nocapture noundef nonnull sret({ ptr, [1 x i64] }) %3, ptr noalias nocapture noundef nonnull %2, ptr nonnull swiftself %pgcstack, ptr nocapture nonnull readonly %4, ptr nocapture nonnull readonly %5), !dbg !219
  %130 = load ptr, ptr %.data_ptr101, align 8, !dbg !222, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0
  %131 = load i64, ptr %gclift938, align 8, !dbg !222, !tbaa !181, !range !184, !alias.scope !185, !noalias !186
  %132 = shl nuw nsw i64 %131, 1, !dbg !222
  %133 = add i64 %131, %value_phi67481.postloop, !dbg !222
  %.not398.postloop = icmp ult i64 %133, %132, !dbg !222
  %134 = icmp ult i64 %value_phi67481.postloop, %131, !dbg !222
  %135 = and i1 %.not398.postloop, %134, !dbg !222
  br i1 %135, label %load.postloop, label %oob104, !dbg !222

load.postloop:                                    ; preds = %pass99.postloop
  %136 = getelementptr inbounds { ptr, [1 x i64] }, ptr %130, i64 %value_phi67481.postloop, !dbg !227
  %.not401.postloop = icmp eq ptr %27, %130, !dbg !227
  br i1 %.not401.postloop, label %guard_exit.postloop, label %guard_pass.postloop, !dbg !227

guard_pass.postloop:                              ; preds = %load.postloop
  %137 = load ptr, ptr %27, align 8, !dbg !227, !tbaa !30, !alias.scope !119, !noalias !120
  %138 = icmp eq ptr %137, null, !dbg !227
  %139 = select i1 %138, ptr %gclift938, ptr %137, !dbg !227
  br label %guard_exit.postloop, !dbg !227

guard_exit.postloop:                              ; preds = %guard_pass.postloop, %load.postloop
  %guard_res.postloop = phi ptr [ %gclift938, %load.postloop ], [ %139, %guard_pass.postloop ], !dbg !227
  %.unbox.fca.0.load.postloop = load ptr, ptr %3, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  %.unbox.fca.1.0.load.postloop = load i64, ptr %.unbox.fca.1.0.gep, align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !231
  store ptr %.unbox.fca.0.load.postloop, ptr %136, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %.repack402.postloop = getelementptr inbounds { ptr, [1 x i64] }, ptr %130, i64 %value_phi67481.postloop, i32 1, !dbg !227
  store i64 %.unbox.fca.1.0.load.postloop, ptr %.repack402.postloop, align 8, !dbg !227, !tbaa !215, !alias.scope !105, !noalias !106
  %guard_res.postloop.tag_addr = getelementptr inbounds i64, ptr %guard_res.postloop, i64 -1, !dbg !227
  %guard_res.postloop.tag = load atomic i64, ptr %guard_res.postloop.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %parent_bits1076 = and i64 %guard_res.postloop.tag, 3, !dbg !227
  %parent_old_marked1077 = icmp eq i64 %parent_bits1076, 3, !dbg !227
  br i1 %parent_old_marked1077, label %may_trigger_wb1078, label %140, !dbg !227

may_trigger_wb1078:                               ; preds = %guard_exit.postloop
  %.unbox.fca.0.load.postloop.tag_addr = getelementptr inbounds i64, ptr %.unbox.fca.0.load.postloop, i64 -1, !dbg !227
  %.unbox.fca.0.load.postloop.tag = load atomic i64, ptr %.unbox.fca.0.load.postloop.tag_addr unordered, align 8, !dbg !227, !tbaa !99, !range !232
  %child_bit1079 = and i64 %.unbox.fca.0.load.postloop.tag, 1, !dbg !227
  %child_not_marked1081 = icmp eq i64 %child_bit1079, 0, !dbg !227
  br i1 %child_not_marked1081, label %trigger_wb1082, label %140, !dbg !227, !prof !233

trigger_wb1082:                                   ; preds = %may_trigger_wb1078
  call void @ijl_gc_queue_root(ptr %guard_res.postloop), !dbg !227
  br label %140, !dbg !227

140:                                              ; preds = %may_trigger_wb1078, %trigger_wb1082, %guard_exit.postloop
  %.not382.postloop = icmp slt i64 %118, %12, !dbg !234
  br i1 %.not382.postloop, label %L188.postloop, label %L249, !dbg !235, !llvm.loop !267, !irce.loop.clone !0
}

; Function Attrs: noinline optnone
define nonnull ptr @"jfptr_+_942"(ptr %"function::Core.Function", ptr noalias nocapture noundef readonly %"args::Any[]", i32 %"nargs::UInt32") #1 {
top:
  %gcframe = alloca ptr, i32 4, align 16
  call void @llvm.memset.p0.i64(ptr align 16 %gcframe, i8 0, i64 32, i1 true)
  %return_roots = getelementptr inbounds ptr, ptr %gcframe, i32 2
  %thread_ptr = call ptr asm "movq %fs:0, $0", "=r"()
  %tls_ppgcstack = getelementptr i8, ptr %thread_ptr, i64 -8
  %tls_pgcstack = load ptr, ptr %tls_ppgcstack, align 8
  %frame.nroots = getelementptr inbounds ptr, ptr %gcframe, i32 0
  store i64 8, ptr %frame.nroots, align 8, !tbaa !25
  %frame.prev = getelementptr inbounds ptr, ptr %gcframe, i32 1
  %task.gcstack = load ptr, ptr %tls_pgcstack, align 8
  store ptr %task.gcstack, ptr %frame.prev, align 8, !tbaa !25
  store ptr %gcframe, ptr %tls_pgcstack, align 8
  %sret = alloca { ptr, [1 x i64] }, align 8
  %0 = getelementptr inbounds ptr, ptr %"args::Any[]", i32 0
  %1 = load ptr, ptr %0, align 8, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  %2 = getelementptr inbounds ptr, ptr %"args::Any[]", i32 1
  %3 = load ptr, ptr %2, align 8, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !131, !align !132
  call swiftcc void @"julia_+_941"(ptr noalias nocapture noundef sret({ ptr, [1 x i64] }) %sret, ptr noalias nocapture noundef %return_roots, ptr nonnull swiftself %tls_pgcstack, ptr nocapture readonly %1, ptr nocapture readonly %3)
  %"+Main.FixedSizeArrays.FixedSizeArray#943" = load ptr, ptr @"+Main.FixedSizeArrays.FixedSizeArray#943", align 8, !tbaa !30, !alias.scope !119, !noalias !120, !nonnull !0, !dereferenceable !268, !align !131
  %FixedSizeArray = ptrtoint ptr %"+Main.FixedSizeArrays.FixedSizeArray#943" to i64
  %4 = inttoptr i64 %FixedSizeArray to ptr
  %current_task = getelementptr inbounds ptr, ptr %tls_pgcstack, i64 -14
  %gc_slot_addr_1 = getelementptr inbounds ptr, ptr %gcframe, i32 3
  store ptr %4, ptr %gc_slot_addr_1, align 8
  call void @llvm.assume(i1 true) [ "align"(ptr %4, i64 16) ]
  %ptls_field = getelementptr inbounds ptr, ptr %current_task, i64 16
  %ptls_load = load ptr, ptr %ptls_field, align 8, !tbaa !25
  %5 = ptrtoint ptr %4 to i64
  %"box::FixedSizeArray" = call noalias nonnull align 8 dereferenceable(16) ptr @ijl_gc_pool_alloc_instrumented(ptr %ptls_load, i32 800, i32 32, i64 %5) #15
  %"box::FixedSizeArray.tag_addr" = getelementptr inbounds ptr, ptr %"box::FixedSizeArray", i64 -1
  store atomic ptr %4, ptr %"box::FixedSizeArray.tag_addr" unordered, align 8, !tbaa !99
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %"box::FixedSizeArray", ptr align 8 %sret, i64 16, i1 false), !tbaa !49, !alias.scope !269, !noalias !270
  %6 = getelementptr inbounds ptr, ptr %gcframe, i32 1
  %frame.prev5 = load ptr, ptr %6, align 8, !tbaa !25
  store ptr %frame.prev5, ptr %tls_pgcstack, align 8, !tbaa !25
  ret ptr %"box::FixedSizeArray"
}

; Function Attrs: nounwind willreturn allockind("alloc") allocsize(1) memory(argmem: read, inaccessiblemem: readwrite)
declare noalias nonnull ptr @julia.gc_alloc_obj(ptr, i64, ptr) #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare void @llvm.dbg.declare(metadata, metadata, metadata) #3

; Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @julia.safepoint(ptr) #4

; Function Signature: throw_promote_shape_mismatch(Tuple{Base.OneTo{Int64}}, Tuple{Base.OneTo{Int64}}, Int64)
; Function Attrs: noreturn
declare swiftcc void @j_throw_promote_shape_mismatch_949(ptr nonnull swiftself, ptr nocapture readonly, ptr nocapture readonly, i64 signext) #5

; Function Signature: (::Type{ArgumentError})(String)
declare swiftcc [1 x ptr] @j_ArgumentError_952(ptr nonnull swiftself, ptr) #6

; Function Attrs: noreturn
declare void @ijl_throw(ptr) #7

; Function Attrs: noreturn
declare void @ijl_bounds_error_int(ptr, i64) #7

; Function Attrs: norecurse nosync nounwind speculatable willreturn memory(none)
declare noundef nonnull ptr @julia.gc_loaded(ptr nocapture noundef nonnull readnone, ptr noundef nonnull readnone) #8

; Function Signature: +(FixedSizeArrays.FixedSizeArray{Float64, 1}, FixedSizeArrays.FixedSizeArray{Float64, 1})
declare swiftcc void @"j_+_968"(ptr noalias nocapture noundef sret({ ptr, [1 x i64] }), ptr noalias nocapture noundef, ptr nonnull swiftself, ptr nocapture readonly, ptr nocapture readonly) #9

; Function Attrs: norecurse nounwind memory(inaccessiblemem: readwrite)
declare void @julia.write_barrier(ptr readonly, ...) #10

declare i64 @ijl_object_id_(i64, ptr)

; Function Signature: unaliascopy(FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1})
declare swiftcc void @j_unaliascopy_982(ptr noalias nocapture noundef sret({ ptr, [1 x i64] }), ptr noalias nocapture noundef, ptr nonnull swiftself, ptr nocapture readonly) #11

; Function Signature: throwdm(Tuple{Base.OneTo{Int64}}, Tuple{Base.OneTo{Int64}})
; Function Attrs: noreturn
declare swiftcc void @j_throwdm_984(ptr nonnull swiftself, ptr nocapture readonly, ptr nocapture readonly) #12

; Function Attrs: willreturn memory(argmem: read, inaccessiblemem: readwrite)
declare nonnull align 16 dereferenceable(16) ptr @jl_alloc_genericmemory(ptr, i64) #13

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smin.i64(i64, i64) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #14

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #14

declare noalias nonnull ptr @julia.new_gc_frame(i32)

declare void @julia.push_gc_frame(ptr, i32)

declare ptr @julia.get_gc_frame_slot(ptr, i32)

declare void @julia.pop_gc_frame(ptr)

; Function Attrs: nounwind willreturn allockind("alloc") allocsize(1) memory(argmem: read, inaccessiblemem: readwrite)
declare noalias nonnull ptr @julia.gc_alloc_bytes(ptr, i64, i64) #2

; Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @julia.queue_gc_root(ptr) #4

; Function Attrs: memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @ijl_gc_queue_root(ptr) #4

; Function Attrs: nounwind willreturn allockind("alloc") allocsize(2) memory(argmem: read, inaccessiblemem: readwrite)
declare noalias nonnull ptr @ijl_gc_pool_alloc_instrumented(ptr, i32, i32, i64) #15

; Function Attrs: nounwind willreturn allockind("alloc") allocsize(1) memory(argmem: read, inaccessiblemem: readwrite)
declare noalias nonnull ptr @ijl_gc_big_alloc_instrumented(ptr, i64, i64) #2

; Function Attrs: nounwind willreturn allockind("alloc") allocsize(1) memory(argmem: read, inaccessiblemem: readwrite)
declare noalias nonnull ptr @ijl_gc_alloc_typed(ptr, i64, i64) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #16

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
declare void @llvm.assume(i1 noundef) #17

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #18

attributes #0 = { sspstrong "frame-pointer"="all" "julia.fsig"="+(FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1}, FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1})" "probe-stack"="inline-asm" }
attributes #1 = { noinline optnone "frame-pointer"="all" "probe-stack"="inline-asm" }
attributes #2 = { nounwind willreturn allockind("alloc") allocsize(1) memory(argmem: read, inaccessiblemem: readwrite) }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { memory(argmem: readwrite, inaccessiblemem: readwrite) }
attributes #5 = { noreturn "frame-pointer"="all" "julia.fsig"="throw_promote_shape_mismatch(Tuple{Base.OneTo{Int64}}, Tuple{Base.OneTo{Int64}}, Int64)" "probe-stack"="inline-asm" }
attributes #6 = { "frame-pointer"="all" "julia.fsig"="(::Type{ArgumentError})(String)" "probe-stack"="inline-asm" }
attributes #7 = { noreturn }
attributes #8 = { norecurse nosync nounwind speculatable willreturn memory(none) }
attributes #9 = { "frame-pointer"="all" "julia.fsig"="+(FixedSizeArrays.FixedSizeArray{Float64, 1}, FixedSizeArrays.FixedSizeArray{Float64, 1})" "probe-stack"="inline-asm" }
attributes #10 = { norecurse nounwind memory(inaccessiblemem: readwrite) }
attributes #11 = { "frame-pointer"="all" "julia.fsig"="unaliascopy(FixedSizeArrays.FixedSizeArray{FixedSizeArrays.FixedSizeArray{Float64, 1}, 1})" "probe-stack"="inline-asm" }
attributes #12 = { noreturn "frame-pointer"="all" "julia.fsig"="throwdm(Tuple{Base.OneTo{Int64}}, Tuple{Base.OneTo{Int64}})" "probe-stack"="inline-asm" }
attributes #13 = { willreturn memory(argmem: read, inaccessiblemem: readwrite) }
attributes #14 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #15 = { nounwind willreturn allockind("alloc") allocsize(2) memory(argmem: read, inaccessiblemem: readwrite) }
attributes #16 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #17 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
attributes #18 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }

!llvm.module.flags = !{!1, !2, !3, !4}
!llvm.dbg.cu = !{!5}

!0 = !{}
!1 = !{i32 2, !"Dwarf Version", i32 4}
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !{i32 1, !"stack-protector-guard", !"global"}
!4 = !{i32 2, !"julia.debug_level", i32 2}
!5 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !6, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: NoDebug, nameTableKind: GNU)
!6 = !DIFile(filename: "julia", directory: ".")
!7 = distinct !DISubprogram(name: "+", linkageName: "julia_+_941", scope: null, file: !8, line: 6, type: !9, scopeLine: 6, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !21)
!8 = !DIFile(filename: "arraymath.jl", directory: ".")
!9 = !DISubroutineType(types: !10)
!10 = !{!11, !20, !11, !11}
!11 = !DICompositeType(tag: DW_TAG_structure_type, name: "FixedSizeArray", size: 128, align: 64, elements: !12, runtimeLang: DW_LANG_Julia, identifier: "140293723992016")
!12 = !{!13, !17}
!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64, align: 64)
!14 = !DICompositeType(tag: DW_TAG_structure_type, name: "jl_value_t", file: !15, line: 71, align: 64, elements: !16)
!15 = !DIFile(filename: "julia.h", directory: "")
!16 = !{!13}
!17 = !DICompositeType(tag: DW_TAG_structure_type, name: "Tuple", size: 64, align: 64, elements: !18, runtimeLang: DW_LANG_Julia, identifier: "140293563576864")
!18 = !{!19}
!19 = !DIBasicType(name: "Int64", size: 64, encoding: DW_ATE_unsigned)
!20 = !DICompositeType(tag: DW_TAG_structure_type, name: "#+", align: 8, elements: !0, runtimeLang: DW_LANG_Julia, identifier: "140293565276864")
!21 = !{!22, !23, !24}
!22 = !DILocalVariable(name: "#self#", arg: 2, scope: !7, file: !8, line: 6, type: !20)
!23 = !DILocalVariable(name: "A", arg: 3, scope: !7, file: !8, line: 6, type: !11)
!24 = !DILocalVariable(name: "B", arg: 4, scope: !7, file: !8, line: 6, type: !11)
!25 = !{!26, !26, i64 0}
!26 = !{!"jtbaa_gcframe", !27, i64 0}
!27 = !{!"jtbaa", !28, i64 0}
!28 = !{!"jtbaa"}
!29 = !DILocation(line: 6, scope: !7)
!30 = !{!31, !31, i64 0}
!31 = !{!"jtbaa_const", !27, i64 0}
!32 = !DILocation(line: 30, scope: !33, inlinedAt: !36)
!33 = distinct !DISubprogram(name: "size;", linkageName: "size", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!34 = !DIFile(filename: "REPL[1]", directory: ".")
!35 = !DISubroutineType(types: !0)
!36 = !DILocation(line: 98, scope: !37, inlinedAt: !39)
!37 = distinct !DISubprogram(name: "axes;", linkageName: "axes", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!38 = !DIFile(filename: "abstractarray.jl", directory: ".")
!39 = !DILocation(line: 188, scope: !40, inlinedAt: !42)
!40 = distinct !DISubprogram(name: "promote_shape;", linkageName: "promote_shape", scope: !41, file: !41, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!41 = !DIFile(filename: "indices.jl", directory: ".")
!42 = !DILocation(line: 7, scope: !7)
!43 = !DILocation(line: 479, scope: !44, inlinedAt: !46)
!44 = distinct !DISubprogram(name: "unchecked_oneto;", linkageName: "unchecked_oneto", scope: !45, file: !45, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!45 = !DIFile(filename: "range.jl", directory: ".")
!46 = !DILocation(line: 355, scope: !47, inlinedAt: !36)
!47 = distinct !DISubprogram(name: "map;", linkageName: "map", scope: !48, file: !48, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!48 = !DIFile(filename: "tuple.jl", directory: ".")
!49 = !{!27, !27, i64 0}
!50 = !{!51, !53}
!51 = !{!"jnoalias_const", !52}
!52 = !{!"jnoalias"}
!53 = !{!"jnoalias_stack", !52}
!54 = !{!55, !56, !57}
!55 = !{!"jnoalias_gcframe", !52}
!56 = !{!"jnoalias_data", !52}
!57 = !{!"jnoalias_typemd", !52}
!58 = !DILocation(line: 639, scope: !59, inlinedAt: !61)
!59 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !60, file: !60, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!60 = !DIFile(filename: "promotion.jl", directory: ".")
!61 = !DILocation(line: 1128, scope: !62, inlinedAt: !63)
!62 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !45, file: !45, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!63 = !DILocation(line: 313, scope: !64, inlinedAt: !66)
!64 = distinct !DISubprogram(name: "!=;", linkageName: "!=", scope: !65, file: !65, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!65 = !DIFile(filename: "operators.jl", directory: ".")
!66 = !DILocation(line: 196, scope: !40, inlinedAt: !39)
!67 = !DILocation(line: 83, scope: !68, inlinedAt: !70)
!68 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !69, file: !69, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!69 = !DIFile(filename: "int.jl", directory: ".")
!70 = !DILocation(line: 484, scope: !71, inlinedAt: !72)
!71 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !60, file: !60, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!72 = !DILocation(line: 49, scope: !73, inlinedAt: !74)
!73 = distinct !DISubprogram(name: "#1;", linkageName: "#1", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!74 = !DILocation(line: 1229, scope: !75, inlinedAt: !77)
!75 = distinct !DISubprogram(name: "_any;", linkageName: "_any", scope: !76, file: !76, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!76 = !DIFile(filename: "reduce.jl", directory: ".")
!77 = !DILocation(line: 1245, scope: !78, inlinedAt: !79)
!78 = distinct !DISubprogram(name: "any;", linkageName: "any", scope: !76, file: !76, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!79 = !DILocation(line: 49, scope: !80, inlinedAt: !81)
!80 = distinct !DISubprogram(name: "checked_dims;", linkageName: "checked_dims", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!81 = !DILocation(line: 14, scope: !82, inlinedAt: !83)
!82 = distinct !DISubprogram(name: "FixedSizeArray;", linkageName: "FixedSizeArray", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!83 = !DILocation(line: 23, scope: !82, inlinedAt: !84)
!84 = !DILocation(line: 868, scope: !85, inlinedAt: !86)
!85 = distinct !DISubprogram(name: "similar;", linkageName: "similar", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!86 = !DILocation(line: 867, scope: !85, inlinedAt: !87)
!87 = !DILocation(line: 76, scope: !88, inlinedAt: !89)
!88 = distinct !DISubprogram(name: "similar;", linkageName: "similar", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!89 = !DILocation(line: 897, scope: !90, inlinedAt: !92)
!90 = distinct !DISubprogram(name: "copy;", linkageName: "copy", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!91 = !DIFile(filename: "broadcast.jl", directory: ".")
!92 = !DILocation(line: 872, scope: !93, inlinedAt: !94)
!93 = distinct !DISubprogram(name: "materialize;", linkageName: "materialize", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!94 = !DILocation(line: 861, scope: !95, inlinedAt: !96)
!95 = distinct !DISubprogram(name: "broadcast_preserving_zero_d;", linkageName: "broadcast_preserving_zero_d", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!96 = !DILocation(line: 8, scope: !7)
!97 = !DILocation(line: 54, scope: !80, inlinedAt: !81)
!98 = !DILocation(line: 55, scope: !80, inlinedAt: !81)
!99 = !{!100, !100, i64 0}
!100 = !{!"jtbaa_tag", !101, i64 0}
!101 = !{!"jtbaa_data", !27, i64 0}
!102 = !{!103, !103, i64 0}
!103 = !{!"jtbaa_immut", !104, i64 0}
!104 = !{!"jtbaa_value", !101, i64 0}
!105 = !{!56}
!106 = !{!55, !53, !57, !51}
!107 = !DILocation(line: 639, scope: !59, inlinedAt: !108)
!108 = !DILocation(line: 50, scope: !109, inlinedAt: !110)
!109 = distinct !DISubprogram(name: "#2;", linkageName: "#2", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!110 = !DILocation(line: 1229, scope: !75, inlinedAt: !111)
!111 = !DILocation(line: 1245, scope: !78, inlinedAt: !112)
!112 = !DILocation(line: 50, scope: !80, inlinedAt: !81)
!113 = !DILocation(line: 57, scope: !80, inlinedAt: !81)
!114 = !DILocation(line: 58, scope: !80, inlinedAt: !81)
!115 = !DILocation(line: 525, scope: !116, inlinedAt: !81)
!116 = distinct !DISubprogram(name: "GenericMemory;", linkageName: "GenericMemory", scope: !117, file: !117, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!117 = !DIFile(filename: "boot.jl", directory: ".")
!118 = !DILocation(line: 527, scope: !116, inlinedAt: !81)
!119 = !{!51}
!120 = !{!55, !53, !56, !57}
!121 = !DILocation(line: 946, scope: !122, inlinedAt: !123)
!122 = distinct !DISubprogram(name: "broadcast_unalias;", linkageName: "broadcast_unalias", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!123 = !DILocation(line: 953, scope: !124, inlinedAt: !125)
!124 = distinct !DISubprogram(name: "preprocess;", linkageName: "preprocess", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!125 = !DILocation(line: 955, scope: !126, inlinedAt: !127)
!126 = distinct !DISubprogram(name: "preprocess_args;", linkageName: "preprocess_args", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!127 = !DILocation(line: 952, scope: !124, inlinedAt: !128)
!128 = !DILocation(line: 969, scope: !129, inlinedAt: !130)
!129 = distinct !DISubprogram(name: "copyto!;", linkageName: "copyto!", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!130 = !DILocation(line: 925, scope: !129, inlinedAt: !89)
!131 = !{i64 16}
!132 = !{i64 8}
!133 = !DILocation(line: 529, scope: !116, inlinedAt: !81)
!134 = !DILocation(line: 751, scope: !135, inlinedAt: !137)
!135 = distinct !DISubprogram(name: "objectid;", linkageName: "objectid", scope: !136, file: !136, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!136 = !DIFile(filename: "reflection.jl", directory: ".")
!137 = !DILocation(line: 1612, scope: !138, inlinedAt: !139)
!138 = distinct !DISubprogram(name: "dataids;", linkageName: "dataids", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!139 = !DILocation(line: 1589, scope: !140, inlinedAt: !141)
!140 = distinct !DISubprogram(name: "mightalias;", linkageName: "mightalias", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!141 = !DILocation(line: 1554, scope: !142, inlinedAt: !121)
!142 = distinct !DISubprogram(name: "unalias;", linkageName: "unalias", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!143 = !DILocation(line: 639, scope: !59, inlinedAt: !144)
!144 = !DILocation(line: 313, scope: !64, inlinedAt: !145)
!145 = !DILocation(line: 1596, scope: !146, inlinedAt: !139)
!146 = distinct !DISubprogram(name: "_isdisjoint;", linkageName: "_isdisjoint", scope: !38, file: !38, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!147 = !DILocation(line: 30, scope: !33, inlinedAt: !148)
!148 = !DILocation(line: 98, scope: !37, inlinedAt: !149)
!149 = !DILocation(line: 598, scope: !150, inlinedAt: !151)
!150 = distinct !DISubprogram(name: "newindexer;", linkageName: "newindexer", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!151 = !DILocation(line: 645, scope: !152, inlinedAt: !123)
!152 = distinct !DISubprogram(name: "extrude;", linkageName: "extrude", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!153 = !DILocation(line: 639, scope: !59, inlinedAt: !154)
!154 = !DILocation(line: 313, scope: !64, inlinedAt: !155)
!155 = !DILocation(line: 604, scope: !156, inlinedAt: !157)
!156 = distinct !DISubprogram(name: "_newindexer;", linkageName: "_newindexer", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!157 = !DILocation(line: 599, scope: !158, inlinedAt: !149)
!158 = distinct !DISubprogram(name: "shapeindexer;", linkageName: "shapeindexer", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!159 = !DILocation(line: 946, scope: !122, inlinedAt: !160)
!160 = !DILocation(line: 953, scope: !124, inlinedAt: !161)
!161 = !DILocation(line: 956, scope: !126, inlinedAt: !125)
!162 = !DILocation(line: 1589, scope: !140, inlinedAt: !163)
!163 = !DILocation(line: 1554, scope: !142, inlinedAt: !159)
!164 = !DILocation(line: 751, scope: !135, inlinedAt: !165)
!165 = !DILocation(line: 1612, scope: !138, inlinedAt: !162)
!166 = !DILocation(line: 639, scope: !59, inlinedAt: !167)
!167 = !DILocation(line: 313, scope: !64, inlinedAt: !168)
!168 = !DILocation(line: 1596, scope: !146, inlinedAt: !162)
!169 = !DILocation(line: 30, scope: !33, inlinedAt: !170)
!170 = !DILocation(line: 98, scope: !37, inlinedAt: !171)
!171 = !DILocation(line: 598, scope: !150, inlinedAt: !172)
!172 = !DILocation(line: 645, scope: !152, inlinedAt: !160)
!173 = !DILocation(line: 72, scope: !174, inlinedAt: !176)
!174 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !175, file: !175, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!175 = !DIFile(filename: "simdloop.jl", directory: ".")
!176 = !DILocation(line: 972, scope: !129, inlinedAt: !130)
!177 = !DILocation(line: 639, scope: !59, inlinedAt: !178)
!178 = !DILocation(line: 313, scope: !64, inlinedAt: !179)
!179 = !DILocation(line: 604, scope: !156, inlinedAt: !180)
!180 = !DILocation(line: 599, scope: !158, inlinedAt: !171)
!181 = !{!182, !182, i64 0}
!182 = !{!"jtbaa_memorylen", !183, i64 0}
!183 = !{!"jtbaa_array", !27, i64 0}
!184 = !{i64 0, i64 576460752303423487}
!185 = !{!57}
!186 = !{!55, !53, !56, !51}
!187 = !DILocation(line: 773, scope: !188, inlinedAt: !190)
!188 = distinct !DISubprogram(name: "ifelse;", linkageName: "ifelse", scope: !189, file: !189, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!189 = !DIFile(filename: "essentials.jl", directory: ".")
!190 = !DILocation(line: 588, scope: !191, inlinedAt: !192)
!191 = distinct !DISubprogram(name: "newindex;", linkageName: "newindex", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!192 = !DILocation(line: 644, scope: !193, inlinedAt: !194)
!193 = distinct !DISubprogram(name: "_broadcast_getindex;", linkageName: "_broadcast_getindex", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!194 = !DILocation(line: 674, scope: !195, inlinedAt: !196)
!195 = distinct !DISubprogram(name: "_getindex;", linkageName: "_getindex", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!196 = !DILocation(line: 650, scope: !193, inlinedAt: !197)
!197 = !DILocation(line: 610, scope: !198, inlinedAt: !199)
!198 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!199 = !DILocation(line: 973, scope: !200, inlinedAt: !201)
!200 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!201 = !DILocation(line: 77, scope: !174, inlinedAt: !176)
!202 = !DILocation(line: 364, scope: !203, inlinedAt: !204)
!203 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !189, file: !189, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!204 = !DILocation(line: 27, scope: !205, inlinedAt: !192)
!205 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!206 = !DILocation(line: 773, scope: !188, inlinedAt: !207)
!207 = !DILocation(line: 588, scope: !191, inlinedAt: !208)
!208 = !DILocation(line: 644, scope: !193, inlinedAt: !209)
!209 = !DILocation(line: 675, scope: !195, inlinedAt: !194)
!210 = !DILocation(line: 87, scope: !211, inlinedAt: !212)
!211 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !69, file: !69, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!212 = !DILocation(line: 54, scope: !213, inlinedAt: !214)
!213 = distinct !DISubprogram(name: "simd_index;", linkageName: "simd_index", scope: !175, file: !175, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!214 = !DILocation(line: 76, scope: !174, inlinedAt: !176)
!215 = !{!216, !216, i64 0}
!216 = !{!"jtbaa_arraybuf", !101, i64 0}
!217 = !DILocation(line: 364, scope: !203, inlinedAt: !218)
!218 = !DILocation(line: 27, scope: !205, inlinedAt: !208)
!219 = !DILocation(line: 678, scope: !220, inlinedAt: !221)
!220 = distinct !DISubprogram(name: "_broadcast_getindex_evalf;", linkageName: "_broadcast_getindex_evalf", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!221 = !DILocation(line: 651, scope: !193, inlinedAt: !197)
!222 = !DILocation(line: 212, scope: !223, inlinedAt: !225)
!223 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !224, file: !224, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!224 = !DIFile(filename: "genericmemory.jl", directory: ".")
!225 = !DILocation(line: 28, scope: !226, inlinedAt: !199)
!226 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !34, file: !34, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!227 = !DILocation(line: 213, scope: !223, inlinedAt: !225)
!228 = !{!229, !229, i64 0}
!229 = !{!"jtbaa_stack", !27, i64 0}
!230 = !{!53}
!231 = !{!55, !56, !57, !51}
!232 = !{i64 16, i64 0}
!233 = !{!"branch_weights", i32 1, i32 9}
!234 = !DILocation(line: 83, scope: !68, inlinedAt: !235)
!235 = !DILocation(line: 75, scope: !174, inlinedAt: !176)
!236 = distinct !{!236}
!237 = !DILocation(line: 479, scope: !44, inlinedAt: !238)
!238 = !DILocation(line: 355, scope: !47, inlinedAt: !239)
!239 = !DILocation(line: 98, scope: !37, inlinedAt: !240)
!240 = !DILocation(line: 497, scope: !241, inlinedAt: !242)
!241 = distinct !DISubprogram(name: "combine_axes;", linkageName: "combine_axes", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!242 = !DILocation(line: 240, scope: !243, inlinedAt: !244)
!243 = distinct !DISubprogram(name: "_axes;", linkageName: "_axes", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!244 = !DILocation(line: 238, scope: !245, inlinedAt: !246)
!245 = distinct !DISubprogram(name: "axes;", linkageName: "axes", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!246 = !DILocation(line: 862, scope: !95, inlinedAt: !96)
!247 = !DILocation(line: 639, scope: !59, inlinedAt: !248)
!248 = !DILocation(line: 1128, scope: !62, inlinedAt: !249)
!249 = !DILocation(line: 530, scope: !250, inlinedAt: !251)
!250 = distinct !DISubprogram(name: "_bcsm;", linkageName: "_bcsm", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!251 = !DILocation(line: 528, scope: !252, inlinedAt: !253)
!252 = distinct !DISubprogram(name: "_bcs1;", linkageName: "_bcs1", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!253 = !DILocation(line: 522, scope: !254, inlinedAt: !255)
!254 = distinct !DISubprogram(name: "_bcs;", linkageName: "_bcs", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!255 = !DILocation(line: 516, scope: !256, inlinedAt: !240)
!256 = distinct !DISubprogram(name: "broadcast_shape;", linkageName: "broadcast_shape", scope: !91, file: !91, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!257 = !DILocation(line: 41, scope: !258, inlinedAt: !251)
!258 = distinct !DISubprogram(name: "LazyString;", linkageName: "LazyString", scope: !259, file: !259, type: !35, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
!259 = !DIFile(filename: "strings/lazy.jl", directory: ".")
!260 = !{!261, !261, i64 0}
!261 = !{!"jtbaa_mutab", !104, i64 0}
!262 = distinct !{!262, !263, !264, !265, !266}
!263 = !{!"llvm.loop.unroll.disable"}
!264 = !{!"llvm.loop.vectorize.enable", i1 false}
!265 = !{!"llvm.loop.licm_versioning.disable"}
!266 = !{!"llvm.loop.distribute.enable", i1 false}
!267 = distinct !{!267, !263, !264, !265, !266}
!268 = !{i64 56}
!269 = !{!53, !56}
!270 = !{!55, !57, !51}

this is the bad IR. From an rr trace I deduced that the 16th slot is where we get a corrupted value.

I haven't figured out just yet as to why, but
store ptr %.unpack.postloop, ptr %gc_slot_addr16, align 16 is the store into the gc frame, and it's the buffer pointer of an array, specifically the buffer of the arry we strop in the gc frame just below.

I haven't followed the IR just yet to figure out why we decided to do this store.
Also given that we know what function is doing it might be worth to try and reduce it.
I've had success with calling the reproducer and then running a GC, that is because this doesn't cause memory corruption unless we run a GC while having the badly codegenned function in a frame above.

from julia.

gbaraldi avatar gbaraldi commented on June 20, 2024 1

I've minimized this a bit further with

@inline function mybroadcast_preserving_zero_d(f, As...)
           bc = Base.broadcasted(f, As...)
           r = Base.materialize(bc)
           GC.gc()
           return length(axes(bc)) == 0 ? fill!(similar(bc, typeof(r)), r) : r
       end

function myplus(A::AbstractArray, B::AbstractArray)
           Base.promote_shape(A, B)
           mybroadcast_preserving_zero_d(+, A, B)
       end
myplus(data[1],data[2])

instead of the loop

from julia.

Zentrik avatar Zentrik commented on June 20, 2024

rr trace should be here for 1.11-beta1, https://julialang-dumps.s3.amazonaws.com/reports/2024-04-26T09-21-10-Zentrik.tar.zst.

from julia.

nsajko avatar nsajko commented on June 20, 2024

I tried to reduce the reproducer by changing the FixedSizeArrays module into a simpler, FixedSizeVectors module. Interestingly, this simpler example isn't a reproducer:

module FixedSizeVectors

struct Internal end

struct FixedSizeVector{T} <: DenseVector{T}
    mem::Memory{T}
    function FixedSizeVector{T}(::Internal, mem::Memory{T}) where {T}
        new{T}(mem)
    end
end

function FixedSizeVector{T}(::UndefInitializer, size::Tuple{Int}) where {T}
    FixedSizeVector{T}(Internal(), Memory{T}(undef, size))
end
function FixedSizeVector{T}(::UndefInitializer, size::Int) where {T}
    FixedSizeVector{T,N}(undef, (size,))
end

Base.IndexStyle(::Type{<:FixedSizeVector}) = IndexLinear()
Base.getindex(A::FixedSizeVector, i::Int) = A.mem[i]
Base.setindex!(A::FixedSizeVector, v, i::Int) = A.mem[i] = v

Base.size(a::FixedSizeVector) = (length(a.mem),)

function Base.similar(::FixedSizeVector, ::Type{S}, size::Tuple{Int}) where {S}
    FixedSizeVector{S}(undef, size)
end

# broadcasting

function Base.BroadcastStyle(::Type{<:FixedSizeVector})
    Broadcast.ArrayStyle{FixedSizeVector}()
end

function Base.similar(
    bc::Broadcast.Broadcasted{Broadcast.ArrayStyle{FixedSizeVector}},
    ::Type{E},
) where {E}
    similar(FixedSizeVector{E}, axes(bc))
end

# helper functions

parent_type(::Type{FixedSizeVector{T}}) where {T} = Memory{T}

memory_of(m::Memory) = m
memory_of(f::FixedSizeVector) = f.mem

first_linear_index(a) = first(eachindex(IndexLinear(), a))

axes_are_one_based(axes) = all(isone  first, axes)

# converting constructors for copying other array types

function FixedSizeVector{T}(src::AbstractVector{S}) where {T,S}
    axs = axes(src)
    if !axes_are_one_based(axs)
        throw(DimensionMismatch("source array has a non-one-based indexing axis"))
    end
    size = map(length, axs)::Tuple{Int}
    dst = FixedSizeVector{T}(undef, size)
    copyto!(dst, src)::FixedSizeVector{T}
end

FixedSizeVector(a::AbstractVector{T}) where {T,N} = FixedSizeVector{T}(a)

# conversion

Base.convert(::Type{T}, a::T) where {T<:FixedSizeVector} = a
Base.convert(::Type{T}, a::AbstractVector) where {T<:FixedSizeVector} = T(a)::T

end # module FixedSizeVectors


# creates nested vectors
rand_nested_vec(::Tuple{}) = rand()
function rand_nested_vec(size::Tuple{Vararg{Int}})
  [rand_nested_vec(Base.tail(size)) for _  Base.OneTo(first(size))]::Vector
end

# converts nested vectors to other `AbstractVector` types
recursive_array_convert(::Type{T}) where {T} = a -> recursive_array_convert(T, a)
recursive_array_convert(::Type, a) = a
function recursive_array_convert(::Type{T}, a::AbstractVector) where {T}
  t = map(recursive_array_convert(T), a)
  T(t)::T
end

f(a) = map(+, a, a)

data = recursive_array_convert(FixedSizeVectors.FixedSizeVector, rand_nested_vec((100, 10, 100)));

iter_cnt = 1000  # when lowered to, e.g., 30, the bug doesn't reproduce each time

for _  1:iter_cnt
  f(data)
end

from julia.

Zentrik avatar Zentrik commented on June 20, 2024

Btw there is an automatic reduction tool https://github.com/maleadt/creduce_julia. I've never used it, but seems interesting.

from julia.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.