void testKnnEstimateQuery() {
  unsigned nObs;
  unsigned nDims;
  double *inputsP;
  double *targetsP;
  makeData(&nObs, &nDims, &inputsP, &targetsP);
  {
    double query[] = {1, 1};
    double estimate =
        Knn_estimate_query(nObs, nDims, inputsP, targetsP, 1, query);
    UnitTest_expect_eq_double((1.0), (estimate), (1e-10), __func__, 149);
    estimate = Knn_estimate_query(nObs, nDims, inputsP, targetsP, 3, query);
    UnitTest_expect_eq_double((1.0), (estimate), (1e-10), __func__, 152);
    estimate = Knn_estimate_query(nObs, nDims, inputsP, targetsP, 4, query);
    UnitTest_expect_eq_double((1.5), (estimate), (1e-10), __func__, 155);
  }
  {
    double query[] = {1.5, 1};
    double estimate =
        Knn_estimate_query(nObs, nDims, inputsP, targetsP, 1, query);
    UnitTest_expect_eq_double((1.0), (estimate), (1e-10), __func__, 164);
    estimate = Knn_estimate_query(nObs, nDims, inputsP, targetsP, 2, query);
    UnitTest_expect_eq_double((1.5), (estimate), (1e-10), __func__, 167);
    estimate = Knn_estimate_query(nObs, nDims, inputsP, targetsP, 3, query);
    UnitTest_expect_eq_double((1.0), (estimate), (1e-10), __func__, 170);
    estimate = Knn_estimate_query(nObs, nDims, inputsP, targetsP, 4, query);
    UnitTest_expect_eq_double((1.5), (estimate), (1e-10), __func__, 173);
  }
}


x86 assembly (clang, -O0):
<testKnnEstimateQuery>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
lea    -0x4(%rbp),%rdi
lea    -0x8(%rbp),%rsi
lea    -0x10(%rbp),%rdx
lea    -0x18(%rbp),%rcx
mov    $0x0,%al
call   1040 <makeData@plt>
mov    0xeca(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xec7(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x30(%rbp),%r9
mov    $0x1,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  0xe76(%rip),%xmm0
movsd  0xe66(%rip),%xmm2
lea    0xe97(%rip),%rdi
mov    $0x95,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x30(%rbp),%r9
mov    $0x3,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  0xe26(%rip),%xmm0
movsd  0xe16(%rip),%xmm2
lea    0xe47(%rip),%rdi
mov    $0x98,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x30(%rbp),%r9
mov    $0x4,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  0xdc6(%rip),%xmm0
movsd  0xdc6(%rip),%xmm2
lea    0xdf7(%rip),%rdi
mov    $0x9b,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xdd4(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xdd1(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x50(%rbp),%r9
mov    $0x1,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  0xd70(%rip),%xmm0
movsd  0xd60(%rip),%xmm2
lea    0xd91(%rip),%rdi
mov    $0xa4,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x50(%rbp),%r9
mov    $0x2,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  0xd10(%rip),%xmm0
movsd  0xd10(%rip),%xmm2
lea    0xd41(%rip),%rdi
mov    $0xa7,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x50(%rbp),%r9
mov    $0x3,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  0xcd0(%rip),%xmm0
movsd  0xcc0(%rip),%xmm2
lea    0xcf1(%rip),%rdi
mov    $0xaa,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
lea    -0x50(%rbp),%r9
mov    $0x4,%r8d
mov    $0x0,%al
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  0xc70(%rip),%xmm0
movsd  0xc70(%rip),%xmm2
lea    0xca1(%rip),%rdi
mov    $0xad,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<testKnnEstimateQuery>:
push   %r14
push   %rbx
sub    $0x38,%rsp
lea    0xc(%rsp),%rdi
lea    0x8(%rsp),%rsi
lea    0x18(%rsp),%rdx
lea    0x10(%rsp),%rcx
xor    %eax,%eax
call   1040 <makeData@plt>
movaps 0xec7(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
lea    0x20(%rsp),%rbx
mov    $0x1,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
cvtsi2sd %eax,%xmm1
lea    0xeb0(%rip),%r14
movsd  0xe68(%rip),%xmm0
movsd  0xe68(%rip),%xmm2
mov    %r14,%rdi
mov    $0x95,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
mov    $0x3,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xe20(%rip),%xmm0
movsd  0xe20(%rip),%xmm2
mov    %r14,%rdi
mov    $0x98,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
mov    $0x4,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xde8(%rip),%xmm0
movsd  0xdd8(%rip),%xmm2
mov    %r14,%rdi
mov    $0x9b,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
movaps 0xdea(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
lea    0x20(%rsp),%rbx
mov    $0x1,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xd7f(%rip),%xmm0
movsd  0xd7f(%rip),%xmm2
mov    %r14,%rdi
mov    $0xa4,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
mov    $0x2,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xd47(%rip),%xmm0
movsd  0xd37(%rip),%xmm2
mov    %r14,%rdi
mov    $0xa7,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
mov    $0x3,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xcef(%rip),%xmm0
movsd  0xcef(%rip),%xmm2
mov    %r14,%rdi
mov    $0xaa,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
mov    0xc(%rsp),%edi
mov    0x8(%rsp),%esi
mov    0x18(%rsp),%rdx
mov    0x10(%rsp),%rcx
mov    $0x4,%r8d
mov    %rbx,%r9
xor    %eax,%eax
call   1030 <Knn_estimate_query@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xcb7(%rip),%xmm0
movsd  0xca7(%rip),%xmm2
mov    %r14,%rdi
mov    $0xad,%esi
mov    $0x3,%al
call   1050 <UnitTest_expect_eq_double@plt>
add    $0x38,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@__const.testKnnEstimateQuery.query = [2 x double] [double 1.000000e+00, double 1.000000e+00]
@__func__.testKnnEstimateQuery = [21 x i8] c"testKnnEstimateQuery\00"
@__const.testKnnEstimateQuery.query.1 = [2 x double] [double 1.500000e+00, double 1.000000e+00]
define void @testKnnEstimateQuery() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca double*
%4 = alloca double*
%5 = alloca [2 x double]
%6 = alloca double
%7 = alloca [2 x double]
%8 = alloca double
%9 = call i32 (i32*, i32*, double**, double**, ...) bitcast (i32 (...)* @makeData to i32 (i32*, i32*, double**, double**, ...)*)(i32* %1, i32* %2, double** %3, double** %4)
%10 = bitcast [2 x double]* %5 to i8*
%11 = load i32, i32* %1
%12 = load i32, i32* %2
%13 = load double*, double** %3
%14 = load double*, double** %4
%15 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0
%16 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %11, i32 %12, double* %13, double* %14, i32 1, double* %15)
%17 = sitofp i32 %16 to double
store double %17, double* %6
%18 = load double, double* %6
%19 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %18, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 149)
%20 = load i32, i32* %1
%21 = load i32, i32* %2
%22 = load double*, double** %3
%23 = load double*, double** %4
%24 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0
%25 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %20, i32 %21, double* %22, double* %23, i32 3, double* %24)
%26 = sitofp i32 %25 to double
store double %26, double* %6
%27 = load double, double* %6
%28 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %27, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 152)
%29 = load i32, i32* %1
%30 = load i32, i32* %2
%31 = load double*, double** %3
%32 = load double*, double** %4
%33 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0
%34 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %29, i32 %30, double* %31, double* %32, i32 4, double* %33)
%35 = sitofp i32 %34 to double
store double %35, double* %6
%36 = load double, double* %6
%37 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %36, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 155)
%38 = bitcast [2 x double]* %7 to i8*
%39 = load i32, i32* %1
%40 = load i32, i32* %2
%41 = load double*, double** %3
%42 = load double*, double** %4
%43 = getelementptr inbounds [2 x double], [2 x double]* %7, i64 0, i64 0
%44 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %39, i32 %40, double* %41, double* %42, i32 1, double* %43)
%45 = sitofp i32 %44 to double
store double %45, double* %8
%46 = load double, double* %8
%47 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %46, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 164)
%48 = load i32, i32* %1
%49 = load i32, i32* %2
%50 = load double*, double** %3
%51 = load double*, double** %4
%52 = getelementptr inbounds [2 x double], [2 x double]* %7, i64 0, i64 0
%53 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %48, i32 %49, double* %50, double* %51, i32 2, double* %52)
%54 = sitofp i32 %53 to double
store double %54, double* %8
%55 = load double, double* %8
%56 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %55, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 167)
%57 = load i32, i32* %1
%58 = load i32, i32* %2
%59 = load double*, double** %3
%60 = load double*, double** %4
%61 = getelementptr inbounds [2 x double], [2 x double]* %7, i64 0, i64 0
%62 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %57, i32 %58, double* %59, double* %60, i32 3, double* %61)
%63 = sitofp i32 %62 to double
store double %63, double* %8
%64 = load double, double* %8
%65 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %64, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 170)
%66 = load i32, i32* %1
%67 = load i32, i32* %2
%68 = load double*, double** %3
%69 = load double*, double** %4
%70 = getelementptr inbounds [2 x double], [2 x double]* %7, i64 0, i64 0
%71 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %66, i32 %67, double* %68, double* %69, i32 4, double* %70)
%72 = sitofp i32 %71 to double
store double %72, double* %8
%73 = load double, double* %8
%74 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %73, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 173)
ret void
}

LLVM IR (-O2):
@__const.testKnnEstimateQuery.query = [2 x double] [double 1.000000e+00, double 1.000000e+00]
@__func__.testKnnEstimateQuery = [21 x i8] c"testKnnEstimateQuery\00"
@__const.testKnnEstimateQuery.query.1 = [2 x double] [double 1.500000e+00, double 1.000000e+00]
define void @testKnnEstimateQuery() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca double*
%4 = alloca double*
%5 = alloca [2 x double]
%6 = alloca [2 x double]
%7 = bitcast i32* %1 to i8*
%8 = bitcast i32* %2 to i8*
%9 = bitcast double** %3 to i8*
%10 = bitcast double** %4 to i8*
%11 = call i32 (i32*, i32*, double**, double**, ...) bitcast (i32 (...)* @makeData to i32 (i32*, i32*, double**, double**, ...)*)(i32* %1, i32* %2, double** %3, double** %4)
%12 = bitcast [2 x double]* %5 to i8*
%13 = load i32, i32* %1
%14 = load i32, i32* %2
%15 = load double*, double** %3
%16 = load double*, double** %4
%17 = getelementptr inbounds [2 x double], [2 x double]* %5, i64 0, i64 0
%18 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %13, i32 %14, double* %15, double* %16, i32 1, double* %17)
%19 = sitofp i32 %18 to double
%20 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %19, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 149)
%21 = load i32, i32* %1
%22 = load i32, i32* %2
%23 = load double*, double** %3
%24 = load double*, double** %4
%25 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %21, i32 %22, double* %23, double* %24, i32 3, double* %17)
%26 = sitofp i32 %25 to double
%27 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %26, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 152)
%28 = load i32, i32* %1
%29 = load i32, i32* %2
%30 = load double*, double** %3
%31 = load double*, double** %4
%32 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %28, i32 %29, double* %30, double* %31, i32 4, double* %17)
%33 = sitofp i32 %32 to double
%34 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %33, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 155)
%35 = bitcast [2 x double]* %6 to i8*
%36 = load i32, i32* %1
%37 = load i32, i32* %2
%38 = load double*, double** %3
%39 = load double*, double** %4
%40 = getelementptr inbounds [2 x double], [2 x double]* %6, i64 0, i64 0
%41 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %36, i32 %37, double* %38, double* %39, i32 1, double* %40)
%42 = sitofp i32 %41 to double
%43 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %42, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 164)
%44 = load i32, i32* %1
%45 = load i32, i32* %2
%46 = load double*, double** %3
%47 = load double*, double** %4
%48 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %44, i32 %45, double* %46, double* %47, i32 2, double* %40)
%49 = sitofp i32 %48 to double
%50 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %49, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 167)
%51 = load i32, i32* %1
%52 = load i32, i32* %2
%53 = load double*, double** %3
%54 = load double*, double** %4
%55 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %51, i32 %52, double* %53, double* %54, i32 3, double* %40)
%56 = sitofp i32 %55 to double
%57 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.000000e+00, double %56, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 170)
%58 = load i32, i32* %1
%59 = load i32, i32* %2
%60 = load double*, double** %3
%61 = load double*, double** %4
%62 = call i32 (i32, i32, double*, double*, i32, double*, ...) bitcast (i32 (...)* @Knn_estimate_query to i32 (i32, i32, double*, double*, i32, double*, ...)*)(i32 %58, i32 %59, double* %60, double* %61, i32 4, double* %40)
%63 = sitofp i32 %62 to double
%64 = call i32 (double, double, double, i8*, i32, ...) bitcast (i32 (...)* @UnitTest_expect_eq_double to i32 (double, double, double, i8*, i32, ...)*)(double 1.500000e+00, double %63, double 1.000000e-10, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__func__.testKnnEstimateQuery, i64 0, i64 0), i32 173)
ret void
}