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

}

 

Reply via email to