double CCC(double *data1, double *data2, int n) {
  int i;
  double u, sum1, sum2, mean1, mean2, var1, var2, sxy, nx;
  double tiny = 1.0e-6;
  nx = (double)n;
  sum1 = sum2 = 0;
  for (i = 0; i < n; i++) {
    sum1 += data1[i];
    sum2 += data2[i];
  }
  mean1 = sum1 / nx;
  mean2 = sum2 / nx;
  sum1 = sum2 = 0;
  for (i = 0; i < n; i++) {
    sum1 += ((data1[i] - mean1) * (data1[i] - mean1));
    sum2 += ((data2[i] - mean2) * (data2[i] - mean2));
  }
  var1 = sum1 / nx;
  var2 = sum2 / nx;
  sum1 = 0;
  for (i = 0; i < n; i++) {
    sum1 += (data1[i] - mean1) * (data2[i] - mean2);
  }
  sxy = sum1 / nx;
  u = var1 + var2 + ((mean1 - mean2) * (mean1 - mean2));
  if (u < tiny)
    return 0;
  return (2.0 * sxy) / u;
}


x86 assembly (clang, -O0):
<CCC>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movsd  0xee9(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1185 <CCC+0x85>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    113d <CCC+0x3d>
movsd  -0x30(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1240 <CCC+0x140>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  -0x40(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  -0x48(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11ba <CCC+0xba>
movsd  -0x30(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    12bd <CCC+0x1bd>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  -0x48(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    126d <CCC+0x16d>
movsd  -0x30(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
subsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1318 <CCC+0x218>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    132f <CCC+0x22f>
movsd  0xce8(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<CCC>:
cvtsi2sd %edx,%xmm8
test   %edx,%edx
jle    1125 <CCC+0x25>
mov    %edx,%r9d
lea    -0x1(%r9),%r8
mov    %r9d,%r10d
and    $0x3,%r10d
cmp    $0x3,%r8
jae    113f <CCC+0x3f>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
jmp    119b <CCC+0x9b>
xorpd  %xmm3,%xmm3
xorpd  %xmm2,%xmm2
divsd  %xmm8,%xmm2
unpcklpd %xmm2,%xmm2
xorpd  %xmm0,%xmm0
jmp    130c <CCC+0x20c>
mov    %r9d,%eax
and    $0xfffffffc,%eax
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rdi,%rcx,8),%xmm3
movsd  0x8(%rdi,%rcx,8),%xmm4
movsd  0x10(%rdi,%rcx,8),%xmm5
movsd  0x18(%rdi,%rcx,8),%xmm2
movhpd (%rsi,%rcx,8),%xmm3
addpd  %xmm0,%xmm3
movhpd 0x8(%rsi,%rcx,8),%xmm4
addpd  %xmm3,%xmm4
movhpd 0x10(%rsi,%rcx,8),%xmm5
movhpd 0x18(%rsi,%rcx,8),%xmm2
addpd  %xmm4,%xmm5
addpd  %xmm5,%xmm2
add    $0x4,%rcx
movapd %xmm2,%xmm0
cmp    %rcx,%rax
jne    1150 <CCC+0x50>
test   %r10,%r10
je     11c8 <CCC+0xc8>
lea    (%rsi,%rcx,8),%r11
lea    (%rdi,%rcx,8),%rcx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movsd  (%rcx,%rax,8),%xmm0
movhpd (%r11,%rax,8),%xmm0
addpd  %xmm0,%xmm2
add    $0x1,%rax
cmp    %rax,%r10
jne    11b0 <CCC+0xb0>
movapd %xmm8,%xmm0
unpcklpd %xmm8,%xmm0
divpd  %xmm0,%xmm2
xorpd  %xmm3,%xmm3
test   %edx,%edx
jle    12cb <CCC+0x1cb>
test   %r8,%r8
je     12d1 <CCC+0x1d1>
mov    %r9d,%ecx
and    $0xfffffffe,%ecx
xorpd  %xmm4,%xmm4
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movsd  (%rdi,%rax,8),%xmm5
movsd  0x8(%rdi,%rax,8),%xmm0
movhpd (%rsi,%rax,8),%xmm5
subpd  %xmm2,%xmm5
mulpd  %xmm5,%xmm5
addpd  %xmm4,%xmm5
movhpd 0x8(%rsi,%rax,8),%xmm0
subpd  %xmm2,%xmm0
mulpd  %xmm0,%xmm0
movapd %xmm0,%xmm4
addpd  %xmm5,%xmm4
add    $0x2,%rax
cmp    %rax,%rcx
jne    1200 <CCC+0x100>
addpd  %xmm5,%xmm0
test   $0x1,%r9b
je     125b <CCC+0x15b>
movsd  (%rdi,%rax,8),%xmm0
movhpd (%rsi,%rax,8),%xmm0
subpd  %xmm2,%xmm0
mulpd  %xmm0,%xmm0
addpd  %xmm4,%xmm0
test   %edx,%edx
jle    130c <CCC+0x20c>
movapd %xmm2,%xmm4
unpckhpd %xmm2,%xmm4
test   %r8,%r8
je     12e6 <CCC+0x1e6>
mov    %r9d,%ecx
and    $0xfffffffe,%ecx
xorpd  %xmm5,%xmm5
xor    %eax,%eax
nopl   0x0(%rax)
movsd  (%rdi,%rax,8),%xmm6
movsd  0x8(%rdi,%rax,8),%xmm7
subsd  %xmm2,%xmm6
movsd  (%rsi,%rax,8),%xmm1
movsd  0x8(%rsi,%rax,8),%xmm3
subsd  %xmm4,%xmm1
mulsd  %xmm6,%xmm1
addsd  %xmm5,%xmm1
subsd  %xmm2,%xmm7
subsd  %xmm4,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm1,%xmm3
add    $0x2,%rax
movapd %xmm3,%xmm5
cmp    %rax,%rcx
jne    1280 <CCC+0x180>
test   $0x1,%r9b
jne    12f2 <CCC+0x1f2>
jmp    130c <CCC+0x20c>
xorpd  %xmm0,%xmm0
jmp    130c <CCC+0x20c>
xorpd  %xmm4,%xmm4
xor    %eax,%eax
test   $0x1,%r9b
jne    1245 <CCC+0x145>
jmp    125b <CCC+0x15b>
xorpd  %xmm3,%xmm3
xor    %eax,%eax
test   $0x1,%r9b
je     130c <CCC+0x20c>
movsd  (%rdi,%rax,8),%xmm1
subsd  %xmm2,%xmm1
movsd  (%rsi,%rax,8),%xmm5
subsd  %xmm4,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm5,%xmm3
movapd %xmm8,%xmm1
unpcklpd %xmm8,%xmm1
divpd  %xmm1,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
subsd  %xmm0,%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
movsd  0xcba(%rip),%xmm1
ucomisd %xmm2,%xmm1
ja     135d <CCC+0x25d>
divsd  %xmm8,%xmm3
addsd  %xmm3,%xmm3
divsd  %xmm2,%xmm3
movapd %xmm3,%xmm0
ret

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

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