Enzyme failing in Julia: ERROR: LoadError: Enzyme execution failed.
Hi there,
Opening this issue to see whether I could get some help with making Reverse mode in autodiff work. I made it work on trivial examples, even containing conditional statements but for some reason it won’t work on the function I am interested. This function takes in various parameters and then a vector of floats over which we want to calculate the gradient. It is a long function so for now I will only provide a reduced example. I am sorry if this is still too long. Below you can find self-contained code which includes a function at the end that calls autodiff using Enzyme. Moreover, after the code I post the error message.
using Distributions
using Polynomials
using Combinatorics
using Statistics
using FastGaussQuadrature
using Interpolations
using LinearAlgebra
using Printf
using BenchmarkTools
using StaticArrays
using Enzyme
struct SpecFormat
special_banks::Vector{Int64} # list of banks that are special
home_bank::Int64
max_banks_in_choice_set::Int64 # max number of banks in the choice set
hermite_order::Int64
bernstein_order::Int64
initial_search_cost_X::Vector{Union{Symbol, String}}
per_bank_search_cost_X::Vector{Union{Symbol, String}}
ρ_X::Vector{Union{Symbol, String}}
γ_X::Vector{Union{Symbol, String}}
γ_std_X::Vector{Union{Symbol, String}}
κ_X::Vector{Union{Symbol, String}}
initial_mean_shifters::Vector{Union{Symbol, String}}
initial_std_shifters::Vector{Union{Symbol, String}}
final_mean_shifters::Vector{Union{Symbol, String}}
final_std_shifters::Vector{Union{Symbol, String}}
end
struct SubParamIndices
κ::Int64
γ::Int64
γ_std::Int64
initial_search_cost::Int64
ρ::Int64
initial_bank_μ::Int64
initial_bank_σ::Int64
final_bank_μ::Int64
final_bank_σ::Int64
σinv_choice::Int64
σinv_start_search::Int64
per_bank_search_cost::Vector{Int64}
bank_params::Vector{Vector{Int64}}
jump_bid_params::Vector{Int64}
implied_jump_bid_params::Vector{Int64}
n_params::Int64
end
struct ParamIndices
bank_params::Vector{Vector{Int64}}
jump_bid_params::Vector{Int64}
implied_jump_bid_params::Vector{Int64}
initial_search_cost_X::Vector{Int64}
per_bank_search_cost_X::Vector{Int64}
ρ_X::Vector{Int64}
γ_X::Vector{Int64}
γ_std_X::Vector{Int64}
κ_X::Vector{Int64}
bank_mean_shifters::Vector{Int64}
bank_std_shifters::Vector{Int64}
initial_search_cost_X_indices::Vector{Int64}
ρ_X_indices::Vector{Int64}
γ_X_indices::Vector{Int64}
γ_std_X_indices::Vector{Int64}
κ_X_indices::Vector{Int64}
initial_mean_indices::Vector{Int64}
initial_std_indices::Vector{Int64}
final_mean_indices::Vector{Int64}
final_std_indices::Vector{Int64}
σinv_choice::Int64
σinv_start_search::Int64
n_params::Int64
end
function cumtrapz_upper(x::Vector{Float64}, y::AbstractArray{TV, 1})::Vector{TV} where TV
z::Vector{TV} = zeros(Float64, length(x))
z[1] = 0.0
@inbounds @fastmath for i = 1:length(x)-1
z[i+1] = z[i] + (x[i+1] - x[i]) * (y[i+1] + y[i])
end
z = z[end] .- z
return 0.5 * z
end
function hermite5_cdf(a::AbstractArray{TV, 1}, μ::TV, σ::TV) where TV
poly_coeffs::Vector{TV} = [-48 * a[1] * a[2] - 24 * sqrt(2) * a[2] * a[3] + 8 * sqrt(6) * a[1] * a[4] - 24 * sqrt(3) * a[3] * a[4] + 4 * sqrt(6) * a[2] * a[5] - 36 * a[4] * a[5],
-24 * a[2]^2 - 24 * sqrt(2) * a[1] * a[3] - 12 * a[3]^2 - 24 * a[4]^2 + 12 * sqrt(6) * a[1] * a[5] - 12 * sqrt(3) * a[3] * a[5] - 15 * a[5]^2,
-24 * sqrt(2) * a[2] * a[3] - 8 * sqrt(6) * a[1] * a[4] + 8 * sqrt(6) * a[2] * a[5] - 36 * a[4] * a[5],
-12 * a[3]^2 - 8 * sqrt(6) * a[2] * a[4] + 4 * a[4]^2 - 4 * sqrt(6) * a[1] * a[5] + 8 * sqrt(3) * a[3] * a[5] - 17 * a[5]^2,
-8 * sqrt(3) * a[3] * a[4] - 4 * sqrt(6) * a[2] * a[5] + 12 * a[4] * a[5],
-4 * a[4]^2 - 4 * sqrt(3) * a[3] * a[5] + 5 * a[5]^2,
-4 * a[4] * a[5],
-a[5]^2]
func(x) = σ * Polynomial(poly_coeffs).((x .- μ) / σ) .* pdf.(Normal(μ, σ), x) ./ 24.0 .+ cdf.(Normal(μ, σ), x)
return func
end
function hermite5_pdf(a::AbstractArray{TV, 1}, μ::TV, σ::TV) where TV
poly_coeffs::Vector{TV} = [a[1] - a[3] / sqrt(2) + sqrt(3/8) * a[5],
a[2] - sqrt(3/2) * a[4],
a[3] / sqrt(2) - sqrt(3/2) * a[5],
a[4] / sqrt(6),
a[5] / sqrt(24)]
func(x) = (Polynomial(poly_coeffs).((x .- μ) / σ)).^2 .* pdf.(Normal(μ, σ), x)
return func
end
function bernstein3(a::AbstractArray{TV, 1}; upper::Float64 = 1.0, lower::Float64 = 0.0) where TV
base_func(x) = a[1] * (1 - x)^3 + 3 * a[2] * x * (1 - x)^2 + 3 * a[3] * x^2 * (1 - x) + a[4] * x^3
func(x) = base_func((x - lower) / (upper - lower))
return func
end
function solve_cubic_eq(poly::AbstractVector{Complex{T}}) where T
# Cubic equation solver for complex polynomial (degree=3)
# http://en.wikipedia.org/wiki/Cubic_function Lagrange's method
a1 = 1 / poly[4]
E1 = -poly[3]*a1
E2 = poly[2]*a1
E3 = -poly[1]*a1
s0 = E1
E12 = E1*E1
A = 2*E1*E12 - 9*E1*E2 + 27*E3 # = s1^3 + s2^3
B = E12 - 3*E2 # = s1 s2
# quadratic equation: z^2 - Az + B^3=0 where roots are equal to s1^3 and s2^3
Δ = sqrt(A*A - 4*B*B*B)
if real(conj(A)*Δ)>=0 # scalar product to decide the sign yielding bigger magnitude
s1 = exp(log(0.5 * (A + Δ)) * (1/3))
else
s1 = exp(log(0.5 * (A - Δ)) * (1/3))
end
if s1 == 0
s2 = s1
else
s2 = B / s1
end
zeta1 = complex(-0.5, sqrt(T(3.0))*0.5)
zeta2 = conj(zeta1)
# return third*(s0 + s1 + s2), third*(s0 + s1*zeta2 + s2*zeta1), third*(s0 + s1*zeta1 + s2*zeta2)
sol1 = (1/3) * (s0 + s1 + s2)
sol2 = (1/3) * (s0 + s1 * zeta2 + s2 * zeta1)
sol3 = (1/3) * (s0 + s1 * zeta1 + s2 * zeta2)
if abs(imag(sol1)) < 1e-8 && real(sol1) > 0.0 && real(sol1) < 1.0
return real(sol1)
elseif abs(imag(sol2)) < 1e-8 && real(sol2) > 0.0 && real(sol2) < 1.0
return real(sol2)
elseif abs(imag(sol3)) < 1e-8 && real(sol3) > 0.0 && real(sol3) < 1.0
return real(sol3)
else
return NaN
end
end
function bernstein3_inv(p::AbstractArray{TV, 1}, val::Float64; upper::Float64 = 1.0, lower::Float64 = 0.0) where TV
# Get this in the form ax^3 + bx^2 + cx + d = 0
a = p[4] + 3 * p[2] - 3 * p[3] - p[1]
b = 3 * p[1] - 6 * p[2] + 3 * p[3]
c = 3 * p[2] - 3 * p[1]
d = p[1] - val
coeffs = [d, c, b, a]
if d >= 0.0 # (poly(0.0))
return lower
elseif a + b + c + d <= 0.0 # (poly(1.0))
return upper
end
x = solve_cubic_eq(Complex.(coeffs))
return x * (upper - lower) + lower
end
# From PolynomialRoots.jl
function solve_cubic_eq(poly::AbstractVector{Complex{T}}) where T
# Cubic equation solver for complex polynomial (degree=3)
# http://en.wikipedia.org/wiki/Cubic_function Lagrange's method
a1 = 1 / poly[4]
E1 = -poly[3]*a1
E2 = poly[2]*a1
E3 = -poly[1]*a1
s0 = E1
E12 = E1*E1
A = 2*E1*E12 - 9*E1*E2 + 27*E3 # = s1^3 + s2^3
B = E12 - 3*E2 # = s1 s2
# quadratic equation: z^2 - Az + B^3=0 where roots are equal to s1^3 and s2^3
Δ = sqrt(A*A - 4*B*B*B)
if real(conj(A)*Δ)>=0 # scalar product to decide the sign yielding bigger magnitude
s1 = exp(log(0.5 * (A + Δ)) * (1/3))
else
s1 = exp(log(0.5 * (A - Δ)) * (1/3))
end
if s1 == 0
s2 = s1
else
s2 = B / s1
end
zeta1 = complex(-0.5, sqrt(T(3.0))*0.5)
zeta2 = conj(zeta1)
# return third*(s0 + s1 + s2), third*(s0 + s1*zeta2 + s2*zeta1), third*(s0 + s1*zeta1 + s2*zeta2)
sol1 = (1/3) * (s0 + s1 + s2)
sol2 = (1/3) * (s0 + s1 * zeta2 + s2 * zeta1)
sol3 = (1/3) * (s0 + s1 * zeta1 + s2 * zeta2)
if abs(imag(sol1)) < 1e-8 && real(sol1) > 0.0 && real(sol1) < 1.0
return real(sol1)
elseif abs(imag(sol2)) < 1e-8 && real(sol2) > 0.0 && real(sol2) < 1.0
return real(sol2)
elseif abs(imag(sol3)) < 1e-8 && real(sol3) > 0.0 && real(sol3) < 1.0
return real(sol3)
else
return NaN
end
end
function bernstein3_inv(p::AbstractArray{TV, 1}, val::Float64; upper::Float64 = 1.0, lower::Float64 = 0.0) where TV
# Get this in the form ax^3 + bx^2 + cx + d = 0
a = p[4] + 3 * p[2] - 3 * p[3] - p[1]
b = 3 * p[1] - 6 * p[2] + 3 * p[3]
c = 3 * p[2] - 3 * p[1]
d = p[1] - val
coeffs = [d, c, b, a]
if d >= 0.0 # (poly(0.0))
return lower
elseif a + b + c + d <= 0.0 # (poly(1.0))
return upper
end
x = solve_cubic_eq(Complex.(coeffs))
return x * (upper - lower) + lower
end
# Here, we take in a set of choice sets, each of with can be repeated N times.
function logit_probabilities!(inside_probabilities::Array{TV, 3}, outside_probabilities::Matrix{TV}, utilities::Array{TV, 3}, N::Vector{Int64}, σinv::TV) where TV
for uJ_index in axes(utilities, 2)
for bias_index in axes(utilities, 3)
this_exp_probs = @views exp.(utilities[:, uJ_index, bias_index] * σinv)
inv_denom = 1.0 / (1.0 + dot(this_exp_probs, N))
inside_probabilities[:, uJ_index, bias_index] .= inv_denom * this_exp_probs
outside_probabilities[uJ_index, bias_index] = inv_denom
end
end
return nothing
end
function partial_interpolate(x::AbstractArray{Float64, 1}, y::AbstractArray{TV, 1}, idx::Int64, val::Float64) where TV
z::TV = 0.0
if idx == 0
z = x[1]
elseif idx == length(x)
z = x[end]
else
z = ((y[idx+1] - y[idx]) * (val - x[idx]) / (x[idx+1] - x[idx])) + y[idx]
end
return z
end
function get_spec()::SpecFormat
special_banks::Vector{Int64} = [1, 14, 16]
home_bank::Int64 = 12
max_banks_in_choice_set::Int64 = 3
hermite_order::Int64 = 5
bernstein_order::Int64 = 4
initial_search_cost_X::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income]
per_bank_search_cost_X::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income, :s_n_branches]
ρ_X::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income]
γ_X::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income]
γ_std_X::Vector{Union{Symbol, String}} = [:ones]
κ_X::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income]
initial_mean_shifters::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income, :b_term, :b_amount]
initial_std_shifters::Vector{Union{Symbol, String}} = [:ones, :b_term, :b_amount]
final_mean_shifters::Vector{Union{Symbol, String}} = [:ones, :x_educ_high, :x_income, :b_term, :b_amount]
final_std_shifters::Vector{Union{Symbol, String}} = [:ones, :b_term, :b_amount]
spec::SpecFormat = SpecFormat(special_banks, home_bank, max_banks_in_choice_set, hermite_order, bernstein_order,
initial_search_cost_X, per_bank_search_cost_X, ρ_X, γ_X, γ_std_X, κ_X, initial_mean_shifters, initial_std_shifters,
final_mean_shifters, final_std_shifters)
return spec
end
function get_indices(grid::AbstractArray{Float64, 1}, vals::AbstractArray{Float64, 1})::Vector{Int64}
indices = zeros(Int64, length(vals))
for (i, val) in enumerate(vals)
indices[i] = searchsortedlast(grid, val)
end
return indices
end
function get_param_indices(spec::SpecFormat)::Tuple{ParamIndices, SubParamIndices}
param_val::Int64 = 0
bank_params::Vector{Vector{Int64}} = []
for b = 1:(length(spec.special_banks)+1)
this_bank_params::Vector{Int64}, param_val = param_update(spec.hermite_order, param_val)
push!(bank_params, this_bank_params)
end
jump_bid_params::Vector{Int64}, param_val = param_update(spec.hermite_order, param_val)
implied_jump_bid_params::Vector{Int64}, param_val = param_update(spec.bernstein_order, param_val)
initial_search_cost_X::Vector{Int64}, param_val = param_update(length(spec.initial_search_cost_X), param_val)
per_bank_search_cost_X::Vector{Int64}, param_val = param_update(length(spec.per_bank_search_cost_X), param_val)
ρ_X::Vector{Int64}, param_val = param_update(length(spec.ρ_X), param_val)
γ_X::Vector{Int64}, param_val = param_update(length(spec.γ_X), param_val)
γ_std_X::Vector{Int64}, param_val = param_update(length(spec.γ_std_X), param_val)
κ_X::Vector{Int64}, param_val = param_update(length(spec.κ_X), param_val)
@assert(length(spec.initial_mean_shifters) == length(spec.final_mean_shifters))
@assert(length(spec.initial_std_shifters) == length(spec.final_std_shifters))
bank_mean_shifters::Vector{Int64}, param_val = param_update(length(spec.initial_mean_shifters), param_val)
bank_std_shifters::Vector{Int64}, param_val = param_update(length(spec.initial_std_shifters), param_val)
σinv_choice::Int64, param_val = param_update(1, param_val; return_as_vector = false)
σinv_start_search::Int64, param_val = param_update(1, param_val; return_as_vector = false)
# Now get the inidices: Will have one X matrix at the individual level (N_individuals x total parameters)
# and then indices for which subsets of this X to use for various parameters
all_X = sort!(union(spec.initial_search_cost_X, spec.ρ_X, spec.γ_X, spec.γ_std_X, spec.κ_X,
spec.initial_mean_shifters, spec.initial_std_shifters, spec.final_mean_shifters, spec.final_std_shifters)) # per-bank search cost will be at the individual-bank level
initial_search_cost_X_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.initial_search_cost_X]
ρ_X_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.ρ_X]
γ_X_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.γ_X]
γ_std_X_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.γ_std_X]
κ_X_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.κ_X]
initial_mean_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.initial_mean_shifters]
initial_std_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.initial_std_shifters]
final_mean_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.final_mean_shifters]
final_std_indices::Vector{Int64} = [findall(x -> x == i, all_X)[1] for i in spec.final_std_shifters]
param_indices = ParamIndices(bank_params, jump_bid_params, implied_jump_bid_params,
initial_search_cost_X, per_bank_search_cost_X, ρ_X, γ_X, γ_std_X, κ_X,
bank_mean_shifters, bank_std_shifters,
initial_search_cost_X_indices, ρ_X_indices, γ_X_indices, γ_std_X_indices, κ_X_indices,
initial_mean_indices, initial_std_indices, final_mean_indices, final_std_indices,
σinv_choice, σinv_start_search, param_val)
sub_param_val::Int64 = 0
sub_κ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_γ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_γ_std::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_initial_search_cost::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_ρ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_initial_bank_μ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_initial_bank_σ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_final_bank_μ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_final_bank_σ::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_σinv_choice::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_σinv_start_search::Int64, sub_param_val = param_update(1, sub_param_val; return_as_vector = false)
sub_per_bank_search_cost::Vector{Int64}, sub_param_val = param_update(length(spec.special_banks)+1, sub_param_val)
sub_bank_params::Vector{Vector{Int64}} = []
for b = 1:(length(spec.special_banks)+1)
this_bank_params::Vector{Int64}, sub_param_val = param_update(spec.hermite_order, sub_param_val)
push!(sub_bank_params, this_bank_params)
end
sub_jump_bid_params::Vector{Int64}, sub_param_val = param_update(spec.hermite_order, sub_param_val)
sub_implied_jump_bid_params::Vector{Int64}, sub_param_val = param_update(spec.bernstein_order, sub_param_val)
sub_param_indices = SubParamIndices(sub_κ, sub_γ, sub_γ_std, sub_initial_search_cost, sub_ρ,
sub_initial_bank_μ, sub_initial_bank_σ, sub_final_bank_μ, sub_final_bank_σ,
sub_σinv_choice, sub_σinv_start_search, sub_per_bank_search_cost, sub_bank_params,
sub_jump_bid_params, sub_implied_jump_bid_params, sub_param_val)
return (param_indices, sub_param_indices)
end
function param_update(N::Int64, param_val::Int64; return_as_vector::Bool = true)
if N > 1 || return_as_vector
indices::Vector{Int64} = collect(1:N) .+ param_val
param_val += N
return indices, param_val
else
indices_int::Int64 = param_val + 1
param_val += 1
return indices_int, param_val
end
end
function get_ll_single(params::AbstractArray{TV, 1}, param_indices::SubParamIndices, uJ_grid::Vector{Float64}, base_nodes::SVector{9, Float64}, weights::SVector{9, Float64}
, u_current_idx::Int64, remaining_term::Float64, amount::Float64, chosen_bank::Int64, current_monthly_payment::Float64, final_monthly_payment::Float64,
search_type::Int64, choice_sets::Vector{Vector{Int64}}, choice_sets_N::Vector{Int64}, chosen_choice_set::Int64) where TV
# Initialize the values of the frictions -- this applies for everyone
κ::TV = params[param_indices.κ]
γ::TV = params[param_indices.γ]
γ_std::TV = params[param_indices.γ_std]
initial_search_cost::TV = params[param_indices.initial_search_cost]
ρ::TV = params[param_indices.ρ]
initial_bank_μ::TV = params[param_indices.initial_bank_μ]
initial_bank_σ::TV = params[param_indices.initial_bank_σ]
final_bank_μ::TV = params[param_indices.final_bank_μ]
final_bank_σ::TV = params[param_indices.final_bank_σ]
σinv_choice::TV = params[param_indices.σinv_choice]
σinv_start_search::TV = params[param_indices.σinv_start_search]
## Now the loop begins
# Note that the cdf of zero-profit rates is written in terms of monthly payments if A = 1, scaled by number of
# payments. So, a value of m corresponds to a monthly payment of m * A / T.
#
# We know that monthly utility = (delta - m * A / T) - kappa / NPVrate(T),
# So, Pr(utility <= u) = Pr((delta - m * A / T) - kappa/NPV <= u) = Pr(scaled monthly payment >= (T/A) * (delta - (u + kappa/NPV)))
# The bias is in terms of monthly payments. So, we just add the bias.
β_customer_m::Float64 = 0.95^(1/12)
per_bank_search_costs::Vector{TV} = params[param_indices.per_bank_search_cost]
npv_scale::Float64 = (1.0 - β_customer_m^remaining_term) / (1 - β_customer_m)
overall_scale::Float64 = remaining_term / amount
bias_grid = base_nodes * γ_std * sqrt(2) .+ γ # in units of dollars
scaled_κ::TV = κ / npv_scale # in units of dollars per month
# Generate the cdfs and pdfs for the banks: cdfs at the time of search, and both later if needed
# Maps utilities ($) to utilities ($) <--- could rethink whether this is the best map
implied_jump_bid::Function = bernstein3(params[param_indices.implied_jump_bid_params]; upper = maximum(uJ_grid) + 2.0, lower = minimum(uJ_grid) - 2.0)
implied_jump_bid_inv(val::Float64) = bernstein3_inv(params[param_indices.implied_jump_bid_params], val; upper = maximum(uJ_grid) + 2.0, lower = minimum(uJ_grid) - 2.0)
initial_bank_cdf = [x -> 1.0 .- hermite5_cdf(params[a], initial_bank_μ, initial_bank_σ)(-overall_scale .* (x .+ scaled_κ)) for a in param_indices.bank_params]
initial_jump_bid_cdf::Function = x -> 1.0 .- hermite5_cdf(params[param_indices.jump_bid_params], initial_bank_μ, initial_bank_σ)(-overall_scale .* x)
initial_jump_bid_pdf::Function = x -> overall_scale .* hermite5_pdf(params[param_indices.jump_bid_params], initial_bank_μ, initial_bank_σ)(-overall_scale .* x)
initial_home_bank_cdf(x) = initial_jump_bid_cdf(implied_jump_bid.(x))
final_bank_cdf = [x -> 1.0 .- hermite5_cdf(params[a], final_bank_μ, final_bank_σ)(@. -overall_scale * (x + scaled_κ)) for a in param_indices.bank_params]
final_bank_pdf = [x -> overall_scale .* hermite5_pdf(params[a], final_bank_μ, final_bank_σ)(@. -overall_scale * (x + scaled_κ)) for a in param_indices.bank_params]
final_jump_bid_cdf::Function = x -> 1.0 .- hermite5_cdf(params[param_indices.jump_bid_params], final_bank_μ, final_bank_σ)(@. -overall_scale * x)
final_jump_bid_pdf::Function = x -> overall_scale .* hermite5_pdf(params[param_indices.jump_bid_params], final_bank_μ, final_bank_σ)(@. -overall_scale * x)
final_home_bank_cdf(x) = final_jump_bid_cdf(implied_jump_bid.(x))
refi_at_home_bank::Bool = chosen_bank == 0
u_current::Float64 = -current_monthly_payment
u_final::TV = -final_monthly_payment - scaled_κ * refi_at_home_bank
choice_set_utilities::Array{TV, 3} = zeros(length(choice_sets), length(uJ_grid), length(bias_grid)) ### CONTAINER 3D-FLOAT
base_0::Vector{TV} = zeros(length(uJ_grid)) ### CONTAINER 1D FLOAT SIZE UJ_GRID
base_1::Vector{TV} = zeros(length(uJ_grid)) ### CONTAINER 1D FLOAT SIZE UJ_GRID
to_add::Vector{TV} = zeros(length(uJ_grid)) ### CONTAINER 1D FLOAT SIZE UJ_GRID
initial_bank_cdf_vals::Matrix{Float64} = zeros(Float64, length(initial_bank_cdf), length(uJ_grid))
one_minus_initial_bank_cdf_vals::Matrix{TV} = zeros(Float64, length(initial_bank_cdf), length(uJ_grid))
@inbounds for (bias_index, bias) in enumerate(bias_grid)
biased_uJ = uJ_grid .+ bias
for b = 1:length(initial_bank_cdf)
initial_bank_cdf_vals[b, :] .= initial_bank_cdf[b](biased_uJ)
one_minus_initial_bank_cdf_vals[b, :] .= @views 1.0 .- initial_bank_cdf_vals[b, :]
end
initial_home_bank_cdf_vals::Vector{Float64} = initial_home_bank_cdf(biased_uJ)
good_indices::BitVector = (initial_home_bank_cdf_vals[end] .- initial_home_bank_cdf_vals) .>= 1e-7
@inbounds for (choice_set_index, choice_set) in enumerate(choice_sets)
base_0 .= @views initial_bank_cdf_vals[choice_set[1], :]
for (b_idx, b) in enumerate(choice_set)
b_idx > 1 || continue
base_0 .*= @views initial_bank_cdf_vals[b, :]
end
cumtrapz_0 = cumtrapz_upper(uJ_grid, base_0)
base_1 .= 0.0
for (b_index, b) in enumerate(choice_set)
to_add .= @views one_minus_initial_bank_cdf_vals[b, :]
for (bprime_index, bprime) in enumerate(choice_set)
if bprime_index != b_index
to_add .*= @views initial_bank_cdf_vals[bprime, :]
end
end
base_1 .+= to_add
end
cumtrapz_1 = cumtrapz_upper(uJ_grid, base_1)
base_1 .*= initial_home_bank_cdf_vals
cumtrapz_1_with_home = cumtrapz_upper(uJ_grid, base_1)
next_part = base_0
for i in eachindex(next_part)
good_indices[i] ? next_part[i] = uJ_grid[end] - uJ_grid[i] - cumtrapz_0[i] - (cumtrapz_1_with_home[i] - initial_home_bank_cdf_vals[i] * cumtrapz_1[i]) / (initial_home_bank_cdf_vals[end] - initial_home_bank_cdf_vals[i]) : uJ_grid[end] - uJ_grid[i] - cumtrapz_0[i] - cumtrapz_1[i]
end
this_search_cost::TV = sum([per_bank_search_costs[b] for b in choice_set])
choice_set_utilities[choice_set_index, :, bias_index] .= @. next_part - this_search_cost
end
end
choice_set_probabilities::Array{TV, 3} = zeros(size(choice_set_utilities))
outside_option_probabilities::Array{TV, 2} = zeros(length(uJ_grid), length(bias_grid))
logit_probabilities!(choice_set_probabilities, outside_option_probabilities,
choice_set_utilities, choice_sets_N, σinv_choice)
benefit_of_search_uJ::Array{TV, 2} = dropdims(sum((choice_sets_N .* choice_set_probabilities) .* choice_set_utilities, dims = 1), dims = 1)
S_base::Vector{TV} = zeros(length(bias_grid))
for (bias_index, bias) in enumerate(bias_grid)
initial_jump_bid_pdf_vals = initial_jump_bid_pdf(uJ_grid .+ bias)
S_base[bias_index] = @views partial_cumtrapz(uJ_grid, benefit_of_search_uJ[1:(u_current_idx+1), bias_index] .* initial_jump_bid_pdf_vals[1:(u_current_idx+1)], u_current_idx, u_current) + initial_jump_bid_cdf(u_current + bias) *
partial_interpolate(uJ_grid, benefit_of_search_uJ[:, bias_index], u_current_idx, u_current)
end
pr_search::Vector{TV} = @. (exp(σinv_start_search * (S_base - initial_search_cost))) / (1.0 + (exp(σinv_start_search * (S_base - initial_search_cost)))) ### THIS ARE VECTORS OF SIZE |CHOICE SETS|=9
pr_no_search = 1 .- pr_search
likelihood = 1 - ρ + ρ * dot(pr_no_search, weights)
return log(likelihood)
end
function call_autodiff_example()
spec::SpecFormat = get_spec()
sub_param_indices::SubParamIndices = get_param_indices(spec)[2]
uJ_grid::Vector{Float64} = union(collect(0:0.05:2.0), [2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0]) # this will be a constant
uJ_grid = sort!(-uJ_grid)
base_nodes, base_weights = SVector{9}.(FastGaussQuadrature.gausshermite(9))
weights = SVector{9}(base_weights / sqrt(π))
params = [0.0, 0.0, 0.25, 0.0, 0.1, 1.2, 0.25, 1.2, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0,
1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0]
u_current_idx = 44
remaining_term = 67.0
amount = 13.32
chosen_bank = -1
current_monthly_payment = 0.24
final_monthly_payment = NaN
search_type = 1
choice_sets = [[1], [1, 2], [1, 2, 3], [1, 2, 4], [1, 3], [1, 3, 4],
[1, 4], [1, 4, 4], [2], [2, 3], [2, 3, 4], [2, 4], [2, 4, 4],
[3], [3, 4], [3, 4, 4], [4], [4, 4], [4, 4, 4]]
choice_sets_N = [1, 1, 1, 15, 1, 15, 15, 105, 1, 1, 15, 15, 105, 1, 15, 105, 15, 105, 455]
chosen_choice_set = 0
dx = zeros(44)
single_ll(x) = get_ll_single(x, sub_param_indices, uJ_grid, base_nodes, weights, u_current_idx,
remaining_term, amount, chosen_bank, current_monthly_payment, final_monthly_payment, search_type, choice_sets, choice_sets_N, chosen_choice_set)
autodiff(Reverse, single_ll, Active, Duplicated(params, dx))
end
call_autodiff_example()
When I run this I get an error with the Stacktrace reading:
ERROR: LoadError: Enzyme execution failed.
Mismatched activity for: store {} addrspace(10)* %value_phi5253395, {} addrspace(10)** %.fca.1.gep, align 8, !dbg !1671, !noalias !216 const val: %value_phi5253395 = phi {} addrspace(10)* [ %arrayref514, %L1631.lr.ph ], [ %arrayref1084, %L3207 ]
Type tree: {[-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}
llvalue= %arrayref514 = load {} addrspace(10)*, {} addrspace(10)* addrspace(13)* %arrayptr5112966, align 8, !dbg !1096, !tbaa !1097, !alias.scope !197, !noalias !198
You may be using a constant variable as temporary storage for active memory (https://enzyme.mit.edu/julia/stable/faq/#Activity-of-temporary-storage). If not, please open an issue, and either rewrite this variable to not be conditionally active or use Enzyme.API.runtimeActivity!(true) as a workaround for now
Stacktrace:
[1] get_ll_single
@ ~/Documents/refinancing/multistep/example_Enzyme.jl:527
Stacktrace:
[1] throwerr(cstr::Cstring)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/aioBJ/src/compiler.jl:1612
[2] get_ll_single
@ ~/Documents/refinancing/multistep/example_Enzyme.jl:527
[3] *
@ ./float.jl:411 [inlined]
[4] trapz
@ ~/Documents/refinancing/multistep/example_Enzyme.jl:87
[5] macro expansion
@ ~/.julia/packages/Enzyme/aioBJ/src/compiler.jl:6587 [inlined]
[6] enzyme_call
@ ~/.julia/packages/Enzyme/aioBJ/src/compiler.jl:6188 [inlined]
[7] CombinedAdjointThunk
@ ~/.julia/packages/Enzyme/aioBJ/src/compiler.jl:6065 [inlined]
[8] autodiff
@ ~/.julia/packages/Enzyme/aioBJ/src/Enzyme.jl:309 [inlined]
[9] autodiff
@ ~/.julia/packages/Enzyme/aioBJ/src/Enzyme.jl:321 [inlined]
[10] call_autofiff_example()
@ Main ~/Documents/refinancing/multistep/example_Enzyme.jl:592
[11] top-level scope
@ ~/Documents/refinancing/multistep/example_Enzyme.jl:596
[12] include(fname::String)
@ Base.MainInclude ./client.jl:489
[13] top-level scope
@ REPL[2]:1
in expression starting at /Users/miguelborrero/Documents/refinancing/multistep/example_Enzyme.jl:596
Any advice would be greatly appreciated! Thanks a lot in advance!
What happens if you enable Enzyme.API.runtimeActivity!(true) right after loading Enzyme like the error message suggests?
Okay, that made it work in my example! Thats great. Nevertheless when added that change to the actual program it crashed with the following Stacktrace:
Stacktrace:
[1] getindex
@ ./essentials.jl:13
[2] solve_cubic_eq
@ ~/Documents/refinancing/multistep/scratch_full_likelihood.jl:170
Stacktrace:
[1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:2057
[2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
@ Enzyme.API ~/.julia/packages/Enzyme/3mqec/src/api.jl:156
[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::Tuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:3708
[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/3mqec/src/compiler.jl:5845
[5] codegen
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:5123 [inlined]
[6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool) (repeats 2 times)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6652
[7] cached_compilation
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6690 [inlined]
[8] (::Enzyme.Compiler.var"#28587#28588"{…})(ctx::LLVM.Context)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6759
[9] JuliaContext(f::Enzyme.Compiler.var"#28587#28588"{…}; kwargs::@Kwargs{})
@ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:52
[10] JuliaContext(f::Function)
@ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:42
[11] #s2010#28586
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6710 [inlined]
[12]
@ Enzyme.Compiler ./none:0
[13] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:602
[14] autodiff
@ ~/.julia/packages/Enzyme/3mqec/src/Enzyme.jl:304 [inlined]
[15] autodiff
@ ~/.julia/packages/Enzyme/3mqec/src/Enzyme.jl:321 [inlined]
[16] macro expansion
@ ./timing.jl:279 [inlined]
[17] macro expansion
@ ~/Documents/refinancing/multistep/scratch_full_likelihood.jl:343 [inlined]
[18] (::var"#31#threadsfor_fun#8"{var"#31#threadsfor_fun#7#9"{…}})(tid::Int64; onethread::Bool)
@ Main ./threadingconstructs.jl:214
[19] #31#threadsfor_fun
@ Main ./threadingconstructs.jl:181 [inlined]
[20] (::Base.Threads.var"#1#2"{var"#31#threadsfor_fun#8"{var"#31#threadsfor_fun#7#9"{…}}, Int64})()
@ Base.Threads ./threadingconstructs.jl:153
Stacktrace:
[1] threading_run(fun::var"#31#threadsfor_fun#8"{var"#31#threadsfor_fun#7#9"{…}}, static::Bool)
@ Base.Threads ./threadingconstructs.jl:171
[2] macro expansion
@ ./threadingconstructs.jl:219 [inlined]
[3] get_ll_loop!(grad::Vector{…}, params::Vector{…}, data::DataFormat, param_indices::ParamIndices, sub_param_indices::SubParamIndices, uJ_grid::Vector{…}, u_current_idx::Vector{…})
@ Main ~/Documents/refinancing/multistep/scratch_full_likelihood.jl:331
[4] top-level scope
@ ./timing.jl:279 [inlined]
[5] top-level scope
@ ~/Documents/refinancing/multistep/scratch_full_likelihood.jl:0
[6] include(fname::String)
@ Base.MainInclude ./client.jl:489
[7] top-level scope
@ REPL[2]:1
in expression starting at /Users/miguelborrero/Documents/refinancing/multistep/scratch_full_likelihood.jl:1079
Some type information was truncated. Use `show(err)` to see complete types.
Before that I get a long message which ends with:
But the message is so long that I can not scroll all the way up. Any ideas about what it could happen? Like message [2] of the stacktrace points to an auxiliary function that was also used in the simplified example and the later worked.
Can you post the entire log?
And open an MWE for this other error?
Sorry for the delay, I was travelling. I managed to reduce the code to a significantly simplified version by identifying the single line that was causing the problem. I will in this order include the information you asked for: 1. copy of the log file outputed by Julia using Logging package 2. The file seemed to be missing the Julia stacktrace so I will copy this from the terminal (its the same as in the previously posted example but code lines where the code crashes have changed. 3. MWE
┌ Error: An error occurred: Enzyme.Compiler.EnzymeInternalError("Illegal replace ficticious phi for: %arrayref.sroa.2.0.copyload_replacementA = phi double , !dbg !36 of %arrayref.sroa.2.0.copyload = load double, double addrspace(13)* %arrayref.sroa.2.0..sroa_idx256, align 1, !dbg !44, !tbaa !213, !alias.scope !214, !noalias !215\n; Function Attrs: mustprogress willreturn\ndefine internal fastcc \"enzyme_type\"=\"{[-1]:Float@double}\" void @diffejulia_solve_cubic_eq_4262({} addrspace(10)* align 16 dereferenceable(40) \"enzyme_type\"=\"{[-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}\" \"enzymejl_parmtype\"=\"4507947536\" \"enzymejl_parmtype_ref\"=\"2\" %0, {} addrspace(10)* align 16 \"enzyme_type\"=\"{[-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}\" \"enzymejl_parmtype\"=\"4507947536\" \"enzymejl_parmtype_ref\"=\"2\" %\"'\", double %differeturn, { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg) unnamed_addr #42 !dbg !4820 {\ntop:\n %\"'ai17\" = alloca [2 x double], i64 1, align 8\n %1 = bitcast [2 x double]* %\"'ai17\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %1, i8 0, i64 16, i1 false)\n %\"'ipc77\" = bitcast i8* %1 to [2 x double]*\n %2 = bitcast i8* %201 to [2 x double]*, !enzyme_caststack !35\n %\"'ai16\" = alloca [2 x double], i64 1, align 8\n %3 = bitcast [2 x double]* %\"'ai16\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %3, i8 0, i64 16, i1 false)\n %4 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 2\n %\"'ipc\" = bitcast i8* %3 to [2 x double]*\n %5 = bitcast i8* %4 to [2 x double]*, !enzyme_caststack !35\n %\"'ai14\" = alloca [2 x double], i64 1, align 8\n %6 = bitcast [2 x double]* %\"'ai14\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %6, i8 0, i64 16, i1 false)\n %7 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 1\n %\"'ipc85\" = bitcast i8* %6 to [2 x double]*\n %8 = bitcast i8* %7 to [2 x double]*, !enzyme_caststack !35\n %\"newstruct46'ai\" = alloca [2 x double], i64 1, align 8\n %9 = bitcast [2 x double]* %\"newstruct46'ai\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %9, i8 0, i64 16, i1 false)\n %\"newstruct46'ipc\" = bitcast i8* %9 to [2 x double]*\n %10 = bitcast i8* %199 to [2 x double]*, !enzyme_caststack !35\n %\"newstruct95'ai\" = alloca [2 x double], i64 1, align 8\n %11 = bitcast [2 x double]* %\"newstruct95'ai\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %11, i8 0, i64 16, i1 false)\n %\"newstruct95'ipc\" = bitcast i8* %11 to [2 x double]*\n %12 = bitcast i8* %198 to [2 x double]*, !enzyme_caststack !35\n %\"newstruct40'ai\" = alloca [2 x double], i64 1, align 8\n %13 = bitcast [2 x double]* %\"newstruct40'ai\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %13, i8 0, i64 16, i1 false)\n %\"newstruct40'ipc\" = bitcast i8* %13 to [2 x double]*\n %14 = bitcast i8* %197 to [2 x double]*, !enzyme_caststack !35\n %\"'ai\" = alloca [2 x double], i64 1, align 8\n %15 = bitcast [2 x double]* %\"'ai\" to i8*\n call void @llvm.memset.p0i8.i64(i8* nonnull dereferenceable(16) dereferenceable_or_null(16) %15, i8 0, i64 16, i1 false)\n %16 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 0\n %\"'ipc47\" = bitcast i8* %15 to [2 x double]*\n %17 = bitcast i8* %16 to [2 x double]*, !enzyme_caststack !35\n %18 = call {}*** @julia.get_pgcstack() #47\n %ptls_field263_replacementA = phi {}*** \n %ptls_load264265_replacementA = phi i64** \n %_replacementA7 = phi i64** \n %_replacementA = phi { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* , !dbg !4821\n %arraylen_ptr_replacementA = phi i64 addrspace(11)* , !dbg !4821\n %arraylen_replacementA = phi i64 , !dbg !4821\n %inbounds_replacementA = phi i1 , !dbg !4821\n br i1 true, label %idxend, label %oob, !dbg !4821\n\nL111: ; preds = %idxend\n %19 = fadd double %162, %.fca.0.extract244, !dbg !4823\n %20 = fadd double %163, %.fca.1.extract245, !dbg !4823\n %21 = fmul double %19, 5.000000e-01, !dbg !4826\n %22 = fmul double %20, 5.000000e-01, !dbg !4826\n %\"'ipg24\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct46'ipc\", i64 0, i64 0, !dbg !4828\n %23 = getelementptr inbounds [2 x double], [2 x double]* %10, i64 0, i64 0, !dbg !4828\n store double %21, double* %23, align 8, !dbg !4828, !tbaa !1201, !alias.scope !4829, !noalias !4832\n %\"'ipg22\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct46'ipc\", i64 0, i64 1, !dbg !4828\n %24 = getelementptr inbounds [2 x double], [2 x double]* %10, i64 0, i64 1, !dbg !4828\n store double %22, double* %24, align 8, !dbg !4828, !tbaa !1201, !alias.scope !4829, !noalias !4832\n %\"'ipc20\" = addrspacecast [2 x double]* %\"newstruct46'ipc\" to [2 x double] addrspace(11)*, !dbg !4825\n %25 = addrspacecast [2 x double]* %10 to [2 x double] addrspace(11)*, !dbg !4825\n %tapeArg21 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 3, !dbg !4825\n %\"'ipg19\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc\", i64 0, i64 0, !dbg !4834\n %26 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0, !dbg !4834\n %unbox47 = load double, double* %26, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4843\n %27 = fmul double %unbox47, 0x3FD5555555555555, !dbg !4837\n %\"'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc\", i64 0, i64 1, !dbg !4844\n %28 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 1, !dbg !4844\n %unbox48 = load double, double* %28, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4846\n %29 = fmul double %unbox48, 0x3FD5555555555555, !dbg !4837\n %30 = fcmp ord double %27, 0.000000e+00, !dbg !4847\n br i1 %30, label %L134, label %L125, !dbg !4849\n\nL125: ; preds = %L111\n %31 = fcmp une double %29, 0.000000e+00, !dbg !4850\n %. = select i1 %31, double %27, double %29, !dbg !4853\n store i8 0, i8* %_cache83, align 1, !invariant.group !4854\n store i8 0, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL134: ; preds = %L111\n %32 = fsub double %29, %29, !dbg !4856\n %33 = fcmp ord double %32, 0.000000e+00, !dbg !4859\n br i1 %33, label %L151, label %L139, !dbg !4858\n\nL139: ; preds = %L134\n %34 = fcmp une double %27, 0x7FF0000000000000, !dbg !4861\n store i8 0, i8* %_cache, align 1, !dbg !4862, !invariant.group !4863\n br i1 %34, label %L145, label %L242.thread, !dbg !4862\n\nL145: ; preds = %L139\n %35 = fcmp une double %27, 0xFFF0000000000000, !dbg !4864\n store i8 1, i8* %_cache, align 1, !dbg !4865, !invariant.group !4863\n br i1 %35, label %L242.thread, label %L147, !dbg !4865\n\nL147: ; preds = %L145\n %36 = call double @llvm.copysign.f64(double noundef 0.000000e+00, double %29) #47, !dbg !4866\n store i8 4, i8* %_cache83, align 1, !invariant.group !4854\n store i8 1, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL151: ; preds = %L134\n %37 = call fastcc double @julia_exp_4278(double %27) #48, !dbg !4868\n %38 = fcmp une double %29, 0.000000e+00, !dbg !4869\n store i8 1, i8* %_cache83, align 1, !dbg !4871, !invariant.group !4854\n store i8 2, i8* %_cache84, align 1, !dbg !4871, !invariant.group !4855\n br i1 %38, label %L156, label %L242, !dbg !4871\n\nL156: ; preds = %L151\n %39 = call [2 x double] @julia_sincos_4270_inner.1(double %29) #49, !dbg !4872\n %.fca.0.extract217 = extractvalue [2 x double] %39, 0, !dbg !4872\n %.fca.1.extract218 = extractvalue [2 x double] %39, 1, !dbg !4872\n %40 = fmul double %37, %.fca.1.extract218, !dbg !4873\n %41 = fmul double %37, %.fca.0.extract217, !dbg !4873\n store i8 2, i8* %_cache83, align 1, !invariant.group !4854\n store i8 3, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL177: ; preds = %idxend\n %42 = fsub double %162, %.fca.0.extract244, !dbg !4875\n %43 = fsub double %163, %.fca.1.extract245, !dbg !4875\n %44 = fmul double %42, 5.000000e-01, !dbg !4878\n %45 = fmul double %43, 5.000000e-01, !dbg !4878\n %\"'ipg56\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct95'ipc\", i64 0, i64 0, !dbg !4880\n %46 = getelementptr inbounds [2 x double], [2 x double]* %12, i64 0, i64 0, !dbg !4880\n store double %44, double* %46, align 8, !dbg !4880, !tbaa !1201, !alias.scope !4881, !noalias !4884\n %\"'ipg54\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct95'ipc\", i64 0, i64 1, !dbg !4880\n %47 = getelementptr inbounds [2 x double], [2 x double]* %12, i64 0, i64 1, !dbg !4880\n store double %45, double* %47, align 8, !dbg !4880, !tbaa !1201, !alias.scope !4881, !noalias !4884\n %\"'ipc52\" = addrspacecast [2 x double]* %\"newstruct95'ipc\" to [2 x double] addrspace(11)*, !dbg !4877\n %48 = addrspacecast [2 x double]* %12 to [2 x double] addrspace(11)*, !dbg !4877\n %tapeArg53 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 4, !dbg !4877\n %\"'ipg50\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc47\", i64 0, i64 0, !dbg !4886\n %49 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 0, !dbg !4886\n %unbox96 = load double, double* %49, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4895\n %50 = fmul double %unbox96, 0x3FD5555555555555, !dbg !4889\n %\"'ipg48\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc47\", i64 0, i64 1, !dbg !4896\n %51 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 1, !dbg !4896\n %unbox97 = load double, double* %51, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4898\n %52 = fmul double %unbox97, 0x3FD5555555555555, !dbg !4889\n %53 = fcmp ord double %50, 0.000000e+00, !dbg !4899\n br i1 %53, label %L200, label %L191, !dbg !4901\n\nL191: ; preds = %L177\n %54 = fcmp une double %52, 0.000000e+00, !dbg !4902\n %.191 = select i1 %54, double %50, double %52, !dbg !4853\n store i8 3, i8* %_cache83, align 1, !invariant.group !4854\n store i8 4, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL200: ; preds = %L177\n %55 = fsub double %52, %52, !dbg !4905\n %56 = fcmp ord double %55, 0.000000e+00, !dbg !4908\n br i1 %56, label %L217, label %L205, !dbg !4907\n\nL205: ; preds = %L200\n %57 = fcmp une double %50, 0x7FF0000000000000, !dbg !4910\n store i8 2, i8* %_cache, align 1, !dbg !4911, !invariant.group !4863\n br i1 %57, label %L211, label %L242.thread, !dbg !4911\n\nL211: ; preds = %L205\n %58 = fcmp une double %50, 0xFFF0000000000000, !dbg !4912\n store i8 3, i8* %_cache, align 1, !dbg !4913, !invariant.group !4863\n br i1 %58, label %L242.thread, label %L213, !dbg !4913\n\nL213: ; preds = %L211\n %59 = call double @llvm.copysign.f64(double noundef 0.000000e+00, double %52) #47, !dbg !4914\n store i8 4, i8* %_cache83, align 1, !invariant.group !4854\n store i8 5, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL217: ; preds = %L200\n %60 = call fastcc double @julia_exp_4278(double %50) #48, !dbg !4916\n %61 = fcmp une double %52, 0.000000e+00, !dbg !4917\n store i8 5, i8* %_cache83, align 1, !dbg !4919, !invariant.group !4854\n store i8 6, i8* %_cache84, align 1, !dbg !4919, !invariant.group !4855\n br i1 %61, label %L222, label %L242, !dbg !4919\n\nL222: ; preds = %L217\n %62 = call [2 x double] @julia_sincos_4270_inner.1(double %52) #49, !dbg !4920\n %.fca.0.extract = extractvalue [2 x double] %62, 0, !dbg !4920\n %.fca.1.extract = extractvalue [2 x double] %62, 1, !dbg !4920\n %63 = fmul double %60, %.fca.1.extract, !dbg !4921\n %64 = fmul double %60, %.fca.0.extract, !dbg !4921\n store i8 6, i8* %_cache83, align 1, !invariant.group !4854\n store i8 7, i8* %_cache84, align 1, !invariant.group !4855\n br label %L242\n\nL242.thread: ; preds = %L211, %L205, %L145, %L139\n %.sroa.0296.0.ph = phi double [ 0x7FF8000000000000, %L211 ], [ 0x7FF8000000000000, %L145 ], [ 0xFFF0000000000000, %L139 ], [ 0xFFF0000000000000, %L205 ]\n %\".sroa.0296.0..sroa_idx298328'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 0, !dbg !4923\n %.sroa.0296.0..sroa_idx298328 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 0, !dbg !4923\n store double %.sroa.0296.0.ph, double* %.sroa.0296.0..sroa_idx298328, align 8, !dbg !4923, !alias.scope !4924, !noalias !4927\n %\".sroa.6.0..sroa_idx303329'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 1, !dbg !4923\n %.sroa.6.0..sroa_idx303329 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 1, !dbg !4923\n store double 0x7FF8000000000000, double* %.sroa.6.0..sroa_idx303329, align 8, !dbg !4923, !alias.scope !4924, !noalias !4927\n store i1 false, i1* %_cache91, align 1, !dbg !4923, !invariant.group !4929\n store i1 false, i1* %_cache92, align 1, !dbg !4923, !invariant.group !4930\n br label %L265, !dbg !4923\n\nL242: ; preds = %L222, %L217, %L213, %L191, %L156, %L151, %L147, %L125\n %.sroa.0223.0.copyload = phi double [ %40, %L156 ], [ -0.000000e+00, %L147 ], [ %27, %L125 ], [ %37, %L151 ], [ %63, %L222 ], [ -0.000000e+00, %L213 ], [ %50, %L191 ], [ %60, %L217 ], !dbg !4931\n %.sroa.6.0 = phi double [ %41, %L156 ], [ %36, %L147 ], [ %., %L125 ], [ %29, %L151 ], [ %64, %L222 ], [ %59, %L213 ], [ %.191, %L191 ], [ %52, %L217 ], !dbg !4931\n %\".sroa.0296.0..sroa_idx298'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 0, !dbg !4923\n %.sroa.0296.0..sroa_idx298 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 0, !dbg !4923\n store double %.sroa.0223.0.copyload, double* %.sroa.0296.0..sroa_idx298, align 8, !dbg !4923, !alias.scope !4924, !noalias !4927\n %\".sroa.6.0..sroa_idx303'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 1, !dbg !4923\n %.sroa.6.0..sroa_idx303 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 1, !dbg !4923\n store double %.sroa.6.0, double* %.sroa.6.0..sroa_idx303, align 8, !dbg !4923, !alias.scope !4924, !noalias !4927\n %65 = fcmp une double %.sroa.6.0, 0.000000e+00, !dbg !4932\n %66 = fcmp une double %.sroa.0223.0.copyload, 0.000000e+00, !dbg !4935\n %narrow = select i1 %65, i1 true, i1 %66, !dbg !4935\n store i1 true, i1* %_cache91, align 1, !dbg !4923, !invariant.group !4929\n store i1 true, i1* %_cache92, align 1, !dbg !4923, !invariant.group !4930\n store i1 false, i1* %_cache107, align 1, !dbg !4923, !invariant.group !4936\n store i1 false, i1* %_cache108, align 1, !dbg !4923, !invariant.group !4937\n br i1 %narrow, label %L265, label %L266, !dbg !4923\n\nL265: ; preds = %L242, %L242.thread\n %.sroa.6.0334 = phi double [ 0x7FF8000000000000, %L242.thread ], [ %.sroa.6.0, %L242 ]\n %.sroa.0296.0332 = phi double [ %.sroa.0296.0.ph, %L242.thread ], [ %.sroa.0223.0.copyload, %L242 ]\n %\"'ipc87\" = addrspacecast [2 x double]* %\"newstruct40'ipc\" to [2 x double] addrspace(11)*, !dbg !4938\n %67 = addrspacecast [2 x double]* %14 to [2 x double] addrspace(11)*, !dbg !4938\n %\"'ipc89\" = addrspacecast [2 x double]* %\"'ipc77\" to [2 x double] addrspace(11)*, !dbg !4938\n %68 = addrspacecast [2 x double]* %2 to [2 x double] addrspace(11)*, !dbg !4938\n %tapeArg90 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 5, !dbg !4938\n %\".sroa.0223.0..sroa_idx226'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc85\", i64 0, i64 0, !dbg !4931\n %.sroa.0223.0..sroa_idx226 = getelementptr inbounds [2 x double], [2 x double]* %8, i64 0, i64 0, !dbg !4931\n %.sroa.0223.0.copyload227 = load double, double* %.sroa.0223.0..sroa_idx226, align 8, !dbg !4931, !tbaa !1201, !alias.scope !4939, !noalias !4942\n %\".sroa.6228.0..sroa_idx232'ipg\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc85\", i64 0, i64 1, !dbg !4931\n %.sroa.6228.0..sroa_idx232 = getelementptr inbounds [2 x double], [2 x double]* %8, i64 0, i64 1, !dbg !4931\n %.sroa.6228.0.copyload233 = load double, double* %.sroa.6228.0..sroa_idx232, align 8, !dbg !4931, !tbaa !1201, !alias.scope !4939, !noalias !4942\n store i1 true, i1* %_cache107, align 1, !invariant.group !4936\n store i1 true, i1* %_cache108, align 1, !invariant.group !4937\n br label %L266\n\nL266: ; preds = %L265, %L242\n %.sroa.6.0333 = phi double [ %.sroa.6.0334, %L265 ], [ %.sroa.6.0, %L242 ]\n %.sroa.0296.0331 = phi double [ %.sroa.0296.0332, %L265 ], [ %.sroa.0223.0.copyload, %L242 ]\n %.sroa.0223.0 = phi double [ %.sroa.0223.0.copyload227, %L265 ], [ %.sroa.0223.0.copyload, %L242 ]\n %.sroa.6228.0 = phi double [ %.sroa.6228.0.copyload233, %L265 ], [ %.sroa.6.0, %L242 ]\n %69 = fadd double %120, %.sroa.0296.0331, !dbg !4944\n %70 = fadd double %123, %.sroa.6.0333, !dbg !4944\n %71 = fadd double %69, %.sroa.0223.0, !dbg !4944\n %72 = fadd double %70, %.sroa.6228.0, !dbg !4944\n %73 = fmul double %71, 0x3FD5555555555555, !dbg !4948\n %74 = fmul double %72, 0x3FD5555555555555, !dbg !4948\n %75 = fmul double %.sroa.0296.0331, -5.000000e-01, !dbg !4950\n %76 = fmul double %.sroa.6.0333, -5.000000e-01, !dbg !4950\n %77 = fmul double %.sroa.0223.0, -5.000000e-01, !dbg !4950\n %78 = fmul double %.sroa.6228.0, -5.000000e-01, !dbg !4950\n %79 = fmul double %.sroa.6.0333, 0x3FEBB67AE8584CAA, !dbg !4953\n %80 = fsub double %75, %79, !dbg !4956\n %81 = fmul double %.sroa.0296.0331, 0x3FEBB67AE8584CAA, !dbg !4953\n %82 = fadd double %76, %81, !dbg !4957\n %83 = fmul double %.sroa.6228.0, 0x3FEBB67AE8584CAA, !dbg !4953\n %84 = fadd double %77, %83, !dbg !4956\n %85 = fmul double %.sroa.0223.0, 0x3FEBB67AE8584CAA, !dbg !4953\n %86 = fsub double %78, %85, !dbg !4957\n %87 = fadd double %120, %80, !dbg !4958\n %88 = fadd double %123, %82, !dbg !4958\n %89 = fadd double %87, %84, !dbg !4958\n %90 = fadd double %88, %86, !dbg !4958\n %91 = fmul double %89, 0x3FD5555555555555, !dbg !4961\n %92 = fmul double %90, 0x3FD5555555555555, !dbg !4961\n %93 = call double @llvm.fabs.f64(double %74) #47, !dbg !4963\n %94 = fcmp uge double %93, 1.000000e-08, !dbg !4965\n %95 = fcmp ule double %73, 0.000000e+00\n %or.cond = select i1 %94, i1 true, i1 %95, !dbg !4964\n %96 = fcmp uge double %73, 1.000000e+00\n %or.cond201 = select i1 %or.cond, i1 true, i1 %96, !dbg !4964\n br i1 %or.cond201, label %L327, label %common.ret, !dbg !4964\n\ncommon.ret: ; preds = %L335, %L327, %L266\n %common.ret.op_replacementA = phi double \n br label %invertcommon.ret, !dbg !4853\n\nL327: ; preds = %L266\n %97 = fsub double %76, %81, !dbg !4966\n %98 = fadd double %123, %97, !dbg !4967\n %99 = fadd double %85, %78, !dbg !4966\n %100 = fadd double %98, %99, !dbg !4967\n %101 = fmul double %100, 0x3FD5555555555555, !dbg !4970\n %102 = fadd double %79, %75, !dbg !4972\n %103 = fadd double %120, %102, !dbg !4967\n %104 = fsub double %77, %83, !dbg !4972\n %105 = fadd double %103, %104, !dbg !4967\n %106 = fmul double %105, 0x3FD5555555555555, !dbg !4970\n %107 = call double @llvm.fabs.f64(double %101) #47, !dbg !4973\n %108 = fcmp uge double %107, 1.000000e-08, !dbg !4975\n %109 = fcmp ule double %106, 0.000000e+00\n %or.cond203 = select i1 %108, i1 true, i1 %109, !dbg !4974\n %110 = fcmp uge double %106, 1.000000e+00\n %or.cond205 = select i1 %or.cond203, i1 true, i1 %110, !dbg !4974\n br i1 %or.cond205, label %L335, label %common.ret, !dbg !4974\n\nL335: ; preds = %L327\n %111 = call double @llvm.fabs.f64(double %92) #47, !dbg !4976\n %112 = fcmp uge double %111, 1.000000e-08, !dbg !4978\n %113 = fcmp ule double %91, 0.000000e+00\n %or.cond207 = select i1 %112, i1 true, i1 %113, !dbg !4977\n %114 = fcmp uge double %91, 1.000000e+00\n %or.cond209 = select i1 %or.cond207, i1 true, i1 %114, !dbg !4977\n %spec.select210_replacementA = phi double , !dbg !4977\n br label %common.ret, !dbg !4977\n\noob: ; preds = %top\n %errorbox_replacementA = phi i64* , !dbg !4821\n %_replacementA133 = phi {} addrspace(12)* , !dbg !4821\n unreachable\n\nidxend: ; preds = %top\n %\"'ipc209\" = addrspacecast {} addrspace(10)* %\"'\" to [2 x double] addrspace(13)* addrspace(11)*, !dbg !4821\n %115 = addrspacecast {} addrspace(10)* %0 to [2 x double] addrspace(13)* addrspace(11)*, !dbg !4821\n %\"arrayptr266'ipl\" = load [2 x double] addrspace(13)*, [2 x double] addrspace(13)* addrspace(11)* %\"'ipc209\", align 16, !dbg !4821, !tbaa !1584, !alias.scope !4979, !noalias !4982, !nonnull !35\n %arrayptr266 = load [2 x double] addrspace(13)*, [2 x double] addrspace(13)* addrspace(11)* %115, align 16, !dbg !4821, !tbaa !1584, !alias.scope !4984, !noalias !4985, !nonnull !35\n %\"arrayref.sroa.0.0..sroa_idx'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 3, i64 0, !dbg !4821\n %arrayref.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 3, i64 0, !dbg !4821\n %arrayref.sroa.0.0.copyload_replacementA = phi double , !dbg !4821\n %\"arrayref.sroa.2.0..sroa_idx256'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 3, i64 1, !dbg !4821\n %arrayref.sroa.2.0..sroa_idx256 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 3, i64 1, !dbg !4821\n %arrayref.sroa.2.0.copyload_replacementA = phi double , !dbg !4821\n %.fca.0.insert254_replacementA = phi [2 x double] , !dbg !4986\n %.fca.1.insert255 = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 6, !dbg !4986\n %116 = call fastcc [2 x double] @julia_inv_4319_inner.2([2 x double] %.fca.1.insert255) #49, !dbg !4986\n %.fca.0.extract250 = extractvalue [2 x double] %116, 0, !dbg !4986\n %.fca.1.extract251 = extractvalue [2 x double] %116, 1, !dbg !4986\n %\"arrayref13.sroa.0.0..sroa_idx'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 2, i64 0, !dbg !4987\n %arrayref13.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 2, i64 0, !dbg !4987\n %arrayref13.sroa.0.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 7, !dbg !4987\n %\"arrayref13.sroa.2.0..sroa_idx249'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 2, i64 1, !dbg !4987\n %arrayref13.sroa.2.0..sroa_idx249 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 2, i64 1, !dbg !4987\n %arrayref13.sroa.2.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 8, !dbg !4989\n %117 = fneg double %arrayref13.sroa.2.0.copyload, !dbg !4989\n %118 = fmul double %.fca.1.extract251, %arrayref13.sroa.2.0.copyload, !dbg !4991\n %119 = fmul double %arrayref13.sroa.0.0.copyload, %.fca.0.extract250, !dbg !4991\n %120 = fsub double %118, %119, !dbg !4991\n %121 = fmul double %.fca.0.extract250, %117, !dbg !4993\n %122 = fmul double %arrayref13.sroa.0.0.copyload, %.fca.1.extract251, !dbg !4994\n %123 = fsub double %121, %122, !dbg !4994\n %\"arrayref24.sroa.0.0..sroa_idx'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 1, i64 0, !dbg !4995\n %arrayref24.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 1, i64 0, !dbg !4995\n %arrayref24.sroa.0.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 9, !dbg !4997\n %124 = fmul double %.fca.1.extract251, %arrayref24.sroa.0.0.copyload, !dbg !4997\n %\"arrayref24.sroa.3.0..sroa_idx248'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 1, i64 1, !dbg !4995\n %arrayref24.sroa.3.0..sroa_idx248 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 1, i64 1, !dbg !4995\n %arrayref24.sroa.3.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 10, !dbg !4997\n %125 = fmul double %.fca.0.extract250, %arrayref24.sroa.3.0.copyload, !dbg !4997\n %126 = fadd double %124, %125, !dbg !4999\n %127 = fmul double %.fca.0.extract250, %arrayref24.sroa.0.0.copyload, !dbg !4997\n %128 = fmul double %.fca.1.extract251, %arrayref24.sroa.3.0.copyload, !dbg !4997\n %129 = fsub double %127, %128, !dbg !5000\n %\"arrayref37.sroa.0.0..sroa_idx'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 0, i64 0, !dbg !5001\n %arrayref37.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 0, i64 0, !dbg !5001\n %arrayref37.sroa.0.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 11, !dbg !5001\n %\"arrayref37.sroa.2.0..sroa_idx247'ipg\" = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %\"arrayptr266'ipl\", i64 0, i64 1, !dbg !5001\n %arrayref37.sroa.2.0..sroa_idx247 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 0, i64 1, !dbg !5001\n %arrayref37.sroa.2.0.copyload = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 12, !dbg !5003\n %130 = fneg double %arrayref37.sroa.2.0.copyload, !dbg !5003\n %131 = fmul double %.fca.1.extract251, %arrayref37.sroa.2.0.copyload, !dbg !5005\n %132 = fmul double %.fca.0.extract250, %arrayref37.sroa.0.0.copyload, !dbg !5005\n %133 = fsub double %131, %132, !dbg !5005\n %134 = fmul double %.fca.0.extract250, %130, !dbg !5007\n %135 = fmul double %.fca.1.extract251, %arrayref37.sroa.0.0.copyload, !dbg !5008\n %136 = fsub double %134, %135, !dbg !5008\n %137 = fmul double %120, %120, !dbg !5009\n %138 = fmul double %123, %123, !dbg !5009\n %139 = fsub double %137, %138, !dbg !5012\n %140 = fmul double %120, %123, !dbg !5009\n %141 = fadd double %140, %140, !dbg !5013\n %142 = fmul double %120, 2.000000e+00, !dbg !5014\n %143 = fmul double %123, 2.000000e+00, !dbg !5014\n %144 = fmul double %142, %139, !dbg !5019\n %145 = fmul double %143, %141, !dbg !5019\n %146 = fsub double %144, %145, !dbg !5021\n %147 = fmul double %142, %141, !dbg !5019\n %148 = fmul double %143, %139, !dbg !5019\n %149 = fadd double %147, %148, !dbg !5022\n %150 = fmul double %120, 9.000000e+00, !dbg !5014\n %151 = fmul double %123, 9.000000e+00, !dbg !5014\n %152 = fmul double %150, %129, !dbg !5019\n %153 = fmul double %151, %126, !dbg !5019\n %154 = fsub double %152, %153, !dbg !5021\n %155 = fmul double %150, %126, !dbg !5019\n %156 = fmul double %151, %129, !dbg !5019\n %157 = fadd double %155, %156, !dbg !5022\n %158 = fsub double %146, %154, !dbg !5023\n %159 = fsub double %149, %157, !dbg !5023\n %160 = fmul double %133, 2.700000e+01, !dbg !5025\n %161 = fmul double %136, 2.700000e+01, !dbg !5025\n %162 = fadd double %158, %160, !dbg !5028\n %163 = fadd double %159, %161, !dbg !5028\n %164 = fmul double %129, 3.000000e+00, !dbg !5030\n %165 = fmul double %126, 3.000000e+00, !dbg !5030\n %166 = fsub double %139, %164, !dbg !5034\n %167 = fsub double %141, %165, !dbg !5034\n %\"'ipg159\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct40'ipc\", i64 0, i64 0, !dbg !5036\n %168 = getelementptr inbounds [2 x double], [2 x double]* %14, i64 0, i64 0, !dbg !5036\n store double %166, double* %168, align 8, !dbg !5036, !tbaa !1201, !alias.scope !5037, !noalias !5040\n %\"'ipg158\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct40'ipc\", i64 0, i64 1, !dbg !5036\n %169 = getelementptr inbounds [2 x double], [2 x double]* %14, i64 0, i64 1, !dbg !5036\n store double %167, double* %169, align 8, !dbg !5036, !tbaa !1201, !alias.scope !5037, !noalias !5040\n %170 = fmul double %162, %162, !dbg !5042\n %171 = fmul double %163, %163, !dbg !5042\n %172 = fsub double %170, %171, !dbg !5045\n %173 = fmul double %162, %163, !dbg !5042\n %174 = fadd double %173, %173, !dbg !5046\n %175 = fmul double %166, 4.000000e+00, !dbg !5047\n %176 = fmul double %167, 4.000000e+00, !dbg !5047\n %177 = fmul double %166, %175, !dbg !5051\n %178 = fmul double %167, %176, !dbg !5051\n %179 = fsub double %177, %178, !dbg !5053\n %180 = fmul double %167, %175, !dbg !5051\n %181 = fmul double %166, %176, !dbg !5051\n %182 = fadd double %180, %181, !dbg !5054\n %183 = fmul double %166, %179, !dbg !5055\n %184 = fmul double %167, %182, !dbg !5055\n %185 = fsub double %183, %184, !dbg !5058\n %186 = fmul double %167, %179, !dbg !5055\n %187 = fmul double %166, %182, !dbg !5055\n %188 = fadd double %186, %187, !dbg !5059\n %189 = fsub double %172, %185, !dbg !5060\n %190 = fsub double %174, %188, !dbg !5060\n %.fca.0.insert = insertvalue [2 x double] poison, double %189, 0, !dbg !5044\n %.fca.1.insert = insertvalue [2 x double] %.fca.0.insert, double %190, 1, !dbg !5044\n %191 = call fastcc [2 x double] @julia_sqrt_4312_inner.3([2 x double] %.fca.1.insert) #48, !dbg !5044\n %.fca.0.extract244 = extractvalue [2 x double] %191, 0, !dbg !5044\n %.fca.1.extract245 = extractvalue [2 x double] %191, 1, !dbg !5044\n %192 = fmul double %162, %.fca.0.extract244, !dbg !5062\n %193 = fmul double %163, %.fca.1.extract245, !dbg !5065\n %194 = fadd double %192, %193, !dbg !5065\n %195 = fcmp ult double %194, 0.000000e+00, !dbg !5066\n br i1 %195, label %L177, label %L111, !dbg !5064\n\nallocsForInversion: ; No predecessors!\n %\"common.ret.op'de\" = alloca double, align 8\n %196 = getelementptr double, double* %\"common.ret.op'de\", i64 0\n store double 0.000000e+00, double* %196, align 8\n %newstruct40 = alloca [2 x double], i64 1, align 8\n %197 = bitcast [2 x double]* %newstruct40 to i8*\n %newstruct95 = alloca [2 x double], i64 1, align 8\n %198 = bitcast [2 x double]* %newstruct95 to i8*\n %newstruct46 = alloca [2 x double], i64 1, align 8\n %199 = bitcast [2 x double]* %newstruct46 to i8*\n %200 = alloca [2 x double], i64 1, align 8\n %201 = bitcast [2 x double]* %200 to i8*\n %\"'de\" = alloca double, align 8\n %202 = getelementptr double, double* %\"'de\", i64 0\n store double 0.000000e+00, double* %202, align 8\n %\"unbox48'de\" = alloca double, align 8\n %203 = getelementptr double, double* %\"unbox48'de\", i64 0\n store double 0.000000e+00, double* %203, align 8\n %\"'de18\" = alloca double, align 8\n %204 = getelementptr double, double* %\"'de18\", i64 0\n store double 0.000000e+00, double* %204, align 8\n %\"unbox47'de\" = alloca double, align 8\n %205 = getelementptr double, double* %\"unbox47'de\", i64 0\n store double 0.000000e+00, double* %205, align 8\n %\"'de23\" = alloca double, align 8\n %206 = getelementptr double, double* %\"'de23\", i64 0\n store double 0.000000e+00, double* %206, align 8\n %\"'de25\" = alloca double, align 8\n %207 = getelementptr double, double* %\"'de25\", i64 0\n store double 0.000000e+00, double* %207, align 8\n %\"'de26\" = alloca double, align 8\n %208 = getelementptr double, double* %\"'de26\", i64 0\n store double 0.000000e+00, double* %208, align 8\n %\"'de27\" = alloca double, align 8\n %209 = getelementptr double, double* %\"'de27\", i64 0\n store double 0.000000e+00, double* %209, align 8\n %\"'de28\" = alloca double, align 8\n %210 = getelementptr double, double* %\"'de28\", i64 0\n store double 0.000000e+00, double* %210, align 8\n %\".fca.1.extract245'de\" = alloca double, align 8\n %211 = getelementptr double, double* %\".fca.1.extract245'de\", i64 0\n store double 0.000000e+00, double* %211, align 8\n %\"'de29\" = alloca double, align 8\n %212 = getelementptr double, double* %\"'de29\", i64 0\n store double 0.000000e+00, double* %212, align 8\n %\".fca.0.extract244'de\" = alloca double, align 8\n %213 = getelementptr double, double* %\".fca.0.extract244'de\", i64 0\n store double 0.000000e+00, double* %213, align 8\n %\".'de\" = alloca double, align 8\n %214 = getelementptr double, double* %\".'de\", i64 0\n store double 0.000000e+00, double* %214, align 8\n %\"'de34\" = alloca double, align 8\n %215 = getelementptr double, double* %\"'de34\", i64 0\n store double 0.000000e+00, double* %215, align 8\n %\"'de37\" = alloca double, align 8\n %216 = getelementptr double, double* %\"'de37\", i64 0\n store double 0.000000e+00, double* %216, align 8\n %\".fca.0.extract217'de\" = alloca double, align 8\n %217 = getelementptr double, double* %\".fca.0.extract217'de\", i64 0\n store double 0.000000e+00, double* %217, align 8\n %\"'de44\" = alloca double, align 8\n %218 = getelementptr double, double* %\"'de44\", i64 0\n store double 0.000000e+00, double* %218, align 8\n %\".fca.1.extract218'de\" = alloca double, align 8\n %219 = getelementptr double, double* %\".fca.1.extract218'de\", i64 0\n store double 0.000000e+00, double* %219, align 8\n %\"'de45\" = alloca [2 x double], align 8\n %220 = getelementptr [2 x double], [2 x double]* %\"'de45\", i64 0, i32 0\n store double 0.000000e+00, double* %220, align 8\n %221 = getelementptr [2 x double], [2 x double]* %\"'de45\", i64 0, i32 1\n store double 0.000000e+00, double* %221, align 8\n %\"'de46\" = alloca double, align 8\n %222 = getelementptr double, double* %\"'de46\", i64 0\n store double 0.000000e+00, double* %222, align 8\n %\"unbox97'de\" = alloca double, align 8\n %223 = getelementptr double, double* %\"unbox97'de\", i64 0\n store double 0.000000e+00, double* %223, align 8\n %\"'de49\" = alloca double, align 8\n %224 = getelementptr double, double* %\"'de49\", i64 0\n store double 0.000000e+00, double* %224, align 8\n %\"unbox96'de\" = alloca double, align 8\n %225 = getelementptr double, double* %\"unbox96'de\", i64 0\n store double 0.000000e+00, double* %225, align 8\n %\"'de55\" = alloca double, align 8\n %226 = getelementptr double, double* %\"'de55\", i64 0\n store double 0.000000e+00, double* %226, align 8\n %\"'de57\" = alloca double, align 8\n %227 = getelementptr double, double* %\"'de57\", i64 0\n store double 0.000000e+00, double* %227, align 8\n %\"'de58\" = alloca double, align 8\n %228 = getelementptr double, double* %\"'de58\", i64 0\n store double 0.000000e+00, double* %228, align 8\n %\"'de59\" = alloca double, align 8\n %229 = getelementptr double, double* %\"'de59\", i64 0\n store double 0.000000e+00, double* %229, align 8\n %\".191'de\" = alloca double, align 8\n %230 = getelementptr double, double* %\".191'de\", i64 0\n store double 0.000000e+00, double* %230, align 8\n %\"'de65\" = alloca double, align 8\n %231 = getelementptr double, double* %\"'de65\", i64 0\n store double 0.000000e+00, double* %231, align 8\n %\"'de68\" = alloca double, align 8\n %232 = getelementptr double, double* %\"'de68\", i64 0\n store double 0.000000e+00, double* %232, align 8\n %\".fca.0.extract'de\" = alloca double, align 8\n %233 = getelementptr double, double* %\".fca.0.extract'de\", i64 0\n store double 0.000000e+00, double* %233, align 8\n %\"'de75\" = alloca double, align 8\n %234 = getelementptr double, double* %\"'de75\", i64 0\n store double 0.000000e+00, double* %234, align 8\n %\".fca.1.extract'de\" = alloca double, align 8\n %235 = getelementptr double, double* %\".fca.1.extract'de\", i64 0\n store double 0.000000e+00, double* %235, align 8\n %\"'de76\" = alloca [2 x double], align 8\n %236 = getelementptr [2 x double], [2 x double]* %\"'de76\", i64 0, i32 0\n store double 0.000000e+00, double* %236, align 8\n %237 = getelementptr [2 x double], [2 x double]* %\"'de76\", i64 0, i32 1\n store double 0.000000e+00, double* %237, align 8\n %_cache = alloca i8, align 1\n %\".sroa.6.0'de\" = alloca double, align 8\n %238 = getelementptr double, double* %\".sroa.6.0'de\", i64 0\n store double 0.000000e+00, double* %238, align 8\n %\".sroa.0223.0.copyload'de\" = alloca double, align 8\n %239 = getelementptr double, double* %\".sroa.0223.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %239, align 8\n %_cache83 = alloca i8, align 1\n %_cache84 = alloca i8, align 1\n %\".sroa.6228.0.copyload233'de\" = alloca double, align 8\n %240 = getelementptr double, double* %\".sroa.6228.0.copyload233'de\", i64 0\n store double 0.000000e+00, double* %240, align 8\n %\".sroa.0223.0.copyload227'de\" = alloca double, align 8\n %241 = getelementptr double, double* %\".sroa.0223.0.copyload227'de\", i64 0\n store double 0.000000e+00, double* %241, align 8\n %\".sroa.6.0334'de\" = alloca double, align 8\n %242 = getelementptr double, double* %\".sroa.6.0334'de\", i64 0\n store double 0.000000e+00, double* %242, align 8\n %\".sroa.0296.0332'de\" = alloca double, align 8\n %243 = getelementptr double, double* %\".sroa.0296.0332'de\", i64 0\n store double 0.000000e+00, double* %243, align 8\n %_cache91 = alloca i1, align 1\n %_cache92 = alloca i1, align 1\n %\"'de93\" = alloca double, align 8\n %244 = getelementptr double, double* %\"'de93\", i64 0\n store double 0.000000e+00, double* %244, align 8\n %\"'de94\" = alloca double, align 8\n %245 = getelementptr double, double* %\"'de94\", i64 0\n store double 0.000000e+00, double* %245, align 8\n %\"'de95\" = alloca double, align 8\n %246 = getelementptr double, double* %\"'de95\", i64 0\n store double 0.000000e+00, double* %246, align 8\n %\"'de96\" = alloca double, align 8\n %247 = getelementptr double, double* %\"'de96\", i64 0\n store double 0.000000e+00, double* %247, align 8\n %\"'de97\" = alloca double, align 8\n %248 = getelementptr double, double* %\"'de97\", i64 0\n store double 0.000000e+00, double* %248, align 8\n %\"'de98\" = alloca double, align 8\n %249 = getelementptr double, double* %\"'de98\", i64 0\n store double 0.000000e+00, double* %249, align 8\n %\"'de99\" = alloca double, align 8\n %250 = getelementptr double, double* %\"'de99\", i64 0\n store double 0.000000e+00, double* %250, align 8\n %\"'de100\" = alloca double, align 8\n %251 = getelementptr double, double* %\"'de100\", i64 0\n store double 0.000000e+00, double* %251, align 8\n %\".sroa.6228.0'de\" = alloca double, align 8\n %252 = getelementptr double, double* %\".sroa.6228.0'de\", i64 0\n store double 0.000000e+00, double* %252, align 8\n %\"'de101\" = alloca double, align 8\n %253 = getelementptr double, double* %\"'de101\", i64 0\n store double 0.000000e+00, double* %253, align 8\n %\"'de102\" = alloca double, align 8\n %254 = getelementptr double, double* %\"'de102\", i64 0\n store double 0.000000e+00, double* %254, align 8\n %\".sroa.6.0333'de\" = alloca double, align 8\n %255 = getelementptr double, double* %\".sroa.6.0333'de\", i64 0\n store double 0.000000e+00, double* %255, align 8\n %\".sroa.0223.0'de\" = alloca double, align 8\n %256 = getelementptr double, double* %\".sroa.0223.0'de\", i64 0\n store double 0.000000e+00, double* %256, align 8\n %\".sroa.0296.0331'de\" = alloca double, align 8\n %257 = getelementptr double, double* %\".sroa.0296.0331'de\", i64 0\n store double 0.000000e+00, double* %257, align 8\n %\"'de103\" = alloca double, align 8\n %258 = getelementptr double, double* %\"'de103\", i64 0\n store double 0.000000e+00, double* %258, align 8\n %\"'de104\" = alloca double, align 8\n %259 = getelementptr double, double* %\"'de104\", i64 0\n store double 0.000000e+00, double* %259, align 8\n %\"'de105\" = alloca double, align 8\n %260 = getelementptr double, double* %\"'de105\", i64 0\n store double 0.000000e+00, double* %260, align 8\n %_cache107 = alloca i1, align 1\n %_cache108 = alloca i1, align 1\n %\"spec.select210'de\" = alloca double, align 8\n %261 = getelementptr double, double* %\"spec.select210'de\", i64 0\n store double 0.000000e+00, double* %261, align 8\n %\"'de110\" = alloca double, align 8\n %262 = getelementptr double, double* %\"'de110\", i64 0\n store double 0.000000e+00, double* %262, align 8\n %\"'de125\" = alloca double, align 8\n %263 = getelementptr double, double* %\"'de125\", i64 0\n store double 0.000000e+00, double* %263, align 8\n %\"'de126\" = alloca double, align 8\n %264 = getelementptr double, double* %\"'de126\", i64 0\n store double 0.000000e+00, double* %264, align 8\n %\"'de127\" = alloca double, align 8\n %265 = getelementptr double, double* %\"'de127\", i64 0\n store double 0.000000e+00, double* %265, align 8\n %\"'de128\" = alloca double, align 8\n %266 = getelementptr double, double* %\"'de128\", i64 0\n store double 0.000000e+00, double* %266, align 8\n %\"'de134\" = alloca [2 x double], align 8\n %267 = getelementptr [2 x double], [2 x double]* %\"'de134\", i64 0, i32 0\n store double 0.000000e+00, double* %267, align 8\n %268 = getelementptr [2 x double], [2 x double]* %\"'de134\", i64 0, i32 1\n store double 0.000000e+00, double* %268, align 8\n %\".fca.1.insert'de\" = alloca [2 x double], align 8\n %269 = getelementptr [2 x double], [2 x double]* %\".fca.1.insert'de\", i64 0, i32 0\n store double 0.000000e+00, double* %269, align 8\n %270 = getelementptr [2 x double], [2 x double]* %\".fca.1.insert'de\", i64 0, i32 1\n store double 0.000000e+00, double* %270, align 8\n %\"'de135\" = alloca double, align 8\n %271 = getelementptr double, double* %\"'de135\", i64 0\n store double 0.000000e+00, double* %271, align 8\n %\".fca.0.insert'de\" = alloca [2 x double], align 8\n %272 = getelementptr [2 x double], [2 x double]* %\".fca.0.insert'de\", i64 0, i32 0\n store double 0.000000e+00, double* %272, align 8\n %273 = getelementptr [2 x double], [2 x double]* %\".fca.0.insert'de\", i64 0, i32 1\n store double 0.000000e+00, double* %273, align 8\n %\"'de136\" = alloca double, align 8\n %274 = getelementptr double, double* %\"'de136\", i64 0\n store double 0.000000e+00, double* %274, align 8\n %\"'de137\" = alloca double, align 8\n %275 = getelementptr double, double* %\"'de137\", i64 0\n store double 0.000000e+00, double* %275, align 8\n %\"'de138\" = alloca double, align 8\n %276 = getelementptr double, double* %\"'de138\", i64 0\n store double 0.000000e+00, double* %276, align 8\n %\"'de139\" = alloca double, align 8\n %277 = getelementptr double, double* %\"'de139\", i64 0\n store double 0.000000e+00, double* %277, align 8\n %\"'de140\" = alloca double, align 8\n %278 = getelementptr double, double* %\"'de140\", i64 0\n store double 0.000000e+00, double* %278, align 8\n %\"'de141\" = alloca double, align 8\n %279 = getelementptr double, double* %\"'de141\", i64 0\n store double 0.000000e+00, double* %279, align 8\n %\"'de142\" = alloca double, align 8\n %280 = getelementptr double, double* %\"'de142\", i64 0\n store double 0.000000e+00, double* %280, align 8\n %\"'de143\" = alloca double, align 8\n %281 = getelementptr double, double* %\"'de143\", i64 0\n store double 0.000000e+00, double* %281, align 8\n %\"'de144\" = alloca double, align 8\n %282 = getelementptr double, double* %\"'de144\", i64 0\n store double 0.000000e+00, double* %282, align 8\n %\"'de145\" = alloca double, align 8\n %283 = getelementptr double, double* %\"'de145\", i64 0\n store double 0.000000e+00, double* %283, align 8\n %\"'de146\" = alloca double, align 8\n %284 = getelementptr double, double* %\"'de146\", i64 0\n store double 0.000000e+00, double* %284, align 8\n %\"'de147\" = alloca double, align 8\n %285 = getelementptr double, double* %\"'de147\", i64 0\n store double 0.000000e+00, double* %285, align 8\n %\"'de148\" = alloca double, align 8\n %286 = getelementptr double, double* %\"'de148\", i64 0\n store double 0.000000e+00, double* %286, align 8\n %\"'de149\" = alloca double, align 8\n %287 = getelementptr double, double* %\"'de149\", i64 0\n store double 0.000000e+00, double* %287, align 8\n %\"'de150\" = alloca double, align 8\n %288 = getelementptr double, double* %\"'de150\", i64 0\n store double 0.000000e+00, double* %288, align 8\n %\"'de151\" = alloca double, align 8\n %289 = getelementptr double, double* %\"'de151\", i64 0\n store double 0.000000e+00, double* %289, align 8\n %\"'de152\" = alloca double, align 8\n %290 = getelementptr double, double* %\"'de152\", i64 0\n store double 0.000000e+00, double* %290, align 8\n %\"'de153\" = alloca double, align 8\n %291 = getelementptr double, double* %\"'de153\", i64 0\n store double 0.000000e+00, double* %291, align 8\n %\"'de154\" = alloca double, align 8\n %292 = getelementptr double, double* %\"'de154\", i64 0\n store double 0.000000e+00, double* %292, align 8\n %\"'de155\" = alloca double, align 8\n %293 = getelementptr double, double* %\"'de155\", i64 0\n store double 0.000000e+00, double* %293, align 8\n %\"'de156\" = alloca double, align 8\n %294 = getelementptr double, double* %\"'de156\", i64 0\n store double 0.000000e+00, double* %294, align 8\n %\"'de157\" = alloca double, align 8\n %295 = getelementptr double, double* %\"'de157\", i64 0\n store double 0.000000e+00, double* %295, align 8\n %\"'de160\" = alloca double, align 8\n %296 = getelementptr double, double* %\"'de160\", i64 0\n store double 0.000000e+00, double* %296, align 8\n %\"'de161\" = alloca double, align 8\n %297 = getelementptr double, double* %\"'de161\", i64 0\n store double 0.000000e+00, double* %297, align 8\n %\"'de162\" = alloca double, align 8\n %298 = getelementptr double, double* %\"'de162\", i64 0\n store double 0.000000e+00, double* %298, align 8\n %\"'de163\" = alloca double, align 8\n %299 = getelementptr double, double* %\"'de163\", i64 0\n store double 0.000000e+00, double* %299, align 8\n %\"'de164\" = alloca double, align 8\n %300 = getelementptr double, double* %\"'de164\", i64 0\n store double 0.000000e+00, double* %300, align 8\n %\"'de165\" = alloca double, align 8\n %301 = getelementptr double, double* %\"'de165\", i64 0\n store double 0.000000e+00, double* %301, align 8\n %\"'de166\" = alloca double, align 8\n %302 = getelementptr double, double* %\"'de166\", i64 0\n store double 0.000000e+00, double* %302, align 8\n %\"'de167\" = alloca double, align 8\n %303 = getelementptr double, double* %\"'de167\", i64 0\n store double 0.000000e+00, double* %303, align 8\n %\"'de168\" = alloca double, align 8\n %304 = getelementptr double, double* %\"'de168\", i64 0\n store double 0.000000e+00, double* %304, align 8\n %\"'de169\" = alloca double, align 8\n %305 = getelementptr double, double* %\"'de169\", i64 0\n store double 0.000000e+00, double* %305, align 8\n %\"'de170\" = alloca double, align 8\n %306 = getelementptr double, double* %\"'de170\", i64 0\n store double 0.000000e+00, double* %306, align 8\n %\"'de171\" = alloca double, align 8\n %307 = getelementptr double, double* %\"'de171\", i64 0\n store double 0.000000e+00, double* %307, align 8\n %\"'de172\" = alloca double, align 8\n %308 = getelementptr double, double* %\"'de172\", i64 0\n store double 0.000000e+00, double* %308, align 8\n %\"'de173\" = alloca double, align 8\n %309 = getelementptr double, double* %\"'de173\", i64 0\n store double 0.000000e+00, double* %309, align 8\n %\"'de174\" = alloca double, align 8\n %310 = getelementptr double, double* %\"'de174\", i64 0\n store double 0.000000e+00, double* %310, align 8\n %\"'de175\" = alloca double, align 8\n %311 = getelementptr double, double* %\"'de175\", i64 0\n store double 0.000000e+00, double* %311, align 8\n %\"'de176\" = alloca double, align 8\n %312 = getelementptr double, double* %\"'de176\", i64 0\n store double 0.000000e+00, double* %312, align 8\n %\"'de177\" = alloca double, align 8\n %313 = getelementptr double, double* %\"'de177\", i64 0\n store double 0.000000e+00, double* %313, align 8\n %\"'de178\" = alloca double, align 8\n %314 = getelementptr double, double* %\"'de178\", i64 0\n store double 0.000000e+00, double* %314, align 8\n %\"'de179\" = alloca double, align 8\n %315 = getelementptr double, double* %\"'de179\", i64 0\n store double 0.000000e+00, double* %315, align 8\n %\"'de180\" = alloca double, align 8\n %316 = getelementptr double, double* %\"'de180\", i64 0\n store double 0.000000e+00, double* %316, align 8\n %\"'de181\" = alloca double, align 8\n %317 = getelementptr double, double* %\"'de181\", i64 0\n store double 0.000000e+00, double* %317, align 8\n %\"'de182\" = alloca double, align 8\n %318 = getelementptr double, double* %\"'de182\", i64 0\n store double 0.000000e+00, double* %318, align 8\n %\"'de183\" = alloca double, align 8\n %319 = getelementptr double, double* %\"'de183\", i64 0\n store double 0.000000e+00, double* %319, align 8\n %\"'de184\" = alloca double, align 8\n %320 = getelementptr double, double* %\"'de184\", i64 0\n store double 0.000000e+00, double* %320, align 8\n %\"'de185\" = alloca double, align 8\n %321 = getelementptr double, double* %\"'de185\", i64 0\n store double 0.000000e+00, double* %321, align 8\n %\"'de186\" = alloca double, align 8\n %322 = getelementptr double, double* %\"'de186\", i64 0\n store double 0.000000e+00, double* %322, align 8\n %\"'de187\" = alloca double, align 8\n %323 = getelementptr double, double* %\"'de187\", i64 0\n store double 0.000000e+00, double* %323, align 8\n %\"'de188\" = alloca double, align 8\n %324 = getelementptr double, double* %\"'de188\", i64 0\n store double 0.000000e+00, double* %324, align 8\n %\"'de189\" = alloca double, align 8\n %325 = getelementptr double, double* %\"'de189\", i64 0\n store double 0.000000e+00, double* %325, align 8\n %\"'de190\" = alloca double, align 8\n %326 = getelementptr double, double* %\"'de190\", i64 0\n store double 0.000000e+00, double* %326, align 8\n %\"'de191\" = alloca double, align 8\n %327 = getelementptr double, double* %\"'de191\", i64 0\n store double 0.000000e+00, double* %327, align 8\n %\"'de192\" = alloca double, align 8\n %328 = getelementptr double, double* %\"'de192\", i64 0\n store double 0.000000e+00, double* %328, align 8\n %\"'de193\" = alloca double, align 8\n %329 = getelementptr double, double* %\"'de193\", i64 0\n store double 0.000000e+00, double* %329, align 8\n %\".fca.1.extract251'de\" = alloca double, align 8\n %330 = getelementptr double, double* %\".fca.1.extract251'de\", i64 0\n store double 0.000000e+00, double* %330, align 8\n %\"arrayref37.sroa.0.0.copyload'de\" = alloca double, align 8\n %331 = getelementptr double, double* %\"arrayref37.sroa.0.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %331, align 8\n %\".fca.0.extract250'de\" = alloca double, align 8\n %332 = getelementptr double, double* %\".fca.0.extract250'de\", i64 0\n store double 0.000000e+00, double* %332, align 8\n %\"'de194\" = alloca double, align 8\n %333 = getelementptr double, double* %\"'de194\", i64 0\n store double 0.000000e+00, double* %333, align 8\n %\"'de195\" = alloca double, align 8\n %334 = getelementptr double, double* %\"'de195\", i64 0\n store double 0.000000e+00, double* %334, align 8\n %\"'de196\" = alloca double, align 8\n %335 = getelementptr double, double* %\"'de196\", i64 0\n store double 0.000000e+00, double* %335, align 8\n %\"arrayref37.sroa.2.0.copyload'de\" = alloca double, align 8\n %336 = getelementptr double, double* %\"arrayref37.sroa.2.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %336, align 8\n %\"'de197\" = alloca double, align 8\n %337 = getelementptr double, double* %\"'de197\", i64 0\n store double 0.000000e+00, double* %337, align 8\n %\"'de198\" = alloca double, align 8\n %338 = getelementptr double, double* %\"'de198\", i64 0\n store double 0.000000e+00, double* %338, align 8\n %\"arrayref24.sroa.3.0.copyload'de\" = alloca double, align 8\n %339 = getelementptr double, double* %\"arrayref24.sroa.3.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %339, align 8\n %\"arrayref24.sroa.0.0.copyload'de\" = alloca double, align 8\n %340 = getelementptr double, double* %\"arrayref24.sroa.0.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %340, align 8\n %\"'de199\" = alloca double, align 8\n %341 = getelementptr double, double* %\"'de199\", i64 0\n store double 0.000000e+00, double* %341, align 8\n %\"'de200\" = alloca double, align 8\n %342 = getelementptr double, double* %\"'de200\", i64 0\n store double 0.000000e+00, double* %342, align 8\n %\"'de201\" = alloca double, align 8\n %343 = getelementptr double, double* %\"'de201\", i64 0\n store double 0.000000e+00, double* %343, align 8\n %\"'de202\" = alloca double, align 8\n %344 = getelementptr double, double* %\"'de202\", i64 0\n store double 0.000000e+00, double* %344, align 8\n %\"arrayref13.sroa.0.0.copyload'de\" = alloca double, align 8\n %345 = getelementptr double, double* %\"arrayref13.sroa.0.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %345, align 8\n %\"'de203\" = alloca double, align 8\n %346 = getelementptr double, double* %\"'de203\", i64 0\n store double 0.000000e+00, double* %346, align 8\n %\"'de204\" = alloca double, align 8\n %347 = getelementptr double, double* %\"'de204\", i64 0\n store double 0.000000e+00, double* %347, align 8\n %\"'de205\" = alloca double, align 8\n %348 = getelementptr double, double* %\"'de205\", i64 0\n store double 0.000000e+00, double* %348, align 8\n %\"arrayref13.sroa.2.0.copyload'de\" = alloca double, align 8\n %349 = getelementptr double, double* %\"arrayref13.sroa.2.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %349, align 8\n %\"'de206\" = alloca [2 x double], align 8\n %350 = getelementptr [2 x double], [2 x double]* %\"'de206\", i64 0, i32 0\n store double 0.000000e+00, double* %350, align 8\n %351 = getelementptr [2 x double], [2 x double]* %\"'de206\", i64 0, i32 1\n store double 0.000000e+00, double* %351, align 8\n %\".fca.1.insert255'de\" = alloca [2 x double], align 8\n %352 = getelementptr [2 x double], [2 x double]* %\".fca.1.insert255'de\", i64 0, i32 0\n store double 0.000000e+00, double* %352, align 8\n %353 = getelementptr [2 x double], [2 x double]* %\".fca.1.insert255'de\", i64 0, i32 1\n store double 0.000000e+00, double* %353, align 8\n %\"arrayref.sroa.2.0.copyload'de\" = alloca double, align 8\n %354 = getelementptr double, double* %\"arrayref.sroa.2.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %354, align 8\n %\".fca.0.insert254'de\" = alloca [2 x double], align 8\n %355 = getelementptr [2 x double], [2 x double]* %\".fca.0.insert254'de\", i64 0, i32 0\n store double 0.000000e+00, double* %355, align 8\n %356 = getelementptr [2 x double], [2 x double]* %\".fca.0.insert254'de\", i64 0, i32 1\n store double 0.000000e+00, double* %356, align 8\n %\"arrayref.sroa.0.0.copyload'de\" = alloca double, align 8\n %357 = getelementptr double, double* %\"arrayref.sroa.0.0.copyload'de\", i64 0\n store double 0.000000e+00, double* %357, align 8\n\ninverttop: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_amerge\n fence syncscope(\"singlethread\") seq_cst\n fence syncscope(\"singlethread\") seq_cst\n call void @free(i8* %16)\n call void @free(i8* %7)\n call void @free(i8* %4)\n ret void\n\ninvertL111: ; preds = %invertL134, %invertL125\n %358 = load double, double* %\"'de\", align 8, !dbg !4837\n store double 0.000000e+00, double* %\"'de\", align 8, !dbg !4837\n %359 = fmul fast double %358, 0x3FD5555555555555, !dbg !4837\n %360 = load double, double* %\"unbox48'de\", align 8, !dbg !4837\n %361 = fadd fast double %360, %359, !dbg !4837\n store double %361, double* %\"unbox48'de\", align 8, !dbg !4837\n %362 = load double, double* %\"unbox48'de\", align 8, !dbg !4837\n store double 0.000000e+00, double* %\"unbox48'de\", align 8, !dbg !4837\n %\"'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc\", i64 0, i64 1, !dbg !4837\n %363 = load double, double* %\"'ipg_unwrap\", align 8, !dbg !4837, !tbaa !1201, !alias.scope !5069, !noalias !5070\n %364 = fadd fast double %363, %362, !dbg !4837\n store double %364, double* %\"'ipg_unwrap\", align 8, !dbg !4837, !tbaa !1201, !alias.scope !5069, !noalias !5070\n %365 = load double, double* %\"'de18\", align 8, !dbg !4837\n store double 0.000000e+00, double* %\"'de18\", align 8, !dbg !4837\n %366 = fmul fast double %365, 0x3FD5555555555555, !dbg !4837\n %367 = load double, double* %\"unbox47'de\", align 8, !dbg !4837\n %368 = fadd fast double %367, %366, !dbg !4837\n store double %368, double* %\"unbox47'de\", align 8, !dbg !4837\n %369 = load double, double* %\"unbox47'de\", align 8, !dbg !4837\n store double 0.000000e+00, double* %\"unbox47'de\", align 8, !dbg !4837\n %\"'ipg19_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc\", i64 0, i64 0, !dbg !4837\n %370 = load double, double* %\"'ipg19_unwrap\", align 8, !dbg !4837, !tbaa !1201, !alias.scope !5069, !noalias !5070\n %371 = fadd fast double %370, %369, !dbg !4837\n store double %371, double* %\"'ipg19_unwrap\", align 8, !dbg !4837, !tbaa !1201, !alias.scope !5069, !noalias !5070\n %_unwrap = addrspacecast [2 x double]* %10 to [2 x double] addrspace(11)*, !dbg !4825\n %\"'ipc20_unwrap\" = addrspacecast [2 x double]* %\"newstruct46'ipc\" to [2 x double] addrspace(11)*, !dbg !4825\n %tapeArg21_unwrap = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 3, !dbg !4825\n call fastcc void @diffejulia_log_4285([2 x double]* nocapture nofree writeonly align 8 \"enzyme_sret\" undef, [2 x double]* nocapture nofree align 8 \"enzyme_sret\" %\"'ipc\", [2 x double] addrspace(11)* nocapture nofree readonly align 8 %_unwrap, [2 x double] addrspace(11)* nocapture nofree align 8 %\"'ipc20_unwrap\", { i8*, i8*, double, double } %tapeArg21_unwrap), !dbg !4825\n %\"'ipg22_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct46'ipc\", i64 0, i64 1, !dbg !4828\n %372 = load double, double* %\"'ipg22_unwrap\", align 8, !dbg !4828, !tbaa !1201, !alias.scope !5071, !noalias !5072\n store double 0.000000e+00, double* %\"'ipg22_unwrap\", align 8, !dbg !4828, !tbaa !1201, !alias.scope !5071, !noalias !5072\n %373 = load double, double* %\"'de23\", align 8, !dbg !4828\n %374 = fadd fast double %373, %372, !dbg !4828\n store double %374, double* %\"'de23\", align 8, !dbg !4828\n %\"'ipg24_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct46'ipc\", i64 0, i64 0, !dbg !4828\n %375 = load double, double* %\"'ipg24_unwrap\", align 8, !dbg !4828, !tbaa !1201, !alias.scope !5071, !noalias !5072\n store double 0.000000e+00, double* %\"'ipg24_unwrap\", align 8, !dbg !4828, !tbaa !1201, !alias.scope !5071, !noalias !5072\n %376 = load double, double* %\"'de25\", align 8, !dbg !4828\n %377 = fadd fast double %376, %375, !dbg !4828\n store double %377, double* %\"'de25\", align 8, !dbg !4828\n %378 = load double, double* %\"'de23\", align 8, !dbg !4826\n store double 0.000000e+00, double* %\"'de23\", align 8, !dbg !4826\n %379 = fmul fast double %378, 5.000000e-01, !dbg !4826\n %380 = load double, double* %\"'de26\", align 8, !dbg !4826\n %381 = fadd fast double %380, %379, !dbg !4826\n store double %381, double* %\"'de26\", align 8, !dbg !4826\n %382 = load double, double* %\"'de25\", align 8, !dbg !4826\n store double 0.000000e+00, double* %\"'de25\", align 8, !dbg !4826\n %383 = fmul fast double %382, 5.000000e-01, !dbg !4826\n %384 = load double, double* %\"'de27\", align 8, !dbg !4826\n %385 = fadd fast double %384, %383, !dbg !4826\n store double %385, double* %\"'de27\", align 8, !dbg !4826\n %386 = load double, double* %\"'de26\", align 8, !dbg !4823\n store double 0.000000e+00, double* %\"'de26\", align 8, !dbg !4823\n %387 = load double, double* %\"'de28\", align 8, !dbg !4823\n %388 = fadd fast double %387, %386, !dbg !4823\n store double %388, double* %\"'de28\", align 8, !dbg !4823\n %389 = load double, double* %\".fca.1.extract245'de\", align 8, !dbg !4823\n %390 = fadd fast double %389, %386, !dbg !4823\n store double %390, double* %\".fca.1.extract245'de\", align 8, !dbg !4823\n %391 = load double, double* %\"'de27\", align 8, !dbg !4823\n store double 0.000000e+00, double* %\"'de27\", align 8, !dbg !4823\n %392 = load double, double* %\"'de29\", align 8, !dbg !4823\n %393 = fadd fast double %392, %391, !dbg !4823\n store double %393, double* %\"'de29\", align 8, !dbg !4823\n %394 = load double, double* %\".fca.0.extract244'de\", align 8, !dbg !4823\n %395 = fadd fast double %394, %391, !dbg !4823\n store double %395, double* %\".fca.0.extract244'de\", align 8, !dbg !4823\n br label %invertidxend\n\ninvertL125: ; preds = %invertL242\n %_unwrap30 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 1, !dbg !4853\n %unbox48_unwrap = load double, double* %_unwrap30, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4846\n %_unwrap31 = fmul double %unbox48_unwrap, 0x3FD5555555555555, !dbg !4853\n %_unwrap32 = fcmp une double %_unwrap31, 0.000000e+00, !dbg !4853\n %396 = load double, double* %\".'de\", align 8, !dbg !4853\n %diffe = select fast i1 %_unwrap32, double %396, double 0.000000e+00, !dbg !4853\n %397 = load double, double* %\".'de\", align 8, !dbg !4853\n %diffe33 = select fast i1 %_unwrap32, double 0.000000e+00, double %397, !dbg !4853\n store double 0.000000e+00, double* %\".'de\", align 8, !dbg !4853\n %398 = load double, double* %\"'de18\", align 8, !dbg !4853\n %399 = fadd fast double %398, %396, !dbg !4853\n %400 = select fast i1 %_unwrap32, double %399, double %398, !dbg !4853\n store double %400, double* %\"'de18\", align 8, !dbg !4853\n %401 = load double, double* %\"'de\", align 8, !dbg !4853\n %402 = fadd fast double %401, %397, !dbg !4853\n %403 = select fast i1 %_unwrap32, double %401, double %402, !dbg !4853\n store double %403, double* %\"'de\", align 8, !dbg !4853\n br label %invertL111\n\ninvertL134: ; preds = %invertL151, %invertL139\n br label %invertL111\n\ninvertL139: ; preds = %invertL242.thread, %invertL145\n br label %invertL134\n\ninvertL145: ; preds = %invertL242.thread, %invertL147\n br label %invertL139\n\ninvertL147: ; preds = %invertL242\n br label %invertL145\n\ninvertL151: ; preds = %invertL242, %invertL156\n %404 = load double, double* %\"'de34\", align 8, !dbg !4868\n store double 0.000000e+00, double* %\"'de34\", align 8, !dbg !4868\n %_unwrap35 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0, !dbg !4868\n %unbox47_unwrap = load double, double* %_unwrap35, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4843\n %_unwrap36 = fmul double %unbox47_unwrap, 0x3FD5555555555555, !dbg !4868\n %405 = call fast fastcc double @julia_exp_4278(double %_unwrap36), !dbg !4868\n %406 = fmul fast double %404, %405, !dbg !4868\n %407 = load double, double* %\"'de18\", align 8, !dbg !4868\n %408 = fadd fast double %407, %406, !dbg !4868\n store double %408, double* %\"'de18\", align 8, !dbg !4868\n br label %invertL134\n\ninvertL156: ; preds = %invertL242\n %409 = load double, double* %\"'de37\", align 8, !dbg !4873\n store double 0.000000e+00, double* %\"'de37\", align 8, !dbg !4873\n %_unwrap38 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 1, !dbg !4873\n %unbox48_unwrap39 = load double, double* %_unwrap38, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4846\n %_unwrap40 = fmul double %unbox48_unwrap39, 0x3FD5555555555555, !dbg !4873\n %410 = call [2 x double] @julia_sincos_4270_inner.1(double %_unwrap40) #49, !dbg !4872\n %.fca.0.extract217_unwrap = extractvalue [2 x double] %410, 0, !dbg !4873\n %411 = fmul fast double %409, %.fca.0.extract217_unwrap, !dbg !4873\n %412 = load double, double* %\"'de34\", align 8, !dbg !4873\n %413 = fadd fast double %412, %411, !dbg !4873\n store double %413, double* %\"'de34\", align 8, !dbg !4873\n %_unwrap41 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0, !dbg !4873\n %unbox47_unwrap42 = load double, double* %_unwrap41, align 8, !dbg !4837, !tbaa !1201, !alias.scope !4838, !noalias !4841, !invariant.group !4843\n %_unwrap43 = fmul double %unbox47_unwrap42, 0x3FD5555555555555, !dbg !4873\n %414 = call fastcc double @julia_exp_4278(double %_unwrap43) #48, !dbg !4868\n %415 = fmul fast double %409, %414, !dbg !4873\n %416 = load double, double* %\".fca.0.extract217'de\", align 8, !dbg !4873\n %417 = fadd fast double %416, %415, !dbg !4873\n store double %417, double* %\".fca.0.extract217'de\", align 8, !dbg !4873\n %418 = load double, double* %\"'de44\", align 8, !dbg !4873\n store double 0.000000e+00, double* %\"'de44\", align 8, !dbg !4873\n %.fca.1.extract218_unwrap = extractvalue [2 x double] %410, 1, !dbg !4873\n %419 = fmul fast double %418, %.fca.1.extract218_unwrap, !dbg !4873\n %420 = load double, double* %\"'de34\", align 8, !dbg !4873\n %421 = fadd fast double %420, %419, !dbg !4873\n store double %421, double* %\"'de34\", align 8, !dbg !4873\n %422 = fmul fast double %418, %414, !dbg !4873\n %423 = load double, double* %\".fca.1.extract218'de\", align 8, !dbg !4873\n %424 = fadd fast double %423, %422, !dbg !4873\n store double %424, double* %\".fca.1.extract218'de\", align 8, !dbg !4873\n %425 = load double, double* %\".fca.1.extract218'de\", align 8, !dbg !4872\n %426 = getelementptr inbounds [2 x double], [2 x double]* %\"'de45\", i32 0, i32 1, !dbg !4872\n %427 = load double, double* %426, align 8, !dbg !4872\n %428 = fadd fast double %427, %425, !dbg !4872\n store double %428, double* %426, align 8, !dbg !4872\n store double 0.000000e+00, double* %\".fca.1.extract218'de\", align 8, !dbg !4872\n %429 = load double, double* %\".fca.0.extract217'de\", align 8, !dbg !4872\n %430 = getelementptr inbounds [2 x double], [2 x double]* %\"'de45\", i32 0, i32 0, !dbg !4872\n %431 = load double, double* %430, align 8, !dbg !4872\n %432 = fadd fast double %431, %429, !dbg !4872\n store double %432, double* %430, align 8, !dbg !4872\n store double 0.000000e+00, double* %\".fca.0.extract217'de\", align 8, !dbg !4872\n %433 = load [2 x double], [2 x double]* %\"'de45\", align 8, !dbg !4872\n store [2 x double] zeroinitializer, [2 x double]* %\"'de45\", align 8, !dbg !4872\n %434 = call fast [2 x double] @julia_sincos_4270_inner.1(double %_unwrap40) #50, !dbg !4872\n %435 = extractvalue [2 x double] %434, 1, !dbg !4872\n %436 = extractvalue [2 x double] %433, 0, !dbg !4872\n %437 = fmul fast double %435, %436, !dbg !4872\n %438 = extractvalue [2 x double] %434, 0, !dbg !4872\n %439 = extractvalue [2 x double] %433, 1, !dbg !4872\n %440 = fmul fast double %438, %439, !dbg !4872\n %441 = fneg fast double %440, !dbg !4872\n %442 = fadd fast double %437, %441, !dbg !4872\n %443 = load double, double* %\"'de\", align 8, !dbg !4872\n %444 = fadd fast double %443, %442, !dbg !4872\n store double %444, double* %\"'de\", align 8, !dbg !4872\n br label %invertL151\n\ninvertL177: ; preds = %invertL200, %invertL191\n %445 = load double, double* %\"'de46\", align 8, !dbg !4889\n store double 0.000000e+00, double* %\"'de46\", align 8, !dbg !4889\n %446 = fmul fast double %445, 0x3FD5555555555555, !dbg !4889\n %447 = load double, double* %\"unbox97'de\", align 8, !dbg !4889\n %448 = fadd fast double %447, %446, !dbg !4889\n store double %448, double* %\"unbox97'de\", align 8, !dbg !4889\n %449 = load double, double* %\"unbox97'de\", align 8, !dbg !4889\n store double 0.000000e+00, double* %\"unbox97'de\", align 8, !dbg !4889\n %\"'ipg48_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc47\", i64 0, i64 1, !dbg !4889\n %450 = load double, double* %\"'ipg48_unwrap\", align 8, !dbg !4889, !tbaa !1201, !alias.scope !5073, !noalias !5074\n %451 = fadd fast double %450, %449, !dbg !4889\n store double %451, double* %\"'ipg48_unwrap\", align 8, !dbg !4889, !tbaa !1201, !alias.scope !5073, !noalias !5074\n %452 = load double, double* %\"'de49\", align 8, !dbg !4889\n store double 0.000000e+00, double* %\"'de49\", align 8, !dbg !4889\n %453 = fmul fast double %452, 0x3FD5555555555555, !dbg !4889\n %454 = load double, double* %\"unbox96'de\", align 8, !dbg !4889\n %455 = fadd fast double %454, %453, !dbg !4889\n store double %455, double* %\"unbox96'de\", align 8, !dbg !4889\n %456 = load double, double* %\"unbox96'de\", align 8, !dbg !4889\n store double 0.000000e+00, double* %\"unbox96'de\", align 8, !dbg !4889\n %\"'ipg50_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc47\", i64 0, i64 0, !dbg !4889\n %457 = load double, double* %\"'ipg50_unwrap\", align 8, !dbg !4889, !tbaa !1201, !alias.scope !5073, !noalias !5074\n %458 = fadd fast double %457, %456, !dbg !4889\n store double %458, double* %\"'ipg50_unwrap\", align 8, !dbg !4889, !tbaa !1201, !alias.scope !5073, !noalias !5074\n %_unwrap51 = addrspacecast [2 x double]* %12 to [2 x double] addrspace(11)*, !dbg !4877\n %\"'ipc52_unwrap\" = addrspacecast [2 x double]* %\"newstruct95'ipc\" to [2 x double] addrspace(11)*, !dbg !4877\n %tapeArg53_unwrap = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 4, !dbg !4877\n call fastcc void @diffejulia_log_4285([2 x double]* nocapture nofree writeonly align 8 \"enzyme_sret\" undef, [2 x double]* nocapture nofree align 8 \"enzyme_sret\" %\"'ipc47\", [2 x double] addrspace(11)* nocapture nofree readonly align 8 %_unwrap51, [2 x double] addrspace(11)* nocapture nofree align 8 %\"'ipc52_unwrap\", { i8*, i8*, double, double } %tapeArg53_unwrap), !dbg !4877\n %\"'ipg54_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct95'ipc\", i64 0, i64 1, !dbg !4880\n %459 = load double, double* %\"'ipg54_unwrap\", align 8, !dbg !4880, !tbaa !1201, !alias.scope !5075, !noalias !5076\n store double 0.000000e+00, double* %\"'ipg54_unwrap\", align 8, !dbg !4880, !tbaa !1201, !alias.scope !5075, !noalias !5076\n %460 = load double, double* %\"'de55\", align 8, !dbg !4880\n %461 = fadd fast double %460, %459, !dbg !4880\n store double %461, double* %\"'de55\", align 8, !dbg !4880\n %\"'ipg56_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"newstruct95'ipc\", i64 0, i64 0, !dbg !4880\n %462 = load double, double* %\"'ipg56_unwrap\", align 8, !dbg !4880, !tbaa !1201, !alias.scope !5075, !noalias !5076\n store double 0.000000e+00, double* %\"'ipg56_unwrap\", align 8, !dbg !4880, !tbaa !1201, !alias.scope !5075, !noalias !5076\n %463 = load double, double* %\"'de57\", align 8, !dbg !4880\n %464 = fadd fast double %463, %462, !dbg !4880\n store double %464, double* %\"'de57\", align 8, !dbg !4880\n %465 = load double, double* %\"'de55\", align 8, !dbg !4878\n store double 0.000000e+00, double* %\"'de55\", align 8, !dbg !4878\n %466 = fmul fast double %465, 5.000000e-01, !dbg !4878\n %467 = load double, double* %\"'de58\", align 8, !dbg !4878\n %468 = fadd fast double %467, %466, !dbg !4878\n store double %468, double* %\"'de58\", align 8, !dbg !4878\n %469 = load double, double* %\"'de57\", align 8, !dbg !4878\n store double 0.000000e+00, double* %\"'de57\", align 8, !dbg !4878\n %470 = fmul fast double %469, 5.000000e-01, !dbg !4878\n %471 = load double, double* %\"'de59\", align 8, !dbg !4878\n %472 = fadd fast double %471, %470, !dbg !4878\n store double %472, double* %\"'de59\", align 8, !dbg !4878\n %473 = load double, double* %\"'de58\", align 8, !dbg !4875\n store double 0.000000e+00, double* %\"'de58\", align 8, !dbg !4875\n %474 = load double, double* %\"'de28\", align 8, !dbg !4875\n %475 = fadd fast double %474, %473, !dbg !4875\n store double %475, double* %\"'de28\", align 8, !dbg !4875\n %476 = fneg fast double %473, !dbg !4875\n %477 = load double, double* %\".fca.1.extract245'de\", align 8, !dbg !4875\n %478 = fadd fast double %477, %476, !dbg !4875\n store double %478, double* %\".fca.1.extract245'de\", align 8, !dbg !4875\n %479 = load double, double* %\"'de59\", align 8, !dbg !4875\n store double 0.000000e+00, double* %\"'de59\", align 8, !dbg !4875\n %480 = load double, double* %\"'de29\", align 8, !dbg !4875\n %481 = fadd fast double %480, %479, !dbg !4875\n store double %481, double* %\"'de29\", align 8, !dbg !4875\n %482 = fneg fast double %479, !dbg !4875\n %483 = load double, double* %\".fca.0.extract244'de\", align 8, !dbg !4875\n %484 = fadd fast double %483, %482, !dbg !4875\n store double %484, double* %\".fca.0.extract244'de\", align 8, !dbg !4875\n br label %invertidxend\n\ninvertL191: ; preds = %invertL242\n %_unwrap60 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 1, !dbg !4853\n %unbox97_unwrap = load double, double* %_unwrap60, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4898\n %_unwrap61 = fmul double %unbox97_unwrap, 0x3FD5555555555555, !dbg !4853\n %_unwrap62 = fcmp une double %_unwrap61, 0.000000e+00, !dbg !4853\n %485 = load double, double* %\".191'de\", align 8, !dbg !4853\n %diffe63 = select fast i1 %_unwrap62, double %485, double 0.000000e+00, !dbg !4853\n %486 = load double, double* %\".191'de\", align 8, !dbg !4853\n %diffe64 = select fast i1 %_unwrap62, double 0.000000e+00, double %486, !dbg !4853\n store double 0.000000e+00, double* %\".191'de\", align 8, !dbg !4853\n %487 = load double, double* %\"'de49\", align 8, !dbg !4853\n %488 = fadd fast double %487, %485, !dbg !4853\n %489 = select fast i1 %_unwrap62, double %488, double %487, !dbg !4853\n store double %489, double* %\"'de49\", align 8, !dbg !4853\n %490 = load double, double* %\"'de46\", align 8, !dbg !4853\n %491 = fadd fast double %490, %486, !dbg !4853\n %492 = select fast i1 %_unwrap62, double %490, double %491, !dbg !4853\n store double %492, double* %\"'de46\", align 8, !dbg !4853\n br label %invertL177\n\ninvertL200: ; preds = %invertL217, %invertL205\n br label %invertL177\n\ninvertL205: ; preds = %invertL242.thread, %invertL211\n br label %invertL200\n\ninvertL211: ; preds = %invertL242.thread, %invertL213\n br label %invertL205\n\ninvertL213: ; preds = %invertL242\n br label %invertL211\n\ninvertL217: ; preds = %invertL242, %invertL222\n %493 = load double, double* %\"'de65\", align 8, !dbg !4916\n store double 0.000000e+00, double* %\"'de65\", align 8, !dbg !4916\n %_unwrap66 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 0, !dbg !4916\n %unbox96_unwrap = load double, double* %_unwrap66, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4895\n %_unwrap67 = fmul double %unbox96_unwrap, 0x3FD5555555555555, !dbg !4916\n %494 = call fast fastcc double @julia_exp_4278(double %_unwrap67), !dbg !4916\n %495 = fmul fast double %493, %494, !dbg !4916\n %496 = load double, double* %\"'de49\", align 8, !dbg !4916\n %497 = fadd fast double %496, %495, !dbg !4916\n store double %497, double* %\"'de49\", align 8, !dbg !4916\n br label %invertL200\n\ninvertL222: ; preds = %invertL242\n %498 = load double, double* %\"'de68\", align 8, !dbg !4921\n store double 0.000000e+00, double* %\"'de68\", align 8, !dbg !4921\n %_unwrap69 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 1, !dbg !4921\n %unbox97_unwrap70 = load double, double* %_unwrap69, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4898\n %_unwrap71 = fmul double %unbox97_unwrap70, 0x3FD5555555555555, !dbg !4921\n %499 = call [2 x double] @julia_sincos_4270_inner.1(double %_unwrap71) #49, !dbg !4920\n %.fca.0.extract_unwrap = extractvalue [2 x double] %499, 0, !dbg !4921\n %500 = fmul fast double %498, %.fca.0.extract_unwrap, !dbg !4921\n %501 = load double, double* %\"'de65\", align 8, !dbg !4921\n %502 = fadd fast double %501, %500, !dbg !4921\n store double %502, double* %\"'de65\", align 8, !dbg !4921\n %_unwrap72 = getelementptr inbounds [2 x double], [2 x double]* %17, i64 0, i64 0, !dbg !4921\n %unbox96_unwrap73 = load double, double* %_unwrap72, align 8, !dbg !4889, !tbaa !1201, !alias.scope !4890, !noalias !4893, !invariant.group !4895\n %_unwrap74 = fmul double %unbox96_unwrap73, 0x3FD5555555555555, !dbg !4921\n %503 = call fastcc double @julia_exp_4278(double %_unwrap74) #48, !dbg !4916\n %504 = fmul fast double %498, %503, !dbg !4921\n %505 = load double, double* %\".fca.0.extract'de\", align 8, !dbg !4921\n %506 = fadd fast double %505, %504, !dbg !4921\n store double %506, double* %\".fca.0.extract'de\", align 8, !dbg !4921\n %507 = load double, double* %\"'de75\", align 8, !dbg !4921\n store double 0.000000e+00, double* %\"'de75\", align 8, !dbg !4921\n %.fca.1.extract_unwrap = extractvalue [2 x double] %499, 1, !dbg !4921\n %508 = fmul fast double %507, %.fca.1.extract_unwrap, !dbg !4921\n %509 = load double, double* %\"'de65\", align 8, !dbg !4921\n %510 = fadd fast double %509, %508, !dbg !4921\n store double %510, double* %\"'de65\", align 8, !dbg !4921\n %511 = fmul fast double %507, %503, !dbg !4921\n %512 = load double, double* %\".fca.1.extract'de\", align 8, !dbg !4921\n %513 = fadd fast double %512, %511, !dbg !4921\n store double %513, double* %\".fca.1.extract'de\", align 8, !dbg !4921\n %514 = load double, double* %\".fca.1.extract'de\", align 8, !dbg !4920\n %515 = getelementptr inbounds [2 x double], [2 x double]* %\"'de76\", i32 0, i32 1, !dbg !4920\n %516 = load double, double* %515, align 8, !dbg !4920\n %517 = fadd fast double %516, %514, !dbg !4920\n store double %517, double* %515, align 8, !dbg !4920\n store double 0.000000e+00, double* %\".fca.1.extract'de\", align 8, !dbg !4920\n %518 = load double, double* %\".fca.0.extract'de\", align 8, !dbg !4920\n %519 = getelementptr inbounds [2 x double], [2 x double]* %\"'de76\", i32 0, i32 0, !dbg !4920\n %520 = load double, double* %519, align 8, !dbg !4920\n %521 = fadd fast double %520, %518, !dbg !4920\n store double %521, double* %519, align 8, !dbg !4920\n store double 0.000000e+00, double* %\".fca.0.extract'de\", align 8, !dbg !4920\n %522 = load [2 x double], [2 x double]* %\"'de76\", align 8, !dbg !4920\n store [2 x double] zeroinitializer, [2 x double]* %\"'de76\", align 8, !dbg !4920\n %523 = call fast [2 x double] @julia_sincos_4270_inner.1(double %_unwrap71) #50, !dbg !4920\n %524 = extractvalue [2 x double] %523, 1, !dbg !4920\n %525 = extractvalue [2 x double] %522, 0, !dbg !4920\n %526 = fmul fast double %524, %525, !dbg !4920\n %527 = extractvalue [2 x double] %523, 0, !dbg !4920\n %528 = extractvalue [2 x double] %522, 1, !dbg !4920\n %529 = fmul fast double %527, %528, !dbg !4920\n %530 = fneg fast double %529, !dbg !4920\n %531 = fadd fast double %526, %530, !dbg !4920\n %532 = load double, double* %\"'de46\", align 8, !dbg !4920\n %533 = fadd fast double %532, %531, !dbg !4920\n store double %533, double* %\"'de46\", align 8, !dbg !4920\n br label %invertL217\n\ninvertL242.thread: ; preds = %invertL265\n %\".sroa.6.0..sroa_idx303329'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 1, !dbg !4923\n store double 0.000000e+00, double* %\".sroa.6.0..sroa_idx303329'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n %\".sroa.0296.0..sroa_idx298328'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 0, !dbg !4923\n store double 0.000000e+00, double* %\".sroa.0296.0..sroa_idx298328'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n %534 = load i8, i8* %_cache, align 1, !invariant.group !4863\n switch i8 %534, label %invertL211 [\n i8 0, label %invertL139\n i8 1, label %invertL145\n i8 2, label %invertL205\n ]\n\ninvertL242: ; preds = %invertL266, %invertL265\n %\".sroa.6.0..sroa_idx303'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 1, !dbg !4923\n %535 = load double, double* %\".sroa.6.0..sroa_idx303'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n store double 0.000000e+00, double* %\".sroa.6.0..sroa_idx303'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n %536 = load double, double* %\".sroa.6.0'de\", align 8, !dbg !4923\n %537 = fadd fast double %536, %535, !dbg !4923\n store double %537, double* %\".sroa.6.0'de\", align 8, !dbg !4923\n %\".sroa.0296.0..sroa_idx298'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc77\", i64 0, i64 0, !dbg !4923\n %538 = load double, double* %\".sroa.0296.0..sroa_idx298'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n store double 0.000000e+00, double* %\".sroa.0296.0..sroa_idx298'ipg_unwrap\", align 8, !dbg !4923, !alias.scope !5077, !noalias !5078\n %539 = load double, double* %\".sroa.0223.0.copyload'de\", align 8, !dbg !4923\n %540 = fadd fast double %539, %538, !dbg !4923\n store double %540, double* %\".sroa.0223.0.copyload'de\", align 8, !dbg !4923\n %541 = load double, double* %\".sroa.0223.0.copyload'de\", align 8\n store double 0.000000e+00, double* %\".sroa.0223.0.copyload'de\", align 8\n %542 = load i8, i8* %_cache83, align 1, !invariant.group !4854\n %543 = icmp eq i8 0, %542\n %544 = icmp eq i8 1, %542\n %545 = icmp eq i8 2, %542\n %546 = icmp eq i8 3, %542\n %547 = icmp eq i8 5, %542\n %548 = icmp eq i8 6, %542\n %549 = select fast i1 %548, double %541, double 0.000000e+00\n %550 = load double, double* %\"'de75\", align 8\n %551 = fadd fast double %550, %541\n %552 = select fast i1 %548, double %551, double %550\n store double %552, double* %\"'de75\", align 8\n %553 = select fast i1 %547, double %541, double 0.000000e+00\n %554 = load double, double* %\"'de65\", align 8\n %555 = fadd fast double %554, %541\n %556 = select fast i1 %547, double %555, double %554\n store double %556, double* %\"'de65\", align 8\n %557 = select fast i1 %546, double %541, double 0.000000e+00\n %558 = load double, double* %\"'de49\", align 8\n %559 = fadd fast double %558, %541\n %560 = select fast i1 %546, double %559, double %558\n store double %560, double* %\"'de49\", align 8\n %561 = select fast i1 %545, double %541, double 0.000000e+00\n %562 = load double, double* %\"'de44\", align 8\n %563 = fadd fast double %562, %541\n %564 = select fast i1 %545, double %563, double %562\n store double %564, double* %\"'de44\", align 8\n %565 = select fast i1 %544, double %541, double 0.000000e+00\n %566 = load double, double* %\"'de34\", align 8\n %567 = fadd fast double %566, %541\n %568 = select fast i1 %544, double %567, double %566\n store double %568, double* %\"'de34\", align 8\n %569 = select fast i1 %543, double %541, double 0.000000e+00\n %570 = load double, double* %\"'de18\", align 8\n %571 = fadd fast double %570, %541\n %572 = select fast i1 %543, double %571, double %570\n store double %572, double* %\"'de18\", align 8\n %573 = load double, double* %\".sroa.6.0'de\", align 8\n store double 0.000000e+00, double* %\".sroa.6.0'de\", align 8\n %574 = select fast i1 %548, double %573, double 0.000000e+00\n %575 = load double, double* %\"'de68\", align 8\n %576 = fadd fast double %575, %573\n %577 = select fast i1 %548, double %576, double %575\n store double %577, double* %\"'de68\", align 8\n %578 = select fast i1 %547, double %573, double 0.000000e+00\n %579 = load double, double* %\"'de46\", align 8\n %580 = fadd fast double %579, %573\n %581 = select fast i1 %547, double %580, double %579\n store double %581, double* %\"'de46\", align 8\n %582 = select fast i1 %546, double %573, double 0.000000e+00\n %583 = load double, double* %\".191'de\", align 8\n %584 = fadd fast double %583, %573\n %585 = select fast i1 %546, double %584, double %583\n store double %585, double* %\".191'de\", align 8\n %586 = select fast i1 %545, double %573, double 0.000000e+00\n %587 = load double, double* %\"'de37\", align 8\n %588 = fadd fast double %587, %573\n %589 = select fast i1 %545, double %588, double %587\n store double %589, double* %\"'de37\", align 8\n %590 = select fast i1 %544, double %573, double 0.000000e+00\n %591 = load double, double* %\"'de\", align 8\n %592 = fadd fast double %591, %573\n %593 = select fast i1 %544, double %592, double %591\n store double %593, double* %\"'de\", align 8\n %594 = select fast i1 %543, double %573, double 0.000000e+00\n %595 = load double, double* %\".'de\", align 8\n %596 = fadd fast double %595, %573\n %597 = select fast i1 %543, double %596, double %595\n store double %597, double* %\".'de\", align 8\n %598 = load i8, i8* %_cache84, align 1, !invariant.group !4855\n switch i8 %598, label %invertL222 [\n i8 0, label %invertL125\n i8 1, label %invertL147\n i8 2, label %invertL151\n i8 3, label %invertL156\n i8 4, label %invertL191\n i8 5, label %invertL213\n i8 6, label %invertL217\n ]\n\ninvertL265: ; preds = %invertL266\n %599 = load double, double* %\".sroa.6228.0.copyload233'de\", align 8, !dbg !4931\n store double 0.000000e+00, double* %\".sroa.6228.0.copyload233'de\", align 8, !dbg !4931\n %\".sroa.6228.0..sroa_idx232'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc85\", i64 0, i64 1, !dbg !4931\n %600 = load double, double* %\".sroa.6228.0..sroa_idx232'ipg_unwrap\", align 8, !dbg !4931, !tbaa !1201, !alias.scope !5079, !noalias !5080\n %601 = fadd fast double %600, %599, !dbg !4931\n store double %601, double* %\".sroa.6228.0..sroa_idx232'ipg_unwrap\", align 8, !dbg !4931, !tbaa !1201, !alias.scope !5079, !noalias !5080\n %602 = load double, double* %\".sroa.0223.0.copyload227'de\", align 8, !dbg !4931\n store double 0.000000e+00, double* %\".sroa.0223.0.copyload227'de\", align 8, !dbg !4931\n %\".sroa.0223.0..sroa_idx226'ipg_unwrap\" = getelementptr inbounds [2 x double], [2 x double]* %\"'ipc85\", i64 0, i64 0, !dbg !4931\n %603 = load double, double* %\".sroa.0223.0..sroa_idx226'ipg_unwrap\", align 8, !dbg !4931, !tbaa !1201, !alias.scope !5079, !noalias !5080\n %604 = fadd fast double %603, %602, !dbg !4931\n store double %604, double* %\".sroa.0223.0..sroa_idx226'ipg_unwrap\", align 8, !dbg !4931, !tbaa !1201, !alias.scope !5079, !noalias !5080\n %_unwrap86 = addrspacecast [2 x double]* %14 to [2 x double] addrspace(11)*, !dbg !4938\n %\"'ipc87_unwrap\" = addrspacecast [2 x double]* %\"newstruct40'ipc\" to [2 x double] addrspace(11)*, !dbg !4938\n %_unwrap88 = addrspacecast [2 x double]* %2 to [2 x double] addrspace(11)*, !dbg !4938\n %\"'ipc89_unwrap\" = addrspacecast [2 x double]* %\"'ipc77\" to [2 x double] addrspace(11)*, !dbg !4938\n %tapeArg90_unwrap = extractvalue { i8*, i8*, i8*, { i8*, i8*, double, double }, { i8*, i8*, double, double }, { i8*, double, double, double, double }, [2 x double], double, double, double, double, double, double } %tapeArg, 5, !dbg !4938\n call fastcc void @diffejulia___4280([2 x double]* nocapture nofree writeonly align 8 \"enzyme_sret\" undef, [2 x double]* nocapture nofree align 8 \"enzyme_sret\" %\"'ipc85\", [2 x double] addrspace(11)* nocapture nofree readonly align 8 %_unwrap86, [2 x double] addrspace(11)* nocapture nofree align 8 %\"'ipc87_unwrap\", [2 x double] addrspace(11)* nocapture nofree readonly align 8 %_unwrap88, [2 x double] addrspace(11)* nocapture nofree align 8 %\"'ipc89_unwrap\", { i8*, double, double, double, double } %tapeArg90_unwrap), !dbg !4938\n %605 = load double, double* %\".sroa.6.0334'de\", align 8\n store double 0.000000e+00, double* %\".sroa.6.0334'de\", align 8\n %606 = load i1, i1* %_cache91, align 1, !invariant.group !4929\n %607 = select fast i1 %606, double %605, double 0.000000e+00\n %608 = load double, double* %\".sroa.6.0'de\", align 8\n %609 = fadd fast double %608, %605\n %610 = select fast i1 %606, double %609, double %608\n store double %610, double* %\".sroa.6.0'de\", align 8\n %611 = load double, double* %\".sroa.0296.0332'de\", align 8\n store double 0.000000e+00, double* %\".sroa.0296.0332'de\", align 8\n %612 = select fast i1 %606, double %611, double 0.000000e+00\n %613 = load double, double* %\".sroa.0223.0.copyload'de\", align 8\n %614 = fadd fast double %613, %611\n %615 = select fast i1 %606, double %614, double %613\n store double %615, double* %\".sroa.0223.0.copyload'de\", align 8\n %616 = load i1, i1* %_cache92, align 1, !invariant.group !4930\n br i1 %616, label %invertL242, label %invertL242.thread\n\ninvertL266: ; preds = %invertL327, %invertcommon.ret\n %617 = load double, double* %\"'de93\", align 8, !dbg !4961\n store double 0.000000e+00, double* %\"'de93\", align 8, !dbg !4961\n %618 = fmul fast double %617, 0x3FD5555555555555, !dbg !4961\n %619 = load double, double* %\"'de94\", align 8, !dbg !4961\n %620 = fadd fast double %619, %618, !dbg !4961\n store double %620, double* %\"'de94\", align 8, !dbg !4961\n %621 = load double, double* %\"'de94\", align 8, !dbg !4958\n store double 0.000000e+00, double* %\"'de94\", align 8, !dbg !4958\n %622 = load double, double* %\"'de95\", align 8, !dbg !4958\n %623 = fadd fast double %622, %621, !dbg !4958\n store double %623, double* %\"'de95\", align 8, !dbg !4958\n %624 = load double, double* %\"'de96\", align 8, !dbg !4958\n %625 = fadd fast double %624, %621, !dbg !4958\n store double %625, double* %\"'de96\", align 8, !dbg !4958\n %626 = load double, double* %\"'de95\", align 8, !dbg !4958\n store double 0.000000e+00, double* %\"'de95\", align 8, !dbg !4958\n %627 = load double, double* %\"'de97\", align 8, !dbg !4958\n %628 = fadd fast double %627, %626, !dbg !4958\n store double %628, double* %\"'de97\", align 8, !dbg !4958\n %629 = load double, double* %\"'de98\", align 8, !dbg !4958\n %630 = fadd fast double %629, %626, !dbg !4958\n store double %630, double* %\"'de98\", align 8, !dbg !4958\n %631 = load double, double* %\"'de96\", align 8, !dbg !4956\n store double 0.000000e+00, double* %\"'de96\", align 8, !dbg !4956\n %632 = load double, double* %\"'de99\", align 8, !dbg !4956\n %633 = fadd fast double %632, %631, !dbg !4956\n store double %633, double* %\"'de99\", align 8, !dbg !4956\n %634 = load double, double* %\"'de100\", align 8, !dbg !4956\n %635 = fadd fast double %634, %631, !dbg !4956\n store double %635, double* %\"'de100\", align 8, !dbg !4956\n %636 = load double, double* %\"'de100\", align 8, !dbg !4953\n store double 0.000000e+00, double* %\"'de100\", align 8, !dbg !4953\n %637 = fmul fast double %636, 0x3FEBB67AE8584CAA, !dbg !4953\n %638 = load double, double* %\".sroa.6228.0'de\", align 8, !dbg !4953\n %639 = fadd fast double %638, %637, !dbg !4953\n store double %639, double* %\".sroa.6228.0'de\", align 8, !dbg !4953\n %640 = load double, double* %\"'de98\", align 8, !dbg !4956\n store double 0.000000e+00, double* %\"'de98\", align 8, !dbg !4956\n %641 = load double, double* %\"'de101\", align 8, !dbg !4956\n %642 = fadd fast double %641, %640, !dbg !4956\n store double %642, double* %\"'de101\", align 8, !dbg !4956\n %643 = fneg fast double %640, !dbg !4956\n %644 = load double, double* %\"'de102\", align 8, !dbg !4956\n %645 = fadd fast double %644, %643, !dbg !4956\n store double %645, double* %\"'de102\", align 8, !dbg !4956\n %646 = load double, double* %\"'de102\", align 8, !dbg !4953\n store double 0.000000e+00, double* %\"'de102\", align 8, !dbg !4953\n %647 = fmul fast double %646, 0x3FEBB67AE8584CAA, !dbg !4953\n %648 = load double, double* %\".sroa.6.0333'de\", align 8, !dbg !4953\n %649 = fadd fast double %648, %647, !dbg !4953\n store double %649, double* %\".sroa.6.0333'de\", align 8, !dbg !4953\n %650 = load double, double* %\"'de99\", align 8, !dbg !4950\n store double 0.000000e+00, double* %\"'de99\", align 8, !dbg !4950\n %651 = fmul fast double %650, -5.000000e-01, !dbg !4950\n %652 = load double, double* %\".sroa.0223.0'de\", align 8, !dbg !4950\n %653 = fadd fast double %652, %651, !dbg !4950\n store double %653, double* %\".sroa.0223.0'de\", align 8, !dbg !4950\n %654 = load double, double* %\"'de101\", align 8, !dbg !4950\n store double 0.000000e+00, double* %\"'de101\", align 8, !dbg !4950\n %655 = fmul fast double %654, -5.000000e-01, !dbg !4950\n %656 = load double, double* %\".sroa.0296.0331'de\", align 8, !dbg !4950\n %657 = fadd fast double %656, %655, !dbg !4950\n store double %657, double* %\".sroa.0296.0331'de\", align 8, !dbg !4950\n %658 = load double, double* %\"'de103\", align 8, !dbg !4948\n store double 0.000000e+00, double* %\"'de103\", align 8, !dbg !4948\n %659 = fmul fast double %658, 0x3FD5555555555555, !dbg !4948\n %660 = load double, double* %\"'de104\", align 8, !dbg !4948\n %661 = fadd fast double %660, %659, !dbg !4948\n store double %661, double* %\"'de104\", align 8, !dbg !4948\n %662 = load double, double* %\"'de104\", align 8, !dbg !4944\n store double 0.000000e+00, double* %\"'de104\", align 8, !dbg !4944\n %663 = load double, double* %\"'de105\", align 8, !dbg !4944\n %664 = fadd fast double %663, %662, !dbg !4944\n store double %664, double* %\"'de105\", align 8, !dbg !4944\n %665 = load double, double* %\".sroa.0223.0'de\", align 8, !dbg !4944\n %666 = fadd fast double %665, %662, !dbg !4944\n store double %666, double* %\".sroa.0223.0'de\", align 8, !dbg !4944\n %667 = load double, double* %\"'de105\", align 8, !dbg !4944\n store double 0.000000e+00, double* %\"'de105\", align 8, !dbg !4944\n %668 = load double, double* %\"'de97\", align 8, !dbg !4944\n %669 = fadd fast double %668, %667, !dbg !4944\n store double %669, double* %\"'de97\", align 8, !dbg !4944\n %670 = load double, double* %\".sroa.0296.0331'de\", align 8, !dbg !4944\n %671 = fadd fast double %670, %667, !dbg !4944\n store double %671, double* %\".sroa.0296.0331'de\", align 8, !dbg !4944\n %672 = load double, double* %\".sroa.6.0333'de\", align 8\n store double 0.000000e+00, double* %\".sroa.6.0333'de\", align 8\n %673 = load i1, i1* %_cache107, align 1, !invariant.group !4936\n %674 = xor i1 %673, true\n %675 = select fast i1 %673, double %672, double 0.000000e+00\n %676 = load double, double* %\".sroa.6.0334'de\", align 8\n %677 = fadd fast double %676, %672\n %678 = select fast i1 %673, double %677, double %676\n store double %678, double* %\".sroa.6.0334'de\", align 8\n %679 = select fast i1 %674, double %672, double 0.000000e+00\n %680 = load double, double* %\".sroa.6.0'de\", align 8\n %681 = fadd fast double %680, %672\n %682 = select fast i1 %673, double %680, double %681\n store double %682, double* %\".sroa.6.0'de\", align 8\n %683 = load double, double* %\".sroa.0296.0331'de\", align 8\n store double 0.000000e+00, double* %\".sroa.0296.0331'de\", align 8\n %684 = select fast i1 %673, double %683, double 0.000000e+00\n %685 = load double, double* %\".sroa.0296.0332'de\", align 8\n %686 = fadd fast double %685, %683\n %687 = select fast i1 %673, double %686, double %685\n store double %687, double* %\".sroa.0296.0332'de\", align 8\n %688 = select fast i1 %674, double %683, double 0.000000e+00\n %689 = load double, double* %\".sroa.0223.0.copyload'de\", align 8\n %690 = fadd fast double %689, %683\n %691 = select fast i1 %673, double %689, double %690\n store double %691, double* %\".sroa.0223.0.copyload'de\", align 8\n %692 = load double, double* %\".sroa.0223.0'de\", align 8\n store double 0.000000e+00, double* %\".sroa.0223.0'de\", align 8\n %693 = select fast i1 %673, double %692, double 0.000000e+00\n %694 = load double, double* %\".sroa.0223.0.copyload227'de\", align 8\n %695 = fadd fast double %694, %692\n %696 = select fast i1 %673, double %695, double %694\n store double %696, double* %\".sroa.0223.0.copyload227'de\", align 8\n %697 = select fast i1 %674, double %692, double 0.000000e+00\n %698 = load double, double* %\".sroa.0223.0.copyload'de\", align 8\n %699 = fadd fast double %698, %692\n %700 = select fast i1 %673, double %698, double %699\n store double %700, double* %\".sroa.0223.0.copyload'de\", align 8\n %701 = load double, double* %\".sroa.6228.0'de\", align 8\n store double 0.000000e+00, double* %\".sroa.6228.0'de\", align 8\n %702 = select fast i1 %673, double %701, double 0.000000e+00\n %703 = load double, double* %\".sroa.6228.0.copyload233'de\", align 8\n %704 = fadd fast double %703, %701\n %705 = select fast i1 %673, double %704, double %703\n store double %705, double* %\".sroa.6228.0.copyload233'de\", align 8\n %706 = select fast i1 %674, double %701, double 0.000000e+00\n %707 = load double, double* %\".sroa.6.0'de\", align 8\n %708 = fadd fast double %707, %701\n %709 = select fast i1 %673, double %707, double %708\n store double %709, double* %\".sroa.6.0'de\", align 8\n %710 = load i1, i1* %_cache108, align 1, !invariant.group !4937\n br i1 %710, label %invertL265, label %invertL242\n\ninvertcommon.ret: ; preds = %common.ret\n store double %differeturn, double* %\"common.ret.op'de\", align 8\n %711 = load double, double* %\"common.ret.op'de\", align 8\n store double 0.000000e+00, double* %\"common.ret.op'de\", align 8\n %_unwrap112 = fsub double %76, %81\n %_unwrap113 = fadd double %123, %_unwrap112\n %_unwrap114 = fadd double %85, %78\n %_unwrap115 = fadd double %_unwrap113, %_unwrap114\n %_unwrap116 = fmul double %_unwrap115, 0x3FD5555555555555\n %712 = call double @llvm.fabs.f64(double %_unwrap116) #47, !dbg !4973\n %_unwrap117 = fcmp uge double %712, 1.000000e-08\n %_unwrap118 = fadd double %79, %75\n %_unwrap119 = fadd double %120, %_unwrap118\n %_unwrap120 = fsub double %77, %83\n %_unwrap121 = fadd double %_unwrap119, %_unwrap120\n %_unwrap122 = fmul double %_unwrap121, 0x3FD5555555555555\n %_unwrap123 = fcmp ule double %_unwrap122, 0.000000e+00\n %or.cond203_unwrap = select i1 %_unwrap117, i1 true, i1 %_unwrap123\n %_unwrap124 = fcmp uge double %_unwrap122, 1.000000e+00\n %or.cond205_unwrap = select i1 %or.cond203_unwrap, i1 true, i1 %_unwrap124\n %anot1_ = xor i1 %or.cond201, true\n %andVal0 = and i1 %or.cond205_unwrap, %or.cond201\n %bnot1_ = xor i1 %or.cond205_unwrap, true\n %andVal1 = and i1 %bnot1_, %or.cond201\n %713 = select fast i1 %andVal0, double %711, double 0.000000e+00\n %714 = load double, double* %\"spec.select210'de\", align 8\n %715 = fadd fast double %714, %711\n %716 = select fast i1 %andVal0, double %715, double %714\n store double %716, double* %\"spec.select210'de\", align 8\n %717 = select fast i1 %andVal1, double %711, double 0.000000e+00\n %718 = load double, double* %\"'de110\", align 8\n %719 = fadd fast double %718, %711\n %720 = select fast i1 %andVal1, double %719, double %718\n store double %720, double* %\"'de110\", align 8\n %721 = select fast i1 %anot1_, double %711, double 0.000000e+00\n %722 = load double, double* %\"'de103\", align 8\n %723 = fadd fast double %722, %711\n %724 = select fast i1 %or.cond201, double %722, double %723\n store double %724, double* %\"'de103\", align 8\n br i1 %or.cond201, label %staging, label %invertL266\n\ninvertL327: ; preds = %invertL335, %staging\n %725 = load double, double* %\"'de110\", align 8, !dbg !4970\n store double 0.000000e+00, double* %\"'de110\", align 8, !dbg !4970\n %726 = fmul fast double %725, 0x3FD5555555555555, !dbg !4970\n %727 = load double, double* %\"'de125\", align 8, !dbg !4970\n %728 = fadd fast double %727, %726, !dbg !4970\n store double %728, double* %\"'de125\", align 8, !dbg !4970\n %729 = load double, double* %\"'de125\", align 8, !dbg !4967\n store double 0.000000e+00, double* %\"'de125\", align 8, !dbg !4967\n %730 = load double, double* %\"'de126\", align 8, !dbg !4967\n %731 = fadd fast double %730, %729, !dbg !4967\n store double %731, double* %\"'de126\", align 8, !dbg !4967\n %732 = load double, double* %\"'de127\", align 8, !dbg !4967\n %733 = fadd fast double %732, %729, !dbg !4967\n store double %733, double* %\"'de127\", align 8, !dbg !4967\n %734 = load double, double* %\"'de127\", align 8, !dbg !4972\n store double 0.000000e+00, double* %\"'de127\", align 8, !dbg !4972\n %735 = load double, double* %\"'de99\", align 8, !dbg !4972\n %736 = fadd fast double %735, %734, !dbg !4972\n store double %736, double* %\"'de99\", align 8, !dbg !4972\n %737 = fneg fast double %734, !dbg !4972\n %738 = load double, double* %\"'de100\", align 8, !dbg !4972\n %739 = fadd fast double %738, %737, !dbg !4972\n store double %739, double* %\"'de100\", align 8, !dbg !4972\n %740 = load double, double* %\"'de126\", align 8, !dbg !4967\n store double 0.000000e+00, double* %\"'de126\", align 8, !dbg !4967\n %741 = load double, double* %\"'de97\", align 8, !dbg !4967\n %742 = fadd fast double %741, %740, !dbg !4967\n store double %742, double* %\"'de97\", align 8, !dbg !4967\n %743 = load double, double* %\"'de128\", align 8, !dbg !4967\n %744 = fadd fast double %743, %740, !dbg !4967\n store double %744, double* %\"'de128\", align 8, !dbg !4967\n %745 = load double, double* %\"'de128\", align 8, !dbg !4972\n store double 0.000000e+00, double* %\"'de128\", align 8, !dbg !4972\n %746 = load double, double* %\"'de102\", align 8, !dbg !4972\n %747 = fadd fast double %746, %745, !dbg !4972\n store double %747, double* %\"'de102\", align 8, !dbg !4972\n %748 = load double, double* %\"'de101\", align 8, !dbg !4972\n %749 = fadd fast double %748, %745, !dbg !4972\n store double %749, double* %\"'de101\", align 8, !dbg !4972\n br label %invertL266\n\ninvertL335: ; preds = %staging\n %750 = call double @llvm.fabs.f64(double %92) #47, !dbg !4976\n %_unwrap129 = fcmp uge double %750, 1.000000e-08, !dbg !4977\n %_unwrap130 = fcmp ule double %91, 0.000000e+00, !dbg !4977\n %or.cond207_unwrap = select i1 %_unwrap129, i1 true, i1 %_unwrap130, !dbg !4977\n %_unwrap131 = fcmp uge double %91, 1.000000e+00, !dbg !4977\n %or.cond209_unwrap = select i1 %or.cond207_unwrap, i1 true, i1 %_unwrap131, !dbg !4977\n %751 = load double, double* %\"spec.select210'de\", align 8, !dbg !4977\n %diffe132 = select fast i1 %or.cond209_unwrap, double 0.000000e+00, double %751, !dbg !4977\n store double 0.000000e+00, double* %\"spec.select210'de\", align 8, !dbg !4977\n %752 = load double, double* %\"'de93\", align 8, !dbg !4977\n %753 = fadd fast double %752, %751, !dbg !4977\n %754 = select fast i1 %or.cond209_unwrap, double %752, double %753, !dbg !4977\n store double %754, double* %\"'de93\", align 8, !dbg !4977\n br label %invertL327\n\ninvertoob: ; No predecessors!\n\ninvertidxend: ; preds = %invertL177, %invertL111\n %755 = load double, double* %\".fca.1.extract245'de\", align 8, !dbg !5044\n %756 = getelementptr inbounds [2 x double], [2 x double]* %\"'de134\", i32 0, i32 1, !dbg !5044\n %757 = load double, double* %756, align 8, !dbg !5044\n %758 = fadd fast double %757, %755, !dbg !5044\n store double %758, double* %756, align 8, !dbg !5044\n store double 0.000000e+00, double* %\".fca.1.extract245'de\", align 8, !dbg !5044\n %759 = load double, double* %\".fca.0.extract244'de\", align 8, !dbg !5044\n %760 = getelementptr inbounds [2 x double], [2 x double]* %\"'de134\", i32 0, i32 0, !dbg !5044\n %761 = load double, double* %760, align 8, !dbg !5044\n %762 = fadd fast double %761, %759, !dbg !5044\n store double %762, double* %760, align 8, !dbg !5044\n store double 0.000000e+00, double* %\".fca.0.extract244'de\", align 8, !dbg !5044\n %763 = load [2 x double], [2 x double]* %\"'de134\", align 8, !dbg !5044\n store [2 x double] zeroinitializer, [2 x double]* %\"'de134\", align 8, !dbg !5044\n %764 = fcmp fast ueq double %189, 0.000000e+00, !dbg !5044\n %765 = fcmp fast ueq double %190, 0.000000e+00, !dbg !5044\n %766 = and i1 %764, %765, !dbg !5044\n %re = extractvalue [2 x double] %763, 0, !dbg !5044\n %im = extractvalue [2 x double] %763, 1, !dbg !5044\n %767 = fneg fast double %im, !dbg !5044\n %768 = insertvalue [2 x double] undef, double %re, 0, !dbg !5044\n %769 = insertvalue [2 x double] %768, double %767, 1, !dbg !5044\n %770 = call fast fastcc [2 x double] @julia_sqrt_4312_inner.3([2 x double] %.fca.1.insert) #50, !dbg !5044\n %re2 = extractvalue [2 x double] %770, 0, !dbg !5044\n %im2 = extractvalue [2 x double] %770, 1, !dbg !5044\n %771 = fmul fast double 2.000000e+00, %re2, !dbg !5044\n %772 = fmul fast double 0.000000e+00, %im2, !dbg !5044\n %773 = fsub fast double %771, %772, !dbg !5044\n %774 = fmul fast double 2.000000e+00, %im2, !dbg !5044\n %775 = fmul fast double %re2, 0.000000e+00, !dbg !5044\n %776 = fadd fast double %774, %775, !dbg !5044\n %777 = insertvalue [2 x double] undef, double %773, 0, !dbg !5044\n %778 = insertvalue [2 x double] %777, double %776, 1, !dbg !5044\n %779 = fmul fast double %re, %773, !dbg !5044\n %780 = fmul fast double %767, %776, !dbg !5044\n %781 = fadd fast double %779, %780, !dbg !5044\n %782 = fmul fast double %773, %773, !dbg !5044\n %783 = fmul fast double %776, %776, !dbg !5044\n %784 = fadd fast double %782, %783, !dbg !5044\n %785 = fdiv fast double %781, %784, !dbg !5044\n %786 = fmul fast double %773, %767, !dbg !5044\n %787 = fmul fast double %re, %776, !dbg !5044\n %788 = fsub fast double %786, %787, !dbg !5044\n %789 = fdiv fast double %788, %784, !dbg !5044\n %790 = insertvalue [2 x double] undef, double %785, 0, !dbg !5044\n %791 = insertvalue [2 x double] %790, double %789, 1, !dbg !5044\n %792 = fneg fast double %789, !dbg !5044\n %793 = insertvalue [2 x double] undef, double %785, 0, !dbg !5044\n %794 = insertvalue [2 x double] %793, double %792, 1, !dbg !5044\n %795 = select fast i1 %766, [2 x double] zeroinitializer, [2 x double] %794, !dbg !5044\n %796 = load [2 x double], [2 x double]* %\".fca.1.insert'de\", align 8, !dbg !5044\n %797 = extractvalue [2 x double] %795, 0, !dbg !5044\n %798 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.1.insert'de\", i32 0, i32 0, !dbg !5044\n %799 = load double, double* %798, align 8, !dbg !5044\n %800 = fadd fast double %799, %797, !dbg !5044\n store double %800, double* %798, align 8, !dbg !5044\n %801 = extractvalue [2 x double] %795, 1, !dbg !5044\n %802 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.1.insert'de\", i32 0, i32 1, !dbg !5044\n %803 = load double, double* %802, align 8, !dbg !5044\n %804 = fadd fast double %803, %801, !dbg !5044\n store double %804, double* %802, align 8, !dbg !5044\n %805 = load [2 x double], [2 x double]* %\".fca.1.insert'de\", align 8, !dbg !5044\n %806 = extractvalue [2 x double] %805, 1, !dbg !5044\n %807 = load double, double* %\"'de135\", align 8, !dbg !5044\n %808 = fadd fast double %807, %806, !dbg !5044\n store double %808, double* %\"'de135\", align 8, !dbg !5044\n %809 = load [2 x double], [2 x double]* %\".fca.1.insert'de\", align 8, !dbg !5044\n %810 = insertvalue [2 x double] %809, double 0.000000e+00, 1, !dbg !5044\n %811 = extractvalue [2 x double] %809, 0, !dbg !5044\n %812 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.0.insert'de\", i32 0, i32 0, !dbg !5044\n %813 = load double, double* %812, align 8, !dbg !5044\n %814 = fadd fast double %813, %811, !dbg !5044\n store double %814, double* %812, align 8, !dbg !5044\n store [2 x double] zeroinitializer, [2 x double]* %\".fca.1.insert'de\", align 8, !dbg !5044\n %815 = load [2 x double], [2 x double]* %\".fca.0.insert'de\", align 8, !dbg !5044\n %816 = extractvalue [2 x double] %815, 0, !dbg !5044\n %817 = load double, double* %\"'de136\", align 8, !dbg !5044\n %818 = fadd fast double %817, %816, !dbg !5044\n store double %818, double* %\"'de136\", align 8, !dbg !5044\n store [2 x double] zeroinitializer, [2 x double]* %\".fca.0.insert'de\", align 8, !dbg !5044\n %819 = load double, double* %\"'de135\", align 8, !dbg !5060\n store double 0.000000e+00, double* %\"'de135\", align 8, !dbg !5060\n %820 = load double, double* %\"'de137\", align 8, !dbg !5060\n %821 = fadd fast double %820, %819, !dbg !5060\n store double %821, double* %\"'de137\", align 8, !dbg !5060\n %822 = fneg fast double %819, !dbg !5060\n %823 = load double, double* %\"'de138\", align 8, !dbg !5060\n %824 = fadd fast double %823, %822, !dbg !5060\n store double %824, double* %\"'de138\", align 8, !dbg !5060\n %825 = load double, double* %\"'de136\", align 8, !dbg !5060\n store double 0.000000e+00, double* %\"'de136\", align 8, !dbg !5060\n %826 = load double, double* %\"'de139\", align 8, !dbg !5060\n %827 = fadd fast double %826, %825, !dbg !5060\n store double %827, double* %\"'de139\", align 8, !dbg !5060\n %828 = fneg fast double %825, !dbg !5060\n %829 = load double, double* %\"'de140\", align 8, !dbg !5060\n %830 = fadd fast double %829, %828, !dbg !5060\n store double %830, double* %\"'de140\", align 8, !dbg !5060\n %831 = load double, double* %\"'de138\", align 8, !dbg !5059\n store double 0.000000e+00, double* %\"'de138\", align 8, !dbg !5059\n %832 = load double, double* %\"'de141\", align 8, !dbg !5059\n %833 = fadd fast double %832, %831, !dbg !5059\n store double %833, double* %\"'de141\", align 8, !dbg !5059\n %834 = load double, double* %\"'de142\", align 8, !dbg !5059\n %835 = fadd fast double %834, %831, !dbg !5059\n store double %835, double* %\"'de142\", align 8, !dbg !5059\n %836 = load double, double* %\"'de142\", align 8, !dbg !5055\n store double 0.000000e+00, double* %\"'de142\", align 8, !dbg !5055\n %837 = fmul fast double %836, %182, !dbg !5055\n %838 = load double, double* %\"'de143\", align 8, !dbg !5055\n %839 = fadd fast double %838, %837, !dbg !5055\n store double %839, double* %\"'de143\", align 8, !dbg !5055\n %840 = fmul fast double %836, %166, !dbg !5055\n %841 = load double, double* %\"'de144\", align 8, !dbg !5055\n %842 = fadd fast double %841, %840, !dbg !5055\n store double %842, double* %\"'de144\", align 8, !dbg !5055\n %843 = load double, double* %\"'de141\", align 8, !dbg !5055\n store double 0.000000e+00, double* %\"'de141\", align 8, !dbg !5055\n %844 = fmul fast double %843, %179, !dbg !5055\n %845 = load double, double* %\"'de145\", align 8, !dbg !5055\n %846 = fadd fast double %845, %844, !dbg !5055\n store double %846, double* %\"'de145\", align 8, !dbg !5055\n %847 = fmul fast double %843, %167, !dbg !5055\n %848 = load double, double* %\"'de146\", align 8, !dbg !5055\n %849 = fadd fast double %848, %847, !dbg !5055\n store double %849, double* %\"'de146\", align 8, !dbg !5055\n %850 = load double, double* %\"'de140\", align 8, !dbg !5058\n store double 0.000000e+00, double* %\"'de140\", align 8, !dbg !5058\n %851 = load double, double* %\"'de147\", align 8, !dbg !5058\n %852 = fadd fast double %851, %850, !dbg !5058\n store double %852, double* %\"'de147\", align 8, !dbg !5058\n %853 = fneg fast double %850, !dbg !5058\n %854 = load double, double* %\"'de148\", align 8, !dbg !5058\n %855 = fadd fast double %854, %853, !dbg !5058\n store double %855, double* %\"'de148\", align 8, !dbg !5058\n %856 = load double, double* %\"'de148\", align 8, !dbg !5055\n store double 0.000000e+00, double* %\"'de148\", align 8, !dbg !5055\n %857 = fmul fast double %856, %182, !dbg !5055\n %858 = load double, double* %\"'de145\", align 8, !dbg !5055\n %859 = fadd fast double %858, %857, !dbg !5055\n store double %859, double* %\"'de145\", align 8, !dbg !5055\n %860 = fmul fast double %856, %167, !dbg !5055\n %861 = load double, double* %\"'de144\", align 8, !dbg !5055\n %862 = fadd fast double %861, %860, !dbg !5055\n store double %862, double* %\"'de144\", align 8, !dbg !5055\n %863 = load double, double* %\"'de147\", align 8, !dbg !5055\n store double 0.000000e+00, double* %\"'de147\", align 8, !dbg !5055\n %864 = fmul fast double %863, %179, !dbg !5055\n %865 = load double, double* %\"'de143\", align 8, !dbg !5055\n %866 = fadd fast double %865, %864, !dbg !5055\n store double %866, double* %\"'de143\", align 8, !dbg !5055\n %867 = fmul fast double %863, %166, !dbg !5055\n %868 = load double, double* %\"'de146\", align 8, !dbg !5055\n %869 = fadd fast double %868, %867, !dbg !5055\n store double %869, double* %\"'de146\", align 8, !dbg !5055\n %870 = load double, double* %\"'de144\", align 8, !dbg !5054\n store double 0.000000e+00, double* %\"'de144\", align 8, !dbg !5054\n %871 = load double, double* %\"'de149\", align 8, !dbg !5054\n %872 = fadd fast double %871, %870, !dbg !5054\n store double %872, double* %\"'de149\", align 8, !dbg !5054\n %873 = load double, double* %\"'de150\", align 8, !dbg !5054\n %874 = fadd fast double %873, %870, !dbg !5054\n store double %874, double* %\"'de150\", align 8, !dbg !5054\n %875 = load double, double* %\"'de150\", align 8, !dbg !5051\n store double 0.000000e+00, double* %\"'de150\", align 8, !dbg !5051\n %876 = fmul fast double %875, %176, !dbg !5051\n %877 = load double, double* %\"'de143\", align 8, !dbg !5051\n %878 = fadd fast double %877, %876, !dbg !5051\n store double %878, double* %\"'de143\", align 8, !dbg !5051\n %879 = fmul fast double %875, %166, !dbg !5051\n %880 = load double, double* %\"'de151\", align 8, !dbg !5051\n %881 = fadd fast double %880, %879, !dbg !5051\n store double %881, double* %\"'de151\", align 8, !dbg !5051\n %882 = load double, double* %\"'de149\", align 8, !dbg !5051\n store double 0.000000e+00, double* %\"'de149\", align 8, !dbg !5051\n %883 = fmul fast double %882, %175, !dbg !5051\n %884 = load double, double* %\"'de145\", align 8, !dbg !5051\n %885 = fadd fast double %884, %883, !dbg !5051\n store double %885, double* %\"'de145\", align 8, !dbg !5051\n %886 = fmul fast double %882, %167, !dbg !5051\n %887 = load double, double* %\"'de152\", align 8, !dbg !5051\n %888 = fadd fast double %887, %886, !dbg !5051\n store double %888, double* %\"'de152\", align 8, !dbg !5051\n %889 = load double, double* %\"'de146\", align 8, !dbg !5053\n store double 0.000000e+00, double* %\"'de146\", align 8, !dbg !5053\n %890 = load double, double* %\"'de153\", align 8, !dbg !5053\n %891 = fadd fast double %890, %889, !dbg !5053\n store double %891, double* %\"'de153\", align 8, !dbg !5053\n %892 = fneg fast double %889, !dbg !5053\n %893 = load double, double* %\"'de154\", align 8, !dbg !5053\n %894 = fadd fast double %893, %892, !dbg !5053\n store double %894, double* %\"'de154\", align 8, !dbg !5053\n %895 = load double, double* %\"'de154\", align 8, !dbg !5051\n store double 0.000000e+00, double* %\"'de154\", align 8, !dbg !5051\n %896 = fmul fast double %895, %176, !dbg !5051\n %897 = load double, double* %\"'de145\", align 8, !dbg !5051\n %898 = fadd fast double %897, %896, !dbg !5051\n store double %898, double* %\"'de145\", align 8, !dbg !5051\n %899 = fmul fast double %895, %167, !dbg !5051\n %900 = load double, double* %\"'de151\", align 8, !dbg !5051\n %901 = fadd fast double %900, %899, !dbg !5051\n store double %901, double* %\"'de151\", align 8, !dbg !5051\n %902 = load double, double* %\"'de153\", align 8, !dbg !5051\n store double 0.000000e+00, double* %\"'de153\", align 8, !dbg !5051\n %903 = fmul fast double %902, %175, !dbg !5051\n %904 = load double, double* %\"'de143\", align 8, !dbg !5051\n %905 = fadd fast double %904, %903, !dbg !5051\n store double %905, double* %\"'de143\", align 8, !dbg !5051\n %906 = fmul fast double %902, %166, !dbg !5051\n %907 = load double, double* %\"'de152\", align 8, !dbg !5051\n %908 = fadd fast double %907, %906, !dbg !5051\n store double %908, double* %\"'de152\", align 8, !dbg !5051\n %909 = load double, double* %\"'de151\", align 8, !dbg !5047\n store double 0.000000e+00, double* %\"'de151\", align 8, !dbg !5047\n %910 = fmul fast double %909, 4.000000e+00, !dbg !5047\n %911 = load double, double* %\"'de145\", align 8, !dbg !5047\n %912 = fadd fast double %911, %910, !dbg !5047\n store double %912, double* %\"'de145\", align 8, !dbg !5047\n %913 = load double, double* %\"'de152\", align 8, !dbg !5047\n store double 0.000000e+00, double* %\"'de152\", align 8, !dbg !5047\n %914 = fmul fast double %913, 4.000000e+00, !dbg !5047\n %915 = load double, double* %\"'de143\", align 8, !dbg !5047\n %916 = fadd fast double %915, %914, !dbg !5047\n store double %916, double* %\"'de143\", align 8, !dbg !5047\n %917 = load double, double* %\"'de137\", align 8, !dbg !5046\n store double 0.000000e+00, double* %\"'de137\", align 8, !dbg !5046\n %918 = load double, double* %\"'de155\", align 8, !dbg !5046\n %919 = fadd fast double %918, %917, !dbg !5046\n store double %919, double* %\"'de155\", align 8, !dbg !5046\n %920 = load double, double* %\"'de155\", align 8, !dbg !5046\n %921 = fadd fast double %920, %917, !dbg !5046\n store double %921, double* %\"'de155\", align 8, !dbg !5046\n %922 = load double, double* %\"'de155\", align 8, !dbg !5042\n store double 0.000000e+00, double* %\"'de155\", align 8, !dbg !5042\n %923 = fmul fast double %922, %163, !dbg !5042\n %924 = load double, double* %\"'de29\", align 8, !dbg !5042\n %925 = fadd fast double %924, %923, !dbg !5042\n store double %925, double* %\"'de29\", align 8, !dbg !5042\n %926 = fmul fast double %922, %162, !dbg !5042\n %927 = load double, double* %\"'de28\", align 8, !dbg !5042\n %928 = fadd fast double %927, %926, !dbg !5042\n store double %928, double* %\"'de28\", align 8, !dbg !5042\n %929 = load double, double* %\"'de139\", align 8, !dbg !5045\n store double 0.000000e+00, double* %\"'de139\", align 8, !dbg !5045\n %930 = load double, double* %\"'de156\", align 8, !dbg !5045\n %931 = fadd fast double %930, %929, !dbg !5045\n store double %931, double* %\"'de156\", align 8, !dbg !5045\n %932 = fneg fast double %929, !dbg !5045\n %933 = load double, double* %\"'de157\", align 8, !dbg !5045\n %934 = fadd fast double %933, %932, !dbg !5045\n store double %934, double* %\"'de157\", align 8, !dbg !5045\n %935 = load double, double* %\"'de157\", align 8, !dbg !5042\n store double 0.000000e+00, double* %\"'de157\", align 8, !dbg !5042\n %936 = fmul fast double %935, %163, !dbg !5042\n %937 = load double, double* %\"'de28\", align 8, !dbg !5042\n %938 = fadd fast double %937, %936, !dbg !5042\n store double %938, double* %\"'de28\", align 8, !dbg !5042\n %939 = fmul fast double %935, %163, !dbg !5042\n %940 = load double, double* %\"'de28\", align 8, !dbg !5042\n %941 = fadd fast double %940, %939, !dbg !5042\n store double %941, double* %\"'de28\", align 8, !dbg !5042\n %942 = load double, double* %\"'de156\", align 8, !dbg !5042\n store double 0.000000e+00, double* %\"'de156\", align 8, !dbg !5042\n %943 = fmul fast double %942, %162, !dbg !5042\n %944 = load double, double* %\"'de29\", align 8, !dbg !5042\n %945 = fadd fast double %944, %943, !dbg !5042\n store double %945, double* %\"'de29\", align 8, !dbg !5042\n %946 = fmul fast double %942, %162, !dbg !5042\n %947 = load double, double* %\"'de29\", align 8, !dbg !5042\n %948 = fadd fast double %947, %946, !dbg !5042\n store double %948, double* %\"'de29\", align 8, !dbg !5042\n %949 = load double, double* %\"'ipg158\", align 8, !dbg !5036, !tbaa !1201, !alias.scope !5081, !noalias !5082\n store double 0.000000e+00, double* %\"'ipg158\", align 8, !dbg !5036, !tbaa !1201, !alias.scope !5081, !noalias !5082\n %950 = load double, double* %\"'de145\", align 8, !dbg !5036\n %951 = fadd fast double %950, %949, !dbg !5036\n store double %951, double* %\"'de145\", align 8, !dbg !5036\n %952 = load double, double* %\"'ipg159\", align 8, !dbg !5036, !tbaa !1201, !alias.scope !5081, !noalias !5082\n store double 0.000000e+00, double* %\"'ipg159\", align 8, !dbg !5036, !tbaa !1201, !alias.scope !5081, !noalias !5082\n %953 = load double, double* %\"'de143\", align 8, !dbg !5036\n %954 = fadd fast double %953, %952, !dbg !5036\n store double %954, double* %\"'de143\", align 8, !dbg !5036\n %955 = load double, double* %\"'de145\", align 8, !dbg !5034\n store double 0.000000e+00, double* %\"'de145\", align 8, !dbg !5034\n %956 = load double, double* %\"'de160\", align 8, !dbg !5034\n %957 = fadd fast double %956, %955, !dbg !5034\n store double %957, double* %\"'de160\", align 8, !dbg !5034\n %958 = fneg fast double %955, !dbg !5034\n %959 = load double, double* %\"'de161\", align 8, !dbg !5034\n %960 = fadd fast double %959, %958, !dbg !5034\n store double %960, double* %\"'de161\", align 8, !dbg !5034\n %961 = load double, double* %\"'de143\", align 8, !dbg !5034\n store double 0.000000e+00, double* %\"'de143\", align 8, !dbg !5034\n %962 = load double, double* %\"'de162\", align 8, !dbg !5034\n %963 = fadd fast double %962, %961, !dbg !5034\n store double %963, double* %\"'de162\", align 8, !dbg !5034\n %964 = fneg fast double %961, !dbg !5034\n %965 = load double, double* %\"'de163\", align 8, !dbg !5034\n %966 = fadd fast double %965, %964, !dbg !5034\n store double %966, double* %\"'de163\", align 8, !dbg !5034\n %967 = load double, double* %\"'de161\", align 8, !dbg !5030\n store double 0.000000e+00, double* %\"'de161\", align 8, !dbg !5030\n %968 = fmul fast double %967, 3.000000e+00, !dbg !5030\n %969 = load double, double* %\"'de164\", align 8, !dbg !5030\n %970 = fadd fast double %969, %968, !dbg !5030\n store double %970, double* %\"'de164\", align 8, !dbg !5030\n %971 = load double, double* %\"'de163\", align 8, !dbg !5030\n store double 0.000000e+00, double* %\"'de163\", align 8, !dbg !5030\n %972 = fmul fast double %971, 3.000000e+00, !dbg !5030\n %973 = load double, double* %\"'de165\", align 8, !dbg !5030\n %974 = fadd fast double %973, %972, !dbg !5030\n store double %974, double* %\"'de165\", align 8, !dbg !5030\n %975 = load double, double* %\"'de28\", align 8, !dbg !5028\n store double 0.000000e+00, double* %\"'de28\", align 8, !dbg !5028\n %976 = load double, double* %\"'de166\", align 8, !dbg !5028\n %977 = fadd fast double %976, %975, !dbg !5028\n store double %977, double* %\"'de166\", align 8, !dbg !5028\n %978 = load double, double* %\"'de167\", align 8, !dbg !5028\n %979 = fadd fast double %978, %975, !dbg !5028\n store double %979, double* %\"'de167\", align 8, !dbg !5028\n %980 = load double, double* %\"'de29\", align 8, !dbg !5028\n store double 0.000000e+00, double* %\"'de29\", align 8, !dbg !5028\n %981 = load double, double* %\"'de168\", align 8, !dbg !5028\n %982 = fadd fast double %981, %980, !dbg !5028\n store double %982, double* %\"'de168\", align 8, !dbg !5028\n %983 = load double, double* %\"'de169\", align 8, !dbg !5028\n %984 = fadd fast double %983, %980, !dbg !5028\n store double %984, double* %\"'de169\", align 8, !dbg !5028\n %985 = load double, double* %\"'de167\", align 8, !dbg !5025\n store double 0.000000e+00, double* %\"'de167\", align 8, !dbg !5025\n %986 = fmul fast double %985, 2.700000e+01, !dbg !5025\n %987 = load double, double* %\"'de170\", align 8, !dbg !5025\n %988 = fadd fast double %987, %986, !dbg !5025\n store double %988, double* %\"'de170\", align 8, !dbg !5025\n %989 = load double, double* %\"'de169\", align 8, !dbg !5025\n store double 0.000000e+00, double* %\"'de169\", align 8, !dbg !5025\n %990 = fmul fast double %989, 2.700000e+01, !dbg !5025\n %991 = load double, double* %\"'de171\", align 8, !dbg !5025\n %992 = fadd fast double %991, %990, !dbg !5025\n store double %992, double* %\"'de171\", align 8, !dbg !5025\n %993 = load double, double* %\"'de166\", align 8, !dbg !5023\n store double 0.000000e+00, double* %\"'de166\", align 8, !dbg !5023\n %994 = load double, double* %\"'de172\", align 8, !dbg !5023\n %995 = fadd fast double %994, %993, !dbg !5023\n store double %995, double* %\"'de172\", align 8, !dbg !5023\n %996 = fneg fast double %993, !dbg !5023\n %997 = load double, double* %\"'de173\", align 8, !dbg !5023\n %998 = fadd fast double %997, %996, !dbg !5023\n store double %998, double* %\"'de173\", align 8, !dbg !5023\n %999 = load double, double* %\"'de168\", align 8, !dbg !5023\n store double 0.000000e+00, double* %\"'de168\", align 8, !dbg !5023\n %1000 = load double, double* %\"'de174\", align 8, !dbg !5023\n %1001 = fadd fast double %1000, %999, !dbg !5023\n store double %1001, double* %\"'de174\", align 8, !dbg !5023\n %1002 = fneg fast double %999, !dbg !5023\n %1003 = load double, double* %\"'de175\", align 8, !dbg !5023\n %1004 = fadd fast double %1003, %1002, !dbg !5023\n store double %1004, double* %\"'de175\", align 8, !dbg !5023\n %1005 = load double, double* %\"'de173\", align 8, !dbg !5022\n store double 0.000000e+00, double* %\"'de173\", align 8, !dbg !5022\n %1006 = load double, double* %\"'de176\", align 8, !dbg !5022\n %1007 = fadd fast double %1006, %1005, !dbg !5022\n store double %1007, double* %\"'de176\", align 8, !dbg !5022\n %1008 = load double, double* %\"'de177\", align 8, !dbg !5022\n %1009 = fadd fast double %1008, %1005, !dbg !5022\n store double %1009, double* %\"'de177\", align 8, !dbg !5022\n %1010 = load double, double* %\"'de177\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de177\", align 8, !dbg !5019\n %1011 = fmul fast double %1010, %129, !dbg !5019\n %1012 = load double, double* %\"'de178\", align 8, !dbg !5019\n %1013 = fadd fast double %1012, %1011, !dbg !5019\n store double %1013, double* %\"'de178\", align 8, !dbg !5019\n %1014 = fmul fast double %1010, %151, !dbg !5019\n %1015 = load double, double* %\"'de165\", align 8, !dbg !5019\n %1016 = fadd fast double %1015, %1014, !dbg !5019\n store double %1016, double* %\"'de165\", align 8, !dbg !5019\n %1017 = load double, double* %\"'de176\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de176\", align 8, !dbg !5019\n %1018 = fmul fast double %1017, %126, !dbg !5019\n %1019 = load double, double* %\"'de179\", align 8, !dbg !5019\n %1020 = fadd fast double %1019, %1018, !dbg !5019\n store double %1020, double* %\"'de179\", align 8, !dbg !5019\n %1021 = fmul fast double %1017, %150, !dbg !5019\n %1022 = load double, double* %\"'de164\", align 8, !dbg !5019\n %1023 = fadd fast double %1022, %1021, !dbg !5019\n store double %1023, double* %\"'de164\", align 8, !dbg !5019\n %1024 = load double, double* %\"'de175\", align 8, !dbg !5021\n store double 0.000000e+00, double* %\"'de175\", align 8, !dbg !5021\n %1025 = load double, double* %\"'de180\", align 8, !dbg !5021\n %1026 = fadd fast double %1025, %1024, !dbg !5021\n store double %1026, double* %\"'de180\", align 8, !dbg !5021\n %1027 = fneg fast double %1024, !dbg !5021\n %1028 = load double, double* %\"'de181\", align 8, !dbg !5021\n %1029 = fadd fast double %1028, %1027, !dbg !5021\n store double %1029, double* %\"'de181\", align 8, !dbg !5021\n %1030 = load double, double* %\"'de181\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de181\", align 8, !dbg !5019\n %1031 = fmul fast double %1030, %126, !dbg !5019\n %1032 = load double, double* %\"'de178\", align 8, !dbg !5019\n %1033 = fadd fast double %1032, %1031, !dbg !5019\n store double %1033, double* %\"'de178\", align 8, !dbg !5019\n %1034 = fmul fast double %1030, %151, !dbg !5019\n %1035 = load double, double* %\"'de164\", align 8, !dbg !5019\n %1036 = fadd fast double %1035, %1034, !dbg !5019\n store double %1036, double* %\"'de164\", align 8, !dbg !5019\n %1037 = load double, double* %\"'de180\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de180\", align 8, !dbg !5019\n %1038 = fmul fast double %1037, %129, !dbg !5019\n %1039 = load double, double* %\"'de179\", align 8, !dbg !5019\n %1040 = fadd fast double %1039, %1038, !dbg !5019\n store double %1040, double* %\"'de179\", align 8, !dbg !5019\n %1041 = fmul fast double %1037, %150, !dbg !5019\n %1042 = load double, double* %\"'de165\", align 8, !dbg !5019\n %1043 = fadd fast double %1042, %1041, !dbg !5019\n store double %1043, double* %\"'de165\", align 8, !dbg !5019\n %1044 = load double, double* %\"'de178\", align 8, !dbg !5014\n store double 0.000000e+00, double* %\"'de178\", align 8, !dbg !5014\n %1045 = fmul fast double %1044, 9.000000e+00, !dbg !5014\n %1046 = load double, double* %\"'de182\", align 8, !dbg !5014\n %1047 = fadd fast double %1046, %1045, !dbg !5014\n store double %1047, double* %\"'de182\", align 8, !dbg !5014\n %1048 = load double, double* %\"'de179\", align 8, !dbg !5014\n store double 0.000000e+00, double* %\"'de179\", align 8, !dbg !5014\n %1049 = fmul fast double %1048, 9.000000e+00, !dbg !5014\n %1050 = load double, double* %\"'de97\", align 8, !dbg !5014\n %1051 = fadd fast double %1050, %1049, !dbg !5014\n store double %1051, double* %\"'de97\", align 8, !dbg !5014\n %1052 = load double, double* %\"'de172\", align 8, !dbg !5022\n store double 0.000000e+00, double* %\"'de172\", align 8, !dbg !5022\n %1053 = load double, double* %\"'de183\", align 8, !dbg !5022\n %1054 = fadd fast double %1053, %1052, !dbg !5022\n store double %1054, double* %\"'de183\", align 8, !dbg !5022\n %1055 = load double, double* %\"'de184\", align 8, !dbg !5022\n %1056 = fadd fast double %1055, %1052, !dbg !5022\n store double %1056, double* %\"'de184\", align 8, !dbg !5022\n %1057 = load double, double* %\"'de184\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de184\", align 8, !dbg !5019\n %1058 = fmul fast double %1057, %139, !dbg !5019\n %1059 = load double, double* %\"'de185\", align 8, !dbg !5019\n %1060 = fadd fast double %1059, %1058, !dbg !5019\n store double %1060, double* %\"'de185\", align 8, !dbg !5019\n %1061 = fmul fast double %1057, %143, !dbg !5019\n %1062 = load double, double* %\"'de162\", align 8, !dbg !5019\n %1063 = fadd fast double %1062, %1061, !dbg !5019\n store double %1063, double* %\"'de162\", align 8, !dbg !5019\n %1064 = load double, double* %\"'de183\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de183\", align 8, !dbg !5019\n %1065 = fmul fast double %1064, %141, !dbg !5019\n %1066 = load double, double* %\"'de186\", align 8, !dbg !5019\n %1067 = fadd fast double %1066, %1065, !dbg !5019\n store double %1067, double* %\"'de186\", align 8, !dbg !5019\n %1068 = fmul fast double %1064, %142, !dbg !5019\n %1069 = load double, double* %\"'de160\", align 8, !dbg !5019\n %1070 = fadd fast double %1069, %1068, !dbg !5019\n store double %1070, double* %\"'de160\", align 8, !dbg !5019\n %1071 = load double, double* %\"'de174\", align 8, !dbg !5021\n store double 0.000000e+00, double* %\"'de174\", align 8, !dbg !5021\n %1072 = load double, double* %\"'de187\", align 8, !dbg !5021\n %1073 = fadd fast double %1072, %1071, !dbg !5021\n store double %1073, double* %\"'de187\", align 8, !dbg !5021\n %1074 = fneg fast double %1071, !dbg !5021\n %1075 = load double, double* %\"'de188\", align 8, !dbg !5021\n %1076 = fadd fast double %1075, %1074, !dbg !5021\n store double %1076, double* %\"'de188\", align 8, !dbg !5021\n %1077 = load double, double* %\"'de188\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de188\", align 8, !dbg !5019\n %1078 = fmul fast double %1077, %141, !dbg !5019\n %1079 = load double, double* %\"'de185\", align 8, !dbg !5019\n %1080 = fadd fast double %1079, %1078, !dbg !5019\n store double %1080, double* %\"'de185\", align 8, !dbg !5019\n %1081 = fmul fast double %1077, %143, !dbg !5019\n %1082 = load double, double* %\"'de160\", align 8, !dbg !5019\n %1083 = fadd fast double %1082, %1081, !dbg !5019\n store double %1083, double* %\"'de160\", align 8, !dbg !5019\n %1084 = load double, double* %\"'de187\", align 8, !dbg !5019\n store double 0.000000e+00, double* %\"'de187\", align 8, !dbg !5019\n %1085 = fmul fast double %1084, %139, !dbg !5019\n %1086 = load double, double* %\"'de186\", align 8, !dbg !5019\n %1087 = fadd fast double %1086, %1085, !dbg !5019\n store double %1087, double* %\"'de186\", align 8, !dbg !5019\n %1088 = fmul fast double %1084, %142, !dbg !5019\n %1089 = load double, double* %\"'de162\", align 8, !dbg !5019\n %1090 = fadd fast double %1089, %1088, !dbg !5019\n store double %1090, double* %\"'de162\", align 8, !dbg !5019\n %1091 = load double, double* %\"'de185\", align 8, !dbg !5014\n store double 0.000000e+00, double* %\"'de185\", align 8, !dbg !5014\n %1092 = fmul fast double %1091, 2.000000e+00, !dbg !5014\n %1093 = load double, double* %\"'de182\", align 8, !dbg !5014\n %1094 = fadd fast double %1093, %1092, !dbg !5014\n store double %1094, double* %\"'de182\", align 8, !dbg !5014\n %1095 = load double, double* %\"'de186\", align 8, !dbg !5014\n store double 0.000000e+00, double* %\"'de186\", align 8, !dbg !5014\n %1096 = fmul fast double %1095, 2.000000e+00, !dbg !5014\n %1097 = load double, double* %\"'de97\", align 8, !dbg !5014\n %1098 = fadd fast double %1097, %1096, !dbg !5014\n store double %1098, double* %\"'de97\", align 8, !dbg !5014\n %1099 = load double, double* %\"'de160\", align 8, !dbg !5013\n store double 0.000000e+00, double* %\"'de160\", align 8, !dbg !5013\n %1100 = load double, double* %\"'de189\", align 8, !dbg !5013\n %1101 = fadd fast double %1100, %1099, !dbg !5013\n store double %1101, double* %\"'de189\", align 8, !dbg !5013\n %1102 = load double, double* %\"'de189\", align 8, !dbg !5013\n %1103 = fadd fast double %1102, %1099, !dbg !5013\n store double %1103, double* %\"'de189\", align 8, !dbg !5013\n %1104 = load double, double* %\"'de189\", align 8, !dbg !5009\n store double 0.000000e+00, double* %\"'de189\", align 8, !dbg !5009\n %1105 = fmul fast double %1104, %123, !dbg !5009\n %1106 = load double, double* %\"'de97\", align 8, !dbg !5009\n %1107 = fadd fast double %1106, %1105, !dbg !5009\n store double %1107, double* %\"'de97\", align 8, !dbg !5009\n %1108 = fmul fast double %1104, %120, !dbg !5009\n %1109 = load double, double* %\"'de182\", align 8, !dbg !5009\n %1110 = fadd fast double %1109, %1108, !dbg !5009\n store double %1110, double* %\"'de182\", align 8, !dbg !5009\n %1111 = load double, double* %\"'de162\", align 8, !dbg !5012\n store double 0.000000e+00, double* %\"'de162\", align 8, !dbg !5012\n %1112 = load double, double* %\"'de190\", align 8, !dbg !5012\n %1113 = fadd fast double %1112, %1111, !dbg !5012\n store double %1113, double* %\"'de190\", align 8, !dbg !5012\n %1114 = fneg fast double %1111, !dbg !5012\n %1115 = load double, double* %\"'de191\", align 8, !dbg !5012\n %1116 = fadd fast double %1115, %1114, !dbg !5012\n store double %1116, double* %\"'de191\", align 8, !dbg !5012\n %1117 = load double, double* %\"'de191\", align 8, !dbg !5009\n store double 0.000000e+00, double* %\"'de191\", align 8, !dbg !5009\n %1118 = fmul fast double %1117, %123, !dbg !5009\n %1119 = load double, double* %\"'de182\", align 8, !dbg !5009\n %1120 = fadd fast double %1119, %1118, !dbg !5009\n store double %1120, double* %\"'de182\", align 8, !dbg !5009\n %1121 = fmul fast double %1117, %123, !dbg !5009\n %1122 = load double, double* %\"'de182\", align 8, !dbg !5009\n %1123 = fadd fast double %1122, %1121, !dbg !5009\n store double %1123, double* %\"'de182\", align 8, !dbg !5009\n %1124 = load double, double* %\"'de190\", align 8, !dbg !5009\n store double 0.000000e+00, double* %\"'de190\", align 8, !dbg !5009\n %1125 = fmul fast double %1124, %120, !dbg !5009\n %1126 = load double, double* %\"'de97\", align 8, !dbg !5009\n %1127 = fadd fast double %1126, %1125, !dbg !5009\n store double %1127, double* %\"'de97\", align 8, !dbg !5009\n %1128 = fmul fast double %1124, %120, !dbg !5009\n %1129 = load double, double* %\"'de97\", align 8, !dbg !5009\n %1130 = fadd fast double %1129, %1128, !dbg !5009\n store double %1130, double* %\"'de97\", align 8, !dbg !5009\n %1131 = load double, double* %\"'de170\", align 8, !dbg !5008\n store double 0.000000e+00, double* %\"'de170\", align 8, !dbg !5008\n %1132 = load double, double* %\"'de192\", align 8, !dbg !5008\n %1133 = fadd fast double %1132, %1131, !dbg !5008\n store double %1133, double* %\"'de192\", align 8, !dbg !5008\n %1134 = fneg fast double %1131, !dbg !5008\n %1135 = load double, double* %\"'de193\", align 8, !dbg !5008\n %1136 = fadd fast double %1135, %1134, !dbg !5008\n store double %1136, double* %\"'de193\", align 8, !dbg !5008\n %1137 = load double, double* %\"'de193\", align 8, !dbg !5008\n store double 0.000000e+00, double* %\"'de193\", align 8, !dbg !5008\n %1138 = fmul fast double %1137, %arrayref37.sroa.0.0.copyload, !dbg !5008\n %1139 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !5008\n %1140 = fadd fast double %1139, %1138, !dbg !5008\n store double %1140, double* %\".fca.1.extract251'de\", align 8, !dbg !5008\n %1141 = fmul fast double %1137, %.fca.1.extract251, !dbg !5008\n %1142 = load double, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5008\n %1143 = fadd fast double %1142, %1141, !dbg !5008\n store double %1143, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5008\n %1144 = load double, double* %\"'de192\", align 8, !dbg !5007\n store double 0.000000e+00, double* %\"'de192\", align 8, !dbg !5007\n %1145 = fmul fast double %1144, %130, !dbg !5007\n %1146 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !5007\n %1147 = fadd fast double %1146, %1145, !dbg !5007\n store double %1147, double* %\".fca.0.extract250'de\", align 8, !dbg !5007\n %1148 = fmul fast double %1144, %.fca.0.extract250, !dbg !5007\n %1149 = load double, double* %\"'de194\", align 8, !dbg !5007\n %1150 = fadd fast double %1149, %1148, !dbg !5007\n store double %1150, double* %\"'de194\", align 8, !dbg !5007\n %1151 = load double, double* %\"'de171\", align 8, !dbg !5005\n store double 0.000000e+00, double* %\"'de171\", align 8, !dbg !5005\n %1152 = load double, double* %\"'de195\", align 8, !dbg !5005\n %1153 = fadd fast double %1152, %1151, !dbg !5005\n store double %1153, double* %\"'de195\", align 8, !dbg !5005\n %1154 = fneg fast double %1151, !dbg !5005\n %1155 = load double, double* %\"'de196\", align 8, !dbg !5005\n %1156 = fadd fast double %1155, %1154, !dbg !5005\n store double %1156, double* %\"'de196\", align 8, !dbg !5005\n %1157 = load double, double* %\"'de196\", align 8, !dbg !5005\n store double 0.000000e+00, double* %\"'de196\", align 8, !dbg !5005\n %1158 = fmul fast double %1157, %arrayref37.sroa.0.0.copyload, !dbg !5005\n %1159 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !5005\n %1160 = fadd fast double %1159, %1158, !dbg !5005\n store double %1160, double* %\".fca.0.extract250'de\", align 8, !dbg !5005\n %1161 = fmul fast double %1157, %.fca.0.extract250, !dbg !5005\n %1162 = load double, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5005\n %1163 = fadd fast double %1162, %1161, !dbg !5005\n store double %1163, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5005\n %1164 = load double, double* %\"'de195\", align 8, !dbg !5005\n store double 0.000000e+00, double* %\"'de195\", align 8, !dbg !5005\n %1165 = fmul fast double %1164, %arrayref37.sroa.2.0.copyload, !dbg !5005\n %1166 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !5005\n %1167 = fadd fast double %1166, %1165, !dbg !5005\n store double %1167, double* %\".fca.1.extract251'de\", align 8, !dbg !5005\n %1168 = fmul fast double %1164, %.fca.1.extract251, !dbg !5005\n %1169 = load double, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5005\n %1170 = fadd fast double %1169, %1168, !dbg !5005\n store double %1170, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5005\n %1171 = load double, double* %\"'de194\", align 8, !dbg !5003\n store double 0.000000e+00, double* %\"'de194\", align 8, !dbg !5003\n %1172 = fneg fast double %1171, !dbg !5003\n %1173 = load double, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5003\n %1174 = fadd fast double %1173, %1172, !dbg !5003\n store double %1174, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5003\n %1175 = load double, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5001\n store double 0.000000e+00, double* %\"arrayref37.sroa.2.0.copyload'de\", align 8, !dbg !5001\n %1176 = icmp ne double addrspace(13)* %arrayref37.sroa.2.0..sroa_idx247, %\"arrayref37.sroa.2.0..sroa_idx247'ipg\", !dbg !5001\n br i1 %1176, label %invertidxend_active, label %invertidxend_amerge, !dbg !5001\n\ninvertidxend_active: ; preds = %invertidxend\n %1177 = load double, double addrspace(13)* %\"arrayref37.sroa.2.0..sroa_idx247'ipg\", align 1, !dbg !5001, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1178 = fadd fast double %1177, %1175, !dbg !5001\n store double %1178, double addrspace(13)* %\"arrayref37.sroa.2.0..sroa_idx247'ipg\", align 1, !dbg !5001, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge, !dbg !5001\n\ninvertidxend_amerge: ; preds = %invertidxend_active, %invertidxend\n %1179 = load double, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5001\n store double 0.000000e+00, double* %\"arrayref37.sroa.0.0.copyload'de\", align 8, !dbg !5001\n %1180 = icmp ne double addrspace(13)* %arrayref37.sroa.0.0..sroa_idx, %\"arrayref37.sroa.0.0..sroa_idx'ipg\", !dbg !5001\n br i1 %1180, label %invertidxend_amerge_active, label %invertidxend_amerge_amerge, !dbg !5001\n\ninvertidxend_amerge_active: ; preds = %invertidxend_amerge\n %1181 = load double, double addrspace(13)* %\"arrayref37.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !5001, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1182 = fadd fast double %1181, %1179, !dbg !5001\n store double %1182, double addrspace(13)* %\"arrayref37.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !5001, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge, !dbg !5001\n\ninvertidxend_amerge_amerge: ; preds = %invertidxend_amerge_active, %invertidxend_amerge\n %1183 = load double, double* %\"'de165\", align 8, !dbg !5000\n store double 0.000000e+00, double* %\"'de165\", align 8, !dbg !5000\n %1184 = load double, double* %\"'de197\", align 8, !dbg !5000\n %1185 = fadd fast double %1184, %1183, !dbg !5000\n store double %1185, double* %\"'de197\", align 8, !dbg !5000\n %1186 = fneg fast double %1183, !dbg !5000\n %1187 = load double, double* %\"'de198\", align 8, !dbg !5000\n %1188 = fadd fast double %1187, %1186, !dbg !5000\n store double %1188, double* %\"'de198\", align 8, !dbg !5000\n %1189 = load double, double* %\"'de198\", align 8, !dbg !4997\n store double 0.000000e+00, double* %\"'de198\", align 8, !dbg !4997\n %1190 = fmul fast double %1189, %arrayref24.sroa.3.0.copyload, !dbg !4997\n %1191 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !4997\n %1192 = fadd fast double %1191, %1190, !dbg !4997\n store double %1192, double* %\".fca.1.extract251'de\", align 8, !dbg !4997\n %1193 = fmul fast double %1189, %.fca.1.extract251, !dbg !4997\n %1194 = load double, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4997\n %1195 = fadd fast double %1194, %1193, !dbg !4997\n store double %1195, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4997\n %1196 = load double, double* %\"'de197\", align 8, !dbg !4997\n store double 0.000000e+00, double* %\"'de197\", align 8, !dbg !4997\n %1197 = fmul fast double %1196, %arrayref24.sroa.0.0.copyload, !dbg !4997\n %1198 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !4997\n %1199 = fadd fast double %1198, %1197, !dbg !4997\n store double %1199, double* %\".fca.0.extract250'de\", align 8, !dbg !4997\n %1200 = fmul fast double %1196, %.fca.0.extract250, !dbg !4997\n %1201 = load double, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4997\n %1202 = fadd fast double %1201, %1200, !dbg !4997\n store double %1202, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4997\n %1203 = load double, double* %\"'de164\", align 8, !dbg !4999\n store double 0.000000e+00, double* %\"'de164\", align 8, !dbg !4999\n %1204 = load double, double* %\"'de199\", align 8, !dbg !4999\n %1205 = fadd fast double %1204, %1203, !dbg !4999\n store double %1205, double* %\"'de199\", align 8, !dbg !4999\n %1206 = load double, double* %\"'de200\", align 8, !dbg !4999\n %1207 = fadd fast double %1206, %1203, !dbg !4999\n store double %1207, double* %\"'de200\", align 8, !dbg !4999\n %1208 = load double, double* %\"'de200\", align 8, !dbg !4997\n store double 0.000000e+00, double* %\"'de200\", align 8, !dbg !4997\n %1209 = fmul fast double %1208, %arrayref24.sroa.3.0.copyload, !dbg !4997\n %1210 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !4997\n %1211 = fadd fast double %1210, %1209, !dbg !4997\n store double %1211, double* %\".fca.0.extract250'de\", align 8, !dbg !4997\n %1212 = fmul fast double %1208, %.fca.0.extract250, !dbg !4997\n %1213 = load double, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4997\n %1214 = fadd fast double %1213, %1212, !dbg !4997\n store double %1214, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4997\n %1215 = load double, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4995\n store double 0.000000e+00, double* %\"arrayref24.sroa.3.0.copyload'de\", align 8, !dbg !4995\n %1216 = icmp ne double addrspace(13)* %arrayref24.sroa.3.0..sroa_idx248, %\"arrayref24.sroa.3.0..sroa_idx248'ipg\", !dbg !4995\n br i1 %1216, label %invertidxend_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge, !dbg !4995\n\ninvertidxend_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge\n %1217 = load double, double addrspace(13)* %\"arrayref24.sroa.3.0..sroa_idx248'ipg\", align 1, !dbg !4995, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1218 = fadd fast double %1217, %1215, !dbg !4995\n store double %1218, double addrspace(13)* %\"arrayref24.sroa.3.0..sroa_idx248'ipg\", align 1, !dbg !4995, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge, !dbg !4995\n\ninvertidxend_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_active, %invertidxend_amerge_amerge\n %1219 = load double, double* %\"'de199\", align 8, !dbg !4997\n store double 0.000000e+00, double* %\"'de199\", align 8, !dbg !4997\n %1220 = fmul fast double %1219, %arrayref24.sroa.0.0.copyload, !dbg !4997\n %1221 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !4997\n %1222 = fadd fast double %1221, %1220, !dbg !4997\n store double %1222, double* %\".fca.1.extract251'de\", align 8, !dbg !4997\n %1223 = fmul fast double %1219, %.fca.1.extract251, !dbg !4997\n %1224 = load double, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4997\n %1225 = fadd fast double %1224, %1223, !dbg !4997\n store double %1225, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4997\n %1226 = load double, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4995\n store double 0.000000e+00, double* %\"arrayref24.sroa.0.0.copyload'de\", align 8, !dbg !4995\n %1227 = icmp ne double addrspace(13)* %arrayref24.sroa.0.0..sroa_idx, %\"arrayref24.sroa.0.0..sroa_idx'ipg\", !dbg !4995\n br i1 %1227, label %invertidxend_amerge_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge_amerge, !dbg !4995\n\ninvertidxend_amerge_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge_amerge\n %1228 = load double, double addrspace(13)* %\"arrayref24.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4995, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1229 = fadd fast double %1228, %1226, !dbg !4995\n store double %1229, double addrspace(13)* %\"arrayref24.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4995, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge_amerge, !dbg !4995\n\ninvertidxend_amerge_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_amerge_active, %invertidxend_amerge_amerge_amerge\n %1230 = load double, double* %\"'de182\", align 8, !dbg !4994\n store double 0.000000e+00, double* %\"'de182\", align 8, !dbg !4994\n %1231 = load double, double* %\"'de201\", align 8, !dbg !4994\n %1232 = fadd fast double %1231, %1230, !dbg !4994\n store double %1232, double* %\"'de201\", align 8, !dbg !4994\n %1233 = fneg fast double %1230, !dbg !4994\n %1234 = load double, double* %\"'de202\", align 8, !dbg !4994\n %1235 = fadd fast double %1234, %1233, !dbg !4994\n store double %1235, double* %\"'de202\", align 8, !dbg !4994\n %1236 = load double, double* %\"'de202\", align 8, !dbg !4994\n store double 0.000000e+00, double* %\"'de202\", align 8, !dbg !4994\n %1237 = fmul fast double %1236, %.fca.1.extract251, !dbg !4994\n %1238 = load double, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4994\n %1239 = fadd fast double %1238, %1237, !dbg !4994\n store double %1239, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4994\n %1240 = fmul fast double %1236, %arrayref13.sroa.0.0.copyload, !dbg !4994\n %1241 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !4994\n %1242 = fadd fast double %1241, %1240, !dbg !4994\n store double %1242, double* %\".fca.1.extract251'de\", align 8, !dbg !4994\n %1243 = load double, double* %\"'de201\", align 8, !dbg !4993\n store double 0.000000e+00, double* %\"'de201\", align 8, !dbg !4993\n %1244 = fmul fast double %1243, %117, !dbg !4993\n %1245 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !4993\n %1246 = fadd fast double %1245, %1244, !dbg !4993\n store double %1246, double* %\".fca.0.extract250'de\", align 8, !dbg !4993\n %1247 = fmul fast double %1243, %.fca.0.extract250, !dbg !4993\n %1248 = load double, double* %\"'de203\", align 8, !dbg !4993\n %1249 = fadd fast double %1248, %1247, !dbg !4993\n store double %1249, double* %\"'de203\", align 8, !dbg !4993\n %1250 = load double, double* %\"'de97\", align 8, !dbg !4991\n store double 0.000000e+00, double* %\"'de97\", align 8, !dbg !4991\n %1251 = load double, double* %\"'de204\", align 8, !dbg !4991\n %1252 = fadd fast double %1251, %1250, !dbg !4991\n store double %1252, double* %\"'de204\", align 8, !dbg !4991\n %1253 = fneg fast double %1250, !dbg !4991\n %1254 = load double, double* %\"'de205\", align 8, !dbg !4991\n %1255 = fadd fast double %1254, %1253, !dbg !4991\n store double %1255, double* %\"'de205\", align 8, !dbg !4991\n %1256 = load double, double* %\"'de205\", align 8, !dbg !4991\n store double 0.000000e+00, double* %\"'de205\", align 8, !dbg !4991\n %1257 = fmul fast double %1256, %.fca.0.extract250, !dbg !4991\n %1258 = load double, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4991\n %1259 = fadd fast double %1258, %1257, !dbg !4991\n store double %1259, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4991\n %1260 = fmul fast double %1256, %arrayref13.sroa.0.0.copyload, !dbg !4991\n %1261 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !4991\n %1262 = fadd fast double %1261, %1260, !dbg !4991\n store double %1262, double* %\".fca.0.extract250'de\", align 8, !dbg !4991\n %1263 = load double, double* %\"'de204\", align 8, !dbg !4991\n store double 0.000000e+00, double* %\"'de204\", align 8, !dbg !4991\n %1264 = fmul fast double %1263, %arrayref13.sroa.2.0.copyload, !dbg !4991\n %1265 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !4991\n %1266 = fadd fast double %1265, %1264, !dbg !4991\n store double %1266, double* %\".fca.1.extract251'de\", align 8, !dbg !4991\n %1267 = fmul fast double %1263, %.fca.1.extract251, !dbg !4991\n %1268 = load double, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4991\n %1269 = fadd fast double %1268, %1267, !dbg !4991\n store double %1269, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4991\n %1270 = load double, double* %\"'de203\", align 8, !dbg !4989\n store double 0.000000e+00, double* %\"'de203\", align 8, !dbg !4989\n %1271 = fneg fast double %1270, !dbg !4989\n %1272 = load double, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4989\n %1273 = fadd fast double %1272, %1271, !dbg !4989\n store double %1273, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4989\n %1274 = load double, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4987\n store double 0.000000e+00, double* %\"arrayref13.sroa.2.0.copyload'de\", align 8, !dbg !4987\n %1275 = icmp ne double addrspace(13)* %arrayref13.sroa.2.0..sroa_idx249, %\"arrayref13.sroa.2.0..sroa_idx249'ipg\", !dbg !4987\n br i1 %1275, label %invertidxend_amerge_amerge_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge_amerge_amerge, !dbg !4987\n\ninvertidxend_amerge_amerge_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge_amerge_amerge\n %1276 = load double, double addrspace(13)* %\"arrayref13.sroa.2.0..sroa_idx249'ipg\", align 1, !dbg !4987, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1277 = fadd fast double %1276, %1274, !dbg !4987\n store double %1277, double addrspace(13)* %\"arrayref13.sroa.2.0..sroa_idx249'ipg\", align 1, !dbg !4987, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge_amerge_amerge, !dbg !4987\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_amerge_amerge_active, %invertidxend_amerge_amerge_amerge_amerge\n %1278 = load double, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4987\n store double 0.000000e+00, double* %\"arrayref13.sroa.0.0.copyload'de\", align 8, !dbg !4987\n %1279 = icmp ne double addrspace(13)* %arrayref13.sroa.0.0..sroa_idx, %\"arrayref13.sroa.0.0..sroa_idx'ipg\", !dbg !4987\n br i1 %1279, label %invertidxend_amerge_amerge_amerge_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4987\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge\n %1280 = load double, double addrspace(13)* %\"arrayref13.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4987, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1281 = fadd fast double %1280, %1278, !dbg !4987\n store double %1281, double addrspace(13)* %\"arrayref13.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4987, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4987\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_active, %invertidxend_amerge_amerge_amerge_amerge_amerge\n %1282 = load double, double* %\".fca.1.extract251'de\", align 8, !dbg !4986\n %1283 = getelementptr inbounds [2 x double], [2 x double]* %\"'de206\", i32 0, i32 1, !dbg !4986\n %1284 = load double, double* %1283, align 8, !dbg !4986\n %1285 = fadd fast double %1284, %1282, !dbg !4986\n store double %1285, double* %1283, align 8, !dbg !4986\n store double 0.000000e+00, double* %\".fca.1.extract251'de\", align 8, !dbg !4986\n %1286 = load double, double* %\".fca.0.extract250'de\", align 8, !dbg !4986\n %1287 = getelementptr inbounds [2 x double], [2 x double]* %\"'de206\", i32 0, i32 0, !dbg !4986\n %1288 = load double, double* %1287, align 8, !dbg !4986\n %1289 = fadd fast double %1288, %1286, !dbg !4986\n store double %1289, double* %1287, align 8, !dbg !4986\n store double 0.000000e+00, double* %\".fca.0.extract250'de\", align 8, !dbg !4986\n %1290 = load [2 x double], [2 x double]* %\"'de206\", align 8, !dbg !4986\n store [2 x double] zeroinitializer, [2 x double]* %\"'de206\", align 8, !dbg !4986\n %re207 = extractvalue [2 x double] %1290, 0, !dbg !4986\n %im208 = extractvalue [2 x double] %1290, 1, !dbg !4986\n %1291 = fneg fast double %im208, !dbg !4986\n %1292 = insertvalue [2 x double] undef, double %re207, 0, !dbg !4986\n %1293 = insertvalue [2 x double] %1292, double %1291, 1, !dbg !4986\n %1294 = fneg fast double %re207, !dbg !4986\n %1295 = fneg fast double %1291, !dbg !4986\n %1296 = insertvalue [2 x double] undef, double %1294, 0, !dbg !4986\n %1297 = insertvalue [2 x double] %1296, double %1295, 1, !dbg !4986\n %1298 = fmul fast double %arrayref.sroa.0.0.copyload_replacementA, %arrayref.sroa.0.0.copyload_replacementA, !dbg !4986\n %1299 = fmul fast double %arrayref.sroa.2.0.copyload_replacementA, %arrayref.sroa.2.0.copyload_replacementA, !dbg !4986\n %1300 = fsub fast double %1298, %1299, !dbg !4986\n %1301 = fmul fast double %arrayref.sroa.0.0.copyload_replacementA, %arrayref.sroa.2.0.copyload_replacementA, !dbg !4986\n %1302 = fmul fast double %arrayref.sroa.0.0.copyload_replacementA, %arrayref.sroa.2.0.copyload_replacementA, !dbg !4986\n %1303 = fadd fast double %1301, %1302, !dbg !4986\n %1304 = insertvalue [2 x double] undef, double %1300, 0, !dbg !4986\n %1305 = insertvalue [2 x double] %1304, double %1303, 1, !dbg !4986\n %1306 = fmul fast double %1294, %1300, !dbg !4986\n %1307 = fmul fast double %1295, %1303, !dbg !4986\n %1308 = fadd fast double %1306, %1307, !dbg !4986\n %1309 = fmul fast double %1300, %1300, !dbg !4986\n %1310 = fmul fast double %1303, %1303, !dbg !4986\n %1311 = fadd fast double %1309, %1310, !dbg !4986\n %1312 = fdiv fast double %1308, %1311, !dbg !4986\n %1313 = fmul fast double %1300, %1295, !dbg !4986\n %1314 = fmul fast double %1294, %1303, !dbg !4986\n %1315 = fsub fast double %1313, %1314, !dbg !4986\n %1316 = fdiv fast double %1315, %1311, !dbg !4986\n %1317 = insertvalue [2 x double] undef, double %1312, 0, !dbg !4986\n %1318 = insertvalue [2 x double] %1317, double %1316, 1, !dbg !4986\n %1319 = fneg fast double %1316, !dbg !4986\n %1320 = insertvalue [2 x double] undef, double %1312, 0, !dbg !4986\n %1321 = insertvalue [2 x double] %1320, double %1319, 1, !dbg !4986\n %1322 = load [2 x double], [2 x double]* %\".fca.1.insert255'de\", align 8, !dbg !4986\n %1323 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.1.insert255'de\", i32 0, i32 0, !dbg !4986\n %1324 = load double, double* %1323, align 8, !dbg !4986\n %1325 = fadd fast double %1324, %1312, !dbg !4986\n store double %1325, double* %1323, align 8, !dbg !4986\n %1326 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.1.insert255'de\", i32 0, i32 1, !dbg !4986\n %1327 = load double, double* %1326, align 8, !dbg !4986\n %1328 = fadd fast double %1327, %1319, !dbg !4986\n store double %1328, double* %1326, align 8, !dbg !4986\n %1329 = load [2 x double], [2 x double]* %\".fca.1.insert255'de\", align 8, !dbg !4986\n %1330 = extractvalue [2 x double] %1329, 1, !dbg !4986\n %1331 = load double, double* %\"arrayref.sroa.2.0.copyload'de\", align 8, !dbg !4986\n %1332 = fadd fast double %1331, %1330, !dbg !4986\n store double %1332, double* %\"arrayref.sroa.2.0.copyload'de\", align 8, !dbg !4986\n %1333 = load [2 x double], [2 x double]* %\".fca.1.insert255'de\", align 8, !dbg !4986\n %1334 = insertvalue [2 x double] %1333, double 0.000000e+00, 1, !dbg !4986\n %1335 = extractvalue [2 x double] %1333, 0, !dbg !4986\n %1336 = getelementptr inbounds [2 x double], [2 x double]* %\".fca.0.insert254'de\", i32 0, i32 0, !dbg !4986\n %1337 = load double, double* %1336, align 8, !dbg !4986\n %1338 = fadd fast double %1337, %1335, !dbg !4986\n store double %1338, double* %1336, align 8, !dbg !4986\n store [2 x double] zeroinitializer, [2 x double]* %\".fca.1.insert255'de\", align 8, !dbg !4986\n %1339 = load [2 x double], [2 x double]* %\".fca.0.insert254'de\", align 8, !dbg !4986\n %1340 = extractvalue [2 x double] %1339, 0, !dbg !4986\n %1341 = load double, double* %\"arrayref.sroa.0.0.copyload'de\", align 8, !dbg !4986\n %1342 = fadd fast double %1341, %1340, !dbg !4986\n store double %1342, double* %\"arrayref.sroa.0.0.copyload'de\", align 8, !dbg !4986\n store [2 x double] zeroinitializer, [2 x double]* %\".fca.0.insert254'de\", align 8, !dbg !4986\n %1343 = load double, double* %\"arrayref.sroa.2.0.copyload'de\", align 8, !dbg !4821\n store double 0.000000e+00, double* %\"arrayref.sroa.2.0.copyload'de\", align 8, !dbg !4821\n %1344 = icmp ne double addrspace(13)* %arrayref.sroa.2.0..sroa_idx256, %\"arrayref.sroa.2.0..sroa_idx256'ipg\", !dbg !4821\n br i1 %1344, label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4821\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge\n %1345 = load double, double addrspace(13)* %\"arrayref.sroa.2.0..sroa_idx256'ipg\", align 1, !dbg !4821, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1346 = fadd fast double %1345, %1343, !dbg !4821\n store double %1346, double addrspace(13)* %\"arrayref.sroa.2.0..sroa_idx256'ipg\", align 1, !dbg !4821, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4821\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_active, %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge\n %1347 = load double, double* %\"arrayref.sroa.0.0.copyload'de\", align 8, !dbg !4821\n store double 0.000000e+00, double* %\"arrayref.sroa.0.0.copyload'de\", align 8, !dbg !4821\n %1348 = icmp ne double addrspace(13)* %arrayref.sroa.0.0..sroa_idx, %\"arrayref.sroa.0.0..sroa_idx'ipg\", !dbg !4821\n br i1 %1348, label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_active, label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4821\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_active: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge\n %1349 = load double, double addrspace(13)* %\"arrayref.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4821, !tbaa !1360, !alias.scope !5083, !noalias !5086\n %1350 = fadd fast double %1349, %1347, !dbg !4821\n store double %1350, double addrspace(13)* %\"arrayref.sroa.0.0..sroa_idx'ipg\", align 1, !dbg !4821, !tbaa !1360, !alias.scope !5083, !noalias !5086\n br label %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_amerge, !dbg !4821\n\ninvertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_amerge: ; preds = %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge_active, %invertidxend_amerge_amerge_amerge_amerge_amerge_amerge_amerge\n br label %inverttop\n\nstaging: ; preds = %invertcommon.ret\n br i1 %or.cond205_unwrap, label %invertL335, label %invertL327\n}\n\nLLVM.LoadInst(%arrayref.sroa.2.0.copyload = load double, double addrspace(13)* %arrayref.sroa.2.0..sroa_idx256, align 1, !dbg !44, !tbaa !213, !alias.scope !214, !noalias !215)\nLLVM.PHIInst(%arrayref.sroa.2.0.copyload_replacementA = phi double , !dbg !36)\n", "; Function Attrs: mustprogress willreturn\ndefine internal fastcc \"enzyme_type\"=\"{[-1]:Float@double}\" double @preprocess_julia_solve_cubic_eq_4262({} addrspace(10)* noundef nonnull align 16 dereferenceable(40) \"enzyme_type\"=\"{[-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}\" \"enzymejl_parmtype\"=\"4507947536\" \"enzymejl_parmtype_ref\"=\"2\" %0) unnamed_addr #42 !dbg !3196 {\ntop:\n %1 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %2 = bitcast i8* %1 to [2 x double]*, !enzyme_caststack !35\n %3 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %4 = bitcast i8* %3 to [2 x double]*, !enzyme_caststack !35\n %5 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %6 = bitcast i8* %5 to [2 x double]*, !enzyme_caststack !35\n %7 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %newstruct46 = bitcast i8* %7 to [2 x double]*, !enzyme_caststack !35\n %8 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %newstruct95 = bitcast i8* %8 to [2 x double]*, !enzyme_caststack !35\n %9 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %newstruct40 = bitcast i8* %9 to [2 x double]*, !enzyme_caststack !35\n %10 = call noalias nonnull dereferenceable(16) dereferenceable_or_null(16) i8* @malloc(i64 16), !enzyme_fromstack !3101\n %11 = bitcast i8* %10 to [2 x double]*, !enzyme_caststack !35\n %12 = call {}*** @julia.get_pgcstack() #47\n %ptls_field263 = getelementptr inbounds {}**, {}*** %12, i64 2\n %13 = bitcast {}*** %ptls_field263 to i64***\n %ptls_load264265 = load i64**, i64*** %13, align 8, !tbaa !36\n %14 = getelementptr inbounds i64*, i64** %ptls_load264265, i64 2\n %safepoint = load i64*, i64** %14, align 8, !tbaa !40\n fence syncscope(\"singlethread\") seq_cst\n call void @julia.safepoint(i64* %safepoint) #47, !dbg !3197\n fence syncscope(\"singlethread\") seq_cst\n %15 = addrspacecast {} addrspace(10)* %0 to { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)*, !dbg !3198\n %arraylen_ptr = getelementptr inbounds { i8 addrspace(13)*, i64, i16, i16, i32 }, { i8 addrspace(13)*, i64, i16, i16, i32 } addrspace(11)* %15, i64 0, i32 1, !dbg !3198\n %arraylen = load i64, i64 addrspace(11)* %arraylen_ptr, align 8, !dbg !3198, !tbaa !1441, !range !1444, !alias.scope !1445, !noalias !1446\n %inbounds = icmp ugt i64 %arraylen, 3, !dbg !3198\n br i1 %inbounds, label %idxend, label %oob, !dbg !3198\n\nL111: ; preds = %idxend\n %16 = fadd double %160, %.fca.0.extract244, !dbg !3200\n %17 = fadd double %161, %.fca.1.extract245, !dbg !3200\n %18 = fmul double %16, 5.000000e-01, !dbg !3203\n %19 = fmul double %17, 5.000000e-01, !dbg !3203\n %20 = getelementptr inbounds [2 x double], [2 x double]* %newstruct46, i64 0, i64 0, !dbg !3205\n store double %18, double* %20, align 8, !dbg !3205, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %21 = getelementptr inbounds [2 x double], [2 x double]* %newstruct46, i64 0, i64 1, !dbg !3205\n store double %19, double* %21, align 8, !dbg !3205, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %22 = addrspacecast [2 x double]* %newstruct46 to [2 x double] addrspace(11)*, !dbg !3202\n call fastcc void @julia_log_4285([2 x double]* noalias nocapture nofree noundef nonnull writeonly sret([2 x double]) align 8 dereferenceable(16) %4, [2 x double] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %22) #47, !dbg !3202\n %23 = getelementptr inbounds [2 x double], [2 x double]* %4, i64 0, i64 0, !dbg !3209\n %unbox47 = load double, double* %23, align 8, !dbg !3212, !tbaa !1201, !alias.scope !1203, !noalias !1204\n %24 = fmul double %unbox47, 0x3FD5555555555555, !dbg !3212\n %25 = getelementptr inbounds [2 x double], [2 x double]* %4, i64 0, i64 1, !dbg !3213\n %unbox48 = load double, double* %25, align 8, !dbg !3212, !tbaa !1201, !alias.scope !1203, !noalias !1204\n %26 = fmul double %unbox48, 0x3FD5555555555555, !dbg !3212\n %27 = fcmp ord double %24, 0.000000e+00, !dbg !3215\n br i1 %27, label %L134, label %L125, !dbg !3217\n\nL125: ; preds = %L111\n %28 = fcmp une double %26, 0.000000e+00, !dbg !3218\n %. = select i1 %28, double %24, double %26, !dbg !3221\n br label %L242\n\nL134: ; preds = %L111\n %29 = fsub double %26, %26, !dbg !3222\n %30 = fcmp ord double %29, 0.000000e+00, !dbg !3225\n br i1 %30, label %L151, label %L139, !dbg !3224\n\nL139: ; preds = %L134\n %31 = fcmp une double %24, 0x7FF0000000000000, !dbg !3227\n br i1 %31, label %L145, label %L242.thread, !dbg !3228\n\nL145: ; preds = %L139\n %32 = fcmp une double %24, 0xFFF0000000000000, !dbg !3229\n br i1 %32, label %L242.thread, label %L147, !dbg !3230\n\nL147: ; preds = %L145\n %33 = call double @llvm.copysign.f64(double noundef 0.000000e+00, double %26) #47, !dbg !3231\n br label %L242\n\nL151: ; preds = %L134\n %34 = call fastcc double @julia_exp_4278(double %24) #48, !dbg !3233\n %35 = fcmp une double %26, 0.000000e+00, !dbg !3234\n br i1 %35, label %L156, label %L242, !dbg !3236\n\nL156: ; preds = %L151\n %36 = call [2 x double] @julia_sincos_4270_inner.1(double %26) #49, !dbg !3237\n %.fca.0.extract217 = extractvalue [2 x double] %36, 0, !dbg !3237\n %.fca.1.extract218 = extractvalue [2 x double] %36, 1, !dbg !3237\n %37 = fmul double %34, %.fca.1.extract218, !dbg !3238\n %38 = fmul double %34, %.fca.0.extract217, !dbg !3238\n br label %L242\n\nL177: ; preds = %idxend\n %39 = fsub double %160, %.fca.0.extract244, !dbg !3240\n %40 = fsub double %161, %.fca.1.extract245, !dbg !3240\n %41 = fmul double %39, 5.000000e-01, !dbg !3243\n %42 = fmul double %40, 5.000000e-01, !dbg !3243\n %43 = getelementptr inbounds [2 x double], [2 x double]* %newstruct95, i64 0, i64 0, !dbg !3245\n store double %41, double* %43, align 8, !dbg !3245, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %44 = getelementptr inbounds [2 x double], [2 x double]* %newstruct95, i64 0, i64 1, !dbg !3245\n store double %42, double* %44, align 8, !dbg !3245, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %45 = addrspacecast [2 x double]* %newstruct95 to [2 x double] addrspace(11)*, !dbg !3242\n call fastcc void @julia_log_4285([2 x double]* noalias nocapture nofree noundef nonnull writeonly sret([2 x double]) align 8 dereferenceable(16) %11, [2 x double] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %45) #47, !dbg !3242\n %46 = getelementptr inbounds [2 x double], [2 x double]* %11, i64 0, i64 0, !dbg !3246\n %unbox96 = load double, double* %46, align 8, !dbg !3249, !tbaa !1201, !alias.scope !1203, !noalias !1204\n %47 = fmul double %unbox96, 0x3FD5555555555555, !dbg !3249\n %48 = getelementptr inbounds [2 x double], [2 x double]* %11, i64 0, i64 1, !dbg !3250\n %unbox97 = load double, double* %48, align 8, !dbg !3249, !tbaa !1201, !alias.scope !1203, !noalias !1204\n %49 = fmul double %unbox97, 0x3FD5555555555555, !dbg !3249\n %50 = fcmp ord double %47, 0.000000e+00, !dbg !3252\n br i1 %50, label %L200, label %L191, !dbg !3254\n\nL191: ; preds = %L177\n %51 = fcmp une double %49, 0.000000e+00, !dbg !3255\n %.191 = select i1 %51, double %47, double %49, !dbg !3221\n br label %L242\n\nL200: ; preds = %L177\n %52 = fsub double %49, %49, !dbg !3258\n %53 = fcmp ord double %52, 0.000000e+00, !dbg !3261\n br i1 %53, label %L217, label %L205, !dbg !3260\n\nL205: ; preds = %L200\n %54 = fcmp une double %47, 0x7FF0000000000000, !dbg !3263\n br i1 %54, label %L211, label %L242.thread, !dbg !3264\n\nL211: ; preds = %L205\n %55 = fcmp une double %47, 0xFFF0000000000000, !dbg !3265\n br i1 %55, label %L242.thread, label %L213, !dbg !3266\n\nL213: ; preds = %L211\n %56 = call double @llvm.copysign.f64(double noundef 0.000000e+00, double %49) #47, !dbg !3267\n br label %L242\n\nL217: ; preds = %L200\n %57 = call fastcc double @julia_exp_4278(double %47) #48, !dbg !3269\n %58 = fcmp une double %49, 0.000000e+00, !dbg !3270\n br i1 %58, label %L222, label %L242, !dbg !3272\n\nL222: ; preds = %L217\n %59 = call [2 x double] @julia_sincos_4270_inner.1(double %49) #49, !dbg !3273\n %.fca.0.extract = extractvalue [2 x double] %59, 0, !dbg !3273\n %.fca.1.extract = extractvalue [2 x double] %59, 1, !dbg !3273\n %60 = fmul double %57, %.fca.1.extract, !dbg !3274\n %61 = fmul double %57, %.fca.0.extract, !dbg !3274\n br label %L242\n\nL242.thread: ; preds = %L211, %L205, %L145, %L139\n %.sroa.0296.0.ph = phi double [ 0x7FF8000000000000, %L211 ], [ 0x7FF8000000000000, %L145 ], [ 0xFFF0000000000000, %L139 ], [ 0xFFF0000000000000, %L205 ]\n %.sroa.0296.0..sroa_idx298328 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 0, !dbg !3276\n store double %.sroa.0296.0.ph, double* %.sroa.0296.0..sroa_idx298328, align 8, !dbg !3276, !noalias !3277\n %.sroa.6.0..sroa_idx303329 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 1, !dbg !3276\n store double 0x7FF8000000000000, double* %.sroa.6.0..sroa_idx303329, align 8, !dbg !3276, !noalias !3277\n br label %L265, !dbg !3276\n\nL242: ; preds = %L222, %L217, %L213, %L191, %L156, %L151, %L147, %L125\n %.sroa.0223.0.copyload = phi double [ %37, %L156 ], [ -0.000000e+00, %L147 ], [ %24, %L125 ], [ %34, %L151 ], [ %60, %L222 ], [ -0.000000e+00, %L213 ], [ %47, %L191 ], [ %57, %L217 ], !dbg !3197\n %.sroa.6.0 = phi double [ %38, %L156 ], [ %33, %L147 ], [ %., %L125 ], [ %26, %L151 ], [ %61, %L222 ], [ %56, %L213 ], [ %.191, %L191 ], [ %49, %L217 ], !dbg !3197\n %.sroa.0296.0..sroa_idx298 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 0, !dbg !3276\n store double %.sroa.0223.0.copyload, double* %.sroa.0296.0..sroa_idx298, align 8, !dbg !3276, !noalias !3277\n %.sroa.6.0..sroa_idx303 = getelementptr inbounds [2 x double], [2 x double]* %2, i64 0, i64 1, !dbg !3276\n store double %.sroa.6.0, double* %.sroa.6.0..sroa_idx303, align 8, !dbg !3276, !noalias !3277\n %62 = fcmp une double %.sroa.6.0, 0.000000e+00, !dbg !3278\n %63 = fcmp une double %.sroa.0223.0.copyload, 0.000000e+00, !dbg !3281\n %narrow = select i1 %62, i1 true, i1 %63, !dbg !3281\n br i1 %narrow, label %L265, label %L266, !dbg !3276\n\nL265: ; preds = %L242, %L242.thread\n %.sroa.6.0334 = phi double [ 0x7FF8000000000000, %L242.thread ], [ %.sroa.6.0, %L242 ]\n %.sroa.0296.0332 = phi double [ %.sroa.0296.0.ph, %L242.thread ], [ %.sroa.0223.0.copyload, %L242 ]\n %64 = addrspacecast [2 x double]* %newstruct40 to [2 x double] addrspace(11)*, !dbg !3282\n %65 = addrspacecast [2 x double]* %2 to [2 x double] addrspace(11)*, !dbg !3282\n call fastcc void @julia___4280([2 x double]* noalias nocapture nofree noundef nonnull writeonly sret([2 x double]) align 8 dereferenceable(16) %6, [2 x double] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %64, [2 x double] addrspace(11)* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) %65) #47, !dbg !3282\n %.sroa.0223.0..sroa_idx226 = getelementptr inbounds [2 x double], [2 x double]* %6, i64 0, i64 0, !dbg !3197\n %.sroa.0223.0.copyload227 = load double, double* %.sroa.0223.0..sroa_idx226, align 8, !dbg !3197, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %.sroa.6228.0..sroa_idx232 = getelementptr inbounds [2 x double], [2 x double]* %6, i64 0, i64 1, !dbg !3197\n %.sroa.6228.0.copyload233 = load double, double* %.sroa.6228.0..sroa_idx232, align 8, !dbg !3197, !tbaa !1201, !alias.scope !1203, !noalias !3206\n br label %L266\n\nL266: ; preds = %L265, %L242\n %.sroa.6.0333 = phi double [ %.sroa.6.0334, %L265 ], [ %.sroa.6.0, %L242 ]\n %.sroa.0296.0331 = phi double [ %.sroa.0296.0332, %L265 ], [ %.sroa.0223.0.copyload, %L242 ]\n %.sroa.0223.0 = phi double [ %.sroa.0223.0.copyload227, %L265 ], [ %.sroa.0223.0.copyload, %L242 ]\n %.sroa.6228.0 = phi double [ %.sroa.6228.0.copyload233, %L265 ], [ %.sroa.6.0, %L242 ]\n %66 = fadd double %118, %.sroa.0296.0331, !dbg !3283\n %67 = fadd double %121, %.sroa.6.0333, !dbg !3283\n %68 = fadd double %66, %.sroa.0223.0, !dbg !3283\n %69 = fadd double %67, %.sroa.6228.0, !dbg !3283\n %70 = fmul double %68, 0x3FD5555555555555, !dbg !3287\n %71 = fmul double %69, 0x3FD5555555555555, !dbg !3287\n %72 = fmul double %.sroa.0296.0331, -5.000000e-01, !dbg !3289\n %73 = fmul double %.sroa.6.0333, -5.000000e-01, !dbg !3289\n %74 = fmul double %.sroa.0223.0, -5.000000e-01, !dbg !3289\n %75 = fmul double %.sroa.6228.0, -5.000000e-01, !dbg !3289\n %76 = fmul double %.sroa.6.0333, 0x3FEBB67AE8584CAA, !dbg !3292\n %77 = fsub double %72, %76, !dbg !3295\n %78 = fmul double %.sroa.0296.0331, 0x3FEBB67AE8584CAA, !dbg !3292\n %79 = fadd double %73, %78, !dbg !3296\n %80 = fmul double %.sroa.6228.0, 0x3FEBB67AE8584CAA, !dbg !3292\n %81 = fadd double %74, %80, !dbg !3295\n %82 = fmul double %.sroa.0223.0, 0x3FEBB67AE8584CAA, !dbg !3292\n %83 = fsub double %75, %82, !dbg !3296\n %84 = fadd double %118, %77, !dbg !3297\n %85 = fadd double %121, %79, !dbg !3297\n %86 = fadd double %84, %81, !dbg !3297\n %87 = fadd double %85, %83, !dbg !3297\n %88 = fmul double %86, 0x3FD5555555555555, !dbg !3300\n %89 = fmul double %87, 0x3FD5555555555555, !dbg !3300\n %90 = call double @llvm.fabs.f64(double %71) #47, !dbg !3302\n %91 = fcmp uge double %90, 1.000000e-08, !dbg !3304\n %92 = fcmp ule double %70, 0.000000e+00\n %or.cond = select i1 %91, i1 true, i1 %92, !dbg !3303\n %93 = fcmp uge double %70, 1.000000e+00\n %or.cond201 = select i1 %or.cond, i1 true, i1 %93, !dbg !3303\n br i1 %or.cond201, label %L327, label %common.ret, !dbg !3303\n\ncommon.ret: ; preds = %L335, %L327, %L266\n %common.ret.op = phi double [ %70, %L266 ], [ %103, %L327 ], [ %spec.select210, %L335 ]\n ret double %common.ret.op, !dbg !3221\n\nL327: ; preds = %L266\n %94 = fsub double %73, %78, !dbg !3305\n %95 = fadd double %121, %94, !dbg !3306\n %96 = fadd double %82, %75, !dbg !3305\n %97 = fadd double %95, %96, !dbg !3306\n %98 = fmul double %97, 0x3FD5555555555555, !dbg !3309\n %99 = fadd double %76, %72, !dbg !3311\n %100 = fadd double %118, %99, !dbg !3306\n %101 = fsub double %74, %80, !dbg !3311\n %102 = fadd double %100, %101, !dbg !3306\n %103 = fmul double %102, 0x3FD5555555555555, !dbg !3309\n %104 = call double @llvm.fabs.f64(double %98) #47, !dbg !3312\n %105 = fcmp uge double %104, 1.000000e-08, !dbg !3314\n %106 = fcmp ule double %103, 0.000000e+00\n %or.cond203 = select i1 %105, i1 true, i1 %106, !dbg !3313\n %107 = fcmp uge double %103, 1.000000e+00\n %or.cond205 = select i1 %or.cond203, i1 true, i1 %107, !dbg !3313\n br i1 %or.cond205, label %L335, label %common.ret, !dbg !3313\n\nL335: ; preds = %L327\n %108 = call double @llvm.fabs.f64(double %89) #47, !dbg !3315\n %109 = fcmp uge double %108, 1.000000e-08, !dbg !3317\n %110 = fcmp ule double %88, 0.000000e+00\n %or.cond207 = select i1 %109, i1 true, i1 %110, !dbg !3316\n %111 = fcmp uge double %88, 1.000000e+00\n %or.cond209 = select i1 %or.cond207, i1 true, i1 %111, !dbg !3316\n %spec.select210 = select i1 %or.cond209, double 0x7FF8000000000000, double %88, !dbg !3316\n br label %common.ret, !dbg !3316\n\noob: ; preds = %top\n %errorbox = alloca i64, align 8, !dbg !3198\n store i64 4, i64* %errorbox, align 8, !dbg !3198, !noalias !3277\n %112 = addrspacecast {} addrspace(10)* %0 to {} addrspace(12)*, !dbg !3198\n call void @ijl_bounds_error_ints({} addrspace(12)* noundef %112, i64* noundef nonnull align 8 %errorbox, i64 noundef 1) #50, !dbg !3198\n unreachable, !dbg !3198\n\nidxend: ; preds = %top\n %113 = addrspacecast {} addrspace(10)* %0 to [2 x double] addrspace(13)* addrspace(11)*, !dbg !3198\n %arrayptr266 = load [2 x double] addrspace(13)*, [2 x double] addrspace(13)* addrspace(11)* %113, align 16, !dbg !3198, !tbaa !1584, !alias.scope !3318, !noalias !1446, !nonnull !35\n %arrayref.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 3, i64 0, !dbg !3198\n %arrayref.sroa.0.0.copyload = load double, double addrspace(13)* %arrayref.sroa.0.0..sroa_idx, align 1, !dbg !3198, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %arrayref.sroa.2.0..sroa_idx256 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 3, i64 1, !dbg !3198\n %arrayref.sroa.2.0.copyload = load double, double addrspace(13)* %arrayref.sroa.2.0..sroa_idx256, align 1, !dbg !3198, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %.fca.0.insert254 = insertvalue [2 x double] poison, double %arrayref.sroa.0.0.copyload, 0, !dbg !3320\n %.fca.1.insert255 = insertvalue [2 x double] %.fca.0.insert254, double %arrayref.sroa.2.0.copyload, 1, !dbg !3320\n %114 = call fastcc [2 x double] @julia_inv_4319_inner.2([2 x double] %.fca.1.insert255) #49, !dbg !3320\n %.fca.0.extract250 = extractvalue [2 x double] %114, 0, !dbg !3320\n %.fca.1.extract251 = extractvalue [2 x double] %114, 1, !dbg !3320\n %arrayref13.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 2, i64 0, !dbg !3321\n %arrayref13.sroa.0.0.copyload = load double, double addrspace(13)* %arrayref13.sroa.0.0..sroa_idx, align 1, !dbg !3321, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %arrayref13.sroa.2.0..sroa_idx249 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 2, i64 1, !dbg !3321\n %arrayref13.sroa.2.0.copyload = load double, double addrspace(13)* %arrayref13.sroa.2.0..sroa_idx249, align 1, !dbg !3321, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %115 = fneg double %arrayref13.sroa.2.0.copyload, !dbg !3323\n %116 = fmul double %.fca.1.extract251, %arrayref13.sroa.2.0.copyload, !dbg !3325\n %117 = fmul double %arrayref13.sroa.0.0.copyload, %.fca.0.extract250, !dbg !3325\n %118 = fsub double %116, %117, !dbg !3325\n %119 = fmul double %.fca.0.extract250, %115, !dbg !3327\n %120 = fmul double %arrayref13.sroa.0.0.copyload, %.fca.1.extract251, !dbg !3328\n %121 = fsub double %119, %120, !dbg !3328\n %arrayref24.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 1, i64 0, !dbg !3329\n %arrayref24.sroa.0.0.copyload = load double, double addrspace(13)* %arrayref24.sroa.0.0..sroa_idx, align 1, !dbg !3329, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %122 = fmul double %.fca.1.extract251, %arrayref24.sroa.0.0.copyload, !dbg !3331\n %arrayref24.sroa.3.0..sroa_idx248 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 1, i64 1, !dbg !3329\n %arrayref24.sroa.3.0.copyload = load double, double addrspace(13)* %arrayref24.sroa.3.0..sroa_idx248, align 1, !dbg !3329, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %123 = fmul double %.fca.0.extract250, %arrayref24.sroa.3.0.copyload, !dbg !3331\n %124 = fadd double %122, %123, !dbg !3333\n %125 = fmul double %.fca.0.extract250, %arrayref24.sroa.0.0.copyload, !dbg !3331\n %126 = fmul double %.fca.1.extract251, %arrayref24.sroa.3.0.copyload, !dbg !3331\n %127 = fsub double %125, %126, !dbg !3334\n %arrayref37.sroa.0.0..sroa_idx = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 0, i64 0, !dbg !3335\n %arrayref37.sroa.0.0.copyload = load double, double addrspace(13)* %arrayref37.sroa.0.0..sroa_idx, align 1, !dbg !3335, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %arrayref37.sroa.2.0..sroa_idx247 = getelementptr inbounds [2 x double], [2 x double] addrspace(13)* %arrayptr266, i64 0, i64 1, !dbg !3335\n %arrayref37.sroa.2.0.copyload = load double, double addrspace(13)* %arrayref37.sroa.2.0..sroa_idx247, align 1, !dbg !3335, !tbaa !1360, !alias.scope !1587, !noalias !3319\n %128 = fneg double %arrayref37.sroa.2.0.copyload, !dbg !3337\n %129 = fmul double %.fca.1.extract251, %arrayref37.sroa.2.0.copyload, !dbg !3339\n %130 = fmul double %.fca.0.extract250, %arrayref37.sroa.0.0.copyload, !dbg !3339\n %131 = fsub double %129, %130, !dbg !3339\n %132 = fmul double %.fca.0.extract250, %128, !dbg !3341\n %133 = fmul double %.fca.1.extract251, %arrayref37.sroa.0.0.copyload, !dbg !3342\n %134 = fsub double %132, %133, !dbg !3342\n %135 = fmul double %118, %118, !dbg !3343\n %136 = fmul double %121, %121, !dbg !3343\n %137 = fsub double %135, %136, !dbg !3346\n %138 = fmul double %118, %121, !dbg !3343\n %139 = fadd double %138, %138, !dbg !3347\n %140 = fmul double %118, 2.000000e+00, !dbg !3348\n %141 = fmul double %121, 2.000000e+00, !dbg !3348\n %142 = fmul double %140, %137, !dbg !3353\n %143 = fmul double %141, %139, !dbg !3353\n %144 = fsub double %142, %143, !dbg !3355\n %145 = fmul double %140, %139, !dbg !3353\n %146 = fmul double %141, %137, !dbg !3353\n %147 = fadd double %145, %146, !dbg !3356\n %148 = fmul double %118, 9.000000e+00, !dbg !3348\n %149 = fmul double %121, 9.000000e+00, !dbg !3348\n %150 = fmul double %148, %127, !dbg !3353\n %151 = fmul double %149, %124, !dbg !3353\n %152 = fsub double %150, %151, !dbg !3355\n %153 = fmul double %148, %124, !dbg !3353\n %154 = fmul double %149, %127, !dbg !3353\n %155 = fadd double %153, %154, !dbg !3356\n %156 = fsub double %144, %152, !dbg !3357\n %157 = fsub double %147, %155, !dbg !3357\n %158 = fmul double %131, 2.700000e+01, !dbg !3359\n %159 = fmul double %134, 2.700000e+01, !dbg !3359\n %160 = fadd double %156, %158, !dbg !3362\n %161 = fadd double %157, %159, !dbg !3362\n %162 = fmul double %127, 3.000000e+00, !dbg !3364\n %163 = fmul double %124, 3.000000e+00, !dbg !3364\n %164 = fsub double %137, %162, !dbg !3368\n %165 = fsub double %139, %163, !dbg !3368\n %166 = getelementptr inbounds [2 x double], [2 x double]* %newstruct40, i64 0, i64 0, !dbg !3370\n store double %164, double* %166, align 8, !dbg !3370, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %167 = getelementptr inbounds [2 x double], [2 x double]* %newstruct40, i64 0, i64 1, !dbg !3370\n store double %165, double* %167, align 8, !dbg !3370, !tbaa !1201, !alias.scope !1203, !noalias !3206\n %168 = fmul double %160, %160, !dbg !3371\n %169 = fmul double %161, %161, !dbg !3371\n %170 = fsub double %168, %169, !dbg !3374\n %171 = fmul double %160, %161, !dbg !3371\n %172 = fadd double %171, %171, !dbg !3375\n %173 = fmul double %164, 4.000000e+00, !dbg !3376\n %174 = fmul double %165, 4.000000e+00, !dbg !3376\n %175 = fmul double %164, %173, !dbg !3380\n %176 = fmul double %165, %174, !dbg !3380\n %177 = fsub double %175, %176, !dbg !3382\n %178 = fmul double %165, %173, !dbg !3380\n %179 = fmul double %164, %174, !dbg !3380\n %180 = fadd double %178, %179, !dbg !3383\n %181 = fmul double %164, %177, !dbg !3384\n %182 = fmul double %165, %180, !dbg !3384\n %183 = fsub double %181, %182, !dbg !3387\n %184 = fmul double %165, %177, !dbg !3384\n %185 = fmul double %164, %180, !dbg !3384\n %186 = fadd double %184, %185, !dbg !3388\n %187 = fsub double %170, %183, !dbg !3389\n %188 = fsub double %172, %186, !dbg !3389\n %.fca.0.insert = insertvalue [2 x double] poison, double %187, 0, !dbg !3373\n %.fca.1.insert = insertvalue [2 x double] %.fca.0.insert, double %188, 1, !dbg !3373\n %189 = call fastcc [2 x double] @julia_sqrt_4312_inner.3([2 x double] %.fca.1.insert) #48, !dbg !3373\n %.fca.0.extract244 = extractvalue [2 x double] %189, 0, !dbg !3373\n %.fca.1.extract245 = extractvalue [2 x double] %189, 1, !dbg !3373\n %190 = fmul double %160, %.fca.0.extract244, !dbg !3391\n %191 = fmul double %161, %.fca.1.extract245, !dbg !3394\n %192 = fadd double %190, %191, !dbg !3394\n %193 = fcmp ult double %192, 0.000000e+00, !dbg !3395\n br i1 %193, label %L177, label %L111, !dbg !3393\n}\n", Base.StackTraces.StackFrame[getindex at essentials.jl:13, solve_cubic_eq at example_Enzyme2.jl:16])
└ @ Main /Users/miguelborrero/Documents/refinancing/multistep/example_Enzyme2.jl:105
Stacktrace:
[1] getindex
@ ./essentials.jl:13
[2] solve_cubic_eq
@ ~/Documents/refinancing/multistep/example_Enzyme2.jl:16
Stacktrace:
[1] julia_error(cstr::Cstring, val::Ptr{…}, errtype::Enzyme.API.ErrorType, data::Ptr{…}, data2::Ptr{…}, B::Ptr{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:2057
[2] EnzymeCreatePrimalAndGradient(logic::Enzyme.Logic, todiff::LLVM.Function, retType::Enzyme.API.CDIFFE_TYPE, constant_args::Vector{…}, TA::Enzyme.TypeAnalysis, returnValue::Bool, dretUsed::Bool, mode::Enzyme.API.CDerivativeMode, width::Int64, additionalArg::Ptr{…}, forceAnonymousTape::Bool, typeInfo::Enzyme.FnTypeInfo, uncacheable_args::Vector{…}, augmented::Ptr{…}, atomicAdd::Bool)
@ Enzyme.API ~/.julia/packages/Enzyme/3mqec/src/api.jl:156
[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::Tuple{…}, returnPrimal::Bool, expectedTapeType::Type, loweredArgs::Set{…}, boxedArgs::Set{…})
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:3708
[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/3mqec/src/compiler.jl:5845
[5] codegen
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:5123 [inlined]
[6] _thunk(job::GPUCompiler.CompilerJob{Enzyme.Compiler.EnzymeTarget, Enzyme.Compiler.EnzymeCompilerParams}, postopt::Bool) (repeats 2 times)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6652
[7] cached_compilation
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6690 [inlined]
[8] (::Enzyme.Compiler.var"#28587#28588"{…})(ctx::LLVM.Context)
@ Enzyme.Compiler ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6759
[9] JuliaContext(f::Enzyme.Compiler.var"#28587#28588"{…}; kwargs::@Kwargs{})
@ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:52
[10] JuliaContext(f::Function)
@ GPUCompiler ~/.julia/packages/GPUCompiler/nWT2N/src/driver.jl:42
[11] #s2010#28586
@ ~/.julia/packages/Enzyme/3mqec/src/compiler.jl:6710 [inlined]
[12]
@ Enzyme.Compiler ./none:0
[13] (::Core.GeneratedFunctionStub)(::UInt64, ::LineNumberNode, ::Any, ::Vararg{Any})
@ Core ./boot.jl:602
[14] autodiff
@ ~/.julia/packages/Enzyme/3mqec/src/Enzyme.jl:304 [inlined]
[15] autodiff
@ ~/.julia/packages/Enzyme/3mqec/src/Enzyme.jl:321 [inlined]
[16] macro expansion
@ ./timing.jl:279 [inlined]
[17] call_autodiff_example()
@ Main ~/Documents/refinancing/multistep/example_Enzyme2.jl:114
[18] top-level scope
@ ~/Documents/refinancing/multistep/example_Enzyme2.jl:122
[19] include(fname::String)
@ Base.MainInclude ./client.jl:489
[20] top-level scope
@ REPL[2]:1
in expression starting at /Users/miguelborrero/Documents/refinancing/multistep/example_Enzyme2.jl:122
MWE
using Polynomials
using Combinatorics
using Statistics
using LinearAlgebra
using Enzyme
Enzyme.API.runtimeActivity!(true)
using Logging
using LoggingExtras
using IOLogging
# From PolynomialRoots.jl
function solve_cubic_eq(poly::AbstractVector{Complex{T}}) where T
# Cubic equation solver for complex polynomial (degree=3)
# http://en.wikipedia.org/wiki/Cubic_function Lagrange's method
a1 = 1 / poly[4]
E1 = -poly[3]*a1
E2 = poly[2]*a1
E3 = -poly[1]*a1
s0 = E1
E12 = E1*E1
A = 2*E1*E12 - 9*E1*E2 + 27*E3 # = s1^3 + s2^3
B = E12 - 3*E2 # = s1 s2
# quadratic equation: z^2 - Az + B^3=0 where roots are equal to s1^3 and s2^3
Δ = sqrt(A*A - 4*B*B*B)
if real(conj(A)*Δ)>=0 # scalar product to decide the sign yielding bigger magnitude
s1 = exp(log(0.5 * (A + Δ)) * (1/3))
else
s1 = exp(log(0.5 * (A - Δ)) * (1/3))
end
if s1 == 0
s2 = s1
else
s2 = B / s1
end
zeta1 = complex(-0.5, sqrt(T(3.0))*0.5)
zeta2 = conj(zeta1)
# return third*(s0 + s1 + s2), third*(s0 + s1*zeta2 + s2*zeta1), third*(s0 + s1*zeta1 + s2*zeta2)
sol1 = (1/3) * (s0 + s1 + s2)
sol2 = (1/3) * (s0 + s1 * zeta2 + s2 * zeta1)
sol3 = (1/3) * (s0 + s1 * zeta1 + s2 * zeta2)
if abs(imag(sol1)) < 1e-8 && real(sol1) > 0.0 && real(sol1) < 1.0
return real(sol1)
elseif abs(imag(sol2)) < 1e-8 && real(sol2) > 0.0 && real(sol2) < 1.0
return real(sol2)
elseif abs(imag(sol3)) < 1e-8 && real(sol3) > 0.0 && real(sol3) < 1.0
return real(sol3)
else
return NaN
end
end
function bernstein3_inv(p::AbstractArray{TV, 1}, val::Float64; upper::Float64 = 1.0, lower::Float64 = 0.0) where TV
# Get this in the form ax^3 + bx^2 + cx + d = 0
a = p[4] + 3 * p[2] - 3 * p[3] - p[1]
b = 3 * p[1] - 6 * p[2] + 3 * p[3]
c = 3 * p[2] - 3 * p[1]
d = p[1] - val
coeffs = [d, c, b, a]
if d >= 0.0 # (poly(0.0))
return lower
elseif a + b + c + d <= 0.0 # (poly(1.0))
return upper
end
x = solve_cubic_eq(Complex.(coeffs))
return x * (upper - lower) + lower
end
function get_ll_single(params::AbstractArray{TV, 1}) where TV
implied_jump_bid_inv(val::Float64) = bernstein3_inv(params, val; upper = 6.0 + 2.0, lower = 0.0 - 2.0)
u_current = 0.5
likelihood = 2*implied_jump_bid_inv(u_current)
return log(likelihood)
end
function call_autodiff_example()
params = [-1.0, 0.0, 0.0, 0.0]
dx = zeros(length(params))
single_ll(x) = get_ll_single(x)
# Create an in-memory buffer
logfile = open("log_output.txt", "w")
# Set up a logger
logger = SimpleLogger(logfile, Logging.Info)
with_logger(logger) do
try
println(@time autodiff(Reverse, single_ll, Active, Duplicated(params, dx)))
catch e
@error "An error occurred: $e"
finally
println("Log content from in-memory buffer:")
close(logfile)
end
end
@time autodiff(Reverse, single_ll, Active, Duplicated(params, dx))
#cfg1 = ForwardDiff.GradientConfig(single_ll, params, ForwardDiff.Chunk{9}())
#println(@time ForwardDiff.gradient!(dx, single_ll, params, cfg1))
println(dx)
end
call_autodiff_example()
Thanks a lot in advance!
It appears like the log file, which I am just copying and pasting from a .txt file, is not being copied with line breaks. I am not sure how to fix this for a better format. Is there something I can do to improve the info provided?
Is there something I can do to improve the info provided?
gist.github.com is a good place for large logs.
I think the point is that when I copy the content of the log file (see screenshot)
The content appears without line braks. This also happens in the gist.github.com. So my question to @wsmoses was whether he could read it properly in the format or I could present it some other way more clearly for convenience.
Yeah I successfully managed to read it [pasted the error into sublime and find and replaced to add back the newlines].
Unfortunately this is one of the nastier types of errors to debug.
Would you be able tor educe the size and complexity of your code to something more minimal [then we'll be able to work to fix it more quickly]
Glad to hear this and sorry for the inconvenience with the log file. I have reduced the code further (see below). Basically now it boils down to not working because of the function solve_cubic_equation() since if I comment out that line it works. Moreover, I thought it could be because if the AbstractVector{Complex{T}} but it can not only be that since using the same function but deleting the body and returning just the firm element of the first argument poly makes it work. So it must be something within the function. I need this function in my code so it would be great if it worked.
using Polynomials
using Enzyme
Enzyme.API.runtimeActivity!(true)
# From PolynomialRoots.jl
function solve_cubic_eq(poly::AbstractVector{Complex{T}}) where T
# Cubic equation solver for complex polynomial (degree=3)
# http://en.wikipedia.org/wiki/Cubic_function Lagrange's method
a1 = 1 / poly[4]
E1 = -poly[3]*a1
E2 = poly[2]*a1
E3 = -poly[1]*a1
s0 = E1
E12 = E1*E1
A = 2*E1*E12 - 9*E1*E2 + 27*E3 # = s1^3 + s2^3
B = E12 - 3*E2 # = s1 s2
# quadratic equation: z^2 - Az + B^3=0 where roots are equal to s1^3 and s2^3
Δ = sqrt(A*A - 4*B*B*B)
if real(conj(A)*Δ)>=0 # scalar product to decide the sign yielding bigger magnitude
s1 = exp(log(0.5 * (A + Δ)) * (1/3))
else
s1 = exp(log(0.5 * (A - Δ)) * (1/3))
end
if s1 == 0
s2 = s1
else
s2 = B / s1
end
zeta1 = complex(-0.5, sqrt(T(3.0))*0.5)
zeta2 = conj(zeta1)
# return third*(s0 + s1 + s2), third*(s0 + s1*zeta2 + s2*zeta1), third*(s0 + s1*zeta1 + s2*zeta2)
sol1 = (1/3) * (s0 + s1 + s2)
sol2 = (1/3) * (s0 + s1 * zeta2 + s2 * zeta1)
sol3 = (1/3) * (s0 + s1 * zeta1 + s2 * zeta2)
if abs(imag(sol1)) < 1e-8 && real(sol1) > 0.0 && real(sol1) < 1.0
return real(sol1)
elseif abs(imag(sol2)) < 1e-8 && real(sol2) > 0.0 && real(sol2) < 1.0
return real(sol2)
elseif abs(imag(sol3)) < 1e-8 && real(sol3) > 0.0 && real(sol3) < 1.0
return real(sol3)
else
return NaN
end
end
function get_ll_single(params::AbstractArray{TV, 1}) where TV
likelihood = solve_cubic_eq(Complex.(params))
return params[1]
end
function call_autodiff_example()
params = [-1.0, 0.0, 0.0, 0.0]
dx = zeros(length(params))
autodiff(Reverse, get_ll_single, Active, Duplicated(params, dx))
end
call_autodiff_example()
Thanks a lot again!
(base) wmoses@Williams-MacBook-Pro-3 Enzyme.jl % cat poly.jl
using Enzyme
Enzyme.API.printall!(true)
function solve_cubic_eq(a, poly::AbstractVector{Complex{T}}) where T
a1 = 1 / @inbounds poly[1]
E1 = -a*a1
E12 = E1*E1
s1 = log(E12)
return nothing
end
autodiff_thunk(ReverseSplitNoPrimal, Const{typeof(solve_cubic_eq)}, Const, Active{Complex{Float64}}, Duplicated{Vector{Complex{Float64}}})
Hi William, thanks a lot for your effort! Two things
- whats the purpose/necessity of the new first argument?
- I get this error:
ERROR: LoadError: MethodError: no method matching solve_cubic_eq(::ComplexF64, ::Vector{ComplexF64})
The applicable method may be too new: running in world age 31477, while current world is 31483.
Closest candidates are:
solve_cubic_eq(::Any, ::AbstractArray{Complex{T}, 1}) where T (method too new to be called from this world context.)
@ Main ~/Documents/refinancing/multistep/example_Enzyme3.jl:7
Stacktrace:
[1] macro expansion
@ ~/.julia/packages/Enzyme/3mqec/src/utils.jl:0 [inlined]
[2] codegen_world_age(ft::Type{typeof(solve_cubic_eq)}, tt::Type{Tuple{ComplexF64, Vector{ComplexF64}}})
@ Enzyme ~/.julia/packages/Enzyme/3mqec/src/utils.jl:168
[3] autodiff_thunk(::EnzymeCore.ReverseModeSplit{…}, ::Type{…}, ::Type{…}, ::Type{…}, ::Type{…})
@ Enzyme ~/.julia/packages/Enzyme/3mqec/src/Enzyme.jl:610
[4] call_autodiff_example()
@ Main ~/Documents/refinancing/multistep/example_Enzyme3.jl:64
[5] top-level scope
@ ~/Documents/refinancing/multistep/example_Enzyme3.jl:69
[6] include(fname::String)
@ Base.MainInclude ./client.jl:489
[7] top-level scope
@ REPL[2]:1
in expression starting at /Users/miguelborrero/Documents/refinancing/multistep/example_Enzyme3.jl:69
Some type information was truncated. Use `show(err)` to see complete types.
reduced to
using Enzyme
Enzyme.API.printall!(true)
Enzyme.API.instname!(true)
function solve_cubic_eq(poly::AbstractVector{Complex{T}}) where T
a1 = 1 / @inbounds poly[1]
E1 = 2*a1
E12 = E1*E1
s1 = log(E12)
return nothing
end
autodiff_thunk(ReverseSplitNoPrimal, Const{typeof(solve_cubic_eq)}, Const, Duplicated{Vector{Complex{Float64}}})
will be ixed by https://github.com/EnzymeAD/Enzyme/pull/2010
@wsmoses thanks for your comment but my example is not working for me.
Can you confirm what version of Enzyme you're on (note you need to be on latest main, not a release)
Okay I did not know that, its working now! Thanks a lot, you're incredible! Grateful!