SciMLSensitivity.jl icon indicating copy to clipboard operation
SciMLSensitivity.jl copied to clipboard

EnzymeVJP does not support BLAS

Open IlyaOrson opened this issue 2 years ago • 5 comments

This snippet segfaults on my machine.

using DiffEqFlux, Flux, OrdinaryDiffEq, DiffEqSensitivity

function system!(du, u, p, t, controller)

    α, β, γ, δ = 0.5f0, 1.0f0, 1.0f0, 1.0f0

    y1, y2 = u
    c1, c2 = controller(u, p)

    y1_prime = -(c1 + α * c1^2) * y1 + δ * c2
    y2_prime = (β * c1 - γ * c2) * y1

    @inbounds begin
        du[1] = y1_prime
        du[2] = y2_prime
    end
end

function loss(params, prob, tsteps)
    #sensealg=QuadratureAdjoint(autojacvec=EnzymeVJP())
    sensealg=InterpolatingAdjoint(autojacvec=ReverseDiffVJP())
    sol = solve(prob, Tsit5(); p=params, saveat=tsteps, sensealg)  # integrate ODE system
    return -Array(sol)[2, end]  # second variable, last value, maximize
end

u0 = [1.0f0, 0.0f0]
tspan = (0.0f0, 1.0f0)
tsteps = 0.0f0:0.01f0:1.0f0

controller = FastChain(
    FastDense(2, 12, tanh),
    FastDense(12, 12, tanh),
    FastDense(12, 2),
    (x, p) -> 5 * σ.(x),  # controllers ∈ (0, 5)
)

θ = initial_params(controller)

dudt!(du, u, p, t) = system!(du, u, p, t, controller)
prob = ODEProblem(dudt!, u0, tspan, θ)

loss(params) = loss(params, prob, tsteps)

Zygote.gradient(loss, θ)

Version info:

julia> versioninfo()
Julia Version 1.6.3
Commit ae8452a9e0 (2021-09-23 17:34 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: AMD Ryzen 7 4800H with Radeon Graphics
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, znver2)
  
(@v1.6) pkg> st DiffEqFlux Flux OrdinaryDiffEq DiffEqSensitivity Enzyme Zygote
      Status `C:\Users\ilyao\.julia\environments\v1.6\Project.toml`
  [aae7a2af] DiffEqFlux v1.43.0
  [41bf760c] DiffEqSensitivity v6.60.2
  [7da242da] Enzyme v0.7.2
  [587475ba] Flux v0.12.7
  [1dea7af3] OrdinaryDiffEq v5.64.1
  [e88e6eb3] Zygote v0.6.17
Error
; ModuleID = 'text'
source_filename = "text"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13"
target triple = "x86_64-w64-mingw32"

; Function Attrs: uwtable
define internal fastcc nonnull {} addrspace(10)* @julia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) unnamed_addr #0 !dbg !38 {
top:
  %4 = call {}*** @julia.ptls_states()
  %5 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 276052248 to {} addrspace(10)**) unordered, align 8, !dbg !40, !tbaa !41
  %6 = call {} addrspace(10)* bitcast ({}* (float)* @jl_box_float32 to {} addrspace(10)* (float)*)(float %3), !dbg !40
  %7 = call cc37 nonnull {} addrspace(10)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* @jl_apply_generic to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 1495400936 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nonnull %1, {} addrspace(10)* nonnull %2, {} addrspace(10)* %6, {} addrspace(10)* %5), !dbg !40
  ret {} addrspace(10)* undef, !dbg !40
}

; Function Attrs: readnone
declare {}*** @julia.ptls_states() local_unnamed_addr SciML/DiffEqFlux.jl#1

declare nonnull {} addrspace(10)* @jl_apply_generic({} addrspace(10)*, {} addrspace(10)**, i32) local_unnamed_addr SciML/DiffEqFlux.jl#2

; Function Attrs: uwtable
define internal nonnull align 4 dereferenceable(4) {}* @jl_box_float32(float %0) unnamed_addr #0 !dbg !46 {
top:
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !47
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !57
  %3 = or i64 %2, 3, !dbg !64
  %4 = bitcast i8* %1 to i64*, !dbg !63
  store i64 %3, i64* %4, align 8, !dbg !63, !tbaa !68
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !69
  %6 = bitcast i8* %5 to float*, !dbg !73
  store float %0, float* %6, align 4, !dbg !73, !tbaa !68
  %7 = bitcast i8* %5 to {}*, !dbg !74
  ret {}* %7, !dbg !56
}

declare {}* @jl_float32_type() local_unnamed_addr

declare i8* @malloc(i64) local_unnamed_addr

define void @julia__115_10537({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) local_unnamed_addr !dbg !77 {
entry:
  %4 = call {}*** @julia.ptls_states()
  %5 = call fastcc nonnull {} addrspace(10)* @julia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) #0, !dbg !78
  ret void
}

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) SciML/DiffEqFlux.jl#3

; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) SciML/DiffEqFlux.jl#3

define void @preprocess_julia__115_10537({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) local_unnamed_addr !dbg !79 {
entry:
  %4 = call {}*** @julia.ptls_states()
  %5 = call fastcc nonnull {} addrspace(10)* @julia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) #0, !dbg !80
  ret void
}

define internal void @diffejulia__115_10537({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* %"'", {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* %"'1", {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, {} addrspace(10)* %"'2", float %3) local_unnamed_addr !dbg !81 {
entry:
  %4 = call {}*** @julia.ptls_states()
  %5 = call fastcc nonnull {} addrspace(10)* @julia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) #0, !dbg !82
  br label %invertentry

allocsForInversion:                               ; No predecessors!

invertentry:                                      ; preds = %entry
}

; Function Attrs: uwtable
define internal fastcc nonnull {} addrspace(10)* @preprocess_julia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, float %3) unnamed_addr #0 !dbg !83 {
top:
  %4 = call {}*** @julia.ptls_states()
  %5 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 276052248 to {} addrspace(10)**) unordered, align 8, !dbg !84, !tbaa !41
  %6 = call {} addrspace(10)* bitcast ({}* (float)* @jl_box_float32 to {} addrspace(10)* (float)*)(float %3), !dbg !84
  %7 = call cc37 nonnull {} addrspace(10)* bitcast ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32)* @jl_apply_generic to {} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*, {} addrspace(10)*)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 1495400936 to {}*) to {} addrspace(10)*), {} addrspace(10)* nonnull %0, {} addrspace(10)* nonnull %1, {} addrspace(10)* nonnull %2, {} addrspace(10)* %6, {} addrspace(10)* %5), !dbg !84
  ret {} addrspace(10)* undef, !dbg !84
}

; Function Attrs: uwtable
define internal fastcc nonnull void @diffejulia_dudt__10540({} addrspace(10)* nonnull align 16 dereferenceable(40) %0, {} addrspace(10)* %"'", {} addrspace(10)* nonnull align 16 dereferenceable(40) %1, {} addrspace(10)* %"'1", {} addrspace(10)* nonnull align 16 dereferenceable(40) %2, {} addrspace(10)* %"'2", float %3) unnamed_addr #0 !dbg !85 {
top:
  %4 = call {}*** @julia.ptls_states()
  %5 = load atomic {} addrspace(10)*, {} addrspace(10)** inttoptr (i64 276052248 to {} addrspace(10)**) unordered, align 8, !dbg !86, !tbaa !41
  %"'il_phi" = phi {} addrspace(10)* , !dbg !86
  %6 = call {} addrspace(10)* bitcast ({}* (float)* @jl_box_float32 to {} addrspace(10)* (float)*)(float %3), !dbg !86
  %"'ip_phi" = phi {} addrspace(10)* , !dbg !86
  %7 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 0, !dbg !86
  store {} addrspace(10)* null, {} addrspace(10)** %7, align 8, !dbg !86
  %8 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 1, !dbg !86
  store {} addrspace(10)* null, {} addrspace(10)** %8, align 8, !dbg !86
  %9 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 2, !dbg !86
  store {} addrspace(10)* null, {} addrspace(10)** %9, align 8, !dbg !86
  %10 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %37, i64 0, !dbg !86
  store {} addrspace(10)* %0, {} addrspace(10)** %10, align 8, !dbg !86
  %11 = getelementptr inbounds i8, i8* %39, i64 0, !dbg !86
  store i8 1, i8* %11, align 1, !dbg !86
  %12 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 0, !dbg !86
  %13 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 0, !dbg !86
  store {} addrspace(10)* %"'", {} addrspace(10)** %13, align 8, !dbg !86
  %14 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %37, i64 1, !dbg !86
  store {} addrspace(10)* %1, {} addrspace(10)** %14, align 8, !dbg !86
  %15 = getelementptr inbounds i8, i8* %39, i64 1, !dbg !86
  store i8 1, i8* %15, align 1, !dbg !86
  %16 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 1, !dbg !86
  %17 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 1, !dbg !86
  store {} addrspace(10)* %"'1", {} addrspace(10)** %17, align 8, !dbg !86
  %18 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %37, i64 2, !dbg !86
  store {} addrspace(10)* %2, {} addrspace(10)** %18, align 8, !dbg !86
  %19 = getelementptr inbounds i8, i8* %39, i64 2, !dbg !86
  store i8 1, i8* %19, align 1, !dbg !86
  %20 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 2, !dbg !86
  %21 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 2, !dbg !86
  store {} addrspace(10)* %"'2", {} addrspace(10)** %21, align 8, !dbg !86
  %22 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %37, i64 3, !dbg !86
  store {} addrspace(10)* %6, {} addrspace(10)** %22, align 8, !dbg !86
  %23 = getelementptr inbounds i8, i8* %39, i64 3, !dbg !86
  store i8 1, i8* %23, align 1, !dbg !86
  %24 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 3, !dbg !86
  %25 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 3, !dbg !86
  store {} addrspace(10)* %"'ip_phi", {} addrspace(10)** %25, align 8, !dbg !86
  %26 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %37, i64 4, !dbg !86
  store {} addrspace(10)* %5, {} addrspace(10)** %26, align 8, !dbg !86
  %27 = getelementptr inbounds i8, i8* %39, i64 4, !dbg !86
  store i8 0, i8* %27, align 1, !dbg !86
  %28 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %38, i64 4, !dbg !86
  store {} addrspace(10)* null, {} addrspace(10)** %28, align 8, !dbg !86
  %29 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %0, {} addrspace(10)** %12, {} addrspace(10)* %1, {} addrspace(10)** %16, {} addrspace(10)* %2, {} addrspace(10)** %20, {} addrspace(10)* %6, {} addrspace(10)** %24, {} addrspace(10)* %5), !dbg !86
  call void inttoptr (i64 1452034352 to void ({} addrspace(10)*, {} addrspace(10)**, {} addrspace(10)**, {} addrspace(10)**, i8*, i32)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 1495400936 to {}*) to {} addrspace(10)*), {} addrspace(10)** %36, {} addrspace(10)** %37, {} addrspace(10)** %38, i8* %39, i32 5), !dbg !86
  %30 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 1, !dbg !86
  %31 = load {} addrspace(10)*, {} addrspace(10)** %30, align 8, !dbg !86
  %32 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 0, !dbg !86
  %33 = load {} addrspace(10)*, {} addrspace(10)** %32, align 8, !dbg !86
  %34 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %36, i64 2, !dbg !86
  %35 = load {} addrspace(10)*, {} addrspace(10)** %34, align 8, !dbg !86
  call void @llvm.julia.gc_preserve_end(token %29), !dbg !86
  br label %inverttop, !dbg !86

