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 while computing 2nd order derivatives using Enzyme over ForwardDiff and StaticArrays #2187

Open
utkinis opened this issue Dec 9, 2024 · 0 comments

Comments

@utkinis
Copy link

utkinis commented Dec 9, 2024

Description

I'm on Julia 1.11.2, the error persists both on Enzyme v0.13.21 and on main (1d3b801).

I use ForwardDiff to compute small 3x3 gradients stored in SMatrix, and then differentiate the kernel with Enzyme. The error seems to be similar to #2011.

MWE:

using Enzyme, ForwardDiff, DiffResults, StaticArrays

d_dx(S::StaticMatrix{3,<:Any}) = S[SVector(2, 3), :] - S[SVector(1, 2), :]

F(x) = sum(d_dx(x))

function foo(A, B)
    Bl   = @SMatrix [B[1] for _ in 1:3, _ in 1:3]
    dr   = ForwardDiff.gradient!(DiffResults.GradientResult(Bl), F, Bl)
    A[1] = DiffResults.value(dr) / sum(DiffResults.gradient(dr))
    # A[1] = F(Bl) / sum(ForwardDiff.gradient(F, Bl)) # this works
    return
end

A  = zeros(1)
B  = zeros(1)
dA = zeros(1)
dB = zeros(1)

foo(A, B)
Enzyme.autodiff(Enzyme.Reverse, Const(foo), Const, Duplicated(A, dA), Duplicated(B, dB)) # error

Running this code yields:

Error log

ERROR: Enzyme cannot deduce type
Current scope: 
; Function Attrs: mustprogress willreturn
define void @preprocess_julia_foo_28711({} addrspace(10)* noundef nonnull align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}" "enzymejl_parmtype"="139820028775248" "enzymejl_parmtype_ref"="2" %0, {} addrspace(10)* noundef nonnull align 8 dereferenceable(24) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}" "enzymejl_parmtype"="139820028775248" "enzymejl_parmtype_ref"="2" %1) local_unnamed_addr #11 !dbg !164 {
top:
  %2 = alloca [1 x [9 x { double, [1 x [9 x double]] }]], align 8
  %3 = alloca [1 x [6 x { double, [1 x [9 x double]] }]], align 8, !enzymejl_allocart !64, !enzyme_type !65, !enzymejl_source_type_SMatrix\7B2\2C\203\2C\20ForwardDiff.Dual\7BForwardDiff.Tag\7Btypeof\28F\29\2C\20Float64\7D\2C\20Float64\2C\209\7D\2C\206\7D !0, !enzymejl_byref_MUT_REF !0
  %4 = alloca [1 x i64], align 8
  %5 = alloca [1 x i64], align 8
  %pgcstack = call {}*** @julia.get_pgcstack() #15
  %ptls_field49 = getelementptr inbounds {}**, {}*** %pgcstack, i64 2
  %6 = bitcast {}*** %ptls_field49 to i64***
  %ptls_load5051 = load i64**, i64*** %6, align 8, !tbaa !10
  %7 = getelementptr inbounds i64*, i64** %ptls_load5051, i64 2
  %safepoint = load i64*, i64** %7, align 8, !tbaa !14
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #15, !dbg !165
  fence syncscope("singlethread") seq_cst
  %8 = bitcast {} addrspace(10)* %1 to i8 addrspace(10)*, !dbg !166
  %9 = addrspacecast i8 addrspace(10)* %8 to i8 addrspace(11)*, !dbg !166
  %10 = getelementptr inbounds i8, i8 addrspace(11)* %9, i64 16, !dbg !166
  %11 = bitcast i8 addrspace(11)* %10 to i64 addrspace(11)*, !dbg !166
  %12 = load i64, i64 addrspace(11)* %11, align 8, !dbg !166, !tbaa !79, !alias.scope !82, !noalias !83, !enzyme_inactive !0, !enzyme_type !84, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0
  %.not = icmp eq i64 %12, 0, !dbg !167
  br i1 %.not, label %L12, label %L15, !dbg !167

L12:                                              ; preds = %top
  %13 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0, !dbg !167
  store i64 1, i64* %13, align 8, !dbg !167, !tbaa !86, !alias.scope !88, !noalias !171
  %14 = addrspacecast [1 x i64]* %5 to [1 x i64] addrspace(11)*, !dbg !167
  call fastcc void @julia_throw_boundserror_28728({} addrspace(10)* nofree noundef nonnull align 8 dereferenceable(24) %1, [1 x i64] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) %14) #16, !dbg !167
  unreachable, !dbg !167

L15:                                              ; preds = %top
  %15 = bitcast {} addrspace(10)* %1 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !174
  %16 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %15 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !174
  %17 = bitcast {} addrspace(10)* %1 to {} addrspace(10)** addrspace(10)*, !dbg !174
  %18 = addrspacecast {} addrspace(10)** addrspace(10)* %17 to {} addrspace(10)** addrspace(11)*, !dbg !174
  %19 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %18, align 8, !dbg !174, !tbaa !91, !alias.scope !82, !noalias !83, !enzyme_type !65, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat64\7D !0, !enzyme_nocache !0
  %20 = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %16, i64 0, i32 1, !dbg !174
  %21 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %20, align 8, !dbg !174, !tbaa !91, !alias.scope !82, !noalias !83, !dereferenceable_or_null !93, !align !94, !enzyme_type !95, !enzymejl_byref_MUT_REF !0, !enzymejl_source_type_Memory\7BFloat64\7D !0
  %22 = call "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* noundef %21, {} addrspace(10)** noundef %19) #15, !dbg !174
  %23 = bitcast {} addrspace(10)* addrspace(13)* %22 to double addrspace(13)*, !dbg !174
  %24 = load double, double addrspace(13)* %23, align 8, !dbg !174, !tbaa !97, !alias.scope !100, !noalias !101, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %25 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 0, i32 0, !dbg !175
  store double %24, double* %25, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %26 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 0, i32 1, !dbg !175
  %27 = bitcast [1 x [9 x double]]* %26 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %27, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_1 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %28 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 1, i32 0, !dbg !175
  store double %24, double* %28, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %29 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 1, i32 1, !dbg !175
  %30 = bitcast [1 x [9 x double]]* %29 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %30, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_2 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %31 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 2, i32 0, !dbg !175
  store double %24, double* %31, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %32 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 2, i32 1, !dbg !175
  %33 = bitcast [1 x [9 x double]]* %32 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %33, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_3 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %34 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 3, i32 0, !dbg !175
  store double %24, double* %34, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %35 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 3, i32 1, !dbg !175
  %36 = bitcast [1 x [9 x double]]* %35 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %36, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_4 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %37 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 4, i32 0, !dbg !175
  store double %24, double* %37, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %38 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 4, i32 1, !dbg !175
  %39 = bitcast [1 x [9 x double]]* %38 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %39, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_5 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %40 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 5, i32 0, !dbg !175
  store double %24, double* %40, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %41 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 5, i32 1, !dbg !175
  %42 = bitcast [1 x [9 x double]]* %41 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %42, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_6 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %43 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 6, i32 0, !dbg !175
  store double %24, double* %43, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %44 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 6, i32 1, !dbg !175
  %45 = bitcast [1 x [9 x double]]* %44 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %45, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_7 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %46 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 7, i32 0, !dbg !175
  store double %24, double* %46, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %47 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 7, i32 1, !dbg !175
  %48 = bitcast [1 x [9 x double]]* %47 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %48, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_8 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %49 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 8, i32 0, !dbg !175
  store double %24, double* %49, align 8, !dbg !175, !tbaa !86, !alias.scope !88, !noalias !171
  %50 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 8, i32 1, !dbg !175
  %51 = bitcast [1 x [9 x double]]* %50 to i8*, !dbg !175
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %51, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_9 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !175, !tbaa !118, !alias.scope !119, !noalias !184
  %52 = addrspacecast [1 x [9 x { double, [1 x [9 x double]] }]]* %2 to [1 x [9 x { double, [1 x [9 x double]] }]] addrspace(11)*, !dbg !185
  call fastcc void @julia_d_dx_28735([1 x [6 x { double, [1 x [9 x double]] }]]* noalias nocapture nofree noundef nonnull writeonly sret([1 x [6 x { double, [1 x [9 x double]] }]]) align 8 dereferenceable(480) %3, [1 x [9 x { double, [1 x [9 x double]] }]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(720) %52) #15, !dbg !185
  %53 = bitcast {} addrspace(10)* %0 to i8 addrspace(10)*, !dbg !186
  %54 = addrspacecast i8 addrspace(10)* %53 to i8 addrspace(11)*, !dbg !186
  %55 = getelementptr inbounds i8, i8 addrspace(11)* %54, i64 16, !dbg !186
  %56 = bitcast i8 addrspace(11)* %55 to i64 addrspace(11)*, !dbg !186
  %57 = load i64, i64 addrspace(11)* %56, align 8, !dbg !186, !tbaa !79, !alias.scope !82, !noalias !83, !enzyme_inactive !0, !enzyme_type !84, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0
  %.not52 = icmp eq i64 %57, 0, !dbg !189
  br i1 %.not52, label %L236, label %L239, !dbg !187

L236:                                             ; preds = %L15
  %58 = getelementptr inbounds [1 x i64], [1 x i64]* %4, i64 0, i64 0, !dbg !187
  store i64 1, i64* %58, align 8, !dbg !187, !tbaa !86, !alias.scope !88, !noalias !171
  %59 = addrspacecast [1 x i64]* %4 to [1 x i64] addrspace(11)*, !dbg !187
  call fastcc void @julia_throw_boundserror_28728({} addrspace(10)* nofree noundef nonnull align 8 dereferenceable(24) %0, [1 x i64] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) %59) #16, !dbg !187
  unreachable, !dbg !187

L239:                                             ; preds = %L15
  %60 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 0, i32 0, !dbg !190
  %61 = load double, double* %60, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %62 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 1, i32 0, !dbg !190
  %63 = load double, double* %62, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %64 = fadd double %61, %63, !dbg !199
  %65 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 2, i32 0, !dbg !190
  %66 = load double, double* %65, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %67 = fadd double %64, %66, !dbg !199
  %68 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 3, i32 0, !dbg !190
  %69 = load double, double* %68, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %70 = fadd double %67, %69, !dbg !199
  %71 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 4, i32 0, !dbg !190
  %72 = load double, double* %71, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %73 = fadd double %70, %72, !dbg !199
  %74 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 5, i32 0, !dbg !190
  %75 = load double, double* %74, align 8, !dbg !199, !tbaa !86, !alias.scope !88, !noalias !152, !enzyme_type !47, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0
  %76 = fadd double %73, %75, !dbg !199
  %77 = fdiv double %76, 0.000000e+00, !dbg !201
  %78 = bitcast {} addrspace(10)* %0 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !202
  %79 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %78 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !202
  %80 = bitcast {} addrspace(10)* %0 to {} addrspace(10)** addrspace(10)*, !dbg !202
  %81 = addrspacecast {} addrspace(10)** addrspace(10)* %80 to {} addrspace(10)** addrspace(11)*, !dbg !202
  %82 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %81, align 8, !dbg !202, !tbaa !91, !alias.scope !82, !noalias !83, !enzyme_type !65, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat64\7D !0, !enzyme_nocache !0
  %83 = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %79, i64 0, i32 1, !dbg !202
  %84 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %83, align 8, !dbg !202, !tbaa !91, !alias.scope !82, !noalias !83, !dereferenceable_or_null !93, !align !94, !enzyme_type !95, !enzymejl_byref_MUT_REF !0, !enzymejl_source_type_Memory\7BFloat64\7D !0
  %85 = call "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* noundef %84, {} addrspace(10)** noundef %82) #15, !dbg !203
  %86 = bitcast {} addrspace(10)* addrspace(13)* %85 to double addrspace(13)*, !dbg !203
  store double %77, double addrspace(13)* %86, align 8, !dbg !203, !tbaa !97, !alias.scope !100, !noalias !204
  ret void, !dbg !205
}

 Type analysis state: 
<analysis>
  %13 = getelementptr inbounds [1 x i64], [1 x i64]* %5, i64 0, i64 0, !dbg !24: {}, intvals: {}
  %32 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 2, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %64 = fadd double %61, %63, !dbg !114: {[-1]:Float@double}, intvals: {}
  %80 = bitcast {} addrspace(10)* %0 to {} addrspace(10)** addrspace(10)*, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %2 = alloca [1 x [9 x { double, [1 x [9 x double]] }]], align 8: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double, [-1,72]:Float@double, [-1,80]:Float@double, [-1,88]:Float@double, [-1,96]:Float@double, [-1,104]:Float@double, [-1,112]:Float@double, [-1,120]:Float@double, [-1,128]:Float@double, [-1,136]:Float@double, [-1,144]:Float@double, [-1,152]:Float@double, [-1,160]:Float@double, [-1,168]:Float@double, [-1,176]:Float@double, [-1,184]:Float@double, [-1,192]:Float@double, [-1,200]:Float@double, [-1,208]:Float@double, [-1,216]:Float@double, [-1,224]:Float@double, [-1,232]:Float@double, [-1,240]:Float@double, [-1,248]:Float@double, [-1,256]:Float@double, [-1,264]:Float@double, [-1,272]:Float@double, [-1,280]:Float@double, [-1,288]:Float@double, [-1,296]:Float@double, [-1,304]:Float@double, [-1,312]:Float@double, [-1,320]:Float@double, [-1,328]:Float@double, [-1,336]:Float@double, [-1,344]:Float@double, [-1,352]:Float@double, [-1,360]:Float@double, [-1,368]:Float@double, [-1,376]:Float@double, [-1,384]:Float@double, [-1,392]:Float@double, [-1,400]:Float@double, [-1,408]:Float@double, [-1,416]:Float@double, [-1,424]:Float@double, [-1,432]:Float@double, [-1,440]:Float@double, [-1,448]:Float@double, [-1,456]:Float@double, [-1,464]:Float@double, [-1,472]:Float@double, [-1,480]:Float@double, [-1,488]:Float@double, [-1,496]:Float@double}, intvals: {}
  %65 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 2, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %27 = bitcast [1 x [9 x double]]* %26 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
i64 0: {[-1]:Anything}, intvals: {0,}
  %9 = addrspacecast i8 addrspace(10)* %8 to i8 addrspace(11)*, !dbg !21: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_7 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %52 = addrspacecast [1 x [9 x { double, [1 x [9 x double]] }]]* %2 to [1 x [9 x { double, [1 x [9 x double]] }]] addrspace(11)*, !dbg !84: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double, [-1,72]:Float@double, [-1,80]:Float@double, [-1,88]:Float@double, [-1,96]:Float@double, [-1,104]:Float@double, [-1,112]:Float@double, [-1,120]:Float@double, [-1,128]:Float@double, [-1,136]:Float@double, [-1,144]:Float@double, [-1,152]:Float@double, [-1,160]:Float@double, [-1,168]:Float@double, [-1,176]:Float@double, [-1,184]:Float@double, [-1,192]:Float@double, [-1,200]:Float@double, [-1,208]:Float@double, [-1,216]:Float@double, [-1,224]:Float@double, [-1,232]:Float@double, [-1,240]:Float@double, [-1,248]:Float@double, [-1,256]:Float@double, [-1,264]:Float@double, [-1,272]:Float@double, [-1,280]:Float@double, [-1,288]:Float@double, [-1,296]:Float@double, [-1,304]:Float@double, [-1,312]:Float@double, [-1,320]:Float@double, [-1,328]:Float@double, [-1,336]:Float@double, [-1,344]:Float@double, [-1,352]:Float@double, [-1,360]:Float@double, [-1,368]:Float@double, [-1,376]:Float@double, [-1,384]:Float@double, [-1,392]:Float@double, [-1,400]:Float@double, [-1,408]:Float@double, [-1,416]:Float@double, [-1,424]:Float@double, [-1,432]:Float@double, [-1,440]:Float@double, [-1,448]:Float@double, [-1,456]:Float@double, [-1,464]:Float@double, [-1,472]:Float@double, [-1,480]:Float@double, [-1,488]:Float@double, [-1,496]:Float@double}, intvals: {}
  %34 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 3, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %53 = bitcast {} addrspace(10)* %0 to i8 addrspace(10)*, !dbg !86: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
double 1.000000e+00: {[-1]:Float@double}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
{} addrspace(10)* %0: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
{} addrspace(10)* %1: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %30 = bitcast [1 x [9 x double]]* %29 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %ptls_field49 = getelementptr inbounds {}**, {}*** %pgcstack, i64 2: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %49 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 8, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
  %70 = fadd double %67, %69, !dbg !114: {[-1]:Float@double}, intvals: {}
  %84 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %83, align 8, !dbg !121, !tbaa !52, !alias.scope !35, !noalias !38, !dereferenceable_or_null !54, !align !55, !enzyme_type !56, !enzymejl_byref_MUT_REF !0, !enzymejl_source_type_Memory\7BFloat64\7D !0: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,-1]:Float@double}, intvals: {}
  %61 = load double, double* %60, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
  %25 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 0, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %16 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %15 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !51: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %28 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 1, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %74 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 5, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
@_j_const_3 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_3 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %29 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 1, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %6 = bitcast {}*** %ptls_field49 to i64***: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %62 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 1, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %14 = addrspacecast [1 x i64]* %5 to [1 x i64] addrspace(11)*, !dbg !24: {[-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: {}
  %63 = load double, double* %62, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
  %58 = getelementptr inbounds [1 x i64], [1 x i64]* %4, i64 0, i64 0, !dbg !87: {}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
@_j_const_4 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_4 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %68 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 3, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
  %23 = bitcast {} addrspace(10)* addrspace(13)* %22 to double addrspace(13)*, !dbg !51: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %31 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 2, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %11 = bitcast i8 addrspace(11)* %10 to i64 addrspace(11)*, !dbg !21: {[-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: {}
  %60 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 0, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %71 = getelementptr inbounds [1 x [6 x { double, [1 x [9 x double]] }]], [1 x [6 x { double, [1 x [9 x double]] }]]* %3, i64 0, i64 0, i64 4, i32 0, !dbg !94: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
  %43 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 6, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %78 = bitcast {} addrspace(10)* %0 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %pgcstack = call {}*** @julia.get_pgcstack() #15: {[-1]:Pointer, [-1,16]:Pointer}, intvals: {}
  %57 = load i64, i64 addrspace(11)* %56, align 8, !dbg !86, !tbaa !32, !alias.scope !35, !noalias !38, !enzyme_inactive !0, !enzyme_type !43, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0: {[-1]:Integer}, intvals: {}
@_j_const_8 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %72 = load double, double* %71, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_1 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %41 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 5, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %40 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 5, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
@_j_const_6 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %35 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 3, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %77 = fdiv double %76, 0.000000e+00, !dbg !119: {[-1]:Float@double}, intvals: {}
  %12 = load i64, i64 addrspace(11)* %11, align 8, !dbg !21, !tbaa !32, !alias.scope !35, !noalias !38, !enzyme_inactive !0, !enzyme_type !43, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Int64 !0: {[-1]:Integer}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
@_j_const_1 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %37 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 4, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %ptls_load5051 = load i64**, i64*** %6, align 8, !tbaa !14: {[-1]:Pointer}, intvals: {}
  %83 = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %79, i64 0, i32 1, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Integer, [-1,0,1]:Integer, [-1,0,2]:Integer, [-1,0,3]:Integer, [-1,0,4]:Integer, [-1,0,5]:Integer, [-1,0,6]:Integer, [-1,0,7]:Integer, [-1,0,8]:Pointer, [-1,0,8,-1]:Float@double}, intvals: {}
  %19 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %18, align 8, !dbg !51, !tbaa !52, !alias.scope !35, !noalias !38, !enzyme_type !11, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat64\7D !0, !enzyme_nocache !0: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %24 = load double, double addrspace(13)* %23, align 8, !dbg !51, !tbaa !58, !alias.scope !61, !noalias !62, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
  %20 = getelementptr inbounds { i8*, {} addrspace(10)* }, { i8*, {} addrspace(10)* } addrspace(11)* %16, i64 0, i32 1, !dbg !51: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Integer, [-1,0,1]:Integer, [-1,0,2]:Integer, [-1,0,3]:Integer, [-1,0,4]:Integer, [-1,0,5]:Integer, [-1,0,6]:Integer, [-1,0,7]:Integer, [-1,0,8]:Pointer, [-1,0,8,-1]:Float@double}, intvals: {}
  %55 = getelementptr inbounds i8, i8 addrspace(11)* %54, i64 16, !dbg !86: {[-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: {}
  %38 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 4, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %5 = alloca [1 x i64], align 8: {[-1]:Pointer}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_9 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %.not52 = icmp eq i64 %57, 0, !dbg !91: {[-1]:Integer}, intvals: {}
  %75 = load double, double* %74, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
[9 x double] [double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
  call fastcc void @julia_d_dx_28735([1 x [6 x { double, [1 x [9 x double]] }]]* noalias nocapture nofree noundef nonnull writeonly sret([1 x [6 x { double, [1 x [9 x double]] }]]) align 8 dereferenceable(480) %3, [1 x [9 x { double, [1 x [9 x double]] }]] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(720) %52) #15, !dbg !84: {}, intvals: {}
  %22 = call "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* noundef %21, {} addrspace(10)** noundef %19) #15, !dbg !51: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %79 = addrspacecast { i8*, {} addrspace(10)* } addrspace(10)* %78 to { i8*, {} addrspace(10)* } addrspace(11)*, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %69 = load double, double* %68, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
  %.not = icmp eq i64 %12, 0, !dbg !24: {[-1]:Integer}, intvals: {}
  %36 = bitcast [1 x [9 x double]]* %35 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %66 = load double, double* %65, align 8, !dbg !114, !tbaa !45, !alias.scope !47, !noalias !118, !enzyme_type !63, !enzymejl_source_type_Float64 !0, !enzymejl_byref_BITS_VALUE !0: {[-1]:Float@double}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
[9 x double] [double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
@_j_const_7 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %10 = getelementptr inbounds i8, i8 addrspace(11)* %9, i64 16, !dbg !21: {[-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: {}
@_j_const_5 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_5 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %18 = addrspacecast {} addrspace(10)** addrspace(10)* %17 to {} addrspace(10)** addrspace(11)*, !dbg !51: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %67 = fadd double %64, %66, !dbg !114: {[-1]:Float@double}, intvals: {}
  %86 = bitcast {} addrspace(10)* addrspace(13)* %85 to double addrspace(13)*, !dbg !122: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %59 = addrspacecast [1 x i64]* %4 to [1 x i64] addrspace(11)*, !dbg !87: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %7 = getelementptr inbounds i64*, i64** %ptls_load5051, i64 2: {[-1]:Pointer}, intvals: {}
  %3 = alloca [1 x [6 x { double, [1 x [9 x double]] }]], align 8, !enzymejl_allocart !10, !enzyme_type !11, !enzymejl_source_type_SMatrix\7B2\2C\203\2C\20ForwardDiff.Dual\7BForwardDiff.Tag\7Btypeof\28F\29\2C\20Float64\7D\2C\20Float64\2C\209\7D\2C\206\7D !0, !enzymejl_byref_MUT_REF !0: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %39 = bitcast [1 x [9 x double]]* %38 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %51 = bitcast [1 x [9 x double]]* %50 to i8*, !dbg !64: {[-1]:Pointer}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
  %4 = alloca [1 x i64], align 8: {[-1]:Pointer}, intvals: {}
  %17 = bitcast {} addrspace(10)* %1 to {} addrspace(10)** addrspace(10)*, !dbg !51: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %73 = fadd double %70, %72, !dbg !114: {[-1]:Float@double}, intvals: {}
  %82 = load {} addrspace(10)**, {} addrspace(10)** addrspace(11)* %81, align 8, !dbg !121, !tbaa !52, !alias.scope !35, !noalias !38, !enzyme_type !11, !enzymejl_byref_BITS_VALUE !0, !enzymejl_source_type_Ptr\7BFloat64\7D !0, !enzyme_nocache !0: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %47 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 7, i32 1, !dbg !64: {[-1]:Pointer}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_6 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_8 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %46 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 7, i32 0, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {}
  %56 = bitcast i8 addrspace(11)* %55 to i64 addrspace(11)*, !dbg !86: {[-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: {}
  %50 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 8, i32 1, !dbg !64: {[-1]:Pointer}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
  %54 = addrspacecast i8 addrspace(10)* %53 to i8 addrspace(11)*, !dbg !86: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %safepoint = load i64*, i64** %7, align 8, !tbaa !18: {}, intvals: {}
  %48 = bitcast [1 x [9 x double]]* %47 to i8*, !dbg !64: {[-1]:Pointer}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]: {[-1]:Anything}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00]]: {[-1]:Anything}, intvals: {}
  %44 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 6, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double}, intvals: {}
[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00]: {[-1]:Anything}, intvals: {}
  %42 = bitcast [1 x [9 x double]]* %41 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %15 = bitcast {} addrspace(10)* %1 to { i8*, {} addrspace(10)* } addrspace(10)*, !dbg !51: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
double 0.000000e+00: {[-1]:Anything}, intvals: {}
  %33 = bitcast [1 x [9 x double]]* %32 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
@_j_const_9 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
  %76 = fadd double %73, %75, !dbg !114: {[-1]:Float@double}, intvals: {}
  %81 = addrspacecast {} addrspace(10)** addrspace(10)* %80 to {} addrspace(10)** addrspace(11)*, !dbg !121: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
  %45 = bitcast [1 x [9 x double]]* %44 to i8*, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double}, intvals: {}
  %26 = getelementptr inbounds [1 x [9 x { double, [1 x [9 x double]] }]], [1 x [9 x { double, [1 x [9 x double]] }]]* %2, i64 0, i64 0, i64 0, i32 1, !dbg !64: {[-1]:Pointer, [-1,0]:Float@double, [-1,8]:Float@double, [-1,16]:Float@double, [-1,24]:Float@double, [-1,32]:Float@double, [-1,40]:Float@double, [-1,48]:Float@double, [-1,56]:Float@double, [-1,64]:Float@double}, intvals: {}
  %21 = load {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %20, align 8, !dbg !51, !tbaa !52, !alias.scope !35, !noalias !38, !dereferenceable_or_null !54, !align !55, !enzyme_type !56, !enzymejl_byref_MUT_REF !0, !enzymejl_source_type_Memory\7BFloat64\7D !0: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer, [-1,8]:Pointer, [-1,8,-1]:Float@double}, intvals: {}
  %85 = call "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* addrspace(13)* @julia.gc_loaded({} addrspace(10)* noundef %84, {} addrspace(10)** noundef %82) #15, !dbg !122: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %8 = bitcast {} addrspace(10)* %1 to i8 addrspace(10)*, !dbg !21: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,8,4]:Integer, [-1,8,5]:Integer, [-1,8,6]:Integer, [-1,8,7]:Integer, [-1,8,8]:Pointer, [-1,8,8,-1]:Float@double, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer}, intvals: {}
@_j_const_2 = private unnamed_addr constant [1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]], align 8: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
i8* bitcast ([1 x [9 x double]]* @_j_const_2 to i8*): {[-1]:Pointer, [-1,-1]:Anything}, intvals: {}
[1 x [9 x double]] [[9 x double] [double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00]]: {[-1]:Anything}, intvals: {}
</analysis>

Cannot deduce type of copy   call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(72) %48, i8* noundef nonnull align 8 dereferenceable(72) bitcast ([1 x [9 x double]]* @_j_const_8 to i8*), i64 noundef 72, i1 noundef false) #15, !dbg !64, !tbaa !81, !alias.scope !82, !noalias !83

Caused by:
Stacktrace:
 [1] Dual
   @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:19
 [2] Dual
   @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:60
 [3] Dual
   @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:72
 [4] macro expansion
   @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:20
 [5] dualize
   @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:13
 [6] static_dual_eval
   @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:24
 [7] vector_mode_gradient!
   @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:62
 [8] gradient!
   @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:42
 [9] foo
   @ ~/scratch-1/Glaide.jl/src/mwe.jl:9
within MethodInstance for foo(::Vector{Float64}, ::Vector{Float64})


Stacktrace:
  [1] Dual
    @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:19 [inlined]
  [2] Dual
    @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:60 [inlined]
  [3] Dual
    @ ~/.julia/packages/ForwardDiff/UBbGT/src/dual.jl:72 [inlined]
  [4] macro expansion
    @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:20 [inlined]
  [5] dualize
    @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:13 [inlined]
  [6] static_dual_eval
    @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:24 [inlined]
  [7] vector_mode_gradient!
    @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:62 [inlined]
  [8] gradient!
    @ ~/.julia/packages/ForwardDiff/UBbGT/ext/ForwardDiffStaticArraysExt.jl:42 [inlined]
  [9] foo
    @ ~/scratch-1/Glaide.jl/src/mwe.jl:9 [inlined]
 [10] diffejulia_foo_28711wrap
    @ ~/scratch-1/Glaide.jl/src/mwe.jl:0
 [11] macro expansion
    @ ~/.julia/packages/Enzyme/NHs63/src/compiler.jl:5204 [inlined]
 [12] enzyme_call
    @ ~/.julia/packages/Enzyme/NHs63/src/compiler.jl:4750 [inlined]
 [13] CombinedAdjointThunk
    @ ~/.julia/packages/Enzyme/NHs63/src/compiler.jl:4622 [inlined]
 [14] autodiff(::ReverseMode{…}, ::Const{…}, ::Type{…}, ::Duplicated{…}, ::Duplicated{…})
    @ Enzyme ~/.julia/packages/Enzyme/NHs63/src/Enzyme.jl:503
 [15] top-level scope
    @ ~/scratch-1/Glaide.jl/src/mwe.jl:21
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