Skip to content

Instantly share code, notes, and snippets.

@ArbitRandomUser
Created December 30, 2023 05:11
Show Gist options
  • Save ArbitRandomUser/31a457858911ea9101e9e3a59b08ca25 to your computer and use it in GitHub Desktop.
Save ArbitRandomUser/31a457858911ea9101e9e3a59b08ca25 to your computer and use it in GitHub Desktop.
llvm IR from error
julia> Enzyme.autodiff(Reverse,Duplicated(df,make_zero(df)),Const,Duplicated(du,vecc),Duplicated(u,make_zero(u)),Duplicated(nnparams,dp),0.1)
┌ Warning: Using fallback BLAS replacements, performance may be degraded
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/U36Ed/src/utils.jl:59
┌ Warning: Using fallback BLAS replacements, performance may be degraded
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/U36Ed/src/utils.jl:59
ERROR: Enzyme compilation failed.
Current scope:
; Function Attrs: mustprogress willreturn
define internal fastcc void @preprocess_julia_set_params_12661({ i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(152) %0, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %1) unnamed_addr #46 !dbg !7796 {
top:
%2 = call {}*** @julia.get_pgcstack()
%3 = call {}*** @julia.get_pgcstack()
%4 = call {}*** @julia.get_pgcstack()
%5 = call {}*** @julia.get_pgcstack()
%6 = call {}*** @julia.get_pgcstack()
%7 = call {}*** @julia.get_pgcstack()
%8 = call {}*** @julia.get_pgcstack()
%9 = bitcast {}*** %7 to {}**
%10 = getelementptr inbounds {}*, {}** %9, i64 -14
%11 = getelementptr inbounds {}*, {}** %10, i64 16
%12 = bitcast {}** %11 to i8**
%13 = load i8*, i8** %12, align 8
%14 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %10, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139845959120208 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.32({} addrspace(10)* %14, i8 0, i64 40), !enzyme_zerostack !58
%15 = bitcast {} addrspace(10)* %14 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%16 = bitcast {}*** %6 to {}**
%17 = getelementptr inbounds {}*, {}** %16, i64 -14
%18 = getelementptr inbounds {}*, {}** %17, i64 16
%19 = bitcast {}** %18 to i8**
%20 = load i8*, i8** %19, align 8
%21 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %17, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139844797289808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.33({} addrspace(10)* %21, i8 0, i64 8), !enzyme_zerostack !58
%22 = bitcast {} addrspace(10)* %21 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !58
%23 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !410
%newstruct49 = bitcast i8* %23 to [1 x [2 x i64]]*, !enzyme_caststack !58
%24 = bitcast {}*** %5 to {}**
%25 = getelementptr inbounds {}*, {}** %24, i64 -14
%26 = getelementptr inbounds {}*, {}** %25, i64 16
%27 = bitcast {}** %26 to i8**
%28 = load i8*, i8** %27, align 8
%29 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %25, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139845959120208 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.34({} addrspace(10)* %29, i8 0, i64 40), !enzyme_zerostack !58
%30 = bitcast {} addrspace(10)* %29 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%31 = bitcast {}*** %8 to {}**
%32 = getelementptr inbounds {}*, {}** %31, i64 -14
%33 = getelementptr inbounds {}*, {}** %32, i64 16
%34 = bitcast {}** %33 to i8**
%35 = load i8*, i8** %34, align 8
%36 = call noalias nonnull dereferenceable(56) dereferenceable_or_null(56) {} addrspace(10)* @julia.gc_alloc_obj({}** %32, i64 56, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139845959120464 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType({} addrspace(10)* %36, i8 0, i64 56), !enzyme_zerostack !58
%37 = bitcast {} addrspace(10)* %36 to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)*, !enzyme_caststack !58
%38 = bitcast {}*** %4 to {}**
%39 = getelementptr inbounds {}*, {}** %38, i64 -14
%40 = getelementptr inbounds {}*, {}** %39, i64 16
%41 = bitcast {}** %40 to i8**
%42 = load i8*, i8** %41, align 8
%43 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %39, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139845959120208 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.35({} addrspace(10)* %43, i8 0, i64 40), !enzyme_zerostack !58
%44 = bitcast {} addrspace(10)* %43 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%45 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !410
%newstruct11 = bitcast i8* %45 to [2 x i64]*, !enzyme_caststack !58
%46 = bitcast {}*** %3 to {}**
%47 = getelementptr inbounds {}*, {}** %46, i64 -14
%48 = getelementptr inbounds {}*, {}** %47, i64 16
%49 = bitcast {}** %48 to i8**
%50 = load i8*, i8** %49, align 8
%51 = call noalias nonnull dereferenceable(8) dereferenceable_or_null(8) {} addrspace(10)* @julia.gc_alloc_obj({}** %47, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139844797289808 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.36({} addrspace(10)* %51, i8 0, i64 8), !enzyme_zerostack !58
%52 = bitcast {} addrspace(10)* %51 to [1 x {} addrspace(10)*] addrspace(10)*, !enzyme_caststack !58
%53 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !410
%newstruct5 = bitcast i8* %53 to [1 x [2 x i64]]*, !enzyme_caststack !58
%54 = bitcast {}*** %2 to {}**
%55 = getelementptr inbounds {}*, {}** %54, i64 -14
%56 = getelementptr inbounds {}*, {}** %55, i64 16
%57 = bitcast {}** %56 to i8**
%58 = load i8*, i8** %57, align 8
%59 = call noalias nonnull dereferenceable(40) dereferenceable_or_null(40) {} addrspace(10)* @julia.gc_alloc_obj({}** %55, i64 40, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139845959120208 to {}*) to {} addrspace(10)*)), !enzyme_fromstack !410
call void @zeroType.37({} addrspace(10)* %59, i8 0, i64 40), !enzyme_zerostack !58
%60 = bitcast {} addrspace(10)* %59 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%61 = call {}*** @julia.get_pgcstack() #55
%ptls_field205 = getelementptr inbounds {}**, {}*** %61, i64 2
%62 = bitcast {}*** %ptls_field205 to i64***
%ptls_load206207 = load i64**, i64*** %62, align 8, !tbaa !59
%63 = getelementptr inbounds i64*, i64** %ptls_load206207, i64 2
%safepoint = load i64*, i64** %63, align 8, !tbaa !63, !invariant.load !58
fence syncscope("singlethread") seq_cst
call void @julia.safepoint(i64* %safepoint) #55, !dbg !7797
fence syncscope("singlethread") seq_cst
%64 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, !dbg !7798
%.not = icmp eq [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }] addrspace(11)* %64, null
br i1 %.not, label %guard_exit194, label %guard_pass193
L9.L44_crit_edge: ; preds = %L583
store i64 %arraysize, i64* %138, align 8, !dbg !7800, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %arraysize10, i64* %139, align 8, !dbg !7800, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %69, i64* %newstruct48.sroa.0.0..sroa_idx, align 8, !dbg !7805, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %value_phi47, i64* %newstruct48.sroa.3.0..sroa_idx303, align 8, !dbg !7805, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %113, i64* %newstruct.sroa.0.0..sroa_idx, align 8, !dbg !7808, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %value_phi4, i64* %newstruct.sroa.3.0..sroa_idx305, align 8, !dbg !7808, !tbaa !74, !alias.scope !76, !noalias !7802
br label %L44, !dbg !7810
L44: ; preds = %guard_exit194, %L9.L44_crit_edge
%65 = addrspacecast [1 x [2 x i64]]* %newstruct5 to [1 x [2 x i64]] addrspace(11)*, !dbg !7810
call fastcc void @julia_throw_boundserror_12561({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %1, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %65) #56, !dbg !7810
unreachable, !dbg !7810
L47: ; preds = %L47.lr.ph, %L583
%iv = phi i64 [ 0, %L47.lr.ph ], [ %iv.next, %L583 ]
%value_phi4360 = phi i64 [ %arraylen330, %L47.lr.ph ], [ %value_phi4, %L583 ]
%66 = phi i64 [ 1, %L47.lr.ph ], [ %113, %L583 ]
%67 = phi i64 [ 0, %L47.lr.ph ], [ %119, %L583 ]
%68 = phi i64 [ %arraylen330, %L47.lr.ph ], [ %118, %L583 ]
%69 = phi i64 [ %137, %L47.lr.ph ], [ %117, %L583 ]
%70 = phi {} addrspace(10)* [ %131, %L47.lr.ph ], [ %115, %L583 ]
%value_phi334 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %guard_res196, %L47.lr.ph ], [ %value_phi77, %L583 ]
%71 = add i64 %iv, 2, !dbg !7800
%iv.next = add nuw nsw i64 %iv, 1, !dbg !7800
%72 = addrspacecast {} addrspace(10)* %70 to {} addrspace(10)* addrspace(11)*, !dbg !7800
%arraysize_ptr = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %72, i64 3, !dbg !7800
%73 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr to i64 addrspace(11)*, !dbg !7800
%arraysize = load i64, i64 addrspace(11)* %73, align 8, !dbg !7800, !tbaa !63, !range !96, !invariant.load !58, !alias.scope !97, !noalias !98
%arraysize_ptr9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %72, i64 4, !dbg !7800
%74 = bitcast {} addrspace(10)* addrspace(11)* %arraysize_ptr9 to i64 addrspace(11)*, !dbg !7800
%arraysize10 = load i64, i64 addrspace(11)* %74, align 8, !dbg !7800, !tbaa !63, !range !96, !invariant.load !58, !alias.scope !97, !noalias !98
%75 = add nsw i64 %value_phi4360, 1, !dbg !7811
%76 = sub i64 %75, %66, !dbg !7820
%77 = call i64 @llvm.smax.i64(i64 %76, i64 noundef 0) #55, !dbg !7821
%78 = mul i64 %arraysize10, %arraysize, !dbg !7826
%.not213 = icmp eq i64 %78, %77, !dbg !7829
br i1 %.not213, label %L150, label %L64, !dbg !7828
L64: ; preds = %L47
store i64 %arraysize, i64* %138, align 8, !dbg !7800, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %arraysize10, i64* %139, align 8, !dbg !7800, !tbaa !74, !alias.scope !76, !noalias !7802
%79 = addrspacecast [2 x i64]* %newstruct11 to [2 x i64] addrspace(11)*, !dbg !7828
call fastcc void @julia__throw_dmrs_12678(i64 signext %77, [2 x i64] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %79) #56, !dbg !7828
unreachable, !dbg !7828
L150: ; preds = %L47
store {} addrspace(10)* %1, {} addrspace(10)* addrspace(10)* %.repack.repack, align 8, !dbg !7830, !noalias !7834
call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %36, {} addrspace(10)* %1), !dbg !7830
store i64 %66, i64 addrspace(10)* %.repack227, align 8, !dbg !7830, !noalias !7834
store i64 %value_phi4360, i64 addrspace(10)* %.repack228, align 8, !dbg !7830, !noalias !7834
store i64 %67, i64 addrspace(10)* %.repack.repack223, align 8, !dbg !7830, !noalias !7834
store i64 1, i64 addrspace(10)* %.repack.repack225, align 8, !dbg !7830, !noalias !7834
store i64 %arraysize, i64 addrspace(10)* %.repack219.repack, align 8, !dbg !7830, !noalias !7834
store i64 %arraysize10, i64 addrspace(10)* %.repack219.repack230, align 8, !dbg !7830, !noalias !7834
call fastcc void @julia_copyto__12690({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %70, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(56) %140) #55, !dbg !7830
%arraylen51.pre = load i64, i64 addrspace(11)* %arraylen_ptr6, align 8, !dbg !7835, !tbaa !158, !range !96, !alias.scope !161, !noalias !162
%80 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %value_phi334, 3, !dbg !7841
%81 = addrspacecast {} addrspace(10)* %80 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !7843
%arraylen_ptr45 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %81, i64 0, i32 1, !dbg !7843
%arraylen46 = load i64, i64 addrspace(11)* %arraylen_ptr45, align 8, !dbg !7843, !tbaa !158, !range !96, !alias.scope !161, !noalias !162
%82 = add i64 %arraylen46, %68, !dbg !7844
%.not232 = icmp sgt i64 %69, %82, !dbg !7845
%value_phi47 = select i1 %.not232, i64 %68, i64 %82, !dbg !7847
%83 = icmp slt i64 %value_phi47, %69, !dbg !7850
%84 = icmp ult i64 %68, %arraylen51.pre, !dbg !7854
%85 = add i64 %value_phi47, -1, !dbg !7856
%86 = icmp ult i64 %85, %arraylen51.pre, !dbg !7854
%87 = and i1 %84, %86, !dbg !7857
%88 = or i1 %83, %87, !dbg !7858
br i1 %88, label %L414, label %L411, !dbg !7840
L411: ; preds = %L150
store i64 %69, i64* %newstruct48.sroa.0.0..sroa_idx, align 8, !dbg !7805, !tbaa !74, !alias.scope !76, !noalias !7802
store i64 %value_phi47, i64* %newstruct48.sroa.3.0..sroa_idx303, align 8, !dbg !7805, !tbaa !74, !alias.scope !76, !noalias !7802
%89 = addrspacecast [1 x [2 x i64]]* %newstruct49 to [1 x [2 x i64]] addrspace(11)*, !dbg !7840
call fastcc void @julia_throw_boundserror_12561({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %1, [1 x [2 x i64]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %89) #56, !dbg !7840
unreachable, !dbg !7840
L414: ; preds = %L150
%90 = sub i64 %value_phi47, %69, !dbg !7859
%91 = add i64 %90, 1, !dbg !7868
%92 = call i64 @llvm.smax.i64(i64 %91, i64 noundef 0) #55, !dbg !7869
%93 = icmp eq i64 %arraylen46, %92, !dbg !7874
%94 = icmp eq i64 %92, 1, !dbg !7876
%value_phi63.in = or i1 %93, %94, !dbg !7876
br i1 %value_phi63.in, label %L453, label %L435, !dbg !7877
L435: ; preds = %L414
%95 = call fastcc [1 x {} addrspace(10)*] @julia_DimensionMismatch_12563() #55, !dbg !7877
%current_task105271 = getelementptr inbounds {}**, {}*** %61, i64 -14, !dbg !7877
%current_task105 = bitcast {}*** %current_task105271 to {}**, !dbg !7877
%box = call noalias nonnull dereferenceable(8) "enzyme_inactive" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task105, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 139848568239456 to {}*) to {} addrspace(10)*)) #57, !dbg !7877
%96 = bitcast {} addrspace(10)* %box to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !7877
%97 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %96, i64 0, i64 0, !dbg !7877
store {} addrspace(10)* addrspacecast ({}* inttoptr (i64 139848689378496 to {}*) to {} addrspace(10)*), {} addrspace(10)* addrspace(10)* %97, align 8, !dbg !7877, !tbaa !220, !alias.scope !224, !noalias !7878
%98 = addrspacecast {} addrspace(10)* %box to {} addrspace(12)*, !dbg !7877
call void @ijl_throw({} addrspace(12)* %98) #56, !dbg !7877
unreachable, !dbg !7877
L453: ; preds = %L414
br i1 %93, label %L468, label %L479, !dbg !7879
L468: ; preds = %L453
%99 = icmp ult i64 %90, 9223372036854775807, !dbg !7881
br i1 %99, label %L475, label %L569, !dbg !7883
L475: ; preds = %L468
store {} addrspace(10)* %1, {} addrspace(10)* addrspace(10)* %.repack, align 8, !dbg !7885, !noalias !7834
call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %29, {} addrspace(10)* %1), !dbg !7885
store i64 %69, i64 addrspace(10)* %.repack253, align 8, !dbg !7885, !noalias !7834
store i64 %value_phi47, i64 addrspace(10)* %.repack254, align 8, !dbg !7885, !noalias !7834
store i64 %68, i64 addrspace(10)* %.repack249, align 8, !dbg !7885, !noalias !7834
store i64 1, i64 addrspace(10)* %.repack251, align 8, !dbg !7885, !noalias !7834
%100 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !7885
%101 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %22 to [1 x {} addrspace(10)*]*, !dbg !7885
call fastcc void @julia_unalias_12576({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %100, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %101, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %80, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(40) %145) #55, !dbg !7885
call fastcc void @julia_copyto_unaliased__12571({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %80, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(40) %146) #55, !dbg !7886
br label %L569, !dbg !7886
L479: ; preds = %L453
store {} addrspace(10)* %1, {} addrspace(10)* addrspace(10)* %.repack256, align 8, !dbg !7887, !noalias !7834
call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %59, {} addrspace(10)* %1), !dbg !7887
store i64 %69, i64 addrspace(10)* %.repack263, align 8, !dbg !7887, !noalias !7834
store i64 %value_phi47, i64 addrspace(10)* %.repack264, align 8, !dbg !7887, !noalias !7834
store i64 %68, i64 addrspace(10)* %.repack259, align 8, !dbg !7887, !noalias !7834
store i64 1, i64 addrspace(10)* %.repack261, align 8, !dbg !7887, !noalias !7834
%102 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %44 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !7887
%103 = addrspacecast [1 x {} addrspace(10)*] addrspace(10)* %52 to [1 x {} addrspace(10)*]*, !dbg !7887
call fastcc void @julia_unalias_12576({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* noalias nocapture nofree noundef nonnull writeonly sret({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }) align 8 dereferenceable(40) %102, [1 x {} addrspace(10)*]* noalias nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) "enzymejl_returnRoots" %103, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %80, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(40) %141) #55, !dbg !7887
%unbox80 = load i64, i64 addrspace(10)* %143, align 8, !dbg !7892, !tbaa !74, !alias.scope !76, !noalias !253
%unbox81 = load i64, i64 addrspace(10)* %142, align 8, !dbg !7892, !tbaa !74, !alias.scope !76, !noalias !253
%104 = add i64 %unbox80, 1, !dbg !7892
%105 = sub i64 %104, %unbox81, !dbg !7899
%106 = call i64 @llvm.smax.i64(i64 %105, i64 noundef 0) #55, !dbg !7900
%.not266 = icmp eq i64 %106, 1, !dbg !7905
%.not267 = icmp eq i64 %arraylen46, 0, !dbg !7909
br i1 %.not267, label %L569, label %L501.lr.ph, !dbg !7910
L501.lr.ph: ; preds = %L479
%getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %getfield_addr unordered, align 8, !tbaa !74, !alias.scope !76, !noalias !253, !nonnull !58, !dereferenceable !272, !align !273
%unbox93 = load i64, i64 addrspace(10)* %144, align 8, !tbaa !74, !alias.scope !76, !noalias !253
%107 = addrspacecast {} addrspace(10)* %getfield to double addrspace(13)* addrspace(11)*
%arrayptr269 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %107, align 16, !tbaa !274, !alias.scope !7912, !noalias !162, !nonnull !58
%108 = addrspacecast {} addrspace(10)* %80 to double addrspace(13)* addrspace(11)*
%arrayptr95270 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %108, align 8, !tbaa !274, !alias.scope !7912, !noalias !162, !nonnull !58
br label %L501, !dbg !7913
L501: ; preds = %L501, %L501.lr.ph
%iv1 = phi i64 [ %iv.next2, %L501 ], [ 0, %L501.lr.ph ]
%iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !7914
%109 = select i1 %.not266, i64 0, i64 %iv1, !dbg !7917
%110 = add i64 %109, %unbox93, !dbg !7925
%111 = getelementptr inbounds double, double addrspace(13)* %arrayptr269, i64 %110, !dbg !7925
%arrayref = load double, double addrspace(13)* %111, align 8, !dbg !7925, !tbaa !297, !alias.scope !224, !noalias !299
%112 = getelementptr inbounds double, double addrspace(13)* %arrayptr95270, i64 %iv1, !dbg !7926
store double %arrayref, double addrspace(13)* %112, align 8, !dbg !7926, !tbaa !297, !alias.scope !224, !noalias !7878
%exitcond.not = icmp eq i64 %iv.next2, %arraylen46, !dbg !7927
br i1 %exitcond.not, label %L569.loopexit, label %L501, !dbg !7913, !llvm.loop !7928
L569.loopexit: ; preds = %L501
br label %L569, !dbg !7929
L569: ; preds = %L569.loopexit, %L479, %L475, %L468
%arraylen75 = load i64, i64 addrspace(11)* %arraylen_ptr45, align 8, !dbg !7929, !tbaa !158, !range !96, !alias.scope !161, !noalias !162
%113 = add i64 %arraylen75, %69, !dbg !7931
%114 = add nsw i64 %71, -1, !dbg !7932
%exitcond404.not = icmp eq i64 %71, 3, !dbg !7932
br i1 %exitcond404.not, label %L589, label %pass, !dbg !7932
L583: ; preds = %guard_pass200, %pass
%value_phi77 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %pass ], [ %unbox202246, %guard_pass200 ]
%115 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %value_phi77, 2, !dbg !7934
%116 = addrspacecast {} addrspace(10)* %115 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !7936
%arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %116, i64 0, i32 1, !dbg !7936
%arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !7936, !tbaa !63, !range !96, !invariant.load !58, !alias.scope !97, !noalias !98
%117 = add i64 %arraylen, %113, !dbg !7937
%118 = add i64 %117, -1, !dbg !7938
%.not208 = icmp sgt i64 %113, %118, !dbg !7939
%119 = add i64 %113, -1, !dbg !7941
%value_phi4 = select i1 %.not208, i64 %119, i64 %118, !dbg !7941
%arraylen7 = load i64, i64 addrspace(11)* %arraylen_ptr6, align 8, !dbg !7944, !tbaa !158, !range !96, !alias.scope !161, !noalias !162
%120 = icmp slt i64 %value_phi4, %113, !dbg !7949
%121 = icmp ult i64 %119, %arraylen7, !dbg !7953
%122 = add i64 %value_phi4, -1, !dbg !7955
%123 = icmp ult i64 %122, %arraylen7, !dbg !7953
%124 = and i1 %121, %123, !dbg !7956
%125 = or i1 %120, %124, !dbg !7957
br i1 %125, label %L47, label %L9.L44_crit_edge, !dbg !7810
L589: ; preds = %L569
ret void, !dbg !7958
pass: ; preds = %L569
%126 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %114, !dbg !7959
%127 = add nuw nsw i64 %71, 1, !dbg !7960
%.not239 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %126, null
br i1 %.not239, label %L583, label %guard_pass200
guard_pass193: ; preds = %top
%unbox195.elt = getelementptr inbounds [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }] addrspace(11)* %64, i64 0, i64 0, i32 0
%unbox195.unpack = load i64, i64 addrspace(11)* %unbox195.elt, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%128 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %unbox195.unpack, 0
%unbox195.elt295 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 0, i32 1
%unbox195.unpack296 = load i64, i64 addrspace(11)* %unbox195.elt295, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%129 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %128, i64 %unbox195.unpack296, 1
%unbox195.elt297 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 0, i32 2
%unbox195.unpack298 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %unbox195.elt297, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%130 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %129, {} addrspace(10)* %unbox195.unpack298, 2
%unbox195.elt299 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 0, i32 3
%unbox195.unpack300 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %unbox195.elt299, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%unbox195301 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %130, {} addrspace(10)* %unbox195.unpack300, 3
br label %guard_exit194
guard_exit194: ; preds = %guard_pass193, %top
%guard_res196 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %top ], [ %unbox195301, %guard_pass193 ]
%131 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %guard_res196, 2, !dbg !7934
%132 = addrspacecast {} addrspace(10)* %131 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !7936
%arraylen_ptr329 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %132, i64 0, i32 1, !dbg !7936
%arraylen330 = load i64, i64 addrspace(11)* %arraylen_ptr329, align 8, !dbg !7936, !tbaa !63, !range !96, !invariant.load !58, !alias.scope !97, !noalias !98
%.not208331 = icmp eq i64 %arraylen330, 0, !dbg !7939
%newstruct.sroa.0.0..sroa_idx = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct5, i64 0, i64 0, i64 0, !dbg !7808
store i64 1, i64* %newstruct.sroa.0.0..sroa_idx, align 8, !dbg !7808, !tbaa !74, !alias.scope !76, !noalias !7802
%newstruct.sroa.3.0..sroa_idx305 = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct5, i64 0, i64 0, i64 1, !dbg !7808
store i64 %arraylen330, i64* %newstruct.sroa.3.0..sroa_idx305, align 8, !dbg !7808, !tbaa !74, !alias.scope !76, !noalias !7802
%133 = addrspacecast {} addrspace(10)* %1 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !7944
%arraylen_ptr6 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %133, i64 0, i32 1, !dbg !7944
%arraylen7333 = load i64, i64 addrspace(11)* %arraylen_ptr6, align 8, !dbg !7944, !tbaa !158, !range !96, !alias.scope !161, !noalias !162
%134 = add nsw i64 %arraylen330, -1, !dbg !7955
%135 = icmp ult i64 %134, %arraylen7333, !dbg !7953
%136 = or i1 %.not208331, %135, !dbg !7957
br i1 %136, label %L47.lr.ph, label %L44, !dbg !7810
L47.lr.ph: ; preds = %guard_exit194
%137 = add nuw nsw i64 %arraylen330, 1, !dbg !7937
%138 = getelementptr inbounds [2 x i64], [2 x i64]* %newstruct11, i64 0, i64 0
%139 = getelementptr inbounds [2 x i64], [2 x i64]* %newstruct11, i64 0, i64 1
%.repack.repack = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 0, i32 0
%.repack227 = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 0, i32 1, i64 0, i64 0
%.repack228 = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 0, i32 1, i64 0, i64 1
%.repack.repack223 = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 0, i32 2
%.repack.repack225 = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 0, i32 3
%.repack219.repack = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 1, i64 0
%.repack219.repack230 = getelementptr { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] }, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37, i64 0, i32 1, i64 1
%140 = addrspacecast { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %37 to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)*
%newstruct48.sroa.0.0..sroa_idx = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct49, i64 0, i64 0, i64 0
%newstruct48.sroa.3.0..sroa_idx303 = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %newstruct49, i64 0, i64 0, i64 1
%.repack256 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60, i64 0, i32 0
%.repack263 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60, i64 0, i32 1, i64 0, i64 0
%.repack264 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60, i64 0, i32 1, i64 0, i64 1
%.repack259 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60, i64 0, i32 2
%.repack261 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60, i64 0, i32 3
%141 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %60 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%142 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %44, i64 0, i32 1, i64 0, i64 0
%143 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %44, i64 0, i32 1, i64 0, i64 1
%getfield_addr = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %44, i64 0, i32 0
%144 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %44, i64 0, i32 2
%.repack = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30, i64 0, i32 0
%.repack253 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30, i64 0, i32 1, i64 0, i64 0
%.repack254 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30, i64 0, i32 1, i64 0, i64 1
%.repack249 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30, i64 0, i32 2
%.repack251 = getelementptr { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30, i64 0, i32 3
%145 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %30 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%146 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %15 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
br label %L47, !dbg !7810
guard_pass200: ; preds = %pass
%unbox202.elt = getelementptr inbounds { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %126, i64 0, i32 0
%unbox202.unpack = load i64, i64 addrspace(11)* %unbox202.elt, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%147 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %unbox202.unpack, 0
%unbox202.elt240 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %114, i32 1
%unbox202.unpack241 = load i64, i64 addrspace(11)* %unbox202.elt240, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%148 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %147, i64 %unbox202.unpack241, 1
%unbox202.elt242 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %114, i32 2
%unbox202.unpack243 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %unbox202.elt242, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%149 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %148, {} addrspace(10)* %unbox202.unpack243, 2
%unbox202.elt244 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %114, i32 3
%unbox202.unpack245 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %unbox202.elt244, align 8, !tbaa !63, !alias.scope !97, !noalias !98
%unbox202246 = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %149, {} addrspace(10)* %unbox202.unpack245, 3
br label %L583
}
Illegal replace ficticious phi for: %unbox202.unpack_replacementA = phi i64 of %unbox202.unpack = load i64, i64 addrspace(11)* %unbox202.elt, align 8, !tbaa !64, !alias.scope !98, !noalias !99
; Function Attrs: mustprogress willreturn
define internal fastcc void @diffejulia_set_params_12661({ i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* nocapture readonly align 8 dereferenceable(152) %0, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* nocapture align 8 %"'", {} addrspace(10)* align 16 dereferenceable(40) %1, {} addrspace(10)* align 16 %"'1", { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg) unnamed_addr #46 !dbg !9022 {
top:
%2 = call {}*** @julia.get_pgcstack()
%3 = call {}*** @julia.get_pgcstack()
%4 = call {}*** @julia.get_pgcstack()
%5 = call {}*** @julia.get_pgcstack()
%6 = call {}*** @julia.get_pgcstack()
%7 = call {}*** @julia.get_pgcstack()
%8 = call {}*** @julia.get_pgcstack()
%9 = call {}*** @julia.get_pgcstack()
%10 = call {}*** @julia.get_pgcstack()
%11 = call {}*** @julia.get_pgcstack()
%12 = call {}*** @julia.get_pgcstack()
%13 = call {}*** @julia.get_pgcstack()
%14 = call {}*** @julia.get_pgcstack()
%15 = call {}*** @julia.get_pgcstack()
%16 = call {}*** @julia.get_pgcstack()
%17 = call {}*** @julia.get_pgcstack()
%18 = call {}*** @julia.get_pgcstack()
%19 = call {}*** @julia.get_pgcstack()
%20 = call {}*** @julia.get_pgcstack()
%21 = call {}*** @julia.get_pgcstack()
%22 = call {}*** @julia.get_pgcstack()
%23 = call {}*** @julia.get_pgcstack()
%24 = call {}*** @julia.get_pgcstack()
%25 = call {}*** @julia.get_pgcstack()
%26 = call {}*** @julia.get_pgcstack()
%27 = call {}*** @julia.get_pgcstack()
%28 = call {}*** @julia.get_pgcstack()
%29 = call {}*** @julia.get_pgcstack()
%30 = call {}*** @julia.get_pgcstack()
%31 = call {}*** @julia.get_pgcstack()
%32 = call {}*** @julia.get_pgcstack()
%33 = call {}*** @julia.get_pgcstack()
%34 = call {}*** @julia.get_pgcstack()
%35 = call {}*** @julia.get_pgcstack()
%36 = call {}*** @julia.get_pgcstack()
%37 = call {}*** @julia.get_pgcstack()
%38 = call {}*** @julia.get_pgcstack()
%39 = call {}*** @julia.get_pgcstack()
%40 = call {}*** @julia.get_pgcstack()
%41 = call {}*** @julia.get_pgcstack()
%42 = call {}*** @julia.get_pgcstack()
%43 = call {}*** @julia.get_pgcstack()
%44 = call {}*** @julia.get_pgcstack()
%45 = bitcast {}*** %43 to {}**
%46 = getelementptr inbounds {}*, {}** %45, i64 -14
%_replacementA48 = phi i8*
%"'mi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 7
%47 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 8
%"'ipc122" = bitcast {} addrspace(10)* %"'mi" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*
%48 = bitcast {} addrspace(10)* %47 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%_replacementA47 = phi {}**
%_replacementA45 = phi {}**
%_replacementA44 = phi i8**
%_replacementA42 = phi {} addrspace(10)*
%newstruct49_replacementA = phi [1 x [2 x i64]]*
%49 = bitcast {}*** %41 to {}**
%50 = getelementptr inbounds {}*, {}** %49, i64 -14
%_replacementA38 = phi i8**
%_replacementA37 = phi i8*
%"'mi36" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 5
%51 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 6
%"'ipc130" = bitcast {} addrspace(10)* %"'mi36" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*
%52 = bitcast {} addrspace(10)* %51 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%53 = bitcast {}*** %44 to {}**
%54 = getelementptr inbounds {}*, {}** %53, i64 -14
%_replacementA35 = phi {}**
%_replacementA34 = phi i8**
%_replacementA33 = phi i8*
%"'mi32" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 3
%55 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 4
%"'ipc" = bitcast {} addrspace(10)* %"'mi32" to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)*
%56 = bitcast {} addrspace(10)* %55 to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)*, !enzyme_caststack !58
%57 = bitcast {}*** %40 to {}**
%58 = getelementptr inbounds {}*, {}** %57, i64 -14
%_replacementA30 = phi i8**
%_replacementA29 = phi i8*
%"'mi27" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 2
%"'ipc142" = bitcast {} addrspace(10)* %"'mi27" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*
%_replacementA26 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*
%_replacementA25 = phi i8*
%_replacementA23 = phi {}**
%_replacementA22 = phi {}**
%_replacementA20 = phi i8*
%59 = bitcast {}*** %38 to {}**
%60 = getelementptr inbounds {}*, {}** %59, i64 -14
%_replacementA16 = phi {}**
%_replacementA15 = phi i8**
%"'mi13" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 0
%61 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 1
%"'ipc162" = bitcast {} addrspace(10)* %"'mi13" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*
%62 = bitcast {} addrspace(10)* %61 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)*, !enzyme_caststack !58
%63 = call {}*** @julia.get_pgcstack() #55
%ptls_field205_replacementA = phi {}***
%ptls_load206207_replacementA = phi i64**
%_replacementA = phi i64**
%64 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, !dbg !9023
%.not = icmp eq [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }] addrspace(11)* %64, null
br i1 %.not, label %guard_exit194, label %guard_pass193
L9.L44_crit_edge: ; preds = %L583
unreachable
L44: ; preds = %guard_exit194
unreachable
L47: ; preds = %L47.lr.ph, %L583
%iv = phi i64 [ 0, %L47.lr.ph ], [ %iv.next, %L583 ]
%value_phi4360_replacementA = phi i64
%_replacementA62 = phi i64
%_replacementA59 = phi i64
%65 = phi {} addrspace(10)* [ %"'ipev", %L47.lr.ph ], [ %"'ipev82", %L583 ]
%66 = phi {} addrspace(10)* [ %114, %L47.lr.ph ], [ %111, %L583 ]
%67 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %113, %L47.lr.ph ], [ %110, %L583 ]
%value_phi334 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %guard_res196, %L47.lr.ph ], [ %value_phi77, %L583 ]
%iv.next = add nuw nsw i64 %iv, 1, !dbg !9025
%68 = add i64 %iv, 2, !dbg !9025
%_replacementA58 = phi {} addrspace(10)* addrspace(11)* , !dbg !9025
%arraysize_ptr_replacementA = phi {} addrspace(10)* addrspace(11)* , !dbg !9025
%_replacementA57 = phi i64 addrspace(11)* , !dbg !9025
%_replacementA53 = phi i64 , !dbg !9027
%_replacementA52 = phi i64 , !dbg !9039
br i1 true, label %L150, label %L64, !dbg !9041
L64: ; preds = %L47
%_replacementA63 = phi [2 x i64] addrspace(11)* , !dbg !9041
unreachable
L150: ; preds = %L47
%69 = load { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache, align 8, !dbg !9042, !dereferenceable !410, !invariant.group !9046
%70 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 }, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)* %69, i64 %iv, !dbg !9042
%tapeArg94 = load { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 }, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)* %70, align 8, !dbg !9042, !invariant.group !9047
%arraylen51.pre_replacementA = phi i64 , !dbg !9048
%71 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %value_phi334, 3, !dbg !9056
%"'ipev111" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %67, 3, !dbg !9058
%arraylen_ptr45_replacementA = phi i64 addrspace(11)* , !dbg !9058
%72 = load i64*, i64** %mdyncache_fromtape_cache242, align 8, !dbg !9059, !dereferenceable !410, !invariant.group !9060
%73 = getelementptr inbounds i64, i64* %72, i64 %iv, !dbg !9059
%arraylen46 = load i64, i64* %73, align 8, !dbg !9059, !invariant.group !9061
%_replacementA70 = phi i64 , !dbg !9059
%_replacementA65 = phi i1 , !dbg !9062
br i1 true, label %L414, label %L411, !dbg !9053
L411: ; preds = %L150
unreachable
L414: ; preds = %L150
%74 = load i64*, i64** %mdyncache_fromtape_cache244, align 8, !dbg !9064, !dereferenceable !410, !invariant.group !9073
%75 = getelementptr inbounds i64, i64* %74, i64 %iv, !dbg !9064
%76 = load i64, i64* %75, align 8, !dbg !9064, !invariant.group !9074
%77 = add i64 %76, 1, !dbg !9064
%78 = call i64 @llvm.smax.i64(i64 %77, i64 noundef 0) #55, !dbg !9075
%79 = icmp eq i64 %arraylen46, %78, !dbg !9080
br i1 true, label %L453, label %L435, !dbg !9083
L435: ; preds = %L414
%_replacementA103 = phi [1 x {} addrspace(10)*] , !dbg !9083
%current_task105271_replacementA = phi {}*** , !dbg !9083
%current_task105_replacementA = phi {}** , !dbg !9083
%box_replacementA = phi {} addrspace(10)* , !dbg !9083
%_replacementA101 = phi {} addrspace(10)* addrspace(10)* , !dbg !9083
%_replacementA100 = phi {} addrspace(12)* , !dbg !9083
unreachable
L453: ; preds = %L414
br i1 %79, label %L468, label %L479, !dbg !9084
L468: ; preds = %L453
%80 = icmp ult i64 %76, 9223372036854775807, !dbg !9086
%81 = load i8*, i8** %_cache203, align 8, !dbg !9088, !dereferenceable !410, !invariant.group !9090
%82 = getelementptr inbounds i8, i8* %81, i64 %iv, !dbg !9088
store i8 0, i8* %82, align 1, !dbg !9088, !invariant.group !9091
br i1 %80, label %L475, label %L569, !dbg !9088
L475: ; preds = %L468
%"'ipc129" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc122" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !9092
%83 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache133, align 8, !dbg !9092, !dereferenceable !410, !invariant.group !9093
%84 = getelementptr inbounds { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %83, i64 %iv, !dbg !9092
%tapeArg132 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %84, align 8, !dbg !9092, !invariant.group !9094
%85 = load { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache125, align 8, !dbg !9095, !dereferenceable !410, !invariant.group !9096
%86 = getelementptr inbounds { {} addrspace(10)*, i64, i64 }, { {} addrspace(10)*, i64, i64 } addrspace(10)* %85, i64 %iv, !dbg !9095
%tapeArg124 = load { {} addrspace(10)*, i64, i64 }, { {} addrspace(10)*, i64, i64 } addrspace(10)* %86, align 8, !dbg !9095, !invariant.group !9097
%87 = load i8*, i8** %_cache203, align 8, !dbg !9095, !dereferenceable !410, !invariant.group !9090
%88 = getelementptr inbounds i8, i8* %87, i64 %iv, !dbg !9095
store i8 2, i8* %88, align 1, !dbg !9095, !invariant.group !9091
br label %L569, !dbg !9095
L479: ; preds = %L453
%"'ipc143" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc142" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !9098
%_replacementA170 = phi { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* , !dbg !9098
%_replacementA169 = phi [1 x {} addrspace(10)*]* , !dbg !9098
%89 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache165, align 8, !dbg !9098, !dereferenceable !410, !invariant.group !9103
%90 = getelementptr inbounds { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %89, i64 %iv, !dbg !9098
%tapeArg164 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %90, align 8, !dbg !9098, !invariant.group !9104
%_replacementA139 = phi i64 , !dbg !9105
%.not267 = icmp eq i64 %arraylen46, 0, !dbg !9115
%91 = load i8*, i8** %_cache203, align 8, !dbg !9116, !dereferenceable !410, !invariant.group !9090
%92 = getelementptr inbounds i8, i8* %91, i64 %iv, !dbg !9116
store i8 1, i8* %92, align 1, !dbg !9116, !invariant.group !9091
br i1 %.not267, label %L569, label %L501.lr.ph, !dbg !9116
L501.lr.ph: ; preds = %L479
%93 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache175, align 8, !dereferenceable !410, !invariant.group !9118
%94 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %93, i64 %iv
%"getfield'il_phi" = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %94, align 8, !invariant.group !9119
%getfield_replacementA = phi {} addrspace(10)*
%"'ipc173" = addrspacecast {} addrspace(10)* %"getfield'il_phi" to double addrspace(13)* addrspace(11)*
%_replacementA174 = phi double addrspace(13)* addrspace(11)*
%"arrayptr269'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc173", align 16, !tbaa !274, !alias.scope !9120, !noalias !9123, !nonnull !58, !invariant.group !9125
%"'ipc171" = addrspacecast {} addrspace(10)* %"'ipev111" to double addrspace(13)* addrspace(11)*
%_replacementA172 = phi double addrspace(13)* addrspace(11)*
%"arrayptr95270'ipl" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc171", align 8, !tbaa !274, !alias.scope !9126, !noalias !9129, !nonnull !58, !invariant.group !9131
%95 = add nsw i64 %arraylen46, -1, !dbg !9132
%96 = add nuw i64 %95, 1, !dbg !9132
%97 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 20, !dbg !9132
%98 = getelementptr inbounds i64*, i64** %97, i64 %iv, !dbg !9132
%99 = mul nuw i64 %96, 8, !dbg !9132
%100 = load i64**, i64*** %mdyncache_fromtape_cache248, align 8, !dbg !9132, !invariant.group !9133
%101 = getelementptr inbounds i64*, i64** %100, i64 %iv, !dbg !9132
br label %L501, !dbg !9132
L501: ; preds = %L501, %L501.lr.ph
%iv1 = phi i64 [ %iv.next2, %L501 ], [ 0, %L501.lr.ph ]
%iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !9134
%102 = load i64**, i64*** %mdyncache_fromtape_cache248, align 8, !dbg !9137, !dereferenceable !410, !invariant.group !9145
%103 = getelementptr inbounds i64*, i64** %102, i64 %iv, !dbg !9137
%104 = load i64*, i64** %103, align 8, !dbg !9137, !dereferenceable !410, !invariant.group !9146
%105 = getelementptr inbounds i64, i64* %104, i64 %iv1, !dbg !9137
%106 = load i64, i64* %105, align 8, !dbg !9137, !invariant.group !9147
%"'ipg189" = getelementptr inbounds double, double addrspace(13)* %"arrayptr269'ipl", i64 %106, !dbg !9137
%_replacementA198 = phi double addrspace(13)* , !dbg !9137
%"'ipg" = getelementptr inbounds double, double addrspace(13)* %"arrayptr95270'ipl", i64 %iv1, !dbg !9148
%exitcond.not = icmp eq i64 %iv.next2, %arraylen46, !dbg !9149
br i1 %exitcond.not, label %L569.loopexit, label %L501, !dbg !9132, !llvm.loop !9150
L569.loopexit: ; preds = %L501
%107 = load i8*, i8** %_cache203, align 8, !dbg !9151, !dereferenceable !410, !invariant.group !9090
%108 = getelementptr inbounds i8, i8* %107, i64 %iv, !dbg !9151
store i8 3, i8* %108, align 1, !dbg !9151, !invariant.group !9091
br label %L569, !dbg !9151
L569: ; preds = %L569.loopexit, %L479, %L475, %L468
%arraylen75_replacementA = phi i64 , !dbg !9151
%_replacementA202 = phi i64 , !dbg !9153
%109 = add nsw i64 %68, -1, !dbg !9154
%exitcond404.not = icmp eq i64 %68, 3, !dbg !9154
br i1 %exitcond404.not, label %L589, label %pass, !dbg !9154
L583: ; preds = %guard_pass200, %pass
%110 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %pass ], [ %"unbox202246'ipiv", %guard_pass200 ]
%value_phi77 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %pass ], [ %unbox202246, %guard_pass200 ]
%111 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %value_phi77, 2, !dbg !9156
%"'ipev82" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %110, 2, !dbg !9158
%arraylen_replacementA = phi i64 , !dbg !9158
%_replacementA213 = phi i64 , !dbg !9159
%.not208_replacementA = phi i1 , !dbg !9160
%_replacementA212 = phi i64 , !dbg !9162
%value_phi4_replacementA = phi i64 , !dbg !9162
%arraylen7_replacementA = phi i64 , !dbg !9165
%_replacementA207 = phi i1 , !dbg !9172
%_replacementA206 = phi i1 , !dbg !9174
br i1 true, label %L47, label %L9.L44_crit_edge, !dbg !9170
L589: ; preds = %L569
br label %invertL589, !dbg !9175
pass: ; preds = %L569
%112 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %109, !dbg !9176
%_replacementA220 = phi i64 , !dbg !9177
%.not239 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %112, null
br i1 %.not239, label %L583, label %guard_pass200
guard_pass193: ; preds = %top
%unbox195.unpack_replacementA = phi i64
%"'ipiv" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %unbox195.unpack_replacementA, 0
%_replacementA223 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* }
%unbox195.elt295_replacementA = phi i64 addrspace(11)*
%unbox195.unpack296_replacementA = phi i64
%"'ipiv77" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv", i64 %unbox195.unpack296_replacementA, 1
%_replacementA222 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* }
%"unbox195.unpack298'il_phi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 15
%unbox195.unpack298_replacementA = phi {} addrspace(10)*
%"'ipiv78" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv77", {} addrspace(10)* %"unbox195.unpack298'il_phi", 2
%"unbox195.unpack300'il_phi" = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 14
%unbox195.unpack300_replacementA = phi {} addrspace(10)*
%"unbox195301'ipiv" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv78", {} addrspace(10)* %"unbox195.unpack300'il_phi", 3
%unbox195301 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 21
br label %guard_exit194
guard_exit194: ; preds = %guard_pass193, %top
%113 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %top ], [ %"unbox195301'ipiv", %guard_pass193 ]
%guard_res196 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %top ], [ %unbox195301, %guard_pass193 ]
%114 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %guard_res196, 2, !dbg !9156
%"'ipev" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %113, 2, !dbg !9158
%arraylen330_replacementA = phi i64 , !dbg !9158
%newstruct.sroa.0.0..sroa_idx_replacementA = phi i64* , !dbg !9178
%newstruct.sroa.3.0..sroa_idx305_replacementA = phi i64* , !dbg !9178
%_replacementA226 = phi i64 , !dbg !9179
%_replacementA225 = phi i1 , !dbg !9181
%_replacementA224 = phi i1 , !dbg !9174
br i1 true, label %L47.lr.ph, label %L44, !dbg !9170
L47.lr.ph: ; preds = %guard_exit194
%_replacementA234 = phi i64 , !dbg !9182
%_replacementA232 = phi i64*
%.repack.repack_replacementA = phi {} addrspace(10)* addrspace(10)*
%.repack227_replacementA = phi i64 addrspace(10)*
%.repack228_replacementA = phi i64 addrspace(10)*
%.repack.repack223_replacementA = phi i64 addrspace(10)*
%.repack219.repack_replacementA = phi i64 addrspace(10)*
%.repack219.repack230_replacementA = phi i64 addrspace(10)*
%"'ipc93" = addrspacecast { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %"'ipc" to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)*
%115 = addrspacecast { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(10)* %56 to { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)*
%newstruct48.sroa.0.0..sroa_idx_replacementA = phi i64*
%.repack261_replacementA = phi i64 addrspace(10)*
%"'ipc163" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc162" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%116 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %62 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%_replacementA231 = phi i64 addrspace(10)*
%_replacementA229 = phi i64 addrspace(10)*
%.repack_replacementA = phi {} addrspace(10)* addrspace(10)*
%.repack253_replacementA = phi i64 addrspace(10)*
%.repack249_replacementA = phi i64 addrspace(10)*
%"'ipc131" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc130" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%117 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %52 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%"'ipc123" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc122" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%118 = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %48 to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)*
%119 = bitcast {}*** %36 to {}**, !dbg !9170
%120 = getelementptr inbounds {}*, {}** %119, i64 -14, !dbg !9170
%121 = getelementptr inbounds {}*, {}** %120, i64 16, !dbg !9170
%122 = bitcast {}** %121 to i8**, !dbg !9170
%123 = load i8*, i8** %122, align 8, !dbg !9170
%124 = bitcast {}*** %32 to {}**, !dbg !9170
%125 = getelementptr inbounds {}*, {}** %124, i64 -14, !dbg !9170
%126 = getelementptr inbounds {}*, {}** %125, i64 16, !dbg !9170
%127 = bitcast {}** %126 to i8**, !dbg !9170
%128 = load i8*, i8** %127, align 8, !dbg !9170
%129 = bitcast {}*** %28 to {}**, !dbg !9170
%130 = getelementptr inbounds {}*, {}** %129, i64 -14, !dbg !9170
%131 = getelementptr inbounds {}*, {}** %130, i64 16, !dbg !9170
%132 = bitcast {}** %131 to i8**, !dbg !9170
%133 = load i8*, i8** %132, align 8, !dbg !9170
%134 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !dbg !9170, !enzyme_cache_alloc !9183
%unbox202.unpack241_malloccache = bitcast i8* %134 to i64*, !dbg !9170
store i64* %unbox202.unpack241_malloccache, i64** %unbox202.unpack241_cache, align 8, !dbg !9170, !invariant.group !9185
%135 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !dbg !9170, !enzyme_cache_alloc !9186
%unbox202.unpack_malloccache = bitcast i8* %135 to i64*, !dbg !9170
store i64* %unbox202.unpack_malloccache, i64** %unbox202.unpack_cache, align 8, !dbg !9170, !invariant.group !9188
%_malloccache204 = call noalias nonnull dereferenceable(2) dereferenceable_or_null(2) i8* @malloc(i64 2), !dbg !9170, !enzyme_cache_alloc !9189
store i8* %_malloccache204, i8** %_cache203, align 1, !dbg !9170, !invariant.group !9090
br label %L47, !dbg !9170
guard_pass200: ; preds = %pass
%unbox202.elt_replacementA = phi i64 addrspace(11)*
%unbox202.unpack_replacementA = phi i64
%"'ipiv79" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %unbox202.unpack_replacementA, 0
%_replacementA241 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* }
%unbox202.unpack241_replacementA = phi i64
%"'ipiv80" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv79", i64 %unbox202.unpack241_replacementA, 1
%unbox202.elt242_replacementA = phi {} addrspace(10)* addrspace(11)*
%136 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache238, align 8, !dereferenceable !410, !invariant.group !9191
%137 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %136, i64 %iv
%"unbox202.unpack243'il_phi" = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %137, align 8, !invariant.group !9192
%"'ipiv81" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv80", {} addrspace(10)* %"unbox202.unpack243'il_phi", 2
%_replacementA237 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* }
%unbox202.elt244_replacementA = phi {} addrspace(10)* addrspace(11)*
%138 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache235, align 8, !dereferenceable !410, !invariant.group !9193
%139 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %138, i64 %iv
%"unbox202.unpack245'il_phi" = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %139, align 8, !invariant.group !9194
%"unbox202246'ipiv" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv81", {} addrspace(10)* %"unbox202.unpack245'il_phi", 3
%140 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)** %mdyncache_fromtape_cache246, align 8, !dereferenceable !410, !invariant.group !9195
%141 = getelementptr inbounds { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %140, i64 %iv
%unbox202246 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %141, align 8, !invariant.group !9196
%142 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%143 = getelementptr inbounds i64, i64* %142, i64 %iv
store i64 %unbox202.unpack_replacementA, i64* %143, align 8, !tbaa !63, !invariant.group !9197
%144 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%145 = getelementptr inbounds i64, i64* %144, i64 %iv
store i64 %unbox202.unpack241_replacementA, i64* %145, align 8, !tbaa !63, !invariant.group !9198
br label %L583
allocsForInversion: ; No predecessors!
%"iv'ac" = alloca i64, align 8
%"iv1'ac" = alloca i64, align 8
%unbox202246_cache = alloca { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, align 8
%unbox202.unpack241_cache = alloca i64*, align 8
%unbox202.unpack_cache = alloca i64*, align 8
%146 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 9
%mdyncache_fromtape_cache = alloca { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, align 8
store { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)* %146, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache, align 8
%147 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 10
%mdyncache_fromtape_cache125 = alloca { {} addrspace(10)*, i64, i64 } addrspace(10)*, align 8
store { {} addrspace(10)*, i64, i64 } addrspace(10)* %147, { {} addrspace(10)*, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache125, align 8
%148 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 11
%mdyncache_fromtape_cache133 = alloca { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, align 8
store { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %148, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache133, align 8
%149 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 12
%mdyncache_fromtape_cache165 = alloca { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, align 8
store { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %149, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache165, align 8
%150 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 13
%mdyncache_fromtape_cache175 = alloca {} addrspace(10)* addrspace(10)*, align 8
store {} addrspace(10)* addrspace(10)* %150, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache175, align 8
%"arrayref'de" = alloca double, align 8
%151 = getelementptr double, double* %"arrayref'de", i64 0
store double 0.000000e+00, double* %151, align 8
%_cache = alloca i64**, align 8
%arraylen46_cache = alloca i64*, align 8
%_cache203 = alloca i8*, align 8
%152 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%mdyncache_fromtape_cache235 = alloca {} addrspace(10)* addrspace(10)*, align 8
store {} addrspace(10)* addrspace(10)* %152, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache235, align 8
%153 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%mdyncache_fromtape_cache238 = alloca {} addrspace(10)* addrspace(10)*, align 8
store {} addrspace(10)* addrspace(10)* %153, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache238, align 8
%154 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 18
%mdyncache_fromtape_cache242 = alloca i64*, align 8
store i64* %154, i64** %mdyncache_fromtape_cache242, align 8
%155 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 19
%mdyncache_fromtape_cache244 = alloca i64*, align 8
store i64* %155, i64** %mdyncache_fromtape_cache244, align 8
%156 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 22
%mdyncache_fromtape_cache246 = alloca { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, align 8
store { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %156, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)** %mdyncache_fromtape_cache246, align 8
%157 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 20
%mdyncache_fromtape_cache248 = alloca i64**, align 8
store i64** %157, i64*** %mdyncache_fromtape_cache248, align 8
inverttop: ; preds = %invertguard_exit194, %invertguard_pass193
fence syncscope("singlethread") seq_cst
fence syncscope("singlethread") seq_cst
ret void
invertL9.L44_crit_edge: ; No predecessors!
invertL44: ; No predecessors!
invertL47: ; preds = %invertL150_phimerge_phimerge
%158 = load i64, i64* %"iv'ac", align 8
%159 = icmp eq i64 %158, 0
%160 = xor i1 %159, true
br i1 %159, label %invertL47.lr.ph, label %incinvertL47
incinvertL47: ; preds = %invertL47
%161 = load i64, i64* %"iv'ac", align 8
%162 = add nsw i64 %161, -1
store i64 %162, i64* %"iv'ac", align 8
br label %invertL583
invertL64: ; No predecessors!
invertL150: ; preds = %invertL414
%163 = load i64, i64* %"iv'ac", align 8, !dbg !9042
%164 = icmp eq i64 %163, 0, !dbg !9042
br i1 %164, label %invertL150_phirc, label %invertL150_phirc72, !dbg !9042
invertL150_phirc: ; preds = %invertL150
br label %invertL150_phimerge
invertL150_phirc72: ; preds = %invertL150
%165 = sub nuw i64 %163, 1
%_unwrap = add i64 %165, 2
%_unwrap73 = add nsw i64 %_unwrap, -1
%_unwrap74 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap73
%.not239_unwrap = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap74, null
br i1 %.not239_unwrap, label %invertL150_phirc72_phirc, label %invertL150_phirc72_phirc75
invertL150_phimerge: ; preds = %invertL150_phirc72_phimerge, %invertL150_phirc
%166 = phi {} addrspace(10)* [ %114, %invertL150_phirc ], [ %_unwrap76, %invertL150_phirc72_phimerge ], !dbg !9042
%167 = load i64, i64* %"iv'ac", align 8, !dbg !9042
%168 = icmp eq i64 %167, 0, !dbg !9042
br i1 %168, label %invertL150_phimerge_phirc, label %invertL150_phimerge_phirc83, !dbg !9042
invertL150_phimerge_phirc: ; preds = %invertL150_phimerge
br label %invertL150_phimerge_phimerge
invertL150_phimerge_phirc83: ; preds = %invertL150_phimerge
%169 = sub nuw i64 %167, 1
%_unwrap84 = add i64 %169, 2
%_unwrap85 = add nsw i64 %_unwrap84, -1
%_unwrap86 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap85
%.not239_unwrap87 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap86, null
br i1 %.not239_unwrap87, label %invertL150_phimerge_phirc83_phirc, label %invertL150_phimerge_phirc83_phirc88
invertL150_phimerge_phimerge: ; preds = %invertL150_phimerge_phirc83_phimerge, %invertL150_phimerge_phirc
%170 = phi {} addrspace(10)* [ %"'ipev", %invertL150_phimerge_phirc ], [ %"'ipev82_unwrap", %invertL150_phimerge_phirc83_phimerge ], !dbg !9042
%171 = load i64, i64* %"iv'ac", align 8, !dbg !9042
%_unwrap96 = load { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache, align 8, !dbg !9042, !dereferenceable !410, !invariant.group !9046
%_unwrap97 = getelementptr inbounds { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 }, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)* %_unwrap96, i64 %171, !dbg !9042
%tapeArg94_unwrap = load { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 }, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)* %_unwrap97, align 8, !dbg !9042, !invariant.group !9047
call fastcc void @diffejulia_copyto__12690({} addrspace(10)* align 16 %166, {} addrspace(10)* align 16 %170, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)* nocapture readonly align 8 %115, { { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }, [2 x i64] } addrspace(11)* nocapture align 8 %"'ipc93", { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } %tapeArg94_unwrap), !dbg !9042
br label %invertL47
invertL150_phimerge_phirc83_phirc: ; preds = %invertL150_phimerge_phirc83
br label %invertL150_phimerge_phirc83_phimerge
invertL150_phimerge_phirc83_phirc88: ; preds = %invertL150_phimerge_phirc83
%172 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%173 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %172, i64 %169
%174 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %173, align 8, !invariant.group !9199
%175 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%176 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %175, i64 %169
%177 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %176, align 8, !invariant.group !9200
%178 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%179 = getelementptr inbounds i64, i64* %178, i64 %169
%180 = load i64, i64* %179, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9198
%181 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%182 = getelementptr inbounds i64, i64* %181, i64 %169
%183 = load i64, i64* %182, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9197
%"'ipiv79_unwrap" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %183, 0
%"'ipiv80_unwrap" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv79_unwrap", i64 %180, 1
%"'ipiv81_unwrap" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv80_unwrap", {} addrspace(10)* %177, 2
%"unbox202246'ipiv_unwrap" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv81_unwrap", {} addrspace(10)* %174, 3
br label %invertL150_phimerge_phirc83_phimerge
invertL150_phimerge_phirc83_phimerge: ; preds = %invertL150_phimerge_phirc83_phirc88, %invertL150_phimerge_phirc83_phirc
%184 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL150_phimerge_phirc83_phirc ], [ %"unbox202246'ipiv_unwrap", %invertL150_phimerge_phirc83_phirc88 ]
%"'ipev82_unwrap" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %184, 2
br label %invertL150_phimerge_phimerge
invertL150_phirc72_phirc: ; preds = %invertL150_phirc72
br label %invertL150_phirc72_phimerge
invertL150_phirc72_phirc75: ; preds = %invertL150_phirc72
%185 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 22
%186 = getelementptr inbounds { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %185, i64 %165
%187 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %186, align 8, !invariant.group !9201
br label %invertL150_phirc72_phimerge
invertL150_phirc72_phimerge: ; preds = %invertL150_phirc72_phirc75, %invertL150_phirc72_phirc
%188 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL150_phirc72_phirc ], [ %187, %invertL150_phirc72_phirc75 ]
%_unwrap76 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %188, 2
br label %invertL150_phimerge
invertL411: ; No predecessors!
invertL414: ; preds = %invertL453
br label %invertL150
invertL435: ; No predecessors!
invertL453: ; preds = %invertL479_phimerge_phimerge, %invertL468
br label %invertL414
invertL468: ; preds = %invertL569, %invertL475_phimerge_phimerge
br label %invertL453
invertL475: ; preds = %invertL569
%189 = load i64, i64* %"iv'ac", align 8, !dbg !9095
%190 = icmp eq i64 %189, 0, !dbg !9095
br i1 %190, label %invertL475_phirc, label %invertL475_phirc104, !dbg !9095
invertL475_phirc: ; preds = %invertL475
br label %invertL475_phimerge
invertL475_phirc104: ; preds = %invertL475
%191 = sub nuw i64 %189, 1
%_unwrap105 = add i64 %191, 2
%_unwrap106 = add nsw i64 %_unwrap105, -1
%_unwrap107 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap106
%.not239_unwrap108 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap107, null
br i1 %.not239_unwrap108, label %invertL475_phirc104_phirc, label %invertL475_phirc104_phirc109
invertL475_phimerge: ; preds = %invertL475_phirc104_phimerge, %invertL475_phirc
%192 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %guard_res196, %invertL475_phirc ], [ %216, %invertL475_phirc104_phimerge ], !dbg !9095
%_unwrap110 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %192, 3, !dbg !9095
%193 = load i64, i64* %"iv'ac", align 8, !dbg !9095
%194 = icmp eq i64 %193, 0, !dbg !9095
br i1 %194, label %invertL475_phimerge_phirc, label %invertL475_phimerge_phirc112, !dbg !9095
invertL475_phimerge_phirc: ; preds = %invertL475_phimerge
br label %invertL475_phimerge_phimerge
invertL475_phimerge_phirc112: ; preds = %invertL475_phimerge
%195 = sub nuw i64 %193, 1
%_unwrap113 = add i64 %195, 2
%_unwrap114 = add nsw i64 %_unwrap113, -1
%_unwrap115 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap114
%.not239_unwrap116 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap115, null
br i1 %.not239_unwrap116, label %invertL475_phimerge_phirc112_phirc, label %invertL475_phimerge_phirc112_phirc117
invertL475_phimerge_phimerge: ; preds = %invertL475_phimerge_phirc112_phimerge, %invertL475_phimerge_phirc
%196 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %113, %invertL475_phimerge_phirc ], [ %212, %invertL475_phimerge_phirc112_phimerge ], !dbg !9095
%"'ipev111_unwrap" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %196, 3, !dbg !9095
%197 = load i64, i64* %"iv'ac", align 8, !dbg !9095
%_unwrap127 = load { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache125, align 8, !dbg !9095, !dereferenceable !410, !invariant.group !9096
%_unwrap128 = getelementptr inbounds { {} addrspace(10)*, i64, i64 }, { {} addrspace(10)*, i64, i64 } addrspace(10)* %_unwrap127, i64 %197, !dbg !9095
%tapeArg124_unwrap = load { {} addrspace(10)*, i64, i64 }, { {} addrspace(10)*, i64, i64 } addrspace(10)* %_unwrap128, align 8, !dbg !9095, !invariant.group !9097
call fastcc void @diffejulia_copyto_unaliased__12571.89({} addrspace(10)* align 16 %_unwrap110, {} addrspace(10)* align 16 %"'ipev111_unwrap", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture readonly align 8 %118, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture align 8 %"'ipc123", { {} addrspace(10)*, i64, i64 } %tapeArg124_unwrap), !dbg !9095
%198 = load i64, i64* %"iv'ac", align 8, !dbg !9092
%"'ipc129_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc122" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !9092
%199 = load i64, i64* %"iv'ac", align 8, !dbg !9092
%_unwrap135 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache133, align 8, !dbg !9092, !dereferenceable !410, !invariant.group !9093
%_unwrap136 = getelementptr inbounds { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %_unwrap135, i64 %199, !dbg !9092
%tapeArg132_unwrap = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %_unwrap136, align 8, !dbg !9092, !invariant.group !9094
call fastcc void @diffejulia_unalias_12576.92({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc129_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %_unwrap110, {} addrspace(10)* align 16 %"'ipev111_unwrap", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture readonly align 8 %117, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture align 8 %"'ipc131", { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg132_unwrap), !dbg !9092
br label %invertL468
invertL475_phimerge_phirc112_phirc: ; preds = %invertL475_phimerge_phirc112
br label %invertL475_phimerge_phirc112_phimerge
invertL475_phimerge_phirc112_phirc117: ; preds = %invertL475_phimerge_phirc112
%200 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%201 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %200, i64 %195
%202 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %201, align 8, !invariant.group !9199
%203 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%204 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %203, i64 %195
%205 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %204, align 8, !invariant.group !9200
%206 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%207 = getelementptr inbounds i64, i64* %206, i64 %195
%208 = load i64, i64* %207, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9198
%209 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%210 = getelementptr inbounds i64, i64* %209, i64 %195
%211 = load i64, i64* %210, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9197
%"'ipiv79_unwrap118" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %211, 0
%"'ipiv80_unwrap119" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv79_unwrap118", i64 %208, 1
%"'ipiv81_unwrap120" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv80_unwrap119", {} addrspace(10)* %205, 2
%"unbox202246'ipiv_unwrap121" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv81_unwrap120", {} addrspace(10)* %202, 3
br label %invertL475_phimerge_phirc112_phimerge
invertL475_phimerge_phirc112_phimerge: ; preds = %invertL475_phimerge_phirc112_phirc117, %invertL475_phimerge_phirc112_phirc
%212 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL475_phimerge_phirc112_phirc ], [ %"unbox202246'ipiv_unwrap121", %invertL475_phimerge_phirc112_phirc117 ]
br label %invertL475_phimerge_phimerge
invertL475_phirc104_phirc: ; preds = %invertL475_phirc104
br label %invertL475_phirc104_phimerge
invertL475_phirc104_phirc109: ; preds = %invertL475_phirc104
%213 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 22
%214 = getelementptr inbounds { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %213, i64 %191
%215 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %214, align 8, !invariant.group !9201
br label %invertL475_phirc104_phimerge
invertL475_phirc104_phimerge: ; preds = %invertL475_phirc104_phirc109, %invertL475_phirc104_phirc
%216 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL475_phirc104_phirc ], [ %215, %invertL475_phirc104_phirc109 ]
br label %invertL475_phimerge
invertL479: ; preds = %invertL569, %invertL501.lr.ph
%217 = load i64, i64* %"iv'ac", align 8, !dbg !9098
%"'ipc143_unwrap" = addrspacecast { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(10)* %"'ipc142" to { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }*, !dbg !9098
%218 = load i64, i64* %"iv'ac", align 8, !dbg !9098
%219 = icmp eq i64 %218, 0, !dbg !9098
br i1 %219, label %invertL479_phirc, label %invertL479_phirc144, !dbg !9098
invertL479_phirc: ; preds = %invertL479
br label %invertL479_phimerge
invertL479_phirc144: ; preds = %invertL479
%220 = sub nuw i64 %218, 1
%_unwrap145 = add i64 %220, 2
%_unwrap146 = add nsw i64 %_unwrap145, -1
%_unwrap147 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap146
%.not239_unwrap148 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap147, null
br i1 %.not239_unwrap148, label %invertL479_phirc144_phirc, label %invertL479_phirc144_phirc149
invertL479_phimerge: ; preds = %invertL479_phirc144_phimerge, %invertL479_phirc
%221 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %guard_res196, %invertL479_phirc ], [ %243, %invertL479_phirc144_phimerge ], !dbg !9098
%_unwrap150 = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %221, 3, !dbg !9098
%222 = load i64, i64* %"iv'ac", align 8, !dbg !9098
%223 = icmp eq i64 %222, 0, !dbg !9098
br i1 %223, label %invertL479_phimerge_phirc, label %invertL479_phimerge_phirc151, !dbg !9098
invertL479_phimerge_phirc: ; preds = %invertL479_phimerge
br label %invertL479_phimerge_phimerge
invertL479_phimerge_phirc151: ; preds = %invertL479_phimerge
%224 = sub nuw i64 %222, 1
%_unwrap152 = add i64 %224, 2
%_unwrap153 = add nsw i64 %_unwrap152, -1
%_unwrap154 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap153
%.not239_unwrap155 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap154, null
br i1 %.not239_unwrap155, label %invertL479_phimerge_phirc151_phirc, label %invertL479_phimerge_phirc151_phirc156
invertL479_phimerge_phimerge: ; preds = %invertL479_phimerge_phirc151_phimerge, %invertL479_phimerge_phirc
%225 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %113, %invertL479_phimerge_phirc ], [ %239, %invertL479_phimerge_phirc151_phimerge ], !dbg !9098
%"'ipev111_unwrap161" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %225, 3, !dbg !9098
%226 = load i64, i64* %"iv'ac", align 8, !dbg !9098
%_unwrap167 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache165, align 8, !dbg !9098, !dereferenceable !410, !invariant.group !9103
%_unwrap168 = getelementptr inbounds { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %_unwrap167, i64 %226, !dbg !9098
%tapeArg164_unwrap = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 }, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)* %_unwrap168, align 8, !dbg !9098, !invariant.group !9104
call fastcc void @diffejulia_unalias_12576.92({ {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree writeonly align 8 "enzyme_sret" undef, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 }* nocapture nofree align 8 "enzyme_sret" %"'ipc143_unwrap", [1 x {} addrspace(10)*]* nocapture nofree writeonly align 8 "enzymejl_returnRoots" undef, {} addrspace(10)* align 16 %_unwrap150, {} addrspace(10)* align 16 %"'ipev111_unwrap161", { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture readonly align 8 %116, { {} addrspace(10)*, [1 x [2 x i64]], i64, i64 } addrspace(11)* nocapture align 8 %"'ipc163", { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } %tapeArg164_unwrap), !dbg !9098
br label %invertL453
invertL479_phimerge_phirc151_phirc: ; preds = %invertL479_phimerge_phirc151
br label %invertL479_phimerge_phirc151_phimerge
invertL479_phimerge_phirc151_phirc156: ; preds = %invertL479_phimerge_phirc151
%227 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%228 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %227, i64 %224
%229 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %228, align 8, !invariant.group !9199
%230 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%231 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %230, i64 %224
%232 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %231, align 8, !invariant.group !9200
%233 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%234 = getelementptr inbounds i64, i64* %233, i64 %224
%235 = load i64, i64* %234, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9198
%236 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%237 = getelementptr inbounds i64, i64* %236, i64 %224
%238 = load i64, i64* %237, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9197
%"'ipiv79_unwrap157" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %238, 0
%"'ipiv80_unwrap158" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv79_unwrap157", i64 %235, 1
%"'ipiv81_unwrap159" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv80_unwrap158", {} addrspace(10)* %232, 2
%"unbox202246'ipiv_unwrap160" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv81_unwrap159", {} addrspace(10)* %229, 3
br label %invertL479_phimerge_phirc151_phimerge
invertL479_phimerge_phirc151_phimerge: ; preds = %invertL479_phimerge_phirc151_phirc156, %invertL479_phimerge_phirc151_phirc
%239 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL479_phimerge_phirc151_phirc ], [ %"unbox202246'ipiv_unwrap160", %invertL479_phimerge_phirc151_phirc156 ]
br label %invertL479_phimerge_phimerge
invertL479_phirc144_phirc: ; preds = %invertL479_phirc144
br label %invertL479_phirc144_phimerge
invertL479_phirc144_phirc149: ; preds = %invertL479_phirc144
%240 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 22
%241 = getelementptr inbounds { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %240, i64 %220
%242 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* %241, align 8, !invariant.group !9201
br label %invertL479_phirc144_phimerge
invertL479_phirc144_phimerge: ; preds = %invertL479_phirc144_phirc149, %invertL479_phirc144_phirc
%243 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL479_phirc144_phirc ], [ %242, %invertL479_phirc144_phirc149 ]
br label %invertL479_phimerge
invertL501.lr.ph: ; preds = %invertL501_phimerge
%244 = load i64, i64* %"iv1'ac", align 8
%245 = load i64, i64* %"iv'ac", align 8
%246 = load i64, i64* %"iv1'ac", align 8
%_unwrap249 = load i64**, i64*** %mdyncache_fromtape_cache248, align 8, !dbg !9132, !invariant.group !9133
%_unwrap250 = getelementptr inbounds i64*, i64** %_unwrap249, i64 %245
%forfree251 = load i64*, i64** %_unwrap250, align 8, !dereferenceable !410, !invariant.group !9146
%247 = bitcast i64* %forfree251 to i8*
call void @free(i8* nonnull %247), !dbg !9202
br label %invertL479
invertL501: ; preds = %mergeinvertL501_L569.loopexit, %incinvertL501
%248 = load i64, i64* %"iv1'ac", align 8, !dbg !9148
%249 = load i64, i64* %"iv'ac", align 8, !dbg !9148
%250 = icmp eq i64 %249, 0, !dbg !9148
br i1 %250, label %invertL501_phirc, label %invertL501_phirc177, !dbg !9148
invertL501_phirc: ; preds = %invertL501
br label %invertL501_phimerge
invertL501_phirc177: ; preds = %invertL501
%251 = sub nuw i64 %249, 1
%_unwrap178 = add i64 %251, 2
%_unwrap179 = add nsw i64 %_unwrap178, -1
%_unwrap180 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap179
%.not239_unwrap181 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap180, null
br i1 %.not239_unwrap181, label %invertL501_phirc177_phirc, label %invertL501_phirc177_phirc182
invertL501_phimerge: ; preds = %invertL501_phirc177_phimerge, %invertL501_phirc
%252 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ %113, %invertL501_phirc ], [ %284, %invertL501_phirc177_phimerge ], !dbg !9148
%"'ipev111_unwrap187" = extractvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %252, 3, !dbg !9148
%"'ipc171_unwrap" = addrspacecast {} addrspace(10)* %"'ipev111_unwrap187" to double addrspace(13)* addrspace(11)*, !dbg !9148
%"arrayptr95270'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc171_unwrap", align 8, !tbaa !274, !alias.scope !9126, !noalias !9129, !nonnull !58, !invariant.group !9131
%"'ipg_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr95270'ipl_unwrap", i64 %248, !dbg !9148
%253 = load double, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !9148, !tbaa !297, !alias.scope !9203, !noalias !9206
store double 0.000000e+00, double addrspace(13)* %"'ipg_unwrap", align 8, !dbg !9148, !tbaa !297, !alias.scope !9203, !noalias !9206
%254 = load double, double* %"arrayref'de", align 8, !dbg !9148
%255 = fadd fast double %254, %253, !dbg !9148
store double %255, double* %"arrayref'de", align 8, !dbg !9148
%256 = load double, double* %"arrayref'de", align 8, !dbg !9137
store double 0.000000e+00, double* %"arrayref'de", align 8, !dbg !9137
%257 = load i64, i64* %"iv1'ac", align 8, !dbg !9137
%258 = load i64, i64* %"iv'ac", align 8, !dbg !9137
%_unwrap190 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache175, align 8, !dereferenceable !410, !invariant.group !9118
%_unwrap191 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %_unwrap190, i64 %258, !dbg !9137
%"getfield'il_phi_unwrap" = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %_unwrap191, align 8, !invariant.group !9119
%"'ipc173_unwrap" = addrspacecast {} addrspace(10)* %"getfield'il_phi_unwrap" to double addrspace(13)* addrspace(11)*, !dbg !9137
%"arrayptr269'ipl_unwrap" = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %"'ipc173_unwrap", align 16, !tbaa !274, !alias.scope !9120, !noalias !9123, !nonnull !58, !invariant.group !9125
%259 = load i64, i64* %"iv'ac", align 8, !dbg !9137
%_unwrap252 = load i64*, i64** %mdyncache_fromtape_cache242, align 8, !dbg !9059, !dereferenceable !410, !invariant.group !9060
%_unwrap253 = getelementptr inbounds i64, i64* %_unwrap252, i64 %259, !dbg !9137
%arraylen46_unwrap = load i64, i64* %_unwrap253, align 8, !dbg !9059, !alias.scope !9208, !noalias !9209, !invariant.group !9061
%_unwrap197 = add nsw i64 %arraylen46_unwrap, -1, !dbg !9137
%260 = add nuw i64 %_unwrap197, 1, !dbg !9137
%261 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 20, !dbg !9137
%262 = getelementptr inbounds i64*, i64** %261, i64 %258, !dbg !9137
%263 = load i64*, i64** %262, align 8, !dbg !9137, !dereferenceable !410, !invariant.group !9210
%264 = getelementptr inbounds i64, i64* %263, i64 %257, !dbg !9137
%265 = load i64, i64* %264, align 8, !dbg !9137, !invariant.group !9211
%"'ipg189_unwrap" = getelementptr inbounds double, double addrspace(13)* %"arrayptr269'ipl_unwrap", i64 %265, !dbg !9137
%266 = atomicrmw fadd double addrspace(13)* %"'ipg189_unwrap", double %256 monotonic, align 8, !dbg !9137
%267 = load i64, i64* %"iv1'ac", align 8
%268 = icmp eq i64 %267, 0
%269 = xor i1 %268, true
br i1 %268, label %invertL501.lr.ph, label %incinvertL501
incinvertL501: ; preds = %invertL501_phimerge
%270 = load i64, i64* %"iv1'ac", align 8
%271 = add nsw i64 %270, -1
store i64 %271, i64* %"iv1'ac", align 8
br label %invertL501
invertL501_phirc177_phirc: ; preds = %invertL501_phirc177
br label %invertL501_phirc177_phimerge
invertL501_phirc177_phirc182: ; preds = %invertL501_phirc177
%272 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%273 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %272, i64 %251
%274 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %273, align 8, !invariant.group !9199
%275 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%276 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %275, i64 %251
%277 = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %276, align 8, !invariant.group !9200
%278 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%279 = getelementptr inbounds i64, i64* %278, i64 %251
%280 = load i64, i64* %279, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9198
%281 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%282 = getelementptr inbounds i64, i64* %281, i64 %251
%283 = load i64, i64* %282, align 8, !tbaa !63, !alias.scope !97, !noalias !98, !invariant.group !9197
%"'ipiv79_unwrap183" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } undef, i64 %283, 0
%"'ipiv80_unwrap184" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv79_unwrap183", i64 %280, 1
%"'ipiv81_unwrap185" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv80_unwrap184", {} addrspace(10)* %277, 2
%"unbox202246'ipiv_unwrap186" = insertvalue { i64, i64, {} addrspace(10)*, {} addrspace(10)* } %"'ipiv81_unwrap185", {} addrspace(10)* %274, 3
br label %invertL501_phirc177_phimerge
invertL501_phirc177_phimerge: ; preds = %invertL501_phirc177_phirc182, %invertL501_phirc177_phirc
%284 = phi { i64, i64, {} addrspace(10)*, {} addrspace(10)* } [ zeroinitializer, %invertL501_phirc177_phirc ], [ %"unbox202246'ipiv_unwrap186", %invertL501_phirc177_phirc182 ]
br label %invertL501_phimerge
invertL569.loopexit: ; preds = %invertL569
%285 = load i64, i64* %"iv'ac", align 8
%286 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 18
%287 = getelementptr inbounds i64, i64* %286, i64 %285
%288 = load i64, i64* %287, align 8, !dbg !9058, !tbaa !158, !range !96, !alias.scope !9208, !noalias !9209, !invariant.group !9212
%_unwrap201 = add nsw i64 %288, -1
br label %mergeinvertL501_L569.loopexit
mergeinvertL501_L569.loopexit: ; preds = %invertL569.loopexit
store i64 %_unwrap201, i64* %"iv1'ac", align 8
br label %invertL501
invertL569: ; preds = %invertpass, %mergeinvertL47_L589
%289 = load i8*, i8** %_cache203, align 8, !dereferenceable !410, !invariant.group !9090
%290 = load i64, i64* %"iv'ac", align 8
%291 = getelementptr inbounds i8, i8* %289, i64 %290
%292 = load i8, i8* %291, align 1, !invariant.group !9091
switch i8 %292, label %invertL569.loopexit [
i8 0, label %invertL468
i8 1, label %invertL479
i8 2, label %invertL475
]
invertL583: ; preds = %incinvertL47
%293 = load i64, i64* %"iv'ac", align 8
%_unwrap216 = add i64 %293, 2
%_unwrap217 = add nsw i64 %_unwrap216, -1
%_unwrap218 = getelementptr inbounds { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* }, { i64, [2 x { i64, i64, {} addrspace(10)*, {} addrspace(10)* }], {} addrspace(10)* } addrspace(11)* %0, i64 0, i32 1, i64 %_unwrap217
%.not239_unwrap219 = icmp eq { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(11)* %_unwrap218, null
br i1 %.not239_unwrap219, label %invertpass, label %invertguard_pass200
invertL589: ; preds = %L589
br label %mergeinvertL47_L589
mergeinvertL47_L589: ; preds = %invertL589
store i64 1, i64* %"iv'ac", align 8
br label %invertL569
invertpass: ; preds = %invertguard_pass200, %invertL583
br label %invertL569
invertguard_pass193: ; preds = %invertguard_exit194
br label %inverttop
invertguard_exit194: ; preds = %invertL47.lr.ph
br i1 %.not, label %inverttop, label %invertguard_pass193
invertL47.lr.ph: ; preds = %invertL47
%294 = load i64, i64* %"iv'ac", align 8
%295 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 22
%296 = load i64, i64* %"iv'ac", align 8
%297 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 16
%298 = load i64, i64* %"iv'ac", align 8
%299 = extractvalue { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)*, i64*, i64*, i64**, { i64, i64, {} addrspace(10)*, {} addrspace(10)* }, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)* } %tapeArg, 17
%300 = load i64, i64* %"iv'ac", align 8
%forfree91 = load i64*, i64** %unbox202.unpack241_cache, align 8, !dereferenceable !410, !invariant.group !9185
%301 = bitcast i64* %forfree91 to i8*
call void @free(i8* nonnull %301), !dbg !9202, !enzyme_cache_free !9183
%302 = load i64, i64* %"iv'ac", align 8
%forfree92 = load i64*, i64** %unbox202.unpack_cache, align 8, !dereferenceable !410, !invariant.group !9188
%303 = bitcast i64* %forfree92 to i8*
call void @free(i8* nonnull %303), !dbg !9202, !enzyme_cache_free !9186
%304 = load i64, i64* %"iv'ac", align 8
%forfree95 = load { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64, i64, {} addrspace(10)*, i1, i64, i64, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache, align 8, !dereferenceable !9213, !invariant.group !9046
%305 = load i64, i64* %"iv'ac", align 8
%forfree126 = load { {} addrspace(10)*, i64, i64 } addrspace(10)*, { {} addrspace(10)*, i64, i64 } addrspace(10)** %mdyncache_fromtape_cache125, align 8, !dereferenceable !9214, !invariant.group !9096
%306 = load i64, i64* %"iv'ac", align 8
%forfree134 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache133, align 8, !dereferenceable !9215, !invariant.group !9093
%307 = load i64, i64* %"iv'ac", align 8
%forfree166 = load { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)*, { {} addrspace(10)*, { {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, i64 }, i1 } addrspace(10)** %mdyncache_fromtape_cache165, align 8, !dereferenceable !9215, !invariant.group !9103
%308 = load i64, i64* %"iv'ac", align 8
%forfree176 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache175, align 8, !dereferenceable !410, !invariant.group !9118
%309 = load i64, i64* %"iv'ac", align 8
%310 = load i64, i64* %"iv'ac", align 8
%311 = load i64, i64* %"iv'ac", align 8
%forfree205 = load i8*, i8** %_cache203, align 8, !dereferenceable !9216, !invariant.group !9090
call void @free(i8* nonnull %forfree205), !dbg !9202, !enzyme_cache_free !9189
%312 = load i64, i64* %"iv'ac", align 8
%forfree236 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache235, align 8, !dereferenceable !410, !invariant.group !9193
%313 = load i64, i64* %"iv'ac", align 8
%forfree239 = load {} addrspace(10)* addrspace(10)*, {} addrspace(10)* addrspace(10)** %mdyncache_fromtape_cache238, align 8, !dereferenceable !410, !invariant.group !9191
%314 = load i64, i64* %"iv'ac", align 8
%forfree243 = load i64*, i64** %mdyncache_fromtape_cache242, align 8, !dereferenceable !410, !invariant.group !9060
%315 = bitcast i64* %forfree243 to i8*
call void @free(i8* nonnull %315), !dbg !9202
%316 = load i64, i64* %"iv'ac", align 8
%forfree245 = load i64*, i64** %mdyncache_fromtape_cache244, align 8, !dereferenceable !410, !invariant.group !9073
%317 = bitcast i64* %forfree245 to i8*
call void @free(i8* nonnull %317), !dbg !9202
%318 = load i64, i64* %"iv'ac", align 8
%forfree247 = load { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)*, { i64, i64, {} addrspace(10)*, {} addrspace(10)* } addrspace(10)** %mdyncache_fromtape_cache246, align 8, !dereferenceable !9217, !invariant.group !9195
%319 = load i64, i64* %"iv'ac", align 8
%forfree = load i64**, i64*** %mdyncache_fromtape_cache248, align 8, !dereferenceable !410, !invariant.group !9145
%320 = bitcast i64** %forfree to i8*
call void @free(i8* nonnull %320), !dbg !9202
br label %invertguard_exit194
invertguard_pass200: ; preds = %invertL583
br label %invertpass
}
LLVM.LoadInst(%unbox202.unpack = load i64, i64 addrspace(11)* %unbox202.elt, align 8, !tbaa !64, !alias.scope !98, !noalias !99)
LLVM.PHIInst(%unbox202.unpack_replacementA = phi i64 )
Stacktrace:
[1] julia_error(cstr::Cstring, val::Ptr{LLVM.API.LLVMOpaqueValue}, errtype::Enzyme.API.ErrorType, data::Ptr{Nothing}, data2::Ptr{LLVM.API.LLVMOpaqueValue}, B::Ptr{LLVM.API.LLVMOpaqueBuilder})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:1734
[2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
@ Enzyme.API ~/.julia/packages/Enzyme/R8qo4/src/api.jl:141
[3] enzyme!(job::GPUCompiler.CompilerJob{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…}, returnPrimal::Bool, jlrules::Vector{…}, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:3074
[4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:4698
[5] codegen
@ ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:4281 [inlined]
[6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool) (repeats 2 times)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:5272
[7] cached_compilation
@ ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:5306 [inlined]
[8] (::Enzyme.Compiler.var"#485#486"{DataType, UnionAll, DataType, Enzyme.API.CDerivativeMode, NTuple{5, Bool}, Int64, Bool, Bool, UInt64, DataType})(ctx::LLVM.Context)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:5372
[9] JuliaContext(f::Enzyme.Compiler.var"#485#486"{DataType, UnionAll, DataType, Enzyme.API.CDerivativeMode, NTuple{5, Bool}, Int64, Bool, Bool, UInt64, DataType})
@ GPUCompiler ~/.julia/packages/GPUCompiler/U36Ed/src/driver.jl:47
[10] #s1038#484
@ ~/.julia/packages/Enzyme/R8qo4/src/compiler.jl:5324 [inlined]
[11] var"#s1038#484"(FA::Any, A::Any, TT::Any, Mode::Any, ModifiedBetween::Any, width::Any, ReturnPrimal::Any, ShadowInit::Any, World::Any, ABI::Any, ::Any, ::Type, ::Type, ::Type, tt::Any, ::Type, ::Type, ::Type, ::Type, ::Type, ::Any)
@ Enzyme.Compiler ./none:0
[12] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:602
[13] autodiff(::ReverseMode{false, FFIABI}, ::Duplicated{var"#dfunc#68"{System, NN{…}, Vector{…}, Vector{…}, Vector{…}, Matrix{…}, Vector{…}, UnitRange{…}, UnitRange{…}}}, ::Type{Const}, ::Duplicated{Vector{Float64}}, ::Vararg{Any})
@ Enzyme ~/.julia/packages/Enzyme/R8qo4/src/Enzyme.jl:209
[14] top-level scope
@ REPL[234]:1
Some type information was truncated. Use `show(err)` to see complete types.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment