Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

ERROR: Enzyme compilation failed due to illegal type analysis. #1410

Open
jbrea opened this issue Apr 30, 2024 · 0 comments
Open

ERROR: Enzyme compilation failed due to illegal type analysis. #1410

jbrea opened this issue Apr 30, 2024 · 0 comments

Comments

@jbrea
Copy link

jbrea commented Apr 30, 2024

The following code worked with Enzyme 0.11.20 (julia 1.10.2) but fails with two different errors on Enzyme 0.12.0 (and main).
Apologies for the not so minimal MWE.

Setup
using Pkg
Pkg.activate(temp = true)
Pkg.add(["Distributions", "ComponentArrays", "ConcreteStructs"])
# Pkg.add(name = "Enzyme", version = "0.11.20")
# Pkg.add(name = "Enzyme", version = "0.12.0")
Pkg.add(name = "Enzyme", rev = "main")
using Distributions, Enzyme, ComponentArrays, ConcreteStructs

struct BiasedCoin end
parameters(::BiasedCoin) = ComponentArray= .5)
function logp(data, ::BiasedCoin, parameters)
    logp = 0.
    ρ = parameters.ρ
    for d in data
        logp += logpdf(Bernoulli(ρ), d)
    end
    logp
end
sigmoid(w) = 1/(1 + exp(-w))
@concrete struct HabituatingBiasedCoin
    w
end
HabituatingBiasedCoin() = HabituatingBiasedCoin(Base.RefValue(0.))
function initialize!(m::HabituatingBiasedCoin, parameters)
    m.w[] = parameters.w₀
end
parameters(::HabituatingBiasedCoin) = ComponentArray(w₀ = 0., η = 0.)
function logp(data, m::HabituatingBiasedCoin, parameters)
    initialize!(m, parameters)
    η = parameters.η
    logp = 0.
    for d in data
        ρ = sigmoid(m.w[])
        logp += logpdf(Bernoulli(ρ), d)
        m.w[] += η * (d - ρ)
    end
    logp
end

@concrete terse struct HessLogP{T}
    logp
    dlogp
    data
    ddata
    model::T
    dmodel
    parameters
    dparameters
end
function HessLogP(data, model, parameters = ComponentArray(parameters(model)))
    dd = _zero(data)
    _data = convert(typeof(dd), data)
    n = length(parameters)
    vx = ntuple(i -> begin t = _zero(parameters); t[i] = 1; t end, n)
    ddx = ntuple(_ -> _zero(parameters), n)
    HessLogP(Const([0.]), Const([1.]),
              BatchDuplicated(_data, ntuple(_ -> _zero(dd), n)), BatchDuplicated(_zero(dd), ntuple(_ -> _zero(dd), n)),
              _deep_ismutable(model) ? BatchDuplicated(model, ntuple(_ -> _zero(model), n)) : Const(model),
              _deep_ismutable(model) ? BatchDuplicated(_zero(model), ntuple(_ -> _zero(model), n)) : Const(model),
              BatchDuplicated(parameters, vx), BatchDuplicated(_zero(parameters), ddx))
end
function logp!(_logp, data, model, parameters)
    _logp[] = logp(data, model, parameters)
    nothing
end
function _grad1(logp, dlogp, data, ddata, model, params, dparams)
    autodiff_deferred(Reverse, logp!,
                      DuplicatedNoNeed(logp, dlogp),
                      DuplicatedNoNeed(data, ddata),
                      model,
                      Duplicated(params, dparams))
    nothing
end
function _grad2(logp, dlogp, data, ddata, model, dmodel, params, dparams)
    autodiff_deferred(Reverse, logp!,
                      DuplicatedNoNeed(logp, dlogp),
                      DuplicatedNoNeed(data, ddata),
                      DuplicatedNoNeed(model, dmodel),
                      Duplicated(params, dparams))
    nothing
end
function _hess(h::HessLogP{<:Const})
    autodiff(Forward, _grad1, h.logp, h.dlogp, h.data, h.ddata,
                              h.model, h.parameters, h.dparameters)
end
function _hess(h::HessLogP)
    autodiff(Forward, _grad2, h.logp, h.dlogp, h.data, h.ddata,
                             h.model, h.dmodel, h.parameters, h.dparameters)
end
_deep_ismutable(x::T) where T = _deep_ismutable(T)
function _deep_ismutable(x::Type)
    ismutabletype(x) && return true
    any(_deep_ismutable, fieldtypes(x))
end
_zero(x::AbstractArray) = _zero.(x)
_zero(x::Number) = zero(x)
_zero(x::Base.RefValue) = Ref(_zero(x[]))
_zero(x::Tuple) = _zero.(x)
_zero(x::NamedTuple{K}) where K = NamedTuple{K}(_zero.(values(x)))
function _zero(x::D) where D
    D.name.wrapper((_zero(getfield(x, f)) for f in fieldnames(D))...)
end
function (h::HessLogP)(ddx, x)
    h.parameters.val .= x
    h.dlogp.val .= 1
    _hess(h)
    for (i, v) in pairs(h.dparameters.dval)
        ddx[:, i] .= v
        v .= 0
    end
end

First Error

julia> m = BiasedCoin();

julia> p = parameters(m);

julia> h! = HessLogP(rand(0:1, 10), m);

julia> H = zeros(length(p), length(p));

julia> h!(H, p)
ERROR: Function to differentiate `MethodInstance for _grad1(::Vector{Float64}, ::Vector{Float64}, ::Vector{Int64}, ::Vector{Int64}, ::BiasedCoin, ::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(ρ = 1,)}}}, ::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(ρ = 1,)}}})` is guaranteed to return an error and doesn't make sense to autodiff. Giving up
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] macro expansion
    @ ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5718 [inlined]
  [3] macro expansion
    @ ./none:0 [inlined]
  [4] thunk(::Val{…}, ::Type{…}, ::Type{…}, tt::Type{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Val{…}, ::Type{…})
    @ Enzyme.Compiler ./none:0
  [5] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:382 [inlined]
  [6] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:300 [inlined]
  [7] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:284 [inlined]
  [8] _hess(h::HessLogP{Const{BiasedCoin}})
    @ Main ./REPL[22]:2
  [9] (::HessLogP{Const{BiasedCoin}})(ddx::Matrix{Float64}, x::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{…}}})
    @ Main ./REPL[32]:4
 [10] top-level scope
    @ REPL[54]:1
Some type information was truncated. Use `show(err)` to see complete types.

Second Error

julia> m = HabituatingBiasedCoin();

julia> p = parameters(m);

julia> h! = HessLogP(rand(0:1, 10), m);

julia> H = zeros(length(p), length(p));

julia> h!(H, p)
ERROR: Enzyme compilation failed due to illegal type analysis.
Current scope: 
; Function Attrs: mustprogress willreturn
define private fastcc "enzyme_type"="{[-1]:Float@double}" { double*, i64*, double*, double, double, i64 } @preprocess_augmented_julia_logp_5496({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) "enzyme_inactive" "enzyme_type"="{[-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}" "enzymejl_parmtype"="134081257877776" "enzymejl_parmtype_ref"="2" %0, [1 x {} addrspace(10)*] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double}" "enzymejl_parmtype"="134079833093776" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-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}" "enzymejl_parmtype"="134079821577360" "enzymejl_parmtype_ref"="1" %2) unnamed_addr #4 !dbg !734 {
top:
  %3 = call {}*** @julia.get_pgcstack() #15
  %ptls_field48 = getelementptr inbounds {}**, {}*** %3, i64 2
  %4 = bitcast {}*** %ptls_field48 to i64***
  %ptls_load4950 = load i64**, i64*** %4, align 8, !tbaa !49, !alias.scope !735, !noalias !738
  %5 = getelementptr inbounds i64*, i64** %ptls_load4950, i64 2
  %safepoint = load i64*, i64** %5, align 8, !tbaa !58, !alias.scope !740, !noalias !743
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #15, !dbg !745
  fence syncscope("singlethread") seq_cst
  %getfield_addr = getelementptr inbounds { {} addrspace(10)* }, { {} addrspace(10)* } addrspace(11)* %2, i64 0, i32 0, !dbg !746
  %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !746, !tbaa !58, !alias.scope !752, !noalias !755, !nonnull !17, !dereferenceable !159, !align !160
  %6 = addrspacecast {} addrspace(10)* %getfield to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !757
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %6, i64 0, i32 1, !dbg !757
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !757, !tbaa !82, !range !85, !alias.scope !759, !noalias !762
  %inbounds.not = icmp eq i64 %arraylen, 0, !dbg !757
  br i1 %inbounds.not, label %oob, label %idxend, !dbg !757

L23:                                              ; preds = %idxend11
  %7 = fneg double %arrayref, !dbg !764
  %8 = call double @julia_exp_5517(double %7) #16, !dbg !765
  %9 = fadd double %8, 1.000000e+00, !dbg !767
  %10 = fdiv double 1.000000e+00, %9, !dbg !769
  %11 = fcmp ult double %10, 0.000000e+00, !dbg !771
  %12 = fcmp ugt double %10, 1.000000e+00, !dbg !772
  %13 = or i1 %11, %12, !dbg !772
  br i1 %13, label %L42, label %L48.lr.ph, !dbg !772

L48.lr.ph:                                        ; preds = %L23
  %14 = shl nuw i64 %arraylen16, 3, !dbg !772
  %15 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !772
  %16 = bitcast i8* %15 to double*, !dbg !772
  %17 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !772
  %18 = bitcast i8* %17 to i64*, !dbg !772
  %19 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !772
  %20 = bitcast i8* %19 to double*, !dbg !772
  %21 = bitcast {} addrspace(10)* %0 to i64 addrspace(13)* addrspace(10)*
  %22 = addrspacecast i64 addrspace(13)* addrspace(10)* %21 to i8 addrspace(13)* addrspace(11)*
  %23 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %22, align 16, !alias.scope !777, !noalias !784
  br label %L48, !dbg !772

L42.loopexit:                                     ; preds = %L80
  br label %L42

L42:                                              ; preds = %L42.loopexit, %L23
  %.lcssa = phi double [ %10, %L23 ], [ %42, %L42.loopexit ], !dbg !769
  %current_task147 = getelementptr inbounds {}**, {}*** %3, i64 -14
  %current_task1 = bitcast {}*** %current_task147 to {}**
  %box = call noalias nonnull dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 134081330030496 to {}*) to {} addrspace(10)*)) #17, !dbg !772
  %24 = bitcast {} addrspace(10)* %box to double addrspace(10)*, !dbg !772
  store double %.lcssa, double addrspace(10)* %24, align 8, !dbg !772, !tbaa !207, !alias.scope !210, !noalias !786
  %25 = call nonnull {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 134081307354208 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 134081307350992 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %box, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 134079089467504 to {}*) to {} addrspace(10)*)) #18, !dbg !772
  %26 = addrspacecast {} addrspace(10)* %25 to {} addrspace(12)*, !dbg !772
  call void @ijl_throw({} addrspace(12)* %26) #19, !dbg !772
  unreachable, !dbg !772

L48:                                              ; preds = %L80, %L48.lr.ph
  %iv1 = phi i64 [ %iv.next, %L80 ], [ 0, %L48.lr.ph ]
  %27 = phi double [ %42, %L80 ], [ %10, %L48.lr.ph ]
  %28 = phi double [ %35, %L80 ], [ %arrayref, %L48.lr.ph ]
  %iv.next = add nuw nsw i64 %iv1, 1, !dbg !789
  %29 = shl i64 %iv1, 3, !dbg !789
  %30 = getelementptr i8, i8 addrspace(13)* %23, i64 %29, !dbg !789
  %31 = bitcast i8 addrspace(13)* %30 to i64 addrspace(13)*, !dbg !789
  %value_phi22 = load i64, i64 addrspace(13)* %31, align 8, !dbg !789, !tbaa !117, !alias.scope !790, !noalias !793
  %32 = sitofp i64 %value_phi22 to double, !dbg !795
  %33 = fsub double %32, %27, !dbg !801
  %34 = fmul double %arrayref14, %33, !dbg !802
  %35 = fadd double %28, %34, !dbg !803
  store double %35, double addrspace(11)* %54, align 8, !dbg !804, !tbaa !242, !alias.scope !806, !noalias !809
  %36 = getelementptr inbounds i64, i64* %18, i64 %iv1, !dbg !813
  store i64 %value_phi22, i64* %36, align 8, !dbg !813, !tbaa !117, !noalias !817, !invariant.group !818
  %37 = getelementptr inbounds double, double* %20, i64 %iv1, !dbg !813
  store double %35, double* %37, align 8, !dbg !813, !noalias !817, !invariant.group !819
  %38 = getelementptr inbounds double, double* %16, i64 %iv1, !dbg !813
  store double %27, double* %38, align 8, !dbg !813, !noalias !817, !invariant.group !820
  %exitcond.not = icmp eq i64 %iv.next, %arraylen16, !dbg !813
  br i1 %exitcond.not, label %L86.loopexit, label %L80, !dbg !815

L80:                                              ; preds = %L48
  %39 = fneg double %35, !dbg !764
  %40 = call double @julia_exp_5517(double %39) #20, !dbg !765
  %41 = fadd double %40, 1.000000e+00, !dbg !767
  %42 = fdiv double 1.000000e+00, %41, !dbg !769
  %43 = fcmp ult double %42, 0.000000e+00, !dbg !771
  %44 = fcmp ugt double %42, 1.000000e+00, !dbg !772
  %45 = or i1 %43, %44, !dbg !772
  br i1 %45, label %L42.loopexit, label %L48, !dbg !772

L86.loopexit:                                     ; preds = %L48
  br label %L86, !dbg !816

L86:                                              ; preds = %L86.loopexit, %idxend11
  %.sroa.0.0 = phi double* [ undef, %idxend11 ], [ %16, %L86.loopexit ]
  %.sroa.2.0 = phi i64* [ undef, %idxend11 ], [ %18, %L86.loopexit ]
  %.sroa.4.0 = phi double* [ undef, %idxend11 ], [ %20, %L86.loopexit ]
  %46 = insertvalue { double*, i64*, double*, double, double, i64 } undef, double* %.sroa.0.0, 0, !dbg !816
  %47 = insertvalue { double*, i64*, double*, double, double, i64 } %46, i64* %.sroa.2.0, 1, !dbg !816
  %48 = insertvalue { double*, i64*, double*, double, double, i64 } %47, double* %.sroa.4.0, 2, !dbg !816
  %49 = insertvalue { double*, i64*, double*, double, double, i64 } %48, double %arrayref, 3, !dbg !816
  %50 = insertvalue { double*, i64*, double*, double, double, i64 } %49, double %arrayref14, 4, !dbg !816
  %51 = insertvalue { double*, i64*, double*, double, double, i64 } %50, i64 %arraylen16, 5, !dbg !816
  ret { double*, i64*, double*, double, double, i64 } %51, !dbg !816

oob:                                              ; preds = %top
  %errorbox = alloca i64, align 8, !dbg !757
  store i64 1, i64* %errorbox, align 8, !dbg !757, !noalias !821
  %52 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(12)*, !dbg !757
  call void @ijl_bounds_error_ints({} addrspace(12)* noundef %52, i64* noundef nonnull align 8 %errorbox, i64 noundef 1) #19, !dbg !757
  unreachable, !dbg !757

idxend:                                           ; preds = %top
  %53 = addrspacecast {} addrspace(10)* %getfield to double addrspace(13)* addrspace(11)*, !dbg !757
  %arrayptr51 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %53, align 16, !dbg !757, !tbaa !113, !alias.scope !822, !noalias !762, !nonnull !17
  %arrayref = load double, double addrspace(13)* %arrayptr51, align 8, !dbg !757, !tbaa !117, !alias.scope !823, !noalias !826
  %getfield_addr2 = getelementptr inbounds [1 x {} addrspace(10)*], [1 x {} addrspace(10)*] addrspace(11)* %1, i64 0, i64 0, !dbg !828
  %getfield3 = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr2 unordered, align 8, !dbg !828, !tbaa !58, !alias.scope !829, !noalias !832, !nonnull !17, !dereferenceable !276, !align !276
  %54 = addrspacecast {} addrspace(10)* %getfield3 to double addrspace(11)*, !dbg !834
  store double %arrayref, double addrspace(11)* %54, align 8, !dbg !834, !tbaa !242, !alias.scope !806, !noalias !809
  %inbounds8.not = icmp eq i64 %arraylen, 1, !dbg !836
  br i1 %inbounds8.not, label %oob9, label %idxend11, !dbg !836

oob9:                                             ; preds = %idxend
  %errorbox10 = alloca i64, align 8, !dbg !836
  store i64 2, i64* %errorbox10, align 8, !dbg !836, !noalias !821
  %55 = addrspacecast {} addrspace(10)* %getfield to {} addrspace(12)*, !dbg !836
  call void @ijl_bounds_error_ints({} addrspace(12)* noundef %55, i64* noundef nonnull align 8 %errorbox10, i64 noundef 1) #19, !dbg !836
  unreachable, !dbg !836

idxend11:                                         ; preds = %idxend
  %56 = getelementptr inbounds double, double addrspace(13)* %arrayptr51, i64 1, !dbg !836
  %arrayref14 = load double, double addrspace(13)* %56, align 8, !dbg !836, !tbaa !117, !alias.scope !823, !noalias !826
  %57 = addrspacecast {} addrspace(10)* %0 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !842
  %arraylen_ptr15 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %57, i64 0, i32 1, !dbg !842
  %arraylen16 = load i64, i64 addrspace(11)* %arraylen_ptr15, align 8, !dbg !842, !tbaa !82, !range !85, !alias.scope !846, !noalias !849
  %.not = icmp eq i64 %arraylen16, 0, !dbg !851
  br i1 %.not, label %L86, label %L23, !dbg !843
}

 Type analysis state: 
<analysis>
{ double*, i64*, double*, double, double, i64 } undef: {[-1]:Anything}, intvals: {}
i64 0: {[-1]:Anything}, intvals: {0,}
{} addrspace(10)* addrspacecast ({}* inttoptr (i64 134081330030496 to {}*) to {} addrspace(10)*): {[-1]:Anything}, intvals: {}
i64 8: {[-1]:Integer}, intvals: {8,}
i64 1: {[-1]:Integer}, intvals: {1,}
{}* inttoptr (i64 134081330030496 to {}*): {[-1]:Anything}, intvals: {}
i64 3: {[-1]:Integer}, intvals: {3,}
double 0.000000e+00: {[-1]:Anything}, intvals: {}
double 1.000000e+00: {[-1]:Float@double}, intvals: {}
  %8 = call double @julia_exp_5517(double %7) #16, !dbg !81: {[-1]:Float@double}, intvals: {}
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !63, !tbaa !69, !range !72, !alias.scope !73, !noalias !76: {[-1]:Integer}, intvals: {}
  %3 = call {}*** @julia.get_pgcstack() #15: {}, intvals: {}
  %box = call noalias nonnull dereferenceable(8) {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 134081330030496 to {}*) to {} addrspace(10)*)) #17, !dbg !96: {[-1,-1]:Float@double}, intvals: {}
double* undef: {[-1]:Anything}, intvals: {}
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %6, i64 0, i32 1, !dbg !63: {[-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: {}
  %inbounds.not = icmp eq i64 %arraylen, 0, !dbg !63: {[-1]:Integer}, intvals: {}
  %11 = fcmp ult double %10, 0.000000e+00, !dbg !94: {[-1]:Integer}, intvals: {}
  %7 = fneg double %arrayref, !dbg !78: {[-1]:Float@double}, intvals: {}
  %iv.next = add nuw nsw i64 %iv1, 1, !dbg !124: {[-1]:Integer}, intvals: {1,}
  %9 = fadd double %8, 1.000000e+00, !dbg !85: {[-1]:Float@double}, intvals: {}
  %10 = fdiv double 1.000000e+00, %9, !dbg !90: {[-1]:Float@double}, intvals: {}
  %12 = fcmp ugt double %10, 1.000000e+00, !dbg !96: {[-1]:Integer}, intvals: {}
  %13 = or i1 %11, %12, !dbg !96: {[-1]:Integer}, intvals: {}
  %14 = shl nuw i64 %arraylen16, 3, !dbg !96: {[-1]:Integer}, intvals: {}
  %16 = bitcast i8* %15 to double*, !dbg !96: {[-1]:Pointer}, intvals: {}
  %18 = bitcast i8* %17 to i64*, !dbg !96: {[-1]:Pointer}, intvals: {}
  %20 = bitcast i8* %19 to double*, !dbg !96: {[-1]:Pointer}, intvals: {}
  %21 = bitcast {} addrspace(10)* %0 to i64 addrspace(13)* addrspace(10)*: {[-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: {}
  %22 = addrspacecast i64 addrspace(13)* addrspace(10)* %21 to i8 addrspace(13)* addrspace(11)*: {[-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: {}
  %23 = load i8 addrspace(13)*, i8 addrspace(13)* addrspace(11)* %22, align 16, !alias.scope !107, !noalias !114: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %46 = insertvalue { double*, i64*, double*, double, double, i64 } undef, double* %.sroa.0.0, 0, !dbg !170: {[0]:Pointer, [8]:Anything, [9]:Anything, [10]:Anything, [11]:Anything, [12]:Anything, [13]:Anything, [14]:Anything, [15]:Anything, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything}, intvals: {}
  %47 = insertvalue { double*, i64*, double*, double, double, i64 } %46, i64* %.sroa.2.0, 1, !dbg !170: {[0]:Pointer, [8]:Pointer, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything}, intvals: {}
  %current_task1 = bitcast {}*** %current_task147 to {}**: {}, intvals: {}
  %27 = phi double [ %42, %L80 ], [ %10, %L48.lr.ph ]: {[-1]:Float@double}, intvals: {}
  %28 = phi double [ %35, %L80 ], [ %arrayref, %L48.lr.ph ]: {[-1]:Float@double}, intvals: {}
  %29 = shl i64 %iv1, 3, !dbg !124: {[-1]:Integer}, intvals: {0,}
  %30 = getelementptr i8, i8 addrspace(13)* %23, i64 %29, !dbg !124: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %31 = bitcast i8 addrspace(13)* %30 to i64 addrspace(13)*, !dbg !124: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi22 = load i64, i64 addrspace(13)* %31, align 8, !dbg !124, !tbaa !125, !alias.scope !127, !noalias !130: {[-1]:Integer}, intvals: {}
  %32 = sitofp i64 %value_phi22 to double, !dbg !132: {[-1]:Float@double}, intvals: {}
  %33 = fsub double %32, %27, !dbg !144: {[-1]:Float@double}, intvals: {}
  %34 = fmul double %arrayref14, %33, !dbg !145: {[-1]:Float@double}, intvals: {}
  %35 = fadd double %28, %34, !dbg !147: {[-1]:Float@double}, intvals: {}
  %36 = getelementptr inbounds i64, i64* %18, i64 %iv1, !dbg !163: {[-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: {}
  %37 = getelementptr inbounds double, double* %20, i64 %iv1, !dbg !163: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %38 = getelementptr inbounds double, double* %16, i64 %iv1, !dbg !163: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %exitcond.not = icmp eq i64 %iv.next, %arraylen16, !dbg !163: {[-1]:Integer}, intvals: {}
  %39 = fneg double %35, !dbg !78: {[-1]:Float@double}, intvals: {}
  %40 = call double @julia_exp_5517(double %39) #20, !dbg !81: {[-1]:Float@double}, intvals: {}
  %41 = fadd double %40, 1.000000e+00, !dbg !85: {[-1]:Float@double}, intvals: {}
  %42 = fdiv double 1.000000e+00, %41, !dbg !90: {[-1]:Float@double}, intvals: {}
  %43 = fcmp ult double %42, 0.000000e+00, !dbg !94: {[-1]:Integer}, intvals: {}
  %44 = fcmp ugt double %42, 1.000000e+00, !dbg !96: {[-1]:Integer}, intvals: {}
  %45 = or i1 %43, %44, !dbg !96: {[-1]:Integer}, intvals: {}
  %.sroa.0.0 = phi double* [ undef, %idxend11 ], [ %16, %L86.loopexit ]: {[-1]:Pointer}, intvals: {}
  %.sroa.2.0 = phi i64* [ undef, %idxend11 ], [ %18, %L86.loopexit ]: {[-1]:Pointer}, intvals: {}
  %.sroa.4.0 = phi double* [ undef, %idxend11 ], [ %20, %L86.loopexit ]: {[-1]:Pointer}, intvals: {}
  %48 = insertvalue { double*, i64*, double*, double, double, i64 } %47, double* %.sroa.4.0, 2, !dbg !170: {[0]:Pointer, [8]:Pointer, [16]:Pointer, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything}, intvals: {}
  %49 = insertvalue { double*, i64*, double*, double, double, i64 } %48, double %arrayref, 3, !dbg !170: {[0]:Pointer, [8]:Pointer, [16]:Pointer, [24]:Float@double, [32]:Anything, [33]:Anything, [34]:Anything, [35]:Anything, [36]:Anything, [37]:Anything, [38]:Anything, [39]:Anything, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything}, intvals: {}
  %50 = insertvalue { double*, i64*, double*, double, double, i64 } %49, double %arrayref14, 4, !dbg !170: {[0]:Pointer, [8]:Pointer, [16]:Pointer, [24]:Float@double, [32]:Float@double, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything}, intvals: {}
  %51 = insertvalue { double*, i64*, double*, double, double, i64 } %50, i64 %arraylen16, 5, !dbg !170: {[-1]:Float@double}, intvals: {}
  %53 = addrspacecast {} addrspace(10)* %getfield to double addrspace(13)* addrspace(11)*, !dbg !63: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %arrayptr51 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %53, align 16, !dbg !63, !tbaa !176, !alias.scope !178, !noalias !76, !nonnull !17: {[-1]:Pointer}, intvals: {}
  %arrayref = load double, double addrspace(13)* %arrayptr51, align 8, !dbg !63, !tbaa !125, !alias.scope !179, !noalias !182: {[-1]:Float@double}, intvals: {}
  %54 = addrspacecast {} addrspace(10)* %getfield3 to double addrspace(11)*, !dbg !192: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %arrayref14 = load double, double addrspace(13)* %56, align 8, !dbg !194, !tbaa !125, !alias.scope !179, !noalias !182: {[-1]:Float@double}, intvals: {}
  %arraylen_ptr15 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %57, i64 0, i32 1, !dbg !200: {[-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: {}
  %arraylen16 = load i64, i64 addrspace(11)* %arraylen_ptr15, align 8, !dbg !200, !tbaa !69, !range !72, !alias.scope !205, !noalias !208: {[-1]:Integer}, intvals: {}
  %ptls_field48 = getelementptr inbounds {}**, {}*** %3, i64 2: {}, intvals: {}
  %4 = bitcast {}*** %ptls_field48 to i64***: {[-1]:Pointer}, intvals: {}
  %ptls_load4950 = load i64**, i64*** %4, align 8, !tbaa !18, !alias.scope !22, !noalias !25: {}, intvals: {}
  %safepoint = load i64*, i64** %5, align 8, !tbaa !27, !alias.scope !29, !noalias !32: {}, intvals: {}
  %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !35, !tbaa !27, !alias.scope !50, !noalias !55, !nonnull !17, !dereferenceable !61, !align !62: {[-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: {}
  %6 = addrspacecast {} addrspace(10)* %getfield to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !63: {[-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: {}
  %5 = getelementptr inbounds i64*, i64** %ptls_load4950, i64 2: {[-1]:Pointer}, intvals: {}
  %19 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !96: {[-1]:Pointer}, intvals: {}
{} addrspace(10)* %0: {[-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: {}
[1 x {} addrspace(10)*] addrspace(11)* %1: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,-1]:Float@double}, intvals: {}
{ {} addrspace(10)* } addrspace(11)* %2: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Integer, [-1,-1,9]:Integer, [-1,-1,10]:Integer, [-1,-1,11]:Integer, [-1,-1,12]:Integer, [-1,-1,13]:Integer, [-1,-1,14]:Integer, [-1,-1,15]:Integer, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer, [-1,-1,32]:Integer, [-1,-1,33]:Integer, [-1,-1,34]:Integer, [-1,-1,35]:Integer, [-1,-1,36]:Integer, [-1,-1,37]:Integer, [-1,-1,38]:Integer, [-1,-1,39]:Integer}, intvals: {}
i64* undef: {[-1]:Anything}, intvals: {}
  %iv1 = phi i64 [ %iv.next, %L80 ], [ 0, %L48.lr.ph ]: {[-1]:Integer}, intvals: {0,}
  %getfield_addr = getelementptr inbounds { {} addrspace(10)* }, { {} addrspace(10)* } addrspace(11)* %2, i64 0, i32 0, !dbg !35: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Integer, [-1,-1,9]:Integer, [-1,-1,10]:Integer, [-1,-1,11]:Integer, [-1,-1,12]:Integer, [-1,-1,13]:Integer, [-1,-1,14]:Integer, [-1,-1,15]:Integer, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer, [-1,-1,32]:Integer, [-1,-1,33]:Integer, [-1,-1,34]:Integer, [-1,-1,35]:Integer, [-1,-1,36]:Integer, [-1,-1,37]:Integer, [-1,-1,38]:Integer, [-1,-1,39]:Integer}, intvals: {}
  %17 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !96: {[-1]:Pointer}, intvals: {}
  %15 = call noalias nonnull i8* @malloc(i64 %14) #15, !dbg !96: {[-1]:Pointer}, intvals: {}
</analysis>

Illegal updateAnalysis prev:{[0]:Pointer, [8]:Pointer, [16]:Pointer, [24]:Float@double, [32]:Float@double, [40]:Anything, [41]:Anything, [42]:Anything, [43]:Anything, [44]:Anything, [45]:Anything, [46]:Anything, [47]:Anything} new: {[0]:Float@double, [1]:Float@double, [2]:Float@double, [3]:Float@double, [4]:Float@double, [5]:Float@double, [6]:Float@double, [7]:Float@double, [8]:Float@double, [9]:Float@double, [10]:Float@double, [11]:Float@double, [12]:Float@double, [13]:Float@double, [14]:Float@double, [15]:Float@double, [16]:Float@double, [17]:Float@double, [18]:Float@double, [19]:Float@double, [20]:Float@double, [21]:Float@double, [22]:Float@double, [23]:Float@double, [24]:Float@double, [25]:Float@double, [26]:Float@double, [27]:Float@double, [28]:Float@double, [29]:Float@double, [30]:Float@double, [31]:Float@double, [32]:Float@double, [33]:Float@double, [34]:Float@double, [35]:Float@double, [36]:Float@double, [37]:Float@double, [38]:Float@double, [39]:Float@double}
val:   %50 = insertvalue { double*, i64*, double*, double, double, i64 } %49, double %arrayref14, 4, !dbg !170 origin=  %51 = insertvalue { double*, i64*, double*, double, double, i64 } %50, i64 %arraylen16, 5, !dbg !170
MethodInstance for logp(::Vector{Int64}, ::HabituatingBiasedCoin{Base.RefValue{Float64}}, ::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(w₀ = 1, η = 2)}}})


Caused by:
Stacktrace:
 [1] logp
   @ ./REPL[16]:9

Stacktrace:
  [1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:1650
  [2] EnzymeCreateForwardDiff(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…})
    @ Enzyme.API ~/.julia/packages/Enzyme/y2lVn/src/api.jl:168
  [3] enzyme!(job::GPUCompiler.CompilerJob{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:3119
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:4962
  [5] codegen
    @ ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:4389 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5648
  [7] _thunk
    @ ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5648 [inlined]
  [8] cached_compilation
    @ ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5682 [inlined]
  [9] (::Enzyme.Compiler.var"#531#532"{})(ctx::LLVM.Context)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5748
 [10] JuliaContext(f::Enzyme.Compiler.var"#531#532"{}; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:52
 [11] JuliaContext(f::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/kqxyC/src/driver.jl:42
 [12] #s1952#530
    @ ~/.julia/packages/Enzyme/y2lVn/src/compiler.jl:5700 [inlined]
 [13] 
    @ Enzyme.Compiler ./none:0
 [14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
    @ Core ./boot.jl:602
 [15] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:382 [inlined]
 [16] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:300 [inlined]
 [17] autodiff
    @ ~/.julia/packages/Enzyme/y2lVn/src/Enzyme.jl:284 [inlined]
 [18] _hess(h::HessLogP{BatchDuplicated{HabituatingBiasedCoin{Base.RefValue{Float64}}, 2}})
    @ Main ./REPL[23]:2
 [19] (::HessLogP{BatchDuplicated{…}})(ddx::Matrix{Float64}, x::ComponentVector{Float64, Vector{…}, Tuple{…}})
    @ Main ./REPL[32]:4
 [20] top-level scope
    @ REPL[59]:1
Some type information was truncated. Use `show(err)` to see complete types.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant