EnzymeAD / Enzyme.jl

Julia bindings for the Enzyme automatic differentiator
https://enzyme.mit.edu
MIT License
422 stars 58 forks source link

Illegal type analysis error for GraphsFlows.jl max flow #1448

Closed JohannesNaegele closed 1 month ago

JohannesNaegele commented 1 month ago

Hi, here a proper error message for this question. I want to differentiate a GraphsFlows.jl maximum flow function.

(@v1.10) pkg> status Enzyme
Status `~/.julia/environments/v1.10/Project.toml`
  [7da242da] Enzyme v0.12.6

julia> versioninfo()
Julia Version 1.10.0
Commit 3120989f39b (2023-12-25 18:01 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: macOS (arm64-apple-darwin22.4.0)
  CPU: 8 × Apple M2
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, apple-m1)
  Threads: 8 on 4 virtual cores
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS = 6

julia> using Enzyme

julia> using Graphs, GraphsFlows

julia> flow_graph = Graphs.DiGraph(8) # Create a flow graph
{8, 0} directed simple Int64 graph

julia> flow_edges = [
           (1,2,10),(1,3,5),(1,4,15),(2,3,4),(2,5,9),
           (2,6,15),(3,4,4),(3,6,8),(4,7,16),(5,6,15),
           (5,8,10),(6,7,15),(6,8,10),(7,3,6),(7,8,10)
       ]
15-element Vector{Tuple{Int64, Int64, Int64}}:
 (1, 2, 10)
 (1, 3, 5)
 (1, 4, 15)
 (2, 3, 4)
 (2, 5, 9)
 (2, 6, 15)
 (3, 4, 4)
 (3, 6, 8)
 (4, 7, 16)
 (5, 6, 15)
 (5, 8, 10)
 (6, 7, 15)
 (6, 8, 10)
 (7, 3, 6)
 (7, 8, 10)

julia> capacity_matrix = zeros(8, 8)  # Create a capacity matrix
8×8 Matrix{Float64}:
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

julia> for e in flow_edges
           u, v, f = e
           Graphs.add_edge!(flow_graph, u, v)
           capacity_matrix[u,v] = f
       end

julia> foo(capacity_matrix) = maximum_flow(flow_graph, 1, 8, capacity_matrix, algorithm=DinicAlgorithm())[2][1, 2] # Run Dinic's algorithm
foo (generic function with 1 method)

julia> foo(capacity_matrix) # 10.0
10.0

julia> gradient(Forward, foo, capacity_matrix)
...truncated error...
julia> show(err)
1-element ExceptionStack:
Enzyme compilation failed due to illegal type analysis.
Current scope: 
; Function Attrs: mustprogress willreturn
define internal fastcc nonnull "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer}" {} addrspace(10)* @preprocess_julia__maximum_flow_1_5614({} addrspace(10)* nocapture noundef nonnull readonly align 8 dereferenceable(24) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,0]:Pointer, [-1,16,0,0,0]:Pointer, [-1,16,0,0,0,-1]:Integer, [-1,16,0,0,8]:Integer, [-1,16,0,0,9]:Integer, [-1,16,0,0,10]:Integer, [-1,16,0,0,11]:Integer, [-1,16,0,0,12]:Integer, [-1,16,0,0,13]:Integer, [-1,16,0,0,14]:Integer, [-1,16,0,0,15]:Integer, [-1,16,0,0,16]:Integer, [-1,16,0,0,17]:Integer, [-1,16,0,0,18]:Integer, [-1,16,0,0,19]:Integer, [-1,16,0,0,20]:Integer, [-1,16,0,0,21]:Integer, [-1,16,0,0,22]:Integer, [-1,16,0,0,23]:Integer, [-1,16,0,0,24]:Integer, [-1,16,0,0,25]:Integer, [-1,16,0,0,26]:Integer, [-1,16,0,0,27]:Integer, [-1,16,0,0,28]:Integer, [-1,16,0,0,29]:Integer, [-1,16,0,0,30]:Integer, [-1,16,0,0,31]:Integer, [-1,16,0,0,32]:Integer, [-1,16,0,0,33]:Integer, [-1,16,0,0,34]:Integer, [-1,16,0,0,35]:Integer, [-1,16,0,0,36]:Integer, [-1,16,0,0,37]:Integer, [-1,16,0,0,38]:Integer, [-1,16,0,0,39]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}" "enzymejl_parmtype"="4436138512" "enzymejl_parmtype_ref"="2" %0, i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="5414521840" "enzymejl_parmtype_ref"="0" %1, i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="5414521840" "enzymejl_parmtype_ref"="0" %2, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="5195935248" "enzymejl_parmtype_ref"="2" %3) unnamed_addr #30 !dbg !1356 {
top:
  %sret_box169 = alloca [8 x i8], align 8
  %4 = call {}*** @julia.get_pgcstack() #31
  %current_task1262 = getelementptr inbounds {}**, {}*** %4, i64 -14
  %current_task1 = bitcast {}*** %current_task1262 to {}**
  %ptls_field263 = getelementptr inbounds {}**, {}*** %4, i64 2
  %5 = bitcast {}*** %ptls_field263 to i64***
  %ptls_load264265 = load i64**, i64*** %5, align 8, !tbaa !24
  %6 = getelementptr inbounds i64*, i64** %ptls_load264265, i64 2
  %safepoint = load i64*, i64** %6, align 8, !tbaa !28
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #31, !dbg !1357
  fence syncscope("singlethread") seq_cst
  %7 = call fastcc noalias nonnull dereferenceable(16) {} addrspace(10)* @julia_SimpleGraph_5656({} addrspace(10)* nocapture noundef nonnull readonly align 8 dereferenceable(24) %0) #31, !dbg !1358
  %8 = call fastcc nonnull dereferenceable(24) {} addrspace(10)* @julia_SimpleDiGraph_5632({} addrspace(10)* noundef nonnull align 8 dereferenceable(16) %7) #31, !dbg !1358
  %9 = addrspacecast {} addrspace(10)* %8 to i8 addrspace(11)*, !dbg !1363
  %getfield_addr130 = getelementptr inbounds i8, i8 addrspace(11)* %9, i64 8, !dbg !1363
  %10 = bitcast i8 addrspace(11)* %getfield_addr130 to {} addrspace(10)* addrspace(11)*, !dbg !1363
  %getfield131 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %10 unordered, align 8, !dbg !1363, !tbaa !291, !alias.scope !147, !noalias !293, !nonnull !23, !dereferenceable !139, !align !140
  %11 = addrspacecast {} addrspace(10)* %getfield131 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !1369
  %arraylen_ptr132 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %11, i64 0, i32 1, !dbg !1369
  %arraylen133 = load i64, i64 addrspace(11)* %arraylen_ptr132, align 8, !dbg !1369, !tbaa !117, !range !120, !alias.scope !121, !noalias !122
  %12 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5195935248 to {}*) to {} addrspace(10)*), i64 %arraylen133, i64 %arraylen133) #32, !dbg !1370
  %13 = addrspacecast {} addrspace(10)* %12 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !1375
  %arraylen_ptr134 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %13, i64 0, i32 1, !dbg !1375
  %arraylen135 = load i64, i64 addrspace(11)* %arraylen_ptr134, align 8, !dbg !1375, !tbaa !28, !range !120, !alias.scope !54, !noalias !57
  %.not279 = icmp eq i64 %arraylen135, 0, !dbg !1380
  br i1 %.not279, label %L355, label %L321.L338_crit_edge, !dbg !1378

L321.L338_crit_edge:                              ; preds = %top
  %14 = addrspacecast {} addrspace(10)* %12 to i8 addrspace(13)* addrspace(11)*, !dbg !1384
  %arrayptr143.pre280330 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %14, align 8, !dbg !1384, !tbaa !28, !alias.scope !1386, !noalias !57
  %15 = shl nuw i64 %arraylen135, 3, !dbg !1378
  call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %arrayptr143.pre280330, i8 noundef 0, i64 %15, i1 noundef false) #31, !dbg !1384, !tbaa !322, !alias.scope !147, !noalias !1389
  br label %L355, !dbg !1390

L355:                                             ; preds = %L321.L338_crit_edge, %top
  %16 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5342034176 to {}*) to {} addrspace(10)*), i64 %arraylen133) #32, !dbg !1390
  %17 = addrspacecast {} addrspace(10)* %16 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !1395
  %arraylen_ptr148 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %17, i64 0, i32 1, !dbg !1395
  %arraylen149 = load i64, i64 addrspace(11)* %arraylen_ptr148, align 8, !dbg !1395, !tbaa !117, !range !120, !alias.scope !121, !noalias !122
  %.not282 = icmp eq i64 %arraylen149, 0, !dbg !1401
  br i1 %.not282, label %L385, label %L355.L368_crit_edge, !dbg !1399

L355.L368_crit_edge:                              ; preds = %L355
  %18 = addrspacecast {} addrspace(10)* %16 to i8 addrspace(13)* addrspace(11)*, !dbg !1405
  %arrayptr157.pre283331 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %18, align 8, !dbg !1405, !tbaa !141, !alias.scope !1407, !noalias !122
  %19 = shl nuw i64 %arraylen149, 3, !dbg !1399
  call void @llvm.memset.p13i8.i64(i8 addrspace(13)* align 8 %arrayptr157.pre283331, i8 noundef 0, i64 %19, i1 noundef false) #31, !dbg !1405, !tbaa !322, !alias.scope !147, !noalias !1389
  br label %L385, !dbg !1408

L385:                                             ; preds = %L355.L368_crit_edge, %L355
  %20 = bitcast [8 x i8]* %sret_box169 to {}*
  %21 = addrspacecast {}* %20 to {} addrspace(11)*
  br label %L386, !dbg !1408

L386:                                             ; preds = %post_union_move209, %L385
  %iv = phi i64 [ %iv.next, %post_union_move209 ], [ 0, %L385 ], !dbg !1408
  %unbox197 = phi i64 [ 0, %L385 ], [ %unionalloca166.sroa.0.0.copyload226, %post_union_move209 ], !dbg !1408
  %value_phi162.off0 = phi i1 [ false, %L385 ], [ %value_phi183, %post_union_move209 ]
  %value_phi163.off0 = phi i1 [ true, %L385 ], [ %value_phi184, %post_union_move209 ]
  %tindex_phi167 = phi i8 [ 2, %L385 ], [ %tindex_phi188, %post_union_move209 ]
  %iv.next = add nuw nsw i64 %iv, 1, !dbg !1410
  %22 = call fastcc { {} addrspace(10)*, i8 } @julia_blocking_flow__5624([8 x i8]* noalias nocapture noundef nonnull align 8 dereferenceable(8) %sret_box169, {} addrspace(10)* noundef nonnull align 8 dereferenceable(24) %8, i64 signext %1, i64 signext %2, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %3, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %12, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %16) #31, !dbg !1410
  %23 = extractvalue { {} addrspace(10)*, i8 } %22, 0, !dbg !1410
  %24 = extractvalue { {} addrspace(10)*, i8 } %22, 1, !dbg !1410
  %25 = addrspacecast {} addrspace(10)* %23 to {} addrspace(11)*, !dbg !1410
  %26 = icmp slt i8 %24, 0, !dbg !1410
  %27 = select i1 %26, {} addrspace(11)* %25, {} addrspace(11)* %21, !dbg !1410
  %28 = bitcast i64 %unbox197 to double, !dbg !1412
  %trunc351 = trunc i8 %24 to i7, !dbg !1412
  switch i7 %trunc351, label %L405 [
    i7 1, label %L395
    i7 2, label %L407
  ], !dbg !1412

L395:                                             ; preds = %L386
  %29 = bitcast {} addrspace(11)* %27 to double addrspace(11)*, !dbg !1413
  %unbox171 = load double, double addrspace(11)* %29, align 8, !dbg !1413, !tbaa !998, !alias.scope !1000, !noalias !1001
  %30 = fcmp oeq double %unbox171, 0.000000e+00, !dbg !1413
  br i1 %30, label %L448, label %L410, !dbg !1412

L405:                                             ; preds = %L386
  call void @ijl_throw({} addrspace(12)* addrspacecast ({}* inttoptr (i64 5402494688 to {}*) to {} addrspace(12)*)) #31, !dbg !1412
  unreachable, !dbg !1412

L407:                                             ; preds = %L386
  %31 = bitcast {} addrspace(11)* %27 to i64 addrspace(11)*, !dbg !1415
  %unbox202 = load i64, i64 addrspace(11)* %31, align 8, !dbg !1415, !tbaa !998, !alias.scope !1000, !noalias !1001
  %32 = icmp eq i64 %unbox202, 0, !dbg !1415
  br i1 %32, label %L448, label %L425, !dbg !1412

L410:                                             ; preds = %L395
  br i1 %value_phi162.off0, label %L413, label %L417, !dbg !1416

L413:                                             ; preds = %L410
  %33 = fadd double %unbox171, %28, !dbg !1417
  %34 = bitcast double %33 to i64, !dbg !1408
  br label %post_union_move209, !dbg !1408

L417:                                             ; preds = %L410
  br i1 %value_phi163.off0, label %L420, label %L440, !dbg !1416

L420:                                             ; preds = %L417
  %35 = sitofp i64 %unbox197 to double, !dbg !1418
  %36 = fadd double %unbox171, %35, !dbg !1423
  %37 = bitcast double %36 to i64, !dbg !1408
  br label %post_union_move209, !dbg !1408

L425:                                             ; preds = %L407
  br i1 %value_phi162.off0, label %L428, label %L433, !dbg !1416

L428:                                             ; preds = %L425
  %38 = sitofp i64 %unbox202 to double, !dbg !1418
  %39 = fadd double %28, %38, !dbg !1423
  %40 = bitcast double %39 to i64, !dbg !1408
  br label %post_union_move209, !dbg !1408

L433:                                             ; preds = %L425
  br i1 %value_phi163.off0, label %L436, label %L440, !dbg !1416

L436:                                             ; preds = %L433
  %41 = add i64 %unbox202, %unbox197, !dbg !1424
  br label %post_union_move209, !dbg !1408

L440:                                             ; preds = %L433, %L417
  call void @ijl_throw({} addrspace(12)* addrspacecast ({}* inttoptr (i64 5402494688 to {}*) to {} addrspace(12)*)) #31, !dbg !1416
  unreachable, !dbg !1416

L448:                                             ; preds = %L407, %L395
  switch i8 %tindex_phi167, label %post_box_union174 [
    i8 1, label %box_union175
    i8 2, label %box_union178
  ], !dbg !1425

post_box_union174:                                ; preds = %box_union178, %box_union175, %L448
  %42 = phi {} addrspace(10)* [ %unionbox177, %box_union175 ], [ %45, %box_union178 ], [ null, %L448 ], !dbg !1425
  %43 = call noalias nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* nonnull @jl_f_tuple, {} addrspace(10)* null, {} addrspace(10)* %42, {} addrspace(10)* nonnull %12) #33, !dbg !1425
  ret {} addrspace(10)* %43, !dbg !1426

box_union175:                                     ; preds = %L448
  %unionbox177 = call noalias nonnull dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5414521040 to {}*) to {} addrspace(10)*)) #34, !dbg !1425
  %44 = bitcast {} addrspace(10)* %unionbox177 to i64 addrspace(10)*, !dbg !1425
  store i64 %unbox197, i64 addrspace(10)* %44, align 8, !dbg !1425, !tbaa !1021
  br label %post_box_union174, !dbg !1425

box_union178:                                     ; preds = %L448
  %45 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %unbox197) #32, !dbg !1425
  br label %post_box_union174, !dbg !1425

post_union_move209:                               ; preds = %L436, %L428, %L420, %L413
  %unionalloca166.sroa.0.0.copyload226 = phi i64 [ %41, %L436 ], [ %40, %L428 ], [ %37, %L420 ], [ %34, %L413 ], !dbg !1408
  %value_phi183 = phi i1 [ false, %L436 ], [ true, %L428 ], [ true, %L420 ], [ true, %L413 ]
  %value_phi184 = phi i1 [ true, %L436 ], [ false, %L428 ], [ false, %L420 ], [ false, %L413 ]
  %tindex_phi188 = phi i8 [ 2, %L436 ], [ 1, %L428 ], [ 1, %L420 ], [ 1, %L413 ]
  br label %L386, !dbg !1408
}

 Type analysis state: 
<analysis>
i64 3: {[-1]:Integer}, intvals: {3,}
  %sret_box169 = alloca [8 x i8], align 8: {[-1]:Pointer}, intvals: {}
{} addrspace(10)* %0: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,0]:Pointer, [-1,16,0,0,0]:Pointer, [-1,16,0,0,0,-1]:Integer, [-1,16,0,0,8]:Integer, [-1,16,0,0,9]:Integer, [-1,16,0,0,10]:Integer, [-1,16,0,0,11]:Integer, [-1,16,0,0,12]:Integer, [-1,16,0,0,13]:Integer, [-1,16,0,0,14]:Integer, [-1,16,0,0,15]:Integer, [-1,16,0,0,16]:Integer, [-1,16,0,0,17]:Integer, [-1,16,0,0,18]:Integer, [-1,16,0,0,19]:Integer, [-1,16,0,0,20]:Integer, [-1,16,0,0,21]:Integer, [-1,16,0,0,22]:Integer, [-1,16,0,0,23]:Integer, [-1,16,0,0,24]:Integer, [-1,16,0,0,25]:Integer, [-1,16,0,0,26]:Integer, [-1,16,0,0,27]:Integer, [-1,16,0,0,28]:Integer, [-1,16,0,0,29]:Integer, [-1,16,0,0,30]:Integer, [-1,16,0,0,31]:Integer, [-1,16,0,0,32]:Integer, [-1,16,0,0,33]:Integer, [-1,16,0,0,34]:Integer, [-1,16,0,0,35]:Integer, [-1,16,0,0,36]:Integer, [-1,16,0,0,37]:Integer, [-1,16,0,0,38]:Integer, [-1,16,0,0,39]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}, intvals: {}
i64 %1: {[-1]:Integer}, intvals: {}
i64 %2: {[-1]:Integer}, intvals: {}
{} addrspace(10)* %3: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %8 = call fastcc nonnull dereferenceable(24) {} addrspace(10)* @julia_SimpleDiGraph_5632({} addrspace(10)* noundef nonnull align 8 dereferenceable(16) %7) #31, !dbg !31: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,0]:Pointer, [-1,16,0,0,0]:Pointer, [-1,16,0,0,0,-1]:Integer, [-1,16,0,0,8]:Integer, [-1,16,0,0,9]:Integer, [-1,16,0,0,10]:Integer, [-1,16,0,0,11]:Integer, [-1,16,0,0,12]:Integer, [-1,16,0,0,13]:Integer, [-1,16,0,0,14]:Integer, [-1,16,0,0,15]:Integer, [-1,16,0,0,16]:Integer, [-1,16,0,0,17]:Integer, [-1,16,0,0,18]:Integer, [-1,16,0,0,19]:Integer, [-1,16,0,0,20]:Integer, [-1,16,0,0,21]:Integer, [-1,16,0,0,22]:Integer, [-1,16,0,0,23]:Integer, [-1,16,0,0,24]:Integer, [-1,16,0,0,25]:Integer, [-1,16,0,0,26]:Integer, [-1,16,0,0,27]:Integer, [-1,16,0,0,28]:Integer, [-1,16,0,0,29]:Integer, [-1,16,0,0,30]:Integer, [-1,16,0,0,31]:Integer, [-1,16,0,0,32]:Integer, [-1,16,0,0,33]:Integer, [-1,16,0,0,34]:Integer, [-1,16,0,0,35]:Integer, [-1,16,0,0,36]:Integer, [-1,16,0,0,37]:Integer, [-1,16,0,0,38]:Integer, [-1,16,0,0,39]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}, intvals: {}
  %4 = call {}*** @julia.get_pgcstack() #31: {}, intvals: {}
  %current_task1262 = getelementptr inbounds {}**, {}*** %4, i64 -14: {}, intvals: {}
  %current_task1 = bitcast {}*** %current_task1262 to {}**: {}, intvals: {}
  %ptls_field263 = getelementptr inbounds {}**, {}*** %4, i64 2: {}, intvals: {}
  %5 = bitcast {}*** %ptls_field263 to i64***: {[-1]:Pointer}, intvals: {}
  %ptls_load264265 = load i64**, i64*** %5, align 8, !tbaa !24: {}, intvals: {}
  %6 = getelementptr inbounds i64*, i64** %ptls_load264265, i64 2: {[-1]:Pointer}, intvals: {}
  %safepoint = load i64*, i64** %6, align 8, !tbaa !28: {}, intvals: {}
  %7 = call fastcc noalias nonnull dereferenceable(16) {} addrspace(10)* @julia_SimpleGraph_5656({} addrspace(10)* nocapture noundef nonnull readonly align 8 dereferenceable(24) %0) #31, !dbg !31: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer}, intvals: {}
  %iv.next = add nuw nsw i64 %iv, 1, !dbg !142: {[-1]:Integer}, intvals: {1,}
  %37 = bitcast double %36 to i64, !dbg !140: {[-1]:Float@double}, intvals: {}
  %38 = sitofp i64 %unbox202 to double, !dbg !160: {[-1]:Float@double}, intvals: {}
  %39 = fadd double %28, %38, !dbg !171: {[-1]:Float@double}, intvals: {}
  %40 = bitcast double %39 to i64, !dbg !140: {[-1]:Float@double}, intvals: {}
  %41 = add i64 %unbox202, %unbox197, !dbg !172: {[-1]:Integer}, intvals: {}
  %unbox171 = load double, double addrspace(11)* %29, align 8, !dbg !146, !tbaa !150, !alias.scope !152, !noalias !153: {[-1]:Float@double}, intvals: {}
  %30 = fcmp oeq double %unbox171, 0.000000e+00, !dbg !146: {[-1]:Integer}, intvals: {}
  %31 = bitcast {} addrspace(11)* %27 to i64 addrspace(11)*, !dbg !154: {[-1]:Pointer}, intvals: {}
  %unbox202 = load i64, i64 addrspace(11)* %31, align 8, !dbg !154, !tbaa !150, !alias.scope !152, !noalias !153: {[-1]:Integer}, intvals: {}
  %32 = icmp eq i64 %unbox202, 0, !dbg !154: {[-1]:Integer}, intvals: {}
  %16 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_alloc_array_1d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5342034176 to {}*) to {} addrspace(10)*), i64 %arraylen133) #32, !dbg !117: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %17 = addrspacecast {} addrspace(10)* %16 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !122: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %arraylen_ptr148 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %17, i64 0, i32 1, !dbg !122: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %arraylen149 = load i64, i64 addrspace(11)* %arraylen_ptr148, align 8, !dbg !122, !tbaa !72, !range !75, !alias.scope !76, !noalias !77: {[-1]:Integer}, intvals: {}
  %.not282 = icmp eq i64 %arraylen149, 0, !dbg !131: {[-1]:Integer}, intvals: {}
  %18 = addrspacecast {} addrspace(10)* %16 to i8 addrspace(13)* addrspace(11)*, !dbg !135: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %arrayptr157.pre283331 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %18, align 8, !dbg !135, !tbaa !137, !alias.scope !139, !noalias !77: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %19 = shl nuw i64 %arraylen149, 3, !dbg !129: {[-1]:Integer}, intvals: {}
  %20 = bitcast [8 x i8]* %sret_box169 to {}*: {[-1]:Pointer}, intvals: {}
  %arraylen_ptr132 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %11, i64 0, i32 1, !dbg !69: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %arraylen133 = load i64, i64 addrspace(11)* %arraylen_ptr132, align 8, !dbg !69, !tbaa !72, !range !75, !alias.scope !76, !noalias !77: {[-1]:Integer}, intvals: {}
  %12 = call noalias nonnull {} addrspace(10)* @ijl_alloc_array_2d({} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 5195935248 to {}*) to {} addrspace(10)*), i64 %arraylen133, i64 %arraylen133) #32, !dbg !78: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %13 = addrspacecast {} addrspace(10)* %12 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !87: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %arraylen_ptr134 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %13, i64 0, i32 1, !dbg !87: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %arraylen135 = load i64, i64 addrspace(11)* %arraylen_ptr134, align 8, !dbg !87, !tbaa !28, !range !75, !alias.scope !95, !noalias !96: {[-1]:Integer}, intvals: {}
  %.not279 = icmp eq i64 %arraylen135, 0, !dbg !97: {[-1]:Integer}, intvals: {}
  %14 = addrspacecast {} addrspace(10)* %12 to i8 addrspace(13)* addrspace(11)*, !dbg !108: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %arrayptr143.pre280330 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %14, align 8, !dbg !108, !tbaa !28, !alias.scope !111, !noalias !96: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %15 = shl nuw i64 %arraylen135, 3, !dbg !92: {[-1]:Integer}, intvals: {}
  %33 = fadd double %unbox171, %28, !dbg !158: {[-1]:Float@double}, intvals: {}
  %34 = bitcast double %33 to i64, !dbg !140: {[-1]:Float@double}, intvals: {}
  %21 = addrspacecast {}* %20 to {} addrspace(11)*: {[-1]:Pointer}, intvals: {}
  %unbox197 = phi i64 [ 0, %L385 ], [ %unionalloca166.sroa.0.0.copyload226, %post_union_move209 ], !dbg !140: {[-1]:Integer}, intvals: {0,}
  %value_phi162.off0 = phi i1 [ false, %L385 ], [ %value_phi183, %post_union_move209 ]: {[-1]:Integer}, intvals: {0,}
  %value_phi163.off0 = phi i1 [ true, %L385 ], [ %value_phi184, %post_union_move209 ]: {[-1]:Integer}, intvals: {-1,}
  %tindex_phi167 = phi i8 [ 2, %L385 ], [ %tindex_phi188, %post_union_move209 ]: {[-1]:Integer}, intvals: {2,}
  %22 = call fastcc { {} addrspace(10)*, i8 } @julia_blocking_flow__5624([8 x i8]* noalias nocapture noundef nonnull align 8 dereferenceable(8) %sret_box169, {} addrspace(10)* noundef nonnull align 8 dereferenceable(24) %8, i64 signext %1, i64 signext %2, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %3, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %12, {} addrspace(10)* noundef nonnull align 16 dereferenceable(40) %16) #31, !dbg !142: {[0]:Pointer, [8]:Integer}, intvals: {}
  %44 = bitcast {} addrspace(10)* %unionbox177 to i64 addrspace(10)*, !dbg !174: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %45 = call noalias nonnull "enzyme_inactive" {} addrspace(10)* @ijl_box_int64(i64 signext %unbox197) #32, !dbg !174: {}, intvals: {}
  %iv = phi i64 [ %iv.next, %post_union_move209 ], [ 0, %L385 ], !dbg !140: {[-1]:Integer}, intvals: {0,}
  %unionalloca166.sroa.0.0.copyload226 = phi i64 [ %41, %L436 ], [ %40, %L428 ], [ %37, %L420 ], [ %34, %L413 ], !dbg !140: {}, intvals: {}
  %35 = sitofp i64 %unbox197 to double, !dbg !160: {[-1]:Float@double}, intvals: {0,}
  %36 = fadd double %unbox171, %35, !dbg !171: {[-1]:Float@double}, intvals: {}
  %9 = addrspacecast {} addrspace(10)* %8 to i8 addrspace(11)*, !dbg !41: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,0]:Pointer, [-1,16,0,0,0]:Pointer, [-1,16,0,0,0,-1]:Integer, [-1,16,0,0,8]:Integer, [-1,16,0,0,9]:Integer, [-1,16,0,0,10]:Integer, [-1,16,0,0,11]:Integer, [-1,16,0,0,12]:Integer, [-1,16,0,0,13]:Integer, [-1,16,0,0,14]:Integer, [-1,16,0,0,15]:Integer, [-1,16,0,0,16]:Integer, [-1,16,0,0,17]:Integer, [-1,16,0,0,18]:Integer, [-1,16,0,0,19]:Integer, [-1,16,0,0,20]:Integer, [-1,16,0,0,21]:Integer, [-1,16,0,0,22]:Integer, [-1,16,0,0,23]:Integer, [-1,16,0,0,24]:Integer, [-1,16,0,0,25]:Integer, [-1,16,0,0,26]:Integer, [-1,16,0,0,27]:Integer, [-1,16,0,0,28]:Integer, [-1,16,0,0,29]:Integer, [-1,16,0,0,30]:Integer, [-1,16,0,0,31]:Integer, [-1,16,0,0,32]:Integer, [-1,16,0,0,33]:Integer, [-1,16,0,0,34]:Integer, [-1,16,0,0,35]:Integer, [-1,16,0,0,36]:Integer, [-1,16,0,0,37]:Integer, [-1,16,0,0,38]:Integer, [-1,16,0,0,39]:Integer, [-1,16,8]:Integer, [-1,16,9]:Integer, [-1,16,10]:Integer, [-1,16,11]:Integer, [-1,16,12]:Integer, [-1,16,13]:Integer, [-1,16,14]:Integer, [-1,16,15]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,25]:Integer, [-1,16,26]:Integer, [-1,16,27]:Integer, [-1,16,28]:Integer, [-1,16,29]:Integer, [-1,16,30]:Integer, [-1,16,31]:Integer, [-1,16,32]:Integer, [-1,16,33]:Integer, [-1,16,34]:Integer, [-1,16,35]:Integer, [-1,16,36]:Integer, [-1,16,37]:Integer, [-1,16,38]:Integer, [-1,16,39]:Integer}, intvals: {}
  %getfield_addr130 = getelementptr inbounds i8, i8 addrspace(11)* %9, i64 8, !dbg !41: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,0,-1]:Integer, [-1,0,0,0,8]:Integer, [-1,0,0,0,9]:Integer, [-1,0,0,0,10]:Integer, [-1,0,0,0,11]:Integer, [-1,0,0,0,12]:Integer, [-1,0,0,0,13]:Integer, [-1,0,0,0,14]:Integer, [-1,0,0,0,15]:Integer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,25]:Integer, [-1,0,0,0,26]:Integer, [-1,0,0,0,27]:Integer, [-1,0,0,0,28]:Integer, [-1,0,0,0,29]:Integer, [-1,0,0,0,30]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,32]:Integer, [-1,0,0,0,33]:Integer, [-1,0,0,0,34]:Integer, [-1,0,0,0,35]:Integer, [-1,0,0,0,36]:Integer, [-1,0,0,0,37]:Integer, [-1,0,0,0,38]:Integer, [-1,0,0,0,39]:Integer, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer}, intvals: {}
  %10 = bitcast i8 addrspace(11)* %getfield_addr130 to {} addrspace(10)* addrspace(11)*, !dbg !41: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,0,-1]:Integer, [-1,0,0,0,8]:Integer, [-1,0,0,0,9]:Integer, [-1,0,0,0,10]:Integer, [-1,0,0,0,11]:Integer, [-1,0,0,0,12]:Integer, [-1,0,0,0,13]:Integer, [-1,0,0,0,14]:Integer, [-1,0,0,0,15]:Integer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,25]:Integer, [-1,0,0,0,26]:Integer, [-1,0,0,0,27]:Integer, [-1,0,0,0,28]:Integer, [-1,0,0,0,29]:Integer, [-1,0,0,0,30]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,32]:Integer, [-1,0,0,0,33]:Integer, [-1,0,0,0,34]:Integer, [-1,0,0,0,35]:Integer, [-1,0,0,0,36]:Integer, [-1,0,0,0,37]:Integer, [-1,0,0,0,38]:Integer, [-1,0,0,0,39]:Integer, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer, [-1,8]:Pointer, [-1,8,0]:Pointer, [-1,8,0,0]:Pointer, [-1,8,0,0,0]:Pointer, [-1,8,0,0,0,-1]:Integer, [-1,8,0,0,8]:Integer, [-1,8,0,0,9]:Integer, [-1,8,0,0,10]:Integer, [-1,8,0,0,11]:Integer, [-1,8,0,0,12]:Integer, [-1,8,0,0,13]:Integer, [-1,8,0,0,14]:Integer, [-1,8,0,0,15]:Integer, [-1,8,0,0,16]:Integer, [-1,8,0,0,17]:Integer, [-1,8,0,0,18]:Integer, [-1,8,0,0,19]:Integer, [-1,8,0,0,20]:Integer, [-1,8,0,0,21]:Integer, [-1,8,0,0,22]:Integer, [-1,8,0,0,23]:Integer, [-1,8,0,0,24]:Integer, [-1,8,0,0,25]:Integer, [-1,8,0,0,26]:Integer, [-1,8,0,0,27]:Integer, [-1,8,0,0,28]:Integer, [-1,8,0,0,29]:Integer, [-1,8,0,0,30]:Integer, [-1,8,0,0,31]:Integer, [-1,8,0,0,32]:Integer, [-1,8,0,0,33]:Integer, [-1,8,0,0,34]:Integer, [-1,8,0,0,35]:Integer, [-1,8,0,0,36]:Integer, [-1,8,0,0,37]:Integer, [-1,8,0,0,38]:Integer, [-1,8,0,0,39]:Integer, [-1,8,8]:Integer, [-1,8,9]:Integer, [-1,8,10]:Integer, [-1,8,11]:Integer, [-1,8,12]:Integer, [-1,8,13]:Integer, [-1,8,14]:Integer, [-1,8,15]:Integer, [-1,8,16]:Integer, [-1,8,17]:Integer, [-1,8,18]:Integer, [-1,8,19]:Integer, [-1,8,20]:Integer, [-1,8,21]:Integer, [-1,8,22]:Integer, [-1,8,23]:Integer, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,8,32]:Integer, [-1,8,33]:Integer, [-1,8,34]:Integer, [-1,8,35]:Integer, [-1,8,36]:Integer, [-1,8,37]:Integer, [-1,8,38]:Integer, [-1,8,39]:Integer}, intvals: {}
  %getfield131 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %10 unordered, align 8, !dbg !41, !tbaa !55, !alias.scope !59, !noalias !62, !nonnull !23, !dereferenceable !67, !align !68: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Integer, [-1,0,0,8]:Integer, [-1,0,0,9]:Integer, [-1,0,0,10]:Integer, [-1,0,0,11]:Integer, [-1,0,0,12]:Integer, [-1,0,0,13]:Integer, [-1,0,0,14]:Integer, [-1,0,0,15]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-1,0,0,32]:Integer, [-1,0,0,33]:Integer, [-1,0,0,34]:Integer, [-1,0,0,35]:Integer, [-1,0,0,36]:Integer, [-1,0,0,37]:Integer, [-1,0,0,38]:Integer, [-1,0,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %11 = addrspacecast {} addrspace(10)* %getfield131 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !69: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,-1]:Integer, [-1,0,0,8]:Integer, [-1,0,0,9]:Integer, [-1,0,0,10]:Integer, [-1,0,0,11]:Integer, [-1,0,0,12]:Integer, [-1,0,0,13]:Integer, [-1,0,0,14]:Integer, [-1,0,0,15]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,25]:Integer, [-1,0,0,26]:Integer, [-1,0,0,27]:Integer, [-1,0,0,28]:Integer, [-1,0,0,29]:Integer, [-1,0,0,30]:Integer, [-1,0,0,31]:Integer, [-1,0,0,32]:Integer, [-1,0,0,33]:Integer, [-1,0,0,34]:Integer, [-1,0,0,35]:Integer, [-1,0,0,36]:Integer, [-1,0,0,37]:Integer, [-1,0,0,38]:Integer, [-1,0,0,39]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %42 = phi {} addrspace(10)* [ %unionbox177, %box_union175 ], [ %45, %box_union178 ], [ null, %L448 ], !dbg !174: {}, intvals: {0,}
  %43 = call noalias nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)*, {} addrspace(10)*, ...) @julia.call({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* nonnull @jl_f_tuple, {} addrspace(10)* null, {} addrspace(10)* %42, {} addrspace(10)* nonnull %12) #33, !dbg !174: {[-1]:Pointer, [-1,-1]:Pointer}, intvals: {}
  %unionbox177 = call noalias nonnull dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 5414521040 to {}*) to {} addrspace(10)*)) #34, !dbg !174: {[-1,-1]:Float@double}, intvals: {}
  %23 = extractvalue { {} addrspace(10)*, i8 } %22, 0, !dbg !142: {[-1]:Pointer}, intvals: {}
  %24 = extractvalue { {} addrspace(10)*, i8 } %22, 1, !dbg !142: {[-1]:Integer}, intvals: {}
  %25 = addrspacecast {} addrspace(10)* %23 to {} addrspace(11)*, !dbg !142: {[-1]:Pointer}, intvals: {}
  %26 = icmp slt i8 %24, 0, !dbg !142: {[-1]:Integer}, intvals: {}
  %27 = select i1 %26, {} addrspace(11)* %25, {} addrspace(11)* %21, !dbg !142: {[-1]:Pointer}, intvals: {}
  %28 = bitcast i64 %unbox197 to double, !dbg !145: {[-1]:Float@double}, intvals: {0,}
  %29 = bitcast {} addrspace(11)* %27 to double addrspace(11)*, !dbg !146: {[-1]:Pointer}, intvals: {}
double 0.000000e+00: {[-1]:Anything}, intvals: {}
{}* inttoptr (i64 5342034176 to {}*): {[-1]:Anything}, intvals: {}
{} addrspace(10)* addrspacecast ({}* inttoptr (i64 5342034176 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {}
{}* inttoptr (i64 5414521040 to {}*): {[-1]:Anything}, intvals: {}
{} addrspace(10)* addrspacecast ({}* inttoptr (i64 5414521040 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {}
{}* inttoptr (i64 5195935248 to {}*): {[-1]:Anything}, intvals: {}
{} addrspace(10)* addrspacecast ({}* inttoptr (i64 5195935248 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {}
{} addrspace(10)* null: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {0,}
i64 0: {[-1]:Anything}, intvals: {0,}
i64 8: {[-1]:Integer}, intvals: {8,}
i64 1: {[-1]:Integer}, intvals: {1,}
</analysis>

Illegal updateAnalysis prev:{[-1,-1]:Float@double} new: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}
val:   %44 = bitcast {} addrspace(10)* %unionbox177 to i64 addrspace(10)*, !dbg !174 origin=  store i64 %unbox197, i64 addrspace(10)* %44, align 8, !dbg !174, !tbaa !176
MethodInstance for GraphsFlows.var"#maximum_flow#1"(::DinicAlgorithm, ::Int64, ::typeof(maximum_flow), ::SimpleDiGraph{Int64}, ::Int64, ::Int64, ::Matrix{Float64})

Caused by:
Stacktrace:
 [1] dinic_impl
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/dinic.jl:27
 [2] dinic_impl
   @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331
 [3] maximum_flow
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:93
 [4] maximum_flow
   @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331
 [5] #maximum_flow#1
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:179

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/srACB/src/compiler.jl:1692
  [2] EnzymeCreateForwardDiff(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{Enzyme.API.CDIFFE_TYPE}, TA::Enzyme.TypeAnalysis, returnValue::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{Nothing}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{Bool})
    @ Enzyme.API ~/.julia/packages/Enzyme/srACB/src/api.jl:168
  [3] enzyme!(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{7, Bool}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{Int64}, boxedArgs::Set{Int64})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:3193
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5074
  [5] codegen
    @ ~/.julia/packages/Enzyme/srACB/src/compiler.jl:4481 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool) (repeats 2 times)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5771
  [7] cached_compilation
    @ ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5809 [inlined]
  [8] (::Enzyme.Compiler.var"#560#561"{DataType, DataType, DataType, Enzyme.API.CDerivativeMode, NTuple{7, Bool}, Int64, Bool, Bool, UInt64, DataType})(ctx::LLVM.Context)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5875
  [9] JuliaContext(f::Enzyme.Compiler.var"#560#561"{DataType, DataType, DataType, Enzyme.API.CDerivativeMode, NTuple{7, Bool}, Int64, Bool, Bool, UInt64, DataType}; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:52
 [10] JuliaContext(f::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:42
 [11] #s2027#559
    @ ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5827 [inlined]
 [12] var"#s2027#559"(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
 [13] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
    @ Core ./boot.jl:602
 [14] macro expansion
    @ ~/.julia/packages/Enzyme/srACB/src/rules/jitrules.jl:114 [inlined]
 [15] runtime_generic_fwd(::Type{Val{(false, false, false, false, false, false, true)}}, ::Val{64}, ::Val{@NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}}, ::typeof(Core.kwcall), ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::@NamedTuple{algorithm::DinicAlgorithm}, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::typeof(maximum_flow), ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::SimpleDiGraph{Int64}, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Int64, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Int64, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/rules/jitrules.jl:144
 [16] foo
    @ ./REPL[10]:1 [inlined]
 [17] fwddiffe64julia_foo_3336wrap
    @ ./REPL[10]:0
 [18] macro expansion
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5719 [inlined]
 [19] enzyme_call
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5385 [inlined]
 [20] ForwardModeThunk
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5267 [inlined]
 [21] autodiff(::ForwardMode{FFIABI}, f::Const{typeof(foo)}, ::Type{BatchDuplicatedNoNeed}, args::BatchDuplicated{Matrix{Float64}, 64})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:399
 [22] autodiff
    @ ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:303 [inlined]
 [23] gradient(::ForwardMode{FFIABI}, f::Function, x::Matrix{Float64}; shadow::NTuple{64, Matrix{Float64}})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:1040
 [24] gradient(::ForwardMode{FFIABI}, f::Function, x::Matrix{Float64})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:1036
 [25] top-level scope
    @ REPL[12]:1
 [26] eval
    @ ./boot.jl:385 [inlined]
 [27] eval
    @ ./Base.jl:88 [inlined]
 [28] repleval(m::Module, code::Expr, ::String)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:229
 [29] (::VSCodeServer.var"#112#114"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:192
 [30] with_logstate(f::Function, logstate::Any)
    @ Base.CoreLogging ./logging.jl:515
 [31] with_logger
    @ ./logging.jl:627 [inlined]
 [32] (::VSCodeServer.var"#111#113"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:193
 [33] #invokelatest#2
    @ Base ./essentials.jl:887 [inlined]
 [34] invokelatest(::Any)
    @ Base ./essentials.jl:884
 [35] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:34
julia>
wsmoses commented 1 month ago

Ah there's a type unstable union on the inside of the code.

What happens if you try https://enzyme.mit.edu/julia/stable/api/#Enzyme.API.strictAliasing!-Tuple{Any}

JohannesNaegele commented 1 month ago
using Enzyme
using Graphs, GraphsFlows

# Graph from GraphsFlows.jl demo
flow_graph = Graphs.DiGraph(8) # Create a flow graph
flow_edges = [
    (1,2,10),(1,3,5),(1,4,15),(2,3,4),(2,5,9),
    (2,6,15),(3,4,4),(3,6,8),(4,7,16),(5,6,15),
    (5,8,10),(6,7,15),(6,8,10),(7,3,6),(7,8,10)
]

capacity_matrix = zeros(8, 8)  # Create a capacity matrix

for e in flow_edges
    u, v, f = e
    Graphs.add_edge!(flow_graph, u, v)
    capacity_matrix[u,v] = f
end

# Some arbitrary function which depends on the max-flow results
foo(capacity_matrix) = maximum_flow(flow_graph, 1, 8, capacity_matrix, algorithm=DinicAlgorithm())[2][1, 2] # Run Dinic's algorithm
foo(capacity_matrix) # 10.0

Enzyme.API.strictAliasing!(false)
gradient(Forward, foo, capacity_matrix)

It still errors:

julia> show(err)
1-element ExceptionStack:
LoadError: Enzyme execution failed.
Mismatched activity for:   %unbox197 = phi i64 [ 0, %L385 ], [ %unionalloca166.sroa.0.0.copyload226, %post_union_move209 ], !dbg !140 const val: i64 0
Type tree: {}
You may be using a constant variable as temporary storage for active memory (https://enzyme.mit.edu/julia/stable/faq/#Activity-of-temporary-storage). If not, please open an issue, and either rewrite this variable to not be conditionally active or use Enzyme.API.runtimeActivity!(true) as a workaround for now

Stacktrace:
 [1] iterate
   @ ./range.jl:901
 [2] fill!
   @ ./array.jl:396
 [3] zeros
   @ ./array.jl:637
 [4] zeros
   @ ./array.jl:632
 [5] dinic_impl
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/dinic.jl:18
 [6] dinic_impl
   @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331
 [7] maximum_flow
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:93
 [8] maximum_flow
   @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331
 [9] #maximum_flow#1
   @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:179

Stacktrace:
  [1] throwerr(cstr::Cstring)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:1325
  [2] iterate
    @ ./range.jl:901 [inlined]
  [3] fill!
    @ ./array.jl:396 [inlined]
  [4] zeros
    @ ./array.jl:637 [inlined]
  [5] zeros
    @ ./array.jl:632 [inlined]
  [6] dinic_impl
    @ ~/.julia/packages/GraphsFlows/bSpFT/src/dinic.jl:18 [inlined]
  [7] dinic_impl
    @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331 [inlined]
  [8] maximum_flow
    @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:93 [inlined]
  [9] maximum_flow
    @ ~/.julia/packages/SimpleTraits/l1ZsK/src/SimpleTraits.jl:331 [inlined]
 [10] #maximum_flow#1
    @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:179
 [11] maximum_flow
    @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:166 [inlined]
 [12] fwddiffe64julia_maximum_flow_3559wrap
    @ ~/.julia/packages/GraphsFlows/bSpFT/src/maximum_flow.jl:0
 [13] macro expansion
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5719 [inlined]
 [14] enzyme_call(::Val{false}, ::Ptr{Nothing}, ::Type{Enzyme.Compiler.ForwardModeThunk{Ptr{Nothing}, Const{typeof(Core.kwcall)}, BatchDuplicated{Tuple{Union{Float64, Int64}, Matrix{Float64}}, 64}, Tuple{Const{@NamedTuple{algorithm::DinicAlgorithm}}, Const{typeof(maximum_flow)}, Const{SimpleDiGraph{Int64}}, Const{Int64}, Const{Int64}, BatchDuplicated{Matrix{Float64}, 64}}, 64, true}}, ::Val{64}, ::Val{true}, ::Type{Tuple{Const{@NamedTuple{algorithm::DinicAlgorithm}}, Const{typeof(maximum_flow)}, Const{SimpleDiGraph{Int64}}, Const{Int64}, Const{Int64}, BatchDuplicated{Matrix{Float64}, 64}}}, ::Type{BatchDuplicated{Tuple{Union{Float64, Int64}, Matrix{Float64}}, 64}}, ::Const{typeof(Core.kwcall)}, ::Type{Nothing}, ::Const{@NamedTuple{algorithm::DinicAlgorithm}}, ::Const{typeof(maximum_flow)}, ::Const{SimpleDiGraph{Int64}}, ::Const{Int64}, ::Const{Int64}, ::BatchDuplicated{Matrix{Float64}, 64})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5385
 [15] (::Enzyme.Compiler.ForwardModeThunk{Ptr{Nothing}, Const{typeof(Core.kwcall)}, BatchDuplicated{Tuple{Union{Float64, Int64}, Matrix{Float64}}, 64}, Tuple{Const{@NamedTuple{algorithm::DinicAlgorithm}}, Const{typeof(maximum_flow)}, Const{SimpleDiGraph{Int64}}, Const{Int64}, Const{Int64}, BatchDuplicated{Matrix{Float64}, 64}}, 64, true})(::Const{typeof(Core.kwcall)}, ::Const{@NamedTuple{algorithm::DinicAlgorithm}}, ::Vararg{Any})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5267
 [16] macro expansion
    @ ~/.julia/packages/Enzyme/srACB/src/rules/jitrules.jl:116 [inlined]
 [17] runtime_generic_fwd(::Type{Val{(false, false, false, false, false, false, true)}}, ::Val{64}, ::Val{@NamedTuple{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65}}, ::typeof(Core.kwcall), ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::@NamedTuple{algorithm::DinicAlgorithm}, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::typeof(maximum_flow), ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::SimpleDiGraph{Int64}, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Int64, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Int64, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64}, ::Matrix{Float64})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/rules/jitrules.jl:144
 [18] foo
    @ ~/Documents/GitHub/foo/test_costs.jl:55 [inlined]
 [19] fwddiffe64julia_foo_2274wrap
    @ ~/Documents/GitHub/foo/test_costs.jl:0
 [20] macro expansion
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5719 [inlined]
 [21] enzyme_call
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5385 [inlined]
 [22] ForwardModeThunk
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/srACB/src/compiler.jl:5267 [inlined]
 [23] autodiff(::ForwardMode{FFIABI}, f::Const{typeof(foo)}, ::Type{BatchDuplicatedNoNeed}, args::BatchDuplicated{Matrix{Float64}, 64})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:399
 [24] autodiff
    @ ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:303 [inlined]
 [25] gradient(::ForwardMode{FFIABI}, f::Function, x::Matrix{Float64}; shadow::NTuple{64, Matrix{Float64}})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:1040
 [26] gradient(::ForwardMode{FFIABI}, f::Function, x::Matrix{Float64})
    @ Enzyme ~/.julia/packages/Enzyme/srACB/src/Enzyme.jl:1036
 [27] top-level scope
    @ ~/Documents/GitHub/foo/test_costs.jl:59
 [28] eval
    @ ./boot.jl:385 [inlined]
 [29] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:2070
 [30] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
    @ Base ./essentials.jl:887
 [31] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:884
 [32] inlineeval(m::Module, code::String, code_line::Int64, code_column::Int64, file::String; softscope::Bool)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:271
 [33] (::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:181
 [34] withpath(f::VSCodeServer.var"#69#74"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams}, path::String)
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:276
 [35] (::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:179
 [36] hideprompt(f::VSCodeServer.var"#68#73"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/repl.jl:38
 [37] (::VSCodeServer.var"#67#72"{Bool, Bool, Bool, Module, String, Int64, Int64, String, VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:150
 [38] with_logstate(f::Function, logstate::Any)
    @ Base.CoreLogging ./logging.jl:515
 [39] with_logger
    @ ./logging.jl:627 [inlined]
 [40] (::VSCodeServer.var"#66#71"{VSCodeServer.ReplRunCodeRequestParams})()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:263
 [41] #invokelatest#2
    @ Base ./essentials.jl:887 [inlined]
 [42] invokelatest(::Any)
    @ Base ./essentials.jl:884
 [43] (::VSCodeServer.var"#64#65")()
    @ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.79.2/scripts/packages/VSCodeServer/src/eval.jl:34
in expression starting at /Users/johannes/Documents/GitHub/foo/test_costs.jl:59
wsmoses commented 1 month ago

This latter error should now be fixed on main, please reopen if it persists.