Closed MasonProtter closed 1 month ago
Ah, I see the error message Chris reported if I run on v1.10:
(jl_BPlSL0) pkg> st
Status `/tmp/jl_BPlSL0/Project.toml`
[7da242da] Enzyme v0.13.4
[b1df2697] OrdinaryDiffEqTsit5 v1.1.0
[90137ffa] StaticArrays v1.9.7
julia> versioninfo()
Julia Version 1.10.5
Commit 6f3fdf7b362 (2024-08-27 14:19 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 16 × AMD Ryzen 7 7840U w/ Radeon 780M Graphics
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-15.0.7 (ORCJIT, znver3)
Threads: 8 default, 0 interactive, 4 GC (on 16 virtual cores)
Environment:
JULIA_NUM_THREADS = 8
JULIA_EDITOR = emacsclient
julia> Enzyme.autodiff(Reverse, f, Duplicated(y, dy), Duplicated(u0, d_u0));
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
ERROR: Type Array does not have a definite size.
Stacktrace:
[1] sizeof(x::Type)
@ Base ./essentials.jl:631
[2] jl_array_del_end_rev(B::LLVM.IRBuilder, orig::LLVM.CallInst, gutils::Enzyme.Compiler.GradientUtils, tape::Nothing)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/rules/llvmrules.jl:1522
[3] jl_array_del_end_rev_cfunc(B::Ptr{…}, OrigCI::Ptr{…}, gutils::Ptr{…}, tape::Ptr{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/rules/llvmrules.jl:48
[4] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, runtimeActivity::Bool, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
@ Enzyme.API ~/.julia/packages/Enzyme/HXYPU/src/api.jl:253
[5] 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::Tuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:5096
[6] 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/HXYPU/src/compiler.jl:8189
[7] codegen
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:7028 [inlined]
[8] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9297
[9] _thunk
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9297 [inlined]
[10] cached_compilation
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9338 [inlined]
[11] thunkbase(ctx::LLVM.Context, mi::Core.MethodInstance, ::Val{…}, ::Type{…}, ::Type{…}, tt::Type{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Type{…}, ::Val{…}, ::Val{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9470
[12] #s2064#19667
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9607 [inlined]
[13]
@ Enzyme.Compiler ./none:0
[14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:602
[15] autodiff
@ ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:473 [inlined]
[16] autodiff
@ ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:537 [inlined]
[17] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{…}}, ::Duplicated{Vector{…}})
@ Enzyme ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:504
[18] top-level scope
@ REPL[11]:1
Some type information was truncated. Use `show(err)` to see complete types.
@MasonProtter does this resolve? https://github.com/EnzymeAD/Enzyme.jl/pull/1915
@wsmoses nope
what's the present error message?
v1.11:
julia> Enzyme.autodiff(Reverse, f, Duplicated(y, dy), Duplicated(u0, d_u0))
ERROR: Enzyme compilation failed.
Current scope:
define internal fastcc nonnull "enzyme_type"="{[-1]:Pointer, [-1,-1]:Pointer, [-1,8,-1]:Integer}" {} addrspace(10)* @julia_workqueue_for_38076(i64 signext "enzyme_inactive" "enzyme_type"="{[-1]:Integer}" "enzymejl_parmtype"="140701148923888" "enzymejl_parmtype_ref"="0" %0) unnamed_addr #112 !dbg !3167 {
top:
%phic = alloca {} addrspace(10)*, align 8
%phic1 = alloca {} addrspace(10)*, align 8
%1 = alloca [1 x [2 x i64]], align 8
%pgcstack = call {}*** @julia.get_pgcstack()
store {} addrspace(10)* null, {} addrspace(10)** %phic1, align 8, !noalias !594
store {} addrspace(10)* null, {} addrspace(10)** %phic, align 8, !noalias !594
%current_task281 = getelementptr inbounds {}**, {}*** %pgcstack, i64 -14
%2 = bitcast {}*** %current_task281 to {}*
%ptls_field82 = getelementptr inbounds {}**, {}*** %pgcstack, i64 2
%3 = bitcast {}*** %ptls_field82 to i64***
%ptls_load8384 = load i64**, i64*** %3, align 8, !tbaa !206
%4 = getelementptr inbounds i64*, i64** %ptls_load8384, i64 2
%safepoint = load i64*, i64** %4, align 8, !tbaa !210
fence syncscope("singlethread") seq_cst
call void @julia.safepoint(i64* %safepoint), !dbg !3168
fence syncscope("singlethread") seq_cst
%5 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 140701146283424 to {} addrspace(10)**) unordered, align 32, !dbg !3169, !tbaa !1316, !alias.scope !263, !noalias !264
%.not = icmp eq {} addrspace(10)* %5, null, !dbg !3169
br i1 %.not, label %err, label %ok, !dbg !3169
L9: ; preds = %ok
%6 = add i64 %0, -1, !dbg !3170
%.not86 = icmp ult i64 %6, %118, !dbg !3179
br i1 %.not86, label %L19, label %L45, !dbg !3176
L19: ; preds = %L9
%7 = bitcast {} addrspace(10)* %5 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)*, !dbg !3181
%8 = addrspacecast { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)* %7 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)*, !dbg !3181
%9 = bitcast {} addrspace(10)* %5 to {} addrspace(10)** addrspace(10)*, !dbg !3181
%10 = addrspacecast {} addrspace(10)** addrspace(10)* %9 to {} addrspace(10)** addrspace(11)*, !dbg !3181
%11 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %10, align 8, !dbg !3181, !tbaa !371, !alias.scope !263, !noalias !264
%12 = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %8, i64 0, i32 1, !dbg !3181
%13 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %12, align 8, !dbg !3181, !tbaa !371, !alias.scope !263, !noalias !264, !dereferenceable_or_null !328, !align !329
%14 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %13, {} addrspace(10)** %11), !dbg !3184
%15 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %14, i64 %6, !dbg !3184
%16 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %15 unordered, align 8, !dbg !3184, !tbaa !2019, !alias.scope !263, !noalias !264
%.not105 = icmp eq {} addrspace(10)* %16, null, !dbg !3184
br i1 %.not105, label %L45, label %common.ret, !dbg !3178
common.ret: ; preds = %L19, %L271
%common.ret.op = phi {} addrspace(10)* [ %value_phi23, %L271 ], [ %16, %L19 ]
ret {} addrspace(10)* %common.ret.op, !dbg !3186
L45: ; preds = %L9, %L19, %ok
%17 = icmp slt i64 %0, 1, !dbg !3187
br i1 %17, label %L277, label %L47, !dbg !3190
L47: ; preds = %L45
call fastcc void @julia_lock_37861({} addrspace(10)* noundef nonnull align 128 dereferenceable(8) addrspacecast ({}* inttoptr (i64 140701146283392 to {}*) to {} addrspace(10)*)), !dbg !3191
store volatile {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701146283392 to {}*) to {} addrspace(10)*), {} addrspace(10)** %phic, align 8, !dbg !3195, !noalias !594
store volatile {} addrspace(10)* null, {} addrspace(10)** %phic1, align 8, !dbg !3195, !noalias !594
%18 = call i64 @ijl_excstack_state({}* nonnull %2), !dbg !3195
%19 = call i32 @julia.except_enter({}* nonnull %2) #258, !dbg !3195
%.not91 = icmp eq i32 %19, 0, !dbg !3195
br i1 %.not91, label %try, label %catch_pop, !dbg !3195
L64: ; preds = %ccall
%20 = load i64, i64 addrspace(11)* %123, align 8, !dbg !3196, !tbaa !371, !alias.scope !263, !noalias !264
%21 = add i64 %20, -1, !dbg !3201
%22 = add i64 %21, %126, !dbg !3203
%.not95 = icmp eq i64 %22, 0, !dbg !3204
br i1 %.not95, label %L72, label %L74, !dbg !3204
L72: ; preds = %L64
%23 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 140701122938800 to {} addrspace(10)**) unordered, align 16, !dbg !3208, !tbaa !210, !alias.scope !236, !noalias !237
%.not96 = icmp eq {} addrspace(10)* %23, null, !dbg !3208
br i1 %.not96, label %fail8, label %L76, !dbg !3208
L74: ; preds = %L64
%24 = call {} addrspace(10)* @jl_alloc_genericmemory({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701122938768 to {}*) to {} addrspace(10)*), i64 %22), !dbg !3209
br label %L76, !dbg !3209
L76: ; preds = %L72, %L74
%25 = phi {} addrspace(10)* [ %24, %L74 ], [ %23, %L72 ]
%26 = bitcast {} addrspace(10)* %25 to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !3210
%27 = addrspacecast { i64, {} addrspace(10)** } addrspace(10)* %26 to { i64, {} addrspace(10)** } addrspace(11)*, !dbg !3210
%28 = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %27, i64 0, i32 1, !dbg !3210
%29 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %28, align 8, !dbg !3210, !tbaa !210, !alias.scope !236, !noalias !237, !nonnull !205
%30 = call noalias nonnull align 8 dereferenceable(24) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 24, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701100027296 to {}*) to {} addrspace(10)*)) #259, !dbg !3212
%31 = bitcast {} addrspace(10)* %30 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)*, !dbg !3212
%32 = addrspacecast { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)* %31 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)*, !dbg !3212
%.repack = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %32, i64 0, i32 0, !dbg !3212
store {} addrspace(10)** %29, {} addrspace(10)** addrspace(11)* %.repack, align 8, !dbg !3212, !tbaa !343, !alias.scope !335, !noalias !345
%.repack97 = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %32, i64 0, i32 1, !dbg !3212
store {} addrspace(10)* %25, {} addrspace(10)* addrspace(11)* %.repack97, align 8, !dbg !3212, !tbaa !343, !alias.scope !335, !noalias !345
%33 = bitcast {} addrspace(10)* %30 to i8 addrspace(10)*, !dbg !3212
%34 = addrspacecast i8 addrspace(10)* %33 to i8 addrspace(11)*, !dbg !3212
%35 = getelementptr inbounds i8, i8 addrspace(11)* %34, i64 16, !dbg !3212
%36 = bitcast i8 addrspace(11)* %35 to i64 addrspace(11)*, !dbg !3212
store i64 %22, i64 addrspace(11)* %36, align 8, !dbg !3212, !tbaa !346, !alias.scope !335, !noalias !345
%.not99 = icmp eq i64 %20, 0, !dbg !3213
br i1 %.not99, label %L176, label %L87, !dbg !3215
L87: ; preds = %L76
%37 = icmp slt i64 %20, 1, !dbg !3220
br i1 %37, label %L171, label %L91, !dbg !3222
L91: ; preds = %L87
%.sroa.057.0..sroa_idx = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %1, i64 0, i64 0, i64 0, !dbg !3223
store i64 1, i64* %.sroa.057.0..sroa_idx, align 8, !dbg !3223, !tbaa !381, !alias.scope !383, !noalias !384
%.sroa.258.0..sroa_idx59 = getelementptr inbounds [1 x [2 x i64]], [1 x [2 x i64]]* %1, i64 0, i64 0, i64 1, !dbg !3223
store i64 %20, i64* %.sroa.258.0..sroa_idx59, align 8, !dbg !3223, !tbaa !381, !alias.scope !383, !noalias !384
%.not103 = icmp ult i64 %21, %22, !dbg !3225
br i1 %.not103, label %L164, label %L116, !dbg !3229
L116: ; preds = %L91
%38 = addrspacecast [1 x [2 x i64]]* %1 to [1 x [2 x i64]] addrspace(11)*, !dbg !3229
call fastcc void @julia_throw_boundserror_38099({} addrspace(10)* noundef nonnull align 8 dereferenceable(24) %30, [1 x [2 x i64]] addrspace(11)* nocapture noundef nonnull readonly align 8 dereferenceable(16) %38) #260, !dbg !3229
unreachable, !dbg !3229
L164: ; preds = %L91
%39 = bitcast {} addrspace(10)* %119 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)*, !dbg !3230
%40 = addrspacecast { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)* %39 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)*, !dbg !3230
%41 = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %40, i64 0, i32 1, !dbg !3230
%42 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %41, align 8, !dbg !3230, !tbaa !371, !alias.scope !263, !noalias !264, !dereferenceable_or_null !328, !align !329
%43 = bitcast {} addrspace(10)* %119 to {} addrspace(10)** addrspace(10)*, !dbg !3230
%44 = addrspacecast {} addrspace(10)** addrspace(10)* %43 to {} addrspace(10)** addrspace(11)*, !dbg !3230
%45 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %44, align 8, !dbg !3230, !tbaa !371, !alias.scope !263, !noalias !264
%46 = ptrtoint {} addrspace(10)** %29 to i64, !dbg !3231
%47 = ptrtoint {} addrspace(10)** %45 to i64, !dbg !3231
%48 = load atomic void ({} addrspace(10)*, i64, {} addrspace(10)*, i64, i64)*, void ({} addrspace(10)*, i64, {} addrspace(10)*, i64, i64)** bitcast (void ()** @jlplt_jl_genericmemory_copyto_37228_got to void ({} addrspace(10)*, i64, {} addrspace(10)*, i64, i64)**) unordered, align 8, !dbg !3231
call void %48({} addrspace(10)* nonnull %25, i64 %46, {} addrspace(10)* %42, i64 %47, i64 %20), !dbg !3231
br label %L176, !dbg !3234
L171: ; preds = %L87
call fastcc void @julia__throw_argerror_37260({} addrspace(10)* nofree noundef nonnull align 32 addrspacecast ({}* inttoptr (i64 140701205633568 to {}*) to {} addrspace(10)*)) #260, !dbg !3222
unreachable, !dbg !3222
L176: ; preds = %L164, %L76
store atomic {} addrspace(10)* %30, {} addrspace(10)** inttoptr (i64 140701146283424 to {} addrspace(10)**) release, align 32, !dbg !3198, !tbaa !1316, !alias.scope !263, !noalias !310
call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701146283424 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull align 8 dereferenceable(24) %30) #261, !dbg !3198
br label %L186, !dbg !3198
L180: ; preds = %ccall
%49 = call fastcc [1 x {} addrspace(10)*] @julia_AssertionError_37449({} addrspace(10)* nofree noundef nonnull readonly align 16 addrspacecast ({}* inttoptr (i64 140701164642864 to {}*) to {} addrspace(10)*)), !dbg !3235
%50 = call noalias nonnull align 8 dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701135079984 to {}*) to {} addrspace(10)*)) #259, !dbg !3235
%51 = bitcast {} addrspace(10)* %50 to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !3235
%52 = extractvalue [1 x {} addrspace(10)*] %49, 0, !dbg !3235
%53 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %51, i64 0, i64 0, !dbg !3235
store {} addrspace(10)* %52, {} addrspace(10)* addrspace(10)* %53, align 8, !dbg !3235, !tbaa !470, !alias.scope !263, !noalias !310
%54 = addrspacecast {} addrspace(10)* %50 to {} addrspace(12)*, !dbg !3235
call void @ijl_throw({} addrspace(12)* %54), !dbg !3235
unreachable, !dbg !3235
L186: ; preds = %ok7, %L176
%.pre-phi.in = phi {} addrspace(10)* [ %119, %ok7 ], [ %30, %L176 ]
%55 = phi i64 [ %124, %ok7 ], [ %22, %L176 ], !dbg !3236
%56 = add nsw i64 %0, -1, !dbg !3247
%.not100 = icmp ult i64 %56, %55, !dbg !3249
br i1 %.not100, label %L196, label %L186.L204_crit_edge, !dbg !3245
L186.L204_crit_edge: ; preds = %L186
%.phi.trans.insert = bitcast {} addrspace(10)* %.pre-phi.in to {} addrspace(10)** addrspace(10)*
%.phi.trans.insert106 = addrspacecast {} addrspace(10)** addrspace(10)* %.phi.trans.insert to {} addrspace(10)** addrspace(11)*
%.pre = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %.phi.trans.insert106, align 8, !dbg !3250, !tbaa !343, !alias.scope !335, !noalias !336
%.phi.trans.insert107 = bitcast {} addrspace(10)* %.pre-phi.in to { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)*
%.phi.trans.insert108 = addrspacecast { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)* %.phi.trans.insert107 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)*
%.phi.trans.insert109 = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %.phi.trans.insert108, i64 0, i32 1
%.pre110 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %.phi.trans.insert109, align 8, !dbg !3250, !tbaa !343, !alias.scope !335, !noalias !336
%.pre114 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %.pre110, {} addrspace(10)** %.pre), !dbg !3251
br label %L204, !dbg !3245
L196: ; preds = %L186
%57 = bitcast {} addrspace(10)* %.pre-phi.in to { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)*, !dbg !3254
%58 = addrspacecast { {} addrspace(10)**, {} addrspace(10)* } addrspace(10)* %57 to { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)*, !dbg !3254
%59 = bitcast {} addrspace(10)* %.pre-phi.in to {} addrspace(10)** addrspace(10)*, !dbg !3254
%60 = addrspacecast {} addrspace(10)** addrspace(10)* %59 to {} addrspace(10)** addrspace(11)*, !dbg !3254
%61 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %60, align 8, !dbg !3254, !tbaa !343, !alias.scope !335, !noalias !336
%62 = getelementptr inbounds { {} addrspace(10)**, {} addrspace(10)* }, { {} addrspace(10)**, {} addrspace(10)* } addrspace(11)* %58, i64 0, i32 1, !dbg !3254
%63 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %62, align 8, !dbg !3254, !tbaa !343, !alias.scope !335, !noalias !336, !dereferenceable_or_null !328, !align !329
%64 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %63, {} addrspace(10)** %61), !dbg !3256
%65 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %64, i64 %56, !dbg !3256
%66 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %65 unordered, align 8, !dbg !3256, !tbaa !2019, !alias.scope !263, !noalias !264
%.not104 = icmp eq {} addrspace(10)* %66, null, !dbg !3256
br i1 %.not104, label %L204, label %pass19, !dbg !3246
L204: ; preds = %L186.L204_crit_edge, %L196
%nodecayed..pre-phi115 = phi {} addrspace(10)* , !dbg !3251
%nodecayedoff..pre-phi115 = phi i64 , !dbg !3251
%.pre-phi115 = phi {} addrspace(10)* addrspace(13)* [ %.pre114, %L186.L204_crit_edge ], [ %64, %L196 ], !dbg !3251
%67 = phi {} addrspace(10)* [ %.pre110, %L186.L204_crit_edge ], [ %63, %L196 ], !dbg !3250
%68 = call noalias nonnull align 8 dereferenceable(16) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 16, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701136004128 to {}*) to {} addrspace(10)*)) #259, !dbg !3257
%69 = bitcast {} addrspace(10)* %68 to {} addrspace(10)* addrspace(10)*, !dbg !3257
%70 = addrspacecast {} addrspace(10)* addrspace(10)* %69 to {} addrspace(10)* addrspace(11)*, !dbg !3257
store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %70, align 8, !dbg !3257, !tbaa !298, !alias.scope !263, !noalias !310
%71 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %70, i64 1, !dbg !3257
store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %71, align 8, !dbg !3257, !tbaa !298, !alias.scope !263, !noalias !310
%72 = load {}*, {}** @jl_nothing, align 8, !dbg !3257, !tbaa !210, !alias.scope !236, !noalias !237, !nonnull !205
%73 = addrspacecast {}* %72 to {} addrspace(10)*, !dbg !3257
store atomic {} addrspace(10)* %73, {} addrspace(10)* addrspace(11)* %70 release, align 8, !dbg !3257, !tbaa !298, !alias.scope !263, !noalias !310
%74 = bitcast {} addrspace(10)* %68 to i8 addrspace(10)*, !dbg !3257
%75 = addrspacecast i8 addrspace(10)* %74 to i8 addrspace(11)*, !dbg !3257
%76 = getelementptr inbounds i8, i8 addrspace(11)* %75, i64 8, !dbg !3257
%77 = bitcast i8 addrspace(11)* %76 to {} addrspace(10)* addrspace(11)*, !dbg !3257
store atomic {} addrspace(10)* %73, {} addrspace(10)* addrspace(11)* %77 release, align 8, !dbg !3257, !tbaa !298, !alias.scope !263, !noalias !310
%78 = call noalias nonnull align 8 dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701094029664 to {}*) to {} addrspace(10)*)) #259, !dbg !3261
%79 = bitcast {} addrspace(10)* %78 to i64 addrspace(10)*, !dbg !3261
%80 = addrspacecast i64 addrspace(10)* %79 to i64 addrspace(11)*, !dbg !3261
store i64 0, i64 addrspace(11)* %80, align 8, !dbg !3261, !tbaa !298, !alias.scope !263, !noalias !310
%81 = call noalias nonnull align 8 dereferenceable(16) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 16, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701122938304 to {}*) to {} addrspace(10)*)) #259, !dbg !3259
%82 = bitcast {} addrspace(10)* %81 to {} addrspace(10)* addrspace(10)*, !dbg !3259
%83 = addrspacecast {} addrspace(10)* addrspace(10)* %82 to {} addrspace(10)* addrspace(11)*, !dbg !3259
store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %83, align 8, !dbg !3259, !tbaa !298, !alias.scope !263, !noalias !310
%84 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %83, i64 1, !dbg !3259
store {} addrspace(10)* null, {} addrspace(10)* addrspace(11)* %84, align 8, !dbg !3259, !tbaa !298, !alias.scope !263, !noalias !310
store atomic {} addrspace(10)* %68, {} addrspace(10)* addrspace(11)* %83 release, align 8, !dbg !3259, !tbaa !298, !alias.scope !263, !noalias !310
%85 = bitcast {} addrspace(10)* %81 to i8 addrspace(10)*, !dbg !3259
%86 = addrspacecast i8 addrspace(10)* %85 to i8 addrspace(11)*, !dbg !3259
%87 = getelementptr inbounds i8, i8 addrspace(11)* %86, i64 8, !dbg !3259
%88 = bitcast i8 addrspace(11)* %87 to {} addrspace(10)* addrspace(11)*, !dbg !3259
store atomic {} addrspace(10)* %78, {} addrspace(10)* addrspace(11)* %88 release, align 8, !dbg !3259, !tbaa !298, !alias.scope !263, !noalias !310
%89 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %.pre-phi115, i64 %56, !dbg !3251
%90 = bitcast {} addrspace(10)* %67 to { i64, {} addrspace(10)** } addrspace(10)*, !dbg !3251
%91 = addrspacecast { i64, {} addrspace(10)** } addrspace(10)* %90 to { i64, {} addrspace(10)** } addrspace(11)*, !dbg !3251
%92 = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %91, i64 0, i32 1, !dbg !3251
%93 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %92, align 8, !dbg !3251, !tbaa !2206, !alias.scope !335, !noalias !336, !nonnull !205
%94 = bitcast {} addrspace(10)* %67 to {} addrspace(10)* addrspace(10)*, !dbg !3251
%95 = addrspacecast {} addrspace(10)* addrspace(10)* %94 to {} addrspace(10)* addrspace(11)*, !dbg !3251
%96 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %95, i64 2, !dbg !3251
%97 = addrspacecast {} addrspace(10)** %93 to {} addrspace(10)* addrspace(11)*, !dbg !3251
%.not101 = icmp eq {} addrspace(10)* addrspace(11)* %96, %97, !dbg !3251
br i1 %.not101, label %guard_exit, label %guard_pass, !dbg !3251
L250: ; preds = %catch_pop, %pass19
%value_phi21 = phi {} addrspace(10)* [ addrspacecast ({}* inttoptr (i64 140701146283392 to {}*) to {} addrspace(10)*), %pass19 ], [ %phic.0.phic.0.phic.0.phic.0.phic.0.phic.0.phic.0.phic.0., %catch_pop ]
%value_phi23 = phi {} addrspace(10)* [ %135, %pass19 ], [ null, %catch_pop ]
%98 = bitcast {} addrspace(10)* %value_phi21 to i64 addrspace(10)*, !dbg !3263
%99 = addrspacecast i64 addrspace(10)* %98 to i64 addrspace(11)*, !dbg !3263
%100 = atomicrmw xchg i64 addrspace(11)* %99, i64 0 release, align 8, !dbg !3263, !tbaa !298, !alias.scope !263, !noalias !264
%.not88 = icmp eq i64 %100, 0, !dbg !3268
br i1 %.not88, label %L257, label %L259, !dbg !3265
L257: ; preds = %L250
call fastcc void @julia_error_37799({} addrspace(10)* nofree noundef nonnull align 16 addrspacecast ({}* inttoptr (i64 140701204892496 to {}*) to {} addrspace(10)*)) #260, !dbg !3269
unreachable, !dbg !3269
L259: ; preds = %L250
%101 = bitcast {}*** %ptls_field82 to i32**, !dbg !3270
%ptls_load288990 = load i32*, i32** %101, align 8, !dbg !3270, !tbaa !206
%102 = getelementptr inbounds i32, i32* %ptls_load288990, i64 8, !dbg !3270
%103 = load i32, i32* %102, align 4, !dbg !3270
%104 = call i32 @llvm.usub.sat.i32(i32 %103, i32 1), !dbg !3270
store i32 %104, i32* %102, align 4, !dbg !3270, !noalias !594
%105 = load atomic i32, i32* inttoptr (i64 140701420942048 to i32*) monotonic, align 32, !dbg !3273, !tbaa !261, !alias.scope !263, !noalias !264
%106 = icmp eq i32 %105, 0, !dbg !3274
br i1 %106, label %L271, label %L266, !dbg !3273
L266: ; preds = %L259
%107 = load atomic void (i64)*, void (i64)** bitcast (void ()** @jlplt_jl_gc_run_pending_finalizers_37837_got to void (i64)**) unordered, align 8, !dbg !3278
call void %107(i64 0), !dbg !3278
br label %L271, !dbg !3278
L271: ; preds = %L266, %L259
br i1 %.not91, label %common.ret, label %L273, !dbg !3267
L273: ; preds = %L271
call fastcc void @julia_rethrow_37857() #260, !dbg !3267
unreachable, !dbg !3267
L277: ; preds = %L45
%108 = call fastcc [1 x {} addrspace(10)*] @julia_AssertionError_37449({} addrspace(10)* nofree noundef nonnull readonly align 16 addrspacecast ({}* inttoptr (i64 140701164642896 to {}*) to {} addrspace(10)*)), !dbg !3190
%109 = call noalias nonnull align 8 dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}* nonnull %2, i64 8, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 140701135079984 to {}*) to {} addrspace(10)*)) #259, !dbg !3190
%110 = bitcast {} addrspace(10)* %109 to [1 x {} addrspace(10)*] addrspace(10)*, !dbg !3190
%111 = extractvalue [1 x {} addrspace(10)*] %108, 0, !dbg !3190
%112 = getelementptr [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(10)* %110, i64 0, i64 0, !dbg !3190
store {} addrspace(10)* %111, {} addrspace(10)* addrspace(10)* %112, align 8, !dbg !3190, !tbaa !470, !alias.scope !263, !noalias !310
%113 = addrspacecast {} addrspace(10)* %109 to {} addrspace(12)*, !dbg !3190
call void @ijl_throw({} addrspace(12)* %113), !dbg !3190
unreachable, !dbg !3190
err: ; preds = %top
call void @ijl_undefined_var_error({} addrspace(12)* addrspacecast ({}* inttoptr (i64 140701296582176 to {}*) to {} addrspace(12)*), {} addrspace(12)* addrspacecast ({}* inttoptr (i64 140701144153232 to {}*) to {} addrspace(12)*)), !dbg !3169
unreachable, !dbg !3169
ok: ; preds = %top
%114 = bitcast {} addrspace(10)* %5 to i8 addrspace(10)*, !dbg !3279
%115 = addrspacecast i8 addrspace(10)* %114 to i8 addrspace(11)*, !dbg !3279
%116 = getelementptr inbounds i8, i8 addrspace(11)* %115, i64 16, !dbg !3279
%117 = bitcast i8 addrspace(11)* %116 to i64 addrspace(11)*, !dbg !3279
%118 = load i64, i64 addrspace(11)* %117, align 8, !dbg !3279, !tbaa !371, !alias.scope !263, !noalias !264
%.not85 = icmp slt i64 %118, %0, !dbg !3280
br i1 %.not85, label %L45, label %L9, !dbg !3178
try: ; preds = %L47
%119 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 140701146283424 to {} addrspace(10)**) unordered, align 32, !dbg !3284, !tbaa !1316, !alias.scope !263, !noalias !264
%.not92 = icmp eq {} addrspace(10)* %119, null, !dbg !3284
br i1 %.not92, label %err6, label %ok7, !dbg !3284
catch_pop: ; preds = %L47
call void @ijl_pop_handler({}* nonnull %2, i32 1) #261, !dbg !3195
%phic.0.phic.0.phic.0.phic.0.phic.0.phic.0.phic.0.phic.0. = load volatile {} addrspace(10)*, {} addrspace(10)** %phic, align 8, !dbg !3200, !nonnull !205, !dereferenceable !329, !align !329
%phic1.0.phic1.0.phic1.0.phic1.0.phic1.0.phic1.0.phic1.0.phic1.0. = load volatile {} addrspace(10)*, {} addrspace(10)** %phic1, align 8, !dbg !3200, !nonnull !205
br label %L250, !dbg !3200
err6: ; preds = %try
call void @ijl_undefined_var_error({} addrspace(12)* addrspacecast ({}* inttoptr (i64 140701296582176 to {}*) to {} addrspace(12)*), {} addrspace(12)* addrspacecast ({}* inttoptr (i64 140701144153232 to {}*) to {} addrspace(12)*)), !dbg !3284
unreachable, !dbg !3284
ok7: ; preds = %try
%120 = bitcast {} addrspace(10)* %119 to i8 addrspace(10)*, !dbg !3285
%121 = addrspacecast i8 addrspace(10)* %120 to i8 addrspace(11)*, !dbg !3285
%122 = getelementptr inbounds i8, i8 addrspace(11)* %121, i64 16, !dbg !3285
%123 = bitcast i8 addrspace(11)* %122 to i64 addrspace(11)*, !dbg !3285
%124 = load i64, i64 addrspace(11)* %123, align 8, !dbg !3285, !tbaa !371, !alias.scope !263, !noalias !264
%.not93 = icmp slt i64 %124, %0, !dbg !3287
br i1 %.not93, label %ccall, label %L186, !dbg !3286
ccall: ; preds = %ok7
%125 = load atomic i32, i32* inttoptr (i64 140701432139880 to i32*) acquire, align 8, !dbg !3288, !tbaa !261, !alias.scope !263, !noalias !264
%126 = sext i32 %125 to i64, !dbg !3292
%.not94 = icmp slt i64 %126, %0, !dbg !3296
br i1 %.not94, label %L180, label %L64, !dbg !3235
fail8: ; preds = %L72
%127 = load {}*, {}** @jl_undefref_exception, align 8, !dbg !3208, !tbaa !210, !alias.scope !236, !noalias !237, !nonnull !205
%128 = addrspacecast {}* %127 to {} addrspace(12)*, !dbg !3208
call void @ijl_throw({} addrspace(12)* %128), !dbg !3208
unreachable, !dbg !3208
guard_pass: ; preds = %L204
%129 = getelementptr inbounds { i64, {} addrspace(10)** }, { i64, {} addrspace(10)** } addrspace(11)* %91, i64 1, !dbg !3251
%130 = bitcast { i64, {} addrspace(10)** } addrspace(11)* %129 to {} addrspace(10)* addrspace(11)*, !dbg !3251
%131 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %130, align 8, !dbg !3251, !tbaa !210, !alias.scope !236, !noalias !237
%132 = icmp eq {} addrspace(10)* %131, null, !dbg !3251
%133 = select i1 %132, {} addrspace(10)* %67, {} addrspace(10)* %131, !dbg !3251
br label %guard_exit, !dbg !3251
guard_exit: ; preds = %guard_pass, %L204
%134 = phi {} addrspace(10)* [ %67, %L204 ], [ %133, %guard_pass ], !dbg !3251
store atomic {} addrspace(10)* %81, {} addrspace(10)* addrspace(13)* %89 release, align 8, !dbg !3251, !tbaa !2019, !alias.scope !263, !noalias !310
call void ({} addrspace(10)*, ...) @julia.write_barrier({} addrspace(10)* %134, {} addrspace(10)* nonnull %81) #261, !dbg !3251
br label %pass19, !dbg !3297
pass19: ; preds = %guard_exit, %L196
%135 = phi {} addrspace(10)* [ %81, %guard_exit ], [ %66, %L196 ], !dbg !3298
call void @ijl_pop_handler_noexcept({}* nonnull %2, i32 1) #261, !dbg !3300
br label %L250, !dbg !3300
}
Could not analyze garbage collection behavior of
inst: %.pre-phi115 = phi {} addrspace(10)* addrspace(13)* [ %.pre114, %L186.L204_crit_edge ], [ %64, %L196 ], !dbg !340
v0: %.pre114 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %.pre110, {} addrspace(10)** %.pre), !dbg !340
v: %.pre114 = call {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* %.pre110, {} addrspace(10)** %.pre), !dbg !340
offset: i64 0
hasload: false
Stacktrace:
[1] setindex!
@ ./array.jl:976
[2] macro expansion
@ ./task.jl:785
[3] macro expansion
@ ./lock.jl:273
[4] workqueue_for
@ ./task.jl:777
[5] multiple call sites
@ unknown:0
Stacktrace:
[1] (::Enzyme.Compiler.var"#getparent#19536"{…})(v::LLVM.CallInst, offset::LLVM.ConstantInt, hasload::Bool)
@ Enzyme.Compiler ~/Dropbox/Julia/Enzyme/src/compiler/optimize.jl:996
[2] nodecayed_phis!(mod::LLVM.Module)
@ Enzyme.Compiler ~/Dropbox/Julia/Enzyme/src/compiler/optimize.jl:999
[3] optimize!(mod::LLVM.Module, tm::LLVM.TargetMachine)
@ Enzyme.Compiler ~/Dropbox/Julia/Enzyme/src/compiler/optimize.jl:2482
[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 ~/Dropbox/Julia/Enzyme/src/compiler.jl:7904
[5] codegen
@ ~/Dropbox/Julia/Enzyme/src/compiler.jl:7028 [inlined]
[6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
@ Enzyme.Compiler ~/Dropbox/Julia/Enzyme/src/compiler.jl:9297
[7] _thunk
@ ~/Dropbox/Julia/Enzyme/src/compiler.jl:9297 [inlined]
[8] cached_compilation
@ ~/Dropbox/Julia/Enzyme/src/compiler.jl:9338 [inlined]
[9] thunkbase(ctx::LLVM.Context, mi::Core.MethodInstance, ::Val{…}, ::Type{…}, ::Type{…}, tt::Type{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Type{…}, ::Val{…}, ::Val{…})
@ Enzyme.Compiler ~/Dropbox/Julia/Enzyme/src/compiler.jl:9470
[10] #s2064#19732
@ ~/Dropbox/Julia/Enzyme/src/compiler.jl:9607 [inlined]
[11]
@ Enzyme.Compiler ./none:0
[12] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:707
[13] autodiff
@ ~/Dropbox/Julia/Enzyme/src/Enzyme.jl:473 [inlined]
[14] autodiff
@ ~/Dropbox/Julia/Enzyme/src/Enzyme.jl:537 [inlined]
[15] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{…}}, ::Duplicated{Vector{…}})
@ Enzyme ~/Dropbox/Julia/Enzyme/src/Enzyme.jl:504
[16] top-level scope
@ REPL[9]:1
Some type information was truncated. Use `show(err)` to see complete types.
v1.10:
julia> Enzyme.autodiff(Reverse, f, Duplicated(y, dy), Duplicated(u0, d_u0))
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield90 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %281 unordered, align 8, !dbg !433, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !240, !align !241
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %getfield18 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %53 unordered, align 8, !dbg !291, !tbaa !211, !alias.scope !215, !noalias !218, !nonnull !0, !dereferenceable !261, !align !262
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %48 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %47, align 8, !dbg !212, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
┌ Warning: TODO reverse jl_array_del_end zero-set used memset rather than runtime type of (false, nothing) in %61 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %60, align 8, !dbg !285, !tbaa !216, !alias.scope !220, !noalias !223
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
ERROR: Type Array does not have a definite size.
Stacktrace:
[1] sizeof(x::Type)
@ Base ./essentials.jl:631
[2] jl_array_del_end_rev(B::LLVM.IRBuilder, orig::LLVM.CallInst, gutils::Enzyme.Compiler.GradientUtils, tape::Nothing)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/rules/llvmrules.jl:1522
[3] jl_array_del_end_rev_cfunc(B::Ptr{…}, OrigCI::Ptr{…}, gutils::Ptr{…}, tape::Ptr{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/rules/llvmrules.jl:48
[4] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, runtimeActivity::Bool, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
@ Enzyme.API ~/.julia/packages/Enzyme/HXYPU/src/api.jl:253
[5] 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::Tuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:5096
[6] 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/HXYPU/src/compiler.jl:8189
[7] codegen
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:7028 [inlined]
[8] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9297
[9] _thunk
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9297 [inlined]
[10] cached_compilation
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9338 [inlined]
[11] thunkbase(ctx::LLVM.Context, mi::Core.MethodInstance, ::Val{…}, ::Type{…}, ::Type{…}, tt::Type{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Type{…}, ::Val{…}, ::Val{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9470
[12] #s2064#19667
@ ~/.julia/packages/Enzyme/HXYPU/src/compiler.jl:9607 [inlined]
[13]
@ Enzyme.Compiler ./none:0
[14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:602
[15] autodiff
@ ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:473 [inlined]
[16] autodiff
@ ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:537 [inlined]
[17] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{…}}, ::Duplicated{Vector{…}})
@ Enzyme ~/.julia/packages/Enzyme/HXYPU/src/Enzyme.jl:504
[18] top-level scope
@ REPL[11]:1
Some type information was truncated. Use `show(err)` to see complete types.
1.11 isn't expected to work atm.
And that error log for 1.10 implies you aren't using the linked branch? Since that line where the error occurs was explicitly changed to call somethign different (and the error messages changed)
@MasonProtter running this myself, it seems fine tho errs with a non enzyme issue edit: staticarrays dep is hard in my dev environment
julia> Enzyme.autodiff(Reverse, f, Duplicated(y, dy), Duplicated(u0, d_u0))
ERROR: UndefVarError: `_saveat` not defined
Stacktrace:
[1] f
@ ./REPL[6]:4 [inlined]
[2] diffejulia_f_1396wrap
@ ./REPL[6]:0
[3] macro expansion
@ ~/git/Enzyme.jl/src/compiler.jl:9227 [inlined]
[4] enzyme_call
@ ~/git/Enzyme.jl/src/compiler.jl:8793 [inlined]
[5] CombinedAdjointThunk
@ ~/git/Enzyme.jl/src/compiler.jl:8566 [inlined]
[6] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:491 [inlined]
[7] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:537 [inlined]
[8] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{Float64}}, ::Duplicated{Vector{Float64}})
@ Enzyme ~/git/Enzyme.jl/src/Enzyme.jl:504
[9] top-level scope
@ REPL[11]:1
Now hits
Caused by:
Stacktrace:
[1] ODEIntegrator
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/type.jl:88
[2] #__init#76
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:474
within MethodInstance for OrdinaryDiffEqCore.var"#__init#76"(::NTuple{13, Float64}, ::Tuple{}, ::Tuple{}, ::Nothing, ::Bool, ::Bool, ::Bool, ::Nothing, ::Nothing, ::Bool, ::Bool, ::Float64, ::Float64, ::Float64, ::Bool, ::Bool, ::Rational{Int64}, ::Nothing, ::Nothing, ::Rational{Int64}, ::Int64, ::Int64, ::Int64, ::Nothing, ::Nothing, ::Rational{Int64}, ::Nothing, ::Bool, ::Int64, ::Int64, ::typeof(DiffEqBase.ODE_DEFAULT_NORM), ::typeof(LinearAlgebra.opnorm), ::typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN), ::typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK), ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Int64, ::String, ::typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE), ::Symbol, ::Nothing, ::Bool, ::Bool, ::Bool, ::Bool, ::OrdinaryDiffEqCore.DefaultInit, ::Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, ::typeof(SciMLBase.__init), ::ODEProblem{Vector{Float64}, Tuple{Float64, Float64}, true, SciMLBase.NullParameters, ODEFunction{true, SciMLBase.FullSpecialize, typeof(lorenz!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, SciMLBase.StandardODEProblem}, ::Tsit5{typeof(OrdinaryDiffEqCore.trivial_limiter!), typeof(OrdinaryDiffEqCore.trivial_limiter!), Static.False}, ::Tuple{}, ::Tuple{}, ::Tuple{}, ::Type{Val{true}})
Stacktrace:
[1] ODEIntegrator
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/type.jl:88 [inlined]
[2] #__init#76
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:474
[3] __init (repeats 5 times)
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:11 [inlined]
[4] #__solve#75
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:6 [inlined]
[5] __solve
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:1 [inlined]
[6] #solve_call#44
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:612
[7] solve_call
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:569 [inlined]
[8] #solve_up#53
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:1084 [inlined]
[9] solve_up
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:1070 [inlined]
[10] #solve#51
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:1007 [inlined]
[11] solve
@ ~/.julia/packages/DiffEqBase/sIf7D/src/solve.jl:997 [inlined]
[12] f
@ ./REPL[14]:4 [inlined]
[13] diffejulia_f_3094wrap
@ ./REPL[14]:0
[14] macro expansion
@ ~/git/Enzyme.jl/src/compiler.jl:9227 [inlined]
[15] enzyme_call
@ ~/git/Enzyme.jl/src/compiler.jl:8793 [inlined]
[16] CombinedAdjointThunk
@ ~/git/Enzyme.jl/src/compiler.jl:8566 [inlined]
[17] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:491 [inlined]
[18] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:537 [inlined]
[19] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{Float64}}, ::Duplicated{Vector{Float64}})
@ Enzyme ~/git/Enzyme.jl/src/Enzyme.jl:504
[20] top-level scope
@ REPL[19]:1
which I presume setting a maxtypeoffset of like 1000 or loosetypeanalysis or something would resolve
With some more type info via https://github.com/EnzymeAD/Enzyme.jl/pull/1916 we now have
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/2CW9L/src/utils.jl:59
ERROR: ReadOnlyMemoryError()
Stacktrace:
[1] diffejulia_f_1197wrap
@ ./REPL[3]:0
[2] macro expansion
@ ~/git/Enzyme.jl/src/compiler.jl:9229 [inlined]
[3] enzyme_call
@ ~/git/Enzyme.jl/src/compiler.jl:8795 [inlined]
[4] CombinedAdjointThunk
@ ~/git/Enzyme.jl/src/compiler.jl:8568 [inlined]
[5] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:491 [inlined]
[6] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:537 [inlined]
[7] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{Float64}}, ::Duplicated{Vector{Float64}})
@ Enzyme ~/git/Enzyme.jl/src/Enzyme.jl:504
@ChrisRackauckas and/or @MasonProtter would you be able to help minimize the source of this error. I'm a bit confused why it's coming up
this segfaults:
using Enzyme, OrdinaryDiffEqTsit5
function lorenz!(du, u, p, t)
du[1] = 10.0(u[2] - u[1])
du[2] = u[1] * (28.0 - u[3]) - u[2]
du[3] = u[1] * u[2] - (8 / 3) * u[3]
end
function f(y::Array{Float64}, u0::Array{Float64})
tspan = (0.0, 3.0)
prob = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz!, u0, tspan)
sol = DiffEqBase.solve(prob, Tsit5())
return nothing
end;
u0 = [1.0; 0.0; 0.0]
d_u0 = zeros(3)
y = zeros(13)
dy = zeros(13)
Enzyme.autodiff(Reverse, f, Duplicated(y, dy), Duplicated(u0, d_u0))
On main this now appears completely resolved, hitting the fastpow stuff @ChrisRackauckas was working on.
As I presume that he has a fix in other repos, am going to close.
cannot handle unknown binary operator: %105 = and i32 %bitcast_coercion74, 8388607, !dbg !396
Stacktrace:
[1] &
@ ./int.jl:347
[2] fastlog2
@ ~/.julia/packages/DiffEqBase/vscDj/src/fastpow.jl:25
[3] fastpow
@ ~/.julia/packages/DiffEqBase/vscDj/src/fastpow.jl:66
[4] stepsize_controller!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/controllers.jl:145
[5] stepsize_controller!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/controllers.jl:5
[6] _loopfooter!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/integrator_utils.jl:226
Stacktrace:
[1] &
@ ./int.jl:347 [inlined]
[2] fastlog2
@ ~/.julia/packages/DiffEqBase/vscDj/src/fastpow.jl:25 [inlined]
[3] fastpow
@ ~/.julia/packages/DiffEqBase/vscDj/src/fastpow.jl:66 [inlined]
[4] stepsize_controller!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/controllers.jl:145 [inlined]
[5] stepsize_controller!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/controllers.jl:5 [inlined]
[6] _loopfooter!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/integrator_utils.jl:226
[7] loopfooter!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/integrators/integrator_utils.jl:207 [inlined]
[8] solve!
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:552
[9] #__solve#75
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:7 [inlined]
[10] __solve
@ ~/.julia/packages/OrdinaryDiffEqCore/55UVY/src/solve.jl:1 [inlined]
[11] #solve_call#44
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:612 [inlined]
[12] solve_call
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:569 [inlined]
[13] #solve_up#53
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:1084 [inlined]
[14] solve_up
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:1070 [inlined]
[15] #solve#51
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:1007 [inlined]
[16] solve
@ ~/.julia/packages/DiffEqBase/vscDj/src/solve.jl:997 [inlined]
[17] f
@ ./REPL[6]:4 [inlined]
[18] diffejulia_f_1333wrap
@ ./REPL[6]:0
[19] macro expansion
@ ~/git/Enzyme.jl/src/compiler.jl:9229 [inlined]
[20] enzyme_call
@ ~/git/Enzyme.jl/src/compiler.jl:8795 [inlined]
[21] CombinedAdjointThunk
@ ~/git/Enzyme.jl/src/compiler.jl:8568 [inlined]
[22] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:491 [inlined]
[23] autodiff
@ ~/git/Enzyme.jl/src/Enzyme.jl:537 [inlined]
[24] autodiff(::ReverseMode{false, false, FFIABI, false, false}, ::typeof(f), ::Duplicated{Vector{Float64}}, ::Duplicated{Vector{Float64}})
@ Enzyme ~/git/Enzyme.jl/src/Enzyme.jl:504
[25] top-level scope
@ REPL[11]:1
@wsmoses sorry, I messed up and forgot that [sources]
doesn't work in 1.10, so my 1.10 test wasn't actually on your branch, my bad.
Here's @ChrisRackauckas's MWE from Slack, though I get a different error message than him: