void linetrend(float *x, float *y, int n, float *res) {
  float mean_x, mean_y, std_x, std_y;
  float sum_x, sum_y, sum_x2, sum_y2;
  float cov, sum_xy;
  int i;
  sum_x = 0;
  sum_y = 0;
  sum_x2 = 0;
  sum_y2 = 0;
  for (i = 1; i <= n; i++) {
    sum_x += x[i];
    sum_x2 += (x[i] * x[i]);
    sum_y += y[i];
    sum_y2 += (y[i] * y[i]);
  }
  mean_x = sum_x / n;
  mean_y = sum_y / n;
  std_x = sum_x2 / n - mean_x * mean_x;
  std_y = sum_y2 / n - mean_y * mean_y;
  if ((std_x <= 0) | (std_y <= 0)) {
    res[1] = 0;
    res[2] = 0;
    res[3] = 0;
  } else {
    std_x = sqrt(std_x);
    std_y = sqrt(std_y);
    cov = 0;
    sum_xy = 0;
    for (i = 1; i <= n; i++) {
      cov += (x[i] - mean_x) * (y[i] - mean_y);
      sum_xy += (x[i] * y[i]);
    }
    cov = cov / (n - 1);
    res[1] = cov / (std_x * std_y);
    res[2] = (sum_xy - sum_x * sum_y / n) / (sum_x2 - sum_x * sum_x / n);
    res[3] = mean_y - (res[2]) * mean_x;
  }
}


x86 assembly (clang, -O0):
<linetrend>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     11ee <linetrend+0xde>
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x3c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x40(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    114e <linetrend+0x3e>
movss  -0x34(%rbp),%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x38(%rbp),%xmm0
cvtsi2ssl -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x3c(%rbp),%xmm1
cvtsi2ssl -0x14(%rbp),%xmm0
divss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
movss  -0x24(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x40(%rbp),%xmm1
cvtsi2ssl -0x14(%rbp),%xmm0
divss  %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x2c(%rbp),%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
xorps  %xmm0,%xmm0
ucomiss -0x30(%rbp),%xmm0
setae  %cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     12cb <linetrend+0x1bb>
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x4(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,0xc(%rax)
jmp    1436 <linetrend+0x326>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     138c <linetrend+0x27c>
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x24(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
subss  -0x28(%rbp),%xmm2
movss  -0x44(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x48(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1310 <linetrend+0x200>
movss  -0x44(%rbp),%xmm0
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm1
mulss  -0x30(%rbp),%xmm1
divss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x48(%rbp),%xmm0
movss  -0x34(%rbp),%xmm1
mulss  -0x38(%rbp),%xmm1
cvtsi2ssl -0x14(%rbp),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
movss  -0x3c(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
mulss  -0x34(%rbp),%xmm2
cvtsi2ssl -0x14(%rbp),%xmm3
divss  %xmm3,%xmm2
subss  %xmm2,%xmm1
divss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x28(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  -0x24(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0xc(%rax)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<linetrend>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rcx,%r14
mov    %edx,%r15d
mov    %rsi,%r12
mov    %rdi,%rbx
xorps  %xmm0,%xmm0
xorps  %xmm7,%xmm7
xorps  %xmm6,%xmm6
test   %edx,%edx
jle    11e5 <linetrend+0xd5>
mov    %r15d,%eax
cmp    $0x1,%r15d
jne    1155 <linetrend+0x45>
xorps  %xmm7,%xmm7
mov    $0x1,%ecx
xorps  %xmm1,%xmm1
test   $0x1,%al
jne    11c8 <linetrend+0xb8>
jmp    11e5 <linetrend+0xd5>
mov    %eax,%edx
and    $0xfffffffe,%edx
neg    %rdx
xorps  %xmm7,%xmm7
mov    $0x1,%ecx
xorps  %xmm1,%xmm1
nopl   0x0(%rax,%rax,1)
movss  (%rbx,%rcx,4),%xmm2
movss  0x4(%rbx,%rcx,4),%xmm6
movss  (%r12,%rcx,4),%xmm3
movss  0x4(%r12,%rcx,4),%xmm4
movaps %xmm3,%xmm5
unpcklps %xmm2,%xmm5
addps  %xmm7,%xmm5
unpcklps %xmm3,%xmm2
mulps  %xmm2,%xmm2
addps  %xmm1,%xmm2
movaps %xmm4,%xmm7
unpcklps %xmm6,%xmm7
addps  %xmm5,%xmm7
unpcklps %xmm4,%xmm6
mulps  %xmm6,%xmm6
movaps %xmm6,%xmm1
addps  %xmm2,%xmm1
lea    (%rdx,%rcx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rcx
cmp    $0x1,%rsi
jne    1170 <linetrend+0x60>
addps  %xmm2,%xmm6
test   $0x1,%al
je     11e5 <linetrend+0xd5>
movss  (%rbx,%rcx,4),%xmm6
movss  (%r12,%rcx,4),%xmm2
movaps %xmm2,%xmm3
unpcklps %xmm6,%xmm3
addps  %xmm3,%xmm7
unpcklps %xmm2,%xmm6
mulps  %xmm6,%xmm6
addps  %xmm1,%xmm6
xorps  %xmm3,%xmm3
cvtsi2ss %r15d,%xmm3
movaps %xmm7,%xmm2
shufps $0xe1,%xmm7,%xmm2
shufps $0x0,%xmm3,%xmm3
divps  %xmm3,%xmm2
movaps %xmm6,%xmm4
divps  %xmm3,%xmm4
movaps %xmm2,%xmm1
mulps  %xmm2,%xmm1
subps  %xmm1,%xmm4
movaps %xmm4,%xmm1
cmpleps %xmm0,%xmm1
unpcklps %xmm1,%xmm1
movmskpd %xmm1,%eax
test   %eax,%eax
je     122c <linetrend+0x11c>
movq   $0x0,0x4(%r14)
xorps  %xmm1,%xmm1
jmp    135c <linetrend+0x24c>
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm4
movaps %xmm6,0x40(%rsp)
movaps %xmm7,0x30(%rsp)
movaps %xmm2,0x20(%rsp)
movaps %xmm3,0x10(%rsp)
jb     124f <linetrend+0x13f>
sqrtss %xmm4,%xmm11
jmp    1266 <linetrend+0x156>
movaps %xmm4,%xmm0
movaps %xmm4,(%rsp)
call   1030 <sqrtf@plt>
movaps (%rsp),%xmm4
movaps %xmm0,%xmm11
xorps  %xmm0,%xmm0
shufps $0x55,%xmm4,%xmm4
ucomiss %xmm0,%xmm4
jb     1278 <linetrend+0x168>
xorps  %xmm0,%xmm0
sqrtss %xmm4,%xmm0
jmp    128c <linetrend+0x17c>
movaps %xmm4,%xmm0
movss  %xmm11,(%rsp)
call   1030 <sqrtf@plt>
movss  (%rsp),%xmm11
movaps 0x40(%rsp),%xmm9
movaps 0x30(%rsp),%xmm8
movaps 0x20(%rsp),%xmm7
movaps 0x10(%rsp),%xmm10
movaps %xmm7,%xmm1
shufps $0x55,%xmm7,%xmm1
test   %r15d,%r15d
jle    12f9 <linetrend+0x1e9>
lea    0x1(%r15),%eax
xorps  %xmm4,%xmm4
mov    $0x1,%ecx
nopl   0x0(%rax,%rax,1)
movaps %xmm4,%xmm3
movss  (%rbx,%rcx,4),%xmm4
movaps %xmm4,%xmm5
subss  %xmm7,%xmm5
movss  (%r12,%rcx,4),%xmm6
movaps %xmm6,%xmm2
subss  %xmm1,%xmm2
unpcklps %xmm4,%xmm5
unpcklps %xmm6,%xmm2
mulps  %xmm5,%xmm2
movaps %xmm2,%xmm4
addps  %xmm3,%xmm4
add    $0x1,%rcx
cmp    %rcx,%rax
jne    12c0 <linetrend+0x1b0>
addps  %xmm3,%xmm2
jmp    12fc <linetrend+0x1ec>
xorps  %xmm2,%xmm2
add    $0xffffffff,%r15d
xorps  %xmm3,%xmm3
cvtsi2ss %r15d,%xmm3
movaps %xmm2,%xmm4
divss  %xmm3,%xmm4
mulss  %xmm0,%xmm11
divss  %xmm11,%xmm4
movss  %xmm4,0x4(%r14)
movaps %xmm8,%xmm0
shufps $0x55,%xmm8,%xmm0
mulps  %xmm8,%xmm0
divps  %xmm10,%xmm0
shufps $0x10,%xmm2,%xmm9
shufps $0xe2,%xmm2,%xmm9
subps  %xmm0,%xmm9
movaps %xmm9,%xmm0
shufps $0x55,%xmm9,%xmm0
divss  %xmm0,%xmm9
movss  %xmm9,0x8(%r14)
mulss  %xmm7,%xmm9
subss  %xmm9,%xmm1
movss  %xmm1,0xc(%r14)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @linetrend(float* %0, float* %1, i32 %2, float* %3) {
%5 = alloca float*
%6 = alloca float*
%7 = alloca i32
%8 = alloca float*
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca i32
store float* %0, float** %5
store float* %1, float** %6
store i32 %2, i32* %7
store float* %3, float** %8
store float 0.000000e+00, float* %13
store float 0.000000e+00, float* %14
store float 0.000000e+00, float* %15
store float 0.000000e+00, float* %16
store i32 1, i32* %19
br label %20
20: ; preds = %63, %4
%21 = load i32, i32* %19
%22 = load i32, i32* %7
%23 = icmp sle i32 %21, %22
br i1 %23, label %24, label %66
24: ; preds = %20
%25 = load float*, float** %5
%26 = load i32, i32* %19
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds float, float* %25, i64 %27
%29 = load float, float* %28
%30 = load float, float* %13
%31 = fadd float %30, %29
store float %31, float* %13
%32 = load float*, float** %5
%33 = load i32, i32* %19
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds float, float* %32, i64 %34
%36 = load float, float* %35
%37 = load float*, float** %5
%38 = load i32, i32* %19
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds float, float* %37, i64 %39
%41 = load float, float* %40
%42 = load float, float* %15
%43 = call float @llvm.fmuladd.f32(float %36, float %41, float %42)
store float %43, float* %15
%44 = load float*, float** %6
%45 = load i32, i32* %19
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds float, float* %44, i64 %46
%48 = load float, float* %47
%49 = load float, float* %14
%50 = fadd float %49, %48
store float %50, float* %14
%51 = load float*, float** %6
%52 = load i32, i32* %19
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds float, float* %51, i64 %53
%55 = load float, float* %54
%56 = load float*, float** %6
%57 = load i32, i32* %19
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %56, i64 %58
%60 = load float, float* %59
%61 = load float, float* %16
%62 = call float @llvm.fmuladd.f32(float %55, float %60, float %61)
store float %62, float* %16
br label %63
63: ; preds = %24
%64 = load i32, i32* %19
%65 = add nsw i32 %64, 1
store i32 %65, i32* %19
br label %20
66: ; preds = %20
%67 = load float, float* %13
%68 = load i32, i32* %7
%69 = sitofp i32 %68 to float
%70 = fdiv float %67, %69
store float %70, float* %9
%71 = load float, float* %14
%72 = load i32, i32* %7
%73 = sitofp i32 %72 to float
%74 = fdiv float %71, %73
store float %74, float* %10
%75 = load float, float* %15
%76 = load i32, i32* %7
%77 = sitofp i32 %76 to float
%78 = fdiv float %75, %77
%79 = load float, float* %9
%80 = load float, float* %9
%81 = fneg float %79
%82 = call float @llvm.fmuladd.f32(float %81, float %80, float %78)
store float %82, float* %11
%83 = load float, float* %16
%84 = load i32, i32* %7
%85 = sitofp i32 %84 to float
%86 = fdiv float %83, %85
%87 = load float, float* %10
%88 = load float, float* %10
%89 = fneg float %87
%90 = call float @llvm.fmuladd.f32(float %89, float %88, float %86)
store float %90, float* %12
%91 = load float, float* %11
%92 = fcmp ole float %91, 0.000000e+00
%93 = zext i1 %92 to i32
%94 = load float, float* %12
%95 = fcmp ole float %94, 0.000000e+00
%96 = zext i1 %95 to i32
%97 = or i32 %93, %96
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %106
99: ; preds = %66
%100 = load float*, float** %8
%101 = getelementptr inbounds float, float* %100, i64 1
store float 0.000000e+00, float* %101
%102 = load float*, float** %8
%103 = getelementptr inbounds float, float* %102, i64 2
store float 0.000000e+00, float* %103
%104 = load float*, float** %8
%105 = getelementptr inbounds float, float* %104, i64 3
store float 0.000000e+00, float* %105
br label %192
106: ; preds = %66
%107 = load float, float* %11
%108 = fpext float %107 to double
%109 = call double @sqrt(double %108)
%110 = fptrunc double %109 to float
store float %110, float* %11
%111 = load float, float* %12
%112 = fpext float %111 to double
%113 = call double @sqrt(double %112)
%114 = fptrunc double %113 to float
store float %114, float* %12
store float 0.000000e+00, float* %17
store float 0.000000e+00, float* %18
store i32 1, i32* %19
br label %115
115: ; preds = %148, %106
%116 = load i32, i32* %19
%117 = load i32, i32* %7
%118 = icmp sle i32 %116, %117
br i1 %118, label %119, label %151
119: ; preds = %115
%120 = load float*, float** %5
%121 = load i32, i32* %19
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds float, float* %120, i64 %122
%124 = load float, float* %123
%125 = load float, float* %9
%126 = fsub float %124, %125
%127 = load float*, float** %6
%128 = load i32, i32* %19
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds float, float* %127, i64 %129
%131 = load float, float* %130
%132 = load float, float* %10
%133 = fsub float %131, %132
%134 = load float, float* %17
%135 = call float @llvm.fmuladd.f32(float %126, float %133, float %134)
store float %135, float* %17
%136 = load float*, float** %5
%137 = load i32, i32* %19
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds float, float* %136, i64 %138
%140 = load float, float* %139
%141 = load float*, float** %6
%142 = load i32, i32* %19
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds float, float* %141, i64 %143
%145 = load float, float* %144
%146 = load float, float* %18
%147 = call float @llvm.fmuladd.f32(float %140, float %145, float %146)
store float %147, float* %18
br label %148
148: ; preds = %119
%149 = load i32, i32* %19
%150 = add nsw i32 %149, 1
store i32 %150, i32* %19
br label %115
151: ; preds = %115
%152 = load float, float* %17
%153 = load i32, i32* %7
%154 = sub nsw i32 %153, 1
%155 = sitofp i32 %154 to float
%156 = fdiv float %152, %155
store float %156, float* %17
%157 = load float, float* %17
%158 = load float, float* %11
%159 = load float, float* %12
%160 = fmul float %158, %159
%161 = fdiv float %157, %160
%162 = load float*, float** %8
%163 = getelementptr inbounds float, float* %162, i64 1
store float %161, float* %163
%164 = load float, float* %18
%165 = load float, float* %13
%166 = load float, float* %14
%167 = fmul float %165, %166
%168 = load i32, i32* %7
%169 = sitofp i32 %168 to float
%170 = fdiv float %167, %169
%171 = fsub float %164, %170
%172 = load float, float* %15
%173 = load float, float* %13
%174 = load float, float* %13
%175 = fmul float %173, %174
%176 = load i32, i32* %7
%177 = sitofp i32 %176 to float
%178 = fdiv float %175, %177
%179 = fsub float %172, %178
%180 = fdiv float %171, %179
%181 = load float*, float** %8
%182 = getelementptr inbounds float, float* %181, i64 2
store float %180, float* %182
%183 = load float, float* %10
%184 = load float*, float** %8
%185 = getelementptr inbounds float, float* %184, i64 2
%186 = load float, float* %185
%187 = load float, float* %9
%188 = fneg float %186
%189 = call float @llvm.fmuladd.f32(float %188, float %187, float %183)
%190 = load float*, float** %8
%191 = getelementptr inbounds float, float* %190, i64 3
store float %189, float* %191
br label %192
192: ; preds = %151, %99
ret void
}

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