Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attribute 'nocapture' applied to incompatible type #2162

Closed
Red-Portal opened this issue Dec 3, 2024 · 8 comments
Closed

Attribute 'nocapture' applied to incompatible type #2162

Red-Portal opened this issue Dec 3, 2024 · 8 comments

Comments

@Red-Portal
Copy link

Enzyme fails on AdvancedVI due to some LLVM errors. The full error message can be found here. I can try working on an MWE if needed so just let me know if that would be necessary.

@wsmoses
Copy link
Member

wsmoses commented Dec 4, 2024

can you upload the log before GH removes it?

@wsmoses
Copy link
Member

wsmoses commented Dec 4, 2024

In any case can you check if #2163 resolves it?

@Red-Portal
Copy link
Author

Here's the log:

Got exception outside of a @test
  LLVM error: broken gc calling conv fix
  Attribute 'nocapture' applied to incompatible type!
  {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64)* @ijl_eqtable_put
  
  ; ModuleID = 'start'
  source_filename = "start"
  target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
  target triple = "x86_64-linux-gnu"
  
  @jl_small_typeof = external local_unnamed_addr constant i8
  @ejl_enz_runtime_error_if_active = external addrspace(10) global {}, !enzyme_inactive !0, !enzyme_ta_norecur !0
  @enz_exception = private unnamed_addr constant [68 x i8] c"Enzyme: Not yet implemented augmented forward for jl_idtable_rehash\00", align 1
  @ejl_enz_runtime_exc = external addrspace(10) global {}, !enzyme_inactive !0, !enzyme_ta_norecur !0
  @ejl_jl_nothing = external addrspace(10) global {}, !enzyme_inactive !0, !enzyme_ta_norecur !0
  @enz_exception.8 = private unnamed_addr constant [58 x i8] c"Enzyme: Not yet implemented reverse for jl_idtable_rehash\00", align 1
  @enz_exception.15 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  @enz_exception.16 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  @enz_exception.17 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  @enz_exception.18 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  @enz_exception.19 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  @enz_exception.20 = private unnamed_addr constant [104 x i8] c"Enzyme: The original primal code hits this error condition, thus differentiating it does not make sense\00", align 1
  
  ; Function Attrs: noinline noreturn
  define private fastcc void @julia_throw_boundserror_100259({} addrspace(10)* nofree noundef nonnull align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-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@float, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}" "enzymejl_parmtype"="139727828651344" "enzymejl_parmtype_ref"="2" %0, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) "enzyme_inactive" "enzyme_type"="{[-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}" "enzymejl_parmtype"="139727701162688" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #0 !dbg !8 {
  top:
    %2 = call {}*** @julia.get_pgcstack()
    %current_task13 = getelementptr inbounds {}**, {}*** %2, i64 -14
    %3 = bitcast {}*** %current_task13 to {}*
    %ptls_field4 = getelementptr inbounds {}**, {}*** %2, i64 2
    %4 = bitcast {}*** %ptls_field4 to i64***
    %ptls_load56 = load i64**, i64*** %4, align 8, !tbaa !11
    %5 = getelementptr inbounds i64*, i64** %ptls_load56, i64 2
    %safepoint = load i64*, i64** %5, align 8, !tbaa !15
    fence syncscope("singlethread") seq_cst
    call void @julia.safepoint(i64* %safepoint) #20, !dbg !17
    fence syncscope("singlethread") seq_cst
    %6 = call noalias nonnull align 8 dereferenceable(16) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %3, i64 noundef 16, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727701162688 to {}*) to {} addrspace(10)*)) #21, !dbg !17
    %7 = bitcast {} addrspace(10)* %6 to i8 addrspace(10)*, !dbg !17, !enzyme_inactive !0
    %8 = bitcast [1 x [2 x i64]] addrspace(11)* %1 to i8 addrspace(11)*, !dbg !17, !enzyme_inactive !0
    call void @llvm.memcpy.p10i8.p11i8.i64(i8 addrspace(10)* nocapture nofree noundef nonnull align 8 dereferenceable(16) %7, i8 addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %8, i64 noundef 16, i1 noundef false), !dbg !17, !tbaa !18, !alias.scope !19, !noalias !23, !enzyme_truetype !31
    %9 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727681101648 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727713124240 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %0, {} addrspace(10)* nofree nonnull %6) #22, !dbg !17
    %10 = addrspacecast {} addrspace(10)* %9 to {} addrspace(12)*, !dbg !17
    call void @ijl_throw({} addrspace(12)* %10) #23, !dbg !17
    unreachable, !dbg !17
  }
  
  ; Function Attrs: nofree memory(none)
  declare {}*** @julia.get_pgcstack() local_unnamed_addr #1
  
  ; Function Attrs: nofree memory(argmem: readwrite, inaccessiblemem: readwrite)
  declare void @julia.safepoint(i64*) local_unnamed_addr #2
  
  ; Function Attrs: nofree
  declare nonnull {} addrspace(10)* @ijl_invoke({} addrspace(10)*, {} addrspace(10)** nocapture readonly, i32, {} addrspace(10)*) #3
  
  ; Function Attrs: nofree
  declare nonnull {} addrspace(10)* @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) local_unnamed_addr #3
  
  ; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(1) memory(inaccessiblemem: readwrite)
  declare noalias nonnull {} addrspace(10)* @julia.gc_alloc_obj({}*, i64, {} addrspace(10)*) local_unnamed_addr #4
  
  ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
  declare void @llvm.memcpy.p10i8.p11i8.i64(i8 addrspace(10)* noalias nocapture writeonly, i8 addrspace(11)* noalias nocapture readonly, i64, i1 immarg) #5
  
  ; Function Attrs: noreturn
  declare void @ijl_throw({} addrspace(12)*) local_unnamed_addr #6
  
  ; Function Attrs: noreturn
  define private fastcc void @julia_throw_dmrsa_100265([1 x i64] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-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}" "enzymejl_parmtype"="139727657705104" "enzymejl_parmtype_ref"="1" %0, i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="139727713683712" "enzymejl_parmtype_ref"="0" %1) unnamed_addr #7 !dbg !32 {
  top:
    %2 = call {}*** @julia.get_pgcstack()
    %current_task14 = getelementptr inbounds {}**, {}*** %2, i64 -14
    %3 = bitcast {}*** %current_task14 to {}*
    %ptls_field5 = getelementptr inbounds {}**, {}*** %2, i64 2
    %4 = bitcast {}*** %ptls_field5 to i64***
    %ptls_load67 = load i64**, i64*** %4, align 8, !tbaa !11
    %5 = getelementptr inbounds i64*, i64** %ptls_load67, i64 2
    %safepoint = load i64*, i64** %5, align 8, !tbaa !15
    fence syncscope("singlethread") seq_cst
    call void @julia.safepoint(i64* %safepoint) #20, !dbg !34
    fence syncscope("singlethread") seq_cst
    %6 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %3, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727657705104 to {}*) to {} addrspace(10)*)) #21, !dbg !34
    %7 = getelementptr inbounds [1 x i64], [1 x i64] addrspace(11)* %0, i64 0, i64 0, !dbg !34
    %8 = bitcast {} addrspace(10)* %6 to i64 addrspace(10)*, !dbg !34, !enzyme_inactive !0
    %9 = load i64, i64 addrspace(11)* %7, align 8, !dbg !34, !tbaa !15, !alias.scope !35, !noalias !36, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    store i64 %9, i64 addrspace(10)* %8, align 8, !dbg !34, !tbaa !39, !alias.scope !43, !noalias !44
    %10 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %1) #24, !dbg !34
    %11 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727798897872 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727661032624 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727773002672 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %6, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727773002608 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %10) #22, !dbg !34
    %12 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %3, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727659986192 to {}*) to {} addrspace(10)*)) #21, !dbg !34
    %13 = bitcast {} addrspace(10)* %12 to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !34, !enzyme_inactive !0
    %14 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %13, i64 0, i64 0, !dbg !34
    store {} addrspace(10)* %11, {} addrspace(10)* addrspace(10)* %14, align 8, !dbg !34, !tbaa !39, !alias.scope !43, !noalias !44
    %15 = addrspacecast {} addrspace(10)* %12 to {} addrspace(12)*, !dbg !34, !enzyme_inactive !0
    call void @ijl_throw({} addrspace(12)* %15) #23, !dbg !34
    unreachable, !dbg !34
  }
  
  ; Function Attrs: mustprogress nofree nounwind willreturn memory(inaccessiblemem: readwrite)
  declare noalias nonnull align 8 dereferenceable(8) {} addrspace(10)* @ijl_box_int64(i64 signext) local_unnamed_addr #8
  
  ; Function Attrs: nofree norecurse nounwind memory(inaccessiblemem: readwrite)
  declare void @julia.write_barrier({} addrspace(10)* readonly, ...) local_unnamed_addr #9
  
  ; Function Attrs: noreturn
  declare void @ijl_bounds_error_int({} addrspace(12)*, i64) local_unnamed_addr #10
  
  ; Function Attrs: nofree memory(inaccessiblemem: readwrite)
  declare token @llvm.julia.gc_preserve_begin(...) #11
  
  ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
  declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1 immarg) #5
  
  ; Function Attrs: nofree memory(inaccessiblemem: readwrite)
  declare void @llvm.julia.gc_preserve_end(token) #11
  
  ; Function Attrs: mustprogress nofree nounwind willreturn memory(inaccessiblemem: readwrite)
  declare noalias nonnull align 16 dereferenceable(16) {} addrspace(10)* @jl_alloc_genericmemory({} addrspace(10)*, i64) local_unnamed_addr #12
  
  ; Function Attrs: mustprogress nofree nounwind willreturn
  declare noalias nonnull {} addrspace(10)* @ijl_idtable_rehash({} addrspace(10)*, i64) local_unnamed_addr #13
  
  ; Function Attrs: memory(argmem: readwrite)
  declare {} addrspace(10)* @ijl_eqtable_put({} addrspace(10)*, {} addrspace(10)* "enzyme_inactive", {} addrspace(10)*, i64 nocapture writeonly "enzyme_inactive") local_unnamed_addr #14
  
  ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
  declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #15
  
  ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
  declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #15
  
  ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
  declare i64 @llvm.smax.i64(i64, i64) #16
  
  declare {} addrspace(10)* @jl_typeof({} addrspace(10)*, ...)
  
  declare {} addrspace(10)* @ijl_apply_generic({} addrspace(10)*, {} addrspace(10)**, i32)
  
  declare {} addrspace(10)* @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...)
  
  ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
  declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #17
  
  ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
  declare void @llvm.memset.p10i8.i64(i8 addrspace(10)* nocapture writeonly, i8, i64, i1 immarg) #17
  
  declare void @jl_throw({} addrspace(12)*)
  
  define void @augmented_julia_CachedWalk_100192_inner_7wrap({ { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* noalias nocapture nofree nonnull sret({ { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }) align 8 dereferenceable(176) %0, [17 x {} addrspace(10)*]* noalias nocapture nofree writeonly %1, { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %2, { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %3, [1 x { { [1 x {} addrspace(10)*] }, {} addrspace(10)* }] %4, [1 x { { [1 x {} addrspace(10)*] }, {} addrspace(10)* }] %5, {} addrspace(10)* %6, i64 %7) #18 !dbg !45 {
  entry:
    %8 = call {}*** @julia.get_pgcstack()
    %9 = alloca [1 x [2 x i64]], align 8
    %10 = alloca [1 x [2 x i64]], align 8
    %11 = alloca [1 x i64], align 8
    %12 = alloca i32, align 8
    %13 = bitcast [1 x [2 x i64]]* %9 to i8*
    call void @llvm.lifetime.start.p0i8(i64 noundef 16, i8* noundef nonnull dereferenceable(16) %13)
    %14 = bitcast [1 x [2 x i64]]* %10 to i8*
    call void @llvm.lifetime.start.p0i8(i64 noundef 16, i8* noundef nonnull dereferenceable(16) %14)
    %15 = bitcast [1 x i64]* %11 to i8*
    call void @llvm.lifetime.start.p0i8(i64 noundef 8, i8* noundef nonnull dereferenceable(8) %15)
    %16 = bitcast i32* %12 to i8*
    call void @llvm.lifetime.start.p0i8(i64 noundef 4, i8* noundef nonnull align 8 %16)
    %.fca.0.0.0.extract.i = extractvalue { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %2, 0, 0, 0, !dbg !47
    %".fca.0.0.0.extract'ipev.i" = extractvalue { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %3, 0, 0, 0, !dbg !47
    %.fca.1.extract.i = extractvalue { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %2, 1, !dbg !47
    %".fca.1.extract'ipev.i" = extractvalue { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %3, 1
    %pgcstack.i.i = call {}*** @julia.get_pgcstack() #25
    %current_task1.i121.i = getelementptr inbounds {}**, {}*** %pgcstack.i.i, i64 -14
    %ptls_field.i122.i = getelementptr inbounds {}**, {}*** %pgcstack.i.i, i64 2
    %17 = bitcast {}*** %ptls_field.i122.i to i64***
    %ptls_load.i123124.i = load i64**, i64*** %17, align 8, !tbaa !11, !alias.scope !50, !noalias !53
    %18 = getelementptr inbounds i64*, i64** %ptls_load.i123124.i, i64 2
    %safepoint.i.i = load i64*, i64** %18, align 8, !tbaa !15, !alias.scope !55, !noalias !58
    fence syncscope("singlethread") seq_cst
    call void @julia.safepoint(i64* %safepoint.i.i) #25, !dbg !60
    fence syncscope("singlethread") seq_cst
    %"'ipc.i" = bitcast {} addrspace(10)* %".fca.1.extract'ipev.i" to {} addrspace(10)* addrspace(10)*, !dbg !62
    %19 = bitcast {} addrspace(10)* %.fca.1.extract.i to {} addrspace(10)* addrspace(10)*, !dbg !62
    %"'ipc14.i" = addrspacecast {} addrspace(10)* addrspace(10)* %"'ipc.i" to {} addrspace(10)* addrspace(11)*, !dbg !62
    %20 = addrspacecast {} addrspace(10)* addrspace(10)* %19 to {} addrspace(10)* addrspace(11)*, !dbg !62
    %"'ipl.i" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"'ipc14.i" unordered, align 8, !dbg !62, !tbaa !74, !alias.scope !76, !noalias !79, !nonnull !0, !dereferenceable !81
    %21 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %20 unordered, align 8, !dbg !62, !tbaa !74, !alias.scope !82, !noalias !83, !nonnull !0, !dereferenceable !81, !align !84, !enzyme_type !85, !enzymejl_source_type_Memory\7BAny\7D !0, !enzymejl_byref_MUT_REF !0
    %22 = call {} addrspace(10)* inttoptr (i64 139727991100400 to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* nonnull %"'ipl.i", {} addrspace(10)* %6, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727864149104 to {}*) to {} addrspace(10)*)), !dbg !88
    %23 = call {} addrspace(10)* ({} addrspace(10)*, ...) @jl_typeof({} addrspace(10)* %22), !dbg !88
    %24 = call {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* noundef nonnull @ijl_apply_generic, {} addrspace(10)* noundef @ejl_enz_runtime_error_if_active, {} addrspace(10)* %23), !dbg !88
    %25 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* inttoptr (i64 139727991100400 to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* noundef nonnull readonly %21, {} addrspace(10)* noundef nonnull readonly %6, {} addrspace(10)* noundef readonly addrspacecast ({}* inttoptr (i64 139727864149104 to {}*) to {} addrspace(10)*)) #25, !dbg !88
    %26 = addrspacecast {} addrspace(10)* %25 to {} addrspace(11)*, !dbg !89
    %.not.i = icmp eq {} addrspace(11)* %26, addrspacecast ({}* inttoptr (i64 139727864149104 to {}*) to {} addrspace(11)*), !dbg !89
    br i1 %.not.i, label %L27.i.i, label %L25.i.i, !dbg !90
  
  L25.i.i:                                          ; preds = %entry
    br label %augmented_julia_CachedWalk_100192_inner.7.exit, !dbg !91
  
  L27.i.i:                                          ; preds = %entry
    %27 = bitcast {} addrspace(10)* %6 to i8 addrspace(10)*, !dbg !92
    %28 = addrspacecast i8 addrspace(10)* %27 to i8 addrspace(11)*, !dbg !92
    %29 = getelementptr inbounds i8, i8 addrspace(11)* %28, i64 16, !dbg !92
    %30 = bitcast i8 addrspace(11)* %29 to i64 addrspace(11)*, !dbg !92
    %31 = load i64, i64 addrspace(11)* %30, align 8, !dbg !92, !tbaa !109, !alias.scope !112, !noalias !115, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %value_phi3.i.i = call i64 @llvm.smax.i64(i64 %31, i64 noundef 0) #25, !dbg !117
    %32 = add i64 %7, 1, !dbg !124
    %33 = add i64 %value_phi3.i.i, %7, !dbg !124
    %.not125.i = icmp sgt i64 %32, %33, !dbg !131
    %spec.select6.i = select i1 %.not125.i, i64 %7, i64 %33, !dbg !147
    %.sroa.074.0..sroa_idx.i = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %10, i64 0, i64 0, i64 0, !dbg !148
    store i64 %32, i64* %.sroa.074.0..sroa_idx.i, align 8, !dbg !148, !tbaa !152, !alias.scope !154, !noalias !155
    %.sroa.577.0..sroa_idx78.i = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %10, i64 0, i64 0, i64 1, !dbg !148
    store i64 %spec.select6.i, i64* %.sroa.577.0..sroa_idx78.i, align 8, !dbg !148, !tbaa !152, !alias.scope !154, !noalias !155
    %34 = bitcast {} addrspace(10)* %.fca.0.0.0.extract.i to i8 addrspace(10)*, !dbg !158
    %35 = addrspacecast i8 addrspace(10)* %34 to i8 addrspace(11)*, !dbg !158
    %36 = getelementptr inbounds i8, i8 addrspace(11)* %35, i64 16, !dbg !158
    %37 = bitcast i8 addrspace(11)* %36 to i64 addrspace(11)*, !dbg !158
    %38 = load i64, i64 addrspace(11)* %37, align 8, !dbg !158, !tbaa !109, !alias.scope !166, !noalias !169, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %39 = icmp slt i64 %spec.select6.i, %32, !dbg !171
    %40 = icmp ugt i64 %38, %7, !dbg !179
    %41 = add i64 %spec.select6.i, -1, !dbg !181
    %42 = icmp ult i64 %41, %38, !dbg !179
    %43 = and i1 %40, %42, !dbg !183
    %44 = or i1 %39, %43, !dbg !186
    br i1 %44, label %L81.i.i, label %L82.i.i, !dbg !188
  
  L81.i.i:                                          ; preds = %L27.i.i
    %45 = sub i64 %spec.select6.i, %32, !dbg !189
    %46 = add i64 %45, 1, !dbg !193
    %.not129.i = icmp eq i64 %46, 0, !dbg !194
    br i1 %.not129.i, label %L91.i.i, label %L93.i.i, !dbg !194
  
  L82.i.i:                                          ; preds = %L27.i.i
    %47 = addrspacecast [1 x [2 x i64]]* %10 to [1 x [2 x i64]] addrspace(11)*, !dbg !188
    call fastcc void @julia_throw_boundserror_100259({} addrspace(10)* nofree noundef nonnull align 8 dereferenceable(24) %.fca.0.0.0.extract.i, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %47) #26, !dbg !188
    unreachable, !dbg !188
  
  L91.i.i:                                          ; preds = %L81.i.i
    %48 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 139727828652464 to {} addrspace(10)**) unordered, align 16, !dbg !205, !tbaa !15, !alias.scope !206, !noalias !209, !nonnull !0, !enzyme_type !211, !enzymejl_source_type_Memory\7BFloat32\7D !0, !enzymejl_byref_BITS_REF !0
    br label %L95.i.i
  
  L93.i.i:                                          ; preds = %L81.i.i
    %49 = call {} addrspace(10)* @jl_alloc_genericmemory({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828652432 to {}*) to {} addrspace(10)*), i64 %46) #27, !dbg !215
    %50 = shl i64 %46, 2, !dbg !215
    %51 = bitcast {} addrspace(10)* %49 to <{ i64, i8* }> addrspace(10)*, !dbg !215
    %52 = getelementptr inbounds <{ i64, i8* }>, <{ i64, i8* }> addrspace(10)* %51, i64 0, i32 1, !dbg !215
    %53 = load i8*, i8* addrspace(10)* %52, align 8, !dbg !215
    call void @llvm.memset.p0i8.i64(i8* align 4 %53, i8 noundef 0, i64 %50, i1 noundef false), !dbg !215
    %54 = call noalias "enzyme_type"="{[-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]:Pointer, [-1,8,-1]:Float@float}" {} addrspace(10)* @jl_alloc_genericmemory({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828652432 to {}*) to {} addrspace(10)*), i64 %46) #28, !dbg !215
    br label %L95.i.i, !dbg !215
  
  L95.i.i:                                          ; preds = %L93.i.i, %L91.i.i
    %.sroa.41.0 = phi {} addrspace(10)* [ %48, %L91.i.i ], [ @ejl_jl_nothing, %L93.i.i ]
    %.sroa.11.0 = phi {} addrspace(10)* [ @ejl_jl_nothing, %L91.i.i ], [ %54, %L93.i.i ]
    %.sroa.8.0 = phi {} addrspace(10)* [ @ejl_jl_nothing, %L91.i.i ], [ %49, %L93.i.i ]
    %55 = phi {} addrspace(10)* [ %48, %L91.i.i ], [ %49, %L93.i.i ]
    %56 = phi {} addrspace(10)* [ %48, %L91.i.i ], [ %54, %L93.i.i ]
    %"'ipc23.i" = bitcast {} addrspace(10)* %55 to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !216
    %57 = bitcast {} addrspace(10)* %56 to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !216
    %"'ipc24.i" = addrspacecast { i64, {} addrspace(10)** } addrspace(10)* %"'ipc23.i" to { i64, {} addrspace(10)** } addrspace(11)*, !dbg !216
    %58 = addrspacecast { i64, {} addrspace(10)** } addrspace(10)* %57 to { i64, {} addrspace(10)** } addrspace(11)*, !dbg !216
    %"'ipg25.i" = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %"'ipc24.i", i64 0, i32 1, !dbg !216
    %59 = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %58, i64 0, i32 1, !dbg !216
    %"'ipc26.i" = bitcast {} addrspace(10)** addrspace(11)* %"'ipg25.i" to i8* addrspace(11)*, !dbg !216
    %60 = bitcast {} addrspace(10)** addrspace(11)* %59 to i8* addrspace(11)*, !dbg !216
    %"'ipl27.i" = load i8*, i8* addrspace(11)* %"'ipc26.i", align 8, !dbg !216, !tbaa !15, !alias.scope !219, !noalias !222, !nonnull !0
    %61 = load i8*, i8* addrspace(11)* %60, align 8, !dbg !216, !tbaa !15, !alias.scope !224, !noalias !225, !nonnull !0, !enzyme_type !226, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat32\7D !0
    %62 = bitcast {}*** %current_task1.i121.i to {}*, !dbg !227
    %"'mi.i" = call noalias nonnull align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-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@float, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 24, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828651344 to {}*) to {} addrspace(10)*)) #29, !dbg !227
    %63 = bitcast {} addrspace(10)* %"'mi.i" to i8 addrspace(10)*, !dbg !227
    call void @llvm.memset.p10i8.i64(i8 addrspace(10)* nocapture nofree noundef nonnull align 8 dereferenceable(24) dereferenceable_or_null(24) %63, i8 noundef 0, i64 noundef 24, i1 noundef false), !dbg !227
    %64 = call noalias nonnull align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@float, [-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@float, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 24, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828651344 to {}*) to {} addrspace(10)*)) #29, !dbg !227
    %"'ipc21.i" = bitcast {} addrspace(10)* %"'mi.i" to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !227
    %65 = bitcast {} addrspace(10)* %64 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !227
    %"'ipc22.i" = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %"'ipc21.i" to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !227
    %66 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %65 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !227
    %".repack'ipg.i" = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %"'ipc22.i", i64 0, i32 0, !dbg !227
    %.repack.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %66, i64 0, i32 0, !dbg !227
    store i8* %"'ipl27.i", i8* addrspace(11)* %".repack'ipg.i", align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !233
    store i8* %61, i8* addrspace(11)* %.repack.i, align 8, !dbg !227, !tbaa !228, !alias.scope !237, !noalias !238
    %".repack127'ipg.i" = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %"'ipc22.i", i64 0, i32 1, !dbg !227
    %.repack127.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %66, i64 0, i32 1, !dbg !227
    store {} addrspace(10)* %55, {} addrspace(10)* addrspace(11)* %".repack127'ipg.i", align 8, !dbg !227, !tbaa !228, !alias.scope !230, !noalias !233
    store {} addrspace(10)* %56, {} addrspace(10)* addrspace(11)* %.repack127.i, align 8, !dbg !227, !tbaa !228, !alias.scope !237, !noalias !238
    %67 = bitcast {} addrspace(10)* %64 to i8 addrspace(10)*, !dbg !227
    %"'ipc19.i" = addrspacecast i8 addrspace(10)* %63 to i8 addrspace(11)*, !dbg !227
    %68 = addrspacecast i8 addrspace(10)* %67 to i8 addrspace(11)*, !dbg !227
    %"'ipg.i" = getelementptr inbounds i8, i8 addrspace(11)* %"'ipc19.i", i64 16, !dbg !227
    %69 = getelementptr inbounds i8, i8 addrspace(11)* %68, i64 16, !dbg !227
    %"'ipc20.i" = bitcast i8 addrspace(11)* %"'ipg.i" to i64 addrspace(11)*, !dbg !227
    %70 = bitcast i8 addrspace(11)* %69 to i64 addrspace(11)*, !dbg !227
    store i64 %46, i64 addrspace(11)* %"'ipc20.i", align 8, !dbg !227, !tbaa !109, !alias.scope !230, !noalias !233
    store i64 %46, i64 addrspace(11)* %70, align 8, !dbg !227, !tbaa !109, !alias.scope !237, !noalias !238
    %or.cond.i = icmp ult i64 %45, 9223372036854775807, !dbg !239
    br i1 %or.cond.i, label %L136.i.i, label %L206.i.i, !dbg !239
  
  L136.i.i:                                         ; preds = %L95.i.i
    %spec.select.i = select i1 %39, i64 %7, i64 %spec.select6.i, !dbg !240
    %.sroa.012.0..sroa_idx.i = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %9, i64 0, i64 0, i64 0, !dbg !248
    store i64 %32, i64* %.sroa.012.0..sroa_idx.i, align 8, !dbg !248, !tbaa !152, !alias.scope !154, !noalias !155
    %.sroa.5.0..sroa_idx15.i = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %9, i64 0, i64 0, i64 1, !dbg !248
    store i64 %spec.select.i, i64* %.sroa.5.0..sroa_idx15.i, align 8, !dbg !248, !tbaa !152, !alias.scope !154, !noalias !155
    %71 = load i64, i64 addrspace(11)* %37, align 8, !dbg !249, !tbaa !109, !alias.scope !166, !noalias !169, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %72 = icmp slt i64 %spec.select.i, %32, !dbg !255
    %73 = icmp ugt i64 %71, %7, !dbg !259
    %74 = add i64 %spec.select.i, -1, !dbg !261
    %75 = icmp ult i64 %74, %71, !dbg !259
    %76 = and i1 %73, %75, !dbg !262
    %77 = or i1 %72, %76, !dbg !263
    br i1 %77, label %L169.i.i, label %L170.i.i, !dbg !264
  
  L169.i.i:                                         ; preds = %L136.i.i
    %78 = bitcast {} addrspace(10)* %56 to i64 addrspace(10)*, !dbg !265
    %79 = addrspacecast i64 addrspace(10)* %78 to i64 addrspace(11)*, !dbg !265
    %80 = load i64, i64 addrspace(11)* %79, align 8, !dbg !265, !tbaa !267, !range !269, !alias.scope !270, !noalias !271, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %.not145.i = icmp eq i64 %80, 0, !dbg !265
    br i1 %.not145.i, label %oob.i.i, label %idxend.i.i, !dbg !265
  
  L170.i.i:                                         ; preds = %L136.i.i
    %81 = addrspacecast [1 x [2 x i64]]* %9 to [1 x [2 x i64]] addrspace(11)*, !dbg !264
    call fastcc void @julia_throw_boundserror_100259({} addrspace(10)* nofree noundef nonnull align 8 dereferenceable(24) %.fca.0.0.0.extract.i, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %81) #26, !dbg !264
    unreachable, !dbg !264
  
  L188.i.i:                                         ; preds = %idxend29.i.i
    %82 = load {}*, {}** bitcast (i8* getelementptr (i8, i8* @jl_small_typeof, i64 320) to {}**), align 8, !dbg !272, !tbaa !15, !alias.scope !35, !noalias !36, !nonnull !0, !dereferenceable !290, !align !81
    %83 = addrspacecast {}* %82 to {} addrspace(10)*, !dbg !272
    %84 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @ijl_box_int64(i64 signext %166) #28, !dbg !272
    %85 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727699604640 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727694136992 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727863435632 to {}*) to {} addrspace(10)*), {} addrspace(10)* %83, {} addrspace(10)* nonnull %84) #30, !dbg !272
    %86 = getelementptr inbounds {}**, {}*** %8, i64 -14, !dbg !272
    %87 = bitcast {}*** %86 to {}*, !dbg !272
    %88 = call dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %87, i64 noundef 8, {} addrspace(10)* noundef @ejl_enz_runtime_exc), !dbg !272
    %89 = bitcast {} addrspace(10)* %88 to i8* addrspace(10)*, !dbg !272
    store i8* getelementptr inbounds ([104 x i8], [104 x i8]* @enz_exception.17, i32 0, i32 0), i8* addrspace(10)* %89, align 8, !dbg !272, !noalias !291
    %90 = addrspacecast {} addrspace(10)* %88 to {} addrspace(12)*, !dbg !272
    call void @jl_throw({} addrspace(12)* %90) #31, !dbg !272
    unreachable, !dbg !272
  
  L190.i.i:                                         ; preds = %idxend29.i.i
    call void @llvm.memmove.p0i8.p0i8.i64(i8* nonnull align 1 %61, i8* align 1 %149, i64 %166, i1 noundef false) #25, !dbg !292, !noalias !293
    call void @llvm.julia.gc_preserve_end(token %165) #25, !dbg !294
    call void @llvm.julia.gc_preserve_end(token %164) #25, !dbg !295
    %.pre.i = load i64, i64 addrspace(11)* %30, align 8, !dbg !296, !tbaa !109, !alias.scope !112, !noalias !115, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %.pre110.i = load i64, i64 addrspace(11)* %70, align 8, !dbg !298, !tbaa !109, !alias.scope !237, !noalias !303, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    br label %L206.i.i, !dbg !304
  
  L206.i.i:                                         ; preds = %L190.i.i, %L95.i.i
    %.sroa.54.0 = phi {} addrspace(10)* [ %141, %L190.i.i ], [ @ejl_jl_nothing, %L95.i.i ]
    %.sroa.34.0 = phi i8* [ %"'ipl41.i", %L190.i.i ], [ undef, %L95.i.i ]
    %91 = phi i64 [ %.pre110.i, %L190.i.i ], [ %46, %L95.i.i ], !dbg !298
    %92 = phi i64 [ %.pre.i, %L190.i.i ], [ %31, %L95.i.i ], !dbg !296, !enzyme_inactive !0
    %93 = getelementptr inbounds [1 x i64], [1 x i64]* %11, i64 0, i64 0, !dbg !305
    store i64 %92, i64* %93, align 8, !dbg !305, !tbaa !152, !alias.scope !154, !noalias !155
    %94 = icmp eq i64 %92, %91, !dbg !310
    br i1 %94, label %L237.i.i, label %L217.i.i, !dbg !315
  
  L217.i.i:                                         ; preds = %L206.i.i
    %95 = addrspacecast [1 x i64]* %11 to [1 x i64] addrspace(11)*, !dbg !316
    call fastcc void @julia_throw_dmrsa_100265([1 x i64] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) %95, i64 signext %91) #26, !dbg !316
    unreachable, !dbg !316
  
  L237.i.i:                                         ; preds = %L206.i.i
    %.not130.i = icmp eq i64 %91, %31, !dbg !317
    br i1 %.not130.i, label %L289.i.i, label %L253.i.i, !dbg !317
  
  L253.i.i:                                         ; preds = %L237.i.i
    %96 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727657705104 to {}*) to {} addrspace(10)*)) #29, !dbg !318
    %97 = bitcast {} addrspace(10)* %96 to i64 addrspace(10)*, !dbg !318, !enzyme_inactive !0
    store i64 %31, i64 addrspace(10)* %97, align 8, !dbg !318, !tbaa !39, !alias.scope !43, !noalias !321
    %98 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Integer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727657705104 to {}*) to {} addrspace(10)*)) #29, !dbg !318
    %99 = bitcast {} addrspace(10)* %98 to i64 addrspace(10)*, !dbg !318, !enzyme_inactive !0
    store i64 %91, i64 addrspace(10)* %99, align 8, !dbg !318, !tbaa !39, !alias.scope !43, !noalias !321
    %100 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727798897872 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727661032624 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727375710752 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %96, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727375710688 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %98) #30, !dbg !318
    %101 = call noalias nonnull align 8 dereferenceable(8) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727659986192 to {}*) to {} addrspace(10)*)) #29, !dbg !322
    %102 = bitcast {} addrspace(10)* %101 to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !322, !enzyme_inactive !0
    %103 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %102, i64 0, i64 0, !dbg !322
    store {} addrspace(10)* %100, {} addrspace(10)* addrspace(10)* %103, align 8, !dbg !322, !tbaa !39, !alias.scope !43, !noalias !321
    %104 = addrspacecast {} addrspace(10)* %101 to {} addrspace(12)*, !dbg !322, !enzyme_inactive !0
    call void @ijl_throw({} addrspace(12)* %104) #26, !dbg !322
    unreachable, !dbg !322
  
  L289.i.i:                                         ; preds = %L237.i.i
    %105 = bitcast {} addrspace(10)* %.fca.1.extract.i to i8 addrspace(10)*, !dbg !323
    %106 = addrspacecast i8 addrspace(10)* %105 to i8 addrspace(11)*, !dbg !323
    %107 = getelementptr inbounds i8, i8 addrspace(11)* %106, i64 16, !dbg !323
    %108 = bitcast i8 addrspace(11)* %107 to i64 addrspace(11)*, !dbg !323
    %109 = load i64, i64 addrspace(11)* %108, align 8, !dbg !323, !tbaa !74, !alias.scope !82, !noalias !83, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %110 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %20 unordered, align 8, !dbg !323, !tbaa !74, !alias.scope !82, !noalias !83, !nonnull !0, !dereferenceable !81, !align !84, !enzyme_type !85, !enzymejl_source_type_Memory\7BAny\7D !0, !enzymejl_byref_MUT_REF !0
    %111 = bitcast {} addrspace(10)* %110 to i64 addrspace(10)*, !dbg !327
    %112 = addrspacecast i64 addrspace(10)* %111 to i64 addrspace(11)*, !dbg !327
    %113 = load i64, i64 addrspace(11)* %112, align 8, !dbg !327, !tbaa !267, !alias.scope !329, !noalias !332, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %114 = mul i64 %113, 3, !dbg !327
    %115 = ashr i64 %114, 2, !dbg !334
    %.not131.i = icmp sgt i64 %115, %109, !dbg !337
    br i1 %.not131.i, label %L327.i.i, label %L309.i.i, !dbg !339
  
  L309.i.i:                                         ; preds = %L289.i.i
    %116 = getelementptr inbounds {}**, {}*** %8, i64 -14, !dbg !340
    %117 = bitcast {}*** %116 to {}*, !dbg !340
    %118 = call dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %117, i64 noundef 8, {} addrspace(10)* noundef @ejl_enz_runtime_exc), !dbg !340
    %119 = bitcast {} addrspace(10)* %118 to i8* addrspace(10)*, !dbg !340
    store i8* getelementptr inbounds ([68 x i8], [68 x i8]* @enz_exception, i32 0, i32 0), i8* addrspace(10)* %119, align 8, !dbg !340, !noalias !291
    %120 = addrspacecast {} addrspace(10)* %118 to {} addrspace(12)*, !dbg !340
    call void @jl_throw({} addrspace(12)* %120) #31, !dbg !340
    unreachable, !dbg !340
  
  L327.i.i:                                         ; preds = %L289.i.i
    %"'ipl31.i" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"'ipc14.i" unordered, align 8, !dbg !323, !tbaa !74, !alias.scope !76, !noalias !79, !nonnull !0, !dereferenceable !81
    %"'ipc32.i" = bitcast {} addrspace(10)* %".fca.1.extract'ipev.i" to i8 addrspace(10)*, !dbg !323
    %"'ipc33.i" = addrspacecast i8 addrspace(10)* %"'ipc32.i" to i8 addrspace(11)*, !dbg !323
    store i32 0, i32* %12, align 8, !dbg !343, !tbaa !74, !alias.scope !43, !noalias !321
    %"'ipl38.i" = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %"'ipc14.i" unordered, align 8, !dbg !347, !tbaa !74, !alias.scope !76, !noalias !79, !nonnull !0, !dereferenceable !81
    %121 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %20 unordered, align 8, !dbg !347, !tbaa !74, !alias.scope !82, !noalias !83, !nonnull !0, !dereferenceable !81, !align !84, !enzyme_type !85, !enzymejl_source_type_Memory\7BAny\7D !0, !enzymejl_byref_MUT_REF !0
    %122 = ptrtoint i32* %12 to i64, !dbg !349
    %123 = call {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* noundef nonnull @ijl_apply_generic, {} addrspace(10)* noundef @ejl_enz_runtime_error_if_active, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139727828651344 to {}*) to {} addrspace(10)*)), !dbg !354
    %124 = call {} addrspace(10)* @ijl_eqtable_put({} addrspace(10)* noundef nonnull %"'ipl38.i", {} addrspace(10)* %6, {} addrspace(10)* nonnull %"'mi.i", i64 noundef 0) [ "jl_roots"({} addrspace(10)* null) ], !dbg !354
    %125 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* @ijl_eqtable_put({} addrspace(10)* noundef nonnull %121, {} addrspace(10)* noundef nonnull %6, {} addrspace(10)* nonnull %64, i64 noundef %122) #25 [ "jl_roots"({} addrspace(10)* null) ], !dbg !354
    store atomic {} addrspace(10)* %124, {} addrspace(10)* addrspace(11)* %"'ipc14.i" release, align 8, !dbg !355, !tbaa !74, !alias.scope !76, !noalias !357
    store atomic {} addrspace(10)* %125, {} addrspace(10)* addrspace(11)* %20 release, align 8, !dbg !355, !tbaa !74, !alias.scope !82, !noalias !358
    call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %".fca.1.extract'ipev.i", {} addrspace(10)* %124) #27, !dbg !355
    call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* noundef %.fca.1.extract.i, {} addrspace(10)* nonnull %125) #32, !dbg !355
    %"'ipg36.i" = getelementptr inbounds i8, i8 addrspace(11)* %"'ipc33.i", i64 8, !dbg !359
    %126 = getelementptr inbounds i8, i8 addrspace(11)* %106, i64 8, !dbg !359
    %"'ipc37.i" = bitcast i8 addrspace(11)* %"'ipg36.i" to i64 addrspace(11)*, !dbg !359
    %127 = bitcast i8 addrspace(11)* %126 to i64 addrspace(11)*, !dbg !359
    %128 = load i64, i64 addrspace(11)* %127, align 8, !dbg !359, !tbaa !74, !alias.scope !82, !noalias !83, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %129 = load i32, i32* %12, align 8, !dbg !361, !tbaa !74, !alias.scope !364, !noalias !367
    %130 = sext i32 %129 to i64, !dbg !369
    %131 = add i64 %128, %130, !dbg !372
    store i64 %131, i64 addrspace(11)* %"'ipc37.i", align 8, !dbg !374, !tbaa !74, !alias.scope !76, !noalias !357
    store i64 %131, i64 addrspace(11)* %127, align 8, !dbg !374, !tbaa !74, !alias.scope !82, !noalias !358
    br label %augmented_julia_CachedWalk_100192_inner.7.exit, !dbg !375
  
  oob.i.i:                                          ; preds = %L169.i.i
    %132 = call noalias nonnull align 8 dereferenceable(16) "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer, [-1,0,-1]:Float@float, [-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@float}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 16, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828653008 to {}*) to {} addrspace(10)*)) #29, !dbg !265
    %133 = bitcast {} addrspace(10)* %132 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !265
    %.repack137.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(10)* %133, i64 0, i32 0, !dbg !265
    store i8* %61, i8* addrspace(10)* %.repack137.i, align 8, !dbg !265, !tbaa !39, !alias.scope !43, !noalias !321
    %.repack138.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(10)* %133, i64 0, i32 1, !dbg !265
    store {} addrspace(10)* %56, {} addrspace(10)* addrspace(10)* %.repack138.i, align 8, !dbg !265, !tbaa !39, !alias.scope !43, !noalias !321
    %134 = addrspacecast {} addrspace(10)* %132 to {} addrspace(12)*, !dbg !265
    call void @ijl_bounds_error_int({} addrspace(12)* %134, i64 noundef 1) #26, !dbg !265
    unreachable, !dbg !265
  
  idxend.i.i:                                       ; preds = %L169.i.i
    %135 = bitcast {} addrspace(10)* %.fca.0.0.0.extract.i to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !376
    %136 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %135 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !376
    %"'ipc39.i" = bitcast {} addrspace(10)* %".fca.0.0.0.extract'ipev.i" to i8* addrspace(10)*, !dbg !376
    %137 = bitcast {} addrspace(10)* %.fca.0.0.0.extract.i to i8* addrspace(10)*, !dbg !376
    %"'ipc40.i" = addrspacecast i8* addrspace(10)* %"'ipc39.i" to i8* addrspace(11)*, !dbg !376
    %138 = addrspacecast i8* addrspace(10)* %137 to i8* addrspace(11)*, !dbg !376
    %"'ipl41.i" = load i8*, i8* addrspace(11)* %"'ipc40.i", align 8, !dbg !376, !tbaa !228, !alias.scope !377, !noalias !378
    %139 = load i8*, i8* addrspace(11)* %138, align 8, !dbg !376, !tbaa !228, !alias.scope !166, !noalias !169, !enzyme_type !226, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat32\7D !0
    %140 = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %136, i64 0, i32 1, !dbg !376
    %141 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %140, align 8, !dbg !376, !tbaa !228, !alias.scope !166, !noalias !169, !dereferenceable_or_null !81, !align !84, !enzyme_type !211, !enzymejl_byref_MUT_REF !0, !enzymejl_source_type_Memory\7BFloat32\7D !0
    %142 = bitcast {} addrspace(10)* %141 to i64 addrspace(10)*, !dbg !265
    %143 = addrspacecast i64 addrspace(10)* %142 to i64 addrspace(11)*, !dbg !265
    %144 = load i64, i64 addrspace(11)* %143, align 8, !dbg !265, !tbaa !267, !range !269, !alias.scope !379, !noalias !382, !enzyme_type !37, !enzyme_inactive !0, !enzymejl_source_type_Int64 !0, !enzymejl_byref_BITS_VALUE !0
    %145 = shl nuw nsw i64 %144, 1, !dbg !265
    %146 = add i64 %144, %7, !dbg !265
    %.not140.i = icmp ult i64 %146, %145, !dbg !265
    %147 = bitcast i8* %139 to float*, !dbg !265
    %148 = getelementptr inbounds float, float* %147, i64 %7, !dbg !265
    %149 = bitcast float* %148 to i8*, !dbg !265
    %150 = bitcast {} addrspace(10)* %141 to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !265
    %151 = addrspacecast { i64, {} addrspace(10)** } addrspace(10)* %150 to { i64, {} addrspace(10)** } addrspace(11)*, !dbg !265
    %152 = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %151, i64 0, i32 1, !dbg !265
    %153 = bitcast {} addrspace(10)** addrspace(11)* %152 to i8* addrspace(11)*, !dbg !265
    %154 = load i8*, i8* addrspace(11)* %153, align 8, !dbg !265, !tbaa !15, !alias.scope !384, !noalias !385, !nonnull !0, !enzyme_type !226, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat32\7D !0
    %155 = ptrtoint i8* %154 to i64, !dbg !265
    %156 = ptrtoint float* %148 to i64, !dbg !265
    %157 = sub i64 %156, %155, !dbg !265
    %158 = shl nuw nsw i64 %144, 2, !dbg !265
    %159 = icmp ult i64 %157, %158, !dbg !265
    %160 = and i1 %.not140.i, %159, !dbg !265
    br i1 %160, label %idxend29.i.i, label %oob27.i.i, !dbg !265
  
  oob27.i.i:                                        ; preds = %idxend.i.i
    %161 = call noalias nonnull align 8 dereferenceable(16) "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer, [-1,0,-1]:Float@float, [-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@float}" {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %62, i64 noundef 16, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139727828653008 to {}*) to {} addrspace(10)*)) #29, !dbg !265
    %162 = bitcast {} addrspace(10)* %161 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !265
    %.repack141.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(10)* %162, i64 0, i32 0, !dbg !265
    store i8* %139, i8* addrspace(10)* %.repack141.i, align 8, !dbg !265, !tbaa !39, !alias.scope !43, !noalias !321
    %.repack142.i = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(10)* %162, i64 0, i32 1, !dbg !265
    store {} addrspace(10)* %141, {} addrspace(10)* addrspace(10)* %.repack142.i, align 8, !dbg !265, !tbaa !39, !alias.scope !43, !noalias !321
    %163 = addrspacecast {} addrspace(10)* %161 to {} addrspace(12)*, !dbg !265
    call void @ijl_bounds_error_int({} addrspace(12)* %163, i64 %32) #26, !dbg !265
    unreachable, !dbg !265
  
  idxend29.i.i:                                     ; preds = %idxend.i.i
    %164 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* nonnull %56, {} addrspace(10)* nonnull %55), !dbg !386
    %165 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %141), !dbg !387
    %166 = shl i64 %46, 2, !dbg !388
    %.not144.i = icmp sgt i64 %166, -1, !dbg !389
    br i1 %.not144.i, label %L190.i.i, label %L188.i.i, !dbg !272
  
  augmented_julia_CachedWalk_100192_inner.7.exit:   ; preds = %L25.i.i, %L327.i.i
    %.sroa.5124.0 = phi {} addrspace(10)* [ %121, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.54.1 = phi {} addrspace(10)* [ %.sroa.54.0, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.47.0 = phi i64 [ %113, %L327.i.i ], [ undef, %L25.i.i ]
    %.sroa.44.0 = phi {} addrspace(10)* [ %110, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.41.1 = phi {} addrspace(10)* [ %.sroa.41.0, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.39.0 = phi i64 [ %33, %L327.i.i ], [ undef, %L25.i.i ]
    %.sroa.34.1 = phi i8* [ %.sroa.34.0, %L327.i.i ], [ undef, %L25.i.i ]
    %.sroa.31.0 = phi {} addrspace(10)* [ %"'ipl38.i", %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.28.0 = phi {} addrspace(10)* [ %124, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.22.0 = phi {} addrspace(10)* [ %"'ipl31.i", %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.20.0 = phi i8* [ %"'ipl27.i", %L327.i.i ], [ undef, %L25.i.i ]
    %.sroa.17.0 = phi {} addrspace(10)* [ %64, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.14.0 = phi {} addrspace(10)* [ %"'mi.i", %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.11.1 = phi {} addrspace(10)* [ %.sroa.11.0, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %.sroa.8.1 = phi {} addrspace(10)* [ %.sroa.8.0, %L327.i.i ], [ @ejl_jl_nothing, %L25.i.i ]
    %167 = phi {} addrspace(10)* [ %"'mi.i", %L327.i.i ], [ %22, %L25.i.i ]
    %168 = phi {} addrspace(10)* [ %64, %L327.i.i ], [ %25, %L25.i.i ]
    %.unpack.fca.0.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } poison, {} addrspace(10)* %22, 0, !dbg !47
    %.unpack.fca.1.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.0.insert, {} addrspace(10)* %25, 1, !dbg !47
    %.unpack.fca.2.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.1.insert, {} addrspace(10)* %.sroa.8.1, 2, !dbg !47
    %.unpack.fca.3.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.2.insert, {} addrspace(10)* %.sroa.11.1, 3, !dbg !47
    %.unpack.fca.4.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.3.insert, {} addrspace(10)* %.sroa.14.0, 4, !dbg !47
    %.unpack.fca.5.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.4.insert, {} addrspace(10)* %.sroa.17.0, 5, !dbg !47
    %.unpack.fca.6.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.5.insert, i8* %.sroa.20.0, 6, !dbg !47
    %.unpack.fca.7.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.6.insert, {} addrspace(10)* %.sroa.22.0, 7, !dbg !47
    %.unpack.fca.8.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.7.insert, {} addrspace(10)* @ejl_jl_nothing, 8, !dbg !47
    %.unpack.fca.9.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.8.insert, {} addrspace(10)* %.sroa.28.0, 9, !dbg !47
    %.unpack.fca.10.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.9.insert, {} addrspace(10)* %.sroa.31.0, 10, !dbg !47
    %.unpack.fca.11.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.10.insert, i8* %.sroa.34.1, 11, !dbg !47
    %.unpack.fca.12.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.11.insert, {} addrspace(10)* %21, 12, !dbg !47
    %.unpack.fca.13.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.12.insert, i64 %.sroa.39.0, 13, !dbg !47
    %.unpack.fca.14.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.13.insert, {} addrspace(10)* %.sroa.41.1, 14, !dbg !47
    %.unpack.fca.15.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.14.insert, {} addrspace(10)* %.sroa.44.0, 15, !dbg !47
    %.unpack.fca.16.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.15.insert, i64 %.sroa.47.0, 16, !dbg !47
    %.unpack.fca.17.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.16.insert, i1 true, 17, !dbg !47
    %.unpack.fca.18.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.17.insert, {} addrspace(10)* %.sroa.5124.0, 18, !dbg !47
    %.unpack.fca.19.insert = insertvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.18.insert, {} addrspace(10)* %.sroa.54.1, 19, !dbg !47
    call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %13), !dbg !47
    call void @llvm.lifetime.end.p0i8(i64 noundef 16, i8* noundef nonnull %14), !dbg !47
    call void @llvm.lifetime.end.p0i8(i64 noundef 8, i8* noundef nonnull %15), !dbg !47
    call void @llvm.lifetime.end.p0i8(i64 noundef 4, i8* noundef nonnull %16), !dbg !47
    %169 = bitcast { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0 to { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* }*
    store { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* } %.unpack.fca.19.insert, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i1, {} addrspace(10)*, {} addrspace(10)* }* %169, align 8, !noalias !291
    %170 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 1
    store {} addrspace(10)* %168, {} addrspace(10)** %170, align 8, !noalias !291
    %171 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 2
    store {} addrspace(10)* %167, {} addrspace(10)** %171, align 8, !noalias !291
    %172 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 0
    store {} addrspace(10)* %168, {} addrspace(10)** %172, align 8, !noalias !291
    %173 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 1
    store {} addrspace(10)* %167, {} addrspace(10)** %173, align 8, !noalias !291
    %174 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 2
    %175 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 0
    %176 = load {} addrspace(10)*, {} addrspace(10)** %175, align 8
    store {} addrspace(10)* %176, {} addrspace(10)** %174, align 8, !noalias !291
    %177 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 3
    %178 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 1
    %179 = load {} addrspace(10)*, {} addrspace(10)** %178, align 8
    store {} addrspace(10)* %179, {} addrspace(10)** %177, align 8, !noalias !291
    %180 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 4
    %181 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 2
    %182 = load {} addrspace(10)*, {} addrspace(10)** %181, align 8
    store {} addrspace(10)* %182, {} addrspace(10)** %180, align 8, !noalias !291
    %183 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 5
    %184 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 3
    %185 = load {} addrspace(10)*, {} addrspace(10)** %184, align 8
    store {} addrspace(10)* %185, {} addrspace(10)** %183, align 8, !noalias !291
    %186 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 6
    %187 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 4
    %188 = load {} addrspace(10)*, {} addrspace(10)** %187, align 8
    store {} addrspace(10)* %188, {} addrspace(10)** %186, align 8, !noalias !291
    %189 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 7
    %190 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 5
    %191 = load {} addrspace(10)*, {} addrspace(10)** %190, align 8
    store {} addrspace(10)* %191, {} addrspace(10)** %189, align 8, !noalias !291
    %192 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 8
    %193 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 7
    %194 = load {} addrspace(10)*, {} addrspace(10)** %193, align 8
    store {} addrspace(10)* %194, {} addrspace(10)** %192, align 8, !noalias !291
    %195 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 9
    %196 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 8
    %197 = load {} addrspace(10)*, {} addrspace(10)** %196, align 8
    store {} addrspace(10)* %197, {} addrspace(10)** %195, align 8, !noalias !291
    %198 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 10
    %199 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 9
    %200 = load {} addrspace(10)*, {} addrspace(10)** %199, align 8
    store {} addrspace(10)* %200, {} addrspace(10)** %198, align 8, !noalias !291
    %201 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 11
    %202 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 10
    %203 = load {} addrspace(10)*, {} addrspace(10)** %202, align 8
    store {} addrspace(10)* %203, {} addrspace(10)** %201, align 8, !noalias !291
    %204 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 12
    %205 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 12
    %206 = load {} addrspace(10)*, {} addrspace(10)** %205, align 8
    store {} addrspace(10)* %206, {} addrspace(10)** %204, align 8, !noalias !291
    %207 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 13
    %208 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 14
    %209 = load {} addrspace(10)*, {} addrspace(10)** %208, align 8
    store {} addrspace(10)* %209, {} addrspace(10)** %207, align 8, !noalias !291
    %210 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 14
    %211 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 15
    %212 = load {} addrspace(10)*, {} addrspace(10)** %211, align 8
    store {} addrspace(10)* %212, {} addrspace(10)** %210, align 8, !noalias !291
    %213 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 15
    %214 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 18
    %215 = load {} addrspace(10)*, {} addrspace(10)** %214, align 8
    store {} addrspace(10)* %215, {} addrspace(10)** %213, align 8, !noalias !291
    %216 = getelementptr inbounds [17 x {} addrspace(10)*], [17 x {} addrspace(10)*]* %1, i64 0, i64 16
    %217 = getelementptr inbounds { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }, { { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* }, {} addrspace(10)*, {} addrspace(10)* }* %0, i64 0, i32 0, i32 19
    %218 = load {} addrspace(10)*, {} addrspace(10)** %217, align 8
    store {} addrspace(10)* %218, {} addrspace(10)** %216, align 8, !noalias !291
    ret void
  }
  
  ; Function Attrs: alwaysinline
  define void @diffejulia_CachedWalk_100192_inner_7wrap({ { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %0, { { [1 x {} addrspace(10)*] }, {} addrspace(10)* } %1, [1 x { { [1 x {} addrspace(10)*] }, {} addrspace(10)* }] %2, [1 x { { [1 x {} addrspace(10)*] }, {} addrspace(10)* }] %3, {} addrspace(10)* nocapture nofree readnone %4, i64 %5, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6) #19 !dbg !392 {
  entry:
    %7 = call {}*** @julia.get_pgcstack()
    %8 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 1
    %9 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 2
    %10 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 3
    %11 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 6
    %12 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 11
    %13 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 13
    %14 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 14
    %15 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 17
    %16 = and i8 %15, 1
    %.not = icmp eq i8 %16, 0
    %17 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i8*, {} addrspace(10)*, i64, {} addrspace(10)*, {} addrspace(10)*, i64, i8, {} addrspace(10)*, {} addrspace(10)* } %6, 19
    %pgcstack.i.i = call {}*** @julia.get_pgcstack() #25
    %18 = addrspacecast {} addrspace(10)* %8 to {} addrspace(11)*, !dbg !393
    %.not.i = icmp eq {} addrspace(11)* %18, addrspacecast ({}* inttoptr (i64 139727864149104 to {}*) to {} addrspace(11)*), !dbg !393
    br i1 %.not.i, label %L27.i.i, label %L25.i.i, !dbg !400
  
  L25.i.i:                                          ; preds = %entry
    br label %julia_CachedWalk_100192_inner.exit.i, !dbg !401
  
  L27.i.i:                                          ; preds = %entry
    %19 = add i64 %5, 1, !dbg !402
    %.not125.i = icmp sgt i64 %19, %13, !dbg !409
    %spec.select6.i = select i1 %.not125.i, i64 %5, i64 %13, !dbg !418
    %20 = sub i64 %spec.select6.i, %19, !dbg !419
    %.not129.i = icmp eq i64 %20, -1, !dbg !422
    br i1 %.not129.i, label %L91.i.i, label %L93.i.i, !dbg !422
  
  L91.i.i:                                          ; preds = %L27.i.i
    br label %L95.i.i
  
  L93.i.i:                                          ; preds = %L27.i.i
    br label %L95.i.i, !dbg !428
  
  L95.i.i:                                          ; preds = %L93.i.i, %L91.i.i
    %21 = phi {} addrspace(10)* [ %9, %L93.i.i ], [ %14, %L91.i.i ]
    %22 = phi {} addrspace(10)* [ %10, %L93.i.i ], [ %14, %L91.i.i ]
    %or.cond.i = icmp ult i64 %20, 9223372036854775807, !dbg !429
    br i1 %or.cond.i, label %L136.i.i, label %L206.i.i, !dbg !429
  
  L136.i.i:                                         ; preds = %L95.i.i
    %23 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %22, {} addrspace(10)* %21), !dbg !430
    %24 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %17), !dbg !434
    call void @llvm.julia.gc_preserve_end(token %24) #25, !dbg !435
    call void @llvm.julia.gc_preserve_end(token %23) #25, !dbg !436
    br label %L206.i.i, !dbg !437
  
  L206.i.i:                                         ; preds = %L136.i.i, %L95.i.i
    br i1 %.not, label %L309.i.i, label %L327.i.i, !dbg !438
  
  L309.i.i:                                         ; preds = %L206.i.i
    br label %L327.i.i, !dbg !440
  
  L327.i.i:                                         ; preds = %L309.i.i, %L206.i.i
    br label %julia_CachedWalk_100192_inner.exit.i, !dbg !442
  
  julia_CachedWalk_100192_inner.exit.i:             ; preds = %L327.i.i, %L25.i.i
    br i1 %.not.i, label %invertL327.i.i, label %invertL25.i.i
  
  invertL25.i.i:                                    ; preds = %julia_CachedWalk_100192_inner.exit.i
    br label %diffejulia_CachedWalk_100192_inner.7.exit
  
  invertL81.i.i:                                    ; preds = %invertL93.i.i, %invertL91.i.i
    br label %diffejulia_CachedWalk_100192_inner.7.exit
  
  invertL91.i.i:                                    ; preds = %invertL95.i.i
    br label %invertL81.i.i
  
  invertL93.i.i:                                    ; preds = %invertL95.i.i
    br label %invertL81.i.i
  
  invertL95.i.i:                                    ; preds = %invertL289.i.i, %__enzyme_memcpyadd_floatda1sa1.exit.i
    %.not129_unwrap.i = icmp eq i64 %_unwrap97.i, -1
    br i1 %.not129_unwrap.i, label %invertL91.i.i, label %invertL93.i.i
  
  invertL190.i.i:                                   ; preds = %invertL289.i.i
    %_unwrap80.i = add i64 %_unwrap97.i, 1, !dbg !436
    %.not129_unwrap81.i = icmp eq i64 %_unwrap80.i, 0, !dbg !436
    br i1 %.not129_unwrap81.i, label %invertL190.i_phirc.i, label %invertL190.i_phirc83.i, !dbg !436
  
  invertL190.i_phirc.i:                             ; preds = %invertL190.i.i
    br label %invertL190.i_phimerge.i
  
  invertL190.i_phirc83.i:                           ; preds = %invertL190.i.i
    br label %invertL190.i_phimerge.i
  
  invertL190.i_phimerge.i:                          ; preds = %invertL190.i_phirc83.i, %invertL190.i_phirc.i
    %25 = phi {} addrspace(10)* [ %14, %invertL190.i_phirc.i ], [ %10, %invertL190.i_phirc83.i ], !dbg !436
    br i1 %.not129_unwrap81.i, label %invertL190.i_phimerge_phirc.i, label %invertL190.i_phimerge_phirc85.i, !dbg !436
  
  invertL190.i_phimerge_phirc.i:                    ; preds = %invertL190.i_phimerge.i
    br label %invertL190.i_phimerge_phimerge.i
  
  invertL190.i_phimerge_phirc85.i:                  ; preds = %invertL190.i_phimerge.i
    br label %invertL190.i_phimerge_phimerge.i
  
  invertL190.i_phimerge_phimerge.i:                 ; preds = %invertL190.i_phimerge_phirc85.i, %invertL190.i_phimerge_phirc.i
    %26 = phi {} addrspace(10)* [ %14, %invertL190.i_phimerge_phirc.i ], [ %9, %invertL190.i_phimerge_phirc85.i ], !dbg !436
    %27 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %25, {} addrspace(10)* %26), !dbg !436
    %28 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %17), !dbg !435
    %"'ipc_unwrap.i" = bitcast i8* %12 to float*, !dbg !443
    %"'ipg_unwrap.i" = getelementptr inbounds float, float* %"'ipc_unwrap.i", i64 %5, !dbg !443
    %29 = bitcast i8* %11 to float*, !dbg !443
    %_unwrap89.i = and i64 %_unwrap80.i, 4611686018427387903, !dbg !443
    %30 = icmp eq i64 %_unwrap89.i, 0, !dbg !443
    br i1 %30, label %__enzyme_memcpyadd_floatda1sa1.exit.i, label %for.body.i.i, !dbg !443
  
  for.body.i.i:                                     ; preds = %for.body.i.i, %invertL190.i_phimerge_phimerge.i
    %idx.i.i = phi i64 [ 0, %invertL190.i_phimerge_phimerge.i ], [ %idx.next.i.i, %for.body.i.i ], !dbg !443
    %dst.i.i.i = getelementptr inbounds float, float* %29, i64 %idx.i.i, !dbg !443
    %dst.i.l.i.i = load float, float* %dst.i.i.i, align 1, !dbg !443
    store float 0.000000e+00, float* %dst.i.i.i, align 1, !dbg !443, !noalias !291
    %src.i.i.i = getelementptr inbounds float, float* %"'ipg_unwrap.i", i64 %idx.i.i, !dbg !443
    %src.i.l.i.i = load float, float* %src.i.i.i, align 1, !dbg !443
    %31 = fadd fast float %src.i.l.i.i, %dst.i.l.i.i, !dbg !443
    store float %31, float* %src.i.i.i, align 1, !dbg !443, !noalias !291
    %idx.next.i.i = add nuw i64 %idx.i.i, 1, !dbg !443
    %32 = icmp eq i64 %_unwrap89.i, %idx.next.i.i, !dbg !443
    br i1 %32, label %__enzyme_memcpyadd_floatda1sa1.exit.i, label %for.body.i.i, !dbg !443
  
  __enzyme_memcpyadd_floatda1sa1.exit.i:            ; preds = %for.body.i.i, %invertL190.i_phimerge_phimerge.i
    call void @llvm.julia.gc_preserve_end(token %28), !dbg !434
    call void @llvm.julia.gc_preserve_end(token %27), !dbg !430
    br label %invertL95.i.i
  
  invertL289.i.i:                                   ; preds = %invertL327.i.i
    %_unwrap94.i = add i64 %5, 1
    %.not125_unwrap95.i = icmp sgt i64 %_unwrap94.i, %13
    %spec.select6_unwrap96.i = select i1 %.not125_unwrap95.i, i64 %5, i64 %13
    %_unwrap97.i = sub i64 %spec.select6_unwrap96.i, %_unwrap94.i
    %or.cond_unwrap.i = icmp ult i64 %_unwrap97.i, 9223372036854775807
    br i1 %or.cond_unwrap.i, label %invertL190.i.i, label %invertL95.i.i
  
  invertL309.i.i:                                   ; preds = %invertL327.i.i
    %33 = getelementptr inbounds {}**, {}*** %7, i64 -14, !dbg !445
    %34 = bitcast {}*** %33 to {}*, !dbg !445
    %35 = call noalias dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %34, i64 noundef 8, {} addrspace(10)* noundef @ejl_enz_runtime_exc), !dbg !445
    %36 = bitcast {} addrspace(10)* %35 to i8* addrspace(10)*, !dbg !445
    store i8* getelementptr inbounds ([58 x i8], [58 x i8]* @enz_exception.8, i32 0, i32 0), i8* addrspace(10)* %36, align 8, !dbg !445, !noalias !291
    %37 = addrspacecast {} addrspace(10)* %35 to {} addrspace(12)*, !dbg !445
    call void @jl_throw({} addrspace(12)* %37) #31, !dbg !445
    unreachable
  
  invertL327.i.i:                                   ; preds = %julia_CachedWalk_100192_inner.exit.i
    br i1 %.not, label %invertL309.i.i, label %invertL289.i.i
  
  diffejulia_CachedWalk_100192_inner.7.exit:        ; preds = %invertL25.i.i, %invertL81.i.i
    fence syncscope("singlethread") seq_cst
    ret void
  }
  
  attributes #0 = { noinline noreturn "enzyme_ta_norecur" "enzymejl_mi"="139726648832464" "enzymejl_rt"="139727776577344" "enzymejl_world"="26887" }
  attributes #1 = { nofree memory(none) "enzyme_inactive" "enzyme_no_escaping_allocation" "enzyme_shouldrecompute" "enzymejl_world"="26887" }
  attributes #2 = { nofree memory(argmem: readwrite, inaccessiblemem: readwrite) "enzyme_inactive" "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #3 = { nofree "enzymejl_world"="26887" }
  attributes #4 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(1) memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #5 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) "enzymejl_world"="26887" }
  attributes #6 = { noreturn "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #7 = { noreturn "enzyme_ta_norecur" "enzymejl_mi"="139727803000656" "enzymejl_rt"="139727776577344" "enzymejl_world"="26887" }
  attributes #8 = { mustprogress nofree nounwind willreturn memory(inaccessiblemem: readwrite) "enzyme_inactive" "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #9 = { nofree norecurse nounwind memory(inaccessiblemem: readwrite) "enzyme_inactive" "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #10 = { noreturn "enzymejl_world"="26887" }
  attributes #11 = { nofree memory(inaccessiblemem: readwrite) "enzyme_inactive" "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #12 = { mustprogress nofree nounwind willreturn memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" "enzymejl_world"="26887" }
  attributes #13 = { mustprogress nofree nounwind willreturn "enzyme_no_escaping_allocation" }
  attributes #14 = { memory(argmem: readwrite) }
  attributes #15 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
  attributes #16 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
  attributes #17 = { nocallback nofree nounwind willreturn memory(argmem: write) }
  attributes #18 = { "enzymejl_world"="26887" }
  attributes #19 = { alwaysinline "enzymejl_world"="26887" }
  attributes #20 = { memory(readwrite) }
  attributes #21 = { nounwind willreturn allockind("alloc,uninitialized") allocsize(1) memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" }
  attributes #22 = { nofree }
  attributes #23 = { noreturn }
  attributes #24 = { nounwind willreturn memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" }
  attributes #25 = { mustprogress willreturn }
  attributes #26 = { mustprogress noreturn willreturn }
  attributes #27 = { nounwind }
  attributes #28 = { mustprogress nounwind willreturn memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" }
  attributes #29 = { mustprogress nounwind willreturn allockind("alloc,uninitialized") allocsize(1) memory(inaccessiblemem: readwrite) "enzyme_no_escaping_allocation" }
  attributes #30 = { mustprogress nofree willreturn }
  attributes #31 = { noreturn "enzyme_error" }
  attributes #32 = { mustprogress nounwind willreturn }
  
  !llvm.module.flags = !{!1, !2}
  !llvm.dbg.cu = !{!3, !5, !6, !7}
  
  !0 = !{}
  !1 = !{i32 2, !"Dwarf Version", i32 4}
  !2 = !{i32 2, !"Debug Info Version", i32 3}
  !3 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !4, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
  !4 = !DIFile(filename: "julia", directory: ".")
  !5 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !4, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
  !6 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !4, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
  !7 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !4, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, nameTableKind: None)
  !8 = distinct !DISubprogram(name: "throw_boundserror", linkageName: "julia_throw_boundserror_100259", scope: null, file: !9, line: 14, type: !10, scopeLine: 14, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !3, retainedNodes: !0)
  !9 = !DIFile(filename: "essentials.jl", directory: ".")
  !10 = !DISubroutineType(types: !0)
  !11 = !{!12, !12, i64 0}
  !12 = !{!"jtbaa_gcframe", !13, i64 0}
  !13 = !{!"jtbaa", !14, i64 0}
  !14 = !{!"jtbaa"}
  !15 = !{!16, !16, i64 0, i64 0}
  !16 = !{!"jtbaa_const", !13, i64 0}
  !17 = !DILocation(line: 14, scope: !8)
  !18 = !{!13, !13, i64 0}
  !19 = !{!20, !22}
  !20 = !{!"jnoalias_const", !21}
  !21 = !{!"jnoalias"}
  !22 = !{!"jnoalias_data", !21}
  !23 = !{!24, !26, !28, !29, !30}
  !24 = distinct !{!24, !25, !"na_addr13"}
  !25 = distinct !{!25, !"addr13"}
  !26 = distinct !{!26, !27, !"na_addr13"}
  !27 = distinct !{!27, !"addr13"}
  !28 = !{!"jnoalias_gcframe", !21}
  !29 = !{!"jnoalias_stack", !21}
  !30 = !{!"jnoalias_typemd", !21}
  !31 = !{!"Integer", i64 0, !"Integer", i64 8}
  !32 = distinct !DISubprogram(name: "throw_dmrsa", linkageName: "julia_throw_dmrsa_100265", scope: null, file: !33, line: 41, type: !10, scopeLine: 41, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !0)
  !33 = !DIFile(filename: "reshapedarray.jl", directory: ".")
  !34 = !DILocation(line: 41, scope: !32)
  !35 = !{!20}
  !36 = !{!28, !29, !22, !30}
  !37 = !{!"Unknown", i32 -1, !38}
  !38 = !{!"Integer"}
  !39 = !{!40, !40, i64 0}
  !40 = !{!"jtbaa_immut", !41, i64 0}
  !41 = !{!"jtbaa_value", !42, i64 0}
  !42 = !{!"jtbaa_data", !13, i64 0}
  !43 = !{!22}
  !44 = !{!24, !26, !28, !29, !30, !20}
  !45 = distinct !DISubprogram(name: "augmented_julia_CachedWalk_100192_inner_7wrap", linkageName: "augmented_julia_CachedWalk_100192_inner_7wrap", scope: null, file: !46, type: !10, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !46 = !DIFile(filename: "/home/runner/.julia/packages/Functors/wOtRi/src/walks.jl", directory: ".")
  !47 = !DILocation(line: 0, scope: !48, inlinedAt: !49)
  !48 = distinct !DISubprogram(name: "CachedWalk", linkageName: "julia_CachedWalk_100192", scope: null, file: !46, line: 190, type: !10, scopeLine: 190, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !49 = distinct !DILocation(line: 0, scope: !45)
  !50 = !{!51}
  !51 = distinct !{!51, !52, !"primal"}
  !52 = distinct !{!52, !" diff: %pgcstack.i"}
  !53 = !{!54}
  !54 = distinct !{!54, !52, !"shadow_0"}
  !55 = !{!56}
  !56 = distinct !{!56, !57, !"primal"}
  !57 = distinct !{!57, !" diff: %ptls_load.i123124"}
  !58 = !{!59}
  !59 = distinct !{!59, !57, !"shadow_0"}
  !60 = !DILocation(line: 190, scope: !48, inlinedAt: !61)
  !61 = distinct !DILocation(line: 0, scope: !48, inlinedAt: !49)
  !62 = !DILocation(line: 49, scope: !63, inlinedAt: !65)
  !63 = distinct !DISubprogram(name: "getproperty;", linkageName: "getproperty", scope: !64, file: !64, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !64 = !DIFile(filename: "Base.jl", directory: ".")
  !65 = distinct !DILocation(line: 92, scope: !66, inlinedAt: !68)
  !66 = distinct !DISubprogram(name: "get;", linkageName: "get", scope: !67, file: !67, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !67 = !DIFile(filename: "iddict.jl", directory: ".")
  !68 = distinct !DILocation(line: 182, scope: !69, inlinedAt: !70)
  !69 = distinct !DISubprogram(name: "in;", linkageName: "in", scope: !67, file: !67, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !70 = distinct !DILocation(line: 19, scope: !71, inlinedAt: !73)
  !71 = distinct !DISubprogram(name: "haskey;", linkageName: "haskey", scope: !72, file: !72, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !72 = !DIFile(filename: "abstractdict.jl", directory: ".")
  !73 = distinct !DILocation(line: 192, scope: !48, inlinedAt: !61)
  !74 = !{!75, !75, i64 0}
  !75 = !{!"jtbaa_mutab", !41, i64 0}
  !76 = !{!77, !22}
  !77 = distinct !{!77, !78, !"shadow_0"}
  !78 = distinct !{!78, !" diff: %.fca.1.extract"}
  !79 = !{!80, !28, !29, !30, !20}
  !80 = distinct !{!80, !78, !"primal"}
  !81 = !{i64 16}
  !82 = !{!80, !22}
  !83 = !{!77, !28, !29, !30, !20}
  !84 = !{i64 8}
  !85 = !{!"Unknown", i32 -1, !86}
  !86 = !{!"Pointer", i32 0, !38, i32 1, !38, i32 2, !38, i32 3, !38, i32 4, !38, i32 5, !38, i32 6, !38, i32 7, !38, i32 8, !87}
  !87 = !{!"Pointer"}
  !88 = !DILocation(line: 92, scope: !66, inlinedAt: !68)
  !89 = !DILocation(line: 93, scope: !66, inlinedAt: !68)
  !90 = !DILocation(line: 192, scope: !48, inlinedAt: !61)
  !91 = !DILocation(line: 193, scope: !48, inlinedAt: !61)
  !92 = !DILocation(line: 194, scope: !93, inlinedAt: !95)
  !93 = distinct !DISubprogram(name: "size;", linkageName: "size", scope: !94, file: !94, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !94 = !DIFile(filename: "array.jl", directory: ".")
  !95 = distinct !DILocation(line: 98, scope: !96, inlinedAt: !98)
  !96 = distinct !DISubprogram(name: "axes;", linkageName: "axes", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !97 = !DIFile(filename: "abstractarray.jl", directory: ".")
  !98 = distinct !DILocation(line: 201, scope: !99, inlinedAt: !101)
  !99 = distinct !DISubprogram(name: "ProjectTo;", linkageName: "ProjectTo", scope: !100, file: !100, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !100 = !DIFile(filename: "/home/runner/.julia/packages/ChainRulesCore/6Pucz/src/projection.jl", directory: ".")
  !101 = distinct !DILocation(line: 102, scope: !102, inlinedAt: !104)
  !102 = distinct !DISubprogram(name: "_getat;", linkageName: "_getat", scope: !103, file: !103, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !103 = !DIFile(filename: "/home/runner/.julia/packages/Optimisers/FES4P/src/destructure.jl", directory: ".")
  !104 = distinct !DILocation(line: 97, scope: !105, inlinedAt: !106)
  !105 = distinct !DISubprogram(name: "#57;", linkageName: "#57", scope: !103, file: !103, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !106 = distinct !DILocation(line: 144, scope: !107, inlinedAt: !108)
  !107 = distinct !DISubprogram(name: "ExcludeWalk;", linkageName: "ExcludeWalk", scope: !46, file: !46, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !108 = distinct !DILocation(line: 195, scope: !48, inlinedAt: !61)
  !109 = !{!110, !110, i64 0}
  !110 = !{!"jtbaa_arraysize", !111, i64 0}
  !111 = !{!"jtbaa_array", !13, i64 0}
  !112 = !{!113, !30}
  !113 = distinct !{!113, !114, !"primal"}
  !114 = distinct !{!114, !" diff: %"}
  !115 = !{!116, !28, !29, !22, !20}
  !116 = distinct !{!116, !114, !"shadow_0"}
  !117 = !DILocation(line: 419, scope: !118, inlinedAt: !120)
  !118 = distinct !DISubprogram(name: "unitrange_last;", linkageName: "unitrange_last", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !119 = !DIFile(filename: "range.jl", directory: ".")
  !120 = distinct !DILocation(line: 408, scope: !121, inlinedAt: !122)
  !121 = distinct !DISubprogram(name: "UnitRange;", linkageName: "UnitRange", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !122 = distinct !DILocation(line: 5, scope: !123, inlinedAt: !101)
  !123 = distinct !DISubprogram(name: "Colon;", linkageName: "Colon", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !124 = !DILocation(line: 87, scope: !125, inlinedAt: !127)
  !125 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !126 = !DIFile(filename: "int.jl", directory: ".")
  !127 = distinct !DILocation(line: 1115, scope: !128, inlinedAt: !130)
  !128 = distinct !DISubprogram(name: "broadcasted;", linkageName: "broadcasted", scope: !129, file: !129, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !129 = !DIFile(filename: "broadcast.jl", directory: ".")
  !130 = distinct !DILocation(line: 1326, scope: !128, inlinedAt: !101)
  !131 = !DILocation(line: 514, scope: !132, inlinedAt: !133)
  !132 = distinct !DISubprogram(name: "<=;", linkageName: "<=", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !133 = distinct !DILocation(line: 426, scope: !134, inlinedAt: !136)
  !134 = distinct !DISubprogram(name: ">=;", linkageName: ">=", scope: !135, file: !135, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !135 = !DIFile(filename: "operators.jl", directory: ".")
  !136 = distinct !DILocation(line: 419, scope: !118, inlinedAt: !137)
  !137 = distinct !DILocation(line: 408, scope: !121, inlinedAt: !138)
  !138 = distinct !DILocation(line: 5, scope: !123, inlinedAt: !139)
  !139 = distinct !DILocation(line: 211, scope: !140, inlinedAt: !141)
  !140 = distinct !DISubprogram(name: "range_start_stop;", linkageName: "range_start_stop", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !141 = distinct !DILocation(line: 166, scope: !142, inlinedAt: !143)
  !142 = distinct !DISubprogram(name: "_range;", linkageName: "_range", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !143 = distinct !DILocation(line: 150, scope: !144, inlinedAt: !145)
  !144 = distinct !DISubprogram(name: "#range#84;", linkageName: "#range#84", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !145 = distinct !DILocation(line: 150, scope: !146, inlinedAt: !127)
  !146 = distinct !DISubprogram(name: "range;", linkageName: "range", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !147 = !DILocation(line: 419, scope: !118, inlinedAt: !137)
  !148 = !DILocation(line: 697, scope: !149, inlinedAt: !150)
  !149 = distinct !DISubprogram(name: "checkbounds;", linkageName: "checkbounds", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !150 = distinct !DILocation(line: 936, scope: !151, inlinedAt: !101)
  !151 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !94, file: !94, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !152 = !{!153, !153, i64 0}
  !153 = !{!"jtbaa_stack", !13, i64 0}
  !154 = !{!29}
  !155 = !{!24, !156, !28, !22, !30, !20}
  !156 = distinct !{!156, !157, !"na_addr13"}
  !157 = distinct !{!157, !"addr13"}
  !158 = !DILocation(line: 194, scope: !93, inlinedAt: !159)
  !159 = distinct !DILocation(line: 98, scope: !96, inlinedAt: !160)
  !160 = distinct !DILocation(line: 137, scope: !161, inlinedAt: !162)
  !161 = distinct !DISubprogram(name: "axes1;", linkageName: "axes1", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !162 = distinct !DILocation(line: 389, scope: !163, inlinedAt: !164)
  !163 = distinct !DISubprogram(name: "eachindex;", linkageName: "eachindex", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !164 = distinct !DILocation(line: 689, scope: !149, inlinedAt: !165)
  !165 = distinct !DILocation(line: 699, scope: !149, inlinedAt: !150)
  !166 = !{!167, !30}
  !167 = distinct !{!167, !168, !"primal"}
  !168 = distinct !{!168, !" diff: %.fca.0.0.0.extract"}
  !169 = !{!170, !28, !29, !22, !20}
  !170 = distinct !{!170, !168, !"shadow_0"}
  !171 = !DILocation(line: 83, scope: !172, inlinedAt: !173)
  !172 = distinct !DISubprogram(name: "<;", linkageName: "<", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !173 = distinct !DILocation(line: 379, scope: !174, inlinedAt: !175)
  !174 = distinct !DISubprogram(name: ">;", linkageName: ">", scope: !135, file: !135, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !175 = distinct !DILocation(line: 681, scope: !176, inlinedAt: !177)
  !176 = distinct !DISubprogram(name: "isempty;", linkageName: "isempty", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !177 = distinct !DILocation(line: 757, scope: !178, inlinedAt: !164)
  !178 = distinct !DISubprogram(name: "checkindex;", linkageName: "checkindex", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !179 = !DILocation(line: 513, scope: !172, inlinedAt: !180)
  !180 = distinct !DILocation(line: 754, scope: !178, inlinedAt: !177)
  !181 = !DILocation(line: 86, scope: !182, inlinedAt: !180)
  !182 = distinct !DISubprogram(name: "-;", linkageName: "-", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !183 = !DILocation(line: 38, scope: !184, inlinedAt: !177)
  !184 = distinct !DISubprogram(name: "&;", linkageName: "&", scope: !185, file: !185, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !185 = !DIFile(filename: "bool.jl", directory: ".")
  !186 = !DILocation(line: 39, scope: !187, inlinedAt: !177)
  !187 = distinct !DISubprogram(name: "|;", linkageName: "|", scope: !185, file: !185, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !188 = !DILocation(line: 699, scope: !149, inlinedAt: !150)
  !189 = !DILocation(line: 86, scope: !182, inlinedAt: !190)
  !190 = distinct !DILocation(line: 768, scope: !191, inlinedAt: !192)
  !191 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !119, file: !119, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !192 = distinct !DILocation(line: 937, scope: !151, inlinedAt: !101)
  !193 = !DILocation(line: 87, scope: !125, inlinedAt: !190)
  !194 = !DILocation(line: 512, scope: !195, inlinedAt: !197)
  !195 = distinct !DISubprogram(name: "GenericMemory;", linkageName: "GenericMemory", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !196 = !DIFile(filename: "boot.jl", directory: ".")
  !197 = distinct !DILocation(line: 578, scope: !198, inlinedAt: !199)
  !198 = distinct !DISubprogram(name: "Array;", linkageName: "Array", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !199 = distinct !DILocation(line: 591, scope: !198, inlinedAt: !200)
  !200 = distinct !DILocation(line: 372, scope: !201, inlinedAt: !202)
  !201 = distinct !DISubprogram(name: "similar;", linkageName: "similar", scope: !94, file: !94, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !202 = distinct !DILocation(line: 822, scope: !203, inlinedAt: !204)
  !203 = distinct !DISubprogram(name: "similar;", linkageName: "similar", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !204 = distinct !DILocation(line: 938, scope: !151, inlinedAt: !101)
  !205 = !DILocation(line: 514, scope: !195, inlinedAt: !197)
  !206 = !{!207, !20}
  !207 = distinct !{!207, !208, !"primal"}
  !208 = distinct !{!208, !" diff: %"}
  !209 = !{!210, !28, !29, !22, !30}
  !210 = distinct !{!210, !208, !"shadow_0"}
  !211 = !{!"Unknown", i32 -1, !212}
  !212 = !{!"Pointer", i32 0, !38, i32 1, !38, i32 2, !38, i32 3, !38, i32 4, !38, i32 5, !38, i32 6, !38, i32 7, !38, i32 8, !213}
  !213 = !{!"Pointer", i32 -1, !214}
  !214 = !{!"Float@float"}
  !215 = !DILocation(line: 516, scope: !195, inlinedAt: !197)
  !216 = !DILocation(line: 522, scope: !217, inlinedAt: !218)
  !217 = distinct !DISubprogram(name: "memoryref;", linkageName: "memoryref", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !218 = distinct !DILocation(line: 579, scope: !198, inlinedAt: !199)
  !219 = !{!220, !20}
  !220 = distinct !{!220, !221, !"shadow_0"}
  !221 = distinct !{!221, !" diff: %"}
  !222 = !{!223, !28, !29, !22, !30}
  !223 = distinct !{!223, !221, !"primal"}
  !224 = !{!223, !20}
  !225 = !{!220, !28, !29, !22, !30}
  !226 = !{!"Unknown", i32 -1, !213}
  !227 = !DILocation(line: 579, scope: !198, inlinedAt: !199)
  !228 = !{!229, !229, i64 0}
  !229 = !{!"jtbaa_arrayptr", !111, i64 0}
  !230 = !{!231, !30}
  !231 = distinct !{!231, !232, !"shadow_0"}
  !232 = distinct !{!232, !" diff: %"}
  !233 = !{!24, !234, !235, !28, !29, !22, !20}
  !234 = distinct !{!234, !232, !"primal"}
  !235 = distinct !{!235, !236, !"na_addr13"}
  !236 = distinct !{!236, !"addr13"}
  !237 = !{!234, !30}
  !238 = !{!24, !231, !235, !28, !29, !22, !20}
  !239 = !DILocation(line: 939, scope: !151, inlinedAt: !101)
  !240 = !DILocation(line: 419, scope: !118, inlinedAt: !241)
  !241 = distinct !DILocation(line: 408, scope: !121, inlinedAt: !242)
  !242 = distinct !DILocation(line: 5, scope: !123, inlinedAt: !243)
  !243 = distinct !DILocation(line: 305, scope: !244, inlinedAt: !245)
  !244 = distinct !DISubprogram(name: "_copyto_impl!;", linkageName: "_copyto_impl!", scope: !94, file: !94, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !245 = distinct !DILocation(line: 299, scope: !246, inlinedAt: !247)
  !246 = distinct !DISubprogram(name: "copyto!;", linkageName: "copyto!", scope: !94, file: !94, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !247 = distinct !DILocation(line: 940, scope: !151, inlinedAt: !101)
  !248 = !DILocation(line: 697, scope: !149, inlinedAt: !243)
  !249 = !DILocation(line: 194, scope: !93, inlinedAt: !250)
  !250 = distinct !DILocation(line: 98, scope: !96, inlinedAt: !251)
  !251 = distinct !DILocation(line: 137, scope: !161, inlinedAt: !252)
  !252 = distinct !DILocation(line: 389, scope: !163, inlinedAt: !253)
  !253 = distinct !DILocation(line: 689, scope: !149, inlinedAt: !254)
  !254 = distinct !DILocation(line: 699, scope: !149, inlinedAt: !243)
  !255 = !DILocation(line: 83, scope: !172, inlinedAt: !256)
  !256 = distinct !DILocation(line: 379, scope: !174, inlinedAt: !257)
  !257 = distinct !DILocation(line: 681, scope: !176, inlinedAt: !258)
  !258 = distinct !DILocation(line: 757, scope: !178, inlinedAt: !253)
  !259 = !DILocation(line: 513, scope: !172, inlinedAt: !260)
  !260 = distinct !DILocation(line: 754, scope: !178, inlinedAt: !258)
  !261 = !DILocation(line: 86, scope: !182, inlinedAt: !260)
  !262 = !DILocation(line: 38, scope: !184, inlinedAt: !258)
  !263 = !DILocation(line: 39, scope: !187, inlinedAt: !258)
  !264 = !DILocation(line: 699, scope: !149, inlinedAt: !243)
  !265 = !DILocation(line: 524, scope: !217, inlinedAt: !266)
  !266 = distinct !DILocation(line: 306, scope: !244, inlinedAt: !245)
  !267 = !{!268, !268, i64 0, i64 0}
  !268 = !{!"jtbaa_memorylen", !111, i64 0}
  !269 = !{i64 0, i64 2305843009[21369](https://github.com/TuringLang/AdvancedVI.jl/actions/runs/12100510357/job/33823449098#step:6:21372)3951}
  !270 = !{!223, !30}
  !271 = !{!220, !28, !29, !22, !20}
  !272 = !DILocation(line: 756, scope: !273, inlinedAt: !274)
  !273 = distinct !DISubprogram(name: "check_sign_bit;", linkageName: "check_sign_bit", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !274 = distinct !DILocation(line: 867, scope: !275, inlinedAt: !276)
  !275 = distinct !DISubprogram(name: "toUInt64;", linkageName: "toUInt64", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !276 = distinct !DILocation(line: 897, scope: !277, inlinedAt: !278)
  !277 = distinct !DISubprogram(name: "UInt64;", linkageName: "UInt64", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !278 = distinct !DILocation(line: 7, scope: !279, inlinedAt: !281)
  !279 = distinct !DISubprogram(name: "convert;", linkageName: "convert", scope: !280, file: !280, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !280 = !DIFile(filename: "number.jl", directory: ".")
  !281 = distinct !DILocation(line: 687, scope: !282, inlinedAt: !283)
  !282 = distinct !DISubprogram(name: "cconvert;", linkageName: "cconvert", scope: !9, file: !9, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !283 = distinct !DILocation(line: 28, scope: !284, inlinedAt: !286)
  !284 = distinct !DISubprogram(name: "memmove;", linkageName: "memmove", scope: !285, file: !285, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !285 = !DIFile(filename: "cmem.jl", directory: ".")
  !286 = distinct !DILocation(line: 355, scope: !287, inlinedAt: !289)
  !287 = distinct !DISubprogram(name: "myunsafe_copyto!;", linkageName: "myunsafe_copyto!", scope: !288, file: !288, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !288 = !DIFile(filename: "/home/runner/.julia/packages/Enzyme/rffxx/src/compiler/interpreter.jl", directory: ".")
  !289 = distinct !DILocation(line: 308, scope: !244, inlinedAt: !245)
  !290 = !{i64 56}
  !291 = !{!24}
  !292 = !DILocation(line: 28, scope: !284, inlinedAt: !286)
  !293 = !{!24, !156}
  !294 = !DILocation(line: 356, scope: !287, inlinedAt: !289)
  !295 = !DILocation(line: 357, scope: !287, inlinedAt: !289)
  !296 = !DILocation(line: 194, scope: !93, inlinedAt: !297)
  !297 = distinct !DILocation(line: 98, scope: !96, inlinedAt: !101)
  !298 = !DILocation(line: 11, scope: !299, inlinedAt: !300)
  !299 = distinct !DISubprogram(name: "length;", linkageName: "length", scope: !9, file: !9, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !300 = distinct !DILocation(line: 44, scope: !301, inlinedAt: !302)
  !301 = distinct !DISubprogram(name: "reshape;", linkageName: "reshape", scope: !33, file: !33, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !302 = distinct !DILocation(line: 121, scope: !301, inlinedAt: !101)
  !303 = !{!231, !28, !29, !22, !20}
  !304 = !DILocation(line: 310, scope: !244, inlinedAt: !245)
  !305 = !DILocation(line: 355, scope: !306, inlinedAt: !308)
  !306 = distinct !DISubprogram(name: "map;", linkageName: "map", scope: !307, file: !307, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !307 = !DIFile(filename: "tuple.jl", directory: ".")
  !308 = distinct !DILocation(line: 837, scope: !309, inlinedAt: !302)
  !309 = distinct !DISubprogram(name: "to_shape;", linkageName: "to_shape", scope: !97, file: !97, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !310 = !DILocation(line: 639, scope: !311, inlinedAt: !313)
  !311 = distinct !DISubprogram(name: "==;", linkageName: "==", scope: !312, file: !312, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !312 = !DIFile(filename: "promotion.jl", directory: ".")
  !313 = distinct !DILocation(line: 277, scope: !314, inlinedAt: !300)
  !314 = distinct !DISubprogram(name: "!=;", linkageName: "!=", scope: !135, file: !135, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !315 = !DILocation(line: 44, scope: !301, inlinedAt: !302)
  !316 = !DILocation(line: 45, scope: !301, inlinedAt: !302)
  !317 = !DILocation(line: 222, scope: !99, inlinedAt: !101)
  !318 = !DILocation(line: 266, scope: !319, inlinedAt: !320)
  !319 = distinct !DISubprogram(name: "_projection_mismatch;", linkageName: "_projection_mismatch", scope: !100, file: !100, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !320 = distinct !DILocation(line: 227, scope: !99, inlinedAt: !101)
  !321 = !{!24, !156, !28, !29, !30, !20}
  !322 = !DILocation(line: 227, scope: !99, inlinedAt: !101)
  !323 = !DILocation(line: 49, scope: !63, inlinedAt: !324)
  !324 = distinct !DILocation(line: 81, scope: !325, inlinedAt: !326)
  !325 = distinct !DISubprogram(name: "setindex!;", linkageName: "setindex!", scope: !67, file: !67, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !326 = distinct !DILocation(line: 197, scope: !48, inlinedAt: !61)
  !327 = !DILocation(line: 88, scope: !328, inlinedAt: !324)
  !328 = distinct !DISubprogram(name: "*;", linkageName: "*", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !329 = !{!330, !30}
  !330 = distinct !{!330, !331, !"primal"}
  !331 = distinct !{!331, !" diff: %"}
  !332 = !{!333, !28, !29, !22, !20}
  !333 = distinct !{!333, !331, !"shadow_0"}
  !334 = !DILocation(line: 527, scope: !335, inlinedAt: !336)
  !335 = distinct !DISubprogram(name: ">>;", linkageName: ">>", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !336 = distinct !DILocation(line: 534, scope: !335, inlinedAt: !324)
  !337 = !DILocation(line: 514, scope: !132, inlinedAt: !338)
  !338 = distinct !DILocation(line: 426, scope: !134, inlinedAt: !324)
  !339 = !DILocation(line: 81, scope: !325, inlinedAt: !326)
  !340 = !DILocation(line: 62, scope: !341, inlinedAt: !342)
  !341 = distinct !DISubprogram(name: "rehash!;", linkageName: "rehash!", scope: !67, file: !67, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !342 = distinct !DILocation(line: 82, scope: !325, inlinedAt: !326)
  !343 = !DILocation(line: 8, scope: !344, inlinedAt: !346)
  !344 = distinct !DISubprogram(name: "RefValue;", linkageName: "RefValue", scope: !345, file: !345, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !345 = !DIFile(filename: "refvalue.jl", directory: ".")
  !346 = distinct !DILocation(line: 85, scope: !325, inlinedAt: !326)
  !347 = !DILocation(line: 49, scope: !63, inlinedAt: !348)
  !348 = distinct !DILocation(line: 86, scope: !325, inlinedAt: !326)
  !349 = !DILocation(line: 30, scope: !350, inlinedAt: !352)
  !350 = distinct !DISubprogram(name: "convert;", linkageName: "convert", scope: !351, file: !351, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !351 = !DIFile(filename: "pointer.jl", directory: ".")
  !352 = distinct !DILocation(line: 53, scope: !353, inlinedAt: !348)
  !353 = distinct !DISubprogram(name: "unsafe_convert;", linkageName: "unsafe_convert", scope: !345, file: !345, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !354 = !DILocation(line: 86, scope: !325, inlinedAt: !326)
  !355 = !DILocation(line: 53, scope: !356, inlinedAt: !348)
  !356 = distinct !DISubprogram(name: "setproperty!;", linkageName: "setproperty!", scope: !64, file: !64, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !357 = !{!24, !80, !235, !28, !29, !30, !20}
  !358 = !{!24, !77, !235, !28, !29, !30, !20}
  !359 = !DILocation(line: 49, scope: !63, inlinedAt: !360)
  !360 = distinct !DILocation(line: 87, scope: !325, inlinedAt: !326)
  !361 = !DILocation(line: 49, scope: !63, inlinedAt: !362)
  !362 = distinct !DILocation(line: 59, scope: !363, inlinedAt: !360)
  !363 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !345, file: !345, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !364 = !{!365, !22}
  !365 = distinct !{!365, !366, !"primal"}
  !366 = distinct !{!366, !" diff: %"}
  !367 = !{!368, !28, !29, !30, !20}
  !368 = distinct !{!368, !366, !"shadow_0"}
  !369 = !DILocation(line: 549, scope: !370, inlinedAt: !371)
  !370 = distinct !DISubprogram(name: "rem;", linkageName: "rem", scope: !126, file: !126, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !371 = distinct !DILocation(line: 1011, scope: !125, inlinedAt: !360)
  !372 = !DILocation(line: 87, scope: !125, inlinedAt: !373)
  !373 = distinct !DILocation(line: 1013, scope: !125, inlinedAt: !360)
  !374 = !DILocation(line: 53, scope: !356, inlinedAt: !360)
  !375 = !DILocation(line: 199, scope: !48, inlinedAt: !61)
  !376 = !DILocation(line: 306, scope: !244, inlinedAt: !245)
  !377 = !{!170, !30}
  !378 = !{!167, !28, !29, !22, !20}
  !379 = !{!380, !30}
  !380 = distinct !{!380, !381, !"primal"}
  !381 = distinct !{!381, !" diff: %"}
  !382 = !{!383, !28, !29, !22, !20}
  !383 = distinct !{!383, !381, !"shadow_0"}
  !384 = !{!380, !20}
  !385 = !{!383, !28, !29, !22, !30}
  !386 = !DILocation(line: 353, scope: !287, inlinedAt: !289)
  !387 = !DILocation(line: 354, scope: !287, inlinedAt: !289)
  !388 = !DILocation(line: 88, scope: !328, inlinedAt: !286)
  !389 = !DILocation(line: 741, scope: !390, inlinedAt: !391)
  !390 = distinct !DISubprogram(name: "is_top_bit_set;", linkageName: "is_top_bit_set", scope: !196, file: !196, type: !10, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !391 = distinct !DILocation(line: 756, scope: !273, inlinedAt: !274)
  !392 = distinct !DISubprogram(name: "diffejulia_CachedWalk_100192_inner_7wrap", linkageName: "diffejulia_CachedWalk_100192_inner_7wrap", scope: null, file: !46, type: !10, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !393 = !DILocation(line: 93, scope: !66, inlinedAt: !394)
  !394 = distinct !DILocation(line: 182, scope: !69, inlinedAt: !395)
  !395 = distinct !DILocation(line: 19, scope: !71, inlinedAt: !396)
  !396 = distinct !DILocation(line: 192, scope: !397, inlinedAt: !398)
  !397 = distinct !DISubprogram(name: "CachedWalk", linkageName: "julia_CachedWalk_100192", scope: null, file: !46, line: 190, type: !10, scopeLine: 190, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !6, retainedNodes: !0)
  !398 = distinct !DILocation(line: 0, scope: !397, inlinedAt: !399)
  !399 = distinct !DILocation(line: 0, scope: !392)
  !400 = !DILocation(line: 192, scope: !397, inlinedAt: !398)
  !401 = !DILocation(line: 193, scope: !397, inlinedAt: !398)
  !402 = !DILocation(line: 87, scope: !125, inlinedAt: !403)
  !403 = distinct !DILocation(line: 1115, scope: !128, inlinedAt: !404)
  !404 = distinct !DILocation(line: 1326, scope: !128, inlinedAt: !405)
  !405 = distinct !DILocation(line: 102, scope: !102, inlinedAt: !406)
  !406 = distinct !DILocation(line: 97, scope: !105, inlinedAt: !407)
  !407 = distinct !DILocation(line: 144, scope: !107, inlinedAt: !408)
  !408 = distinct !DILocation(line: 195, scope: !397, inlinedAt: !398)
  !409 = !DILocation(line: 514, scope: !132, inlinedAt: !410)
  !410 = distinct !DILocation(line: 426, scope: !134, inlinedAt: !411)
  !411 = distinct !DILocation(line: 419, scope: !118, inlinedAt: !412)
  !412 = distinct !DILocation(line: 408, scope: !121, inlinedAt: !413)
  !413 = distinct !DILocation(line: 5, scope: !123, inlinedAt: !414)
  !414 = distinct !DILocation(line: 211, scope: !140, inlinedAt: !415)
  !415 = distinct !DILocation(line: 166, scope: !142, inlinedAt: !416)
  !416 = distinct !DILocation(line: 150, scope: !144, inlinedAt: !417)
  !417 = distinct !DILocation(line: 150, scope: !146, inlinedAt: !403)
  !418 = !DILocation(line: 419, scope: !118, inlinedAt: !412)
  !419 = !DILocation(line: 86, scope: !182, inlinedAt: !420)
  !420 = distinct !DILocation(line: 768, scope: !191, inlinedAt: !421)
  !421 = distinct !DILocation(line: 937, scope: !151, inlinedAt: !405)
  !422 = !DILocation(line: 512, scope: !195, inlinedAt: !423)
  !423 = distinct !DILocation(line: 578, scope: !198, inlinedAt: !424)
  !424 = distinct !DILocation(line: 591, scope: !198, inlinedAt: !425)
  !425 = distinct !DILocation(line: 372, scope: !201, inlinedAt: !426)
  !426 = distinct !DILocation(line: 822, scope: !203, inlinedAt: !427)
  !427 = distinct !DILocation(line: 938, scope: !151, inlinedAt: !405)
  !428 = !DILocation(line: 516, scope: !195, inlinedAt: !423)
  !429 = !DILocation(line: 939, scope: !151, inlinedAt: !405)
  !430 = !DILocation(line: 353, scope: !287, inlinedAt: !431)
  !431 = distinct !DILocation(line: 308, scope: !244, inlinedAt: !432)
  !432 = distinct !DILocation(line: 299, scope: !246, inlinedAt: !433)
  !433 = distinct !DILocation(line: 940, scope: !151, inlinedAt: !405)
  !434 = !DILocation(line: 354, scope: !287, inlinedAt: !431)
  !435 = !DILocation(line: 356, scope: !287, inlinedAt: !431)
  !436 = !DILocation(line: 357, scope: !287, inlinedAt: !431)
  !437 = !DILocation(line: 310, scope: !244, inlinedAt: !432)
  !438 = !DILocation(line: 81, scope: !325, inlinedAt: !439)
  !439 = distinct !DILocation(line: 197, scope: !397, inlinedAt: !398)
  !440 = !DILocation(line: 53, scope: !356, inlinedAt: !441)
  !441 = distinct !DILocation(line: 83, scope: !325, inlinedAt: !439)
  !442 = !DILocation(line: 199, scope: !397, inlinedAt: !398)
  !443 = !DILocation(line: 28, scope: !284, inlinedAt: !444)
  !444 = distinct !DILocation(line: 355, scope: !287, inlinedAt: !431)
  !445 = !DILocation(line: 62, scope: !341, inlinedAt: !446)
  !446 = distinct !DILocation(line: 82, scope: !325, inlinedAt: !439)
  
  Stacktrace:
    [1] post_optimze!(mod::LLVM.Module, tm::LLVM.TargetMachine, machine::Bool)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/compiler/optimize.jl:743
    [2] post_optimze!(mod::LLVM.Module, tm::LLVM.TargetMachine)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/compiler/optimize.jl:721
    [3] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5284
    [4] _thunk
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5265 [inlined]
    [5] cached_compilation
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5306 [inlined]
    [6] thunkbase(mi::Core.MethodInstance, World::UInt64, FA::Type{<:Annotation}, A::Type{<:Annotation}, TT::Type, Mode::Enzyme.API.CDerivativeMode, width::Int64, ModifiedBetween::NTuple{N, Bool} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5410
    [7] thunk_generator(world::UInt64, source::LineNumberNode, FA::Type, A::Type, TT::Type, Mode::Enzyme.API.CDerivativeMode, Width::Int64, ModifiedBetween::NTuple{N, Bool} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::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)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5562
    [8] runtime_generic_augfwd(activity::Type{Val{(true, true, false, false)}}, runtimeActivity::Val{true}, width::Val{1}, ModifiedBetween::Val{(true, true, true, true)}, RT::Val{@NamedTuple{1, 2, 3}}, f::Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}, df::Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}, primal_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, shadow_1_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, primal_2::Vector{Float32}, shadow_2_1::Vector{Float32}, primal_3::Int64, shadow_3_1::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/rules/jitrules.jl:465
    [9] recurse
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:52 [inlined]
   [10] #59
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:115 [inlined]
   [11] map
      @ ./tuple.jl:406 [inlined]
   [12] map
      @ ./namedtuple.jl:266 [inlined]
   [13] _trainmap
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:114 [inlined]
   [14] _Trainable_biwalk
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:110 [inlined]
   [15] _Trainable_biwalk
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:0 [inlined]
   [16] augmented_julia__Trainable_biwalk_97366_inner_1wrap
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:0
   [17] macro expansion
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5196 [inlined]
   [18] enzyme_call
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:4742 [inlined]
   [19] AugmentedForwardThunk
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:4678 [inlined]
   [20] runtime_generic_augfwd(activity::Type{Val{(false, true, true, false)}}, runtimeActivity::Val{true}, width::Val{1}, ModifiedBetween::Val{(true, true, true, true)}, RT::Val{@NamedTuple{1, 2, 3}}, f::Optimisers._Trainable_biwalk, df::Nothing, primal_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, shadow_1_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, primal_2::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, shadow_2_1::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, primal_3::@NamedTuple{m::Int64, σ::Int64}, shadow_3_1::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/rffxx/src/rules/jitrules.jl:480
   [21] ExcludeWalk
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:144 [inlined]
   [22] CachedWalk
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:195 [inlined]
   [23] execute
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:53 [inlined]
   [24] #fmap#40
      @ ~/.julia/packages/Functors/wOtRi/src/maps.jl:11 [inlined]
   [25] fmap
      @ ~/.julia/packages/Functors/wOtRi/src/maps.jl:3 [inlined]
   [26] #_rebuild#56
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:96 [inlined]
   [27] _rebuild
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:94 [inlined]
   [28] Restructure
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:59 [inlined]
   [29] restructure_ad_forward
      @ ~/work/AdvancedVI.jl/AdvancedVI.jl/ext/AdvancedVIEnzymeExt.jl:14 [inlined]
   [30] estimate_repgradelbo_ad_forward
      @ ~/work/AdvancedVI.jl/AdvancedVI.jl/src/objectives/elbo/repgradelbo.jl:90 [inlined]
   [31] estimate_repgradelbo_ad_forward
      @ ~/work/AdvancedVI.jl/AdvancedVI.jl/src/objectives/elbo/repgradelbo.jl:0 [inlined]
   [32] diffejulia_estimate_repgradelbo_ad_forward_98493_inner_10wrap
      @ ~/work/AdvancedVI.jl/AdvancedVI.jl/src/objectives/elbo/repgradelbo.jl:0
   [33] macro expansion
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:5196 [inlined]
   [34] enzyme_call
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:4742 [inlined]
   [35] CombinedAdjointThunk
      @ ~/.julia/packages/Enzyme/rffxx/src/compiler.jl:4614 [inlined]
   [36] autodiff(::ReverseMode{true, true, FFIABI, false, false}, ::Const{typeof(AdvancedVI.estimate_repgradelbo_ad_forward)}, ::Type{Active}, ::Duplicated{Vector{Float32}}, ::Const{@NamedTuple{rng::StableRNGs.LehmerRNG, adtype::AutoEnzyme{Nothing, Nothing}, obj::RepGradELBO{ClosedFormEntropy}, problem::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, q_stop::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}}})
      @ Enzyme ~/.julia/packages/Enzyme/rffxx/src/Enzyme.jl:503
   [37] value_and_gradient!(::AutoEnzyme{Nothing, Nothing}, f::Function, x::Vector{Float32}, aux::@NamedTuple{rng::StableRNGs.LehmerRNG, adtype::AutoEnzyme{Nothing, Nothing}, obj::RepGradELBO{ClosedFormEntropy}, problem::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, q_stop::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}}, out::DiffResults.MutableDiffResult{1, Float32, Tuple{Vector{Float32}}})
      @ AdvancedVIEnzymeExt ~/work/AdvancedVI.jl/AdvancedVI.jl/ext/AdvancedVIEnzymeExt.jl:26
   [38] estimate_gradient!(rng::StableRNGs.LehmerRNG, obj::RepGradELBO{ClosedFormEntropy}, adtype::AutoEnzyme{Nothing, Nothing}, out::DiffResults.MutableDiffResult{1, Float32, Tuple{Vector{Float32}}}, prob::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, params::Vector{Float32}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, state::Nothing)
      @ AdvancedVI ~/work/AdvancedVI.jl/AdvancedVI.jl/src/objectives/elbo/repgradelbo.jl:116
   [39] optimize(::StableRNGs.LehmerRNG, ::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, ::RepGradELBO{ClosedFormEntropy}, ::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, ::Int64; adtype::AutoEnzyme{Nothing, Nothing}, optimizer::Descent{Float32}, averager::NoAveraging, show_progress::Bool, state_init::@NamedTuple{}, callback::Nothing, prog::ProgressMeter.Progress)
      @ AdvancedVI ~/work/AdvancedVI.jl/AdvancedVI.jl/src/optimize.jl:76

@Red-Portal
Copy link
Author

@wsmoses It does seem to fix something, but I get the following new error:

  MethodError: no method matching parameters(::LLVM.Function, ::Int64)
  
  Closest candidates are:
    parameters(::LLVM.Function)
     @ LLVM ~/.julia/packages/LLVM/wMjUU/src/core/function.jl:198
  
  Stacktrace:
    [1] annotate!(mod::LLVM.Module)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/llvm/attributes.jl:834
    [2] codegen(output::Symbol, job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/compiler.jl:4073
    [3] codegen
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:3218 [inlined]
    [4] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5265
    [5] _thunk
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5265 [inlined]
    [6] cached_compilation
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5306 [inlined]
    [7] thunkbase(mi::Core.MethodInstance, World::UInt64, FA::Type{<:Annotation}, A::Type{<:Annotation}, TT::Type, Mode::Enzyme.API.CDerivativeMode, width::Int64, ModifiedBetween::Tuple{Vararg{Bool, N}} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5410
    [8] thunk_generator(world::UInt64, source::LineNumberNode, FA::Type, A::Type, TT::Type, Mode::Enzyme.API.CDerivativeMode, Width::Int64, ModifiedBetween::Tuple{Vararg{Bool, N}} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::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)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5562
    [9] runtime_generic_augfwd(activity::Type{Val{(false, true, true, true, false)}}, runtimeActivity::Val{true}, width::Val{1}, ModifiedBetween::Val{(true, true, true, true, true)}, RT::Val{@NamedTuple{1, 2, 3}}, f::typeof(map), df::Nothing, primal_1::Optimisers.var"#59#60"{Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}}, shadow_1_1::Optimisers.var"#59#60"{Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}}, primal_2::@NamedTuple{m::Vector{Float32}, σ::Vector{Float32}}, shadow_2_1::@NamedTuple{m::Vector{Float32}, σ::Vector{Float32}}, primal_3::@NamedTuple{m::Vector{Float32}, σ::Vector{Float32}}, shadow_3_1::@NamedTuple{m::Vector{Float32}, σ::Vector{Float32}}, primal_4::@NamedTuple{m::Int64, σ::Int64}, shadow_4_1::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/rules/jitrules.jl:465
   [10] _trainmap
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:114 [inlined]
   [11] _Trainable_biwalk
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:110 [inlined]
   [12] _Trainable_biwalk
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:0 [inlined]
   [13] augmented_julia__Trainable_biwalk_9736_inner_1wrap
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:0
   [14] macro expansion
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5196 [inlined]
   [15] enzyme_call
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:4742 [inlined]
   [16] AugmentedForwardThunk
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:4678 [inlined]
   [17] runtime_generic_augfwd(activity::Type{Val{(false, true, true, false)}}, runtimeActivity::Val{true}, width::Val{1}, ModifiedBetween::Val{(true, true, true, true)}, RT::Val{@NamedTuple{1, 2, 3}}, f::Optimisers._Trainable_biwalk, df::Nothing, primal_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, shadow_1_1::Functors.var"#recurse#26"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword}}, primal_2::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, shadow_2_1::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, primal_3::@NamedTuple{m::Int64, σ::Int64}, shadow_3_1::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/o562S/src/rules/jitrules.jl:480
   [18] ExcludeWalk
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:144 [inlined]
   [19] CachedWalk
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:195 [inlined]
   [20] execute
      @ ~/.julia/packages/Functors/wOtRi/src/walks.jl:53 [inlined]
   [21] #fmap#40
      @ ~/.julia/packages/Functors/wOtRi/src/maps.jl:11 [inlined]
   [22] fmap
      @ ~/.julia/packages/Functors/wOtRi/src/maps.jl:3 [inlined]
   [23] #_rebuild#56
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:96 [inlined]
   [24] _rebuild
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:94 [inlined]
   [25] Restructure
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:59 [inlined]
   [26] restructure_ad_forward
      @ ~/.julia/dev/AdvancedVI/ext/AdvancedVIEnzymeExt.jl:14 [inlined]
   [27] estimate_repgradelbo_ad_forward
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:97 [inlined]
   [28] estimate_repgradelbo_ad_forward
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:0 [inlined]
   [29] augmented_julia_estimate_repgradelbo_ad_forward_9969_inner_1wrap
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:0
   [30] macro expansion
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:5196 [inlined]
   [31] enzyme_call
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:4742 [inlined]
   [32] AugmentedForwardThunk
      @ ~/.julia/packages/Enzyme/o562S/src/compiler.jl:4678 [inlined]
   [33] autodiff(::ReverseMode{true, true, FFIABI, false, false}, ::Const{typeof(AdvancedVI.estimate_repgradelbo_ad_forward)}, ::Type{Active}, ::Duplicated{Vector{Float32}}, ::Const{@NamedTuple{rng::StableRNGs.LehmerRNG, adtype::AutoEnzyme{Nothing, Nothing}, obj::RepGradELBO{ClosedFormEntropy}, problem::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, q_stop::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}}})
      @ Enzyme ~/.julia/packages/Enzyme/o562S/src/Enzyme.jl:396
   [34] value_and_gradient!(::AutoEnzyme{Nothing, Nothing}, f::Function, x::Vector{Float32}, aux::@NamedTuple{rng::StableRNGs.LehmerRNG, adtype::AutoEnzyme{Nothing, Nothing}, obj::RepGradELBO{ClosedFormEntropy}, problem::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, q_stop::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}}, out::DiffResults.MutableDiffResult{1, Float32, Tuple{Vector{Float32}}})
      @ AdvancedVIEnzymeExt ~/.julia/dev/AdvancedVI/ext/AdvancedVIEnzymeExt.jl:26
   [35] estimate_gradient!(rng::StableRNGs.LehmerRNG, obj::RepGradELBO{ClosedFormEntropy}, adtype::AutoEnzyme{Nothing, Nothing}, out::DiffResults.MutableDiffResult{1, Float32, Tuple{Vector{Float32}}}, prob::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, params::Vector{Float32}, restructure::Optimisers.Restructure{TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, @NamedTuple{m::Int64, σ::Int64}}, state::Nothing)
      @ AdvancedVI ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:123
   [36] optimize(::StableRNGs.LehmerRNG, ::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, Diagonal{Float32, Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}}}, ::RepGradELBO{ClosedFormEntropy}, ::TuringDiagMvNormal{Vector{Float32}, Vector{Float32}}, ::Int64; adtype::AutoEnzyme{Nothing, Nothing}, optimizer::Descent{Float32}, averager::NoAveraging, show_progress::Bool, state_init::@NamedTuple{}, callback::Nothing, prog::ProgressMeter.Progress)
      @ AdvancedVI ~/.julia/dev/AdvancedVI/src/optimize.jl:76
   [37] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_distributionsad.jl:68 [inlined]
   [38] macro expansion
      @ ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
   [39] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_distributionsad.jl:67 [inlined]
   [40] macro expansion
      @ ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/Test/src/Test.jl:1669 [inlined]
   [41] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_distributionsad.jl:14 [inlined]
   [42] macro expansion
      @ ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
   [43] top-level scope
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_distributionsad.jl:14
   [44] include(fname::String)
      @ Base.MainInclude ./client.jl:494
   [45] top-level scope
      @ ~/.julia/dev/AdvancedVI/test/runtests.jl:68
   [46] include(fname::String)
      @ Base.MainInclude ./client.jl:494
   [47] top-level scope
      @ REPL[9]:1
   [48] eval
      @ ./boot.jl:385 [inlined]
   [49] eval_user_input(ast::Any, backend::REPL.REPLBackend, mod::Module)
      @ REPL ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
   [50] repl_backend_loop(backend::REPL.REPLBackend, get_module::Function)
      @ REPL ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
   [51] start_repl_backend(backend::REPL.REPLBackend, consumer::Any; get_module::Function)
      @ REPL ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
   [52] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool, backend::Any)
      @ REPL ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
   [53] run_repl(repl::REPL.AbstractREPL, consumer::Any)
      @ REPL ~/.julia/juliaup/julia-1.10.7+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
   [54] (::Base.var"#1014#1016"{Bool, Bool, Bool})(REPL::Module)
      @ Base ./client.jl:437
   [55] #invokelatest#2
      @ ./essentials.jl:892 [inlined]
   [56] invokelatest
      @ ./essentials.jl:889 [inlined]
   [57] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
      @ Base ./client.jl:421
   [58] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:338

@wsmoses
Copy link
Member

wsmoses commented Dec 4, 2024

ah that was me being silly, try again?

@Red-Portal
Copy link
Author

Oh yeah it works now!

@wsmoses
Copy link
Member

wsmoses commented Dec 4, 2024

nice!

@wsmoses wsmoses closed this as completed Dec 4, 2024
@Red-Portal
Copy link
Author

@wsmoses Oh crap I was actually testing this on 1.10 while I should have done that on 1.11. Could we reopen this? I get the following error when testing on 1.11 and the woptr branch:

determinism: Error During Test at /home/krkim/.julia/dev/AdvancedVI/test/inference/repgradelbo_locationscale.jl:70
  Got exception outside of a @test
  
  No augmented forward pass found for jl_genericmemory_slice
   at context:   %80 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* @jl_genericmemory_slice({} addrspace(10)* nonnull %63, i64 %79, i64 %36) #29, !dbg !238
  
  Stacktrace:
   [1] reshape
     @ ./reshapedarray.jl:55
   [2] reshape
     @ ./reshapedarray.jl:121
   [3] _getat
     @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:102
  
  
  Stacktrace:
    [1] reshape
      @ ./reshapedarray.jl:55 [inlined]
    [2] reshape
      @ ./reshapedarray.jl:121 [inlined]
    [3] _getat
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:102
    [4] #57
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:97 [inlined]
    [5] ExcludeWalk
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:126 [inlined]
    [6] CachedWalk
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:177 [inlined]
    [7] CachedWalk
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:0 [inlined]
    [8] augmented_julia_CachedWalk_89551_inner_9wrap
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:0
    [9] macro expansion
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:5196 [inlined]
   [10] enzyme_call
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:4742 [inlined]
   [11] AugmentedForwardThunk
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:4678 [inlined]
   [12] runtime_generic_augfwd(activity::Type{Val{(true, true, true, false)}}, runtimeActivity::Val{true}, width::Val{1}, ModifiedBetween::Val{(true, true, true, true)}, RT::Val{@NamedTuple{1, 2, 3}}, f::Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword, Functors.WalkCache{Any, Any, Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, IdDict{Any, Any}}}, df::Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword, Functors.WalkCache{Any, Any, Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, IdDict{Any, Any}}}, primal_1::Functors.var"#recurse#27"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword, Functors.WalkCache{Any, Any, Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, IdDict{Any, Any}}}}, shadow_1_1::Functors.var"#recurse#27"{Functors.CachedWalk{Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, Functors.NoKeyword, Functors.WalkCache{Any, Any, Functors.ExcludeWalk{Optimisers._Trainable_biwalk, Optimisers.var"#57#58"{Vector{Float32}}, typeof(Optimisers.isnumeric)}, IdDict{Any, Any}}}}, primal_2::LowerTriangular{Float32, Matrix{Float32}}, shadow_2_1::LowerTriangular{Float32, Matrix{Float32}}, primal_3::Int64, shadow_3_1::Nothing)
      @ Enzyme.Compiler ~/.julia/packages/Enzyme/pCsIQ/src/rules/jitrules.jl:480
   [13] recurse
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:54 [inlined]
   [14] #59
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:115 [inlined]
   [15] map (repeats 2 times)
      @ ./tuple.jl:406 [inlined]
   [16] map
      @ ./namedtuple.jl:266 [inlined]
   [17] _trainmap
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:114 [inlined]
   [18] _Trainable_biwalk
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:110 [inlined]
   [19] ExcludeWalk
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:126 [inlined]
   [20] CachedWalk
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:177 [inlined]
   [21] execute
      @ ~/.julia/packages/Functors/LbNAu/src/walks.jl:55 [inlined]
   [22] #fmap#41
      @ ~/.julia/packages/Functors/LbNAu/src/maps.jl:11 [inlined]
   [23] fmap
      @ ~/.julia/packages/Functors/LbNAu/src/maps.jl:3 [inlined]
   [24] #_rebuild#56
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:96 [inlined]
   [25] _rebuild
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:94 [inlined]
   [26] Restructure
      @ ~/.julia/packages/Optimisers/FES4P/src/destructure.jl:59 [inlined]
   [27] restructure_ad_forward
      @ ~/.julia/dev/AdvancedVI/ext/AdvancedVIEnzymeExt.jl:14 [inlined]
   [28] estimate_repgradelbo_ad_forward
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:97 [inlined]
   [29] estimate_repgradelbo_ad_forward
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:0 [inlined]
   [30] diffejulia_estimate_repgradelbo_ad_forward_89824_inner_16wrap
      @ ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:0
   [31] macro expansion
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:5196 [inlined]
   [32] enzyme_call
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:4742 [inlined]
   [33] CombinedAdjointThunk
      @ ~/.julia/packages/Enzyme/pCsIQ/src/compiler.jl:4614 [inlined]
   [34] autodiff
      @ ~/.julia/packages/Enzyme/pCsIQ/src/Enzyme.jl:503 [inlined]
   [35] value_and_gradient!
      @ ~/.julia/dev/AdvancedVI/ext/AdvancedVIEnzymeExt.jl:26 [inlined]
   [36] estimate_gradient!(rng::StableRNGs.LehmerRNG, obj::RepGradELBO{ClosedFormEntropy}, adtype::AutoEnzyme{Nothing, Nothing}, out::DiffResults.MutableDiffResult{1, Float32, Tuple{Vector{Float32}}}, prob::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, PDMat{Float32, Matrix{Float32}}}, params::Vector{Float32}, restructure::Optimisers.Restructure{MvLocationScale{LowerTriangular{Float32, Matrix{Float32}}, Normal{Float32}, Vector{Float32}, Float32}, @NamedTuple{location::Int64, scale::Int64}}, state::Nothing)
      @ AdvancedVI ~/.julia/dev/AdvancedVI/src/objectives/elbo/repgradelbo.jl:123
   [37] optimize(::StableRNGs.LehmerRNG, ::TestNormal{Fill{Float32, 1, Tuple{Base.OneTo{Int64}}}, PDMat{Float32, Matrix{Float32}}}, ::RepGradELBO{ClosedFormEntropy}, ::MvLocationScale{LowerTriangular{Float32, Matrix{Float32}}, Normal{Float32}, Vector{Float32}, Float32}, ::Int64; adtype::AutoEnzyme{Nothing, Nothing}, optimizer::Descent{Float32}, averager::NoAveraging, show_progress::Bool, state_init::@NamedTuple{}, callback::Nothing, prog::ProgressMeter.Progress)
      @ AdvancedVI ~/.julia/dev/AdvancedVI/src/optimize.jl:76
   [38] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_locationscale.jl:72 [inlined]
   [39] macro expansion
      @ ~/.julia/juliaup/julia-1.11.2+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1704 [inlined]
   [40] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_locationscale.jl:71 [inlined]
   [41] macro expansion
      @ ~/.julia/juliaup/julia-1.11.2+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1793 [inlined]
   [42] macro expansion
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_locationscale.jl:14 [inlined]
   [43] macro expansion
      @ ~/.julia/juliaup/julia-1.11.2+0.x64.linux.gnu/share/julia/stdlib/v1.11/Test/src/Test.jl:1704 [inlined]
   [44] top-level scope
      @ ~/.julia/dev/AdvancedVI/test/inference/repgradelbo_locationscale.jl:14
   [45] include(fname::String)
      @ Main ./sysimg.jl:38
   [46] top-level scope
      @ ~/.julia/dev/AdvancedVI/test/runtests.jl:69
   [47] include(fname::String)
      @ Main ./sysimg.jl:38
   [48] top-level scope
      @ none:6
   [49] eval
      @ ./boot.jl:430 [inlined]
   [50] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:296

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants