Skip to content

Differentiating through foldl on SubArrays thwarts type analysis #3008

@daeshub

Description

@daeshub

Using foldl to reduce over SubArrays yields an error in Enzyme's type analysis during reverse differentiation.

Minimal reproducer


using Enzyme
Enzyme.Compiler.VERBOSE_ERRORS[] = true

"""Partition Array into two SubArrays, evenly along first dimension"""
function partition(x)
	d = size(x, 1)
	isodd(d) && error("require d=$d to be even")
	dhalf = div(d, 2)
	[selectdim( x, 1, (i-1)*dhalf+1 : i*dhalf ) for i in 1:2]
end # returns Array of two equal size SubArrays

f(x) = sum(foldl(+, partition(x)))

x = randn(4, 1)
dx = zero(x)
autodiff(Reverse, Const(f), Active, Duplicated(x, dx))

Verbose error output

Note: The middle portion had to be truncated to fit within the character limit.

ERROR: LoadError: IllegalTypeAnalysisException: Enzyme compilation failed due to illegal type analysis.
 This usually indicates the use of a Union type, which is not fully supported with Enzyme.API.strictAliasing set to true [the default].
 Ideally, remove the union (which will also make your code faster), or try setting Enzyme.API.strictAliasing!(false) before any autodiff call.
 To toggle more information for debugging (needed for bug reports), set Enzyme.Compiler.VERBOSE_ERRORS[] = true (default false)
 Failure within method: MethodInstance for f(::Matrix{Float64})
Hint: catch this exception as `err` and call `code_typed(err)` to inspect the errornous code.
If you have Cthulu.jl loaded you can also use `code_typed(err; interactive = true)` to interactively introspect the code.Current scope: 
; Function Attrs: mustprogress willreturn
define "enzyme_type"="{[-1]:Float@double}" double @preprocess_julia_f_19317(ptr addrspace(10) noundef nonnull align 8 dereferenceable(32) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}" "enzymejl_parmtype"="5035778032" "enzymejl_parmtype_ref"="2" "enzymejl_parmtype_str"="Matrix{Float64}" %"x::Array") local_unnamed_addr #79 !dbg !3036 {
top:
  %"new::Generator" = alloca [4 x i64], align 8
  %0 = alloca ptr addrspace(10), align 8
  %sret_box = alloca i64, align 8
  %1 = alloca [6 x i64], align 8
  %2 = alloca ptr addrspace(10), align 8
  %3 = alloca [6 x i64], align 8
  %.sroa.6 = alloca [5 x i64], align 8
  %4 = alloca [6 x i64], align 8
  %5 = alloca ptr addrspace(10), align 8
  %6 = alloca ptr addrspace(10), align 8
  %7 = alloca ptr addrspace(10), align 8
  %pgcstack = call ptr @julia.get_pgcstack() #81
  store i64 0, ptr %7, align 8, !dbg !3037
  store i64 0, ptr %6, align 8, !dbg !3037
  store i64 0, ptr %5, align 8, !dbg !3037
  store i64 0, ptr %2, align 8, !dbg !3037
  store i64 0, ptr %0, align 8, !dbg !3037
  %current_task = getelementptr inbounds i8, ptr %pgcstack, i64 -152
  %ptls_field = getelementptr inbounds i8, ptr %pgcstack, i64 16
  %ptls_load = load ptr, ptr %ptls_field, align 8, !tbaa !68
  %8 = getelementptr inbounds i8, ptr %ptls_load, i64 16
  %safepoint = load ptr, ptr %8, align 8, !tbaa !72
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(ptr %safepoint) #81, !dbg !3037
  fence syncscope("singlethread") seq_cst
  %9 = addrspacecast ptr addrspace(10) %"x::Array" to ptr addrspace(11), !dbg !3038
  %"x::Array.size_ptr" = getelementptr inbounds i8, ptr addrspace(11) %9, i64 16, !dbg !3038
  %"x::Array.size.sroa.0.0.copyload" = load i64, ptr addrspace(11) %"x::Array.size_ptr", align 8, !dbg !3038, !tbaa !109, !alias.scope !350, !noalias !3040, !enzyme_inactive !0, !enzyme_type !182, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0
  %10 = and i64 %"x::Array.size.sroa.0.0.copyload", 1, !dbg !3043
  %11 = icmp eq i64 %10, 0, !dbg !3043
  br i1 %11, label %pass5, label %L7, !dbg !3046

L7:                                               ; preds = %top
  %box_Int64 = call noalias nonnull align 8 dereferenceable(8) "enzyme_ReadOnlyOrThrow" "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" ptr addrspace(10) @ijl_box_int64(i64 signext %"x::Array.size.sroa.0.0.copyload") #82, !dbg !3046
  %12 = call nonnull "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) (ptr, ptr addrspace(10), ptr addrspace(10), ...) @julia.call2(ptr nonnull @ijl_invoke, ptr addrspace(10) @"ejl_inserted$_Main_Base_string_19320$false$5024305072", ptr addrspace(10) @"ejl_inserted$jl_global_19321$false$4979344480", ptr addrspace(10) @"ejl_inserted$jl_global_19322$false$4746220560", ptr addrspace(10) nonnull %box_Int64, ptr addrspace(10) @"ejl_inserted$jl_global_19323$false$4746220688") #83, !dbg !3046
  call fastcc void @julia_error_19421(ptr addrspace(10) %12) #84, !dbg !3046
  unreachable, !dbg !3046

L37:                                              ; preds = %pass5
  %memoryref_data = load ptr, ptr addrspace(11) %103, align 8, !dbg !3047, !tbaa !413, !alias.scope !202, !noalias !203, !enzyme_nocache !0
  %13 = getelementptr inbounds { ptr, ptr addrspace(10) }, ptr addrspace(11) %103, i64 0, i32 1, !dbg !3047
  %memoryref_mem = load ptr addrspace(10), ptr addrspace(11) %13, align 8, !dbg !3047, !tbaa !413, !alias.scope !202, !noalias !203, !dereferenceable_or_null !192, !align !193, !enzyme_type !204
  %memoryref_data9 = call ptr addrspace(13) @julia.gc_loaded(ptr addrspace(10) %memoryref_mem, ptr %memoryref_data) #81, !dbg !3047
  %14 = load atomic ptr addrspace(10), ptr addrspace(13) %memoryref_data9 unordered, align 8, !dbg !3047, !tbaa !376, !alias.scope !105, !noalias !120, !enzyme_type !204
  %.not173 = icmp eq ptr addrspace(10) %14, null, !dbg !3047
  br i1 %.not173, label %fail10, label %L53, !dbg !3047

L53:                                              ; preds = %L37
  %15 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data9, i64 8, !dbg !3047
  %16 = load [5 x i64], ptr addrspace(13) %15, align 8, !dbg !3057
  %.fca.0.extract = extractvalue [5 x i64] %16, 0, !dbg !3057
  %.fca.1.extract = extractvalue [5 x i64] %16, 1, !dbg !3057
  %.fca.2.extract = extractvalue [5 x i64] %16, 2, !dbg !3057
  %.fca.3.extract = extractvalue [5 x i64] %16, 3, !dbg !3057
  %.fca.4.extract = extractvalue [5 x i64] %16, 4, !dbg !3057
  %.not = icmp eq i64 %.size.0.copyload, 1, !dbg !3058
  br i1 %.not, label %guard_exit, label %L75, !dbg !3059

L75:                                              ; preds = %L53
  %memoryref_data82 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data9, i64 48, !dbg !3063
  %17 = load atomic ptr addrspace(10), ptr addrspace(13) %memoryref_data82 unordered, align 8, !dbg !3063, !tbaa !376, !alias.scope !105, !noalias !120, !enzyme_type !204
  %.not174 = icmp eq ptr addrspace(10) %17, null, !dbg !3063
  br i1 %.not174, label %fail84, label %L87.L89_crit_edge, !dbg !3063


[*** TRUNCATED ***]


L241.epil.preheader214:                           ; preds = %L236.L278.loopexit_crit_edge.unr-lcssa.loopexit.unr-lcssa
  %memoryref_byteoffset.epil219 = shl i64 %value_phi50202.unr222, 3, !dbg !3094
  %memoryref_data62.epil220 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data48, i64 %memoryref_byteoffset.epil219, !dbg !3094
  %78 = load double, ptr addrspace(13) %memoryref_data62.epil220, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %79 = fadd reassoc contract double %value_phi49201.unr223, %78, !dbg !3096
  %memoryref_data62.1.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 8, !dbg !3094
  %80 = load double, ptr addrspace(13) %memoryref_data62.1.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %81 = fadd reassoc contract double %79, %80, !dbg !3096
  %memoryref_data62.2.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 16, !dbg !3094
  %82 = load double, ptr addrspace(13) %memoryref_data62.2.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %83 = fadd reassoc contract double %81, %82, !dbg !3096
  %memoryref_data62.3.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 24, !dbg !3094
  %84 = load double, ptr addrspace(13) %memoryref_data62.3.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %85 = fadd reassoc contract double %83, %84, !dbg !3096
  %memoryref_data62.4.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 32, !dbg !3094
  %86 = load double, ptr addrspace(13) %memoryref_data62.4.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %87 = fadd reassoc contract double %85, %86, !dbg !3096
  %memoryref_data62.5.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 40, !dbg !3094
  %88 = load double, ptr addrspace(13) %memoryref_data62.5.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %89 = fadd reassoc contract double %87, %88, !dbg !3096
  %memoryref_data62.6.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 48, !dbg !3094
  %90 = load double, ptr addrspace(13) %memoryref_data62.6.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %91 = fadd reassoc contract double %89, %90, !dbg !3096
  %92 = add nuw nsw i64 %value_phi50202.unr222, 8, !dbg !3099
  %memoryref_data62.7.epil = getelementptr i8, ptr addrspace(13) %memoryref_data62.epil220, i64 56, !dbg !3094
  %93 = load double, ptr addrspace(13) %memoryref_data62.7.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %94 = fadd reassoc contract double %91, %93, !dbg !3096
  br label %L236.L278.loopexit_crit_edge.unr-lcssa, !dbg !3093

L236.L278.loopexit_crit_edge.unr-lcssa:           ; preds = %L241.epil.preheader214, %L236.L278.loopexit_crit_edge.unr-lcssa.loopexit.unr-lcssa, %L241.lr.ph
  %.lcssa.ph = phi double [ undef, %L241.lr.ph ], [ %.lcssa211.ph, %L236.L278.loopexit_crit_edge.unr-lcssa.loopexit.unr-lcssa ], [ %94, %L241.epil.preheader214 ]
  %value_phi50202.unr = phi i64 [ 1, %L241.lr.ph ], [ %.lcssa212.ph, %L236.L278.loopexit_crit_edge.unr-lcssa.loopexit.unr-lcssa ], [ %92, %L241.epil.preheader214 ]
  %value_phi49201.unr = phi double [ %33, %L241.lr.ph ], [ %.lcssa211.ph, %L236.L278.loopexit_crit_edge.unr-lcssa.loopexit.unr-lcssa ], [ %94, %L241.epil.preheader214 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !3093
  br i1 %lcmp.mod.not, label %L278, label %L241.epil.preheader, !dbg !3093

L241.epil.preheader:                              ; preds = %L236.L278.loopexit_crit_edge.unr-lcssa
  br label %L241.epil, !dbg !3093

L241.epil:                                        ; preds = %L241.epil.preheader, %L241.epil
  %iv3 = phi i64 [ 0, %L241.epil.preheader ], [ %iv.next4, %L241.epil ]
  %value_phi49201.epil = phi double [ %98, %L241.epil ], [ %value_phi49201.unr, %L241.epil.preheader ]
  %95 = add nuw nsw i64 %value_phi50202.unr, %iv3, !dbg !3099
  %iv.next4 = add nuw nsw i64 %iv3, 1, !dbg !3099
  %96 = add nuw nsw i64 %95, 1, !dbg !3099
  %memoryref_byteoffset.epil = shl i64 %95, 3, !dbg !3094
  %memoryref_data62.epil = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data48, i64 %memoryref_byteoffset.epil, !dbg !3094
  %97 = load double, ptr addrspace(13) %memoryref_data62.epil, align 8, !dbg !3094, !tbaa !376, !alias.scope !105, !noalias !120
  %98 = fadd reassoc contract double %value_phi49201.epil, %97, !dbg !3096
  %epil.iter.cmp.not = icmp eq i64 %iv.next4, %xtraiter, !dbg !3093
  br i1 %epil.iter.cmp.not, label %L278.loopexit, label %L241.epil, !dbg !3093, !llvm.loop !3101

L278.loopexit:                                    ; preds = %L241.epil
  br label %L278, !dbg !3037

L278:                                             ; preds = %L278.loopexit, %guard_pass145, %guard_exit24, %guard_exit, %L236.L278.loopexit_crit_edge.unr-lcssa, %L231, %L209, %L162
  %value_phi22 = phi double [ 0.000000e+00, %guard_exit ], [ %31, %L209 ], [ 0.000000e+00, %guard_exit24 ], [ undef, %L162 ], [ %.unbox, %guard_pass145 ], [ %33, %L231 ], [ %.lcssa.ph, %L236.L278.loopexit_crit_edge.unr-lcssa ], [ %98, %L278.loopexit ]
  ret double %value_phi22, !dbg !3037

pass5:                                            ; preds = %top
  %99 = ashr exact i64 %"x::Array.size.sroa.0.0.copyload", 1, !dbg !3102
  %"new::#partition##0#partition##1.sroa.1.0..sroa_idx" = getelementptr inbounds i8, ptr %"new::Generator", i64 8, !dbg !3104
  store i64 %99, ptr %"new::#partition##0#partition##1.sroa.1.0..sroa_idx", align 8, !dbg !3104, !tbaa !215, !alias.scope !217, !noalias !3106
  %100 = getelementptr inbounds i8, ptr %"new::Generator", i64 16, !dbg !3104
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %100, ptr noundef nonnull align 8 dereferenceable(16) @_j_const_1, i64 16, i1 false) #81, !dbg !3104, !tbaa !109, !alias.scope !531, !noalias !3065
  store ptr addrspace(10) %"x::Array", ptr %0, align 8, !dbg !3105, !noalias !3066
  %101 = addrspacecast ptr %"new::Generator" to ptr addrspace(11), !dbg !3105
  %102 = call fastcc nonnull ptr addrspace(10) @julia_collect_19587(ptr addrspace(11) nocapture readonly %101, ptr nocapture nonnull readonly %0) #81, !dbg !3105
  %103 = addrspacecast ptr addrspace(10) %102 to ptr addrspace(11), !dbg !3107
  %.size_ptr = getelementptr inbounds i8, ptr addrspace(11) %103, i64 16, !dbg !3107
  %.size.0.copyload = load i64, ptr addrspace(11) %.size_ptr, align 8, !dbg !3107, !tbaa !109, !alias.scope !350, !noalias !3040
  %.not.not.not = icmp eq i64 %.size.0.copyload, 0, !dbg !3108
  br i1 %.not.not.not, label %L148, label %L37, !dbg !3048

fail10:                                           ; preds = %L37
  %jl_undefref_exception = load ptr, ptr @jl_undefref_exception, align 8, !dbg !3047, !tbaa !72, !alias.scope !85, !noalias !88, !nonnull !0
  %104 = addrspacecast ptr %jl_undefref_exception to ptr addrspace(12), !dbg !3047
  call void @ijl_throw(ptr addrspace(12) %104) #81, !dbg !3047
  unreachable, !dbg !3047

guard_exit:                                       ; preds = %L53
  store i64 -1, ptr %1, align 8, !dbg !3109, !tbaa !215, !alias.scope !217, !noalias !3106
  %105 = getelementptr inbounds i8, ptr %1, i64 8, !dbg !3109
  call void @llvm.memcpy.p0.p13.i64(ptr noundef nonnull align 8 dereferenceable(40) %105, ptr addrspace(13) noundef align 8 dereferenceable(40) %15, i64 40, i1 false) #81, !dbg !3109
  store ptr addrspace(10) %14, ptr %2, align 8, !dbg !3109, !noalias !3066
  %106 = addrspacecast ptr %1 to ptr addrspace(11), !dbg !3109
  %107 = call fastcc { ptr addrspace(10), i8 } @julia__foldl_impl_19339(ptr noalias nocapture noundef "enzymejl_sret_union_bytes"="8" %sret_box, ptr addrspace(11) nocapture readonly %106, ptr nocapture nonnull readonly %2) #81, !dbg !3109
  %108 = extractvalue { ptr addrspace(10), i8 } %107, 0, !dbg !3109, !enzyme_type !204
  %109 = extractvalue { ptr addrspace(10), i8 } %107, 1, !dbg !3109
  %110 = addrspacecast ptr %sret_box to ptr addrspace(11), !dbg !3109
  %111 = addrspacecast ptr addrspace(10) %108 to ptr addrspace(11), !dbg !3109
  %112 = icmp slt i8 %109, 0, !dbg !3109
  %113 = select i1 %112, ptr addrspace(11) %111, ptr addrspace(11) %110, !dbg !3109
  %114 = and i8 %109, 127, !dbg !3114
  %exactly_isa20.not = icmp eq i8 %114, 1, !dbg !3114
  br i1 %exactly_isa20.not, label %L278, label %L162, !dbg !3114

guard_exit24:                                     ; preds = %L100
  %115 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi103) #81, !dbg !3037
  %116 = addrspacecast ptr addrspace(10) %value_phi103 to ptr addrspace(11), !dbg !3115
  %value_phi18.size_ptr = getelementptr inbounds i8, ptr addrspace(11) %116, i64 16, !dbg !3115
  %value_phi18.size.sroa.0.0.copyload = load i64, ptr addrspace(11) %value_phi18.size_ptr, align 8, !dbg !3115, !tbaa !109, !alias.scope !350, !noalias !3040
  %value_phi18.size.sroa.3.0.value_phi18.size_ptr.sroa_idx = getelementptr inbounds i8, ptr addrspace(11) %116, i64 24, !dbg !3115
  %value_phi18.size.sroa.3.0.copyload = load i64, ptr addrspace(11) %value_phi18.size.sroa.3.0.value_phi18.size_ptr.sroa_idx, align 8, !dbg !3115, !tbaa !109, !alias.scope !350, !noalias !3040
  %117 = mul i64 %value_phi18.size.sroa.3.0.copyload, %value_phi18.size.sroa.0.0.copyload, !dbg !3119
  switch i64 %117, label %L231 [
    i64 0, label %L278
    i64 1, label %L209
  ], !dbg !3123

fail84:                                           ; preds = %L75
  %jl_undefref_exception83 = load ptr, ptr @jl_undefref_exception, align 8, !dbg !3063, !tbaa !72, !alias.scope !85, !noalias !88, !nonnull !0
  %118 = addrspacecast ptr %jl_undefref_exception83 to ptr addrspace(12), !dbg !3063
  call void @ijl_throw(ptr addrspace(12) %118) #81, !dbg !3063
  unreachable, !dbg !3063

guard_pass93:                                     ; preds = %L89
  %119 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi92) #81, !dbg !3067
  %120 = addrspacecast ptr addrspace(10) %value_phi92 to ptr addrspace(11), !dbg !3124
  %121 = load atomic ptr addrspace(10), ptr addrspace(11) %120 unordered, align 8, !dbg !3124, !tbaa !101, !alias.scope !105, !noalias !120, !enzyme_type !204
  store i64 -1, ptr %4, align 8, !dbg !3124, !tbaa !215, !alias.scope !217, !noalias !3106
  %122 = getelementptr inbounds i8, ptr addrspace(11) %120, i64 8, !dbg !3124
  call void @llvm.memcpy.p0.p11.i64(ptr noundef nonnull align 8 dereferenceable(40) %21, ptr addrspace(11) noundef align 8 dereferenceable(40) %122, i64 40, i1 false) #81, !dbg !3124, !tbaa !109, !alias.scope !531, !noalias !3065
  store ptr addrspace(10) %121, ptr %5, align 8, !dbg !3124, !noalias !3066
  store ptr addrspace(10) %root_phi89, ptr %6, align 8, !dbg !3124, !noalias !3066
  %123 = call fastcc nonnull ptr addrspace(10) @julia___19578(ptr addrspace(11) nocapture readonly %22, ptr nocapture nonnull readonly %5, ptr addrspace(11) nocapture readonly %23, ptr nocapture nonnull readonly %6) #81, !dbg !3124
  br label %L100, !dbg !3057

fail121:                                          ; preds = %L126
  %jl_undefref_exception120 = load ptr, ptr @jl_undefref_exception, align 8, !dbg !3074, !tbaa !72, !alias.scope !85, !noalias !88, !nonnull !0
  %124 = addrspacecast ptr %jl_undefref_exception120 to ptr addrspace(12), !dbg !3074
  call void @ijl_throw(ptr addrspace(12) %124) #81, !dbg !3074
  unreachable, !dbg !3074

guard_pass131:                                    ; preds = %L89
  %125 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi92) #81, !dbg !3067
  store ptr addrspace(10) %root_phi89, ptr %7, align 8, !dbg !3124, !noalias !3066
  %126 = call fastcc nonnull ptr addrspace(10) @julia___19364(ptr addrspace(10) %value_phi92, ptr addrspace(11) nocapture readonly %23, ptr nocapture nonnull readonly %7) #81, !dbg !3124
  br label %L100, !dbg !3057

guard_pass145:                                    ; preds = %L162
  %.unbox = load double, ptr addrspace(11) %113, align 8, !dbg !3057, !tbaa !215, !alias.scope !217, !noalias !558
  br label %L278, !dbg !3057
}

 Type analysis state: 
<analysis>
ptr addrspace(10) %"x::Array": {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
i64 1: {[-1]:Integer}, intvals: {1,}
i64 0: {[-1]:Anything}, intvals: {0,}
ptr addrspace(10) null: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {0,}
  %pgcstack = call ptr @julia.get_pgcstack() #81: {}, intvals: {}
  %2 = alloca ptr addrspace(10), align 8: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Pointer, [-1,-1,8,0]:Integer, [-1,-1,8,1]:Integer, [-1,-1,8,2]:Integer, [-1,-1,8,3]:Integer, [-1,-1,8,4]:Integer, [-1,-1,8,5]:Integer, [-1,-1,8,6]:Integer, [-1,-1,8,7]:Integer, [-1,-1,8,8]:Pointer, [-1,-1,8,8,-1]:Float@double, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer}, intvals: {}
  %4 = alloca [6 x i64], align 8: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %memoryref_mem = load ptr addrspace(10), ptr addrspace(11) %13, align 8, !dbg !103, !tbaa !124, !alias.scope !127, !noalias !128, !dereferenceable_or_null !129, !align !130, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %7 = alloca ptr addrspace(10), align 8: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Pointer, [-1,-1,8,0]:Integer, [-1,-1,8,1]:Integer, [-1,-1,8,2]:Integer, [-1,-1,8,3]:Integer, [-1,-1,8,4]:Integer, [-1,-1,8,5]:Integer, [-1,-1,8,6]:Integer, [-1,-1,8,7]:Integer, [-1,-1,8,8]:Pointer, [-1,-1,8,8,-1]:Float@double, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer}, intvals: {}
  %memoryref_mem35 = load ptr addrspace(10), ptr addrspace(11) %30, align 8, !dbg !172, !tbaa !124, !alias.scope !127, !noalias !128, !dereferenceable_or_null !129, !align !130, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %6 = alloca ptr addrspace(10), align 8: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Pointer, [-1,-1,8,0]:Integer, [-1,-1,8,1]:Integer, [-1,-1,8,2]:Integer, [-1,-1,8,3]:Integer, [-1,-1,8,4]:Integer, [-1,-1,8,5]:Integer, [-1,-1,8,6]:Integer, [-1,-1,8,7]:Integer, [-1,-1,8,8]:Pointer, [-1,-1,8,8,-1]:Float@double, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer}, intvals: {}
  %sret_box = alloca i64, align 8: {[-1]:Pointer}, intvals: {}
  %"new::Generator" = alloca [4 x i64], align 8: {[-1]:Pointer}, intvals: {}
  %"x::Array.size.sroa.0.0.copyload" = load i64, ptr addrspace(11) %"x::Array.size_ptr", align 8, !dbg !75, !tbaa !80, !alias.scope !81, !noalias !85, !enzyme_inactive !0, !enzyme_type !91, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0: {[-1]:Integer}, intvals: {}
  %16 = load [5 x i64], ptr addrspace(13) %15, align 8, !dbg !138: {}, intvals: {}
  %106 = addrspacecast ptr %1 to ptr addrspace(11), !dbg !226: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %5 = alloca ptr addrspace(10), align 8: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Pointer, [-1,-1,8,0]:Integer, [-1,-1,8,1]:Integer, [-1,-1,8,2]:Integer, [-1,-1,8,3]:Integer, [-1,-1,8,4]:Integer, [-1,-1,8,5]:Integer, [-1,-1,8,6]:Integer, [-1,-1,8,7]:Integer, [-1,-1,8,8]:Pointer, [-1,-1,8,8,-1]:Float@double, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer}, intvals: {}
  %14 = load atomic ptr addrspace(10), ptr addrspace(13) %memoryref_data9 unordered, align 8, !dbg !103, !tbaa !133, !alias.scope !136, !noalias !137, !enzyme_type !131: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
  %0 = alloca ptr addrspace(10), align 8: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Pointer, [-1,-1,8,0]:Integer, [-1,-1,8,1]:Integer, [-1,-1,8,2]:Integer, [-1,-1,8,3]:Integer, [-1,-1,8,4]:Integer, [-1,-1,8,5]:Integer, [-1,-1,8,6]:Integer, [-1,-1,8,7]:Integer, [-1,-1,8,8]:Pointer, [-1,-1,8,8,-1]:Float@double, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer}, intvals: {}
  %memoryref_data = load ptr, ptr addrspace(11) %103, align 8, !dbg !103, !tbaa !124, !alias.scope !127, !noalias !128, !enzyme_nocache !0: {}, intvals: {}
  %17 = load atomic ptr addrspace(10), ptr addrspace(13) %memoryref_data82 unordered, align 8, !dbg !147, !tbaa !133, !alias.scope !136, !noalias !137, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %1 = alloca [6 x i64], align 8: {[-1]:Pointer}, intvals: {}
  %9 = addrspacecast ptr addrspace(10) %"x::Array" to ptr addrspace(11), !dbg !75: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
  %.size.0.copyload = load i64, ptr addrspace(11) %.size_ptr, align 8, !dbg !222, !tbaa !80, !alias.scope !81, !noalias !85: {[-1]:Integer}, intvals: {}
  %101 = addrspacecast ptr %"new::Generator" to ptr addrspace(11), !dbg !216: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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}, intvals: {}
  %103 = addrspacecast ptr addrspace(10) %102 to ptr addrspace(11), !dbg !222: {[-1]:Pointer}, intvals: {}
  %121 = load atomic ptr addrspace(10), ptr addrspace(11) %120 unordered, align 8, !dbg !250, !tbaa !149, !alias.scope !136, !noalias !137, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %23 = addrspacecast ptr %3 to ptr addrspace(11): {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %safepoint = load ptr, ptr %8, align 8, !tbaa !73: {}, intvals: {}
  %22 = addrspacecast ptr %4 to ptr addrspace(11): {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %memoryref_mem117 = load ptr addrspace(10), ptr addrspace(11) %13, align 8, !dbg !165, !tbaa !124, !alias.scope !127, !noalias !128, !dereferenceable_or_null !129, !align !130, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %27 = load atomic ptr addrspace(10), ptr addrspace(13) %memoryref_data119 unordered, align 8, !dbg !165, !tbaa !133, !alias.scope !136, !noalias !137, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %19 = addrspacecast ptr addrspace(10) %"box::SubArray" to ptr addrspace(11), !dbg !138: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %.sroa.6 = alloca [5 x i64], align 8: {[-1]:Pointer}, intvals: {}
  %memoryref_mem46 = load ptr addrspace(10), ptr addrspace(11) %32, align 8, !dbg !194, !tbaa !124, !alias.scope !127, !noalias !128, !dereferenceable_or_null !129, !align !130, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %ptls_load = load ptr, ptr %ptls_field, align 8, !tbaa !69: {}, intvals: {}
  %3 = alloca [6 x i64], align 8: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %value_phi91 = phi i1 [ false, %L87.L89_crit_edge ], [ true, %L139 ]: {[-1]:Integer}, intvals: {0,}
  %value_phi92 = phi ptr addrspace(10) [ %"box::SubArray", %L87.L89_crit_edge ], [ %value_phi103, %L139 ]: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
  %value_phi22 = phi double [ 0.000000e+00, %guard_exit ], [ %31, %L209 ], [ 0.000000e+00, %guard_exit24 ], [ undef, %L162 ], [ %.unbox, %guard_pass145 ], [ %33, %L231 ], [ %.lcssa.ph, %L236.L278.loopexit_crit_edge.unr-lcssa ], [ %98, %L278.loopexit ]: {[-1]:Float@double}, intvals: {}
  %iv = phi i64 [ %iv.next, %L139 ], [ 0, %L87.L89_crit_edge ]: {[-1]:Integer}, intvals: {0,}
  %root_phi89 = phi ptr addrspace(10) [ %17, %L87.L89_crit_edge ], [ %27, %L139 ]: {[-1]:Pointer}, intvals: {}
  %123 = call fastcc nonnull ptr addrspace(10) @julia___19578(ptr addrspace(11) nocapture readonly %22, ptr nocapture nonnull readonly %5, ptr addrspace(11) nocapture readonly %23, ptr nocapture nonnull readonly %6) #81, !dbg !250: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
  %"box::SubArray" = call noalias nonnull align 8 dereferenceable(48) "enzyme_ReadOnlyOrThrow" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}" ptr addrspace(10) @julia.gc_alloc_obj(ptr nonnull %current_task, i64 48, ptr addrspace(10) @"ejl_inserted$_Main_Base_SubArray_19327$false$5033763072") #85, !dbg !138, !enzymejl_gc_alloc_rt !148: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}, intvals: {}
  %107 = call fastcc { ptr addrspace(10), i8 } @julia__foldl_impl_19339(ptr noalias nocapture noundef "enzymejl_sret_union_bytes"="8" %sret_box, ptr addrspace(11) nocapture readonly %106, ptr nocapture nonnull readonly %2) #81, !dbg !226: {}, intvals: {}
  %126 = call fastcc nonnull ptr addrspace(10) @julia___19364(ptr addrspace(10) %value_phi92, ptr addrspace(11) nocapture readonly %23, ptr nocapture nonnull readonly %7) #81, !dbg !250: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}, intvals: {}
  %102 = call fastcc nonnull ptr addrspace(10) @julia_collect_19587(ptr addrspace(11) nocapture readonly %101, ptr nocapture nonnull readonly %0) #81, !dbg !216: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Float@double, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,1]:Integer, [-1,0,0,8,2]:Integer, [-1,0,0,8,3]:Integer, [-1,0,0,8,4]:Integer, [-1,0,0,8,5]:Integer, [-1,0,0,8,6]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,8]:Pointer, [-1,0,0,8,8,-1]:Float@double, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-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, [-1,0,41]:Integer, [-1,0,42]:Integer, [-1,0,43]:Integer, [-1,0,44]:Integer, [-1,0,45]:Integer, [-1,0,46]:Integer, [-1,0,47]:Integer, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,0]:Pointer, [-1,8,8,0,0]:Pointer, [-1,8,8,0,0,-1]:Float@double, [-1,8,8,0,8]:Pointer, [-1,8,8,0,8,0]:Integer, [-1,8,8,0,8,1]:Integer, [-1,8,8,0,8,2]:Integer, [-1,8,8,0,8,3]:Integer, [-1,8,8,0,8,4]:Integer, [-1,8,8,0,8,5]:Integer, [-1,8,8,0,8,6]:Integer, [-1,8,8,0,8,7]:Integer, [-1,8,8,0,8,8]:Pointer, [-1,8,8,0,16]:Integer, [-1,8,8,0,17]:Integer, [-1,8,8,0,18]:Integer, [-1,8,8,0,19]:Integer, [-1,8,8,0,20]:Integer, [-1,8,8,0,21]:Integer, [-1,8,8,0,22]:Integer, [-1,8,8,0,23]:Integer, [-1,8,8,0,24]:Integer, [-1,8,8,0,25]:Integer, [-1,8,8,0,26]:Integer, [-1,8,8,0,27]:Integer, [-1,8,8,0,28]:Integer, [-1,8,8,0,29]:Integer, [-1,8,8,0,30]:Integer, [-1,8,8,0,31]:Integer, [-1,8,8,8]:Integer, [-1,8,8,9]:Integer, [-1,8,8,10]:Integer, [-1,8,8,11]:Integer, [-1,8,8,12]:Integer, [-1,8,8,13]:Integer, [-1,8,8,14]:Integer, [-1,8,8,15]:Integer, [-1,8,8,16]:Integer, [-1,8,8,17]:Integer, [-1,8,8,18]:Integer, [-1,8,8,19]:Integer, [-1,8,8,20]:Integer, [-1,8,8,21]:Integer, [-1,8,8,22]:Integer, [-1,8,8,23]:Integer, [-1,8,8,24]:Integer, [-1,8,8,25]:Integer, [-1,8,8,26]:Integer, [-1,8,8,27]:Integer, [-1,8,8,28]:Integer, [-1,8,8,29]:Integer, [-1,8,8,30]:Integer, [-1,8,8,31]:Integer, [-1,8,8,32]:Integer, [-1,8,8,33]:Integer, [-1,8,8,34]:Integer, [-1,8,8,35]:Integer, [-1,8,8,36]:Integer, [-1,8,8,37]:Integer, [-1,8,8,38]:Integer, [-1,8,8,39]:Integer, [-1,8,8,40]:Integer, [-1,8,8,41]:Integer, [-1,8,8,42]:Integer, [-1,8,8,43]:Integer, [-1,8,8,44]:Integer, [-1,8,8,45]:Integer, [-1,8,8,46]:Integer, [-1,8,8,47]: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}, intvals: {}
  %memoryref_data9 = call ptr addrspace(13) @julia.gc_loaded(ptr addrspace(10) %memoryref_mem, ptr %memoryref_data) #81, !dbg !103: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %13 = getelementptr inbounds { ptr, ptr addrspace(10) }, ptr addrspace(11) %103, i64 0, i32 1, !dbg !103: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %108 = extractvalue { ptr addrspace(10), i8 } %107, 0, !dbg !226, !enzyme_type !131: {[-1]:Pointer}, intvals: {}
  %.fca.0.extract = extractvalue [5 x i64] %16, 0, !dbg !138: {[-1]:Integer}, intvals: {}
  %.fca.1.extract = extractvalue [5 x i64] %16, 1, !dbg !138: {[-1]:Integer}, intvals: {}
  %.fca.2.extract = extractvalue [5 x i64] %16, 2, !dbg !138: {[-1]:Integer}, intvals: {}
  %.fca.3.extract = extractvalue [5 x i64] %16, 3, !dbg !138: {[-1]:Integer}, intvals: {}
  %.fca.4.extract = extractvalue [5 x i64] %16, 4, !dbg !138: {[-1]:Integer}, intvals: {}
  %.not = icmp eq i64 %.size.0.copyload, 1, !dbg !139: {[-1]:Integer}, intvals: {}
  %11 = icmp eq i64 %10, 0, !dbg !93: {[-1]:Integer}, intvals: {}
  %.not174 = icmp eq ptr addrspace(10) %17, null, !dbg !147: {[-1]:Integer}, intvals: {}
  %10 = and i64 %"x::Array.size.sroa.0.0.copyload", 1, !dbg !93: {[-1]:Integer}, intvals: {}
  %.not173 = icmp eq ptr addrspace(10) %14, null, !dbg !103: {[-1]:Integer}, intvals: {}
  %current_task = getelementptr inbounds i8, ptr %pgcstack, i64 -152: {}, intvals: {}
  %20 = getelementptr inbounds i8, ptr addrspace(11) %19, i64 8, !dbg !138: {[-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, [-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}, intvals: {}
  %119 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi92) #81, !dbg !156: {[-1]:Pointer}, intvals: {}
  %.sroa.1.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr addrspace(11) %20, i64 16, !dbg !138: {[-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, [-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}, intvals: {}
  %18 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data9, i64 56, !dbg !147: {[-1]:Pointer}, intvals: {}
  %.sroa.1.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr addrspace(11) %20, i64 32, !dbg !138: {[-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: {}
  %.sroa.1.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr addrspace(11) %20, i64 24, !dbg !138: {[-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, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {}
  %memoryref_data82 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data9, i64 48, !dbg !147: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %ptls_field = getelementptr inbounds i8, ptr %pgcstack, i64 16: {[-1]:Pointer}, intvals: {}
  %.sroa.1.sroa.3.0..sroa_idx = getelementptr inbounds i8, ptr addrspace(11) %20, i64 8, !dbg !138: {[-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, [-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}, intvals: {}
  %115 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi103) #81, !dbg !68: {[-1]:Pointer}, intvals: {}
  %21 = getelementptr inbounds i8, ptr %4, i64 8: {[-1]:Pointer}, intvals: {}
  %"x::Array.size_ptr" = getelementptr inbounds i8, ptr addrspace(11) %9, i64 16, !dbg !75: {[-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, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer}, intvals: {}
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %3, i64 8: {[-1]:Pointer}, intvals: {}
  %8 = getelementptr inbounds i8, ptr %ptls_load, i64 16: {[-1]:Pointer}, intvals: {}
  %125 = call "enzyme_type"="{[-1]:Pointer}" ptr addrspace(10) @julia.typeof(ptr addrspace(10) nonnull %value_phi92) #81, !dbg !156: {[-1]:Pointer}, intvals: {}
  %15 = getelementptr inbounds i8, ptr addrspace(13) %memoryref_data9, i64 8, !dbg !103: {[-1]:Pointer}, intvals: {}
</analysis>

Illegal updateAnalysis prev:{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer} new: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-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}
val:   %"box::SubArray" = call noalias nonnull align 8 dereferenceable(48) "enzyme_ReadOnlyOrThrow" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,1]:Integer, [-1,0,8,2]:Integer, [-1,0,8,3]:Integer, [-1,0,8,4]:Integer, [-1,0,8,5]:Integer, [-1,0,8,6]:Integer, [-1,0,8,7]:Integer, [-1,0,8,8]:Pointer, [-1,0,8,8,-1]:Float@double, [-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,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, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer}" ptr addrspace(10) @julia.gc_alloc_obj(ptr nonnull %current_task, i64 48, ptr addrspace(10) @"ejl_inserted$_Main_Base_SubArray_19327$false$5033763072") #85, !dbg !138, !enzymejl_gc_alloc_rt !148 origin=  %value_phi92 = phi ptr addrspace(10) [ %"box::SubArray", %L87.L89_crit_edge ], [ %value_phi103, %L139 ]

Caused by:
Stacktrace:
 [1] getindex
   @ ./essentials.jl:919
 [2] iterate (repeats 2 times)
   @ ./array.jl:901
 [3] _foldl_impl
   @ ./reduce.jl:48
 [4] foldl_impl
   @ ./reduce.jl:40
 [5] mapfoldl_impl
   @ ./reduce.jl:36
 [6] mapfoldl
   @ ./reduce.jl:167
 [7] foldl
   @ ./reduce.jl:190
 [8] f
   @ example.jl:13

Stacktrace:
  [1] julia_error(msg::String, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/errors.jl:1167
  [2] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/errors.jl:997
  [3] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, runtimeActivity::Bool, strongZero::Bool, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
    @ Enzyme.API ~/.julia/packages/Enzyme/RBPHq/src/api.jl:270
  [4] macro expansion
    @ ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:2772 [inlined]
  [5] macro expansion
    @ ~/.julia/packages/LLVM/fEIbx/src/base.jl:97 [inlined]
  [6] enzyme!(job::GPUCompiler.CompilerJob{…}, interp::Enzyme.Compiler.Interpreter.EnzymeInterpreter{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…} where N, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…}, removedRoots::Set{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:2645
  [7] compile_unhooked(output::Symbol, job::GPUCompiler.CompilerJob{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:5145
  [8] compile(target::Symbol, job::GPUCompiler.CompilerJob; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/OCZFZ/src/driver.jl:67
  [9] compile
    @ ~/.julia/packages/GPUCompiler/OCZFZ/src/driver.jl:55 [inlined]
 [10] _thunk(job::GPUCompiler.CompilerJob{…}, postopt::Bool)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:6745
 [11] _thunk
    @ ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:6743 [inlined]
 [12] cached_compilation
    @ ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:6801 [inlined]
 [13] thunkbase(mi::Core.MethodInstance, World::UInt64, FA::Type{…}, A::Type{…}, TT::Type, Mode::Enzyme.API.CDerivativeMode, width::Int64, ModifiedBetween::NTuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, StrongZero::Bool, edges::Vector{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:6917
 [14] thunk_generator(world::UInt64, source::Union{…}, FA::Type, A::Type, TT::Type, Mode::Enzyme.API.CDerivativeMode, Width::Int64, ModifiedBetween::NTuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, StrongZero::Bool, self::Any, fakeworld::Any, fa::Type, a::Type, tt::Type, mode::Type, width::Type, modifiedbetween::Type, returnprimal::Type, shadowinit::Type, abi::Type, erriffuncwritten::Type, runtimeactivity::Type, strongzero::Type)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/RBPHq/src/compiler.jl:7061
 [15] autodiff(mode::ReverseMode{…}, f::Const{…}, ::Type{…}, args::Duplicated{…})
    @ Enzyme ~/.julia/packages/Enzyme/RBPHq/src/Enzyme.jl:509
 [16] top-level scope
    @ example.jl:17
 [17] include(mapexpr::Function, mod::Module, _path::String)
    @ Base ./Base.jl:307
 [18] top-level scope
    @ REPL[1]:1
in expression starting at example.jl:17
Some type information was truncated. Use `show(err)` to see complete types.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions