Skip to content
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

Enzyme crashes with MeasureTheory.logdensity #126

Closed
sethaxen opened this issue Sep 3, 2021 · 2 comments
Closed

Enzyme crashes with MeasureTheory.logdensity #126

sethaxen opened this issue Sep 3, 2021 · 2 comments
Assignees

Comments

@sethaxen
Copy link
Collaborator

sethaxen commented Sep 3, 2021

Calling autodiff on MeasureTheory.logdensity for a multivariate distribution causes Enzyme (and Julia) to crash. Here is a MWE (open details to see the huge stacktrace):

julia> using MeasureTheory, Enzyme

julia> d = Normal()^5
Normal() ^ 5

julia> x = rand(d)
5-element Vector{Float64}:
 -0.714839309237649
 -0.11854994590939029
  0.4096756581544794
 -0.8549528606231284
 -1.8390113461805115

julia> logdensity(d, x)
-2.402895298929556

julia> ∂x = zero(x);

julia> Enzyme.autodiff(logdensity, Active, Const(d), Duplicated(x, ∂x))
┌ Warning: ("primal differentiating jl_invoke call without split mode", Base.var"#mapreduce#673", MethodInstance for var"#mapreduce#673"(::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(mapreduce), ::Function, ::Function, ::MappedArrays.ReadonlyMappedArray{Normal{(), Tuple{}}, 1, FillArrays.Fill{Normal{(), Tuple{}}, 1, Tuple{Base.OneTo{Int64}}}, typeof(identity)}, ::Vararg{Union{Base.AbstractBroadcasted, AbstractArray}, N} where N), Any[Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}(), mapreduce, MeasureBase.logdensity, +, [Normal(), Normal(), Normal(), Normal(), Normal()], [-0.714839309237649, -0.11854994590939029, 0.4096756581544794, -0.8549528606231284, -1.8390113461805115]])
└ @ Enzyme.Compiler ~/.julia/packages/Enzyme/afnXq/src/compiler.jl:353
┌ Warning: ("done primal differentiating jl_invoke call without split mode", Base.var"#mapreduce#673", MethodInstance for var"#mapreduce#673"(::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(mapreduce), ::Function, ::Function, ::MappedArrays.ReadonlyMappedArray{Normal{(), Tuple{}}, 1, FillArrays.Fill{Normal{(), Tuple{}}, 1, Tuple{Base.OneTo{Int64}}}, typeof(identity)}, ::Vararg{Union{Base.AbstractBroadcasted, AbstractArray}, N} where N), Any[Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}(), mapreduce, MeasureBase.logdensity, +, [Normal(), Normal(), Normal(), Normal(), Normal()], [-0.714839309237649, -0.11854994590939029, 0.4096756581544794, -0.8549528606231284, -1.8390113461805115]], -2.402895298929556)
└ @ Enzyme.Compiler ~/.julia/packages/Enzyme/afnXq/src/compiler.jl:375
┌ Warning: ("reverse differentiating jl_invoke call without split mode", Base.var"#mapreduce#673", MethodInstance for var"#mapreduce#673"(::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, ::typeof(mapreduce), ::Function, ::Function, ::MappedArrays.ReadonlyMappedArray{Normal{(), Tuple{}}, 1, FillArrays.Fill{Normal{(), Tuple{}}, 1, Tuple{Base.OneTo{Int64}}}, typeof(identity)}, ::Vararg{Union{Base.AbstractBroadcasted, AbstractArray}, N} where N))
└ @ Enzyme.Compiler ~/.julia/packages/Enzyme/afnXq/src/compiler.jl:404
; ModuleID = 'text'
source_filename = "text"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
target triple = "x86_64-apple-darwin18.7.0"

@exception.4 = private unnamed_addr constant [10 x i8] c"exception\00", align 1
@exception.7 = private unnamed_addr constant [13 x i8] c"bounds error\00", align 1

; Function Attrs: noinline noreturn
define internal fastcc noalias nonnull align 536870912 dereferenceable(4294967295) {} addrspace(10)* @julia_throw_overflowerr_binaryop_3602({} addrspace(10)* nonnull align 8 %0, i64 signext %1, i64 signext %2) unnamed_addr #0 !dbg !46 {
top:
  %3 = call {}*** @julia.ptls_states()
  %4 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %1), !dbg !48
  %5 = call nonnull {} addrspace(10)* bitcast ({}* (i64)* @jl_box_int64 to {} addrspace(10)* (i64)*)(i64 signext %2), !dbg !48
  %6 = call cc37 nonnull {} addrspace(10)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* @jl_f__call_latest to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* null, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4602690880 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %4, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4640869200 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4640869200 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %5, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4640869232 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 4594847088 to {}*) to {} addrspace(10)*)), !dbg !48
  call void @llvm.trap() #10, !dbg !53
  unreachable, !dbg !53
}

; Function Attrs: readnone
declare {}*** @julia.ptls_states() local_unnamed_addr #1

declare nonnull {} addrspace(10)* @jl_f__call_latest({} addrspace(10)*, {} addrspace(10)**, i32) local_unnamed_addr #2

; Function Attrs: cold noreturn nounwind
declare void @llvm.trap() #3

; Function Attrs: noinline noreturn
define internal fastcc noalias nonnull align 536870912 dereferenceable(4294967295) {} addrspace(10)* @julia_throw_boundserror_3608() unnamed_addr #0 !dbg !54 {
top:
  %0 = call {}*** @julia.ptls_states()
  call void @llvm.trap() #10, !dbg !55
  unreachable, !dbg !55
}

; Function Attrs: allocsize(1)
declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) local_unnamed_addr #4

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p10i8.p11i8.i64(i8 addrspace(10)* noalias nocapture writeonly, i8 addrspace(11)* noalias nocapture readonly, i64, i1 immarg) #5

define internal fastcc nonnull align 16 dereferenceable(40) {} addrspace(10)* @julia_collect_to__3610({} addrspace(10)* nonnull readonly returned align 16 dereferenceable(40) %0, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %1, { { [1 x i64], i64 }, i64 } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(24) %2) unnamed_addr !dbg !56 {
top:
  %3 = alloca [1 x i64], align 8
  %4 = call {}*** @julia.ptls_states()
  %.sroa.0104.0..sroa_idx = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 } addrspace(11)* %2, i64 0, i32 0, i32 0, i64 0, !dbg !57
  %.sroa.0104.0.copyload = load i64, i64 addrspace(11)* %.sroa.0104.0..sroa_idx, align 8, !dbg !57
  %.sroa.6.0..sroa_idx107 = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 } addrspace(11)* %2, i64 0, i32 0, i32 1, !dbg !57
  %.sroa.6.0.copyload = load i64, i64 addrspace(11)* %.sroa.6.0..sroa_idx107, align 8, !dbg !57
  %.not.not217 = icmp eq i64 %.sroa.6.0.copyload, %.sroa.0104.0.copyload, !dbg !58
  br i1 %.not.not217, label %L100, label %L23.lr.ph, !dbg !77

L23.lr.ph:                                        ; preds = %top
  %.sroa.8.0..sroa_idx110 = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 } addrspace(11)* %2, i64 0, i32 1, !dbg !57
  %.sroa.8.0.copyload = load i64, i64 addrspace(11)* %.sroa.8.0..sroa_idx110, align 8, !dbg !57
  %5 = getelementptr inbounds [1 x i64], [1 x i64]* %3, i64 0, i64 0, !dbg !78
  %6 = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* %1, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !87
  %7 = load i64, i64 addrspace(11)* %6, align 8, !dbg !98, !tbaa !101, !invariant.load !4
  %8 = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* %1, i64 0, i32 0, i64 0, i32 1, !dbg !105
  %9 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8 unordered, align 8, !dbg !105
  %10 = bitcast {} addrspace(10)* %9 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)*, !dbg !108
  %11 = addrspacecast { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)* %10 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !108
  %12 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %11, i64 0, i32 1, !dbg !108
  %13 = bitcast {} addrspace(10)* %9 to double addrspace(13)* addrspace(10)*, !dbg !113
  %14 = addrspacecast double addrspace(13)* addrspace(10)* %13 to double addrspace(13)* addrspace(11)*, !dbg !113
  %15 = bitcast {} addrspace(10)* %0 to double addrspace(13)* addrspace(10)*, !dbg !115
  %16 = addrspacecast double addrspace(13)* addrspace(10)* %15 to double addrspace(13)* addrspace(11)*, !dbg !115
  %17 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %16, align 16, !dbg !115
  br label %L23, !dbg !77

L23:                                              ; preds = %L23.lr.ph, %L96
  %.in = phi i64 [ %.sroa.6.0.copyload, %L23.lr.ph ], [ %18, %L96 ]
  %value_phi219 = phi i64 [ 2, %L23.lr.ph ], [ %34, %L96 ]
  %.sroa.8.0218 = phi i64 [ %.sroa.8.0.copyload, %L23.lr.ph ], [ %28, %L96 ]
  %18 = add i64 %.in, 1, !dbg !61
  %19 = icmp slt i64 %18, 1, !dbg !118
  %20 = icmp sgt i64 %18, %7, !dbg !118
  %21 = or i1 %19, %20, !dbg !96
  br i1 %21, label %L34, label %L47, !dbg !96

L34:                                              ; preds = %L23
  store i64 %18, i64* %5, align 8, !dbg !97, !tbaa !119
  %22 = call fastcc nonnull {} addrspace(10)* @julia_throw_boundserror_3608() #10, !dbg !96
  unreachable, !dbg !96

L47:                                              ; preds = %L23
  %23 = add i64 %.sroa.8.0218, -1, !dbg !121
  %24 = load i64, i64 addrspace(11)* %12, align 8, !dbg !124, !tbaa !125, !range !128
  %.not = icmp ult i64 %23, %24, !dbg !129
  br i1 %.not, label %L96, label %L47.L100_crit_edge, !dbg !110

L96:                                              ; preds = %L47
  %25 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %14, align 8, !dbg !132, !tbaa !133, !nonnull !4
  %26 = getelementptr inbounds double, double addrspace(13)* %25, i64 %23, !dbg !132
  %27 = load double, double addrspace(13)* %26, align 8, !dbg !132, !tbaa !135
  %28 = add i64 %.sroa.8.0218, 1, !dbg !138
  %29 = fneg double %27, !dbg !140
  %30 = fmul double %27, %29, !dbg !140
  %31 = fmul double %30, 5.000000e-01, !dbg !149
  %32 = add i64 %value_phi219, -1, !dbg !153
  %33 = getelementptr inbounds double, double addrspace(13)* %17, i64 %32, !dbg !153
  store double %31, double addrspace(13)* %33, align 8, !dbg !153, !tbaa !135
  %34 = add i64 %value_phi219, 1, !dbg !154
  %.not.not = icmp eq i64 %18, %.sroa.0104.0.copyload, !dbg !58
  br i1 %.not.not, label %L2.L100_crit_edge, label %L23, !dbg !77

