-
Notifications
You must be signed in to change notification settings - Fork 91
Differentiating through foldl on SubArrays thwarts type analysis #3008
Copy link
Copy link
Open
Description
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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels