void retrend(s, nt, dt) float *s, *dt;
int nt;
{
  float m0, b0, t, y;
  float c0 = 0.0;
  float c1 = 0.0;
  float c2 = 0.0;
  float c3 = 0.0;
  int it;
  for (it = 0; it < nt; it++) {
    t = it * (*dt);
    c0 = c0 + t;
    c1 = c1 + s[it];
    c2 = c2 + t * t;
    c3 = c3 + t * s[it];
  }
  m0 = (c0 * c1 - nt * c3) / (c0 * c0 - nt * c2);
  b0 = (c0 * c3 - c1 * c2) / (c0 * c0 - nt * c2);
  for (it = 0; it < nt; it++) {
    t = it * (*dt);
    y = m0 * t + b0;
    s[it] = s[it] - y;
  }
}


x86 assembly (clang, -O0):
<retrend>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11c8 <retrend+0xc8>
cvtsi2ssl -0x3c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x34(%rbp),%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x24(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x38(%rbp),%xmm1
movss  -0x24(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1136 <retrend+0x36>
movss  -0x2c(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
cvtsi2ssl -0xc(%rbp),%xmm1
mulss  -0x38(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x2c(%rbp),%xmm1
movss  -0x2c(%rbp),%xmm3
cvtsi2ssl -0xc(%rbp),%xmm2
mulss  -0x34(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  -0x38(%rbp),%xmm2
movss  -0x30(%rbp),%xmm1
mulss  -0x34(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x2c(%rbp),%xmm1
movss  -0x2c(%rbp),%xmm3
cvtsi2ssl -0xc(%rbp),%xmm2
mulss  -0x34(%rbp),%xmm2
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12ec <retrend+0x1ec>
cvtsi2ssl -0x3c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x1c(%rbp),%xmm0
movss  -0x24(%rbp),%xmm2
movss  -0x20(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1285 <retrend+0x185>
pop    %rbp
ret

x86 assembly (clang, -O2):
<retrend>:
mov    %esi,%r8d
test   %esi,%esi
jle    112a <retrend+0x2a>
movss  (%rdx),%xmm0
cmp    $0x1,%esi
jne    1138 <retrend+0x38>
xorps  %xmm1,%xmm1
xorps  %xmm2,%xmm2
xor    %ecx,%ecx
xorps  %xmm3,%xmm3
test   $0x1,%r8b
jne    11b9 <retrend+0xb9>
jmp    11e4 <retrend+0xe4>
xorps  %xmm4,%xmm4
xorps  %xmm3,%xmm3
xorps  %xmm2,%xmm2
jmp    11e4 <retrend+0xe4>
mov    %r8d,%r9d
and    $0xfffffffe,%r9d
xorps  %xmm1,%xmm1
xorps  %xmm2,%xmm2
xor    %ecx,%ecx
xorps  %xmm3,%xmm3
nopw   0x0(%rax,%rax,1)
xorps  %xmm5,%xmm5
cvtsi2ss %ecx,%xmm5
mulss  %xmm0,%xmm5
addss  %xmm5,%xmm3
movss  (%rdi,%rcx,4),%xmm4
movss  0x4(%rdi,%rcx,4),%xmm6
addss  %xmm4,%xmm2
movaps %xmm5,%xmm7
shufps $0x0,%xmm5,%xmm7
unpcklps %xmm4,%xmm5
mulps  %xmm7,%xmm5
addps  %xmm1,%xmm5
lea    0x1(%rcx),%eax
xorps  %xmm4,%xmm4
cvtsi2ss %eax,%xmm4
mulss  %xmm0,%xmm4
addss  %xmm4,%xmm3
addss  %xmm6,%xmm2
movaps %xmm4,%xmm1
shufps $0x0,%xmm4,%xmm1
unpcklps %xmm6,%xmm4
mulps  %xmm1,%xmm4
movaps %xmm4,%xmm1
addps  %xmm5,%xmm1
add    $0x2,%rcx
cmp    %r9,%rcx
jne    1150 <retrend+0x50>
addps  %xmm5,%xmm4
test   $0x1,%r8b
je     11e4 <retrend+0xe4>
xorps  %xmm4,%xmm4
cvtsi2ss %ecx,%xmm4
mulss  %xmm4,%xmm0
addss  %xmm0,%xmm3
movss  (%rdi,%rcx,4),%xmm4
addss  %xmm4,%xmm2
movaps %xmm0,%xmm5
shufps $0x0,%xmm0,%xmm5
unpcklps %xmm4,%xmm0
mulps  %xmm5,%xmm0
addps  %xmm1,%xmm0
movaps %xmm0,%xmm4
test   %esi,%esi
jle    1380 <retrend+0x280>
xorps  %xmm5,%xmm5
cvtsi2ss %esi,%xmm5
movaps %xmm4,%xmm0
shufps $0x55,%xmm4,%xmm0
movaps %xmm5,%xmm6
mulss  %xmm0,%xmm6
movaps %xmm3,%xmm10
mulss  %xmm2,%xmm10
subss  %xmm6,%xmm10
mulss  %xmm4,%xmm5
movaps %xmm3,%xmm6
mulss  %xmm3,%xmm6
subss  %xmm5,%xmm6
divss  %xmm6,%xmm10
mulss  %xmm2,%xmm4
mulss  %xmm3,%xmm0
subss  %xmm4,%xmm0
divss  %xmm6,%xmm0
cmp    $0x8,%esi
jb     1252 <retrend+0x152>
lea    0x4(%rdx),%rax
cmp    %rdi,%rax
jbe    12e7 <retrend+0x1e7>
lea    (%rdi,%r8,4),%rax
cmp    %rdx,%rax
jbe    12e7 <retrend+0x1e7>
xor    %ecx,%ecx
mov    %rcx,%rax
not    %rax
test   $0x1,%r8b
je     1286 <retrend+0x186>
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
mulss  (%rdx),%xmm1
mulss  %xmm10,%xmm1
addss  %xmm0,%xmm1
movss  (%rdi,%rcx,4),%xmm2
subss  %xmm1,%xmm2
movss  %xmm2,(%rdi,%rcx,4)
or     $0x1,%rcx
add    %r8,%rax
je     1380 <retrend+0x280>
nop
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
mulss  (%rdx),%xmm1
mulss  %xmm10,%xmm1
addss  %xmm0,%xmm1
movss  (%rdi,%rcx,4),%xmm2
subss  %xmm1,%xmm2
movss  0x4(%rdi,%rcx,4),%xmm1
movss  %xmm2,(%rdi,%rcx,4)
lea    0x1(%rcx),%eax
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
mulss  (%rdx),%xmm2
mulss  %xmm10,%xmm2
addss  %xmm0,%xmm2
subss  %xmm2,%xmm1
movss  %xmm1,0x4(%rdi,%rcx,4)
add    $0x2,%rcx
cmp    %r8,%rcx
jne    1290 <retrend+0x190>
jmp    1380 <retrend+0x280>
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
movaps %xmm10,%xmm2
shufps $0x0,%xmm10,%xmm2
movaps %xmm0,%xmm3
shufps $0x0,%xmm0,%xmm3
movss  (%rdx),%xmm4
shufps $0x0,%xmm4,%xmm4
lea    0x0(,%r8,4),%rax
and    $0xffffffffffffffe0,%rax
movdqa 0xce7(%rip),%xmm6
xor    %esi,%esi
movdqa 0xcec(%rip),%xmm8
movdqa 0xcf3(%rip),%xmm9
nopl   (%rax)
movdqa %xmm6,%xmm5
paddd  %xmm8,%xmm5
cvtdq2ps %xmm6,%xmm7
cvtdq2ps %xmm5,%xmm5
mulps  %xmm4,%xmm7
mulps  %xmm4,%xmm5
mulps  %xmm2,%xmm7
addps  %xmm3,%xmm7
mulps  %xmm2,%xmm5
addps  %xmm3,%xmm5
movups (%rdi,%rsi,1),%xmm1
subps  %xmm7,%xmm1
movups 0x10(%rdi,%rsi,1),%xmm7
subps  %xmm5,%xmm7
movups %xmm1,(%rdi,%rsi,1)
movups %xmm7,0x10(%rdi,%rsi,1)
paddd  %xmm9,%xmm6
add    $0x20,%rsi
cmp    %rsi,%rax
jne    1330 <retrend+0x230>
cmp    %r8,%rcx
jne    1254 <retrend+0x154>
ret

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

LLVM IR (-O2):
define void @retrend(float* nocapture %0, i32 %1, float* nocapture %2) {
%4 = icmp sgt i32 %1, 0
br i1 %4, label %5, label %67
5: ; preds = %3
%6 = load float, float* %2
%7 = zext i32 %1 to i64
%8 = and i64 %7, 1
%9 = icmp eq i32 %1, 1
br i1 %9, label %46, label %10
10: ; preds = %5
%11 = and i64 %7, 4294967294
br label %12
12: ; preds = %12, %10
%13 = phi i64 [ 0, %10 ], [ %41, %12 ]
%14 = phi float [ 0.000000e+00, %10 ], [ %36, %12 ]
%15 = phi float [ 0.000000e+00, %10 ], [ %33, %12 ]
%16 = phi <2 x float> [ zeroinitializer, %10 ], [ %40, %12 ]
%17 = phi i64 [ 0, %10 ], [ %42, %12 ]
%18 = trunc i64 %13 to i32
%19 = sitofp i32 %18 to float
%20 = fmul float %6, %19
%21 = fadd float %15, %20
%22 = getelementptr inbounds float, float* %0, i64 %13
%23 = load float, float* %22
%24 = fadd float %14, %23
%25 = insertelement <2 x float> poison, float %20, i64 0
%26 = shufflevector <2 x float> %25, <2 x float> poison, <2 x i32> zeroinitializer
%27 = insertelement <2 x float> %25, float %23, i64 1
%28 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %26, <2 x float> %27, <2 x float> %16)
%29 = or i64 %13, 1
%30 = trunc i64 %29 to i32
%31 = sitofp i32 %30 to float
%32 = fmul float %6, %31
%33 = fadd float %21, %32
%34 = getelementptr inbounds float, float* %0, i64 %29
%35 = load float, float* %34
%36 = fadd float %24, %35
%37 = insertelement <2 x float> poison, float %32, i64 0
%38 = shufflevector <2 x float> %37, <2 x float> poison, <2 x i32> zeroinitializer
%39 = insertelement <2 x float> %37, float %35, i64 1
%40 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %38, <2 x float> %39, <2 x float> %28)
%41 = add nuw nsw i64 %13, 2
%42 = add i64 %17, 2
%43 = icmp eq i64 %42, %11
br i1 %43, label %44, label %12
44: ; preds = %12
%45 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %38, <2 x float> %39, <2 x float> %28)
br label %46
46: ; preds = %44, %5
%47 = phi float [ undef, %5 ], [ %33, %44 ]
%48 = phi float [ undef, %5 ], [ %36, %44 ]
%49 = phi <2 x float> [ undef, %5 ], [ %45, %44 ]
%50 = phi i64 [ 0, %5 ], [ %41, %44 ]
%51 = phi float [ 0.000000e+00, %5 ], [ %36, %44 ]
%52 = phi float [ 0.000000e+00, %5 ], [ %33, %44 ]
%53 = phi <2 x float> [ zeroinitializer, %5 ], [ %40, %44 ]
%54 = icmp eq i64 %8, 0
br i1 %54, label %67, label %55
55: ; preds = %46
%56 = trunc i64 %50 to i32
%57 = sitofp i32 %56 to float
%58 = fmul float %6, %57
%59 = fadd float %52, %58
%60 = getelementptr inbounds float, float* %0, i64 %50
%61 = load float, float* %60
%62 = fadd float %51, %61
%63 = insertelement <2 x float> poison, float %58, i64 0
%64 = shufflevector <2 x float> %63, <2 x float> poison, <2 x i32> zeroinitializer
%65 = insertelement <2 x float> %63, float %61, i64 1
%66 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %64, <2 x float> %65, <2 x float> %53)
br label %67
67: ; preds = %55, %46, %3
%68 = phi float [ 0.000000e+00, %3 ], [ %47, %46 ], [ %59, %55 ]
%69 = phi float [ 0.000000e+00, %3 ], [ %48, %46 ], [ %62, %55 ]
%70 = phi <2 x float> [ zeroinitializer, %3 ], [ %49, %46 ], [ %66, %55 ]
%71 = sitofp i32 %1 to float
%72 = extractelement <2 x float> %70, i64 1
%73 = fneg float %72
%74 = fmul float %71, %73
%75 = tail call float @llvm.fmuladd.f32(float %68, float %69, float %74)
%76 = extractelement <2 x float> %70, i64 0
%77 = fneg float %76
%78 = fmul float %71, %77
%79 = tail call float @llvm.fmuladd.f32(float %68, float %68, float %78)
%80 = fdiv float %75, %79
%81 = fneg float %69
%82 = fmul float %76, %81
%83 = tail call float @llvm.fmuladd.f32(float %68, float %72, float %82)
%84 = fdiv float %83, %79
br i1 %4, label %85, label %174
85: ; preds = %67
%86 = zext i32 %1 to i64
%87 = icmp ult i32 %1, 8
br i1 %87, label %134, label %88
88: ; preds = %85
%89 = getelementptr float, float* %0, i64 %86
%90 = getelementptr float, float* %2, i64 1
%91 = icmp ugt float* %90, %0
%92 = icmp ugt float* %89, %2
%93 = and i1 %91, %92
br i1 %93, label %134, label %94
94: ; preds = %88
%95 = and i64 %86, 4294967288
%96 = insertelement <4 x float> poison, float %80, i64 0
%97 = shufflevector <4 x float> %96, <4 x float> poison, <4 x i32> zeroinitializer
%98 = insertelement <4 x float> poison, float %84, i64 0
%99 = shufflevector <4 x float> %98, <4 x float> poison, <4 x i32> zeroinitializer
%100 = insertelement <4 x float> poison, float %80, i64 0
%101 = shufflevector <4 x float> %100, <4 x float> poison, <4 x i32> zeroinitializer
%102 = insertelement <4 x float> poison, float %84, i64 0
%103 = shufflevector <4 x float> %102, <4 x float> poison, <4 x i32> zeroinitializer
%104 = load float, float* %2
%105 = insertelement <4 x float> poison, float %104, i64 0
%106 = shufflevector <4 x float> %105, <4 x float> poison, <4 x i32> zeroinitializer
%107 = insertelement <4 x float> poison, float %104, i64 0
%108 = shufflevector <4 x float> %107, <4 x float> poison, <4 x i32> zeroinitializer
br label %109
109: ; preds = %109, %94
%110 = phi i64 [ 0, %94 ], [ %129, %109 ]
%111 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %94 ], [ %130, %109 ]
%112 = add <4 x i32> %111, <i32 4, i32 4, i32 4, i32 4>
%113 = sitofp <4 x i32> %111 to <4 x float>
%114 = sitofp <4 x i32> %112 to <4 x float>
%115 = fmul <4 x float> %106, %113
%116 = fmul <4 x float> %108, %114
%117 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %97, <4 x float> %115, <4 x float> %99)
%118 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %101, <4 x float> %116, <4 x float> %103)
%119 = getelementptr inbounds float, float* %0, i64 %110
%120 = bitcast float* %119 to <4 x float>*
%121 = load <4 x float>, <4 x float>* %120
%122 = getelementptr inbounds float, float* %119, i64 4
%123 = bitcast float* %122 to <4 x float>*
%124 = load <4 x float>, <4 x float>* %123
%125 = fsub <4 x float> %121, %117
%126 = fsub <4 x float> %124, %118
%127 = bitcast float* %119 to <4 x float>*
store <4 x float> %125, <4 x float>* %127
%128 = bitcast float* %122 to <4 x float>*
store <4 x float> %126, <4 x float>* %128
%129 = add nuw i64 %110, 8
%130 = add <4 x i32> %111, <i32 8, i32 8, i32 8, i32 8>
%131 = icmp eq i64 %129, %95
br i1 %131, label %132, label %109
132: ; preds = %109
%133 = icmp eq i64 %95, %86
br i1 %133, label %174, label %134
134: ; preds = %88, %85, %132
%135 = phi i64 [ 0, %88 ], [ 0, %85 ], [ %95, %132 ]
%136 = xor i64 %135, -1
%137 = and i64 %86, 1
%138 = icmp eq i64 %137, 0
br i1 %138, label %149, label %139
139: ; preds = %134
%140 = trunc i64 %135 to i32
%141 = sitofp i32 %140 to float
%142 = load float, float* %2
%143 = fmul float %142, %141
%144 = tail call float @llvm.fmuladd.f32(float %80, float %143, float %84)
%145 = getelementptr inbounds float, float* %0, i64 %135
%146 = load float, float* %145
%147 = fsub float %146, %144
store float %147, float* %145
%148 = or i64 %135, 1
br label %149
149: ; preds = %139, %134
%150 = phi i64 [ %135, %134 ], [ %148, %139 ]
%151 = sub nsw i64 0, %86
%152 = icmp eq i64 %136, %151
br i1 %152, label %174, label %153
153: ; preds = %149, %153
%154 = phi i64 [ %172, %153 ], [ %150, %149 ]
%155 = trunc i64 %154 to i32
%156 = sitofp i32 %155 to float
%157 = load float, float* %2
%158 = fmul float %157, %156
%159 = tail call float @llvm.fmuladd.f32(float %80, float %158, float %84)
%160 = getelementptr inbounds float, float* %0, i64 %154
%161 = load float, float* %160
%162 = fsub float %161, %159
store float %162, float* %160
%163 = add nuw nsw i64 %154, 1
%164 = trunc i64 %163 to i32
%165 = sitofp i32 %164 to float
%166 = load float, float* %2
%167 = fmul float %166, %165
%168 = tail call float @llvm.fmuladd.f32(float %80, float %167, float %84)
%169 = getelementptr inbounds float, float* %0, i64 %163
%170 = load float, float* %169
%171 = fsub float %170, %168
store float %171, float* %169
%172 = add nuw nsw i64 %154, 2
%173 = icmp eq i64 %172, %86
br i1 %173, label %174, label %153
174: ; preds = %149, %153, %132, %67
ret void
}