L2.L100_crit_edge:                                ; preds = %L96
  store i64 %.sroa.0104.0.copyload, i64* %5, align 8, !dbg !97, !tbaa !119
  br label %L100, !dbg !77

L47.L100_crit_edge:                               ; preds = %L47
  store i64 %18, i64* %5, align 8, !dbg !97, !tbaa !119
  br label %L100, !dbg !110

L100:                                             ; preds = %L47.L100_crit_edge, %L2.L100_crit_edge, %top
  ret {} addrspace(10)* %0, !dbg !156
}

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #5

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #5

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #5

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p0i8.p11i8.i64(i8* noalias nocapture writeonly, i8 addrspace(11)* noalias nocapture readonly, i64, i1 immarg) #5

define internal fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %0) unnamed_addr !dbg !157 {
top:
  %1 = alloca { { [1 x i64], i64 }, i64 }, align 8
  %2 = call {}*** @julia.ptls_states()
  %3 = load i64*, i64* addrspace(11)* bitcast ({}* addrspace(11)* getelementptr inbounds ({}*, {}* addrspace(11)* addrspacecast ({}** inttoptr (i64 5607029968 to {}**) to {}* addrspace(11)*), i64 3) to i64* addrspace(11)*), align 8, !dbg !158, !tbaa !101, !invariant.load !4
  %4 = load i64, i64* %3, align 8, !dbg !158, !tbaa !101, !invariant.load !4
  %.not = icmp eq i64 %4, 0, !dbg !158
  br i1 %.not, label %fail, label %pass, !dbg !158

L8:                                               ; preds = %pass
  call void @llvm.trap() #10, !dbg !158
  unreachable, !dbg !158

L11:                                              ; preds = %pass
  %5 = icmp ugt i64 %4, 1, !dbg !158
  br i1 %5, label %pass2, label %fail1, !dbg !158

L18:                                              ; preds = %pass2
  call void @llvm.trap() #10, !dbg !158
  unreachable, !dbg !158

L26:                                              ; preds = %pass2
  %6 = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* %0, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !168
  %7 = load i64, i64 addrspace(11)* %6, align 8, !dbg !188, !tbaa !101, !invariant.load !4
  %8 = icmp sgt i64 %7, 0, !dbg !188
  %9 = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* %0, i64 0, i32 0, i64 0, i32 1, !dbg !193
  br i1 %8, label %L67, label %L26.L94_crit_edge, !dbg !194

L26.L94_crit_edge:                                ; preds = %L26
  %.phi.trans.insert108 = bitcast {} addrspace(10)* addrspace(11)* %9 to {} addrspace(10)* addrspace(10)* addrspace(11)*, !dbg !193
  %.pre = load atomic {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)* addrspace(11)* %.phi.trans.insert108 unordered, align 8, !dbg !193, !tbaa !101, !invariant.load !4
  br label %L94, !dbg !194

L67:                                              ; preds = %L26
  %10 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %9 unordered, align 8, !dbg !195, !tbaa !101, !invariant.load !4, !nonnull !4, !dereferenceable !198, !align !199
  %11 = bitcast {} addrspace(10)* %10 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)*, !dbg !200
  %12 = addrspacecast { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)* %11 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !200
  %13 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %12, i64 0, i32 1, !dbg !200
  %14 = load i64, i64 addrspace(11)* %13, align 8, !dbg !200, !tbaa !125, !range !128
  %.not99 = icmp eq i64 %14, 0, !dbg !206
  %15 = bitcast {} addrspace(10)* %10 to {} addrspace(10)* addrspace(10)*, !dbg !202
  br i1 %.not99, label %L94, label %L77, !dbg !202

L77:                                              ; preds = %L67
  %16 = bitcast {} addrspace(10)* %10 to double addrspace(13)* addrspace(10)*, !dbg !208
  %17 = addrspacecast double addrspace(13)* addrspace(10)* %16 to double addrspace(13)* addrspace(11)*, !dbg !208
  %18 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %17, align 16, !dbg !208, !tbaa !133, !nonnull !4
  %19 = load double, double addrspace(13)* %18, align 8, !dbg !208, !tbaa !135
  br label %L94, !dbg !174

L94:                                              ; preds = %L26.L94_crit_edge, %L67, %L77
  %20 = phi {} addrspace(10)* addrspace(10)* [ %.pre, %L26.L94_crit_edge ], [ %15, %L77 ], [ %15, %L67 ], !dbg !193
  %value_phi6 = phi i1 [ false, %L26.L94_crit_edge ], [ true, %L77 ], [ false, %L67 ]
  %value_phi7 = phi double [ undef, %L26.L94_crit_edge ], [ %19, %L77 ], [ undef, %L67 ]
  %.sroa.049.sroa.0.0..sroa.049.0..sroa_cast.sroa_idx = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 }* %1, i64 0, i32 0, i32 0, i64 0, !dbg !187
  store i64 %7, i64* %.sroa.049.sroa.0.0..sroa.049.0..sroa_cast.sroa_idx, align 8, !dbg !187
  %.sroa.049.sroa.5.0..sroa.049.0..sroa_cast.sroa_idx92 = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 }* %1, i64 0, i32 0, i32 1, !dbg !187
  store i64 1, i64* %.sroa.049.sroa.5.0..sroa.049.0..sroa_cast.sroa_idx92, align 8, !dbg !187
  %.sroa.554.0..sroa_idx55 = getelementptr inbounds { { [1 x i64], i64 }, i64 }, { { [1 x i64], i64 }, i64 }* %1, i64 0, i32 1, !dbg !187
  store i64 2, i64* %.sroa.554.0..sroa_idx55, align 8, !dbg !187
  %21 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %20, i64 3, !dbg !193
  %22 = bitcast {} addrspace(10)* addrspace(10)* %21 to i64 addrspace(10)*, !dbg !193
  %23 = addrspacecast i64 addrspace(10)* %22 to i64 addrspace(11)*, !dbg !193
  %24 = load i64, i64 addrspace(11)* %23, align 8, !dbg !193, !tbaa !210, !range !128
  %.not97 = icmp slt i64 %24, %7, !dbg !193
  %25 = select i1 %.not97, i64 %24, i64 %7, !dbg !193
  %26 = icmp sgt i64 %25, 0, !dbg !193
  %27 = select i1 %26, i64 %25, i64 0, !dbg !193
  %28 = call nonnull {} addrspace(10)* @jl_alloc_array_1d({} addrspace(10)* addrspacecast ({}* inttoptr (i64 4598053344 to {}*) to {} addrspace(10)*), i64 %27), !dbg !193
  br i1 %value_phi6, label %L133, label %L116, !dbg !212

L116:                                             ; preds = %L94
  ret {} addrspace(10)* %28, !dbg !213

L133:                                             ; preds = %L94
  %29 = bitcast {} addrspace(10)* %28 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)*, !dbg !214
  %30 = addrspacecast { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(10)* %29 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !214
  %31 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %30, i64 0, i32 1, !dbg !214
  %32 = load i64, i64 addrspace(11)* %31, align 8, !dbg !214, !tbaa !125, !range !128
  %.not98 = icmp eq i64 %32, 0, !dbg !214
  br i1 %.not98, label %oob, label %idxend, !dbg !214

fail:                                             ; preds = %top
  call void @llvm.trap() #10, !dbg !158
  unreachable, !dbg !158

pass:                                             ; preds = %top
  %33 = getelementptr inbounds i64, i64* %3, i64 1, !dbg !158
  %34 = bitcast i64* %33 to {} addrspace(10)**, !dbg !158
  %35 = addrspacecast {} addrspace(10)** %34 to {} addrspace(10)* addrspace(11)*, !dbg !158
  %36 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %35, align 8, !dbg !158, !tbaa !101, !invariant.load !4
  %.not95 = icmp eq {} addrspace(10)* %36, addrspacecast ({}* inttoptr (i64 4598053344 to {}*) to {} addrspace(10)*), !dbg !158
  %.not101 = icmp eq {} addrspace(10)* %36, addrspacecast ({}* inttoptr (i64 6410786256 to {}*) to {} addrspace(10)*)
  %or.cond = or i1 %.not95, %.not101, !dbg !158
  br i1 %or.cond, label %L11, label %L8, !dbg !158

fail1:                                            ; preds = %L11
  call void @llvm.trap() #10, !dbg !158
  unreachable, !dbg !158

pass2:                                            ; preds = %L11
  %37 = getelementptr inbounds i64, i64* %3, i64 2, !dbg !158
  %38 = bitcast i64* %37 to {} addrspace(10)**, !dbg !158
  %39 = addrspacecast {} addrspace(10)** %38 to {} addrspace(10)* addrspace(11)*, !dbg !158
  %40 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %39, align 8, !dbg !158, !tbaa !101, !invariant.load !4
  %.not96 = icmp eq {} addrspace(10)* %40, addrspacecast ({}* inttoptr (i64 4598053344 to {}*) to {} addrspace(10)*), !dbg !158
  %.not100 = icmp eq {} addrspace(10)* %40, addrspacecast ({}* inttoptr (i64 6410786256 to {}*) to {} addrspace(10)*)
  %or.cond102 = or i1 %.not96, %.not100, !dbg !158
  br i1 %or.cond102, label %L26, label %L18, !dbg !158

oob:                                              ; preds = %L133
  call void @llvm.trap() #10, !dbg !214
  unreachable, !dbg !214

idxend:                                           ; preds = %L133
  %41 = fneg double %value_phi7, !dbg !219
  %42 = fmul double %value_phi7, %41, !dbg !219
  %43 = fmul double %42, 5.000000e-01, !dbg !219
  %44 = bitcast {} addrspace(10)* %28 to double addrspace(13)* addrspace(10)*, !dbg !214
  %45 = addrspacecast double addrspace(13)* addrspace(10)* %44 to double addrspace(13)* addrspace(11)*, !dbg !214
  %46 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %45, align 8, !dbg !214, !tbaa !133, !nonnull !4
  store double %43, double addrspace(13)* %46, align 8, !dbg !214, !tbaa !135
  %47 = addrspacecast { { [1 x i64], i64 }, i64 }* %1 to { { [1 x i64], i64 }, i64 } addrspace(11)*, !dbg !220
  %48 = call fastcc nonnull {} addrspace(10)* @julia_collect_to__3610({} addrspace(10)* nonnull readonly align 16 dereferenceable(40) %28, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %0, { { [1 x i64], i64 }, i64 } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(24) %47), !dbg !220
  ret {} addrspace(10)* %48, !dbg !218
}

; Function Attrs: noinline
define internal fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %0, i64 signext %1, i64 signext %2) unnamed_addr #6 !dbg !221 {
top:
  %3 = call {}*** @julia.ptls_states()
  %.not = icmp eq i64 %1, %2, !dbg !222
  br i1 %.not, label %L3, label %L5, !dbg !224

L3:                                               ; preds = %top
  %4 = add i64 %1, -1, !dbg !225
  %5 = bitcast {} addrspace(10)* %0 to double addrspace(13)* addrspace(10)*, !dbg !225
  %6 = addrspacecast double addrspace(13)* addrspace(10)* %5 to double addrspace(13)* addrspace(11)*, !dbg !225
  %7 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %6, align 16, !dbg !225, !tbaa !133, !nonnull !4
  %8 = getelementptr inbounds double, double addrspace(13)* %7, i64 %4, !dbg !225
  %9 = load double, double addrspace(13)* %8, align 8, !dbg !225, !tbaa !135
  ret double %9, !dbg !228

L5:                                               ; preds = %top
  %10 = add i64 1024, %1, !dbg !229
  %.not19 = icmp sgt i64 %10, %2, !dbg !232
  br i1 %.not19, label %L8, label %L68, !dbg !231

L8:                                               ; preds = %L5
  %11 = add i64 %1, -1, !dbg !236
  %12 = bitcast {} addrspace(10)* %0 to double addrspace(13)* addrspace(10)*, !dbg !236
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !236
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 16, !dbg !236, !tbaa !133, !nonnull !4
  %15 = getelementptr inbounds double, double addrspace(13)* %14, i64 %11, !dbg !236
  %16 = load double, double addrspace(13)* %15, align 8, !dbg !236, !tbaa !135
  %17 = getelementptr inbounds double, double addrspace(13)* %14, i64 %1, !dbg !238
  %18 = load double, double addrspace(13)* %17, align 8, !dbg !238, !tbaa !135
  %19 = fadd double %16, %18, !dbg !240
  %20 = add i64 %1, 2, !dbg !243
  %.not20 = icmp sgt i64 %20, %2, !dbg !248
  %21 = add i64 %1, 1, !dbg !258
  %22 = select i1 %.not20, i64 %21, i64 %2, !dbg !252
  %23 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %22, i64 %20), !dbg !260
  %24 = extractvalue { i64, i1 } %23, 0, !dbg !260
  %25 = extractvalue { i64, i1 } %23, 1, !dbg !260
  br i1 %25, label %L22, label %L25, !dbg !269

L22:                                              ; preds = %L8
  %26 = call fastcc nonnull {} addrspace(10)* @julia_throw_overflowerr_binaryop_3602({} addrspace(10)* nonnull align 8 addrspacecast ({}* inttoptr (i64 4735650344 to {}*) to {} addrspace(10)*), i64 signext %22, i64 signext %20) #10, !dbg !269
  unreachable, !dbg !269

L25:                                              ; preds = %L8
  %27 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %24, i64 1), !dbg !270
  %28 = extractvalue { i64, i1 } %27, 0, !dbg !270
  %29 = extractvalue { i64, i1 } %27, 1, !dbg !270
  br i1 %29, label %L29, label %L34, !dbg !274

L29:                                              ; preds = %L25
  %30 = call fastcc nonnull {} addrspace(10)* @julia_throw_overflowerr_binaryop_3602({} addrspace(10)* nonnull align 16 addrspacecast ({}* inttoptr (i64 4735454672 to {}*) to {} addrspace(10)*), i64 signext %24, i64 signext 1) #10, !dbg !274
  unreachable, !dbg !274

L34:                                              ; preds = %L25
  %31 = icmp slt i64 %28, 1, !dbg !275
  br i1 %31, label %L66, label %L41, !dbg !276

L41:                                              ; preds = %L34, %L41
  %value_phi224 = phi i64 [ %36, %L41 ], [ 0, %L34 ]
  %value_phi23 = phi double [ %35, %L41 ], [ %19, %L34 ]
  %32 = add i64 %21, %value_phi224, !dbg !277
  %33 = getelementptr inbounds double, double addrspace(13)* %14, i64 %32, !dbg !277
  %34 = load double, double addrspace(13)* %33, align 8, !dbg !277, !tbaa !135
  %35 = fadd fast double %value_phi23, %34, !dbg !281
  %36 = add nuw nsw i64 %value_phi224, 1, !dbg !283
  %exitcond.not = icmp eq i64 %36, %28, !dbg !285
  br i1 %exitcond.not, label %L66, label %L41, !dbg !286, !llvm.loop !287

L66:                                              ; preds = %L41, %L34
  %value_phi5 = phi double [ %19, %L34 ], [ %35, %L41 ]
  ret double %value_phi5, !dbg !288

L68:                                              ; preds = %L5
  %37 = add i64 %2, %1, !dbg !289
  %38 = ashr i64 %37, 1, !dbg !291
  %39 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %0, i64 signext %1, i64 signext %38) #6, !dbg !294
  %40 = add nsw i64 %38, 1, !dbg !295
  %41 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %0, i64 signext %40, i64 signext %2) #6, !dbg !296
  %42 = fadd double %39, %41, !dbg !297
  ret double %42, !dbg !298
}

; Function Attrs: nounwind readnone speculatable willreturn
declare { i64, i1 } @llvm.ssub.with.overflow.i64(i64, i64) #7

; Function Attrs: nounwind readnone speculatable willreturn
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64) #7

; Function Attrs: inaccessiblememonly
define internal noalias nonnull align 8 dereferenceable(8) {}* @jl_box_int64(i64 signext %0) unnamed_addr #8 !dbg !299 {
top:
  %1 = call dereferenceable_or_null(16) i8* @malloc(i64 16), !dbg !300
  %2 = load i64, i64* bitcast ({}* ()* @jl_int64_type to i64*), align 4, !dbg !307
  %3 = or i64 %2, 3, !dbg !314
  %4 = bitcast i8* %1 to i64*, !dbg !313
  store i64 %3, i64* %4, align 8, !dbg !313, !tbaa !317
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !318
  %6 = bitcast i8* %5 to i64*, !dbg !322
  store i64 %0, i64* %6, align 8, !dbg !322, !tbaa !317
  %7 = bitcast i8* %5 to {}*, !dbg !323
  ret {}* %7, !dbg !306
}

declare {}* @jl_int64_type() local_unnamed_addr

declare i8* @malloc(i64) local_unnamed_addr

declare {} addrspace(10)* @jl_alloc_array_1d({} addrspace(10)*, i64) local_unnamed_addr

define double @julia__mapreduce_673_3591({ { [1 x [1 x i64]] } } %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1) local_unnamed_addr !dbg !326 {
entry:
  %2 = alloca { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, align 8
  %.fca.0.0.0.0.extract = extractvalue { { [1 x [1 x i64]] } } %0, 0, 0, 0, 0
  %3 = bitcast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to i8*
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull align 8 dereferenceable(16) %3)
  %4 = call {}*** @julia.ptls_states() #11
  %.fca.0.0.0.0.0.0.0.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !327
  store i64 %.fca.0.0.0.0.extract, i64* %.fca.0.0.0.0.0.0.0.gep, align 8, !dbg !327
  %.fca.0.0.1.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 1, !dbg !327
  store {} addrspace(10)* %1, {} addrspace(10)** %.fca.0.0.1.gep, align 8, !dbg !327
  %5 = addrspacecast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)*, !dbg !327
  %6 = call fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %5), !dbg !327
  %7 = bitcast {} addrspace(10)* %6 to {} addrspace(10)* addrspace(10)*, !dbg !330
  %8 = addrspacecast {} addrspace(10)* addrspace(10)* %7 to {} addrspace(10)* addrspace(11)*, !dbg !330
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8, i64 3, !dbg !330
  %10 = bitcast {} addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*, !dbg !330
  %11 = load i64, i64 addrspace(11)* %10, align 8, !dbg !330, !tbaa !210, !range !128
  switch i64 %11, label %L19.i [
    i64 0, label %julia__mapreduce_673_3591.inner.exit
    i64 1, label %L17.i
  ], !dbg !349

L17.i:                                            ; preds = %entry
  %12 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !350
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !350
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 8, !dbg !350, !tbaa !133, !nonnull !4
  %15 = load double, double addrspace(13)* %14, align 8, !dbg !350, !tbaa !135
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !353

L19.i:                                            ; preds = %entry
  %16 = icmp ugt i64 %11, 15, !dbg !354
  br i1 %16, label %L35.i, label %L21.i, !dbg !356

L21.i:                                            ; preds = %L19.i
  %17 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !357
  %18 = addrspacecast double addrspace(13)* addrspace(10)* %17 to double addrspace(13)* addrspace(11)*, !dbg !357
  %19 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %18, align 8, !dbg !357, !tbaa !133, !nonnull !4
  %20 = load double, double addrspace(13)* %19, align 8, !dbg !357, !tbaa !135
  %21 = getelementptr inbounds double, double addrspace(13)* %19, i64 1, !dbg !359
  %22 = load double, double addrspace(13)* %21, align 8, !dbg !359, !tbaa !135
  %23 = fadd double %20, %22, !dbg !361
  %.not67 = icmp ugt i64 %11, 2, !dbg !364
  br i1 %.not67, label %L30.i, label %julia__mapreduce_673_3591.inner.exit, !dbg !365

L30.i:                                            ; preds = %L21.i, %L30.i
  %value_phi2.i9 = phi i64 [ %24, %L30.i ], [ 2, %L21.i ]
  %value_phi1.i8 = phi double [ %27, %L30.i ], [ %23, %L21.i ]
  %24 = add nuw nsw i64 %value_phi2.i9, 1, !dbg !366
  %25 = getelementptr inbounds double, double addrspace(13)* %19, i64 %value_phi2.i9, !dbg !369
  %26 = load double, double addrspace(13)* %25, align 8, !dbg !369, !tbaa !135
  %27 = fadd double %value_phi1.i8, %26, !dbg !370
  %exitcond.not = icmp eq i64 %24, %11, !dbg !364
  br i1 %exitcond.not, label %julia__mapreduce_673_3591.inner.exit, label %L30.i, !dbg !365

L35.i:                                            ; preds = %L19.i
  %28 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %6, i64 signext 1, i64 signext %11), !dbg !372
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !374

julia__mapreduce_673_3591.inner.exit:             ; preds = %L30.i, %L21.i, %entry, %L17.i, %L35.i
  %value_phi.i = phi double [ %15, %L17.i ], [ %28, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %27, %L30.i ]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3), !dbg !329
  ret double %value_phi.i
}

; Function Attrs: nounwind willreturn
declare void @llvm.assume(i1) #9

define double @preprocess_julia__mapreduce_673_3591({ { [1 x [1 x i64]] } } %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1) local_unnamed_addr !dbg !375 {
entry:
  %2 = alloca { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, align 8
  %.fca.0.0.0.0.extract = extractvalue { { [1 x [1 x i64]] } } %0, 0, 0, 0, 0
  %3 = bitcast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to i8*
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull align 8 dereferenceable(16) %3)
  %4 = call {}*** @julia.ptls_states() #11
  %.fca.0.0.0.0.0.0.0.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !376
  store i64 %.fca.0.0.0.0.extract, i64* %.fca.0.0.0.0.0.0.0.gep, align 8, !dbg !376
  %.fca.0.0.1.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 1, !dbg !376
  store {} addrspace(10)* %1, {} addrspace(10)** %.fca.0.0.1.gep, align 8, !dbg !376
  %5 = addrspacecast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)*, !dbg !376
  %6 = call fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %5), !dbg !376
  %7 = bitcast {} addrspace(10)* %6 to {} addrspace(10)* addrspace(10)*, !dbg !378
  %8 = addrspacecast {} addrspace(10)* addrspace(10)* %7 to {} addrspace(10)* addrspace(11)*, !dbg !378
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8, i64 3, !dbg !378
  %10 = bitcast {} addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*, !dbg !378
  %11 = load i64, i64 addrspace(11)* %10, align 8, !dbg !378, !tbaa !210, !range !128
  switch i64 %11, label %L19.i [
    i64 0, label %julia__mapreduce_673_3591.inner.exit
    i64 1, label %L17.i
  ], !dbg !387

L17.i:                                            ; preds = %entry
  %12 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !388
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !388
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 8, !dbg !388, !tbaa !133, !nonnull !4
  %15 = load double, double addrspace(13)* %14, align 8, !dbg !388, !tbaa !135
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !390

L19.i:                                            ; preds = %entry
  %16 = icmp ugt i64 %11, 15, !dbg !391
  br i1 %16, label %L35.i, label %L21.i, !dbg !392

L21.i:                                            ; preds = %L19.i
  %17 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !393
  %18 = addrspacecast double addrspace(13)* addrspace(10)* %17 to double addrspace(13)* addrspace(11)*, !dbg !393
  %19 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %18, align 8, !dbg !393, !tbaa !133, !nonnull !4
  %20 = load double, double addrspace(13)* %19, align 8, !dbg !393, !tbaa !135
  %21 = getelementptr inbounds double, double addrspace(13)* %19, i64 1, !dbg !395
  %22 = load double, double addrspace(13)* %21, align 8, !dbg !395, !tbaa !135
  %23 = fadd double %20, %22, !dbg !397
  %.not67 = icmp ugt i64 %11, 2, !dbg !399
  br i1 %.not67, label %L30.i.preheader, label %julia__mapreduce_673_3591.inner.exit, !dbg !400

L30.i.preheader:                                  ; preds = %L21.i
  br label %L30.i, !dbg !400

L30.i:                                            ; preds = %L30.i.preheader, %L30.i
  %tiv = phi i64 [ 0, %L30.i.preheader ], [ %tiv.next, %L30.i ]
  %value_phi1.i8 = phi double [ %28, %L30.i ], [ %23, %L30.i.preheader ]
  %24 = add i64 %tiv, 2, !dbg !401
  %tiv.next = add nuw nsw i64 %tiv, 1, !dbg !401
  %25 = add nuw nsw i64 %24, 1, !dbg !401
  %26 = getelementptr inbounds double, double addrspace(13)* %19, i64 %24, !dbg !403
  %27 = load double, double addrspace(13)* %26, align 8, !dbg !403, !tbaa !135
  %28 = fadd double %value_phi1.i8, %27, !dbg !404
  %exitcond.not = icmp eq i64 %25, %11, !dbg !399
  br i1 %exitcond.not, label %julia__mapreduce_673_3591.inner.exit.loopexit, label %L30.i, !dbg !400

L35.i:                                            ; preds = %L19.i
  %29 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %6, i64 signext 1, i64 signext %11), !dbg !406
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !407

julia__mapreduce_673_3591.inner.exit.loopexit:    ; preds = %L30.i
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !377

julia__mapreduce_673_3591.inner.exit:             ; preds = %julia__mapreduce_673_3591.inner.exit.loopexit, %L35.i, %L21.i, %L17.i, %entry
  %value_phi.i = phi double [ %15, %L17.i ], [ %29, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %28, %julia__mapreduce_673_3591.inner.exit.loopexit ]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3), !dbg !377
  ret double %value_phi.i
}

define internal void @diffejulia__mapreduce_673_3591({ { [1 x [1 x i64]] } } %0, { { [1 x [1 x i64]] } } %"'", {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* %"'1") local_unnamed_addr !dbg !408 {
entry:
  %2 = alloca { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, align 8
  %.fca.0.0.0.0.extract = extractvalue { { [1 x [1 x i64]] } } %0, 0, 0, 0, 0
  %3 = bitcast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to i8*
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull align 8 dereferenceable(16) %3)
  %4 = call {}*** @julia.ptls_states() #11
  %.fca.0.0.0.0.0.0.0.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !409
  store i64 %.fca.0.0.0.0.extract, i64* %.fca.0.0.0.0.0.0.0.gep, align 8, !dbg !409
  %.fca.0.0.1.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 1, !dbg !409
  store {} addrspace(10)* %1, {} addrspace(10)** %.fca.0.0.1.gep, align 8, !dbg !409
  %5 = addrspacecast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)*, !dbg !409
  %6 = call fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %5), !dbg !409
  %7 = bitcast {} addrspace(10)* %6 to {} addrspace(10)* addrspace(10)*, !dbg !411
  %8 = addrspacecast {} addrspace(10)* addrspace(10)* %7 to {} addrspace(10)* addrspace(11)*, !dbg !411
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8, i64 3, !dbg !411
  %10 = bitcast {} addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*, !dbg !411
  %11 = load i64, i64 addrspace(11)* %10, align 8, !dbg !411, !tbaa !210, !range !128
  switch i64 %11, label %L19.i [
    i64 0, label %julia__mapreduce_673_3591.inner.exit
    i64 1, label %L17.i
  ], !dbg !420

L17.i:                                            ; preds = %entry
  %12 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !421
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !421
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 8, !dbg !421, !tbaa !133, !nonnull !4
  %15 = load double, double addrspace(13)* %14, align 8, !dbg !421, !tbaa !135
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !423

L19.i:                                            ; preds = %entry
  %16 = icmp ugt i64 %11, 15, !dbg !424
  br i1 %16, label %L35.i, label %L21.i, !dbg !425

L21.i:                                            ; preds = %L19.i
  %17 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !426
  %18 = addrspacecast double addrspace(13)* addrspace(10)* %17 to double addrspace(13)* addrspace(11)*, !dbg !426
  %19 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %18, align 8, !dbg !426, !tbaa !133, !nonnull !4
  %20 = load double, double addrspace(13)* %19, align 8, !dbg !426, !tbaa !135
  %21 = getelementptr inbounds double, double addrspace(13)* %19, i64 1, !dbg !428
  %22 = load double, double addrspace(13)* %21, align 8, !dbg !428, !tbaa !135
  %23 = fadd double %20, %22, !dbg !430
  %.not67 = icmp ugt i64 %11, 2, !dbg !432
  br i1 %.not67, label %L30.i.preheader, label %julia__mapreduce_673_3591.inner.exit, !dbg !433

L30.i.preheader:                                  ; preds = %L21.i
  br label %L30.i, !dbg !433

L30.i:                                            ; preds = %L30.i, %L30.i.preheader
  %tiv = phi i64 [ 0, %L30.i.preheader ], [ %tiv.next, %L30.i ]
  %value_phi1.i8 = phi double [ %28, %L30.i ], [ %23, %L30.i.preheader ]
  %24 = add i64 %tiv, 2, !dbg !434
  %tiv.next = add nuw nsw i64 %tiv, 1, !dbg !434
  %25 = add nuw nsw i64 %24, 1, !dbg !434
  %26 = getelementptr inbounds double, double addrspace(13)* %19, i64 %24, !dbg !436
  %27 = load double, double addrspace(13)* %26, align 8, !dbg !436, !tbaa !135
  %28 = fadd double %value_phi1.i8, %27, !dbg !437
  %exitcond.not = icmp eq i64 %25, %11, !dbg !432
  br i1 %exitcond.not, label %julia__mapreduce_673_3591.inner.exit.loopexit, label %L30.i, !dbg !433

L35.i:                                            ; preds = %L19.i
  %29 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %6, i64 signext 1, i64 signext %11), !dbg !439
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !440

julia__mapreduce_673_3591.inner.exit.loopexit:    ; preds = %L30.i
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !410

julia__mapreduce_673_3591.inner.exit:             ; preds = %julia__mapreduce_673_3591.inner.exit.loopexit, %L35.i, %L21.i, %L17.i, %entry
  %value_phi.i = phi double [ %15, %L17.i ], [ %29, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %28, %julia__mapreduce_673_3591.inner.exit.loopexit ]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3), !dbg !410
  ret double %value_phi.i

allocsForInversion:                               ; No predecessors!

invertentry:                                      ; No predecessors!

invertL17.i:                                      ; No predecessors!

invertL19.i:                                      ; No predecessors!

invertL21.i:                                      ; No predecessors!

invertL30.i.preheader:                            ; No predecessors!

invertL30.i:                                      ; No predecessors!

invertL35.i:                                      ; No predecessors!

invertjulia__mapreduce_673_3591.inner.exit.loopexit: ; No predecessors!

invertjulia__mapreduce_673_3591.inner.exit:       ; No predecessors!
}

attributes #0 = { noinline noreturn }
attributes #1 = { readnone "enzyme_inactive" }
attributes #2 = { "thunk" }
attributes #3 = { cold noreturn nounwind }
attributes #4 = { allocsize(1) }
attributes #5 = { argmemonly nounwind willreturn }
attributes #6 = { noinline }
attributes #7 = { nounwind readnone speculatable willreturn }
attributes #8 = { inaccessiblememonly "enzyme_inactive" }
attributes #9 = { nounwind willreturn }
attributes #10 = { noreturn }
attributes #11 = { readnone }

!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2, !5, !7, !9, !10, !11, !13, !15, !17, !18, !19, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41, !42, !43, !44, !45}

!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!3 = !DIFile(filename: "checked.jl", directory: ".")
!4 = !{}
!5 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !6, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!6 = !DIFile(filename: "abstractarray.jl", directory: ".")
!7 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!8 = !DIFile(filename: "array.jl", directory: ".")
!9 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!10 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !6, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!11 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!12 = !DIFile(filename: "reduce.jl", directory: ".")
!13 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !14, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!14 = !DIFile(filename: "reducedim.jl", directory: ".")
!15 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!16 = !DIFile(filename: "/Users/sethaxen/.julia/packages/GPUCompiler/fG3xK/src/runtime.jl", directory: ".")
!17 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!18 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!19 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!20 = !DIFile(filename: "/Users/sethaxen/.julia/packages/Enzyme/afnXq/src/compiler.jl", directory: ".")
!21 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!22 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!23 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!24 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!25 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!26 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!27 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!28 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!29 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!30 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!31 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!32 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!33 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!34 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!35 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!36 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!37 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!38 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!39 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!40 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!41 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!42 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!43 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !16, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!44 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!45 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !20, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!46 = distinct !DISubprogram(name: "throw_overflowerr_binaryop", linkageName: "julia_throw_overflowerr_binaryop_3602", scope: null, file: !3, line: 153, type: !47, scopeLine: 153, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!47 = !DISubroutineType(types: !4)
!48 = !DILocation(line: 708, scope: !49, inlinedAt: !51)
!49 = distinct !DISubprogram(name: "#invokelatest#2;", linkageName: "#invokelatest#2", scope: !50, file: !50, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!50 = !DIFile(filename: "essentials.jl", directory: ".")
!51 = !DILocation(line: 706, scope: !52, inlinedAt: !53)
!52 = distinct !DISubprogram(name: "invokelatest;", linkageName: "invokelatest", scope: !50, file: !50, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!53 = !DILocation(line: 154, scope: !46)
!54 = distinct !DISubprogram(name: "throw_boundserror", linkageName: "julia_throw_boundserror_3608", scope: null, file: !6, line: 651, type: !47, scopeLine: 651, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!55 = !DILocation(line: 651, scope: !54)
!56 = distinct !DISubprogram(name: "collect_to!", linkageName: "julia_collect_to!_3610", scope: null, file: !8, line: 719, type: !47, scopeLine: 719, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!57 = !DILocation(line: 719, scope: !56)
!58 = !DILocation(line: 410, scope: !59, inlinedAt: !61)
!59 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !60, file: !60, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!60 = !DIFile(filename: "promotion.jl", directory: ".")
!61 = !DILocation(line: 674, scope: !62, inlinedAt: !64)
!62 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!63 = !DIFile(filename: "range.jl", directory: ".")
!64 = !DILocation(line: 1094, scope: !65, inlinedAt: !66)
!65 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!66 = !DILocation(line: 368, scope: !67, inlinedAt: !69)
!67 = distinct !DISubprogram(name: "_zip_iterate_some;", linkageName: "_zip_iterate_some", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!68 = !DIFile(filename: "iterators.jl", directory: ".")
!69 = !DILocation(line: 360, scope: !70, inlinedAt: !71)
!70 = distinct !DISubprogram(name: "_zip_iterate_all;", linkageName: "_zip_iterate_all", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!71 = !DILocation(line: 351, scope: !72, inlinedAt: !73)
!72 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!73 = !DILocation(line: 44, scope: !74, inlinedAt: !76)
!74 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !75, file: !75, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!75 = !DIFile(filename: "generator.jl", directory: ".")
!76 = !DILocation(line: 724, scope: !56)
!77 = !DILocation(line: 1095, scope: !65, inlinedAt: !66)
!78 = !DILocation(line: 0, scope: !79, inlinedAt: !81)
!79 = distinct !DISubprogram(name: "_fill_getindex;", linkageName: "_fill_getindex", scope: !80, file: !80, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!80 = !DIFile(filename: "/Users/sethaxen/.julia/packages/FillArrays/NBUnJ/src/FillArrays.jl", directory: ".")
!81 = !DILocation(line: 43, scope: !82, inlinedAt: !83)
!82 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !80, file: !80, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!83 = !DILocation(line: 166, scope: !84, inlinedAt: !86)
!84 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !85, file: !85, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!85 = !DIFile(filename: "/Users/sethaxen/.julia/packages/MappedArrays/bS6Yp/src/MappedArrays.jl", directory: ".")
!86 = !DILocation(line: 1096, scope: !65, inlinedAt: !66)
!87 = !DILocation(line: 0, scope: !88, inlinedAt: !90)
!88 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !89, file: !89, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!89 = !DIFile(filename: "Base.jl", directory: ".")
!90 = !DILocation(line: 613, scope: !91, inlinedAt: !92)
!91 = distinct !DISubprogram(name: "last;", linkageName: "last", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!92 = !DILocation(line: 673, scope: !93, inlinedAt: !94)
!93 = distinct !DISubprogram(name: "checkindex;", linkageName: "checkindex", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!94 = !DILocation(line: 601, scope: !95, inlinedAt: !96)
!95 = distinct !DISubprogram(name: "checkbounds;", linkageName: "checkbounds", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!96 = !DILocation(line: 616, scope: !95, inlinedAt: !97)
!97 = !DILocation(line: 38, scope: !79, inlinedAt: !81)
!98 = !DILocation(line: 0, scope: !99, inlinedAt: !92)
!99 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!100 = !DIFile(filename: "int.jl", directory: ".")
!101 = !{!102, !102, i64 0, i64 1}
!102 = !{!"jtbaa_const", !103, i64 0}
!103 = !{!"jtbaa", !104, i64 0}
!104 = !{!"jtbaa"}
!105 = !DILocation(line: 0, scope: !106, inlinedAt: !107)
!106 = distinct !DISubprogram(name: "tail;", linkageName: "tail", scope: !50, file: !50, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!107 = !DILocation(line: 370, scope: !67, inlinedAt: !69)
!108 = !DILocation(line: 0, scope: !109, inlinedAt: !110)
!109 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!110 = !DILocation(line: 777, scope: !111, inlinedAt: !112)
!111 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!112 = !DILocation(line: 368, scope: !67, inlinedAt: !107)
!113 = !DILocation(line: 0, scope: !114, inlinedAt: !110)
!114 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!115 = !DILocation(line: 0, scope: !116, inlinedAt: !117)
!116 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!117 = !DILocation(line: 728, scope: !56)
!118 = !DILocation(line: 442, scope: !99, inlinedAt: !92)
!119 = !{!120, !120, i64 0}
!120 = !{!"jtbaa_stack", !103, i64 0}
!121 = !DILocation(line: 86, scope: !122, inlinedAt: !123)
!122 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!123 = !DILocation(line: 923, scope: !122, inlinedAt: !110)
!124 = !DILocation(line: 197, scope: !109, inlinedAt: !110)
!125 = !{!126, !126, i64 0}
!126 = !{!"jtbaa_arraylen", !127, i64 0}
!127 = !{!"jtbaa_array", !103, i64 0}
!128 = !{i64 0, i64 9223372036854775807}
!129 = !DILocation(line: 441, scope: !130, inlinedAt: !131)
!130 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!131 = !DILocation(line: 448, scope: !130, inlinedAt: !110)
!132 = !DILocation(line: 801, scope: !114, inlinedAt: !110)
!133 = !{!134, !134, i64 0}
!134 = !{!"jtbaa_arrayptr", !127, i64 0}
!135 = !{!136, !136, i64 0}
!136 = !{!"jtbaa_arraybuf", !137, i64 0}
!137 = !{!"jtbaa_data", !103, i64 0}
!138 = !DILocation(line: 87, scope: !139, inlinedAt: !110)
!139 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!140 = !DILocation(line: 320, scope: !141, inlinedAt: !143)
!141 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !142, file: !142, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!142 = !DIFile(filename: "float.jl", directory: ".")
!143 = !DILocation(line: 94, scope: !144, inlinedAt: !146)
!144 = distinct !DISubprogram(name: "logdensity;", linkageName: "logdensity", scope: !145, file: !145, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!145 = !DIFile(filename: "/Users/sethaxen/.julia/packages/MeasureTheory/B9E1T/src/parameterized/normal.jl", directory: ".")
!146 = !DILocation(line: 36, scope: !147, inlinedAt: !148)
!147 = distinct !DISubprogram(name: "#4;", linkageName: "#4", scope: !75, file: !75, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!148 = !DILocation(line: 47, scope: !74, inlinedAt: !76)
!149 = !DILocation(line: 335, scope: !150, inlinedAt: !151)
!150 = distinct !DISubprogram(name: "/;", linkageName: "/", scope: !142, file: !142, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!151 = !DILocation(line: 324, scope: !152, inlinedAt: !143)
!152 = distinct !DISubprogram(name: "/;", linkageName: "/", scope: !60, file: !60, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !7, retainedNodes: !4)
!153 = !DILocation(line: 839, scope: !116, inlinedAt: !117)
!154 = !DILocation(line: 87, scope: !139, inlinedAt: !155)
!155 = !DILocation(line: 729, scope: !56)
!156 = !DILocation(line: 735, scope: !56)
!157 = distinct !DISubprogram(name: "collect", linkageName: "julia_collect_3604", scope: null, file: !8, line: 672, type: !47, scopeLine: 672, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!158 = !DILocation(line: 395, scope: !159, inlinedAt: !160)
!159 = distinct !DISubprogram(name: "#7;", linkageName: "#7", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!160 = !DILocation(line: 19, scope: !161, inlinedAt: !163)
!161 = distinct !DISubprogram(name: "ntuple;", linkageName: "ntuple", scope: !162, file: !162, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!162 = !DIFile(filename: "ntuple.jl", directory: ".")
!163 = !DILocation(line: 395, scope: !164, inlinedAt: !165)
!164 = distinct !DISubprogram(name: "IteratorSize;", linkageName: "IteratorSize", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!165 = !DILocation(line: 90, scope: !166, inlinedAt: !167)
!166 = distinct !DISubprogram(name: "IteratorSize;", linkageName: "IteratorSize", scope: !75, file: !75, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!167 = !DILocation(line: 673, scope: !157)
!168 = !DILocation(line: 33, scope: !169, inlinedAt: !170)
!169 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !89, file: !89, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!170 = !DILocation(line: 613, scope: !171, inlinedAt: !172)
!171 = distinct !DISubprogram(name: "last;", linkageName: "last", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!172 = !DILocation(line: 519, scope: !173, inlinedAt: !174)
!173 = distinct !DISubprogram(name: "isempty;", linkageName: "isempty", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!174 = !DILocation(line: 670, scope: !175, inlinedAt: !176)
!175 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!176 = !DILocation(line: 1094, scope: !177, inlinedAt: !178)
!177 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!178 = !DILocation(line: 1094, scope: !177, inlinedAt: !179)
!179 = !DILocation(line: 368, scope: !180, inlinedAt: !181)
!180 = distinct !DISubprogram(name: "_zip_iterate_some;", linkageName: "_zip_iterate_some", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!181 = !DILocation(line: 360, scope: !182, inlinedAt: !183)
!182 = distinct !DISubprogram(name: "_zip_iterate_all;", linkageName: "_zip_iterate_all", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!183 = !DILocation(line: 350, scope: !184, inlinedAt: !185)
!184 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !68, file: !68, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!185 = !DILocation(line: 44, scope: !186, inlinedAt: !187)
!186 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !75, file: !75, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!187 = !DILocation(line: 678, scope: !157)
!188 = !DILocation(line: 83, scope: !189, inlinedAt: !190)
!189 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!190 = !DILocation(line: 305, scope: !191, inlinedAt: !172)
!191 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !192, file: !192, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!192 = !DIFile(filename: "operators.jl", directory: ".")
!193 = !DILocation(line: 0, scope: !157)
!194 = !DILocation(line: 1095, scope: !177, inlinedAt: !178)
!195 = !DILocation(line: 241, scope: !196, inlinedAt: !197)
!196 = distinct !DISubprogram(name: "tail;", linkageName: "tail", scope: !50, file: !50, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!197 = !DILocation(line: 370, scope: !180, inlinedAt: !181)
!198 = !{i64 40}
!199 = !{i64 16}
!200 = !DILocation(line: 197, scope: !201, inlinedAt: !202)
!201 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!202 = !DILocation(line: 777, scope: !203, inlinedAt: !204)
!203 = distinct !DISubprogram(name: "iterate;", linkageName: "iterate", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!204 = !DILocation(line: 777, scope: !203, inlinedAt: !205)
!205 = !DILocation(line: 368, scope: !180, inlinedAt: !197)
!206 = !DILocation(line: 441, scope: !189, inlinedAt: !207)
!207 = !DILocation(line: 448, scope: !189, inlinedAt: !202)
!208 = !DILocation(line: 801, scope: !209, inlinedAt: !202)
!209 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!210 = !{!211, !211, i64 0}
!211 = !{!"jtbaa_arraysize", !127, i64 0}
!212 = !DILocation(line: 679, scope: !157)
!213 = !DILocation(line: 680, scope: !157)
!214 = !DILocation(line: 839, scope: !215, inlinedAt: !216)
!215 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!216 = !DILocation(line: 701, scope: !217, inlinedAt: !218)
!217 = distinct !DISubprogram(name: "collect_to_with_first!;", linkageName: "collect_to_with_first!", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !9, retainedNodes: !4)
!218 = !DILocation(line: 683, scope: !157)
!219 = !DILocation(line: 45, scope: !186, inlinedAt: !187)
!220 = !DILocation(line: 702, scope: !217, inlinedAt: !218)
!221 = distinct !DISubprogram(name: "mapreduce_impl", linkageName: "julia_mapreduce_impl_3595", scope: null, file: !12, line: 233, type: !47, scopeLine: 233, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!222 = !DILocation(line: 410, scope: !223, inlinedAt: !224)
!223 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !60, file: !60, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!224 = !DILocation(line: 235, scope: !221)
!225 = !DILocation(line: 801, scope: !226, inlinedAt: !227)
!226 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!227 = !DILocation(line: 236, scope: !221)
!228 = !DILocation(line: 237, scope: !221)
!229 = !DILocation(line: 87, scope: !230, inlinedAt: !231)
!230 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!231 = !DILocation(line: 238, scope: !221)
!232 = !DILocation(line: 83, scope: !233, inlinedAt: !234)
!233 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!234 = !DILocation(line: 305, scope: !235, inlinedAt: !231)
!235 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !192, file: !192, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!236 = !DILocation(line: 801, scope: !226, inlinedAt: !237)
!237 = !DILocation(line: 240, scope: !221)
!238 = !DILocation(line: 801, scope: !226, inlinedAt: !239)
!239 = !DILocation(line: 241, scope: !221)
!240 = !DILocation(line: 326, scope: !241, inlinedAt: !242)
!241 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !142, file: !142, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!242 = !DILocation(line: 242, scope: !221)
!243 = !DILocation(line: 87, scope: !230, inlinedAt: !244)
!244 = !DILocation(line: 69, scope: !245, inlinedAt: !247)
!245 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !246, file: !246, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!246 = !DIFile(filename: "simdloop.jl", directory: ".")
!247 = !DILocation(line: 243, scope: !221)
!248 = !DILocation(line: 442, scope: !249, inlinedAt: !250)
!249 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!250 = !DILocation(line: 352, scope: !251, inlinedAt: !252)
!251 = distinct !DISubprogram(name: ">=;", linkageName: ">=", scope: !192, file: !192, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!252 = !DILocation(line: 292, scope: !253, inlinedAt: !254)
!253 = distinct !DISubprogram(name: "unitrange_last;", linkageName: "unitrange_last", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!254 = !DILocation(line: 287, scope: !255, inlinedAt: !256)
!255 = distinct !DISubprogram(name: "UnitRange;", linkageName: "UnitRange", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!256 = !DILocation(line: 5, scope: !257, inlinedAt: !244)
!257 = distinct !DISubprogram(name: "Colon;", linkageName: "Colon", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!258 = !DILocation(line: 86, scope: !259, inlinedAt: !252)
!259 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!260 = !DILocation(line: 194, scope: !261, inlinedAt: !262)
!261 = distinct !DISubprogram(name: "sub_with_overflow;", linkageName: "sub_with_overflow", scope: !3, file: !3, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!262 = !DILocation(line: 222, scope: !263, inlinedAt: !264)
!263 = distinct !DISubprogram(name: "checked_sub;", linkageName: "checked_sub", scope: !3, file: !3, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!264 = !DILocation(line: 586, scope: !265, inlinedAt: !266)
!265 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !63, file: !63, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!266 = !DILocation(line: 51, scope: !267, inlinedAt: !268)
!267 = distinct !DISubprogram(name: "simd_inner_length;", linkageName: "simd_inner_length", scope: !246, file: !246, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!268 = !DILocation(line: 71, scope: !245, inlinedAt: !247)
!269 = !DILocation(line: 223, scope: !263, inlinedAt: !264)
!270 = !DILocation(line: 132, scope: !271, inlinedAt: !272)
!271 = distinct !DISubprogram(name: "add_with_overflow;", linkageName: "add_with_overflow", scope: !3, file: !3, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!272 = !DILocation(line: 165, scope: !273, inlinedAt: !264)
!273 = distinct !DISubprogram(name: "checked_add;", linkageName: "checked_add", scope: !3, file: !3, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!274 = !DILocation(line: 166, scope: !273, inlinedAt: !264)
!275 = !DILocation(line: 83, scope: !233, inlinedAt: !276)
!276 = !DILocation(line: 72, scope: !245, inlinedAt: !247)
!277 = !DILocation(line: 801, scope: !226, inlinedAt: !278)
!278 = !DILocation(line: 244, scope: !279, inlinedAt: !280)
!279 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !12, file: !12, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!280 = !DILocation(line: 77, scope: !245, inlinedAt: !247)
!281 = !DILocation(line: 326, scope: !241, inlinedAt: !282)
!282 = !DILocation(line: 245, scope: !279, inlinedAt: !280)
!283 = !DILocation(line: 87, scope: !230, inlinedAt: !284)
!284 = !DILocation(line: 78, scope: !245, inlinedAt: !247)
!285 = !DILocation(line: 83, scope: !233, inlinedAt: !286)
!286 = !DILocation(line: 75, scope: !245, inlinedAt: !247)
!287 = distinct !{!287}
!288 = !DILocation(line: 247, scope: !221)
!289 = !DILocation(line: 87, scope: !230, inlinedAt: !290)
!290 = !DILocation(line: 250, scope: !221)
!291 = !DILocation(line: 455, scope: !292, inlinedAt: !293)
!292 = distinct !DISubprogram(name: ">>;", linkageName: ">>", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !11, retainedNodes: !4)
!293 = !DILocation(line: 462, scope: !292, inlinedAt: !290)
!294 = !DILocation(line: 251, scope: !221)
!295 = !DILocation(line: 87, scope: !230, inlinedAt: !296)
!296 = !DILocation(line: 252, scope: !221)
!297 = !DILocation(line: 326, scope: !241, inlinedAt: !298)
!298 = !DILocation(line: 253, scope: !221)
!299 = distinct !DISubprogram(name: "box_int64", linkageName: "julia_box_int64_7212", scope: null, file: !16, line: 214, type: !47, scopeLine: 214, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!300 = !DILocation(line: 88, scope: !301, inlinedAt: !302)
!301 = distinct !DISubprogram(name: "malloc;", linkageName: "malloc", scope: !16, file: !16, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!302 = !DILocation(line: 185, scope: !303, inlinedAt: !304)
!303 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !16, file: !16, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!304 = !DILocation(line: 174, scope: !305, inlinedAt: !306)
!305 = distinct !DISubprogram(name: "box;", linkageName: "box", scope: !16, file: !16, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!306 = !DILocation(line: 214, scope: !299)
!307 = !DILocation(line: 39, scope: !308, inlinedAt: !310)
!308 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !309, file: !309, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!309 = !DIFile(filename: "/Users/sethaxen/.julia/packages/LLVM/FrlPu/src/interop/base.jl", directory: ".")
!310 = !DILocation(line: 141, scope: !303, inlinedAt: !311)
!311 = !DILocation(line: 141, scope: !312, inlinedAt: !313)
!312 = distinct !DISubprogram(name: "type_tag;", linkageName: "type_tag", scope: !16, file: !16, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!313 = !DILocation(line: 189, scope: !303, inlinedAt: !304)
!314 = !DILocation(line: 332, scope: !315, inlinedAt: !316)
!315 = distinct !DISubprogram(name: "|;", linkageName: "|", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!316 = !DILocation(line: 923, scope: !315, inlinedAt: !313)
!317 = !{!137, !137, i64 0}
!318 = !DILocation(line: 159, scope: !319, inlinedAt: !321)
!319 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !320, file: !320, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!320 = !DIFile(filename: "pointer.jl", directory: ".")
!321 = !DILocation(line: 192, scope: !303, inlinedAt: !304)
!322 = !DILocation(line: 193, scope: !303, inlinedAt: !304)
!323 = !DILocation(line: 130, scope: !324, inlinedAt: !325)
!324 = distinct !DISubprogram(name: "unsafe_pointer_to_objref;", linkageName: "unsafe_pointer_to_objref", scope: !320, file: !320, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !33, retainedNodes: !4)
!325 = !DILocation(line: 195, scope: !303, inlinedAt: !304)
!326 = distinct !DISubprogram(name: "#mapreduce#673", linkageName: "julia_#mapreduce#673_3591", scope: null, file: !14, line: 312, type: !47, scopeLine: 312, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!327 = !DILocation(line: 2383, scope: !328, inlinedAt: !329)
!328 = distinct !DISubprogram(name: "map;", linkageName: "map", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!329 = !DILocation(line: 312, scope: !326)
!330 = !DILocation(line: 133, scope: !331, inlinedAt: !332)
!331 = distinct !DISubprogram(name: "size;", linkageName: "size", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!332 = !DILocation(line: 89, scope: !333, inlinedAt: !334)
!333 = distinct !DISubprogram(name: "axes;", linkageName: "axes", scope: !6, file: !6, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!334 = !DILocation(line: 459, scope: !335, inlinedAt: !337)
!335 = distinct !DISubprogram(name: "LinearIndices;", linkageName: "LinearIndices", scope: !336, file: !336, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!336 = !DIFile(filename: "indices.jl", directory: ".")
!337 = !DILocation(line: 397, scope: !338, inlinedAt: !339)
!338 = distinct !DISubprogram(name: "_mapreduce;", linkageName: "_mapreduce", scope: !12, file: !12, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!339 = !DILocation(line: 318, scope: !340, inlinedAt: !341)
!340 = distinct !DISubprogram(name: "_mapreduce_dim;", linkageName: "_mapreduce_dim", scope: !14, file: !14, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!341 = !DILocation(line: 310, scope: !342, inlinedAt: !343)
!342 = distinct !DISubprogram(name: "#mapreduce#672;", linkageName: "#mapreduce#672", scope: !14, file: !14, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!343 = !DILocation(line: 310, scope: !344, inlinedAt: !345)
!344 = distinct !DISubprogram(name: "mapreduce;", linkageName: "mapreduce", scope: !14, file: !14, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!345 = !DILocation(line: 359, scope: !346, inlinedAt: !347)
!346 = distinct !DISubprogram(name: "#reduce#674;", linkageName: "#reduce#674", scope: !14, file: !14, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!347 = !DILocation(line: 359, scope: !348, inlinedAt: !329)
!348 = distinct !DISubprogram(name: "reduce;", linkageName: "reduce", scope: !14, file: !14, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!349 = !DILocation(line: 399, scope: !338, inlinedAt: !339)
!350 = !DILocation(line: 801, scope: !351, inlinedAt: !352)
!351 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !8, file: !8, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!352 = !DILocation(line: 402, scope: !338, inlinedAt: !339)
!353 = !DILocation(line: 403, scope: !338, inlinedAt: !339)
!354 = !DILocation(line: 83, scope: !355, inlinedAt: !356)
!355 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!356 = !DILocation(line: 404, scope: !338, inlinedAt: !339)
!357 = !DILocation(line: 801, scope: !351, inlinedAt: !358)
!358 = !DILocation(line: 406, scope: !338, inlinedAt: !339)
!359 = !DILocation(line: 801, scope: !351, inlinedAt: !360)
!360 = !DILocation(line: 407, scope: !338, inlinedAt: !339)
!361 = !DILocation(line: 326, scope: !362, inlinedAt: !363)
!362 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !142, file: !142, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!363 = !DILocation(line: 408, scope: !338, inlinedAt: !339)
!364 = !DILocation(line: 83, scope: !355, inlinedAt: !365)
!365 = !DILocation(line: 409, scope: !338, inlinedAt: !339)
!366 = !DILocation(line: 87, scope: !367, inlinedAt: !368)
!367 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !100, file: !100, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!368 = !DILocation(line: 410, scope: !338, inlinedAt: !339)
!369 = !DILocation(line: 801, scope: !351, inlinedAt: !368)
!370 = !DILocation(line: 326, scope: !362, inlinedAt: !371)
!371 = !DILocation(line: 411, scope: !338, inlinedAt: !339)
!372 = !DILocation(line: 257, scope: !373, inlinedAt: !374)
!373 = distinct !DISubprogram(name: "mapreduce_impl;", linkageName: "mapreduce_impl", scope: !12, file: !12, type: !47, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!374 = !DILocation(line: 415, scope: !338, inlinedAt: !339)
!375 = distinct !DISubprogram(name: "#mapreduce#673", linkageName: "julia_#mapreduce#673_3591", scope: null, file: !14, line: 312, type: !47, scopeLine: 312, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!376 = !DILocation(line: 2383, scope: !328, inlinedAt: !377)
!377 = !DILocation(line: 312, scope: !375)
!378 = !DILocation(line: 133, scope: !331, inlinedAt: !379)
!379 = !DILocation(line: 89, scope: !333, inlinedAt: !380)
!380 = !DILocation(line: 459, scope: !335, inlinedAt: !381)
!381 = !DILocation(line: 397, scope: !338, inlinedAt: !382)
!382 = !DILocation(line: 318, scope: !340, inlinedAt: !383)
!383 = !DILocation(line: 310, scope: !342, inlinedAt: !384)
!384 = !DILocation(line: 310, scope: !344, inlinedAt: !385)
!385 = !DILocation(line: 359, scope: !346, inlinedAt: !386)
!386 = !DILocation(line: 359, scope: !348, inlinedAt: !377)
!387 = !DILocation(line: 399, scope: !338, inlinedAt: !382)
!388 = !DILocation(line: 801, scope: !351, inlinedAt: !389)
!389 = !DILocation(line: 402, scope: !338, inlinedAt: !382)
!390 = !DILocation(line: 403, scope: !338, inlinedAt: !382)
!391 = !DILocation(line: 83, scope: !355, inlinedAt: !392)
!392 = !DILocation(line: 404, scope: !338, inlinedAt: !382)
!393 = !DILocation(line: 801, scope: !351, inlinedAt: !394)
!394 = !DILocation(line: 406, scope: !338, inlinedAt: !382)
!395 = !DILocation(line: 801, scope: !351, inlinedAt: !396)
!396 = !DILocation(line: 407, scope: !338, inlinedAt: !382)
!397 = !DILocation(line: 326, scope: !362, inlinedAt: !398)
!398 = !DILocation(line: 408, scope: !338, inlinedAt: !382)
!399 = !DILocation(line: 83, scope: !355, inlinedAt: !400)
!400 = !DILocation(line: 409, scope: !338, inlinedAt: !382)
!401 = !DILocation(line: 87, scope: !367, inlinedAt: !402)
!402 = !DILocation(line: 410, scope: !338, inlinedAt: !382)
!403 = !DILocation(line: 801, scope: !351, inlinedAt: !402)
!404 = !DILocation(line: 326, scope: !362, inlinedAt: !405)
!405 = !DILocation(line: 411, scope: !338, inlinedAt: !382)
!406 = !DILocation(line: 257, scope: !373, inlinedAt: !407)
!407 = !DILocation(line: 415, scope: !338, inlinedAt: !382)
!408 = distinct !DISubprogram(name: "#mapreduce#673", linkageName: "julia_#mapreduce#673_3591", scope: null, file: !14, line: 312, type: !47, scopeLine: 312, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !13, retainedNodes: !4)
!409 = !DILocation(line: 2383, scope: !328, inlinedAt: !410)
!410 = !DILocation(line: 312, scope: !408)
!411 = !DILocation(line: 133, scope: !331, inlinedAt: !412)
!412 = !DILocation(line: 89, scope: !333, inlinedAt: !413)
!413 = !DILocation(line: 459, scope: !335, inlinedAt: !414)
!414 = !DILocation(line: 397, scope: !338, inlinedAt: !415)
!415 = !DILocation(line: 318, scope: !340, inlinedAt: !416)
!416 = !DILocation(line: 310, scope: !342, inlinedAt: !417)
!417 = !DILocation(line: 310, scope: !344, inlinedAt: !418)
!418 = !DILocation(line: 359, scope: !346, inlinedAt: !419)
!419 = !DILocation(line: 359, scope: !348, inlinedAt: !410)
!420 = !DILocation(line: 399, scope: !338, inlinedAt: !415)
!421 = !DILocation(line: 801, scope: !351, inlinedAt: !422)
!422 = !DILocation(line: 402, scope: !338, inlinedAt: !415)
!423 = !DILocation(line: 403, scope: !338, inlinedAt: !415)
!424 = !DILocation(line: 83, scope: !355, inlinedAt: !425)
!425 = !DILocation(line: 404, scope: !338, inlinedAt: !415)
!426 = !DILocation(line: 801, scope: !351, inlinedAt: !427)
!427 = !DILocation(line: 406, scope: !338, inlinedAt: !415)
!428 = !DILocation(line: 801, scope: !351, inlinedAt: !429)
!429 = !DILocation(line: 407, scope: !338, inlinedAt: !415)
!430 = !DILocation(line: 326, scope: !362, inlinedAt: !431)
!431 = !DILocation(line: 408, scope: !338, inlinedAt: !415)
!432 = !DILocation(line: 83, scope: !355, inlinedAt: !433)
!433 = !DILocation(line: 409, scope: !338, inlinedAt: !415)
!434 = !DILocation(line: 87, scope: !367, inlinedAt: !435)
!435 = !DILocation(line: 410, scope: !338, inlinedAt: !415)
!436 = !DILocation(line: 801, scope: !351, inlinedAt: !435)
!437 = !DILocation(line: 326, scope: !362, inlinedAt: !438)
!438 = !DILocation(line: 411, scope: !338, inlinedAt: !415)
!439 = !DILocation(line: 257, scope: !373, inlinedAt: !440)
!440 = !DILocation(line: 415, scope: !338, inlinedAt: !415)

define double @preprocess_julia__mapreduce_673_3591({ { [1 x [1 x i64]] } } %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1) local_unnamed_addr !dbg !375 {
entry:
  %2 = alloca { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, align 8
  %.fca.0.0.0.0.extract = extractvalue { { [1 x [1 x i64]] } } %0, 0, 0, 0, 0
  %3 = bitcast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to i8*
  call void @llvm.lifetime.start.p0i8(i64 16, i8* nonnull align 8 dereferenceable(16) %3)
  %4 = call {}*** @julia.ptls_states() #10
  %.fca.0.0.0.0.0.0.0.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !376
  store i64 %.fca.0.0.0.0.extract, i64* %.fca.0.0.0.0.0.0.0.gep, align 8, !dbg !376
  %.fca.0.0.1.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 1, !dbg !376
  store {} addrspace(10)* %1, {} addrspace(10)** %.fca.0.0.1.gep, align 8, !dbg !376
  %5 = addrspacecast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)*, !dbg !376
  %6 = call fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %5), !dbg !376
  %7 = bitcast {} addrspace(10)* %6 to {} addrspace(10)* addrspace(10)*, !dbg !378
  %8 = addrspacecast {} addrspace(10)* addrspace(10)* %7 to {} addrspace(10)* addrspace(11)*, !dbg !378
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8, i64 3, !dbg !378
  %10 = bitcast {} addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*, !dbg !378
  %11 = load i64, i64 addrspace(11)* %10, align 8, !dbg !378, !tbaa !210, !range !128
  switch i64 %11, label %L19.i [
    i64 0, label %julia__mapreduce_673_3591.inner.exit
    i64 1, label %L17.i
  ], !dbg !387

L17.i:                                            ; preds = %entry
  %12 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !388
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !388
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 8, !dbg !388, !tbaa !133, !nonnull !4
  %15 = load double, double addrspace(13)* %14, align 8, !dbg !388, !tbaa !135
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !390

L19.i:                                            ; preds = %entry
  %16 = icmp ugt i64 %11, 15, !dbg !391
  br i1 %16, label %L35.i, label %L21.i, !dbg !392

L21.i:                                            ; preds = %L19.i
  %17 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !393
  %18 = addrspacecast double addrspace(13)* addrspace(10)* %17 to double addrspace(13)* addrspace(11)*, !dbg !393
  %19 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %18, align 8, !dbg !393, !tbaa !133, !nonnull !4
  %20 = load double, double addrspace(13)* %19, align 8, !dbg !393, !tbaa !135
  %21 = getelementptr inbounds double, double addrspace(13)* %19, i64 1, !dbg !395
  %22 = load double, double addrspace(13)* %21, align 8, !dbg !395, !tbaa !135
  %23 = fadd double %20, %22, !dbg !397
  %.not67 = icmp ugt i64 %11, 2, !dbg !399
  br i1 %.not67, label %L30.i.preheader, label %julia__mapreduce_673_3591.inner.exit, !dbg !400

L30.i.preheader:                                  ; preds = %L21.i
  br label %L30.i, !dbg !400

L30.i:                                            ; preds = %L30.i.preheader, %L30.i
  %tiv = phi i64 [ 0, %L30.i.preheader ], [ %tiv.next, %L30.i ]
  %value_phi1.i8 = phi double [ %28, %L30.i ], [ %23, %L30.i.preheader ]
  %24 = add i64 %tiv, 2, !dbg !401
  %tiv.next = add nuw nsw i64 %tiv, 1, !dbg !401
  %25 = add nuw nsw i64 %24, 1, !dbg !401
  %26 = getelementptr inbounds double, double addrspace(13)* %19, i64 %24, !dbg !403
  %27 = load double, double addrspace(13)* %26, align 8, !dbg !403, !tbaa !135
  %28 = fadd double %value_phi1.i8, %27, !dbg !404
  %exitcond.not = icmp eq i64 %25, %11, !dbg !399
  br i1 %exitcond.not, label %julia__mapreduce_673_3591.inner.exit.loopexit, label %L30.i, !dbg !400

L35.i:                                            ; preds = %L19.i
  %29 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %6, i64 signext 1, i64 signext %11), !dbg !406
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !407

julia__mapreduce_673_3591.inner.exit.loopexit:    ; preds = %L30.i
  br label %julia__mapreduce_673_3591.inner.exit, !dbg !377

julia__mapreduce_673_3591.inner.exit:             ; preds = %julia__mapreduce_673_3591.inner.exit.loopexit, %L35.i, %L21.i, %L17.i, %entry
  %value_phi.i = phi double [ %15, %L17.i ], [ %29, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %28, %julia__mapreduce_673_3591.inner.exit.loopexit ]
  call void @llvm.lifetime.end.p0i8(i64 16, i8* nonnull %3), !dbg !377
  ret double %value_phi.i
}

<analysis>
  %24 = add i64 %tiv, 2, !dbg !100: {[-1]:Integer}, intvals: {2,}
i64 0: {[-1]:Anything}, intvals: {0,}
i64 1: {[-1]:Integer}, intvals: {1,}
i64 15: {[-1]:Integer}, intvals: {15,}
i64 2: {[-1]:Integer}, intvals: {2,}
  %21 = getelementptr inbounds double, double addrspace(13)* %19, i64 1, !dbg !92: {[-1]:Pointer}, intvals: {}
  %22 = load double, double addrspace(13)* %21, align 8, !dbg !92, !tbaa !82: {[-1]:Float@double}, intvals: {}
  %tiv.next = add nuw nsw i64 %tiv, 1, !dbg !100: {[-1]:Integer}, intvals: {1,}
  %.fca.0.0.0.0.extract = extractvalue { { [1 x [1 x i64]] } } %0, 0, 0, 0, 0: {[-1]:Integer}, intvals: {}
  %value_phi1.i8 = phi double [ %28, %L30.i ], [ %23, %L30.i.preheader ]: {[-1]:Float@double}, intvals: {}
  %25 = add nuw nsw i64 %24, 1, !dbg !100: {[-1]:Integer}, intvals: {3,}
  %26 = getelementptr inbounds double, double addrspace(13)* %19, i64 %24, !dbg !103: {[-1]:Pointer}, intvals: {}
  %27 = load double, double addrspace(13)* %26, align 8, !dbg !103, !tbaa !82: {[-1]:Float@double}, intvals: {}
  %28 = fadd double %value_phi1.i8, %27, !dbg !104: {[-1]:Float@double}, intvals: {}
  %exitcond.not = icmp eq i64 %25, %11, !dbg !98: {[-1]:Integer}, intvals: {}
  %.fca.0.0.1.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 1, !dbg !48: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,0,40]:Integer}, intvals: {}
  %10 = bitcast {} addrspace(10)* addrspace(11)* %9 to i64 addrspace(11)*, !dbg !51: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %11 = load i64, i64 addrspace(11)* %10, align 8, !dbg !51, !tbaa !70, !range !75: {[-1]:Integer}, intvals: {}
  %6 = call fastcc nonnull {} addrspace(10)* @julia_collect_3604({ [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)* nocapture nonnull readonly align 8 dereferenceable(16) %5), !dbg !48: {}, intvals: {}
  %29 = call fastcc double @julia_mapreduce_impl_3595({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) %6, i64 signext 1, i64 signext %11), !dbg !106: {[-1]:Pointer}, intvals: {}
  %16 = icmp ugt i64 %11, 15, !dbg !86: {[-1]:Integer}, intvals: {}
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %8, i64 3, !dbg !51: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %12 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !77: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %13 = addrspacecast double addrspace(13)* addrspace(10)* %12 to double addrspace(13)* addrspace(11)*, !dbg !77: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %value_phi.i = phi double [ %15, %L17.i ], [ %29, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %28, %julia__mapreduce_673_3591.inner.exit.loopexit ]: {[-1]:Pointer}, intvals: {}
  %7 = bitcast {} addrspace(10)* %6 to {} addrspace(10)* addrspace(10)*, !dbg !51: {}, intvals: {}
  %8 = addrspacecast {} addrspace(10)* addrspace(10)* %7 to {} addrspace(10)* addrspace(11)*, !dbg !51: {}, intvals: {}
  %14 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %13, align 8, !dbg !77, !tbaa !80, !nonnull !4: {[-1]:Pointer}, intvals: {}
  %15 = load double, double addrspace(13)* %14, align 8, !dbg !77, !tbaa !82: {[-1]:Pointer}, intvals: {}
  %17 = bitcast {} addrspace(10)* %6 to double addrspace(13)* addrspace(10)*, !dbg !90: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %18 = addrspacecast double addrspace(13)* addrspace(10)* %17 to double addrspace(13)* addrspace(11)*, !dbg !90: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %5 = addrspacecast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] } addrspace(11)*, !dbg !48: {[-1]:Pointer}, intvals: {}
{ { [1 x [1 x i64]] } } %0: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer}, intvals: {}
{} addrspace(10)* %1: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer, [-1,40]:Integer}, intvals: {}
  %2 = alloca { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, align 8: {[-1]:Pointer}, intvals: {}
  %3 = bitcast { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2 to i8*: {[-1]:Pointer}, intvals: {}
  %23 = fadd double %20, %22, !dbg !94: {[-1]:Float@double}, intvals: {}
  %.not67 = icmp ugt i64 %11, 2, !dbg !98: {[-1]:Integer}, intvals: {}
  %19 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %18, align 8, !dbg !90, !tbaa !80, !nonnull !4: {[-1]:Pointer}, intvals: {}
  %20 = load double, double addrspace(13)* %19, align 8, !dbg !90, !tbaa !82: {[-1]:Float@double}, intvals: {}
  %tiv = phi i64 [ 0, %L30.i.preheader ], [ %tiv.next, %L30.i ]: {[-1]:Integer}, intvals: {0,}
  %.fca.0.0.0.0.0.0.0.gep = getelementptr inbounds { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }, { [1 x { { { [1 x [1 x i64]] } }, {} addrspace(10)* }] }* %2, i64 0, i32 0, i64 0, i32 0, i32 0, i32 0, i64 0, i64 0, !dbg !48: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
</analysis>
Illegal updateAnalysis prev:{[-1]:Float@double} new: {[-1]:Pointer}
val:   %23 = fadd double %20, %22, !dbg !94 origin=  %value_phi.i = phi double [ %15, %L17.i ], [ %29, %L35.i ], [ 0.000000e+00, %entry ], [ %23, %L21.i ], [ %28, %julia__mapreduce_673_3591.inner.exit.loopexit ]
Assertion failed: (0 && "Performed illegal updateAnalysis"), function updateAnalysis, file /workspace/srcdir/Enzyme/enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp, line 586.

signal (6): Abort trap: 6
in expression starting at REPL[8]:1
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 54941224 (Pool: 54921697; Big: 19527); GC: 59
zsh: abort      julia
@wsmoses wsmoses self-assigned this Sep 4, 2021
@wsmoses
Copy link
Member

wsmoses commented Sep 4, 2021

The compilation error is remedied by the latest commit pushed here: #115

This may require a new cut of Enzyme_jll [and I haven't validated correctness as MeasureTheory requires support for the in progress jl_invoke handling under the hood].

@wsmoses
Copy link
Member

wsmoses commented Sep 28, 2021

Succeeds on my dev branch and I think main as well, closing.

@wsmoses wsmoses closed this as completed Sep 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants