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 }