void silk_warped_autocorrelation_FLP(float *corr, const float *input,
                                     const float warping, const int length,
                                     const int order) {
  int n, i;
  double tmp1, tmp2;
  double state[24 + 1] = {0};
  double C[24 + 1] = {0};
  ;
  for (n = 0; n < length; n++) {
    tmp1 = input[n];
    for (i = 0; i < order; i += 2) {
      tmp2 = state[i] + warping * (state[i + 1] - tmp1);
      state[i] = tmp1;
      C[i] += state[0] * tmp1;
      tmp1 = state[i + 1] + warping * (state[i + 2] - tmp2);
      state[i + 1] = tmp2;
      C[i + 1] += state[0] * tmp2;
    }
    state[order] = tmp1;
    C[order] += state[0] * tmp1;
  }
  for (i = 0; i < order + 1; i++) {
    corr[i] = (float)C[i];
  }
}


x86 assembly (clang, -O0):
<silk_warped_autocorrelation_FLP>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1d0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
lea    -0x100(%rbp),%rdi
xor    %esi,%esi
mov    $0xc8,%edx
call   1030 <memset@plt>
lea    -0x1d0(%rbp),%rdi
xor    %esi,%esi
mov    $0xc8,%edx
call   1030 <memset@plt>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12e1 <silk_warped_autocorrelation_FLP+0x1d1>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1296 <silk_warped_autocorrelation_FLP+0x186>
movslq -0x24(%rbp),%rax
movsd  -0x100(%rbp,%rax,8),%xmm1
ff ff
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x100(%rbp,%rax,8),%xmm2
ff ff
subsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movslq -0x24(%rbp),%rax
movsd  %xmm0,-0x100(%rbp,%rax,8)
ff ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movslq -0x24(%rbp),%rax
movsd  -0x1d0(%rbp,%rax,8),%xmm1
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp,%rax,8)
ff ff
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x100(%rbp,%rax,8),%xmm1
ff ff
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x24(%rbp),%eax
add    $0x2,%eax
cltq
movsd  -0x100(%rbp,%rax,8),%xmm2
ff ff
subsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
movsd  %xmm0,-0x100(%rbp,%rax,8)
ff ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x38(%rbp),%xmm2
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0x1d0(%rbp,%rax,8),%xmm1
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp,%rax,8)
ff ff
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    1184 <silk_warped_autocorrelation_FLP+0x74>
movsd  -0x30(%rbp),%xmm0
movslq -0x1c(%rbp),%rax
movsd  %xmm0,-0x100(%rbp,%rax,8)
ff ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm2
movslq -0x1c(%rbp),%rax
movsd  -0x1d0(%rbp,%rax,8),%xmm1
ff ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1d0(%rbp,%rax,8)
ff ff
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    115b <silk_warped_autocorrelation_FLP+0x4b>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1325 <silk_warped_autocorrelation_FLP+0x215>
movslq -0x24(%rbp),%rax
movsd  -0x1d0(%rbp,%rax,8),%xmm0
ff ff
cvtsd2ss %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12e8 <silk_warped_autocorrelation_FLP+0x1d8>
add    $0x1d0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<silk_warped_autocorrelation_FLP>:
sub    $0x118,%rsp
xorpd  %xmm1,%xmm1
movapd %xmm1,0x100(%rsp)
movapd %xmm1,0xf0(%rsp)
movapd %xmm1,0xe0(%rsp)
movapd %xmm1,0xd0(%rsp)
movapd %xmm1,0xc0(%rsp)
movapd %xmm1,0xb0(%rsp)
movapd %xmm1,0xa0(%rsp)
movapd %xmm1,0x90(%rsp)
movapd %xmm1,0x80(%rsp)
movapd %xmm1,0x70(%rsp)
movapd %xmm1,0x60(%rsp)
movapd %xmm1,0x50(%rsp)
movq   $0x0,0x110(%rsp)
movapd %xmm1,0x30(%rsp)
movapd %xmm1,0x20(%rsp)
movapd %xmm1,0x10(%rsp)
movapd %xmm1,(%rsp)
movapd %xmm1,-0x10(%rsp)
movapd %xmm1,-0x20(%rsp)
movapd %xmm1,-0x30(%rsp)
movapd %xmm1,-0x40(%rsp)
movapd %xmm1,-0x50(%rsp)
movapd %xmm1,-0x60(%rsp)
movapd %xmm1,-0x70(%rsp)
movapd %xmm1,-0x80(%rsp)
movq   $0x0,0x40(%rsp)
test   %edx,%edx
jle    129b <silk_warped_autocorrelation_FLP+0x19b>
cvtss2sd %xmm0,%xmm0
movslq %ecx,%r10
mov    %edx,%r8d
xorpd  %xmm1,%xmm1
xor    %r9d,%r9d
jmp    121f <silk_warped_autocorrelation_FLP+0x11f>
cs nopw 0x0(%rax,%rax,1)
nop
movaps %xmm2,%xmm3
movsd  %xmm3,0x50(%rsp,%r10,8)
movsd  0x50(%rsp),%xmm1
mulsd  %xmm1,%xmm3
addsd  -0x80(%rsp,%r10,8),%xmm3
movsd  %xmm3,-0x80(%rsp,%r10,8)
add    $0x1,%r9
cmp    %r8,%r9
je     129b <silk_warped_autocorrelation_FLP+0x19b>
movss  (%rsi,%r9,4),%xmm2
cvtss2sd %xmm2,%xmm2
test   %ecx,%ecx
jle    11f0 <silk_warped_autocorrelation_FLP+0xf0>
xor    %edx,%edx
nop
movsd  0x58(%rsp,%rdx,8),%xmm4
movsd  0x60(%rsp,%rdx,8),%xmm3
movapd %xmm4,%xmm5
subsd  %xmm2,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm1,%xmm5
movsd  %xmm2,0x50(%rsp,%rdx,8)
movsd  0x50(%rsp),%xmm1
movsd  %xmm5,0x58(%rsp,%rdx,8)
unpcklpd %xmm1,%xmm1
unpcklpd %xmm5,%xmm2
mulpd  %xmm1,%xmm2
addpd  -0x80(%rsp,%rdx,8),%xmm2
movapd %xmm2,-0x80(%rsp,%rdx,8)
lea    0x2(%rdx),%rax
movapd %xmm3,%xmm1
subsd  %xmm5,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm4,%xmm3
mov    %rax,%rdx
movapd %xmm3,%xmm2
cmp    %r10,%rax
jl     1230 <silk_warped_autocorrelation_FLP+0x130>
jmp    11f3 <silk_warped_autocorrelation_FLP+0xf3>
test   %ecx,%ecx
js     1358 <silk_warped_autocorrelation_FLP+0x258>
lea    0x1(%rcx),%eax
cmp    $0x3,%ecx
jae    12b2 <silk_warped_autocorrelation_FLP+0x1b2>
xor    %ecx,%ecx
jmp    1340 <silk_warped_autocorrelation_FLP+0x240>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdx
mov    %rdx,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rdx,%rdx
je     1360 <silk_warped_autocorrelation_FLP+0x260>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
cvtpd2ps -0x80(%rsp,%rsi,8),%xmm0
cvtpd2ps -0x70(%rsp,%rsi,8),%xmm1
unpcklpd %xmm1,%xmm0
movupd %xmm0,(%rdi,%rsi,4)
cvtpd2ps -0x60(%rsp,%rsi,8),%xmm0
cvtpd2ps -0x50(%rsp,%rsi,8),%xmm1
unpcklpd %xmm1,%xmm0
movupd %xmm0,0x10(%rdi,%rsi,4)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdx
jne    12e0 <silk_warped_autocorrelation_FLP+0x1e0>
test   $0x1,%r8b
je     1330 <silk_warped_autocorrelation_FLP+0x230>
cvtpd2ps -0x80(%rsp,%rsi,8),%xmm0
cvtpd2ps -0x70(%rsp,%rsi,8),%xmm1
unpcklpd %xmm1,%xmm0
movupd %xmm0,(%rdi,%rsi,4)
cmp    %rax,%rcx
je     1358 <silk_warped_autocorrelation_FLP+0x258>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x80(%rsp,%rcx,8),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1340 <silk_warped_autocorrelation_FLP+0x240>
add    $0x118,%rsp
ret
xor    %esi,%esi
test   $0x1,%r8b
jne    131b <silk_warped_autocorrelation_FLP+0x21b>
jmp    1330 <silk_warped_autocorrelation_FLP+0x230>

LLVM IR (-O0):
define void @silk_warped_autocorrelation_FLP(float* %0, float* %1, float %2, i32 %3, i32 %4) {
%6 = alloca float*
%7 = alloca float*
%8 = alloca float
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
%15 = alloca [25 x double]
%16 = alloca [25 x double]
store float* %0, float** %6
store float* %1, float** %7
store float %2, float* %8
store i32 %3, i32* %9
store i32 %4, i32* %10
%17 = bitcast [25 x double]* %15 to i8*
%18 = bitcast [25 x double]* %16 to i8*
store i32 0, i32* %11
br label %19
19: ; preds = %106, %5
%20 = load i32, i32* %11
%21 = load i32, i32* %9
%22 = icmp slt i32 %20, %21
br i1 %22, label %23, label %109
23: ; preds = %19
%24 = load float*, float** %7
%25 = load i32, i32* %11
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds float, float* %24, i64 %26
%28 = load float, float* %27
%29 = fpext float %28 to double
store double %29, double* %13
store i32 0, i32* %12
br label %30
30: ; preds = %90, %23
%31 = load i32, i32* %12
%32 = load i32, i32* %10
%33 = icmp slt i32 %31, %32
br i1 %33, label %34, label %93
34: ; preds = %30
%35 = load i32, i32* %12
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %36
%38 = load double, double* %37
%39 = load float, float* %8
%40 = fpext float %39 to double
%41 = load i32, i32* %12
%42 = add nsw i32 %41, 1
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %43
%45 = load double, double* %44
%46 = load double, double* %13
%47 = fsub double %45, %46
%48 = call double @llvm.fmuladd.f64(double %40, double %47, double %38)
store double %48, double* %14
%49 = load double, double* %13
%50 = load i32, i32* %12
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %51
store double %49, double* %52
%53 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 0
%54 = load double, double* %53
%55 = load double, double* %13
%56 = load i32, i32* %12
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [25 x double], [25 x double]* %16, i64 0, i64 %57
%59 = load double, double* %58
%60 = call double @llvm.fmuladd.f64(double %54, double %55, double %59)
store double %60, double* %58
%61 = load i32, i32* %12
%62 = add nsw i32 %61, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %63
%65 = load double, double* %64
%66 = load float, float* %8
%67 = fpext float %66 to double
%68 = load i32, i32* %12
%69 = add nsw i32 %68, 2
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %70
%72 = load double, double* %71
%73 = load double, double* %14
%74 = fsub double %72, %73
%75 = call double @llvm.fmuladd.f64(double %67, double %74, double %65)
store double %75, double* %13
%76 = load double, double* %14
%77 = load i32, i32* %12
%78 = add nsw i32 %77, 1
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %79
store double %76, double* %80
%81 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 0
%82 = load double, double* %81
%83 = load double, double* %14
%84 = load i32, i32* %12
%85 = add nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds [25 x double], [25 x double]* %16, i64 0, i64 %86
%88 = load double, double* %87
%89 = call double @llvm.fmuladd.f64(double %82, double %83, double %88)
store double %89, double* %87
br label %90
90: ; preds = %34
%91 = load i32, i32* %12
%92 = add nsw i32 %91, 2
store i32 %92, i32* %12
br label %30
93: ; preds = %30
%94 = load double, double* %13
%95 = load i32, i32* %10
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 %96
store double %94, double* %97
%98 = getelementptr inbounds [25 x double], [25 x double]* %15, i64 0, i64 0
%99 = load double, double* %98
%100 = load double, double* %13
%101 = load i32, i32* %10
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [25 x double], [25 x double]* %16, i64 0, i64 %102
%104 = load double, double* %103
%105 = call double @llvm.fmuladd.f64(double %99, double %100, double %104)
store double %105, double* %103
br label %106
106: ; preds = %93
%107 = load i32, i32* %11
%108 = add nsw i32 %107, 1
store i32 %108, i32* %11
br label %19
109: ; preds = %19
store i32 0, i32* %12
br label %110
110: ; preds = %125, %109
%111 = load i32, i32* %12
%112 = load i32, i32* %10
%113 = add nsw i32 %112, 1
%114 = icmp slt i32 %111, %113
br i1 %114, label %115, label %128
115: ; preds = %110
%116 = load i32, i32* %12
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds [25 x double], [25 x double]* %16, i64 0, i64 %117
%119 = load double, double* %118
%120 = fptrunc double %119 to float
%121 = load float*, float** %6
%122 = load i32, i32* %12
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float, float* %121, i64 %123
store float %120, float* %124
br label %125
125: ; preds = %115
%126 = load i32, i32* %12
%127 = add nsw i32 %126, 1
store i32 %127, i32* %12
br label %110
128: ; preds = %110
ret void
}

LLVM IR (-O2):
define void @silk_warped_autocorrelation_FLP(float* nocapture writeonly %0, float* nocapture %1, float %2, i32 %3, i32 %4) {
%6 = alloca [25 x double]
%7 = alloca [25 x double]
%8 = bitcast [25 x double]* %6 to i8*
%9 = bitcast [25 x double]* %7 to i8*
%10 = icmp sgt i32 %3, 0
br i1 %10, label %11, label %19
11: ; preds = %5
%12 = icmp sgt i32 %4, 0
%13 = fpext float %2 to double
%14 = getelementptr inbounds [25 x double], [25 x double]* %6, i64 0, i64 0
%15 = sext i32 %4 to i64
%16 = getelementptr inbounds [25 x double], [25 x double]* %6, i64 0, i64 %15
%17 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %15
%18 = zext i32 %3 to i64
br label %85
19: ; preds = %117, %5
%20 = icmp slt i32 %4, 0
br i1 %20, label %132, label %21
21: ; preds = %19
%22 = add nuw i32 %4, 1
%23 = zext i32 %22 to i64
%24 = icmp ult i32 %4, 3
br i1 %24, label %83, label %25
25: ; preds = %21
%26 = and i64 %23, 4294967292
%27 = add nsw i64 %26, -4
%28 = lshr exact i64 %27, 2
%29 = add nuw nsw i64 %28, 1
%30 = and i64 %29, 1
%31 = icmp eq i64 %27, 0
br i1 %31, label %65, label %32
32: ; preds = %25
%33 = and i64 %29, 9223372036854775806
br label %34
34: ; preds = %34, %32
%35 = phi i64 [ 0, %32 ], [ %62, %34 ]
%36 = phi i64 [ 0, %32 ], [ %63, %34 ]
%37 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %35
%38 = bitcast double* %37 to <2 x double>*
%39 = load <2 x double>, <2 x double>* %38
%40 = getelementptr inbounds double, double* %37, i64 2
%41 = bitcast double* %40 to <2 x double>*
%42 = load <2 x double>, <2 x double>* %41
%43 = fptrunc <2 x double> %39 to <2 x float>
%44 = fptrunc <2 x double> %42 to <2 x float>
%45 = getelementptr inbounds float, float* %0, i64 %35
%46 = bitcast float* %45 to <2 x float>*
store <2 x float> %43, <2 x float>* %46
%47 = getelementptr inbounds float, float* %45, i64 2
%48 = bitcast float* %47 to <2 x float>*
store <2 x float> %44, <2 x float>* %48
%49 = or i64 %35, 4
%50 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %49
%51 = bitcast double* %50 to <2 x double>*
%52 = load <2 x double>, <2 x double>* %51
%53 = getelementptr inbounds double, double* %50, i64 2
%54 = bitcast double* %53 to <2 x double>*
%55 = load <2 x double>, <2 x double>* %54
%56 = fptrunc <2 x double> %52 to <2 x float>
%57 = fptrunc <2 x double> %55 to <2 x float>
%58 = getelementptr inbounds float, float* %0, i64 %49
%59 = bitcast float* %58 to <2 x float>*
store <2 x float> %56, <2 x float>* %59
%60 = getelementptr inbounds float, float* %58, i64 2
%61 = bitcast float* %60 to <2 x float>*
store <2 x float> %57, <2 x float>* %61
%62 = add nuw i64 %35, 8
%63 = add i64 %36, 2
%64 = icmp eq i64 %63, %33
br i1 %64, label %65, label %34
65: ; preds = %34, %25
%66 = phi i64 [ 0, %25 ], [ %62, %34 ]
%67 = icmp eq i64 %30, 0
br i1 %67, label %81, label %68
68: ; preds = %65
%69 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %66
%70 = bitcast double* %69 to <2 x double>*
%71 = load <2 x double>, <2 x double>* %70
%72 = getelementptr inbounds double, double* %69, i64 2
%73 = bitcast double* %72 to <2 x double>*
%74 = load <2 x double>, <2 x double>* %73
%75 = fptrunc <2 x double> %71 to <2 x float>
%76 = fptrunc <2 x double> %74 to <2 x float>
%77 = getelementptr inbounds float, float* %0, i64 %66
%78 = bitcast float* %77 to <2 x float>*
store <2 x float> %75, <2 x float>* %78
%79 = getelementptr inbounds float, float* %77, i64 2
%80 = bitcast float* %79 to <2 x float>*
store <2 x float> %76, <2 x float>* %80
br label %81
81: ; preds = %65, %68
%82 = icmp eq i64 %26, %23
br i1 %82, label %132, label %83
83: ; preds = %21, %81
%84 = phi i64 [ 0, %21 ], [ %26, %81 ]
br label %124
85: ; preds = %11, %117
%86 = phi double [ 0.000000e+00, %11 ], [ %119, %117 ]
%87 = phi i64 [ 0, %11 ], [ %122, %117 ]
%88 = getelementptr inbounds float, float* %1, i64 %87
%89 = load float, float* %88
%90 = fpext float %89 to double
br i1 %12, label %91, label %117
91: ; preds = %85, %91
%92 = phi double [ %105, %91 ], [ %86, %85 ]
%93 = phi i64 [ %103, %91 ], [ 0, %85 ]
%94 = phi double [ %107, %91 ], [ %90, %85 ]
%95 = getelementptr inbounds [25 x double], [25 x double]* %6, i64 0, i64 %93
%96 = or i64 %93, 1
%97 = getelementptr inbounds [25 x double], [25 x double]* %6, i64 0, i64 %96
%98 = load double, double* %97
%99 = fsub double %98, %94
%100 = tail call double @llvm.fmuladd.f64(double %13, double %99, double %92)
store double %94, double* %95
%101 = load double, double* %14
%102 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %93
%103 = add nuw nsw i64 %93, 2
%104 = getelementptr inbounds [25 x double], [25 x double]* %6, i64 0, i64 %103
%105 = load double, double* %104
%106 = fsub double %105, %100
%107 = tail call double @llvm.fmuladd.f64(double %13, double %106, double %98)
store double %100, double* %97
%108 = bitcast double* %102 to <2 x double>*
%109 = load <2 x double>, <2 x double>* %108
%110 = insertelement <2 x double> poison, double %101, i64 0
%111 = shufflevector <2 x double> %110, <2 x double> poison, <2 x i32> zeroinitializer
%112 = insertelement <2 x double> poison, double %94, i64 0
%113 = insertelement <2 x double> %112, double %100, i64 1
%114 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %111, <2 x double> %113, <2 x double> %109)
%115 = bitcast double* %102 to <2 x double>*
store <2 x double> %114, <2 x double>* %115
%116 = icmp slt i64 %103, %15
br i1 %116, label %91, label %117
117: ; preds = %91, %85
%118 = phi double [ %90, %85 ], [ %107, %91 ]
store double %118, double* %16
%119 = load double, double* %14
%120 = load double, double* %17
%121 = tail call double @llvm.fmuladd.f64(double %119, double %118, double %120)
store double %121, double* %17
%122 = add nuw nsw i64 %87, 1
%123 = icmp eq i64 %122, %18
br i1 %123, label %19, label %85
124: ; preds = %83, %124
%125 = phi i64 [ %130, %124 ], [ %84, %83 ]
%126 = getelementptr inbounds [25 x double], [25 x double]* %7, i64 0, i64 %125
%127 = load double, double* %126
%128 = fptrunc double %127 to float
%129 = getelementptr inbounds float, float* %0, i64 %125
store float %128, float* %129
%130 = add nuw nsw i64 %125, 1
%131 = icmp eq i64 %130, %23
br i1 %131, label %132, label %124
132: ; preds = %124, %81, %19
ret void
}