allocsForInversion:                               ; No predecessors!
  %36 = alloca {} addrspace(10)*, i64 3, align 8
  %37 = alloca {} addrspace(10)*, i32 5, align 8
  %38 = alloca {} addrspace(10)*, i32 5, align 8
  %39 = alloca i8, i32 5, align 1
  %40 = alloca {} addrspace(10)*, i64 0, align 8
  %41 = alloca {} addrspace(10)*, i32 5, align 8
  %42 = alloca {} addrspace(10)*, i32 5, align 8
  %43 = alloca i8, i32 5, align 1

inverttop:                                        ; preds = %top
  %44 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %41, i64 0
  store {} addrspace(10)* %0, {} addrspace(10)** %44, align 8
  %45 = getelementptr inbounds i8, i8* %43, i64 0
  store i8 1, i8* %45, align 1
  %46 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 0
  %47 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 0
  store {} addrspace(10)* %"'", {} addrspace(10)** %47, align 8
  %48 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %41, i64 1
  store {} addrspace(10)* %1, {} addrspace(10)** %48, align 8
  %49 = getelementptr inbounds i8, i8* %43, i64 1
  store i8 1, i8* %49, align 1
  %50 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 1
  %51 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 1
  store {} addrspace(10)* %"'1", {} addrspace(10)** %51, align 8
  %52 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %41, i64 2
  store {} addrspace(10)* %2, {} addrspace(10)** %52, align 8
  %53 = getelementptr inbounds i8, i8* %43, i64 2
  store i8 1, i8* %53, align 1
  %54 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 2
  %55 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 2
  store {} addrspace(10)* %"'2", {} addrspace(10)** %55, align 8
  %56 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %41, i64 3
  store {} addrspace(10)* %6, {} addrspace(10)** %56, align 8
  %57 = getelementptr inbounds i8, i8* %43, i64 3
  store i8 1, i8* %57, align 1
  %58 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 3
  %59 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 3
  store {} addrspace(10)* %"'ip_phi", {} addrspace(10)** %59, align 8
  %60 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %41, i64 4
  store {} addrspace(10)* %5, {} addrspace(10)** %60, align 8
  %61 = getelementptr inbounds i8, i8* %43, i64 4
  store i8 0, i8* %61, align 1
  %62 = getelementptr inbounds {} addrspace(10)*, {} addrspace(10)** %42, i64 4
  store {} addrspace(10)* null, {} addrspace(10)** %62, align 8
  %63 = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %0, {} addrspace(10)** %46, {} addrspace(10)* %1, {} addrspace(10)** %50, {} addrspace(10)* %2, {} addrspace(10)** %54, {} addrspace(10)* %6, {} addrspace(10)** %58, {} addrspace(10)* %5)
  call void inttoptr (i64 1452036880 to void ({} addrspace(10)*, {} addrspace(10)**, {} addrspace(10)**, {} addrspace(10)**, i8*, i32, {} addrspace(10)*)*)({} addrspace(10)* addrspacecast ({}* inttoptr (i64 1495400936 to {}*) to {} addrspace(10)*), {} addrspace(10)** %40, {} addrspace(10)** %41, {} addrspace(10)** %42, i8* %43, i32 5, {} addrspace(10)* %35)
  call void @llvm.julia.gc_preserve_end(token %63)
}

declare token @llvm.julia.gc_preserve_begin(...)

declare void @llvm.julia.gc_preserve_end(token)

; Function Attrs: uwtable
define internal nonnull align 4 dereferenceable(4) {}* @preprocess_jl_box_float32(float %0) unnamed_addr #0 !dbg !87 {
top:
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !88
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !93
  %3 = or i64 %2, 3, !dbg !97
  %4 = bitcast i8* %1 to i64*, !dbg !96
  store i64 %3, i64* %4, align 8, !dbg !96, !tbaa !68
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !99
  %6 = bitcast i8* %5 to float*, !dbg !101
  store float %0, float* %6, align 4, !dbg !101, !tbaa !68
  %7 = bitcast i8* %5 to {}*, !dbg !102
  ret {}* %7, !dbg !92
}

; Function Attrs: uwtable
define internal nonnull align 4 dereferenceable(4) { i8*, {}*, {}* } @fakeaugmented_jl_box_float32(float %0) unnamed_addr #0 !dbg !104 {
top:
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !105
  %"'mi" = phi i8* , !dbg !110
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !110
  %"'il_phi" = phi i64 , !dbg !114
  %3 = or i64 %2, 3, !dbg !114
  %4 = bitcast i8* %1 to i64*, !dbg !113
  store i64 %3, i64* %4, align 8, !dbg !113, !tbaa !68
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !116
  %6 = bitcast i8* %5 to float*, !dbg !118
  store float %0, float* %6, align 4, !dbg !118, !tbaa !68
  %7 = bitcast i8* %5 to {}*, !dbg !119
  %8 = insertvalue { i8*, {}*, {}* } undef, {}* %7, 1, !dbg !109
  ret { i8*, {}*, {}* } %8, !dbg !109

allocsForInversion:                               ; No predecessors!
}

attributes #0 = { uwtable "frame-pointer"="all" }
attributes SciML/DiffEqFlux.jl#1 = { readnone "enzyme_inactive" }
attributes SciML/DiffEqFlux.jl#2 = { "thunk" }
attributes SciML/DiffEqFlux.jl#3 = { argmemonly nounwind willreturn }

!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2, !5, !7, !9, !10, !11, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37}

!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!3 = !DIFile(filename: "REPL[15]", directory: ".")
!4 = !{}
!5 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !6, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!6 = !DIFile(filename: "C:\\Users\\ilyao\\.julia\\packages\\DiffEqSensitivity\\ItIGE\\src\\adjoint_common.jl", directory: ".")
!7 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!8 = !DIFile(filename: "C:\\Users\\ilyao\\.julia\\packages\\GPUCompiler\\9rK1I\\src\\runtime.jl", directory: ".")
!9 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!10 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!11 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!12 = !DIFile(filename: "C:\\Users\\ilyao\\.julia\\packages\\Enzyme\\g5epq\\src\\compiler.jl", directory: ".")
!13 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!14 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!15 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!16 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!17 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!18 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!19 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!20 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!21 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!22 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!23 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!24 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!25 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!26 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!27 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!28 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!29 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!30 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!31 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!32 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!33 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!34 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!35 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !8, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!36 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!37 = distinct !DICompileUnit(language: DW_LANG_Julia, file: !12, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: LineTablesOnly, enums: !4, nameTableKind: None)
!38 = distinct !DISubprogram(name: "dudt!", linkageName: "julia_dudt!_10540", scope: null, file: !3, line: 1, type: !39, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!39 = !DISubroutineType(types: !4)
!40 = !DILocation(line: 1, scope: !38)
!41 = !{!42, !42, i64 0}
!42 = !{!"jtbaa_binding", !43, i64 0}
!43 = !{!"jtbaa_data", !44, i64 0}
!44 = !{!"jtbaa", !45, i64 0}
!45 = !{!"jtbaa"}
!46 = distinct !DISubprogram(name: "box_float32", linkageName: "julia_box_float32_14843", scope: null, file: !8, line: 219, type: !39, scopeLine: 219, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!47 = !DILocation(line: 95, scope: !48, inlinedAt: !49)
!48 = distinct !DISubprogram(name: "malloc;", linkageName: "malloc", scope: !8, file: !8, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!49 = !DILocation(line: 190, scope: !50, inlinedAt: !51)
!50 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !8, file: !8, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!51 = !DILocation(line: 0, scope: !52, inlinedAt: !54)
!52 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !53, file: !53, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!53 = !DIFile(filename: "none", directory: ".")
!54 = !DILocation(line: 0, scope: !55, inlinedAt: !56)
!55 = distinct !DISubprogram(name: "box;", linkageName: "box", scope: !53, file: !53, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!56 = !DILocation(line: 219, scope: !46)
!57 = !DILocation(line: 45, scope: !58, inlinedAt: !60)
!58 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !59, file: !59, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!59 = !DIFile(filename: "C:\\Users\\ilyao\\.julia\\packages\\LLVM\\wnejv\\src\\interop\\base.jl", directory: ".")
!60 = !DILocation(line: 148, scope: !50, inlinedAt: !61)
!61 = !DILocation(line: 148, scope: !62, inlinedAt: !63)
!62 = distinct !DISubprogram(name: "type_tag;", linkageName: "type_tag", scope: !8, file: !8, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!63 = !DILocation(line: 194, scope: !50, inlinedAt: !51)
!64 = !DILocation(line: 332, scope: !65, inlinedAt: !67)
!65 = distinct !DISubprogram(name: "|;", linkageName: "|", scope: !66, file: !66, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!66 = !DIFile(filename: "int.jl", directory: ".")
!67 = !DILocation(line: 923, scope: !65, inlinedAt: !63)
!68 = !{!43, !43, i64 0}
!69 = !DILocation(line: 159, scope: !70, inlinedAt: !72)
!70 = distinct !DISubprogram(name: "+;", linkageName: "+", scope: !71, file: !71, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!71 = !DIFile(filename: "pointer.jl", directory: ".")
!72 = !DILocation(line: 197, scope: !50, inlinedAt: !51)
!73 = !DILocation(line: 198, scope: !50, inlinedAt: !51)
!74 = !DILocation(line: 130, scope: !75, inlinedAt: !76)
!75 = distinct !DISubprogram(name: "unsafe_pointer_to_objref;", linkageName: "unsafe_pointer_to_objref", scope: !71, file: !71, type: !39, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!76 = !DILocation(line: 200, scope: !50, inlinedAt: !51)
!77 = distinct !DISubprogram(name: "#115", linkageName: "julia_#115_10537", scope: null, file: !6, line: 196, type: !39, scopeLine: 196, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!78 = !DILocation(line: 197, scope: !77)
!79 = distinct !DISubprogram(name: "#115", linkageName: "julia_#115_10537", scope: null, file: !6, line: 196, type: !39, scopeLine: 196, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!80 = !DILocation(line: 197, scope: !79)
!81 = distinct !DISubprogram(name: "#115", linkageName: "julia_#115_10537", scope: null, file: !6, line: 196, type: !39, scopeLine: 196, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !5, retainedNodes: !4)
!82 = !DILocation(line: 197, scope: !81)
!83 = distinct !DISubprogram(name: "dudt!", linkageName: "julia_dudt!_10540", scope: null, file: !3, line: 1, type: !39, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!84 = !DILocation(line: 1, scope: !83)
!85 = distinct !DISubprogram(name: "dudt!", linkageName: "julia_dudt!_10540", scope: null, file: !3, line: 1, type: !39, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2, retainedNodes: !4)
!86 = !DILocation(line: 1, scope: !85)
!87 = distinct !DISubprogram(name: "box_float32", linkageName: "julia_box_float32_14843", scope: null, file: !8, line: 219, type: !39, scopeLine: 219, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!88 = !DILocation(line: 95, scope: !48, inlinedAt: !89)
!89 = !DILocation(line: 190, scope: !50, inlinedAt: !90)
!90 = !DILocation(line: 0, scope: !52, inlinedAt: !91)
!91 = !DILocation(line: 0, scope: !55, inlinedAt: !92)
!92 = !DILocation(line: 219, scope: !87)
!93 = !DILocation(line: 45, scope: !58, inlinedAt: !94)
!94 = !DILocation(line: 148, scope: !50, inlinedAt: !95)
!95 = !DILocation(line: 148, scope: !62, inlinedAt: !96)
!96 = !DILocation(line: 194, scope: !50, inlinedAt: !90)
!97 = !DILocation(line: 332, scope: !65, inlinedAt: !98)
!98 = !DILocation(line: 923, scope: !65, inlinedAt: !96)
!99 = !DILocation(line: 159, scope: !70, inlinedAt: !100)
!100 = !DILocation(line: 197, scope: !50, inlinedAt: !90)
!101 = !DILocation(line: 198, scope: !50, inlinedAt: !90)
!102 = !DILocation(line: 130, scope: !75, inlinedAt: !103)
!103 = !DILocation(line: 200, scope: !50, inlinedAt: !90)
!104 = distinct !DISubprogram(name: "box_float32", linkageName: "julia_box_float32_14843", scope: null, file: !8, line: 219, type: !39, scopeLine: 219, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !26, retainedNodes: !4)
!105 = !DILocation(line: 95, scope: !48, inlinedAt: !106)
!106 = !DILocation(line: 190, scope: !50, inlinedAt: !107)
!107 = !DILocation(line: 0, scope: !52, inlinedAt: !108)
!108 = !DILocation(line: 0, scope: !55, inlinedAt: !109)
!109 = !DILocation(line: 219, scope: !104)
!110 = !DILocation(line: 45, scope: !58, inlinedAt: !111)
!111 = !DILocation(line: 148, scope: !50, inlinedAt: !112)
!112 = !DILocation(line: 148, scope: !62, inlinedAt: !113)
!113 = !DILocation(line: 194, scope: !50, inlinedAt: !107)
!114 = !DILocation(line: 332, scope: !65, inlinedAt: !115)
!115 = !DILocation(line: 923, scope: !65, inlinedAt: !113)
!116 = !DILocation(line: 159, scope: !70, inlinedAt: !117)
!117 = !DILocation(line: 197, scope: !50, inlinedAt: !107)
!118 = !DILocation(line: 198, scope: !50, inlinedAt: !107)
!119 = !DILocation(line: 130, scope: !75, inlinedAt: !120)
!120 = !DILocation(line: 200, scope: !50, inlinedAt: !107)

; Function Attrs: uwtable
define internal nonnull align 4 dereferenceable(4) {}* @preprocess_jl_box_float32(float %0) unnamed_addr #0 !dbg !87 {
top:
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !88
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !93
  %3 = or i64 %2, 3, !dbg !97
  %4 = bitcast i8* %1 to i64*, !dbg !96
  store i64 %3, i64* %4, align 8, !dbg !96, !tbaa !68
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !99
  %6 = bitcast i8* %5 to float*, !dbg !101
  store float %0, float* %6, align 4, !dbg !101, !tbaa !68
  %7 = bitcast i8* %5 to {}*, !dbg !102
  ret {}* %7, !dbg !92
}

val: i64 8 - {[-1]:Integer} int: {8,}
val: i64 3 - {[-1]:Integer} int: {3,}
val:   %7 = bitcast i8* %5 to {}*, !dbg !70 - {[-1]:Pointer, [-1,0]:Float@float} int: {}
val:   %6 = bitcast i8* %5 to float*, !dbg !69 - {[-1]:Pointer, [-1,0]:Float@float} int: {}
val:   %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !50 - {} int: {}
val:   %4 = bitcast i8* %1 to i64*, !dbg !56 - {[-1]:Pointer, [-1,8]:Float@float} int: {}
val:   ret {}* %7, !dbg !49 - {} int: {}
val: i64* bitcast ({}* ()* @jl_float32_type to i64*) - {[-1]:Pointer} int: {}
val:   %5 = getelementptr i8, i8* %1, i64 8, !dbg !65 - {[-1]:Pointer, [-1,0]:Float@float} int: {}
val:   %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !40 - {[-1]:Pointer, [-1,8]:Float@float} int: {}
val:   store i64 %3, i64* %4, align 8, !dbg !56, !tbaa !61 - {} int: {}
val:   store float %0, float* %6, align 4, !dbg !69, !tbaa !61 - {} int: {}
val:   %3 = or i64 %2, 3, !dbg !57 - {} int: {}
val: declare {}* @jl_float32_type() local_unnamed_addr
 - {[-1]:Pointer} int: {}
val: float %0 - {[-1]:Float@float} int: {}
fn: ; Function Attrs: uwtable
define internal nonnull align 4 dereferenceable(4) {}* @preprocess_jl_box_float32(float %0) unnamed_addr #0 !dbg !87 {
top:
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !88
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !93
  %3 = or i64 %2, 3, !dbg !97
  %4 = bitcast i8* %1 to i64*, !dbg !96
  store i64 %3, i64* %4, align 8, !dbg !96, !tbaa !68
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !99
  %6 = bitcast i8* %5 to float*, !dbg !101
  store float %0, float* %6, align 4, !dbg !101, !tbaa !68
  %7 = bitcast i8* %5 to {}*, !dbg !102
  ret {}* %7, !dbg !92
}

<analysis>
i64 8: {[-1]:Integer}, intvals: {8,}
i64 3: {[-1]:Integer}, intvals: {3,}
  %7 = bitcast i8* %5 to {}*, !dbg !70: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %6 = bitcast i8* %5 to float*, !dbg !69: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %2 = load i64, i64* bitcast ({}* ()* @jl_float32_type to i64*), align 4, !dbg !50: {}, intvals: {}
  %4 = bitcast i8* %1 to i64*, !dbg !56: {[-1]:Pointer, [-1,8]:Float@float}, intvals: {}
  ret {}* %7, !dbg !49: {}, intvals: {}
i64* bitcast ({}* ()* @jl_float32_type to i64*): {[-1]:Pointer}, intvals: {}
  %5 = getelementptr i8, i8* %1, i64 8, !dbg !65: {[-1]:Pointer, [-1,0]:Float@float}, intvals: {}
  %1 = call dereferenceable_or_null(12) i8* @malloc(i64 12), !dbg !40: {[-1]:Pointer, [-1,8]:Float@float}, intvals: {}
  store i64 %3, i64* %4, align 8, !dbg !56, !tbaa !61: {}, intvals: {}
  store float %0, float* %6, align 4, !dbg !69, !tbaa !61: {}, intvals: {}
  %3 = or i64 %2, 3, !dbg !57: {}, intvals: {}
declare {}* @jl_float32_type() local_unnamed_addr
: {[-1]:Pointer}, intvals: {}
float %0: {[-1]:Float@float}, intvals: {}
</analysis>
could not deduce type of integer   %4 = bitcast i8* %1 to i64*, !dbg !56 num:8 q:{[]:Pointer, [8]:Float@float}
warning: C:\Users\ilyao\.julia\packages\GPUCompiler\9rK1I\src\runtime.jl:194:0: failed to deduce type of value   %4 = bitcast i8* %1 to i64*, !dbg !56
Assertion failed: 0 && "could not deduce type of integer", file /workspace/srcdir/Enzyme/enzyme/Enzyme/TypeAnalysis/TypeAnalysis.cpp, line 4633

signal (22): SIGABRT
in expression starting at REPL[19]:1
crt_sig_handler at /cygdrive/c/buildbot/worker/package_win64/build/src\signals-win.c:93
raise at C:\WINDOWS\System32\msvcrt.dll (unknown line)
abort at C:\WINDOWS\System32\msvcrt.dll (unknown line)
assert at C:\WINDOWS\System32\msvcrt.dll (unknown line)
firstPointer at /workspace/srcdir/Enzyme/enzyme/Enzyme/TypeAnalysis\TypeAnalysis.cpp:4633
visitStoreInst at /workspace/srcdir/Enzyme/enzyme/Enzyme\AdjointGenerator.h:700
visitStore at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:173 [inlined]
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:173
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\InstVisitor.h:112 [inlined]
CreateAugmentedPrimal at /workspace/srcdir/Enzyme/enzyme/Enzyme\EnzymeLogic.cpp:1846
visitCallInst at /workspace/srcdir/Enzyme/enzyme/Enzyme\AdjointGenerator.h:7823
delegateCallInst at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\InstVisitor.h:299 [inlined]
visitCall at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:209 [inlined]
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:209
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\InstVisitor.h:112 [inlined]
CreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme\EnzymeLogic.cpp:3313
visitCallInst at /workspace/srcdir/Enzyme/enzyme/Enzyme\AdjointGenerator.h:8135
delegateCallInst at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\InstVisitor.h:299 [inlined]
visitCall at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:209 [inlined]
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\Instruction.def:209
visit at /opt/x86_64-w64-mingw32/x86_64-w64-mingw32/sys-root/usr/local/include/llvm/IR\InstVisitor.h:112 [inlined]
CreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme\EnzymeLogic.cpp:3313
EnzymeCreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme\CApi.cpp:366
EnzymeCreatePrimalAndGradient at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\api.jl:94
enzyme! at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\compiler.jl:1160
unknown function (ip: 00000000024beb8e)
#codegen#34 at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\compiler.jl:1455
codegen##kw at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\compiler.jl:1323 [inlined]
_thunk at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\compiler.jl:1822
unknown function (ip: 0000000000f161e0)
cached_compilation at C:\Users\ilyao\.julia\packages\GPUCompiler\9rK1I\src\cache.jl:89
thunk at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\compiler.jl:1871
autodiff at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\Enzyme.jl:169 [inlined]
autodiff at C:\Users\ilyao\.julia\packages\Enzyme\g5epq\src\Enzyme.jl:188 [inlined]
_vecjacobian! at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\derivative_wrappers.jl:496
#vecjacobian!#37 at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\derivative_wrappers.jl:224 [inlined]
vecjacobian! at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\derivative_wrappers.jl:224 [inlined]
ODEQuadratureAdjointSensitivityFunction at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\quadrature_adjoint.jl:24
ODEFunction at C:\Users\ilyao\.julia\packages\SciMLBase\h4Gxc\src\scimlfunctions.jl:334 [inlined]
initialize! at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\perform_step\low_order_rk_perform_step.jl:623
#__init#472 at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:456
__init##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:67
__init##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:67 [inlined]
__init##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:67 [inlined]
__init##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:67 [inlined]
__init##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:67 [inlined]
#__solve#471 at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:4 [inlined]
__solve##kw at C:\Users\ilyao\.julia\packages\OrdinaryDiffEq\Zi9Zh\src\solve.jl:4 [inlined]
#solve_call#42 at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:61 [inlined]
solve_call##kw at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:48 [inlined]
#solve_up#44 at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:87
solve_up##kw at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:78 [inlined]
#solve#43 at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:73 [inlined]
solve##kw at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:68
unknown function (ip: 0000000000f06511)
#_adjoint_sensitivities#209 at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\quadrature_adjoint.jl:253
unknown function (ip: 0000000000eb6160)
_adjoint_sensitivities##kw at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\quadrature_adjoint.jl:251
_adjoint_sensitivities##kw at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\quadrature_adjoint.jl:251
unknown function (ip: 0000000000eb4a56)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1703 [inlined]
do_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\builtins.c:670
#adjoint_sensitivities#71 at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\sensitivity_interface.jl:6
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1703 [inlined]
do_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\builtins.c:670
adjoint_sensitivities##kw at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\sensitivity_interface.jl:6
adjoint_sensitivity_backpass at C:\Users\ilyao\.julia\packages\DiffEqSensitivity\ItIGE\src\concrete_solve.jl:272
ZBack at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\chainrules.jl:91 [inlined]
kw_zpullback at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\chainrules.jl:117
SciML/DiffEqFlux.jl#209 at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\lib\lib.jl:203 [inlined]
#1753#back at C:\Users\ilyao\.julia\packages\ZygoteRules\AIbCs\src\adjoint.jl:67
unknown function (ip: 0000000000eb2957)
Pullback at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:73 [inlined]
Pullback at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface2.jl:0
SciML/DiffEqFlux.jl#209 at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\lib\lib.jl:203
#1753#back at C:\Users\ilyao\.julia\packages\ZygoteRules\AIbCs\src\adjoint.jl:67
unknown function (ip: 0000000000eb0d27)
Pullback at C:\Users\ilyao\.julia\packages\DiffEqBase\FtYIB\src\solve.jl:68 [inlined]
Pullback at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface2.jl:0
Pullback at .\REPL[5]:3 [inlined]
Pullback at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface2.jl:0
Pullback at .\REPL[18]:1 [inlined]
Pullback at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface2.jl:0
SciML/DiffEqFlux.jl#46 at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface.jl:41
unknown function (ip: 0000000000ead23a)
gradient at C:\Users\ilyao\.julia\packages\Zygote\TaBlo\src\compiler\interface.jl:76
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1703 [inlined]
do_call at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:115
eval_value at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:204
eval_stmt_value at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:155 [inlined]
eval_body at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:576
jl_interpret_toplevel_thunk at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:670
jl_toplevel_eval_flex at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:877
jl_toplevel_eval_flex at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:825
jl_toplevel_eval_flex at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:825
eval_body at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:525
eval_body at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:490
jl_interpret_toplevel_thunk at /cygdrive/c/buildbot/worker/package_win64/build/src\interpreter.c:670
jl_toplevel_eval_flex at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:877
jl_toplevel_eval at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:886 [inlined]
jl_toplevel_eval_in at /cygdrive/c/buildbot/worker/package_win64/build/src\toplevel.c:929
eval at .\boot.jl:360 [inlined]
eval_user_input at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:139
repl_backend_loop at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:200
start_repl_backend at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:185
#run_repl#42 at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:317
run_repl at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.6\REPL\src\REPL.jl:305
#874 at .\client.jl:387
jfptr_YY.874_32319.clone_1 at C:\Users\ilyao\.julia\juliaup\julia-1.6.3+0~x64\lib\julia\sys.dll (unknown line)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1703 [inlined]
jl_f__call_latest at /cygdrive/c/buildbot/worker/package_win64/build/src\builtins.c:714
#invokelatest#2 at .\essentials.jl:708 [inlined]
invokelatest at .\essentials.jl:706 [inlined]
run_main_repl at .\client.jl:372
exec_options at .\client.jl:302
_start at .\client.jl:485
jfptr__start_22917.clone_1 at C:\Users\ilyao\.julia\juliaup\julia-1.6.3+0~x64\lib\julia\sys.dll (unknown line)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1703 [inlined]
true_main at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:560
repl_entrypoint at /cygdrive/c/buildbot/worker/package_win64/build/src\jlapi.c:702
mainCRTStartup at /cygdrive/c/buildbot/worker/package_win64/build/cli\loader_exe.c:51
BaseThreadInitThunk at C:\WINDOWS\System32\KERNEL32.DLL (unknown line)
RtlUserThreadStart at C:\WINDOWS\SYSTEM32\ntdll.dll (unknown line)
Allocations: 321466587 (Pool: 321420697; Big: 45890); GC: 135

IlyaOrson avatar Oct 19 '21 04:10 IlyaOrson

@wsmoses ?

ChrisRackauckas avatar Oct 19 '21 11:10 ChrisRackauckas

https://github.com/wsmoses/Enzyme.jl/pull/151 will partially resolve (or rather will resolve the immediate error).

This, however, eventually hits a blas kernel (sgemv_64_) which @tansongchen was looking into adding so I'll defer the remainder to them.

wsmoses avatar Oct 20 '21 21:10 wsmoses

let me see...

tansongchen avatar Oct 20 '21 23:10 tansongchen

What's the current state of this?

ChrisRackauckas avatar Jun 11 '22 03:06 ChrisRackauckas

There is already a fallback BLAS that should be able to handle sgemv kernel in Enzyme.jl which we can have a try. If it doesn't work then there may be some calling convention or function name issues that we need to take care of

tansongchen avatar Jun 13 '22 17:06 tansongchen

Upstream and is fine now

ChrisRackauckas avatar Oct 26 '23 07:10 ChrisRackauckas