On Thursday, November 5, 2015 at 4:07:05 PM UTC+1, Yichao Yu wrote:
>
> You can check with `code_llvm(innersimd,
> Tuple{Vector{Float32},Vector{Float32}})`
>
I tried it, and got this output, but don't know how to make sense of it
*julia> **code_llvm(innersimd, Tuple{Vector{Float32},Vector{Float32}})*
define float @julia_innersimd_21674(%jl_value_t*, %jl_value_t*) {
L:
%2 = bitcast %jl_value_t* %0 to %jl_array_t*
%3 = getelementptr inbounds %jl_array_t* %2, i32 0, i32 1
%4 = load i64* %3
%5 = icmp sle i64 1, %4
%6 = xor i1 %5, true
%7 = select i1 %6, i64 0, i64 %4
%8 = insertvalue %UnitRange.1 { i64 1, i64 undef }, i64 %7, 1
%9 = extractvalue %UnitRange.1 %8, 1
%10 = load %jl_value_t** @jl_overflow_exception
%11 = call { i64, i1 } @llvm.ssub.with.overflow.i64(i64 %9, i64 1)
%12 = extractvalue { i64, i1 } %11, 1
%13 = xor i1 %12, true
br i1 %13, label %pass, label %fail
fail: ; preds = %L
call void @jl_throw_with_superfluous_argument(%jl_value_t* %10, i32 67)
unreachable
pass: ; preds = %L
%14 = extractvalue { i64, i1 } %11, 0
%15 = call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %14, i64 1)
%16 = extractvalue { i64, i1 } %15, 1
%17 = xor i1 %16, true
br i1 %17, label %pass2, label %fail1
fail1: ; preds = %pass
call void @jl_throw_with_superfluous_argument(%jl_value_t* %10, i32 67)
unreachable
pass2: ; preds = %pass
%18 = extractvalue { i64, i1 } %15, 0
%19 = icmp slt i64 0, %18
%20 = xor i1 %19, true
br i1 %20, label %L11, label %L5.preheader
L5.preheader: ; preds = %pass2
%sunkaddr = ptrtoint %jl_value_t* %0 to i64
%sunkaddr19 = inttoptr i64 %sunkaddr to i8**
%21 = load i8** %sunkaddr19
%sunkaddr20 = ptrtoint %jl_value_t* %1 to i64
%sunkaddr21 = inttoptr i64 %sunkaddr20 to i8**
%22 = load i8** %sunkaddr21
br label %L5
L5: ; preds = %L5, %L5.
preheader
%lsr.iv16 = phi i8* [ %22, %L5.preheader ], [ %scevgep17, %L5 ]
%lsr.iv = phi i8* [ %21, %L5.preheader ], [ %scevgep, %L5 ]
%"##i#7153.0" = phi i64 [ %27, %L5 ], [ 0, %L5.preheader ]
%s.1 = phi float [ %26, %L5 ], [ 0.000000e+00, %L5.preheader ]
%lsr.iv1618 = bitcast i8* %lsr.iv16 to float*
%lsr.iv15 = bitcast i8* %lsr.iv to float*
%23 = load float* %lsr.iv15
%24 = load float* %lsr.iv1618
%25 = fmul float %23, %24
%26 = fadd fast float %s.1, %25
%27 = add i64 %"##i#7153.0", 1
%scevgep = getelementptr i8* %lsr.iv, i64 4
%scevgep17 = getelementptr i8* %lsr.iv16, i64 4
%28 = icmp slt i64 %27, %18
br i1 %28, label %L5, label %L11
L11: ; preds = %L5, %pass2
%s.3 = phi float [ 0.000000e+00, %pass2 ], [ %26, %L5 ]
ret float %s.3
}