Skip to content

[Julia 1.10] MethodError: no method matching insert_value!(::LLVM.IRBuilder, ::LLVM.UndefValue, ::Nothing, ::UInt64) #2786

@vchuravy

Description

@vchuravy

On Julia 1.10

using Optim
using Enzyme
using LinearAlgebra

function forward_optim(x, method)
    f(y) = sum(abs2, y .^ 2 .- x)
    y0 = ones(eltype(x), size(x))
    result = optimize(f, y0, method)
    y = Optim.minimizer(result)
    z = nothing
    return y, z
end

x = [4.0, 9.0]
J = Diagonal(0.5 ./ sqrt.(x))

Enzyme.jacobian(Forward, _x -> first(forward_optim(_x, LBFGS())), x)
ERROR: MethodError: no method matching insert_value!(::LLVM.IRBuilder, ::LLVM.UndefValue, ::Nothing, ::UInt64)

Closest candidates are:
  insert_value!(::LLVM.IRBuilder, ::LLVM.Value, ::LLVM.Value, ::Any, ::String)
   @ LLVM ~/.julia/packages/LLVM/iza6e/src/irbuilder.jl:302
  insert_value!(::LLVM.IRBuilder, ::LLVM.Value, ::LLVM.Value, ::Any)
   @ LLVM ~/.julia/packages/LLVM/iza6e/src/irbuilder.jl:302

Stacktrace:
  [1] batch_call_same_with_inverted_arg_if_active!(B::LLVM.IRBuilder, gutils::Enzyme.Compiler.GradientUtils, orig::LLVM.CallInst, args::Vector{…}, valTys::Vector{…}, lookup::Bool; kwargs::@Kwargs{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/gradientutils.jl:349
  [2] batch_call_same_with_inverted_arg_if_active!
    @ ~/.julia/packages/Enzyme/i2rgS/src/gradientutils.jl:313 [inlined]
  [3] common_setfield_fwd(offset::Int64, B::LLVM.IRBuilder, orig::LLVM.CallInst, gutils::Enzyme.Compiler.GradientUtils, normalR::Ptr{Ptr{LLVM.API.LLVMOpaqueValue}}, shadowR::Ptr{Ptr{LLVM.API.LLVMOpaqueValue}})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/rules/typeunstablerules.jl:1862
  [4] jlcall_fwd
    @ ~/.julia/packages/Enzyme/i2rgS/src/rules/llvmrules.jl:152 [inlined]
  [5] jlcall_fwd_cfunc(B::Ptr{LLVM.API.LLVMOpaqueBuilder}, OrigCI::Ptr{LLVM.API.LLVMOpaqueValue}, gutils::Ptr{Nothing}, normalR::Ptr{Ptr{LLVM.API.LLVMOpaqueValue}}, shadowR::Ptr{Ptr{LLVM.API.LLVMOpaqueValue}})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/rules/llvmrules.jl:75
  [6] EnzymeCreateForwardDiff(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, mode::Enzyme.API.CDerivativeMode, runtimeActivity::Bool, strongZero::Bool, width::Int64, additionalArg::Ptr{…}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…})
    @ Enzyme.API ~/.julia/packages/Enzyme/i2rgS/src/api.jl:342
  [7] macro expansion
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:2709 [inlined]
  [8] macro expansion
    @ ~/.julia/packages/LLVM/iza6e/src/base.jl:97 [inlined]
  [9] enzyme!(job::GPUCompiler.CompilerJob{…}, interp::Enzyme.Compiler.Interpreter.EnzymeInterpreter{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::Tuple{…} where N, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:2534
 [10] compile_unhooked(output::Symbol, job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget{GPUCompiler.NativeCompilerTarget}, Enzyme.Compiler.EnzymeCompilerParams{Enzyme.Compiler.PrimalCompilerParams}})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5138
 [11] compile(target::Symbol, job::GPUCompiler.CompilerJob; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/4uj4i/src/driver.jl:67
 [12] compile
    @ ~/.julia/packages/GPUCompiler/4uj4i/src/driver.jl:55 [inlined]
 [13] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget{GPUCompiler.NativeCompilerTarget}, Enzyme.Compiler.EnzymeCompilerParams{Enzyme.Compiler.PrimalCompilerParams}}, postopt::Bool)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5996
 [14] _thunk
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5994 [inlined]
 [15] cached_compilation
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:6051 [inlined]
 [16] thunkbase(mi::Core.MethodInstance, World::UInt64, FA::Type{…}, A::Type{…}, TT::Type, Mode::Enzyme.API.CDerivativeMode, width::Int64, ModifiedBetween::Tuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, StrongZero::Bool, edges::Vector{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:6167
 [17] thunk_generator(world::UInt64, source::Union{…}, FA::Type, A::Type, TT::Type, Mode::Enzyme.API.CDerivativeMode, Width::Int64, ModifiedBetween::Tuple{…} where N, ReturnPrimal::Bool, ShadowInit::Bool, ABI::Type, ErrIfFuncWritten::Bool, RuntimeActivity::Bool, StrongZero::Bool, self::Any, fakeworld::Any, fa::Type, a::Type, tt::Type, mode::Type, width::Type, modifiedbetween::Type, returnprimal::Type, shadowinit::Type, abi::Type, erriffuncwritten::Type, runtimeactivity::Type, strongzero::Type)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:6311
 [18] macro expansion
    @ ~/.julia/packages/Enzyme/i2rgS/src/rules/jitrules.jl:308 [inlined]
 [19] runtime_generic_fwd(::Type{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::typeof(setproperty!), ::Nothing, ::Nothing, ::OnceDifferentiable{…}, ::OnceDifferentiable{…}, ::OnceDifferentiable{…}, ::Symbol, ::Nothing, ::Nothing, ::Float64, ::Float64, ::Float64)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/i2rgS/src/rules/jitrules.jl:357
 [20] value_gradient!!
    @ ~/.julia/packages/NLSolversBase/n7XXO/src/interface.jl:82
 [21] initial_state
    @ ~/.julia/packages/Optim/7krni/src/multivariate/solvers/first_order/l_bfgs.jl:168
 [22] optimize
    @ ~/.julia/packages/Optim/7krni/src/multivariate/optimize/optimize.jl:43 [inlined]
 [23] #optimize#77
    @ ~/.julia/packages/Optim/7krni/src/multivariate/optimize/interface.jl:274 [inlined]
 [24] optimize (repeats 2 times)
    @ ~/.julia/packages/Optim/7krni/src/multivariate/optimize/interface.jl:264 [inlined]
 [25] forward_optim
    @ ./REPL[4]:4
 [26] #2
    @ ./REPL[7]:1 [inlined]
 [27] fwddiffe2julia__2_512wrap
    @ ./REPL[7]:0
 [28] macro expansion
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5923 [inlined]
 [29] enzyme_call
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5454 [inlined]
 [30] ForwardModeThunk
    @ ~/.julia/packages/Enzyme/i2rgS/src/compiler.jl:5356 [inlined]
 [31] autodiff
    @ ~/.julia/packages/Enzyme/i2rgS/src/Enzyme.jl:686 [inlined]
 [32] autodiff
    @ ~/.julia/packages/Enzyme/i2rgS/src/Enzyme.jl:555 [inlined]
 [33] macro expansion
    @ ~/.julia/packages/Enzyme/i2rgS/src/sugar.jl:683 [inlined]
 [34] gradient(::ForwardMode{false, FFIABI, false, false, false}, ::var"#2#3", ::Vector{Float64}; chunk::Nothing, shadows::Tuple{Tuple{Vector{Float64}, Vector{Float64}}})
    @ Enzyme ~/.julia/packages/Enzyme/i2rgS/src/sugar.jl:585
 [35] gradient(::ForwardMode{false, FFIABI, false, false, false}, ::var"#2#3", ::Vector{Float64})
    @ Enzyme ~/.julia/packages/Enzyme/i2rgS/src/sugar.jl:585
 [36] #jacobian#148
    @ ~/.julia/packages/Enzyme/i2rgS/src/sugar.jl:794 [inlined]
 [37] jacobian(::ForwardMode{false, FFIABI, false, false, false}, ::Function, ::Vector{Float64})
    @ Enzyme ~/.julia/packages/Enzyme/i2rgS/src/sugar.jl:793
 [38] top-level scope
    @ REPL[7]:1
Some type information was truncated. Use `show(err)` to see complete types.

With chunk=Val(1) it fails on a mismatched activity function

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions