This is not an answer to your problem but as a general tips. Try to avoid having code of the type a+b+c+d+e.... Instead break it up into (a+b+c) + (d+e+f) + ....
As an example:
julia> f(b) = b+b+b+b+b+b+b;
julia> @code_llvm f(b)
define i64 @julia_f_71732(i64) #0 {
top:
%1 = mul i64 %0, 7
ret i64 %1
}
Too many additions:
julia> g(b) = b+b+b+b+b+b+b+b;
julia> @code_llvm g(b)
define i64 @julia_g_71737(i64) #0 {
top:
%ptls_i8 = call i8* asm "movq %fs:0, $0;\0Aaddq $$-2672, $0", "=r,~{dirflag},~{fpsr},~{flags}"() #2
%ptls = bitcast i8* %ptls_i8 to %jl_value_t***
%1 = alloca [9 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 0
%2 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 2
%3 = bitcast %jl_value_t** %2 to i8*
call void @llvm.memset.p0i8.i32(i8* %3, i8 0, i32 56, i32 8, i1 false)
%4 = bitcast [9 x %jl_value_t*]* %1 to i64*
store i64 14, i64* %4, align 8
%5 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 1
%6 = bitcast i8* %ptls_i8 to i64*
%7 = load i64, i64* %6, align 8
%8 = bitcast %jl_value_t** %5 to i64*
store i64 %7, i64* %8, align 8
store %jl_value_t** %.sub, %jl_value_t*** %ptls, align 8
%9 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 8
%10 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 7
%11 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 6
%12 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 5
%13 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 4
%14 = getelementptr [9 x %jl_value_t*], [9 x %jl_value_t*]* %1, i64 0, i64 3
%15 = mul i64 %0, 3
store %jl_value_t* inttoptr (i64 140569349223256 to %jl_value_t*), %jl_value_t** %2, align 8
%16 = call %jl_value_t* @jl_box_int64(i64 signext %15)
store %jl_value_t* %16, %jl_value_t** %14, align 8
%17 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %17, %jl_value_t** %13, align 8
%18 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %18, %jl_value_t** %12, align 8
%19 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %19, %jl_value_t** %11, align 8
%20 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %20, %jl_value_t** %10, align 8
%21 = call %jl_value_t* @jl_box_int64(i64 signext %0)
store %jl_value_t* %21, %jl_value_t** %9, align 8
%22 = call %jl_value_t* @julia_afoldl_71392(%jl_value_t* inttoptr (i64 140569394913224 to %jl_value_t*), %jl_value_t** %2, i32 7)
%23 = bitcast %jl_value_t* %22 to i64*
%24 = load i64, i64* %23, align 16
%25 = load i64, i64* %8, align 8
store i64 %25, i64* %6, align 8
ret i64 %24
}
Break up with parenthesis:
julia> g2(b) = (b+b+b+b)+(b+b+b+b);
julia> @code_llvm g2(b)
define i64 @julia_g2_71744(i64) #0 {
top:
%1 = shl i64 %0, 3
ret i64 %1
}