Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

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

Open
jbrea opened this issue Apr 30, 2024 · 1 comment
Open

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

jbrea opened this issue Apr 30, 2024 · 1 comment

Comments

@jbrea
Copy link

jbrea commented Apr 30, 2024

The following code worked with Enzyme 0.11.20 (julia 1.10.2) but fails on Enzyme 0.12.9.
Apologies for the not so minimal MWE.

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

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

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

First Error

julia> m = BiasedCoin();

julia> p = parameters(m);

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

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

julia> h!(H, p)

ERROR: Enzyme compilation failed due to illegal type analysis.
Current scope: 
; Function Attrs: mustprogress willreturn
define private fastcc "enzyme_type"="{[-1]:Float@double}" { i64, i64*, double, i64 } @preprocess_augmented_julia_logp_4940({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="132511560660096" "enzymejl_parmtype_ref"="2" %0, { {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer}" "enzymejl_parmtype"="132509096788432" "enzymejl_parmtype_ref"="1" %1) unnamed_addr #4 !dbg !501 {
top:
  %2 = call {}*** @julia.get_pgcstack() #15
  %ptls_field28 = getelementptr inbounds {}**, {}*** %2, i64 2
  %3 = bitcast {}*** %ptls_field28 to i64***
  %ptls_load2930 = load i64**, i64*** %3, align 8, !tbaa !39, !alias.scope !502, !noalias !505
  %4 = getelementptr inbounds i64*, i64** %ptls_load2930, i64 2
  %safepoint = load i64*, i64** %4, align 8, !tbaa !48, !alias.scope !507, !noalias !510
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #15, !dbg !512
  fence syncscope("singlethread") seq_cst
  %getfield_addr = getelementptr inbounds { {} addrspace(10)* }, { {} addrspace(10)* } addrspace(11)* %1, i64 0, i32 0, !dbg !513
  %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !513, !tbaa !48, !alias.scope !518, !noalias !521, !nonnull !16, !dereferenceable !146, !align !147
  %5 = addrspacecast {} addrspace(10)* %getfield to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !523
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %5, i64 0, i32 1, !dbg !523
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !523, !tbaa !72, !range !75, !alias.scope !525, !noalias !528
  %inbounds.not = icmp eq i64 %arraylen, 0, !dbg !523
  br i1 %inbounds.not, label %oob, label %idxend, !dbg !523

L19:                                              ; preds = %idxend
  %6 = fcmp ult double %arrayref, 0.000000e+00, !dbg !530
  %7 = fcmp ugt double %arrayref, 1.000000e+00, !dbg !531
  %8 = or i1 %6, %7, !dbg !531
  br i1 %8, label %L32, label %L38.lr.ph, !dbg !531

L38.lr.ph:                                        ; preds = %L19
  %9 = addrspacecast {} addrspace(10)* %0 to i64 addrspace(13)* addrspace(11)*, !dbg !536
  %arrayptr532 = load i64 addrspace(13)*, i64 addrspace(13)* addrspace(11)* %9, align 16, !dbg !536, !alias.scope !540, !noalias !547, !nonnull !16
  %value_phi944 = load i64, i64 addrspace(13)* %arrayptr532, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %exitcond.not49 = icmp eq i64 %arraylen3, 1, !dbg !555
  br i1 %exitcond.not49, label %L68, label %L62.preheader, !dbg !557

L62.preheader:                                    ; preds = %L38.lr.ph
  %10 = shl i64 %arraylen3, 3, !dbg !557
  %11 = add i64 %10, -8, !dbg !557
  %12 = call noalias nonnull i8* @malloc(i64 %11) #15, !dbg !557
  %13 = bitcast i8* %12 to i64*, !dbg !557
  %14 = add nuw i64 %arraylen3, 7, !dbg !557
  %15 = add nsw i64 %arraylen3, -2, !dbg !557
  %xtraiter = and i64 %14, 7, !dbg !557
  %16 = icmp ult i64 %15, 7, !dbg !557
  br i1 %16, label %L68.loopexit.unr-lcssa, label %L62.preheader.new, !dbg !557

L62.preheader.new:                                ; preds = %L62.preheader
  %17 = add nsw i64 %arraylen3, -9, !dbg !557
  %18 = lshr i64 %17, 3, !dbg !557
  %19 = add nuw nsw i64 %18, 1, !dbg !557
  %xtraiter4 = and i64 %19, 7, !dbg !557
  %20 = icmp ult i64 %17, 56, !dbg !557
  br i1 %20, label %L68.loopexit.unr-lcssa.loopexit.unr-lcssa, label %L62.preheader.new.new, !dbg !557

L62.preheader.new.new:                            ; preds = %L62.preheader.new
  %unroll_iter12 = and i64 %19, 4611686018427387896, !dbg !557
  br label %L62, !dbg !557

L32:                                              ; preds = %L19
  %current_task127 = getelementptr inbounds {}**, {}*** %2, i64 -14
  %current_task1 = bitcast {}*** %current_task127 to {}**
  %box = call noalias nonnull dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511632845536 to {}*) to {} addrspace(10)*)) #16, !dbg !531
  %21 = bitcast {} addrspace(10)* %box to double addrspace(10)*, !dbg !531
  store double %arrayref, double addrspace(10)* %21, align 8, !dbg !531, !tbaa !197, !alias.scope !200, !noalias !559
  %22 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511603774560 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511562750992 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %box, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 132509245371280 to {}*) to {} addrspace(10)*)) #17, !dbg !531
  %23 = addrspacecast {} addrspace(10)* %22 to {} addrspace(12)*, !dbg !531
  call void @ijl_throw({} addrspace(12)* %23) #18, !dbg !531
  unreachable, !dbg !531

L62:                                              ; preds = %L62, %L62.preheader.new.new
  %iv1 = phi i64 [ %iv.next2, %L62 ], [ 0, %L62.preheader.new.new ]
  %24 = shl i64 %iv1, 3, !dbg !562
  %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !562
  %25 = shl nuw i64 %iv1, 6, !dbg !562
  %iv.next = or i64 %25, 1, !dbg !562
  %26 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next, !dbg !564
  %value_phi9 = load i64, i64 addrspace(13)* %26, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %27 = getelementptr inbounds i64, i64* %13, i64 %25, !dbg !565
  store i64 %value_phi9, i64* %27, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1 = or i64 %25, 2, !dbg !562
  %28 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1, !dbg !564
  %value_phi9.1 = load i64, i64 addrspace(13)* %28, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %29 = getelementptr inbounds i64, i64* %13, i64 %iv.next, !dbg !565
  store i64 %value_phi9.1, i64* %29, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2 = or i64 %25, 3, !dbg !562
  %30 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2, !dbg !564
  %value_phi9.2 = load i64, i64 addrspace(13)* %30, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %31 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1, !dbg !565
  store i64 %value_phi9.2, i64* %31, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3 = or i64 %25, 4, !dbg !562
  %32 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3, !dbg !564
  %value_phi9.3 = load i64, i64 addrspace(13)* %32, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %33 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2, !dbg !565
  store i64 %value_phi9.3, i64* %33, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4 = or i64 %25, 5, !dbg !562
  %34 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4, !dbg !564
  %value_phi9.4 = load i64, i64 addrspace(13)* %34, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %35 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3, !dbg !565
  store i64 %value_phi9.4, i64* %35, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5 = or i64 %25, 6, !dbg !562
  %36 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5, !dbg !564
  %value_phi9.5 = load i64, i64 addrspace(13)* %36, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %37 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4, !dbg !565
  store i64 %value_phi9.5, i64* %37, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6 = or i64 %25, 7, !dbg !562
  %38 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6, !dbg !564
  %value_phi9.6 = load i64, i64 addrspace(13)* %38, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %39 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5, !dbg !565
  store i64 %value_phi9.6, i64* %39, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7 = or i64 %25, 8, !dbg !562
  %40 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7, !dbg !564
  %value_phi9.7 = load i64, i64 addrspace(13)* %40, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %41 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6, !dbg !565
  store i64 %value_phi9.7, i64* %41, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.113 = or i64 %25, 9, !dbg !562
  %42 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.113, !dbg !564
  %value_phi9.114 = load i64, i64 addrspace(13)* %42, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %43 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7, !dbg !565
  store i64 %value_phi9.114, i64* %43, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.1 = or i64 %25, 10, !dbg !562
  %44 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.1, !dbg !564
  %value_phi9.1.1 = load i64, i64 addrspace(13)* %44, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %45 = getelementptr inbounds i64, i64* %13, i64 %iv.next.113, !dbg !565
  store i64 %value_phi9.1.1, i64* %45, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.1 = or i64 %25, 11, !dbg !562
  %46 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.1, !dbg !564
  %value_phi9.2.1 = load i64, i64 addrspace(13)* %46, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %47 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.1, !dbg !565
  store i64 %value_phi9.2.1, i64* %47, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.1 = or i64 %25, 12, !dbg !562
  %48 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.1, !dbg !564
  %value_phi9.3.1 = load i64, i64 addrspace(13)* %48, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %49 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.1, !dbg !565
  store i64 %value_phi9.3.1, i64* %49, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.1 = or i64 %25, 13, !dbg !562
  %50 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.1, !dbg !564
  %value_phi9.4.1 = load i64, i64 addrspace(13)* %50, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %51 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.1, !dbg !565
  store i64 %value_phi9.4.1, i64* %51, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.1 = or i64 %25, 14, !dbg !562
  %52 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.1, !dbg !564
  %value_phi9.5.1 = load i64, i64 addrspace(13)* %52, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %53 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.1, !dbg !565
  store i64 %value_phi9.5.1, i64* %53, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.1 = or i64 %25, 15, !dbg !562
  %54 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.1, !dbg !564
  %value_phi9.6.1 = load i64, i64 addrspace(13)* %54, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %55 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.1, !dbg !565
  store i64 %value_phi9.6.1, i64* %55, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.1 = or i64 %25, 16, !dbg !562
  %56 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.1, !dbg !564
  %value_phi9.7.1 = load i64, i64 addrspace(13)* %56, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %57 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.1, !dbg !565
  store i64 %value_phi9.7.1, i64* %57, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.215 = or i64 %25, 17, !dbg !562
  %58 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.215, !dbg !564
  %value_phi9.216 = load i64, i64 addrspace(13)* %58, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %59 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.1, !dbg !565
  store i64 %value_phi9.216, i64* %59, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.2 = or i64 %25, 18, !dbg !562
  %60 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.2, !dbg !564
  %value_phi9.1.2 = load i64, i64 addrspace(13)* %60, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %61 = getelementptr inbounds i64, i64* %13, i64 %iv.next.215, !dbg !565
  store i64 %value_phi9.1.2, i64* %61, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.2 = or i64 %25, 19, !dbg !562
  %62 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.2, !dbg !564
  %value_phi9.2.2 = load i64, i64 addrspace(13)* %62, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %63 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.2, !dbg !565
  store i64 %value_phi9.2.2, i64* %63, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.2 = or i64 %25, 20, !dbg !562
  %64 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.2, !dbg !564
  %value_phi9.3.2 = load i64, i64 addrspace(13)* %64, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %65 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.2, !dbg !565
  store i64 %value_phi9.3.2, i64* %65, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.2 = or i64 %25, 21, !dbg !562
  %66 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.2, !dbg !564
  %value_phi9.4.2 = load i64, i64 addrspace(13)* %66, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %67 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.2, !dbg !565
  store i64 %value_phi9.4.2, i64* %67, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.2 = or i64 %25, 22, !dbg !562
  %68 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.2, !dbg !564
  %value_phi9.5.2 = load i64, i64 addrspace(13)* %68, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %69 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.2, !dbg !565
  store i64 %value_phi9.5.2, i64* %69, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.2 = or i64 %25, 23, !dbg !562
  %70 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.2, !dbg !564
  %value_phi9.6.2 = load i64, i64 addrspace(13)* %70, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %71 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.2, !dbg !565
  store i64 %value_phi9.6.2, i64* %71, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.2 = or i64 %25, 24, !dbg !562
  %72 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.2, !dbg !564
  %value_phi9.7.2 = load i64, i64 addrspace(13)* %72, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %73 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.2, !dbg !565
  store i64 %value_phi9.7.2, i64* %73, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.317 = or i64 %25, 25, !dbg !562
  %74 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.317, !dbg !564
  %value_phi9.318 = load i64, i64 addrspace(13)* %74, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %75 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.2, !dbg !565
  store i64 %value_phi9.318, i64* %75, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.3 = or i64 %25, 26, !dbg !562
  %76 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.3, !dbg !564
  %value_phi9.1.3 = load i64, i64 addrspace(13)* %76, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %77 = getelementptr inbounds i64, i64* %13, i64 %iv.next.317, !dbg !565
  store i64 %value_phi9.1.3, i64* %77, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.3 = or i64 %25, 27, !dbg !562
  %78 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.3, !dbg !564
  %value_phi9.2.3 = load i64, i64 addrspace(13)* %78, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %79 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.3, !dbg !565
  store i64 %value_phi9.2.3, i64* %79, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.3 = or i64 %25, 28, !dbg !562
  %80 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.3, !dbg !564
  %value_phi9.3.3 = load i64, i64 addrspace(13)* %80, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %81 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.3, !dbg !565
  store i64 %value_phi9.3.3, i64* %81, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.3 = or i64 %25, 29, !dbg !562
  %82 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.3, !dbg !564
  %value_phi9.4.3 = load i64, i64 addrspace(13)* %82, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %83 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.3, !dbg !565
  store i64 %value_phi9.4.3, i64* %83, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.3 = or i64 %25, 30, !dbg !562
  %84 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.3, !dbg !564
  %value_phi9.5.3 = load i64, i64 addrspace(13)* %84, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %85 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.3, !dbg !565
  store i64 %value_phi9.5.3, i64* %85, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.3 = or i64 %25, 31, !dbg !562
  %86 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.3, !dbg !564
  %value_phi9.6.3 = load i64, i64 addrspace(13)* %86, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %87 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.3, !dbg !565
  store i64 %value_phi9.6.3, i64* %87, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.3 = or i64 %25, 32, !dbg !562
  %88 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.3, !dbg !564
  %value_phi9.7.3 = load i64, i64 addrspace(13)* %88, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %89 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.3, !dbg !565
  store i64 %value_phi9.7.3, i64* %89, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.419 = or i64 %25, 33, !dbg !562
  %90 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.419, !dbg !564
  %value_phi9.420 = load i64, i64 addrspace(13)* %90, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %91 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.3, !dbg !565
  store i64 %value_phi9.420, i64* %91, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.4 = or i64 %25, 34, !dbg !562
  %92 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.4, !dbg !564
  %value_phi9.1.4 = load i64, i64 addrspace(13)* %92, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %93 = getelementptr inbounds i64, i64* %13, i64 %iv.next.419, !dbg !565
  store i64 %value_phi9.1.4, i64* %93, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.4 = or i64 %25, 35, !dbg !562
  %94 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.4, !dbg !564
  %value_phi9.2.4 = load i64, i64 addrspace(13)* %94, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %95 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.4, !dbg !565
  store i64 %value_phi9.2.4, i64* %95, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.4 = or i64 %25, 36, !dbg !562
  %96 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.4, !dbg !564
  %value_phi9.3.4 = load i64, i64 addrspace(13)* %96, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %97 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.4, !dbg !565
  store i64 %value_phi9.3.4, i64* %97, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.4 = or i64 %25, 37, !dbg !562
  %98 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.4, !dbg !564
  %value_phi9.4.4 = load i64, i64 addrspace(13)* %98, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %99 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.4, !dbg !565
  store i64 %value_phi9.4.4, i64* %99, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.4 = or i64 %25, 38, !dbg !562
  %100 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.4, !dbg !564
  %value_phi9.5.4 = load i64, i64 addrspace(13)* %100, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %101 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.4, !dbg !565
  store i64 %value_phi9.5.4, i64* %101, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.4 = or i64 %25, 39, !dbg !562
  %102 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.4, !dbg !564
  %value_phi9.6.4 = load i64, i64 addrspace(13)* %102, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %103 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.4, !dbg !565
  store i64 %value_phi9.6.4, i64* %103, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.4 = or i64 %25, 40, !dbg !562
  %104 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.4, !dbg !564
  %value_phi9.7.4 = load i64, i64 addrspace(13)* %104, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %105 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.4, !dbg !565
  store i64 %value_phi9.7.4, i64* %105, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.521 = or i64 %25, 41, !dbg !562
  %106 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.521, !dbg !564
  %value_phi9.522 = load i64, i64 addrspace(13)* %106, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %107 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.4, !dbg !565
  store i64 %value_phi9.522, i64* %107, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.5 = or i64 %25, 42, !dbg !562
  %108 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.5, !dbg !564
  %value_phi9.1.5 = load i64, i64 addrspace(13)* %108, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %109 = getelementptr inbounds i64, i64* %13, i64 %iv.next.521, !dbg !565
  store i64 %value_phi9.1.5, i64* %109, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.5 = or i64 %25, 43, !dbg !562
  %110 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.5, !dbg !564
  %value_phi9.2.5 = load i64, i64 addrspace(13)* %110, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %111 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.5, !dbg !565
  store i64 %value_phi9.2.5, i64* %111, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.5 = or i64 %25, 44, !dbg !562
  %112 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.5, !dbg !564
  %value_phi9.3.5 = load i64, i64 addrspace(13)* %112, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %113 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.5, !dbg !565
  store i64 %value_phi9.3.5, i64* %113, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.5 = or i64 %25, 45, !dbg !562
  %114 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.5, !dbg !564
  %value_phi9.4.5 = load i64, i64 addrspace(13)* %114, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %115 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.5, !dbg !565
  store i64 %value_phi9.4.5, i64* %115, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.5 = or i64 %25, 46, !dbg !562
  %116 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.5, !dbg !564
  %value_phi9.5.5 = load i64, i64 addrspace(13)* %116, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %117 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.5, !dbg !565
  store i64 %value_phi9.5.5, i64* %117, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.5 = or i64 %25, 47, !dbg !562
  %118 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.5, !dbg !564
  %value_phi9.6.5 = load i64, i64 addrspace(13)* %118, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %119 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.5, !dbg !565
  store i64 %value_phi9.6.5, i64* %119, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.5 = or i64 %25, 48, !dbg !562
  %120 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.5, !dbg !564
  %value_phi9.7.5 = load i64, i64 addrspace(13)* %120, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %121 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.5, !dbg !565
  store i64 %value_phi9.7.5, i64* %121, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.623 = or i64 %25, 49, !dbg !562
  %122 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.623, !dbg !564
  %value_phi9.624 = load i64, i64 addrspace(13)* %122, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %123 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.5, !dbg !565
  store i64 %value_phi9.624, i64* %123, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.6 = or i64 %25, 50, !dbg !562
  %124 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.6, !dbg !564
  %value_phi9.1.6 = load i64, i64 addrspace(13)* %124, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %125 = getelementptr inbounds i64, i64* %13, i64 %iv.next.623, !dbg !565
  store i64 %value_phi9.1.6, i64* %125, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.6 = or i64 %25, 51, !dbg !562
  %126 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.6, !dbg !564
  %value_phi9.2.6 = load i64, i64 addrspace(13)* %126, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %127 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.6, !dbg !565
  store i64 %value_phi9.2.6, i64* %127, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.6 = or i64 %25, 52, !dbg !562
  %128 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.6, !dbg !564
  %value_phi9.3.6 = load i64, i64 addrspace(13)* %128, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %129 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.6, !dbg !565
  store i64 %value_phi9.3.6, i64* %129, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.6 = or i64 %25, 53, !dbg !562
  %130 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.6, !dbg !564
  %value_phi9.4.6 = load i64, i64 addrspace(13)* %130, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %131 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.6, !dbg !565
  store i64 %value_phi9.4.6, i64* %131, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.6 = or i64 %25, 54, !dbg !562
  %132 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.6, !dbg !564
  %value_phi9.5.6 = load i64, i64 addrspace(13)* %132, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %133 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.6, !dbg !565
  store i64 %value_phi9.5.6, i64* %133, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.6 = or i64 %25, 55, !dbg !562
  %134 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.6, !dbg !564
  %value_phi9.6.6 = load i64, i64 addrspace(13)* %134, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %135 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.6, !dbg !565
  store i64 %value_phi9.6.6, i64* %135, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.6 = or i64 %25, 56, !dbg !562
  %136 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.6, !dbg !564
  %value_phi9.7.6 = load i64, i64 addrspace(13)* %136, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %137 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.6, !dbg !565
  store i64 %value_phi9.7.6, i64* %137, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.725 = or i64 %25, 57, !dbg !562
  %138 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.725, !dbg !564
  %value_phi9.726 = load i64, i64 addrspace(13)* %138, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %139 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.6, !dbg !565
  store i64 %value_phi9.726, i64* %139, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.7 = or i64 %25, 58, !dbg !562
  %140 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.7, !dbg !564
  %value_phi9.1.7 = load i64, i64 addrspace(13)* %140, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %141 = getelementptr inbounds i64, i64* %13, i64 %iv.next.725, !dbg !565
  store i64 %value_phi9.1.7, i64* %141, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.7 = or i64 %25, 59, !dbg !562
  %142 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.7, !dbg !564
  %value_phi9.2.7 = load i64, i64 addrspace(13)* %142, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %143 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.7, !dbg !565
  store i64 %value_phi9.2.7, i64* %143, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.7 = or i64 %25, 60, !dbg !562
  %144 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.7, !dbg !564
  %value_phi9.3.7 = load i64, i64 addrspace(13)* %144, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %145 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.7, !dbg !565
  store i64 %value_phi9.3.7, i64* %145, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.7 = or i64 %25, 61, !dbg !562
  %146 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.7, !dbg !564
  %value_phi9.4.7 = load i64, i64 addrspace(13)* %146, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %147 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.7, !dbg !565
  store i64 %value_phi9.4.7, i64* %147, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.7 = or i64 %25, 62, !dbg !562
  %148 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.7, !dbg !564
  %value_phi9.5.7 = load i64, i64 addrspace(13)* %148, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %149 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.7, !dbg !565
  store i64 %value_phi9.5.7, i64* %149, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.7 = or i64 %25, 63, !dbg !562
  %150 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.7, !dbg !564
  %value_phi9.6.7 = load i64, i64 addrspace(13)* %150, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %151 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.7, !dbg !565
  store i64 %value_phi9.6.7, i64* %151, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.7 = add nuw i64 %25, 64, !dbg !562
  %152 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.7, !dbg !564
  %value_phi9.7.7 = load i64, i64 addrspace(13)* %152, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %153 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.7, !dbg !565
  store i64 %value_phi9.7.7, i64* %153, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %niter.next.7 = add i64 %24, 8, !dbg !557
  %niter.ncmp.727 = icmp eq i64 %niter.next.7, %unroll_iter12, !dbg !557
  br i1 %niter.ncmp.727, label %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit, label %L62, !dbg !557

L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit: ; preds = %L62
  br label %L68.loopexit.unr-lcssa.loopexit.unr-lcssa, !dbg !557

L68.loopexit.unr-lcssa.loopexit.unr-lcssa:        ; preds = %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit, %L62.preheader.new
  %iv.next.7.lcssa.ph = phi i64 [ undef, %L62.preheader.new ], [ %iv.next.7.7, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit ]
  %iv.unr10 = phi i64 [ 0, %L62.preheader.new ], [ %iv.next.7.7, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not28 = icmp eq i64 %xtraiter4, 0, !dbg !557
  br i1 %lcmp.mod.not28, label %L68.loopexit.unr-lcssa, label %L62.epil5.preheader, !dbg !557

L62.epil5.preheader:                              ; preds = %L68.loopexit.unr-lcssa.loopexit.unr-lcssa
  br label %L62.epil5, !dbg !557

L62.epil5:                                        ; preds = %L62.epil5.preheader, %L62.epil5
  %iv = phi i64 [ 0, %L62.epil5.preheader ], [ %iv.next3, %L62.epil5 ]
  %154 = shl nuw nsw i64 %iv, 3, !dbg !562
  %iv.next3 = add nuw nsw i64 %iv, 1, !dbg !562
  %155 = add nuw nsw i64 %iv.unr10, %154, !dbg !562
  %iv.next.epil7 = or i64 %155, 1, !dbg !562
  %156 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.epil7, !dbg !564
  %value_phi9.epil8 = load i64, i64 addrspace(13)* %156, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %157 = getelementptr inbounds i64, i64* %13, i64 %155, !dbg !565
  store i64 %value_phi9.epil8, i64* %157, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.1.epil = or i64 %155, 2, !dbg !562
  %158 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.epil, !dbg !564
  %value_phi9.1.epil = load i64, i64 addrspace(13)* %158, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %159 = getelementptr inbounds i64, i64* %13, i64 %iv.next.epil7, !dbg !565
  store i64 %value_phi9.1.epil, i64* %159, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.2.epil = or i64 %155, 3, !dbg !562
  %160 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.epil, !dbg !564
  %value_phi9.2.epil = load i64, i64 addrspace(13)* %160, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %161 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.epil, !dbg !565
  store i64 %value_phi9.2.epil, i64* %161, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.3.epil = or i64 %155, 4, !dbg !562
  %162 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.epil, !dbg !564
  %value_phi9.3.epil = load i64, i64 addrspace(13)* %162, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %163 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.epil, !dbg !565
  store i64 %value_phi9.3.epil, i64* %163, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.4.epil = or i64 %155, 5, !dbg !562
  %164 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.epil, !dbg !564
  %value_phi9.4.epil = load i64, i64 addrspace(13)* %164, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %165 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.epil, !dbg !565
  store i64 %value_phi9.4.epil, i64* %165, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.5.epil = or i64 %155, 6, !dbg !562
  %166 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.epil, !dbg !564
  %value_phi9.5.epil = load i64, i64 addrspace(13)* %166, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %167 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.epil, !dbg !565
  store i64 %value_phi9.5.epil, i64* %167, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.6.epil = or i64 %155, 7, !dbg !562
  %168 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.epil, !dbg !564
  %value_phi9.6.epil = load i64, i64 addrspace(13)* %168, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %169 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.epil, !dbg !565
  store i64 %value_phi9.6.epil, i64* %169, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %iv.next.7.epil = add nuw nsw i64 %155, 8, !dbg !562
  %170 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.epil, !dbg !564
  %value_phi9.7.epil = load i64, i64 addrspace(13)* %170, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %171 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.epil, !dbg !565
  store i64 %value_phi9.7.epil, i64* %171, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %epil.iter9.cmp.not = icmp eq i64 %iv.next3, %xtraiter4, !dbg !557
  br i1 %epil.iter9.cmp.not, label %L68.loopexit.unr-lcssa.loopexit, label %L62.epil5, !dbg !557, !llvm.loop !570

L68.loopexit.unr-lcssa.loopexit:                  ; preds = %L62.epil5
  br label %L68.loopexit.unr-lcssa, !dbg !557

L68.loopexit.unr-lcssa:                           ; preds = %L68.loopexit.unr-lcssa.loopexit, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa, %L62.preheader
  %iv.unr = phi i64 [ 0, %L62.preheader ], [ %iv.next.7.lcssa.ph, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa ], [ %iv.next.7.epil, %L68.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !557
  br i1 %lcmp.mod.not, label %L68, label %L62.epil.preheader, !dbg !557

L62.epil.preheader:                               ; preds = %L68.loopexit.unr-lcssa
  br label %L62.epil, !dbg !557

L62.epil:                                         ; preds = %L62.epil.preheader, %L62.epil
  %iv4 = phi i64 [ 0, %L62.epil.preheader ], [ %iv.next5, %L62.epil ]
  %172 = add nuw nsw i64 %iv.unr, %iv4, !dbg !562
  %iv.next5 = add nuw nsw i64 %iv4, 1, !dbg !562
  %iv.next.epil = add nuw nsw i64 %172, 1, !dbg !562
  %173 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.epil, !dbg !564
  %value_phi9.epil = load i64, i64 addrspace(13)* %173, align 8, !dbg !549, !tbaa !107, !alias.scope !550, !noalias !553
  %174 = getelementptr inbounds i64, i64* %13, i64 %172, !dbg !565
  store i64 %value_phi9.epil, i64* %174, align 8, !dbg !565, !tbaa !107, !noalias !568, !invariant.group !569
  %epil.iter.cmp.not = icmp eq i64 %iv.next5, %xtraiter, !dbg !557
  br i1 %epil.iter.cmp.not, label %L68.loopexit, label %L62.epil, !dbg !557, !llvm.loop !571

L68.loopexit:                                     ; preds = %L62.epil
  br label %L68, !dbg !558

L68:                                              ; preds = %L68.loopexit, %idxend, %L68.loopexit.unr-lcssa, %L38.lr.ph
  %.sroa.0.0 = phi i64 [ undef, %idxend ], [ %value_phi944, %L38.lr.ph ], [ %value_phi944, %L68.loopexit.unr-lcssa ], [ %value_phi944, %L68.loopexit ]
  %.sroa.2.0 = phi i64* [ undef, %idxend ], [ undef, %L38.lr.ph ], [ %13, %L68.loopexit.unr-lcssa ], [ %13, %L68.loopexit ]
  %175 = insertvalue { i64, i64*, double, i64 } undef, i64 %.sroa.0.0, 0, !dbg !558
  %176 = insertvalue { i64, i64*, double, i64 } %175, i64* %.sroa.2.0, 1, !dbg !558
  %177 = insertvalue { i64, i64*, double, i64 } %176, double %arrayref, 2, !dbg !558
  %178 = insertvalue { i64, i64*, double, i64 } %177, i64 %arraylen3, 3, !dbg !558
  ret { i64, i64*, double, i64 } %178, !dbg !558

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

idxend:                                           ; preds = %top
  %180 = addrspacecast {} addrspace(10)* %getfield to double addrspace(13)* addrspace(11)*, !dbg !523
  %arrayptr31 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %180, align 16, !dbg !523, !tbaa !103, !alias.scope !573, !noalias !528, !nonnull !16
  %arrayref = load double, double addrspace(13)* %arrayptr31, align 8, !dbg !523, !tbaa !107, !alias.scope !576, !noalias !579
  %181 = addrspacecast {} addrspace(10)* %0 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !581
  %arraylen_ptr2 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %181, i64 0, i32 1, !dbg !581
  %arraylen3 = load i64, i64 addrspace(11)* %arraylen_ptr2, align 8, !dbg !581, !tbaa !72, !range !75, !alias.scope !582, !noalias !583
  %.not = icmp eq i64 %arraylen3, 0, !dbg !584
  br i1 %.not, label %L68, label %L19, !dbg !537
}

 Type analysis state: 
<analysis>
  %47 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.1, !dbg !129: {[-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: {}
  %iv.next.3.1 = or i64 %25, 12, !dbg !125: {[-1]:Integer}, intvals: {}
  %48 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.1 = load i64, i64 addrspace(13)* %48, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %iv.next.7.lcssa.ph = phi i64 [ undef, %L62.preheader.new ], [ %iv.next.7.7, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit ]: {[-1]:Integer}, intvals: {}
  %iv.next = or i64 %25, 1, !dbg !125: {[-1]:Integer}, intvals: {}
  %26 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9 = load i64, i64 addrspace(13)* %26, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %value_phi9.1 = load i64, i64 addrspace(13)* %28, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %value_phi9.2 = load i64, i64 addrspace(13)* %30, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %115 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.5, !dbg !129: {[-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: {}
  %iv.next.5.5 = or i64 %25, 46, !dbg !125: {[-1]:Integer}, intvals: {}
  %116 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.5 = load i64, i64 addrspace(13)* %116, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %117 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.5, !dbg !129: {[-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: {}
  %iv.next.6.5 = or i64 %25, 47, !dbg !125: {[-1]:Integer}, intvals: {}
  %value_phi9.6.5 = load i64, i64 addrspace(13)* %118, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %iv.next.1.1 = or i64 %25, 10, !dbg !125: {[-1]:Integer}, intvals: {}
  %44 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.1 = load i64, i64 addrspace(13)* %44, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %45 = getelementptr inbounds i64, i64* %13, i64 %iv.next.113, !dbg !129: {[-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: {}
  %iv.next.2.1 = or i64 %25, 11, !dbg !125: {[-1]:Integer}, intvals: {}
  %46 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.1 = load i64, i64 addrspace(13)* %46, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %33 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2, !dbg !129: {[-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: {}
  %iv.next.4 = or i64 %25, 5, !dbg !125: {[-1]:Integer}, intvals: {}
  %34 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4 = load i64, i64 addrspace(13)* %34, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %35 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3, !dbg !129: {[-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: {}
  %iv.next.5 = or i64 %25, 6, !dbg !125: {[-1]:Integer}, intvals: {}
  %36 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5 = load i64, i64 addrspace(13)* %36, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %37 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4, !dbg !129: {[-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: {}
  %iv.next.6 = or i64 %25, 7, !dbg !125: {[-1]:Integer}, intvals: {}
  %38 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6 = load i64, i64 addrspace(13)* %38, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %39 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5, !dbg !129: {[-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: {}
  %iv.next.7 = or i64 %25, 8, !dbg !125: {[-1]:Integer}, intvals: {}
i64 20: {[-1]:Integer}, intvals: {20,}
i64 21: {[-1]:Integer}, intvals: {21,}
  %iv.next.5.epil = or i64 %155, 6, !dbg !125: {[-1]:Integer}, intvals: {}
  %166 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.epil = load i64, i64 addrspace(13)* %166, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %167 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.epil, !dbg !129: {[-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: {}
  %iv.next.6.epil = or i64 %155, 7, !dbg !125: {[-1]:Integer}, intvals: {}
  %168 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.epil = load i64, i64 addrspace(13)* %168, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64* undef: {[-1]:Anything}, intvals: {}
i64 -9: {[-1]:Integer}, intvals: {-9,}
  %79 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.3, !dbg !129: {[-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: {}
  %iv.next.3.3 = or i64 %25, 28, !dbg !125: {[-1]:Integer}, intvals: {}
  %80 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.3 = load i64, i64 addrspace(13)* %80, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %81 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.3, !dbg !129: {[-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: {}
  %iv.next.4.3 = or i64 %25, 29, !dbg !125: {[-1]:Integer}, intvals: {}
  %82 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %iv.next.1.3 = or i64 %25, 26, !dbg !125: {[-1]:Integer}, intvals: {}
  %76 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.3 = load i64, i64 addrspace(13)* %76, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %77 = getelementptr inbounds i64, i64* %13, i64 %iv.next.317, !dbg !129: {[-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: {}
  %iv.next.2.3 = or i64 %25, 27, !dbg !125: {[-1]:Integer}, intvals: {}
  %78 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.3 = load i64, i64 addrspace(13)* %78, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 15: {[-1]:Integer}, intvals: {15,}
  %40 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7 = load i64, i64 addrspace(13)* %40, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %41 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6, !dbg !129: {[-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: {}
  %iv.next.113 = or i64 %25, 9, !dbg !125: {[-1]:Integer}, intvals: {}
  %42 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.113, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.114 = load i64, i64 addrspace(13)* %42, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %43 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7, !dbg !129: {[-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: {}
  %150 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.7 = load i64, i64 addrspace(13)* %150, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %151 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.7, !dbg !129: {[-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: {}
  %iv.next.7.7 = add nuw i64 %25, 64, !dbg !125: {[-1]:Integer}, intvals: {64,}
  %152 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.7 = load i64, i64 addrspace(13)* %152, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %153 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.7, !dbg !129: {[-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: {}
i64 32: {[-1]:Integer}, intvals: {32,}
i64 28: {[-1]:Integer}, intvals: {28,}
i64 29: {[-1]:Integer}, intvals: {29,}
  %3 = bitcast {}*** %ptls_field28 to i64***: {[-1]:Pointer}, intvals: {}
  %ptls_load2930 = load i64**, i64*** %3, align 8, !tbaa !17, !alias.scope !21, !noalias !24: {}, intvals: {}
  %iv.next.3.6 = or i64 %25, 52, !dbg !125: {[-1]:Integer}, intvals: {}
  %128 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.6 = load i64, i64 addrspace(13)* %128, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %129 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.6, !dbg !129: {[-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: {}
  %iv.next.4.6 = or i64 %25, 53, !dbg !125: {[-1]:Integer}, intvals: {}
  %130 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.6 = load i64, i64 addrspace(13)* %130, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 55: {[-1]:Integer}, intvals: {55,}
  %iv.next.3.4 = or i64 %25, 36, !dbg !125: {[-1]:Integer}, intvals: {}
  %96 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.4 = load i64, i64 addrspace(13)* %96, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %97 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.4, !dbg !129: {[-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: {}
  %iv.next.4.4 = or i64 %25, 37, !dbg !125: {[-1]:Integer}, intvals: {}
  %98 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.4 = load i64, i64 addrspace(13)* %98, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 50: {[-1]:Integer}, intvals: {50,}
i64 51: {[-1]:Integer}, intvals: {51,}
i64 54: {[-1]:Integer}, intvals: {54,}
i64 undef: {[-1]:Anything}, intvals: {}
  %52 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.1 = load i64, i64 addrspace(13)* %52, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %53 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.1, !dbg !129: {[-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: {}
  %iv.next.6.1 = or i64 %25, 15, !dbg !125: {[-1]:Integer}, intvals: {}
  %54 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.1 = load i64, i64 addrspace(13)* %54, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %55 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.1, !dbg !129: {[-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: {}
  %iv.next.725 = or i64 %25, 57, !dbg !125: {[-1]:Integer}, intvals: {}
  %138 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.725, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.726 = load i64, i64 addrspace(13)* %138, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %139 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.6, !dbg !129: {[-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: {}
  %iv.next.1.7 = or i64 %25, 58, !dbg !125: {[-1]:Integer}, intvals: {}
i64 52: {[-1]:Integer}, intvals: {52,}
  %109 = getelementptr inbounds i64, i64* %13, i64 %iv.next.521, !dbg !129: {[-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: {}
  %iv.next.2.5 = or i64 %25, 43, !dbg !125: {[-1]:Integer}, intvals: {}
  %110 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.5 = load i64, i64 addrspace(13)* %110, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %111 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.5, !dbg !129: {[-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: {}
  %iv.next.3.5 = or i64 %25, 44, !dbg !125: {[-1]:Integer}, intvals: {}
i64 17: {[-1]:Integer}, intvals: {17,}
  %value_phi9.1.4 = load i64, i64 addrspace(13)* %92, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %93 = getelementptr inbounds i64, i64* %13, i64 %iv.next.419, !dbg !129: {[-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: {}
  %iv.next.2.4 = or i64 %25, 35, !dbg !125: {[-1]:Integer}, intvals: {}
  %94 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.4 = load i64, i64 addrspace(13)* %94, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %95 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.4, !dbg !129: {[-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: {}
double 0.000000e+00: {[-1]:Anything}, intvals: {}
double 1.000000e+00: {[-1]:Float@double}, intvals: {}
i64 33: {[-1]:Integer}, intvals: {33,}
  %131 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.6, !dbg !129: {[-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: {}
  %iv.next.5.6 = or i64 %25, 54, !dbg !125: {[-1]:Integer}, intvals: {}
  %132 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.6 = load i64, i64 addrspace(13)* %132, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %133 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.6, !dbg !129: {[-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: {}
  %iv.next.6.6 = or i64 %25, 55, !dbg !125: {[-1]:Integer}, intvals: {}
i64 25: {[-1]:Integer}, intvals: {25,}
  %5 = addrspacecast {} addrspace(10)* %getfield to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !59: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !34, !tbaa !26, !alias.scope !46, !noalias !51, !nonnull !16, !dereferenceable !57, !align !58: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %safepoint = load i64*, i64** %4, align 8, !tbaa !26, !alias.scope !28, !noalias !31: {}, intvals: {}
  %value_phi9.7.2 = load i64, i64 addrspace(13)* %72, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %73 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.2, !dbg !129: {[-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: {}
  %iv.next.317 = or i64 %25, 25, !dbg !125: {[-1]:Integer}, intvals: {}
  %74 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.317, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.318 = load i64, i64 addrspace(13)* %74, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %75 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.2, !dbg !129: {[-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: {}
i64 9: {[-1]:Integer}, intvals: {9,}
  %iv1 = phi i64 [ %iv.next2, %L62 ], [ 0, %L62.preheader.new.new ]: {[-1]:Integer}, intvals: {0,}
  %iv = phi i64 [ 0, %L62.epil5.preheader ], [ %iv.next3, %L62.epil5 ]: {[-1]:Integer}, intvals: {0,}
  %iv.next.3.7 = or i64 %25, 60, !dbg !125: {[-1]:Integer}, intvals: {}
  %144 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.7 = load i64, i64 addrspace(13)* %144, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %145 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.7, !dbg !129: {[-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: {}
  %iv.next.4.7 = or i64 %25, 61, !dbg !125: {[-1]:Integer}, intvals: {}
  %146 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.7 = load i64, i64 addrspace(13)* %146, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 47: {[-1]:Integer}, intvals: {47,}
i64 0: {[-1]:Anything}, intvals: {0,}
i64 57: {[-1]:Integer}, intvals: {57,}
i64 4: {[-1]:Integer}, intvals: {4,}
i64 13: {[-1]:Integer}, intvals: {13,}
i64 14: {[-1]:Integer}, intvals: {14,}
i64 48: {[-1]:Integer}, intvals: {48,}
i64 56: {[-1]:Integer}, intvals: {56,}
{} addrspace(10)* %0: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
{ {} addrspace(10)* } addrspace(11)* %1: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Integer, [-1,-1,9]:Integer, [-1,-1,10]:Integer, [-1,-1,11]:Integer, [-1,-1,12]:Integer, [-1,-1,13]:Integer, [-1,-1,14]:Integer, [-1,-1,15]:Integer, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer, [-1,-1,32]:Integer, [-1,-1,33]:Integer, [-1,-1,34]:Integer, [-1,-1,35]:Integer, [-1,-1,36]:Integer, [-1,-1,37]:Integer, [-1,-1,38]:Integer, [-1,-1,39]:Integer}, intvals: {}
  %arraylen3 = load i64, i64 addrspace(11)* %arraylen_ptr2, align 8, !dbg !152, !tbaa !65, !range !68, !alias.scope !154, !noalias !155: {[-1]:Integer}, intvals: {}
  %99 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.4, !dbg !129: {[-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: {}
  %iv.next.5.4 = or i64 %25, 38, !dbg !125: {[-1]:Integer}, intvals: {}
  %100 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.4 = load i64, i64 addrspace(13)* %100, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %101 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.4, !dbg !129: {[-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: {}
  %iv.next.6.4 = or i64 %25, 39, !dbg !125: {[-1]:Integer}, intvals: {}
  %102 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
i64 2: {[-1]:Integer}, intvals: {2,}
i64 11: {[-1]:Integer}, intvals: {11,}
i64 26: {[-1]:Integer}, intvals: {26,}
i64 27: {[-1]:Integer}, intvals: {27,}
  %value_phi9.4.3 = load i64, i64 addrspace(13)* %82, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %83 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.3, !dbg !129: {[-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: {}
  %iv.next.5.3 = or i64 %25, 30, !dbg !125: {[-1]:Integer}, intvals: {}
  %84 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.3 = load i64, i64 addrspace(13)* %84, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %85 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.3, !dbg !129: {[-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: {}
  %59 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.1, !dbg !129: {[-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: {}
  %iv.next.1.2 = or i64 %25, 18, !dbg !125: {[-1]:Integer}, intvals: {}
  %60 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.2 = load i64, i64 addrspace(13)* %60, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %61 = getelementptr inbounds i64, i64* %13, i64 %iv.next.215, !dbg !129: {[-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: {}
  %iv.next.2.2 = or i64 %25, 19, !dbg !125: {[-1]:Integer}, intvals: {}
  %62 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %180 = addrspacecast {} addrspace(10)* %getfield to double addrspace(13)* addrspace(11)*, !dbg !59: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {}
  %arrayptr31 = load double addrspace(13)*, double addrspace(13)* addrspace(11)* %180, align 16, !dbg !59, !tbaa !142, !alias.scope !144, !noalias !72, !nonnull !16: {[-1]:Pointer}, intvals: {}
  %arrayref = load double, double addrspace(13)* %arrayptr31, align 8, !dbg !59, !tbaa !104, !alias.scope !147, !noalias !150: {[-1]:Float@double}, intvals: {}
  %arraylen_ptr2 = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %181, i64 0, i32 1, !dbg !152: {[-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: {}
  %17 = add nsw i64 %arraylen3, -9, !dbg !116: {[-1]:Integer}, intvals: {}
  %18 = lshr i64 %17, 3, !dbg !116: {[-1]:Integer}, intvals: {}
  %19 = add nuw nsw i64 %18, 1, !dbg !116: {[-1]:Integer}, intvals: {}
  %xtraiter4 = and i64 %19, 7, !dbg !116: {[-1]:Integer}, intvals: {}
  %20 = icmp ult i64 %17, 56, !dbg !116: {[-1]:Integer}, intvals: {}
  %unroll_iter12 = and i64 %19, 4611686018427387896, !dbg !116: {[-1]:Integer}, intvals: {}
  %69 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.2, !dbg !129: {[-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: {}
  %iv.next.6.2 = or i64 %25, 23, !dbg !125: {[-1]:Integer}, intvals: {}
  %70 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.2 = load i64, i64 addrspace(13)* %70, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %71 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.2, !dbg !129: {[-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: {}
  %iv.next.7.2 = or i64 %25, 24, !dbg !125: {[-1]:Integer}, intvals: {}
  %72 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %5, i64 0, i32 1, !dbg !59: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {}
  %inbounds.not = icmp eq i64 %arraylen, 0, !dbg !59: {[-1]:Integer}, intvals: {}
  %6 = fcmp ult double %arrayref, 0.000000e+00, !dbg !74: {[-1]:Integer}, intvals: {}
  %7 = fcmp ugt double %arrayref, 1.000000e+00, !dbg !77: {[-1]:Integer}, intvals: {}
  %8 = or i1 %6, %7, !dbg !77: {[-1]:Integer}, intvals: {}
  %iv.next2 = add nuw nsw i64 %iv1, 1, !dbg !125: {[-1]:Integer}, intvals: {1,}
  %9 = addrspacecast {} addrspace(10)* %0 to i64 addrspace(13)* addrspace(11)*, !dbg !88: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}, intvals: {}
  %arrayptr532 = load i64 addrspace(13)*, i64 addrspace(13)* addrspace(11)* %9, align 16, !dbg !88, !alias.scope !94, !noalias !101, !nonnull !16: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
{ i64, i64*, double, i64 } undef: {[-1]:Anything}, intvals: {}
  %89 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.3, !dbg !129: {[-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: {}
  %iv.next.419 = or i64 %25, 33, !dbg !125: {[-1]:Integer}, intvals: {}
  %90 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.419, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.420 = load i64, i64 addrspace(13)* %90, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %91 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.3, !dbg !129: {[-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: {}
  %iv.next.1.4 = or i64 %25, 34, !dbg !125: {[-1]:Integer}, intvals: {}
  %92 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
i64 30: {[-1]:Integer}, intvals: {30,}
i64 31: {[-1]:Integer}, intvals: {31,}
i64 61: {[-1]:Integer}, intvals: {61,}
i64 62: {[-1]:Integer}, intvals: {62,}
  %.sroa.0.0 = phi i64 [ undef, %idxend ], [ %value_phi944, %L38.lr.ph ], [ %value_phi944, %L68.loopexit.unr-lcssa ], [ %value_phi944, %L68.loopexit ]: {[-1]:Integer}, intvals: {}
  %.sroa.2.0 = phi i64* [ undef, %idxend ], [ undef, %L38.lr.ph ], [ %13, %L68.loopexit.unr-lcssa ], [ %13, %L68.loopexit ]: {[-1]:Pointer}, intvals: {}
i64 40: {[-1]:Integer}, intvals: {40,}
i64 34: {[-1]:Integer}, intvals: {34,}
i64 35: {[-1]:Integer}, intvals: {35,}
i64 4611686018427387896: {[-1]:Anything}, intvals: {4611686018427387896,}
i64 53: {[-1]:Integer}, intvals: {53,}
i64 36: {[-1]:Integer}, intvals: {36,}
i64 37: {[-1]:Integer}, intvals: {37,}
  %iv.unr10 = phi i64 [ 0, %L62.preheader.new ], [ %iv.next.7.7, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa.loopexit ]: {[-1]:Integer}, intvals: {0,}
  %lcmp.mod.not28 = icmp eq i64 %xtraiter4, 0, !dbg !116: {[-1]:Integer}, intvals: {}
  %140 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.7 = load i64, i64 addrspace(13)* %140, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %141 = getelementptr inbounds i64, i64* %13, i64 %iv.next.725, !dbg !129: {[-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: {}
  %iv.next.2.7 = or i64 %25, 59, !dbg !125: {[-1]:Integer}, intvals: {}
  %142 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.7 = load i64, i64 addrspace(13)* %142, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %143 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.7, !dbg !129: {[-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: {}
i64 22: {[-1]:Integer}, intvals: {22,}
i64 23: {[-1]:Integer}, intvals: {23,}
i64 16: {[-1]:Integer}, intvals: {16,}
  %value_phi9.6.4 = load i64, i64 addrspace(13)* %102, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %103 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.4, !dbg !129: {[-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: {}
  %iv.next.7.4 = or i64 %25, 40, !dbg !125: {[-1]:Integer}, intvals: {}
  %104 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.4, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.4 = load i64, i64 addrspace(13)* %104, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %105 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.4, !dbg !129: {[-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: {}
  %25 = shl nuw i64 %iv1, 6, !dbg !125: {[-1]:Integer}, intvals: {0,}
  %24 = shl i64 %iv1, 3, !dbg !125: {[-1]:Integer}, intvals: {0,}
  %iv.next3 = add nuw nsw i64 %iv, 1, !dbg !125: {[-1]:Integer}, intvals: {1,}
  %112 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.5 = load i64, i64 addrspace(13)* %112, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %113 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.5, !dbg !129: {[-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: {}
  %iv.next.4.5 = or i64 %25, 45, !dbg !125: {[-1]:Integer}, intvals: {}
  %114 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.5 = load i64, i64 addrspace(13)* %114, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %169 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.epil, !dbg !129: {[-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: {}
  %iv.next.7.epil = add nuw nsw i64 %155, 8, !dbg !125: {[-1]:Integer}, intvals: {8,}
  %170 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.epil = load i64, i64 addrspace(13)* %170, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %171 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.epil, !dbg !129: {[-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: {}
  %niter.next.7 = add i64 %24, 8, !dbg !116: {[-1]:Integer}, intvals: {8,}
  %niter.ncmp.727 = icmp eq i64 %niter.next.7, %unroll_iter12, !dbg !116: {[-1]:Integer}, intvals: {}
  %iv4 = phi i64 [ 0, %L62.epil.preheader ], [ %iv.next5, %L62.epil ]: {[-1]:Integer}, intvals: {0,}
  %iv.next.epil7 = or i64 %155, 1, !dbg !125: {[-1]:Integer}, intvals: {}
i64 -2: {[-1]:Integer}, intvals: {-2,}
  %iv.next5 = add nuw nsw i64 %iv4, 1, !dbg !125: {[-1]:Integer}, intvals: {1,}
  %epil.iter9.cmp.not = icmp eq i64 %iv.next3, %xtraiter4, !dbg !116: {[-1]:Integer}, intvals: {}
  %iv.unr = phi i64 [ 0, %L62.preheader ], [ %iv.next.7.lcssa.ph, %L68.loopexit.unr-lcssa.loopexit.unr-lcssa ], [ %iv.next.7.epil, %L68.loopexit.unr-lcssa.loopexit ]: {[-1]:Integer}, intvals: {0,8,}
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0, !dbg !116: {[-1]:Integer}, intvals: {}
i64 10: {[-1]:Integer}, intvals: {10,}
  %iv.next.6.3 = or i64 %25, 31, !dbg !125: {[-1]:Integer}, intvals: {}
  %86 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.3 = load i64, i64 addrspace(13)* %86, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %87 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.3, !dbg !129: {[-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: {}
  %iv.next.7.3 = or i64 %25, 32, !dbg !125: {[-1]:Integer}, intvals: {}
  %88 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.3 = load i64, i64 addrspace(13)* %88, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %156 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.epil7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.epil8 = load i64, i64 addrspace(13)* %156, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %157 = getelementptr inbounds i64, i64* %13, i64 %155, !dbg !129: {[-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: {}
  %iv.next.1.epil = or i64 %155, 2, !dbg !125: {[-1]:Integer}, intvals: {}
  %158 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.epil = load i64, i64 addrspace(13)* %158, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %159 = getelementptr inbounds i64, i64* %13, i64 %iv.next.epil7, !dbg !129: {[-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: {}
  %118 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %119 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.5, !dbg !129: {[-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: {}
  %iv.next.7.5 = or i64 %25, 48, !dbg !125: {[-1]:Integer}, intvals: {}
  %120 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.5 = load i64, i64 addrspace(13)* %120, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %121 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.5, !dbg !129: {[-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: {}
i64 7: {[-1]:Integer}, intvals: {7,}
  %exitcond.not49 = icmp eq i64 %arraylen3, 1, !dbg !112: {[-1]:Integer}, intvals: {}
  %4 = getelementptr inbounds i64*, i64** %ptls_load2930, i64 2: {[-1]:Pointer}, intvals: {}
  %getfield_addr = getelementptr inbounds { {} addrspace(10)* }, { {} addrspace(10)* } addrspace(11)* %1, i64 0, i32 0, !dbg !34: {[-1]:Pointer, [-1,-1]:Pointer, [-1,-1,0]:Pointer, [-1,-1,0,-1]:Float@double, [-1,-1,8]:Integer, [-1,-1,9]:Integer, [-1,-1,10]:Integer, [-1,-1,11]:Integer, [-1,-1,12]:Integer, [-1,-1,13]:Integer, [-1,-1,14]:Integer, [-1,-1,15]:Integer, [-1,-1,16]:Integer, [-1,-1,17]:Integer, [-1,-1,18]:Integer, [-1,-1,19]:Integer, [-1,-1,20]:Integer, [-1,-1,21]:Integer, [-1,-1,22]:Integer, [-1,-1,23]:Integer, [-1,-1,24]:Integer, [-1,-1,25]:Integer, [-1,-1,26]:Integer, [-1,-1,27]:Integer, [-1,-1,28]:Integer, [-1,-1,29]:Integer, [-1,-1,30]:Integer, [-1,-1,31]:Integer, [-1,-1,32]:Integer, [-1,-1,33]:Integer, [-1,-1,34]:Integer, [-1,-1,35]:Integer, [-1,-1,36]:Integer, [-1,-1,37]:Integer, [-1,-1,38]:Integer, [-1,-1,39]:Integer}, intvals: {}
  %12 = call noalias nonnull i8* @malloc(i64 %11) #15, !dbg !116: {[-1]:Pointer}, intvals: {}
  %value_phi944 = load i64, i64 addrspace(13)* %arrayptr532, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %value_phi9.2.2 = load i64, i64 addrspace(13)* %62, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %63 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.2, !dbg !129: {[-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: {}
  %iv.next.3.2 = or i64 %25, 20, !dbg !125: {[-1]:Integer}, intvals: {}
  %64 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.2 = load i64, i64 addrspace(13)* %64, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %65 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.2, !dbg !129: {[-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: {}
  %29 = getelementptr inbounds i64, i64* %13, i64 %iv.next, !dbg !129: {[-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: {}
  %iv.next.2 = or i64 %25, 3, !dbg !125: {[-1]:Integer}, intvals: {}
  %30 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %31 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1, !dbg !129: {[-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: {}
  %iv.next.3 = or i64 %25, 4, !dbg !125: {[-1]:Integer}, intvals: {}
  %32 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3 = load i64, i64 addrspace(13)* %32, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %iv.next.epil = add nuw nsw i64 %172, 1, !dbg !125: {[-1]:Integer}, intvals: {1,9,}
  %173 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.epil = load i64, i64 addrspace(13)* %173, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %174 = getelementptr inbounds i64, i64* %13, i64 %172, !dbg !129: {[-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: {}
  %epil.iter.cmp.not = icmp eq i64 %iv.next5, %xtraiter, !dbg !116: {[-1]:Integer}, intvals: {}
  %2 = call {}*** @julia.get_pgcstack() #15: {}, intvals: {}
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !59, !tbaa !65, !range !68, !alias.scope !69, !noalias !72: {[-1]:Integer}, intvals: {}
  %154 = shl nuw nsw i64 %iv, 3, !dbg !125: {[-1]:Integer}, intvals: {0,}
  %155 = add nuw nsw i64 %iv.unr10, %154, !dbg !125: {[-1]:Integer}, intvals: {0,}
  %172 = add nuw nsw i64 %iv.unr, %iv4, !dbg !125: {[-1]:Integer}, intvals: {0,8,}
  %box = call noalias nonnull dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,-1]:Float@double}" {} addrspace(10)* @julia.gc_alloc_obj({}** nonnull %current_task1, i64 noundef 8, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511632845536 to {}*) to {} addrspace(10)*)) #16, !dbg !77: {[-1]:Pointer, [-1,-1]:Float@double}, intvals: {}
  %175 = insertvalue { i64, i64*, double, i64 } undef, i64 %.sroa.0.0, 0, !dbg !117: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer, [8]:Anything, [9]:Anything, [10]:Anything, [11]:Anything, [12]:Anything, [13]:Anything, [14]:Anything, [15]:Anything, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything}, intvals: {}
  %176 = insertvalue { i64, i64*, double, i64 } %175, i64* %.sroa.2.0, 1, !dbg !117: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer, [8]:Pointer, [16]:Anything, [17]:Anything, [18]:Anything, [19]:Anything, [20]:Anything, [21]:Anything, [22]:Anything, [23]:Anything, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything}, intvals: {}
  %177 = insertvalue { i64, i64*, double, i64 } %176, double %arrayref, 2, !dbg !117: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer, [8]:Pointer, [16]:Float@double, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything}, intvals: {}
  %178 = insertvalue { i64, i64*, double, i64 } %177, i64 %arraylen3, 3, !dbg !117: {[-1]:Float@double}, intvals: {}
  %49 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.1, !dbg !129: {[-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: {}
  %iv.next.4.1 = or i64 %25, 13, !dbg !125: {[-1]:Integer}, intvals: {}
  %50 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.1 = load i64, i64 addrspace(13)* %50, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %51 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.1, !dbg !129: {[-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: {}
  %iv.next.5.1 = or i64 %25, 14, !dbg !125: {[-1]:Integer}, intvals: {}
  %iv.next.521 = or i64 %25, 41, !dbg !125: {[-1]:Integer}, intvals: {}
  %106 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.521, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.522 = load i64, i64 addrspace(13)* %106, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %107 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.4, !dbg !129: {[-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: {}
  %iv.next.1.5 = or i64 %25, 42, !dbg !125: {[-1]:Integer}, intvals: {}
  %108 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.5, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.5 = load i64, i64 addrspace(13)* %108, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 6: {[-1]:Integer}, intvals: {6,}
i64 12: {[-1]:Integer}, intvals: {12,}
i64 5: {[-1]:Integer}, intvals: {5,}
i64 41: {[-1]:Integer}, intvals: {41,}
i64 42: {[-1]:Integer}, intvals: {42,}
  %iv.next.2.epil = or i64 %155, 3, !dbg !125: {[-1]:Integer}, intvals: {}
  %160 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.epil = load i64, i64 addrspace(13)* %160, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %161 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.epil, !dbg !129: {[-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: {}
  %iv.next.3.epil = or i64 %155, 4, !dbg !125: {[-1]:Integer}, intvals: {}
  %162 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.3.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.3.epil = load i64, i64 addrspace(13)* %162, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %163 = getelementptr inbounds i64, i64* %13, i64 %iv.next.2.epil, !dbg !129: {[-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: {}
  %iv.next.4.epil = or i64 %155, 5, !dbg !125: {[-1]:Integer}, intvals: {}
  %164 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.epil, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.epil = load i64, i64 addrspace(13)* %164, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %165 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.epil, !dbg !129: {[-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: {}
i64 49: {[-1]:Integer}, intvals: {49,}
  %134 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.6.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.6.6 = load i64, i64 addrspace(13)* %134, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %135 = getelementptr inbounds i64, i64* %13, i64 %iv.next.5.6, !dbg !129: {[-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: {}
  %iv.next.7.6 = or i64 %25, 56, !dbg !125: {[-1]:Integer}, intvals: {}
  %136 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.6 = load i64, i64 addrspace(13)* %136, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %137 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.6, !dbg !129: {[-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: {}
  %27 = getelementptr inbounds i64, i64* %13, i64 %25, !dbg !129: {[-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: {}
  %iv.next.1 = or i64 %25, 2, !dbg !125: {[-1]:Integer}, intvals: {}
  %28 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
i64 3: {[-1]:Integer}, intvals: {3,}
  %iv.next.7.1 = or i64 %25, 16, !dbg !125: {[-1]:Integer}, intvals: {}
  %56 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.7.1, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.7.1 = load i64, i64 addrspace(13)* %56, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %57 = getelementptr inbounds i64, i64* %13, i64 %iv.next.6.1, !dbg !129: {[-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: {}
  %iv.next.215 = or i64 %25, 17, !dbg !125: {[-1]:Integer}, intvals: {}
  %58 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.215, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.216 = load i64, i64 addrspace(13)* %58, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 8: {[-1]:Integer}, intvals: {8,}
i64 63: {[-1]:Integer}, intvals: {63,}
i64 58: {[-1]:Integer}, intvals: {58,}
i64 59: {[-1]:Integer}, intvals: {59,}
i64 60: {[-1]:Integer}, intvals: {60,}
  %124 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.1.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.1.6 = load i64, i64 addrspace(13)* %124, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %125 = getelementptr inbounds i64, i64* %13, i64 %iv.next.623, !dbg !129: {[-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: {}
  %iv.next.2.6 = or i64 %25, 51, !dbg !125: {[-1]:Integer}, intvals: {}
  %126 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.2.6, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.2.6 = load i64, i64 addrspace(13)* %126, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %127 = getelementptr inbounds i64, i64* %13, i64 %iv.next.1.6, !dbg !129: {[-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: {}
  %iv.next.623 = or i64 %25, 49, !dbg !125: {[-1]:Integer}, intvals: {}
  %122 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.623, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.624 = load i64, i64 addrspace(13)* %122, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %123 = getelementptr inbounds i64, i64* %13, i64 %iv.next.7.5, !dbg !129: {[-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: {}
  %iv.next.1.6 = or i64 %25, 50, !dbg !125: {[-1]:Integer}, intvals: {}
  %iv.next.4.2 = or i64 %25, 21, !dbg !125: {[-1]:Integer}, intvals: {}
  %66 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.4.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.4.2 = load i64, i64 addrspace(13)* %66, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %67 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.2, !dbg !129: {[-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: {}
  %iv.next.5.2 = or i64 %25, 22, !dbg !125: {[-1]:Integer}, intvals: {}
  %68 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.2, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.2 = load i64, i64 addrspace(13)* %68, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
i64 43: {[-1]:Integer}, intvals: {43,}
i64 44: {[-1]:Integer}, intvals: {44,}
i64 24: {[-1]:Integer}, intvals: {24,}
i64 45: {[-1]:Integer}, intvals: {45,}
i64 46: {[-1]:Integer}, intvals: {46,}
i64 -8: {[-1]:Integer}, intvals: {-8,}
  %10 = shl i64 %arraylen3, 3, !dbg !116: {[-1]:Integer}, intvals: {}
  %11 = add i64 %10, -8, !dbg !116: {[-1]:Integer}, intvals: {}
  %13 = bitcast i8* %12 to i64*, !dbg !116: {[-1]:Pointer}, intvals: {}
  %14 = add nuw i64 %arraylen3, 7, !dbg !116: {[-1]:Integer}, intvals: {}
  %15 = add nsw i64 %arraylen3, -2, !dbg !116: {[-1]:Integer}, intvals: {}
  %xtraiter = and i64 %14, 7, !dbg !116: {[-1]:Integer}, intvals: {}
  %16 = icmp ult i64 %15, 7, !dbg !116: {[-1]:Integer}, intvals: {}
  %22 = call nonnull "enzyme_type"="{[-1]:Pointer}" {} addrspace(10)* ({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)*, {} addrspace(10)*, {} addrspace(10)*, ...) @julia.call2({} addrspace(10)* ({} addrspace(10)*, {} addrspace(10)**, i32, {} addrspace(10)*)* noundef nonnull @ijl_invoke, {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511603774560 to {}*) to {} addrspace(10)*), {} addrspace(10)* noundef addrspacecast ({}* inttoptr (i64 132511562750992 to {}*) to {} addrspace(10)*), {} addrspace(10)* nofree nonnull %box, {} addrspace(10)* addrspacecast ({}* inttoptr (i64 132509245371280 to {}*) to {} addrspace(10)*)) #17, !dbg !77: {[-1]:Pointer}, intvals: {}
  %147 = getelementptr inbounds i64, i64* %13, i64 %iv.next.3.7, !dbg !129: {[-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: {}
  %iv.next.5.7 = or i64 %25, 62, !dbg !125: {[-1]:Integer}, intvals: {}
  %148 = getelementptr inbounds i64, i64 addrspace(13)* %arrayptr532, i64 %iv.next.5.7, !dbg !128: {[-1]:Pointer, [-1,-1]:Integer}, intvals: {}
  %value_phi9.5.7 = load i64, i64 addrspace(13)* %148, align 8, !dbg !103, !tbaa !104, !alias.scope !107, !noalias !110: {[-1]:Integer}, intvals: {}
  %149 = getelementptr inbounds i64, i64* %13, i64 %iv.next.4.7, !dbg !129: {[-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: {}
  %iv.next.6.7 = or i64 %25, 63, !dbg !125: {[-1]:Integer}, intvals: {}
  %ptls_field28 = getelementptr inbounds {}**, {}*** %2, i64 2: {}, intvals: {}
i64 64: {[-1]:Integer}, intvals: {64,}
i64 1: {[-1]:Integer}, intvals: {1,}
i64 18: {[-1]:Integer}, intvals: {18,}
i64 19: {[-1]:Integer}, intvals: {19,}
i64 38: {[-1]:Integer}, intvals: {38,}
i64 39: {[-1]:Integer}, intvals: {39,}
</analysis>

Illegal updateAnalysis prev:{[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer, [4]:Integer, [5]:Integer, [6]:Integer, [7]:Integer, [8]:Pointer, [16]:Float@double, [24]:Anything, [25]:Anything, [26]:Anything, [27]:Anything, [28]:Anything, [29]:Anything, [30]:Anything, [31]:Anything} new: {[0]:Float@double, [1]:Float@double, [2]:Float@double, [3]:Float@double, [4]:Float@double, [5]:Float@double, [6]:Float@double, [7]:Float@double, [8]:Float@double, [9]:Float@double, [10]:Float@double, [11]:Float@double, [12]:Float@double, [13]:Float@double, [14]:Float@double, [15]:Float@double, [16]:Float@double, [17]:Float@double, [18]:Float@double, [19]:Float@double, [20]:Float@double, [21]:Float@double, [22]:Float@double, [23]:Float@double}
val:   %177 = insertvalue { i64, i64*, double, i64 } %176, double %arrayref, 2, !dbg !117 origin=  %178 = insertvalue { i64, i64*, double, i64 } %177, i64 %arraylen3, 3, !dbg !117
MethodInstance for logp(::Vector{Int64}, ::BiasedCoin, ::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{(ρ = 1,)}}})


Caused by:
Stacktrace:
 [1] logp
   @ ./REPL[10]:6

Stacktrace:
  [1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:1711
  [2] EnzymeCreateForwardDiff(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…})
    @ Enzyme.API ~/.julia/packages/Enzyme/F71IJ/src/api.jl:168
  [3] enzyme!(job::GPUCompiler.CompilerJob{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:3304
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5250
  [5] codegen
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:4592 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5968
  [7] _thunk
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5968 [inlined]
  [8] cached_compilation
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6006 [inlined]
  [9] (::Enzyme.Compiler.var"#1220#1221"{})(ctx::LLVM.Context)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6073
 [10] JuliaContext(f::Enzyme.Compiler.var"#1220#1221"{}; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:52
 [11] JuliaContext(f::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:42
 [12] #s1957#1219
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6024 [inlined]
 [13] 
    @ Enzyme.Compiler ./none:0
 [14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
    @ Core ./boot.jl:602
 [15] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:397 [inlined]
 [16] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:315 [inlined]
 [17] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:300 [inlined]
 [18] _hess(h::HessLogP{Const{BiasedCoin}})
    @ Main ./REPL[22]:2
 [19] (::HessLogP{Const{BiasedCoin}})(ddx::Matrix{Float64}, x::ComponentVector{Float64, Vector{Float64}, Tuple{Axis{…}}})
    @ Main ./REPL[32]:4
 [20] top-level scope
    @ REPL[37]:1
Some type information was truncated. Use `show(err)` to see complete types.

Second Error

julia> m = HabituatingBiasedCoin();

julia> p = parameters(m);

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

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

julia> h!(H, p)

ERROR: Enzyme compilation failed due to illegal type analysis.
Current scope: 
; Function Attrs: mustprogress willreturn
define private fastcc "enzyme_type"="{[-1]:Float@double}" { double*, i64*, double*, double, double, i64 } @preprocess_augmented_julia_logp_5535({} addrspace(10)* nocapture nonnull readonly align 16 dereferenceable(40) "enzyme_inactive" "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Integer, [-1,33]:Integer, [-1,34]:Integer, [-1,35]:Integer, [-1,36]:Integer, [-1,37]:Integer, [-1,38]:Integer, [-1,39]:Integer}" "enzymejl_parmtype"="132511560660096" "enzymejl_parmtype_ref"="2" %0, [1 x {} addrspace(10)*] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,-1]:Float@double}" "enzymejl_parmtype"="132509954024144" "enzymejl_parmtype_ref"="1" %1, { {} addrspace(10)* } addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(8) "enzyme_type"="{[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,-1]:Float@double, [-1,0,8]:Integer, [-1,0,9]:Integer, [-1,0,10]:Integer, [-1,0,11]:Integer, [-1,0,12]:Integer, [-1,0,13]:Integer, [-1,0,14]:Integer, [-1,0,15]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,25]:Integer, [-1,0,26]:Integer, [-1,0,27]:Integer, [-1,0,28]:Integer, [-1,0,29]:Integer, [-1,0,30]:Integer, [-1,0,31]:Integer, [-1,0,32]:Integer, [-1,0,33]:Integer, [-1,0,34]:Integer, [-1,0,35]:Integer, [-1,0,36]:Integer, [-1,0,37]:Integer, [-1,0,38]:Integer, [-1,0,39]:Integer}" "enzymejl_parmtype"="132509965944528" "enzymejl_parmtype_ref"="1" %2) unnamed_addr #4 !dbg !734 {
top:
  %3 = call {}*** @julia.get_pgcstack() #16
  %ptls_field48 = getelementptr inbounds {}**, {}*** %3, i64 2
  %4 = bitcast {}*** %ptls_field48 to i64***
  %ptls_load4950 = load i64**, i64*** %4, align 8, !tbaa !49, !alias.scope !735, !noalias !738
  %5 = getelementptr inbounds i64*, i64** %ptls_load4950, i64 2
  %safepoint = load i64*, i64** %5, align 8, !tbaa !58, !alias.scope !740, !noalias !743
  fence syncscope("singlethread") seq_cst
  call void @julia.safepoint(i64* %safepoint) #16, !dbg !745
  fence syncscope("singlethread") seq_cst
  %getfield_addr = getelementptr inbounds { {} addrspace(10)* }, { {} addrspace(10)* } addrspace(11)* %2, i64 0, i32 0, !dbg !746
  %getfield = load atomic {} addrspace(10)*, {} addrspace(10)* addrspace(11)* %getfield_addr unordered, align 8, !dbg !746, !tbaa !58, !alias.scope !752, !noalias !755, !nonnull !17, !dereferenceable !159, !align !160
  %6 = addrspacecast {} addrspace(10)* %getfield to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !757
  %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %6, i64 0, i32 1, !dbg !757
  %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !757, !tbaa !82, !range !85, !alias.scope !759, !noalias !762
  %inbounds.not = icmp eq i64 %arraylen, 0, !dbg !757
  br i1 %inbounds.not, label %oob, label %idxend, !dbg !757

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Stacktrace:
  [1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:1711
  [2] EnzymeCreateForwardDiff(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…})
    @ Enzyme.API ~/.julia/packages/Enzyme/F71IJ/src/api.jl:168
  [3] enzyme!(job::GPUCompiler.CompilerJob{…}, mod::LLVM.Module, primalf::LLVM.Function, TT::Type, mode::Enzyme.API.CDerivativeMode, width::Int64, parallel::Bool, actualRetType::Type, wrap::Bool, modifiedBetween::NTuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:3304
  [4] codegen(output::Symbol, job::GPUCompiler.CompilerJob{…}; libraries::Bool, deferred_codegen::Bool, optimize::Bool, toplevel::Bool, strip::Bool, validate::Bool, only_entry::Bool, parent_job::Nothing)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5250
  [5] codegen
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:4592 [inlined]
  [6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5968
  [7] _thunk
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:5968 [inlined]
  [8] cached_compilation
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6006 [inlined]
  [9] (::Enzyme.Compiler.var"#1220#1221"{})(ctx::LLVM.Context)
    @ Enzyme.Compiler ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6073
 [10] JuliaContext(f::Enzyme.Compiler.var"#1220#1221"{}; kwargs::@Kwargs{})
    @ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:52
 [11] JuliaContext(f::Function)
    @ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:42
 [12] #s1957#1219
    @ ~/.julia/packages/Enzyme/F71IJ/src/compiler.jl:6024 [inlined]
 [13] 
    @ Enzyme.Compiler ./none:0
 [14] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
    @ Core ./boot.jl:602
 [15] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:397 [inlined]
 [16] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:315 [inlined]
 [17] autodiff
    @ ~/.julia/packages/Enzyme/F71IJ/src/Enzyme.jl:300 [inlined]
 [18] _hess(h::HessLogP{BatchDuplicated{HabituatingBiasedCoin{Base.RefValue{Float64}}, 2}})
    @ Main ./REPL[23]:2
 [19] (::HessLogP{BatchDuplicated{…}})(ddx::Matrix{Float64}, x::ComponentVector{Float64, Vector{…}, Tuple{…}})
    @ Main ./REPL[32]:4
 [20] top-level scope
    @ REPL[42]:1
Some type information was truncated. Use `show(err)` to see complete types.
@wsmoses
Copy link
Member

wsmoses commented Sep 28, 2024

@jbrea can you reduce this code to say just the logp function which causes the error?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants