-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
segfault in jl_datatype_layout
while constructing Memory
#54266
Comments
rr trace should be here for 1.11-beta1, https://julialang-dumps.s3.amazonaws.com/reports/2024-04-26T09-21-10-Zentrik.tar.zst. |
I tried to reduce the reproducer by changing the 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 |
Btw there is an automatic reduction tool https://github.com/maleadt/creduce_julia. I've never used it, but seems interesting. |
I'm running creduce on it ;) |
Creduce didn't do it right, but looking at it. We put some garbage in the GC roots. ; 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 I haven't followed the IR just yet to figure out why we decided to do this store. |
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 |
…ived Pointer (#54335) Fixes #54266, I've not yet minimized something to put into a test but in any case we can add the large test since it executes quite quickly. This also enables IR verification with `Strong=true` when building with assertions, this would've caught this bug much earlier. (cherry picked from commit 9d59ecc)
…ived Pointer (JuliaLang#54335) Fixes JuliaLang#54266, I've not yet minimized something to put into a test but in any case we can add the large test since it executes quite quickly. This also enables IR verification with `Strong=true` when building with assertions, this would've caught this bug much earlier.
Reproducer, for both v1.11.0-beta1 and nightly:
Backtrace with
-g2 --check-bounds=yes
:The text was updated successfully, but these errors were encountered: