Skip to content

Instantly share code, notes, and snippets.

@andreasnoack
Last active March 7, 2017 22:09
Show Gist options
  • Save andreasnoack/e4ae12fcbb910d51f832e59057fe7f0a to your computer and use it in GitHub Desktop.
Save andreasnoack/e4ae12fcbb910d51f832e59057fe7f0a to your computer and use it in GitHub Desktop.
Compare Matrix and SMatrix
using Celeste, StaticArrays, BenchmarkTools
using Celeste.PSF: BivariateNormalDerivatives, GalaxySigmaDerivs
const gal_shape_ids = 3
type Test1{NumType <: Number}
j::Matrix{NumType}
t::Array{NumType, 3}
end
type Test2{NumType <: Number}
j::SMatrix{3,3,NumType,9}
t::Array{NumType, 3}
end
bvn_derivs = Celeste.PSF.BivariateNormalDerivatives{Float64}()
sig_sf1 = Test1{Float64}(randn(3,3), randn(3,3,3))
sig_sf2 = Test2{Float64}(@SMatrix(randn(3,3)), randn(3,3,3))
wcs_jacobian = randn(2,2)
function foo(bvn_derivs, sig_sf)
bvn_s_d = bvn_derivs.bvn_s_d
bvn_sig_d = bvn_derivs.bvn_sig_d
@inbounds for shape_id in 1:length(gal_shape_ids), sig_id in 1:3
bvn_s_d[shape_id] += bvn_sig_d[sig_id] * sig_sf.j[sig_id, shape_id]
end
end
function bar!{NumType <: Number}(
bvn_derivs::BivariateNormalDerivatives{NumType},
sig_sf,
wcs_jacobian, calculate_hessian::Bool)
# Transform the u derivates first.
# bvn_x_d and bvn_xx_h should already have been set using get_bvn_derivs!()
# transform_bvn_ux_derivs!(bvn_derivs, wcs_jacobian, calculate_hessian)
# Gradient calculations.
# Use the chain rule for the shape derviatives.
# TODO: time consuming **************
bvn_s_d = bvn_derivs.bvn_s_d
bvn_sig_d = bvn_derivs.bvn_sig_d
fill!(bvn_s_d, 0.0)
@inbounds for shape_id in 1:length(gal_shape_ids), sig_id in 1:3
bvn_s_d[shape_id] += bvn_sig_d[sig_id] * sig_sf.j[sig_id, shape_id]
end
if calculate_hessian
# Hessian calculations.
bvn_ss_h = bvn_derivs.bvn_ss_h
bvn_us_h = bvn_derivs.bvn_us_h
fill!(bvn_ss_h, 0.0)
fill!(bvn_us_h, 0.0)
# Second derviatives involving only shape parameters.
# TODO: time consuming **************
# @inbounds for shape_id2 in 1:length(gal_shape_ids), shape_id1 in 1:shape_id2
# @inbounds for sig_id1 in 1:3
# bvn_ss_h[shape_id1, shape_id2] +=
# bvn_sig_d[sig_id1] * sig_sf.t[sig_id1, shape_id1, shape_id2]
# end
# end
bvn_sigsig_h = bvn_derivs.bvn_sigsig_h
@inbounds for sig_id1 in 1:3
for sig_id2 in 1:3
for shape_id2 in 1:length(gal_shape_ids)
inner_term =
bvn_sigsig_h[sig_id1, sig_id2] * sig_sf.j[sig_id2, shape_id2]
for shape_id1 in 1:shape_id2
bvn_ss_h[shape_id1, shape_id2] +=
inner_term * sig_sf.j[sig_id1, shape_id1]
end
end
end
end
# @inbounds for shape_id2 in 1:length(gal_shape_ids), shape_id1 in 1:shape_id2
# bvn_ss_h[shape_id2, shape_id1] = bvn_ss_h[shape_id1, shape_id2]
# end
# # Second derivates involving both a shape term and a u term.
# # TODO: time consuming **************
# bvn_xsig_h = bvn_derivs.bvn_xsig_h
# @inbounds for shape_id in 1:length(gal_shape_ids),
# u_id in 1:2, sig_id in 1:3, x_id in 1:2
# bvn_us_h[u_id, shape_id] +=
# bvn_xsig_h[x_id, sig_id] * sig_sf.j[sig_id, shape_id] *
# (-wcs_jacobian[x_id, u_id])
# end
end
end
# foo(bvn_derivs, sig_sf1)
# foo(bvn_derivs, sig_sf2)
# @btime foo(bvn_derivs, sig_sf1)
# @btime foo(bvn_derivs, sig_sf2)
# @code_llvm bar!(bvn_derivs, sig_sf1, wcs_jacobian, true)
# @code_llvm bar!(bvn_derivs, sig_sf2, wcs_jacobian, true)
code_llvm(STDOUT, bar!, Tuple{typeof(bvn_derivs), typeof(sig_sf2), typeof(wcs_jacobian), Bool}, true, true)
# bar!(bvn_derivs, sig_sf1, wcs_jacobian, true)
# bar!(bvn_derivs, sig_sf2, wcs_jacobian, true)
# @btime bar!(bvn_derivs, sig_sf1, wcs_jacobian, true)
# @btime bar!(bvn_derivs, sig_sf2, wcs_jacobian, true)
define void @"julia_bar!_69141"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = call i8**** @jl_get_ptls_states() #3
%5 = alloca [16 x i8**], align 8
%.sub = getelementptr inbounds [16 x i8**], [16 x i8**]* %5, i64 0, i64 0
%6 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 2
%7 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 3
%8 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 4
%9 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 5
%10 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 6
%11 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 7
%12 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 8
%13 = bitcast [16 x i8**]* %5 to i64*
%14 = bitcast i8*** %6 to i8*
call void @llvm.memset.p0i8.i64(i8* %14, i8 0, i64 112, i32 8, i1 false)
store i64 28, i64* %13, align 8
%15 = bitcast i8**** %4 to i64*
%16 = load i64, i64* %15, align 8
%17 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 1
%18 = bitcast i8*** %17 to i64*
store i64 %16, i64* %18, align 8
store i8*** %.sub, i8**** %4, align 8
%19 = getelementptr i8*, i8** %0, i64 13
%20 = bitcast i8** %19 to i8***
%21 = load i8**, i8*** %20, align 8
store i8** %21, i8*** %6, align 8
%22 = getelementptr i8*, i8** %0, i64 4
%23 = bitcast i8** %22 to i8***
%24 = load i8**, i8*** %23, align 8
store i8** %24, i8*** %7, align 8
store i8** %21, i8*** %8, align 8
%25 = call i8** @"jlsys_fill!_47835"(i8** %21, double 0.000000e+00)
%26 = bitcast i8** %21 to double**
%27 = load double*, double** %26, align 8
%28 = bitcast i8** %24 to double**
%29 = load double*, double** %28, align 8
%30 = bitcast i8** %1 to i8***
%31 = load i8**, i8*** %30, align 8
%32 = bitcast i8** %31 to double**
%33 = load double*, double** %32, align 8
%34 = load double, double* %27, align 8
%35 = load double, double* %29, align 8
%36 = load double, double* %33, align 8
%37 = fmul double %35, %36
%38 = fadd double %34, %37
store double %38, double* %27, align 8
%39 = getelementptr double, double* %29, i64 1
%40 = load double, double* %39, align 8
%41 = getelementptr double, double* %33, i64 1
%42 = load double, double* %41, align 8
%43 = fmul double %40, %42
%44 = fadd double %38, %43
store double %44, double* %27, align 8
%45 = getelementptr double, double* %29, i64 2
%46 = load double, double* %45, align 8
%47 = getelementptr double, double* %33, i64 2
%48 = load double, double* %47, align 8
%49 = fmul double %46, %48
%50 = fadd double %44, %49
store double %50, double* %27, align 8
store i8** %21, i8*** %9, align 8
store i8** %24, i8*** %10, align 8
store i8** %31, i8*** %11, align 8
store i8** %21, i8*** %12, align 8
%51 = and i8 %3, 1
%52 = icmp eq i8 %51, 0
br i1 %52, label %L257, label %if7
if7: ; preds = %top
%53 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 9
%54 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 10
%55 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 11
%56 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 12
%57 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 13
%58 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 14
%59 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 15
%60 = getelementptr i8*, i8** %0, i64 14
%61 = bitcast i8** %60 to i8***
%62 = load i8**, i8*** %61, align 8
store i8** %62, i8*** %53, align 8
%63 = bitcast i8** %62 to double**
%64 = load double*, double** %63, align 8
%65 = getelementptr i8*, i8** %0, i64 15
%66 = bitcast i8** %65 to i8***
%67 = load i8**, i8*** %66, align 8
store i8** %67, i8*** %54, align 8
store i8** %62, i8*** %55, align 8
%68 = call i8** @"julia_fill!_68280"(i8** %62, double 0.000000e+00)
store i8** %67, i8*** %56, align 8
%69 = call i8** @"julia_fill!_68280"(i8** %67, double 0.000000e+00)
%70 = getelementptr i8*, i8** %0, i64 7
%71 = bitcast i8** %70 to i8***
%72 = load i8**, i8*** %71, align 8
store i8** %72, i8*** %57, align 8
%73 = bitcast i8** %72 to double**
%74 = load double*, double** %73, align 8
%75 = getelementptr i8*, i8** %72, i64 3
%76 = bitcast i8** %75 to i64*
%77 = load i64, i64* %76, align 8
%78 = load i8**, i8*** %30, align 8
%79 = bitcast i8** %78 to double**
%80 = load double*, double** %79, align 8
br label %L190.loopexit.2
L257: ; preds = %top
%81 = load i64, i64* %18, align 8
store i64 %81, i64* %15, align 8
ret void
L254: ; preds = %L190.loopexit.2
store i8** %78, i8*** %58, align 8
%82 = load i64, i64* %18, align 8
store i64 %82, i64* %15, align 8
ret void
L190.loopexit.2: ; preds = %if7, %L190.loopexit.2
%"#temp#5.030" = phi i64 [ 1, %if7 ], [ %116, %L190.loopexit.2 ]
%83 = add nsw i64 %"#temp#5.030", -1
%84 = getelementptr double, double* %74, i64 %83
%85 = load double, double* %84, align 8
%86 = load double, double* %80, align 8
%87 = fmul double %85, %86
%88 = load double, double* %64, align 8
%89 = getelementptr double, double* %80, i64 %83
%90 = load double, double* %89, align 8
%91 = fmul double %87, %90
%92 = fadd double %88, %91
store double %92, double* %64, align 8
%93 = add i64 %83, %77
%94 = getelementptr double, double* %74, i64 %93
%95 = load double, double* %94, align 8
%96 = getelementptr double, double* %80, i64 1
%97 = load double, double* %96, align 8
%98 = fmul double %95, %97
%99 = load double, double* %64, align 8
%100 = getelementptr double, double* %80, i64 %83
%101 = load double, double* %100, align 8
%102 = fmul double %98, %101
%103 = fadd double %99, %102
store double %103, double* %64, align 8
%104 = shl i64 %77, 1
%105 = add i64 %83, %104
%106 = getelementptr double, double* %74, i64 %105
%107 = load double, double* %106, align 8
%108 = getelementptr double, double* %80, i64 2
%109 = load double, double* %108, align 8
%110 = fmul double %107, %109
%111 = load double, double* %64, align 8
%112 = getelementptr double, double* %80, i64 %83
%113 = load double, double* %112, align 8
%114 = fmul double %110, %113
%115 = fadd double %111, %114
store double %115, double* %64, align 8
store i8** %78, i8*** %59, align 8
%116 = add nuw nsw i64 %"#temp#5.030", 1
%117 = icmp eq i64 %116, 4
br i1 %117, label %L254, label %L190.loopexit.2
}
define void @"julia_bar!_68367"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = call i8**** @jl_get_ptls_states() #3
%5 = alloca [16 x i8**], align 8
%.sub = getelementptr inbounds [16 x i8**], [16 x i8**]* %5, i64 0, i64 0
%6 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 2
%7 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 3
%8 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 4
%9 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 5
%10 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 6
%11 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 7
%12 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 8
%13 = bitcast [16 x i8**]* %5 to i64*
%14 = bitcast i8*** %6 to i8*
call void @llvm.memset.p0i8.i64(i8* %14, i8 0, i64 112, i32 8, i1 false)
store i64 28, i64* %13, align 8
%15 = bitcast i8**** %4 to i64*
%16 = load i64, i64* %15, align 8
%17 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 1
%18 = bitcast i8*** %17 to i64*
store i64 %16, i64* %18, align 8
store i8*** %.sub, i8**** %4, align 8
%19 = getelementptr i8*, i8** %0, i64 13
%20 = bitcast i8** %19 to i8***
%21 = load i8**, i8*** %20, align 8
store i8** %21, i8*** %6, align 8
%22 = getelementptr i8*, i8** %0, i64 4
%23 = bitcast i8** %22 to i8***
%24 = load i8**, i8*** %23, align 8
store i8** %24, i8*** %7, align 8
store i8** %21, i8*** %8, align 8
%25 = call i8** @"jlsys_fill!_47835"(i8** %21, double 0.000000e+00)
%26 = bitcast i8** %21 to double**
%27 = load double*, double** %26, align 8
%28 = bitcast i8** %24 to double**
%29 = load double*, double** %28, align 8
%30 = bitcast i8** %1 to i8***
%31 = load i8**, i8*** %30, align 8
%32 = bitcast i8** %31 to double**
%33 = load double*, double** %32, align 8
%34 = load double, double* %27, align 8
%35 = load double, double* %29, align 8
%36 = load double, double* %33, align 8
%37 = fmul double %35, %36
%38 = fadd double %34, %37
store double %38, double* %27, align 8
%39 = getelementptr double, double* %29, i64 1
%40 = load double, double* %39, align 8
%41 = getelementptr double, double* %33, i64 1
%42 = load double, double* %41, align 8
%43 = fmul double %40, %42
%44 = fadd double %38, %43
store double %44, double* %27, align 8
%45 = getelementptr double, double* %29, i64 2
%46 = load double, double* %45, align 8
%47 = getelementptr double, double* %33, i64 2
%48 = load double, double* %47, align 8
%49 = fmul double %46, %48
%50 = fadd double %44, %49
store double %50, double* %27, align 8
store i8** %21, i8*** %9, align 8
store i8** %24, i8*** %10, align 8
store i8** %31, i8*** %11, align 8
store i8** %21, i8*** %12, align 8
%51 = and i8 %3, 1
%52 = icmp eq i8 %51, 0
br i1 %52, label %L257, label %if7
if7: ; preds = %top
%53 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 9
%54 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 10
%55 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 11
%56 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 12
%57 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 13
%58 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 14
%59 = getelementptr [16 x i8**], [16 x i8**]* %5, i64 0, i64 15
%60 = getelementptr i8*, i8** %0, i64 14
%61 = bitcast i8** %60 to i8***
%62 = load i8**, i8*** %61, align 8
store i8** %62, i8*** %53, align 8
%63 = bitcast i8** %62 to double**
%64 = load double*, double** %63, align 8
%65 = getelementptr i8*, i8** %0, i64 15
%66 = bitcast i8** %65 to i8***
%67 = load i8**, i8*** %66, align 8
store i8** %67, i8*** %54, align 8
store i8** %62, i8*** %55, align 8
%68 = call i8** @"julia_fill!_68088"(i8** %62, double 0.000000e+00)
store i8** %67, i8*** %56, align 8
%69 = call i8** @"julia_fill!_68088"(i8** %67, double 0.000000e+00)
%70 = getelementptr i8*, i8** %0, i64 7
%71 = bitcast i8** %70 to i8***
%72 = load i8**, i8*** %71, align 8
store i8** %72, i8*** %57, align 8
%73 = bitcast i8** %72 to double**
%74 = load double*, double** %73, align 8
%75 = getelementptr i8*, i8** %72, i64 3
%76 = bitcast i8** %75 to i64*
%77 = load i64, i64* %76, align 8
%78 = load i8**, i8*** %30, align 8
%79 = bitcast i8** %78 to double**
%80 = load double*, double** %79, align 8
br label %L190.loopexit.2
L257: ; preds = %top
%81 = load i64, i64* %18, align 8
store i64 %81, i64* %15, align 8
ret void
L254: ; preds = %L190.loopexit.2
store i8** %78, i8*** %58, align 8
%82 = load i64, i64* %18, align 8
store i64 %82, i64* %15, align 8
ret void
L190.loopexit.2: ; preds = %if7, %L190.loopexit.2
%"#temp#5.030" = phi i64 [ 1, %if7 ], [ %116, %L190.loopexit.2 ]
%83 = add nsw i64 %"#temp#5.030", -1
%84 = getelementptr double, double* %74, i64 %83
%85 = load double, double* %84, align 8
%86 = load double, double* %80, align 8
%87 = fmul double %85, %86
%88 = load double, double* %64, align 8
%89 = getelementptr double, double* %80, i64 %83
%90 = load double, double* %89, align 8
%91 = fmul double %87, %90
%92 = fadd double %88, %91
store double %92, double* %64, align 8
%93 = add i64 %83, %77
%94 = getelementptr double, double* %74, i64 %93
%95 = load double, double* %94, align 8
%96 = getelementptr double, double* %80, i64 1
%97 = load double, double* %96, align 8
%98 = fmul double %95, %97
%99 = load double, double* %64, align 8
%100 = getelementptr double, double* %80, i64 %83
%101 = load double, double* %100, align 8
%102 = fmul double %98, %101
%103 = fadd double %99, %102
store double %103, double* %64, align 8
%104 = shl i64 %77, 1
%105 = add i64 %83, %104
%106 = getelementptr double, double* %74, i64 %105
%107 = load double, double* %106, align 8
%108 = getelementptr double, double* %80, i64 2
%109 = load double, double* %108, align 8
%110 = fmul double %107, %109
%111 = load double, double* %64, align 8
%112 = getelementptr double, double* %80, i64 %83
%113 = load double, double* %112, align 8
%114 = fmul double %110, %113
%115 = fadd double %111, %114
store double %115, double* %64, align 8
store i8** %78, i8*** %59, align 8
%116 = add nuw nsw i64 %"#temp#5.030", 1
%117 = icmp eq i64 %116, 4
br i1 %117, label %L254, label %L190.loopexit.2
}
define void @"julia_bar!_69138"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = alloca %SMatrix, align 8
%5 = alloca %SMatrix, align 8
%6 = call i8**** @jl_get_ptls_states() #3
%7 = alloca [13 x i8**], align 8
%.sub = getelementptr inbounds [13 x i8**], [13 x i8**]* %7, i64 0, i64 0
%8 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 2
%9 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 3
%10 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 4
%11 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 5
%12 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 6
%13 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 7
%14 = bitcast [13 x i8**]* %7 to i64*
%15 = bitcast i8*** %8 to i8*
call void @llvm.memset.p0i8.i64(i8* %15, i8 0, i64 88, i32 8, i1 false)
store i64 22, i64* %14, align 8
%16 = bitcast i8**** %6 to i64*
%17 = load i64, i64* %16, align 8
%18 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 1
%19 = bitcast i8*** %18 to i64*
store i64 %17, i64* %19, align 8
store i8*** %.sub, i8**** %6, align 8
%20 = getelementptr i8*, i8** %0, i64 13
%21 = bitcast i8** %20 to i8***
%22 = load i8**, i8*** %21, align 8
store i8** %22, i8*** %8, align 8
%23 = getelementptr i8*, i8** %0, i64 4
%24 = bitcast i8** %23 to i8***
%25 = load i8**, i8*** %24, align 8
store i8** %25, i8*** %9, align 8
store i8** %22, i8*** %10, align 8
%26 = call i8** @"jlsys_fill!_47835"(i8** %22, double 0.000000e+00)
%27 = bitcast i8** %22 to double**
%28 = bitcast i8** %25 to double**
%29 = bitcast i8** %1 to i64*
%.unpack.elt24 = getelementptr inbounds i8*, i8** %1, i64 1
%30 = bitcast i8** %.unpack.elt24 to i64*
%.unpack.elt26 = getelementptr inbounds i8*, i8** %1, i64 2
%31 = bitcast i8** %.unpack.elt26 to i64*
%.unpack.elt28 = getelementptr inbounds i8*, i8** %1, i64 3
%32 = bitcast i8** %.unpack.elt28 to i64*
%.unpack.elt30 = getelementptr inbounds i8*, i8** %1, i64 4
%33 = bitcast i8** %.unpack.elt30 to i64*
%.unpack.elt32 = getelementptr inbounds i8*, i8** %1, i64 5
%34 = bitcast i8** %.unpack.elt32 to i64*
%.unpack.elt34 = getelementptr inbounds i8*, i8** %1, i64 6
%35 = bitcast i8** %.unpack.elt34 to i64*
%.unpack.elt36 = getelementptr inbounds i8*, i8** %1, i64 7
%36 = bitcast i8** %.unpack.elt36 to i64*
%.unpack.elt38 = getelementptr inbounds i8*, i8** %1, i64 8
%37 = bitcast i8** %.unpack.elt38 to i64*
%38 = load double*, double** %27, align 8
%39 = load double, double* %38, align 8
%40 = load double*, double** %28, align 8
%41 = load double, double* %40, align 8
%42 = bitcast i8** %1 to double*
%.unpack.unpack65180 = load double, double* %42, align 16
%43 = fmul double %41, %.unpack.unpack65180
%44 = fadd double %39, %43
store double %44, double* %38, align 8
%45 = getelementptr double, double* %40, i64 1
%46 = load double, double* %45, align 8
%47 = bitcast i8** %.unpack.elt24 to double*
%.unpack.unpack2564.1181 = load double, double* %47, align 8
%48 = fmul double %46, %.unpack.unpack2564.1181
%49 = fadd double %44, %48
store double %49, double* %38, align 8
%50 = getelementptr double, double* %40, i64 2
%51 = load double, double* %50, align 8
%52 = bitcast i8** %.unpack.elt26 to double*
%.unpack.unpack2763.2182 = load double, double* %52, align 16
%53 = fmul double %51, %.unpack.unpack2763.2182
%54 = fadd double %49, %53
store double %54, double* %38, align 8
store i8** %22, i8*** %11, align 8
store i8** %25, i8*** %12, align 8
store i8** %22, i8*** %13, align 8
%55 = and i8 %3, 1
%56 = icmp eq i8 %55, 0
br i1 %56, label %L315, label %if19
if19: ; preds = %top
%57 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 8
%58 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 9
%59 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 10
%60 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 11
%61 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 12
%62 = getelementptr i8*, i8** %0, i64 14
%63 = bitcast i8** %62 to i8***
%64 = load i8**, i8*** %63, align 8
store i8** %64, i8*** %57, align 8
%65 = bitcast i8** %64 to double**
%66 = load double*, double** %65, align 8
%67 = getelementptr i8*, i8** %0, i64 15
%68 = bitcast i8** %67 to i8***
%69 = load i8**, i8*** %68, align 8
store i8** %69, i8*** %58, align 8
store i8** %64, i8*** %59, align 8
%70 = call i8** @"julia_fill!_68280"(i8** %64, double 0.000000e+00)
store i8** %69, i8*** %60, align 8
%71 = call i8** @"julia_fill!_68280"(i8** %69, double 0.000000e+00)
%72 = getelementptr i8*, i8** %0, i64 7
%73 = bitcast i8** %72 to i8***
%74 = load i8**, i8*** %73, align 8
store i8** %74, i8*** %61, align 8
%75 = bitcast i8** %74 to double**
%76 = load double*, double** %75, align 8
%77 = getelementptr i8*, i8** %74, i64 3
%78 = bitcast i8** %77 to i64*
%79 = load i64, i64* %78, align 8
%80 = bitcast %SMatrix* %5 to i64*
%81 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 1
%82 = bitcast double* %81 to i64*
%83 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 2
%84 = bitcast double* %83 to i64*
%85 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 3
%86 = bitcast double* %85 to i64*
%87 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 4
%88 = bitcast double* %87 to i64*
%89 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 5
%90 = bitcast double* %89 to i64*
%91 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 6
%92 = bitcast double* %91 to i64*
%93 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 7
%94 = bitcast double* %93 to i64*
%95 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 8
%96 = bitcast double* %95 to i64*
%97 = bitcast %SMatrix* %4 to i64*
%98 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 1
%99 = bitcast double* %98 to i64*
%100 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 2
%101 = bitcast double* %100 to i64*
%102 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 3
%103 = bitcast double* %102 to i64*
%104 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 4
%105 = bitcast double* %104 to i64*
%106 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 5
%107 = bitcast double* %106 to i64*
%108 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 6
%109 = bitcast double* %108 to i64*
%110 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 7
%111 = bitcast double* %110 to i64*
%112 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 8
%113 = bitcast double* %112 to i64*
br label %if20
L315: ; preds = %top
%114 = load i64, i64* %19, align 8
store i64 %114, i64* %16, align 8
ret void
L140.loopexit: ; preds = %L210.loopexit
%115 = add nuw nsw i64 %"#temp#5.0168", 1
%116 = icmp eq i64 %115, 4
br i1 %116, label %L312, label %if20
if20: ; preds = %if19, %L140.loopexit
%"#temp#5.0168" = phi i64 [ 1, %if19 ], [ %115, %L140.loopexit ]
%117 = add nsw i64 %"#temp#5.0168", -1
br label %L210.loopexit
L312: ; preds = %L140.loopexit
%118 = load i64, i64* %19, align 8
store i64 %118, i64* %16, align 8
ret void
L210.loopexit: ; preds = %if20, %L210.loopexit
%"#temp#4.0167" = phi i64 [ 1, %if20 ], [ %133, %L210.loopexit ]
%.unpack.unpack107 = load i64, i64* %29, align 16
%.unpack.unpack67106 = load i64, i64* %30, align 8
%.unpack.unpack69105 = load i64, i64* %31, align 16
%.unpack.unpack71104 = load i64, i64* %32, align 8
%.unpack.unpack73103 = load i64, i64* %33, align 16
%.unpack.unpack75102 = load i64, i64* %34, align 8
%.unpack.unpack77101 = load i64, i64* %35, align 16
%.unpack.unpack79100 = load i64, i64* %36, align 8
%.unpack.unpack8199 = load i64, i64* %37, align 16
store i64 %.unpack.unpack107, i64* %80, align 8
store i64 %.unpack.unpack67106, i64* %82, align 8
store i64 %.unpack.unpack69105, i64* %84, align 8
store i64 %.unpack.unpack71104, i64* %86, align 8
store i64 %.unpack.unpack73103, i64* %88, align 8
store i64 %.unpack.unpack75102, i64* %90, align 8
store i64 %.unpack.unpack77101, i64* %92, align 8
store i64 %.unpack.unpack79100, i64* %94, align 8
store i64 %.unpack.unpack8199, i64* %96, align 8
%119 = add nsw i64 %"#temp#4.0167", -1
%120 = mul i64 %119, %79
%121 = add i64 %117, %120
%122 = getelementptr double, double* %76, i64 %121
%123 = load double, double* %122, align 8
%124 = getelementptr %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 %119
%125 = load double, double* %124, align 8
%126 = fmul double %123, %125
%127 = load double, double* %66, align 8
store i64 %.unpack.unpack107, i64* %97, align 8
store i64 %.unpack.unpack67106, i64* %99, align 8
store i64 %.unpack.unpack69105, i64* %101, align 8
store i64 %.unpack.unpack71104, i64* %103, align 8
store i64 %.unpack.unpack73103, i64* %105, align 8
store i64 %.unpack.unpack75102, i64* %107, align 8
store i64 %.unpack.unpack77101, i64* %109, align 8
store i64 %.unpack.unpack79100, i64* %111, align 8
store i64 %.unpack.unpack8199, i64* %113, align 8
%128 = add nsw i64 %"#temp#5.0168", -1
%129 = getelementptr %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 %128
%130 = load double, double* %129, align 8
%131 = fmul double %126, %130
%132 = fadd double %127, %131
store double %132, double* %66, align 8
%133 = add nuw nsw i64 %"#temp#4.0167", 1
%134 = icmp eq i64 %133, 4
br i1 %134, label %L140.loopexit, label %L210.loopexit
}
define void @"julia_bar!_68370"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = alloca %SMatrix, align 8
%5 = alloca %SMatrix, align 8
%6 = call i8**** @jl_get_ptls_states() #3
%7 = alloca [13 x i8**], align 8
%.sub = getelementptr inbounds [13 x i8**], [13 x i8**]* %7, i64 0, i64 0
%8 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 2
%9 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 3
%10 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 4
%11 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 5
%12 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 6
%13 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 7
%14 = bitcast [13 x i8**]* %7 to i64*
%15 = bitcast i8*** %8 to i8*
call void @llvm.memset.p0i8.i64(i8* %15, i8 0, i64 88, i32 8, i1 false)
store i64 22, i64* %14, align 8
%16 = bitcast i8**** %6 to i64*
%17 = load i64, i64* %16, align 8
%18 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 1
%19 = bitcast i8*** %18 to i64*
store i64 %17, i64* %19, align 8
store i8*** %.sub, i8**** %6, align 8
%20 = getelementptr i8*, i8** %0, i64 13
%21 = bitcast i8** %20 to i8***
%22 = load i8**, i8*** %21, align 8
store i8** %22, i8*** %8, align 8
%23 = getelementptr i8*, i8** %0, i64 4
%24 = bitcast i8** %23 to i8***
%25 = load i8**, i8*** %24, align 8
store i8** %25, i8*** %9, align 8
store i8** %22, i8*** %10, align 8
%26 = call i8** @"jlsys_fill!_47835"(i8** %22, double 0.000000e+00)
%27 = bitcast i8** %22 to double**
%28 = bitcast i8** %25 to double**
%.unpack.elt24 = getelementptr inbounds i8*, i8** %1, i64 1
%.unpack.elt26 = getelementptr inbounds i8*, i8** %1, i64 2
%.unpack.elt30 = getelementptr inbounds i8*, i8** %1, i64 4
%.unpack.elt38 = getelementptr inbounds i8*, i8** %1, i64 8
%29 = bitcast i8** %.unpack.elt38 to i64*
%30 = load double*, double** %27, align 8
%31 = load double, double* %30, align 8
%32 = load double*, double** %28, align 8
%33 = load double, double* %32, align 8
%34 = bitcast i8** %1 to double*
%.unpack.unpack65180 = load double, double* %34, align 16
%35 = fmul double %33, %.unpack.unpack65180
%36 = fadd double %31, %35
store double %36, double* %30, align 8
%37 = getelementptr double, double* %32, i64 1
%38 = load double, double* %37, align 8
%39 = bitcast i8** %.unpack.elt24 to double*
%.unpack.unpack2564.1181 = load double, double* %39, align 8
%40 = fmul double %38, %.unpack.unpack2564.1181
%41 = fadd double %36, %40
store double %41, double* %30, align 8
%42 = getelementptr double, double* %32, i64 2
%43 = load double, double* %42, align 8
%44 = bitcast i8** %.unpack.elt26 to double*
%.unpack.unpack2763.2182 = load double, double* %44, align 16
%45 = fmul double %43, %.unpack.unpack2763.2182
%46 = fadd double %41, %45
store double %46, double* %30, align 8
store i8** %22, i8*** %11, align 8
store i8** %25, i8*** %12, align 8
store i8** %22, i8*** %13, align 8
%47 = and i8 %3, 1
%48 = icmp eq i8 %47, 0
br i1 %48, label %L315, label %if19
if19: ; preds = %top
%49 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 8
%50 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 9
%51 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 10
%52 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 11
%53 = getelementptr [13 x i8**], [13 x i8**]* %7, i64 0, i64 12
%54 = getelementptr i8*, i8** %0, i64 14
%55 = bitcast i8** %54 to i8***
%56 = load i8**, i8*** %55, align 8
store i8** %56, i8*** %49, align 8
%57 = bitcast i8** %56 to double**
%58 = load double*, double** %57, align 8
%59 = getelementptr i8*, i8** %0, i64 15
%60 = bitcast i8** %59 to i8***
%61 = load i8**, i8*** %60, align 8
store i8** %61, i8*** %50, align 8
store i8** %56, i8*** %51, align 8
%62 = call i8** @"julia_fill!_68088"(i8** %56, double 0.000000e+00)
store i8** %61, i8*** %52, align 8
%63 = call i8** @"julia_fill!_68088"(i8** %61, double 0.000000e+00)
%64 = getelementptr i8*, i8** %0, i64 7
%65 = bitcast i8** %64 to i8***
%66 = load i8**, i8*** %65, align 8
store i8** %66, i8*** %53, align 8
%67 = bitcast i8** %66 to double**
%68 = load double*, double** %67, align 8
%69 = getelementptr i8*, i8** %66, i64 3
%70 = bitcast i8** %69 to i64*
%71 = load i64, i64* %70, align 8
%72 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 4
%73 = getelementptr inbounds %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 8
%74 = bitcast double* %73 to i64*
%75 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 4
%76 = getelementptr inbounds %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 8
%77 = bitcast double* %76 to i64*
br label %if20
L315: ; preds = %top
%78 = load i64, i64* %19, align 8
store i64 %78, i64* %16, align 8
ret void
L140.loopexit: ; preds = %L210.loopexit
%79 = add nuw nsw i64 %"#temp#5.0168", 1
%80 = icmp eq i64 %79, 4
br i1 %80, label %L312, label %if20
if20: ; preds = %if19, %L140.loopexit
%"#temp#5.0168" = phi i64 [ 1, %if19 ], [ %79, %L140.loopexit ]
%81 = add nsw i64 %"#temp#5.0168", -1
br label %L210.loopexit
L312: ; preds = %L140.loopexit
%82 = load i64, i64* %19, align 8
store i64 %82, i64* %16, align 8
ret void
L210.loopexit: ; preds = %if20, %L210.loopexit
%"#temp#4.0167" = phi i64 [ 1, %if20 ], [ %105, %L210.loopexit ]
%83 = bitcast i8** %1 to <4 x i64>*
%84 = load <4 x i64>, <4 x i64>* %83, align 16
%85 = bitcast i8** %.unpack.elt30 to <4 x i64>*
%86 = load <4 x i64>, <4 x i64>* %85, align 16
%.unpack.unpack8199 = load i64, i64* %29, align 16
%87 = bitcast %SMatrix* %5 to <4 x i64>*
store <4 x i64> %84, <4 x i64>* %87, align 8
%88 = bitcast double* %72 to <4 x i64>*
store <4 x i64> %86, <4 x i64>* %88, align 8
store i64 %.unpack.unpack8199, i64* %74, align 8
%89 = add nsw i64 %"#temp#4.0167", -1
%90 = mul i64 %89, %71
%91 = add i64 %81, %90
%92 = getelementptr double, double* %68, i64 %91
%93 = load double, double* %92, align 8
%94 = getelementptr %SMatrix, %SMatrix* %5, i64 0, i32 0, i64 %89
%95 = load double, double* %94, align 8
%96 = fmul double %93, %95
%97 = load double, double* %58, align 8
%98 = bitcast %SMatrix* %4 to <4 x i64>*
store <4 x i64> %84, <4 x i64>* %98, align 8
%99 = bitcast double* %75 to <4 x i64>*
store <4 x i64> %86, <4 x i64>* %99, align 8
store i64 %.unpack.unpack8199, i64* %77, align 8
%100 = add nsw i64 %"#temp#5.0168", -1
%101 = getelementptr %SMatrix, %SMatrix* %4, i64 0, i32 0, i64 %100
%102 = load double, double* %101, align 8
%103 = fmul double %96, %102
%104 = fadd double %97, %103
store double %104, double* %58, align 8
%105 = add nuw nsw i64 %"#temp#4.0167", 1
%106 = icmp eq i64 %105, 4
br i1 %106, label %L140.loopexit, label %L210.loopexit
}
; ModuleID = 'bar!'
source_filename = "bar!"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin16.4.0"
%SMatrix = type { [9 x double] }
%jl_array_t = type { i8*, i64, i16 }
define void @"julia_bar!_68124"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = alloca double
%5 = alloca %SMatrix
%6 = alloca double
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca %SMatrix
%11 = alloca double
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca double
%22 = alloca %SMatrix
%23 = alloca double
%24 = alloca double
%25 = alloca i64
%26 = alloca i64
%27 = alloca i64
%28 = alloca i64
%29 = alloca i64
%30 = alloca i64
%bvn_derivs = alloca i8**
%sig_sf = alloca i8**
%wcs_jacobian = alloca i8**
%bvn_s_d = alloca i8**
%bvn_sig_d = alloca i8**
%bvn_ss_h = alloca i8**
%bvn_us_h = alloca i8**
%bvn_sigsig_h = alloca i8**
%31 = call i8*** @julia.gc_root_decl()
%32 = call i8*** @julia.gc_root_decl()
%33 = call i8*** @julia.gc_root_decl()
%34 = call i8*** @julia.gc_root_decl()
%35 = call i8*** @julia.gc_root_decl()
%36 = call i8*** @julia.gc_root_decl()
%37 = call i8*** @julia.gc_root_decl()
%38 = call i8*** @julia.gc_root_decl()
%39 = call i8*** @julia.gc_root_decl()
%40 = call i8*** @julia.gc_root_decl()
%41 = call i8*** @julia.gc_root_decl()
%42 = call i8*** @julia.gc_root_decl()
%43 = call i8*** @julia.gc_root_decl()
%44 = call i8*** @julia.gc_root_decl()
%45 = call i8*** @julia.gc_root_decl()
%46 = call i8*** @julia.gc_root_decl()
%47 = call i8*** @julia.gc_root_decl()
%48 = call i8**** @jl_get_ptls_states()
%49 = bitcast i8**** %48 to i8***
%50 = getelementptr i8**, i8*** %49, i64 3
%51 = bitcast i8*** %50 to i64**
%52 = load i64*, i64** %51, !tbaa !7
%53 = alloca double*
%54 = alloca i64
%55 = alloca i64
%sig_id = alloca i64
%"#temp#" = alloca i64
%shape_id = alloca i64
%"#temp#1" = alloca i64
%shape_id1 = alloca i64
%"#temp#2" = alloca i64
%shape_id2 = alloca i64
%inner_term = alloca double
%"#temp#3" = alloca i64
%sig_id2 = alloca i64
%"#temp#4" = alloca i64
%sig_id1 = alloca i64
%"#temp#5" = alloca i64
%56 = alloca double*
%57 = alloca i64
%58 = alloca i64
%59 = alloca double*
%60 = alloca i64
%61 = alloca i64
%62 = alloca double*
%63 = alloca i64
%64 = alloca i64
%"#temp#6" = alloca i8
%"#temp#7" = alloca i8
%"#temp#8" = alloca i8
%"#temp#9" = alloca double
%"#temp#10" = alloca i8
%"#temp#11" = alloca i8
%"#temp#12" = alloca i8
%"#temp#13" = alloca double
%"#temp#14" = alloca i8
%"#temp#15" = alloca i8
%"#temp#16" = alloca i8
%"#temp#17" = alloca double
store i8** %0, i8*** %bvn_derivs
store i8** %1, i8*** %sig_sf
store i8** %2, i8*** %wcs_jacobian
%65 = bitcast i8** %2 to %jl_array_t*
%66 = getelementptr inbounds %jl_array_t, %jl_array_t* %65, i32 0, i32 0
%67 = load i8*, i8** %66, !tbaa !7
%68 = bitcast i8* %67 to double*
store double* %68, double** %53, !tbaa !10
%69 = bitcast i8** %2 to %jl_array_t*
%70 = getelementptr inbounds %jl_array_t, %jl_array_t* %69, i32 0, i32 1
%71 = load i64, i64* %70, !tbaa !7
store i64 %71, i64* %54
%72 = bitcast i8** %2 to i8***
%73 = getelementptr i8**, i8*** %72, i32 3
%74 = bitcast i8*** %73 to i64*
%75 = load i64, i64* %74, !tbaa !7
store i64 %75, i64* %55
%76 = load i8**, i8*** %bvn_derivs, !dbg !13
%77 = bitcast i8** %76 to i8*, !dbg !13
%78 = getelementptr i8, i8* %77, i64 104, !dbg !13
%79 = bitcast i8* %78 to i8***, !dbg !13
%80 = load i8**, i8*** %79, !dbg !13, !tbaa !14
store i8** %80, i8*** %31, !dbg !13
store i8** %80, i8*** %bvn_s_d, !dbg !13
%81 = load i8**, i8*** %bvn_derivs, !dbg !18
%82 = bitcast i8** %81 to i8*, !dbg !18
%83 = getelementptr i8, i8* %82, i64 32, !dbg !18
%84 = bitcast i8* %83 to i8***, !dbg !18
%85 = load i8**, i8*** %84, !dbg !18, !tbaa !14
store i8** %85, i8*** %32, !dbg !18
store i8** %85, i8*** %bvn_sig_d, !dbg !18
%86 = load i8**, i8*** %bvn_s_d, !dbg !19
store i8** %86, i8*** %33, !dbg !19
%87 = call i8** @"jlsys_fill!_47835"(i8** %86, double 0.000000e+00), !dbg !19
store i8** %87, i8*** %34, !dbg !19
store i64 1, i64* %30, !dbg !20
store i64 1, i64* %"#temp#1", !dbg !20, !tbaa !21
br label %L29, !dbg !20
L29: ; preds = %L104, %top
%88 = load i64, i64* %30, !dbg !20, !tbaa !21
%89 = add i64 %88, 1, !dbg !20
%90 = load i64, i64* %"#temp#1", !dbg !20, !tbaa !21
%91 = icmp eq i64 %90, %89, !dbg !20
%92 = zext i1 %91 to i8, !dbg !20
%93 = xor i8 %92, 1, !dbg !20
%94 = trunc i8 %93 to i1, !dbg !20
%95 = xor i1 %94, true, !dbg !20
br i1 %95, label %L106, label %if, !dbg !20
if: ; preds = %L29
%96 = bitcast i64* %29 to i8*, !dbg !20
%97 = bitcast i64* %"#temp#1" to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %96, i8* %97, i64 8, i32 0, i1 false), !dbg !20, !tbaa !21
%98 = load i64, i64* %"#temp#1", !dbg !20, !tbaa !21
%99 = add i64 %98, 1, !dbg !20
store i64 %99, i64* %28, !dbg !20
%100 = bitcast i64* %29 to i8*, !dbg !20
%101 = bitcast i64* %shape_id to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %101, i8* %100, i32 8, i32 1, i1 false), !dbg !20, !tbaa !21
%102 = bitcast i64* %28 to i8*, !dbg !20
%103 = bitcast i64* %"#temp#1" to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %103, i8* %102, i32 8, i32 1, i1 false), !dbg !20, !tbaa !21
store i64 3, i64* %27, !dbg !20
store i64 1, i64* %"#temp#", !dbg !20, !tbaa !21
br label %L63, !dbg !20
L106: ; preds = %L29
%104 = trunc i8 %3 to i1, !dbg !23
%105 = xor i1 %104, true, !dbg !23
br i1 %105, label %L315, label %if19, !dbg !23
L63: ; preds = %L102, %if
%106 = load i64, i64* %27, !dbg !20, !tbaa !21
%107 = add i64 %106, 1, !dbg !20
%108 = load i64, i64* %"#temp#", !dbg !20, !tbaa !21
%109 = icmp eq i64 %108, %107, !dbg !20
%110 = zext i1 %109 to i8, !dbg !20
%111 = xor i8 %110, 1, !dbg !20
%112 = trunc i8 %111 to i1, !dbg !20
%113 = xor i1 %112, true, !dbg !20
br i1 %113, label %L104, label %if18, !dbg !20
if18: ; preds = %L63
%114 = bitcast i64* %26 to i8*, !dbg !20
%115 = bitcast i64* %"#temp#" to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %114, i8* %115, i64 8, i32 0, i1 false), !dbg !20, !tbaa !21
%116 = load i64, i64* %"#temp#", !dbg !20, !tbaa !21
%117 = add i64 %116, 1, !dbg !20
store i64 %117, i64* %25, !dbg !20
%118 = bitcast i64* %26 to i8*, !dbg !20
%119 = bitcast i64* %sig_id to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %119, i8* %118, i32 8, i32 1, i1 false), !dbg !20, !tbaa !21
%120 = bitcast i64* %25 to i8*, !dbg !20
%121 = bitcast i64* %"#temp#" to i8*, !dbg !20
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %121, i8* %120, i32 8, i32 1, i1 false), !dbg !20, !tbaa !21
%122 = load i8**, i8*** %bvn_s_d, !dbg !24
store i8** %122, i8*** %35, !dbg !24
%123 = load i64, i64* %shape_id, !dbg !24, !tbaa !21
%124 = sub i64 %123, 1, !dbg !24
%125 = mul i64 %124, 1, !dbg !24
%126 = add i64 0, %125, !dbg !24
%127 = bitcast i8** %122 to %jl_array_t*, !dbg !24
%128 = getelementptr inbounds %jl_array_t, %jl_array_t* %127, i32 0, i32 0, !dbg !24
%129 = load i8*, i8** %128, !dbg !24, !tbaa !10
%130 = bitcast i8* %129 to double*, !dbg !24
%131 = getelementptr double, double* %130, i64 %126, !dbg !24
%132 = load double, double* %131, !dbg !24, !tbaa !25
store double %132, double* %24, !dbg !24
%133 = load i8**, i8*** %bvn_sig_d, !dbg !24
store i8** %133, i8*** %36, !dbg !24
%134 = load i64, i64* %sig_id, !dbg !24, !tbaa !21
%135 = sub i64 %134, 1, !dbg !24
%136 = mul i64 %135, 1, !dbg !24
%137 = add i64 0, %136, !dbg !24
%138 = bitcast i8** %133 to %jl_array_t*, !dbg !24
%139 = getelementptr inbounds %jl_array_t, %jl_array_t* %138, i32 0, i32 0, !dbg !24
%140 = load i8*, i8** %139, !dbg !24, !tbaa !10
%141 = bitcast i8* %140 to double*, !dbg !24
%142 = getelementptr double, double* %141, i64 %137, !dbg !24
%143 = load double, double* %142, !dbg !24, !tbaa !25
store double %143, double* %23, !dbg !24
%144 = load i8**, i8*** %sig_sf, !dbg !24
%145 = bitcast i8** %144 to i8*, !dbg !24
%146 = getelementptr i8, i8* %145, i64 0, !dbg !24
%147 = bitcast i8* %146 to %SMatrix*, !dbg !24
%148 = getelementptr %SMatrix, %SMatrix* %147, i64 0, !dbg !24
%149 = load %SMatrix, %SMatrix* %148, align 16, !dbg !24, !tbaa !14
store %SMatrix %149, %SMatrix* %22, !dbg !24
br label %L86, !dbg !27
L104: ; preds = %L63
br label %L29, !dbg !24
L86: ; preds = %if18
%150 = bitcast %SMatrix* %22 to i8*, !dbg !32
%151 = getelementptr i8, i8* %150, i64 0, !dbg !32
%152 = load i64, i64* %shape_id, !dbg !32, !tbaa !21
%153 = sub i64 %152, 1, !dbg !32
%154 = mul i64 3, %153, !dbg !32
%155 = load i64, i64* %sig_id, !dbg !32, !tbaa !21
%156 = add i64 %155, %154, !dbg !32
%157 = sub i64 %156, 1, !dbg !32
%158 = bitcast i8* %151 to i8***, !dbg !32
%159 = bitcast i8*** %158 to double*, !dbg !32
%160 = getelementptr double, double* %159, i64 %157, !dbg !32
%161 = bitcast double* %160 to i8*, !dbg !32
%162 = bitcast double* %"#temp#9" to i8*, !dbg !32
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %162, i8* %161, i32 8, i32 1, i1 false), !dbg !32, !tbaa !21
br label %L98, !dbg !32
L98: ; preds = %L86
%163 = load double, double* %23, !dbg !24, !tbaa !21
%164 = load double, double* %"#temp#9", !dbg !24, !tbaa !21
%165 = fmul double %163, %164, !dbg !24
%166 = load double, double* %24, !dbg !24, !tbaa !21
%167 = fadd double %166, %165, !dbg !24
store double %167, double* %21, !dbg !24
%168 = load i8**, i8*** %bvn_s_d, !dbg !24
store i8** %168, i8*** %37, !dbg !24
%169 = load i64, i64* %shape_id, !dbg !24, !tbaa !21
%170 = sub i64 %169, 1, !dbg !24
%171 = mul i64 %170, 1, !dbg !24
%172 = add i64 0, %171, !dbg !24
%173 = bitcast i8** %168 to %jl_array_t*, !dbg !24
%174 = getelementptr inbounds %jl_array_t, %jl_array_t* %173, i32 0, i32 0, !dbg !24
%175 = load i8*, i8** %174, !dbg !24, !tbaa !10
%176 = load double, double* %21, !dbg !24, !tbaa !21
%177 = bitcast i8* %175 to double*, !dbg !24
%178 = getelementptr double, double* %177, i64 %172, !dbg !24
store double %176, double* %178, !dbg !24, !tbaa !25
br label %L102, !dbg !24
L102: ; preds = %L98
br label %L63, !dbg !24
if19: ; preds = %L106
%179 = load i8**, i8*** %bvn_derivs, !dbg !33
%180 = bitcast i8** %179 to i8*, !dbg !33
%181 = getelementptr i8, i8* %180, i64 112, !dbg !33
%182 = bitcast i8* %181 to i8***, !dbg !33
%183 = load i8**, i8*** %182, !dbg !33, !tbaa !14
store i8** %183, i8*** %38, !dbg !33
%184 = bitcast i8** %183 to %jl_array_t*, !dbg !33
%185 = getelementptr inbounds %jl_array_t, %jl_array_t* %184, i32 0, i32 0, !dbg !33
%186 = load i8*, i8** %185, !dbg !33, !tbaa !7
%187 = bitcast i8* %186 to double*, !dbg !33
store double* %187, double** %56, !dbg !33, !tbaa !10
%188 = bitcast i8** %183 to %jl_array_t*, !dbg !33
%189 = getelementptr inbounds %jl_array_t, %jl_array_t* %188, i32 0, i32 1, !dbg !33
%190 = load i64, i64* %189, !dbg !33, !tbaa !7
store i64 %190, i64* %57, !dbg !33
%191 = bitcast i8** %183 to i8***, !dbg !33
%192 = getelementptr i8**, i8*** %191, i32 3, !dbg !33
%193 = bitcast i8*** %192 to i64*, !dbg !33
%194 = load i64, i64* %193, !dbg !33, !tbaa !7
store i64 %194, i64* %58, !dbg !33
store i8** %183, i8*** %bvn_ss_h, !dbg !33
%195 = load i8**, i8*** %bvn_derivs, !dbg !34
%196 = bitcast i8** %195 to i8*, !dbg !34
%197 = getelementptr i8, i8* %196, i64 120, !dbg !34
%198 = bitcast i8* %197 to i8***, !dbg !34
%199 = load i8**, i8*** %198, !dbg !34, !tbaa !14
store i8** %199, i8*** %39, !dbg !34
%200 = bitcast i8** %199 to %jl_array_t*, !dbg !34
%201 = getelementptr inbounds %jl_array_t, %jl_array_t* %200, i32 0, i32 0, !dbg !34
%202 = load i8*, i8** %201, !dbg !34, !tbaa !7
%203 = bitcast i8* %202 to double*, !dbg !34
store double* %203, double** %59, !dbg !34, !tbaa !10
%204 = bitcast i8** %199 to %jl_array_t*, !dbg !34
%205 = getelementptr inbounds %jl_array_t, %jl_array_t* %204, i32 0, i32 1, !dbg !34
%206 = load i64, i64* %205, !dbg !34, !tbaa !7
store i64 %206, i64* %60, !dbg !34
%207 = bitcast i8** %199 to i8***, !dbg !34
%208 = getelementptr i8**, i8*** %207, i32 3, !dbg !34
%209 = bitcast i8*** %208 to i64*, !dbg !34
%210 = load i64, i64* %209, !dbg !34, !tbaa !7
store i64 %210, i64* %61, !dbg !34
store i8** %199, i8*** %bvn_us_h, !dbg !34
%211 = load i8**, i8*** %bvn_ss_h, !dbg !35
store i8** %211, i8*** %40, !dbg !35
%212 = call i8** @"julia_fill!_68088"(i8** %211, double 0.000000e+00), !dbg !35
store i8** %212, i8*** %41, !dbg !35
%213 = load i8**, i8*** %bvn_us_h, !dbg !36
store i8** %213, i8*** %42, !dbg !36
%214 = call i8** @"julia_fill!_68088"(i8** %213, double 0.000000e+00), !dbg !36
store i8** %214, i8*** %43, !dbg !36
%215 = load i8**, i8*** %bvn_derivs, !dbg !37
%216 = bitcast i8** %215 to i8*, !dbg !37
%217 = getelementptr i8, i8* %216, i64 56, !dbg !37
%218 = bitcast i8* %217 to i8***, !dbg !37
%219 = load i8**, i8*** %218, !dbg !37, !tbaa !14
store i8** %219, i8*** %44, !dbg !37
%220 = bitcast i8** %219 to %jl_array_t*, !dbg !37
%221 = getelementptr inbounds %jl_array_t, %jl_array_t* %220, i32 0, i32 0, !dbg !37
%222 = load i8*, i8** %221, !dbg !37, !tbaa !7
%223 = bitcast i8* %222 to double*, !dbg !37
store double* %223, double** %62, !dbg !37, !tbaa !10
%224 = bitcast i8** %219 to %jl_array_t*, !dbg !37
%225 = getelementptr inbounds %jl_array_t, %jl_array_t* %224, i32 0, i32 1, !dbg !37
%226 = load i64, i64* %225, !dbg !37, !tbaa !7
store i64 %226, i64* %63, !dbg !37
%227 = bitcast i8** %219 to i8***, !dbg !37
%228 = getelementptr i8**, i8*** %227, i32 3, !dbg !37
%229 = bitcast i8*** %228 to i64*, !dbg !37
%230 = load i64, i64* %229, !dbg !37, !tbaa !7
store i64 %230, i64* %64, !dbg !37
store i8** %219, i8*** %bvn_sigsig_h, !dbg !37
store i64 3, i64* %20, !dbg !38
store i64 1, i64* %"#temp#5", !dbg !38, !tbaa !21
br label %L140, !dbg !38
L315: ; preds = %L106
ret void, !dbg !39
L140: ; preds = %L310, %if19
%231 = load i64, i64* %20, !dbg !38, !tbaa !21
%232 = add i64 %231, 1, !dbg !38
%233 = load i64, i64* %"#temp#5", !dbg !38, !tbaa !21
%234 = icmp eq i64 %233, %232, !dbg !38
%235 = zext i1 %234 to i8, !dbg !38
%236 = xor i8 %235, 1, !dbg !38
%237 = trunc i8 %236 to i1, !dbg !38
%238 = xor i1 %237, true, !dbg !38
br i1 %238, label %L312, label %if20, !dbg !38
if20: ; preds = %L140
%239 = bitcast i64* %19 to i8*, !dbg !38
%240 = bitcast i64* %"#temp#5" to i8*, !dbg !38
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %239, i8* %240, i64 8, i32 0, i1 false), !dbg !38, !tbaa !21
%241 = load i64, i64* %"#temp#5", !dbg !38, !tbaa !21
%242 = add i64 %241, 1, !dbg !38
store i64 %242, i64* %18, !dbg !38
%243 = bitcast i64* %19 to i8*, !dbg !38
%244 = bitcast i64* %sig_id1 to i8*, !dbg !38
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %244, i8* %243, i32 8, i32 1, i1 false), !dbg !38, !tbaa !21
%245 = bitcast i64* %18 to i8*, !dbg !38
%246 = bitcast i64* %"#temp#5" to i8*, !dbg !38
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %246, i8* %245, i32 8, i32 1, i1 false), !dbg !38, !tbaa !21
store i64 3, i64* %17, !dbg !40
store i64 1, i64* %"#temp#4", !dbg !40, !tbaa !21
br label %L175, !dbg !40
L312: ; preds = %L140
ret void, !dbg !39
L175: ; preds = %L308, %if20
%247 = load i64, i64* %17, !dbg !40, !tbaa !21
%248 = add i64 %247, 1, !dbg !40
%249 = load i64, i64* %"#temp#4", !dbg !40, !tbaa !21
%250 = icmp eq i64 %249, %248, !dbg !40
%251 = zext i1 %250 to i8, !dbg !40
%252 = xor i8 %251, 1, !dbg !40
%253 = trunc i8 %252 to i1, !dbg !40
%254 = xor i1 %253, true, !dbg !40
br i1 %254, label %L310, label %if21, !dbg !40
if21: ; preds = %L175
%255 = bitcast i64* %16 to i8*, !dbg !40
%256 = bitcast i64* %"#temp#4" to i8*, !dbg !40
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %255, i8* %256, i64 8, i32 0, i1 false), !dbg !40, !tbaa !21
%257 = load i64, i64* %"#temp#4", !dbg !40, !tbaa !21
%258 = add i64 %257, 1, !dbg !40
store i64 %258, i64* %15, !dbg !40
%259 = bitcast i64* %16 to i8*, !dbg !40
%260 = bitcast i64* %sig_id2 to i8*, !dbg !40
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %260, i8* %259, i32 8, i32 1, i1 false), !dbg !40, !tbaa !21
%261 = bitcast i64* %15 to i8*, !dbg !40
%262 = bitcast i64* %"#temp#4" to i8*, !dbg !40
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %262, i8* %261, i32 8, i32 1, i1 false), !dbg !40, !tbaa !21
store i64 1, i64* %14, !dbg !41
store i64 1, i64* %"#temp#3", !dbg !41, !tbaa !21
br label %L210, !dbg !41
L310: ; preds = %L175
br label %L140, !dbg !39
L210: ; preds = %L306, %if21
%263 = load i64, i64* %14, !dbg !41, !tbaa !21
%264 = add i64 %263, 1, !dbg !41
%265 = load i64, i64* %"#temp#3", !dbg !41, !tbaa !21
%266 = icmp eq i64 %265, %264, !dbg !41
%267 = zext i1 %266 to i8, !dbg !41
%268 = xor i8 %267, 1, !dbg !41
%269 = trunc i8 %268 to i1, !dbg !41
%270 = xor i1 %269, true, !dbg !41
br i1 %270, label %L308, label %if22, !dbg !41
if22: ; preds = %L210
%271 = bitcast i64* %13 to i8*, !dbg !41
%272 = bitcast i64* %"#temp#3" to i8*, !dbg !41
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %271, i8* %272, i64 8, i32 0, i1 false), !dbg !41, !tbaa !21
%273 = load i64, i64* %"#temp#3", !dbg !41, !tbaa !21
%274 = add i64 %273, 1, !dbg !41
store i64 %274, i64* %12, !dbg !41
%275 = bitcast i64* %13 to i8*, !dbg !41
%276 = bitcast i64* %shape_id2 to i8*, !dbg !41
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %276, i8* %275, i32 8, i32 1, i1 false), !dbg !41, !tbaa !21
%277 = bitcast i64* %12 to i8*, !dbg !41
%278 = bitcast i64* %"#temp#3" to i8*, !dbg !41
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %278, i8* %277, i32 8, i32 1, i1 false), !dbg !41, !tbaa !21
%279 = load i8**, i8*** %bvn_sigsig_h, !dbg !42
store i8** %279, i8*** %45, !dbg !42
%280 = load i64, i64* %sig_id1, !dbg !42, !tbaa !21
%281 = load i64, i64* %sig_id2, !dbg !42, !tbaa !21
%282 = sub i64 %280, 1, !dbg !42
%283 = mul i64 %282, 1, !dbg !42
%284 = add i64 0, %283, !dbg !42
%285 = load i64, i64* %64, !dbg !42
%286 = mul i64 1, %285, !dbg !42
%287 = sub i64 %281, 1, !dbg !42
%288 = mul i64 %287, %286, !dbg !42
%289 = add i64 %284, %288, !dbg !42
%290 = load double*, double** %62, !dbg !42
%291 = getelementptr double, double* %290, i64 %289, !dbg !42
%292 = load double, double* %291, !dbg !42, !tbaa !25
store double %292, double* %11, !dbg !42
%293 = load i8**, i8*** %sig_sf, !dbg !42
%294 = bitcast i8** %293 to i8*, !dbg !42
%295 = getelementptr i8, i8* %294, i64 0, !dbg !42
%296 = bitcast i8* %295 to %SMatrix*, !dbg !42
%297 = getelementptr %SMatrix, %SMatrix* %296, i64 0, !dbg !42
%298 = load %SMatrix, %SMatrix* %297, align 16, !dbg !42, !tbaa !14
store %SMatrix %298, %SMatrix* %10, !dbg !42
br label %L232, !dbg !43
L308: ; preds = %L210
br label %L175, !dbg !39
L232: ; preds = %if22
%299 = bitcast %SMatrix* %10 to i8*, !dbg !47
%300 = getelementptr i8, i8* %299, i64 0, !dbg !47
%301 = load i64, i64* %shape_id2, !dbg !47, !tbaa !21
%302 = sub i64 %301, 1, !dbg !47
%303 = mul i64 3, %302, !dbg !47
%304 = load i64, i64* %sig_id2, !dbg !47, !tbaa !21
%305 = add i64 %304, %303, !dbg !47
%306 = sub i64 %305, 1, !dbg !47
%307 = bitcast i8* %300 to i8***, !dbg !47
%308 = bitcast i8*** %307 to double*, !dbg !47
%309 = getelementptr double, double* %308, i64 %306, !dbg !47
%310 = bitcast double* %309 to i8*, !dbg !47
%311 = bitcast double* %"#temp#13" to i8*, !dbg !47
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %311, i8* %310, i32 8, i32 1, i1 false), !dbg !47, !tbaa !21
br label %L244, !dbg !47
L244: ; preds = %L232
%312 = load double, double* %11, !dbg !42, !tbaa !21
%313 = load double, double* %"#temp#13", !dbg !42, !tbaa !21
%314 = fmul double %312, %313, !dbg !42
store double %314, double* %inner_term, !dbg !42, !tbaa !21
%315 = load i64, i64* %shape_id2, !dbg !48, !tbaa !21
%316 = icmp sle i64 1, %315, !dbg !48
%317 = zext i1 %316 to i8, !dbg !48
%318 = trunc i8 %317 to i1, !dbg !48
%319 = xor i1 %318, true, !dbg !48
%320 = load i64, i64* %shape_id2, !dbg !48, !tbaa !21
%321 = select i1 %319, i64 0, i64 %320, !dbg !48
store i64 %321, i64* %9, !dbg !48
store i64 1, i64* %"#temp#2", !dbg !48, !tbaa !21
br label %L266, !dbg !48
L266: ; preds = %L304, %L244
%322 = load i64, i64* %9, !dbg !48, !tbaa !21
%323 = add i64 %322, 1, !dbg !48
%324 = load i64, i64* %"#temp#2", !dbg !48, !tbaa !21
%325 = icmp eq i64 %324, %323, !dbg !48
%326 = zext i1 %325 to i8, !dbg !48
%327 = xor i8 %326, 1, !dbg !48
%328 = trunc i8 %327 to i1, !dbg !48
%329 = xor i1 %328, true, !dbg !48
br i1 %329, label %L306, label %if23, !dbg !48
if23: ; preds = %L266
%330 = bitcast i64* %8 to i8*, !dbg !48
%331 = bitcast i64* %"#temp#2" to i8*, !dbg !48
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %330, i8* %331, i64 8, i32 0, i1 false), !dbg !48, !tbaa !21
%332 = load i64, i64* %"#temp#2", !dbg !48, !tbaa !21
%333 = add i64 %332, 1, !dbg !48
store i64 %333, i64* %7, !dbg !48
%334 = bitcast i64* %8 to i8*, !dbg !48
%335 = bitcast i64* %shape_id1 to i8*, !dbg !48
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %335, i8* %334, i32 8, i32 1, i1 false), !dbg !48, !tbaa !21
%336 = bitcast i64* %7 to i8*, !dbg !48
%337 = bitcast i64* %"#temp#2" to i8*, !dbg !48
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %337, i8* %336, i32 8, i32 1, i1 false), !dbg !48, !tbaa !21
%338 = load i8**, i8*** %bvn_ss_h, !dbg !39
store i8** %338, i8*** %46, !dbg !39
%339 = load i64, i64* %shape_id1, !dbg !39, !tbaa !21
%340 = load i64, i64* %shape_id2, !dbg !39, !tbaa !21
%341 = sub i64 %339, 1, !dbg !39
%342 = mul i64 %341, 1, !dbg !39
%343 = add i64 0, %342, !dbg !39
%344 = load i64, i64* %58, !dbg !39
%345 = mul i64 1, %344, !dbg !39
%346 = sub i64 %340, 1, !dbg !39
%347 = mul i64 %346, %345, !dbg !39
%348 = add i64 %343, %347, !dbg !39
%349 = load double*, double** %56, !dbg !39
%350 = getelementptr double, double* %349, i64 %348, !dbg !39
%351 = load double, double* %350, !dbg !39, !tbaa !25
store double %351, double* %6, !dbg !39
%352 = load i8**, i8*** %sig_sf, !dbg !39
%353 = bitcast i8** %352 to i8*, !dbg !39
%354 = getelementptr i8, i8* %353, i64 0, !dbg !39
%355 = bitcast i8* %354 to %SMatrix*, !dbg !39
%356 = getelementptr %SMatrix, %SMatrix* %355, i64 0, !dbg !39
%357 = load %SMatrix, %SMatrix* %356, align 16, !dbg !39, !tbaa !14
store %SMatrix %357, %SMatrix* %5, !dbg !39
br label %L288, !dbg !49
L306: ; preds = %L266
br label %L210, !dbg !39
L288: ; preds = %if23
%358 = bitcast %SMatrix* %5 to i8*, !dbg !53
%359 = getelementptr i8, i8* %358, i64 0, !dbg !53
%360 = load i64, i64* %shape_id1, !dbg !53, !tbaa !21
%361 = sub i64 %360, 1, !dbg !53
%362 = mul i64 3, %361, !dbg !53
%363 = load i64, i64* %sig_id1, !dbg !53, !tbaa !21
%364 = add i64 %363, %362, !dbg !53
%365 = sub i64 %364, 1, !dbg !53
%366 = bitcast i8* %359 to i8***, !dbg !53
%367 = bitcast i8*** %366 to double*, !dbg !53
%368 = getelementptr double, double* %367, i64 %365, !dbg !53
%369 = bitcast double* %368 to i8*, !dbg !53
%370 = bitcast double* %"#temp#17" to i8*, !dbg !53
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %370, i8* %369, i32 8, i32 1, i1 false), !dbg !53, !tbaa !21
br label %L300, !dbg !53
L300: ; preds = %L288
%371 = load double, double* %inner_term, !dbg !39, !tbaa !21
%372 = load double, double* %"#temp#17", !dbg !39, !tbaa !21
%373 = fmul double %371, %372, !dbg !39
%374 = load double, double* %6, !dbg !39, !tbaa !21
%375 = fadd double %374, %373, !dbg !39
store double %375, double* %4, !dbg !39
%376 = load i8**, i8*** %bvn_ss_h, !dbg !39
store i8** %376, i8*** %47, !dbg !39
%377 = load i64, i64* %shape_id1, !dbg !39, !tbaa !21
%378 = load i64, i64* %shape_id2, !dbg !39, !tbaa !21
%379 = sub i64 %377, 1, !dbg !39
%380 = mul i64 %379, 1, !dbg !39
%381 = add i64 0, %380, !dbg !39
%382 = load i64, i64* %58, !dbg !39
%383 = mul i64 1, %382, !dbg !39
%384 = sub i64 %378, 1, !dbg !39
%385 = mul i64 %384, %383, !dbg !39
%386 = add i64 %381, %385, !dbg !39
%387 = load double*, double** %56, !dbg !39
%388 = load double, double* %4, !dbg !39, !tbaa !21
%389 = getelementptr double, double* %387, i64 %386, !dbg !39
store double %388, double* %389, !dbg !39, !tbaa !25
br label %L304, !dbg !39
L304: ; preds = %L300
br label %L266, !dbg !39
}
define i8** @"jlcall_bar!_68123"(i8**, i8***, i32) #0 {
top:
%3 = call i8**** @jl_get_ptls_states()
%4 = bitcast i8**** %3 to i8***
%5 = getelementptr i8**, i8*** %4, i64 3
%6 = bitcast i8*** %5 to i64**
%7 = load i64*, i64** %6, !tbaa !7
%8 = getelementptr i8**, i8*** %1, i64 0
%9 = load i8**, i8*** %8
%10 = getelementptr i8**, i8*** %1, i64 1
%11 = load i8**, i8*** %10
%12 = getelementptr i8**, i8*** %1, i64 2
%13 = load i8**, i8*** %12
%14 = getelementptr i8**, i8*** %1, i64 3
%15 = load i8**, i8*** %14
%16 = bitcast i8** %15 to i8*
%17 = load i8, i8* %16
call void @"julia_bar!_68124"(i8** %9, i8** %11, i8** %13, i8 %17)
ret i8** inttoptr (i64 4611883024 to i8**)
}
declare i8**** @jl_get_ptls_states()
declare i8*** @julia.gc_root_decl()
declare i8** @"jlsys_fill!_47835"(i8**, double)
declare void @julia.gc_root_kill(i8***)
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1) #1
declare i8** @"julia_fill!_68088"(i8**, double)
attributes #0 = { "no-frame-pointer-elim"="true" }
attributes #1 = { argmemonly nounwind }
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C89, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
!3 = !DIFile(filename: "/Users/andreasnoack/Desktop/testCeleste.jl", directory: ".")
!4 = !{}
!5 = distinct !DISubprogram(name: "bar!", linkageName: "julia_bar!_68124", scope: null, file: !3, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!6 = !DISubroutineType(types: !4)
!7 = !{!8, !8, i64 0, i64 1}
!8 = !{!"jtbaa_const", !9, i64 0}
!9 = !{!"jtbaa"}
!10 = !{!11, !11, i64 0}
!11 = !{!"jtbaa_arrayptr", !12, i64 0}
!12 = !{!"jtbaa_array", !9, i64 0}
!13 = !DILocation(line: 46, scope: !5)
!14 = !{!15, !15, i64 0}
!15 = !{!"jtbaa_mutab", !16, i64 0}
!16 = !{!"jtbaa_value", !17, i64 0}
!17 = !{!"jtbaa_data", !9, i64 0}
!18 = !DILocation(line: 47, scope: !5)
!19 = !DILocation(line: 49, scope: !5)
!20 = !DILocation(line: 50, scope: !5)
!21 = !{!22, !22, i64 0}
!22 = !{!"jtbaa_stack", !9, i64 0}
!23 = !DILocation(line: 54, scope: !5)
!24 = !DILocation(line: 51, scope: !5)
!25 = !{!26, !26, i64 0}
!26 = !{!"jtbaa_arraybuf", !17, i64 0}
!27 = !DILocation(line: 176, scope: !28, inlinedAt: !30)
!28 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!29 = !DIFile(filename: "/Users/andreasnoack/.julia/v0.6/StaticArrays/src/indexing.jl", directory: ".")
!30 = !DILocation(line: 174, scope: !31, inlinedAt: !24)
!31 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!32 = !DILocation(line: 180, scope: !28, inlinedAt: !30)
!33 = !DILocation(line: 57, scope: !5)
!34 = !DILocation(line: 58, scope: !5)
!35 = !DILocation(line: 60, scope: !5)
!36 = !DILocation(line: 61, scope: !5)
!37 = !DILocation(line: 72, scope: !5)
!38 = !DILocation(line: 73, scope: !5)
!39 = !DILocation(line: 79, scope: !5)
!40 = !DILocation(line: 74, scope: !5)
!41 = !DILocation(line: 75, scope: !5)
!42 = !DILocation(line: 76, scope: !5)
!43 = !DILocation(line: 176, scope: !44, inlinedAt: !45)
!44 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!45 = !DILocation(line: 174, scope: !46, inlinedAt: !42)
!46 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!47 = !DILocation(line: 180, scope: !44, inlinedAt: !45)
!48 = !DILocation(line: 78, scope: !5)
!49 = !DILocation(line: 176, scope: !50, inlinedAt: !51)
!50 = distinct !DISubprogram(name: "macro expansion;", linkageName: "macro expansion", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!51 = !DILocation(line: 174, scope: !52, inlinedAt: !39)
!52 = distinct !DISubprogram(name: "getindex;", linkageName: "getindex", scope: !29, file: !29, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!53 = !DILocation(line: 180, scope: !50, inlinedAt: !51)
; ModuleID = 'bar!'
source_filename = "bar!"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-darwin16.4.0"
%SMatrix = type { [9 x double] }
%jl_array_t = type { i8*, i64, i16 }
define void @"julia_bar!_68285"(i8**, i8**, i8**, i8) #0 !dbg !5 {
top:
%4 = alloca double
%5 = alloca %SMatrix
%6 = alloca double
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca %SMatrix
%11 = alloca double
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
%19 = alloca i64
%20 = alloca i64
%21 = alloca double
%22 = alloca %SMatrix
%23 = alloca double
%24 = alloca double
%25 = alloca i64
%26 = alloca i64
%27 = alloca i64
%28 = alloca i64
%29 = alloca i64
%30 = alloca i64
%bvn_derivs = alloca i8**
%sig_sf = alloca i8**
%wcs_jacobian = alloca i8**
%bvn_s_d = alloca i8**
%bvn_sig_d = alloca i8**
%bvn_ss_h = alloca i8**
%bvn_us_h = alloca i8**
%bvn_sigsig_h = alloca i8**
%31 = call i8*** @julia.gc_root_decl()
%32 = call i8*** @julia.gc_root_decl()
%33 = call i8*** @julia.gc_root_decl()
%34 = call i8*** @julia.gc_root_decl()
%35 = call i8*** @julia.gc_root_decl()
%36 = call i8*** @julia.gc_root_decl()
%37 = call i8*** @julia.gc_root_decl()
%38 = call i8*** @julia.gc_root_decl()
%39 = call i8*** @julia.gc_root_decl()
%40 = call i8*** @julia.gc_root_decl()
%41 = call i8*** @julia.gc_root_decl()
%42 = call i8*** @julia.gc_root_decl()
%43 = call i8*** @julia.gc_root_decl()
%44 = call i8*** @julia.gc_root_decl()
%45 = call i8*** @julia.gc_root_decl()
%46 = call i8*** @julia.gc_root_decl()
%47 = call i8*** @julia.gc_root_decl()
%48 = call i8**** @jl_get_ptls_states()
%49 = bitcast i8**** %48 to i8***
%50 = getelementptr i8**, i8*** %49, i64 3
%51 = bitcast i8*** %50 to i64**
%52 = load i64*, i64** %51
%53 = alloca double*
%54 = alloca i64
%55 = alloca i64
%sig_id = alloca i64
%"#temp#" = alloca i64
%shape_id = alloca i64
%"#temp#1" = alloca i64
%shape_id1 = alloca i64
%"#temp#2" = alloca i64
%shape_id2 = alloca i64
%inner_term = alloca double
%"#temp#3" = alloca i64
%sig_id2 = alloca i64
%"#temp#4" = alloca i64
%sig_id1 = alloca i64
%"#temp#5" = alloca i64
%56 = alloca double*
%57 = alloca i64
%58 = alloca i64
%59 = alloca double*
%60 = alloca i64
%61 = alloca i64
%62 = alloca double*
%63 = alloca i64
%64 = alloca i64
%"#temp#6" = alloca i8
%"#temp#7" = alloca i8
%"#temp#8" = alloca i8
%"#temp#9" = alloca double
%"#temp#10" = alloca i8
%"#temp#11" = alloca i8
%"#temp#12" = alloca i8
%"#temp#13" = alloca double
%"#temp#14" = alloca i8
%"#temp#15" = alloca i8
%"#temp#16" = alloca i8
%"#temp#17" = alloca double
store i8** %0, i8*** %bvn_derivs
store i8** %1, i8*** %sig_sf
store i8** %2, i8*** %wcs_jacobian
%65 = bitcast i8** %2 to %jl_array_t*
%66 = getelementptr inbounds %jl_array_t, %jl_array_t* %65, i32 0, i32 0
%67 = load i8*, i8** %66
%68 = bitcast i8* %67 to double*
store double* %68, double** %53
%69 = bitcast i8** %2 to %jl_array_t*
%70 = getelementptr inbounds %jl_array_t, %jl_array_t* %69, i32 0, i32 1
%71 = load i64, i64* %70
store i64 %71, i64* %54
%72 = bitcast i8** %2 to i8***
%73 = getelementptr i8**, i8*** %72, i32 3
%74 = bitcast i8*** %73 to i64*
%75 = load i64, i64* %74
store i64 %75, i64* %55
%76 = load i8**, i8*** %bvn_derivs
%77 = bitcast i8** %76 to i8*
%78 = getelementptr i8, i8* %77, i64 104
%79 = bitcast i8* %78 to i8***
%80 = load i8**, i8*** %79
store i8** %80, i8*** %31
store i8** %80, i8*** %bvn_s_d
%81 = load i8**, i8*** %bvn_derivs
%82 = bitcast i8** %81 to i8*
%83 = getelementptr i8, i8* %82, i64 32
%84 = bitcast i8* %83 to i8***
%85 = load i8**, i8*** %84
store i8** %85, i8*** %32
store i8** %85, i8*** %bvn_sig_d
%86 = load i8**, i8*** %bvn_s_d
store i8** %86, i8*** %33
%87 = call i8** @"jlsys_fill!_47835"(i8** %86, double 0.000000e+00)
store i8** %87, i8*** %34
store i64 1, i64* %30
store i64 1, i64* %"#temp#1"
br label %L29
L29: ; preds = %L104, %top
%88 = load i64, i64* %30
%89 = add i64 %88, 1
%90 = load i64, i64* %"#temp#1"
%91 = icmp eq i64 %90, %89
%92 = zext i1 %91 to i8
%93 = xor i8 %92, 1
%94 = trunc i8 %93 to i1
%95 = xor i1 %94, true
br i1 %95, label %L106, label %if
if: ; preds = %L29
%96 = bitcast i64* %29 to i8*
%97 = bitcast i64* %"#temp#1" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %96, i8* %97, i64 8, i32 0, i1 false)
%98 = load i64, i64* %"#temp#1"
%99 = add i64 %98, 1
store i64 %99, i64* %28
%100 = bitcast i64* %29 to i8*
%101 = bitcast i64* %shape_id to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %101, i8* %100, i32 8, i32 1, i1 false)
%102 = bitcast i64* %28 to i8*
%103 = bitcast i64* %"#temp#1" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %103, i8* %102, i32 8, i32 1, i1 false)
store i64 3, i64* %27
store i64 1, i64* %"#temp#"
br label %L63
L106: ; preds = %L29
%104 = trunc i8 %3 to i1
%105 = xor i1 %104, true
br i1 %105, label %L315, label %if19
L63: ; preds = %L102, %if
%106 = load i64, i64* %27
%107 = add i64 %106, 1
%108 = load i64, i64* %"#temp#"
%109 = icmp eq i64 %108, %107
%110 = zext i1 %109 to i8
%111 = xor i8 %110, 1
%112 = trunc i8 %111 to i1
%113 = xor i1 %112, true
br i1 %113, label %L104, label %if18
if18: ; preds = %L63
%114 = bitcast i64* %26 to i8*
%115 = bitcast i64* %"#temp#" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %114, i8* %115, i64 8, i32 0, i1 false)
%116 = load i64, i64* %"#temp#"
%117 = add i64 %116, 1
store i64 %117, i64* %25
%118 = bitcast i64* %26 to i8*
%119 = bitcast i64* %sig_id to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %119, i8* %118, i32 8, i32 1, i1 false)
%120 = bitcast i64* %25 to i8*
%121 = bitcast i64* %"#temp#" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %121, i8* %120, i32 8, i32 1, i1 false)
%122 = load i8**, i8*** %bvn_s_d
store i8** %122, i8*** %35
%123 = load i64, i64* %shape_id
%124 = sub i64 %123, 1
%125 = mul i64 %124, 1
%126 = add i64 0, %125
%127 = bitcast i8** %122 to %jl_array_t*
%128 = getelementptr inbounds %jl_array_t, %jl_array_t* %127, i32 0, i32 0
%129 = load i8*, i8** %128
%130 = bitcast i8* %129 to double*
%131 = getelementptr double, double* %130, i64 %126
%132 = load double, double* %131
store double %132, double* %24
%133 = load i8**, i8*** %bvn_sig_d
store i8** %133, i8*** %36
%134 = load i64, i64* %sig_id
%135 = sub i64 %134, 1
%136 = mul i64 %135, 1
%137 = add i64 0, %136
%138 = bitcast i8** %133 to %jl_array_t*
%139 = getelementptr inbounds %jl_array_t, %jl_array_t* %138, i32 0, i32 0
%140 = load i8*, i8** %139
%141 = bitcast i8* %140 to double*
%142 = getelementptr double, double* %141, i64 %137
%143 = load double, double* %142
store double %143, double* %23
%144 = load i8**, i8*** %sig_sf
%145 = bitcast i8** %144 to i8*
%146 = getelementptr i8, i8* %145, i64 0
%147 = bitcast i8* %146 to %SMatrix*
%148 = getelementptr %SMatrix, %SMatrix* %147, i64 0
%149 = load %SMatrix, %SMatrix* %148, align 16
store %SMatrix %149, %SMatrix* %22
br label %L86
L104: ; preds = %L63
br label %L29
L86: ; preds = %if18
%150 = bitcast %SMatrix* %22 to i8*
%151 = getelementptr i8, i8* %150, i64 0
%152 = load i64, i64* %shape_id
%153 = sub i64 %152, 1
%154 = mul i64 3, %153
%155 = load i64, i64* %sig_id
%156 = add i64 %155, %154
%157 = sub i64 %156, 1
%158 = bitcast i8* %151 to i8***
%159 = bitcast i8*** %158 to double*
%160 = getelementptr double, double* %159, i64 %157
%161 = bitcast double* %160 to i8*
%162 = bitcast double* %"#temp#9" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %162, i8* %161, i32 8, i32 1, i1 false)
br label %L98
L98: ; preds = %L86
%163 = load double, double* %23
%164 = load double, double* %"#temp#9"
%165 = fmul double %163, %164
%166 = load double, double* %24
%167 = fadd double %166, %165
store double %167, double* %21
%168 = load i8**, i8*** %bvn_s_d
store i8** %168, i8*** %37
%169 = load i64, i64* %shape_id
%170 = sub i64 %169, 1
%171 = mul i64 %170, 1
%172 = add i64 0, %171
%173 = bitcast i8** %168 to %jl_array_t*
%174 = getelementptr inbounds %jl_array_t, %jl_array_t* %173, i32 0, i32 0
%175 = load i8*, i8** %174
%176 = load double, double* %21
%177 = bitcast i8* %175 to double*
%178 = getelementptr double, double* %177, i64 %172
store double %176, double* %178
br label %L102
L102: ; preds = %L98
br label %L63
if19: ; preds = %L106
%179 = load i8**, i8*** %bvn_derivs
%180 = bitcast i8** %179 to i8*
%181 = getelementptr i8, i8* %180, i64 112
%182 = bitcast i8* %181 to i8***
%183 = load i8**, i8*** %182
store i8** %183, i8*** %38
%184 = bitcast i8** %183 to %jl_array_t*
%185 = getelementptr inbounds %jl_array_t, %jl_array_t* %184, i32 0, i32 0
%186 = load i8*, i8** %185
%187 = bitcast i8* %186 to double*
store double* %187, double** %56
%188 = bitcast i8** %183 to %jl_array_t*
%189 = getelementptr inbounds %jl_array_t, %jl_array_t* %188, i32 0, i32 1
%190 = load i64, i64* %189
store i64 %190, i64* %57
%191 = bitcast i8** %183 to i8***
%192 = getelementptr i8**, i8*** %191, i32 3
%193 = bitcast i8*** %192 to i64*
%194 = load i64, i64* %193
store i64 %194, i64* %58
store i8** %183, i8*** %bvn_ss_h
%195 = load i8**, i8*** %bvn_derivs
%196 = bitcast i8** %195 to i8*
%197 = getelementptr i8, i8* %196, i64 120
%198 = bitcast i8* %197 to i8***
%199 = load i8**, i8*** %198
store i8** %199, i8*** %39
%200 = bitcast i8** %199 to %jl_array_t*
%201 = getelementptr inbounds %jl_array_t, %jl_array_t* %200, i32 0, i32 0
%202 = load i8*, i8** %201
%203 = bitcast i8* %202 to double*
store double* %203, double** %59
%204 = bitcast i8** %199 to %jl_array_t*
%205 = getelementptr inbounds %jl_array_t, %jl_array_t* %204, i32 0, i32 1
%206 = load i64, i64* %205
store i64 %206, i64* %60
%207 = bitcast i8** %199 to i8***
%208 = getelementptr i8**, i8*** %207, i32 3
%209 = bitcast i8*** %208 to i64*
%210 = load i64, i64* %209
store i64 %210, i64* %61
store i8** %199, i8*** %bvn_us_h
%211 = load i8**, i8*** %bvn_ss_h
store i8** %211, i8*** %40
%212 = call i8** @"julia_fill!_68090"(i8** %211, double 0.000000e+00)
store i8** %212, i8*** %41
%213 = load i8**, i8*** %bvn_us_h
store i8** %213, i8*** %42
%214 = call i8** @"julia_fill!_68090"(i8** %213, double 0.000000e+00)
store i8** %214, i8*** %43
%215 = load i8**, i8*** %bvn_derivs
%216 = bitcast i8** %215 to i8*
%217 = getelementptr i8, i8* %216, i64 56
%218 = bitcast i8* %217 to i8***
%219 = load i8**, i8*** %218
store i8** %219, i8*** %44
%220 = bitcast i8** %219 to %jl_array_t*
%221 = getelementptr inbounds %jl_array_t, %jl_array_t* %220, i32 0, i32 0
%222 = load i8*, i8** %221
%223 = bitcast i8* %222 to double*
store double* %223, double** %62
%224 = bitcast i8** %219 to %jl_array_t*
%225 = getelementptr inbounds %jl_array_t, %jl_array_t* %224, i32 0, i32 1
%226 = load i64, i64* %225
store i64 %226, i64* %63
%227 = bitcast i8** %219 to i8***
%228 = getelementptr i8**, i8*** %227, i32 3
%229 = bitcast i8*** %228 to i64*
%230 = load i64, i64* %229
store i64 %230, i64* %64
store i8** %219, i8*** %bvn_sigsig_h
store i64 3, i64* %20
store i64 1, i64* %"#temp#5"
br label %L140
L315: ; preds = %L106
ret void
L140: ; preds = %L310, %if19
%231 = load i64, i64* %20
%232 = add i64 %231, 1
%233 = load i64, i64* %"#temp#5"
%234 = icmp eq i64 %233, %232
%235 = zext i1 %234 to i8
%236 = xor i8 %235, 1
%237 = trunc i8 %236 to i1
%238 = xor i1 %237, true
br i1 %238, label %L312, label %if20
if20: ; preds = %L140
%239 = bitcast i64* %19 to i8*
%240 = bitcast i64* %"#temp#5" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %239, i8* %240, i64 8, i32 0, i1 false)
%241 = load i64, i64* %"#temp#5"
%242 = add i64 %241, 1
store i64 %242, i64* %18
%243 = bitcast i64* %19 to i8*
%244 = bitcast i64* %sig_id1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %244, i8* %243, i32 8, i32 1, i1 false)
%245 = bitcast i64* %18 to i8*
%246 = bitcast i64* %"#temp#5" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %246, i8* %245, i32 8, i32 1, i1 false)
store i64 3, i64* %17
store i64 1, i64* %"#temp#4"
br label %L175
L312: ; preds = %L140
ret void
L175: ; preds = %L308, %if20
%247 = load i64, i64* %17
%248 = add i64 %247, 1
%249 = load i64, i64* %"#temp#4"
%250 = icmp eq i64 %249, %248
%251 = zext i1 %250 to i8
%252 = xor i8 %251, 1
%253 = trunc i8 %252 to i1
%254 = xor i1 %253, true
br i1 %254, label %L310, label %if21
if21: ; preds = %L175
%255 = bitcast i64* %16 to i8*
%256 = bitcast i64* %"#temp#4" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %255, i8* %256, i64 8, i32 0, i1 false)
%257 = load i64, i64* %"#temp#4"
%258 = add i64 %257, 1
store i64 %258, i64* %15
%259 = bitcast i64* %16 to i8*
%260 = bitcast i64* %sig_id2 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %260, i8* %259, i32 8, i32 1, i1 false)
%261 = bitcast i64* %15 to i8*
%262 = bitcast i64* %"#temp#4" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %262, i8* %261, i32 8, i32 1, i1 false)
store i64 1, i64* %14
store i64 1, i64* %"#temp#3"
br label %L210
L310: ; preds = %L175
br label %L140
L210: ; preds = %L306, %if21
%263 = load i64, i64* %14
%264 = add i64 %263, 1
%265 = load i64, i64* %"#temp#3"
%266 = icmp eq i64 %265, %264
%267 = zext i1 %266 to i8
%268 = xor i8 %267, 1
%269 = trunc i8 %268 to i1
%270 = xor i1 %269, true
br i1 %270, label %L308, label %if22
if22: ; preds = %L210
%271 = bitcast i64* %13 to i8*
%272 = bitcast i64* %"#temp#3" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %271, i8* %272, i64 8, i32 0, i1 false)
%273 = load i64, i64* %"#temp#3"
%274 = add i64 %273, 1
store i64 %274, i64* %12
%275 = bitcast i64* %13 to i8*
%276 = bitcast i64* %shape_id2 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %276, i8* %275, i32 8, i32 1, i1 false)
%277 = bitcast i64* %12 to i8*
%278 = bitcast i64* %"#temp#3" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %278, i8* %277, i32 8, i32 1, i1 false)
%279 = load i8**, i8*** %bvn_sigsig_h
store i8** %279, i8*** %45
%280 = load i64, i64* %sig_id1
%281 = load i64, i64* %sig_id2
%282 = sub i64 %280, 1
%283 = mul i64 %282, 1
%284 = add i64 0, %283
%285 = load i64, i64* %64
%286 = mul i64 1, %285
%287 = sub i64 %281, 1
%288 = mul i64 %287, %286
%289 = add i64 %284, %288
%290 = load double*, double** %62
%291 = getelementptr double, double* %290, i64 %289
%292 = load double, double* %291
store double %292, double* %11
%293 = load i8**, i8*** %sig_sf
%294 = bitcast i8** %293 to i8*
%295 = getelementptr i8, i8* %294, i64 0
%296 = bitcast i8* %295 to %SMatrix*
%297 = getelementptr %SMatrix, %SMatrix* %296, i64 0
%298 = load %SMatrix, %SMatrix* %297, align 16
store %SMatrix %298, %SMatrix* %10
br label %L232
L308: ; preds = %L210
br label %L175
L232: ; preds = %if22
%299 = bitcast %SMatrix* %10 to i8*
%300 = getelementptr i8, i8* %299, i64 0
%301 = load i64, i64* %shape_id2
%302 = sub i64 %301, 1
%303 = mul i64 3, %302
%304 = load i64, i64* %sig_id2
%305 = add i64 %304, %303
%306 = sub i64 %305, 1
%307 = bitcast i8* %300 to i8***
%308 = bitcast i8*** %307 to double*
%309 = getelementptr double, double* %308, i64 %306
%310 = bitcast double* %309 to i8*
%311 = bitcast double* %"#temp#13" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %311, i8* %310, i32 8, i32 1, i1 false)
br label %L244
L244: ; preds = %L232
%312 = load double, double* %11
%313 = load double, double* %"#temp#13"
%314 = fmul double %312, %313
store double %314, double* %inner_term
%315 = load i64, i64* %shape_id2
%316 = icmp sle i64 1, %315
%317 = zext i1 %316 to i8
%318 = trunc i8 %317 to i1
%319 = xor i1 %318, true
%320 = load i64, i64* %shape_id2
%321 = select i1 %319, i64 0, i64 %320
store i64 %321, i64* %9
store i64 1, i64* %"#temp#2"
br label %L266
L266: ; preds = %L304, %L244
%322 = load i64, i64* %9
%323 = add i64 %322, 1
%324 = load i64, i64* %"#temp#2"
%325 = icmp eq i64 %324, %323
%326 = zext i1 %325 to i8
%327 = xor i8 %326, 1
%328 = trunc i8 %327 to i1
%329 = xor i1 %328, true
br i1 %329, label %L306, label %if23
if23: ; preds = %L266
%330 = bitcast i64* %8 to i8*
%331 = bitcast i64* %"#temp#2" to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %330, i8* %331, i64 8, i32 0, i1 false)
%332 = load i64, i64* %"#temp#2"
%333 = add i64 %332, 1
store i64 %333, i64* %7
%334 = bitcast i64* %8 to i8*
%335 = bitcast i64* %shape_id1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %335, i8* %334, i32 8, i32 1, i1 false)
%336 = bitcast i64* %7 to i8*
%337 = bitcast i64* %"#temp#2" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %337, i8* %336, i32 8, i32 1, i1 false)
%338 = load i8**, i8*** %bvn_ss_h
store i8** %338, i8*** %46
%339 = load i64, i64* %shape_id1
%340 = load i64, i64* %shape_id2
%341 = sub i64 %339, 1
%342 = mul i64 %341, 1
%343 = add i64 0, %342
%344 = load i64, i64* %58
%345 = mul i64 1, %344
%346 = sub i64 %340, 1
%347 = mul i64 %346, %345
%348 = add i64 %343, %347
%349 = load double*, double** %56
%350 = getelementptr double, double* %349, i64 %348
%351 = load double, double* %350
store double %351, double* %6
%352 = load i8**, i8*** %sig_sf
%353 = bitcast i8** %352 to i8*
%354 = getelementptr i8, i8* %353, i64 0
%355 = bitcast i8* %354 to %SMatrix*
%356 = getelementptr %SMatrix, %SMatrix* %355, i64 0
%357 = load %SMatrix, %SMatrix* %356, align 16
store %SMatrix %357, %SMatrix* %5
br label %L288
L306: ; preds = %L266
br label %L210
L288: ; preds = %if23
%358 = bitcast %SMatrix* %5 to i8*
%359 = getelementptr i8, i8* %358, i64 0
%360 = load i64, i64* %shape_id1
%361 = sub i64 %360, 1
%362 = mul i64 3, %361
%363 = load i64, i64* %sig_id1
%364 = add i64 %363, %362
%365 = sub i64 %364, 1
%366 = bitcast i8* %359 to i8***
%367 = bitcast i8*** %366 to double*
%368 = getelementptr double, double* %367, i64 %365
%369 = bitcast double* %368 to i8*
%370 = bitcast double* %"#temp#17" to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %370, i8* %369, i32 8, i32 1, i1 false)
br label %L300
L300: ; preds = %L288
%371 = load double, double* %inner_term
%372 = load double, double* %"#temp#17"
%373 = fmul double %371, %372
%374 = load double, double* %6
%375 = fadd double %374, %373
store double %375, double* %4
%376 = load i8**, i8*** %bvn_ss_h
store i8** %376, i8*** %47
%377 = load i64, i64* %shape_id1
%378 = load i64, i64* %shape_id2
%379 = sub i64 %377, 1
%380 = mul i64 %379, 1
%381 = add i64 0, %380
%382 = load i64, i64* %58
%383 = mul i64 1, %382
%384 = sub i64 %378, 1
%385 = mul i64 %384, %383
%386 = add i64 %381, %385
%387 = load double*, double** %56
%388 = load double, double* %4
%389 = getelementptr double, double* %387, i64 %386
store double %388, double* %389
br label %L304
L304: ; preds = %L300
br label %L266
}
define i8** @"jlcall_bar!_68284"(i8**, i8***, i32) #0 {
top:
%3 = call i8**** @jl_get_ptls_states()
%4 = bitcast i8**** %3 to i8***
%5 = getelementptr i8**, i8*** %4, i64 3
%6 = bitcast i8*** %5 to i64**
%7 = load i64*, i64** %6
%8 = getelementptr i8**, i8*** %1, i64 0
%9 = load i8**, i8*** %8
%10 = getelementptr i8**, i8*** %1, i64 1
%11 = load i8**, i8*** %10
%12 = getelementptr i8**, i8*** %1, i64 2
%13 = load i8**, i8*** %12
%14 = getelementptr i8**, i8*** %1, i64 3
%15 = load i8**, i8*** %14
%16 = bitcast i8** %15 to i8*
%17 = load i8, i8* %16
call void @"julia_bar!_68285"(i8** %9, i8** %11, i8** %13, i8 %17)
ret i8** inttoptr (i64 4528554000 to i8**)
}
declare i8**** @jl_get_ptls_states()
declare i8*** @julia.gc_root_decl()
declare i8** @"jlsys_fill!_47835"(i8**, double)
declare void @julia.gc_root_kill(i8***)
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #1
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i32, i1) #1
declare i8** @"julia_fill!_68090"(i8**, double)
attributes #0 = { "no-frame-pointer-elim"="true" }
attributes #1 = { argmemonly nounwind }
!llvm.module.flags = !{!0, !1}
!llvm.dbg.cu = !{!2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 1, !"Debug Info Version", i32 3}
!2 = distinct !DICompileUnit(language: DW_LANG_C89, file: !3, producer: "julia", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
!3 = !DIFile(filename: "/Users/andreasnoack/Desktop/testCeleste.jl", directory: ".")
!4 = !{}
!5 = distinct !DISubprogram(name: "bar!", linkageName: "julia_bar!_68285", scope: null, file: !3, type: !6, isLocal: false, isDefinition: true, isOptimized: true, unit: !2, variables: !4)
!6 = !DISubroutineType(types: !4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment