void CCFD_Rx(double *pH, double *ph, int l, int l0) {
  int i, i0;
  if (l0 == l) {
    for (i = 0; i < l; i++)
      pH[i] += ph[i];
    return;
  }
  for (i0 = 0; i0 < l0 - 1; i0++) {
    i = i0 + i0;
    pH[i0] += ph[i] + ph[i + 1];
  }
  i = i0 + i0;
  pH[l0 - 1] += ph[i];
  if (i < l - 1)
    pH[l0 - 1] += ph[i + 1];
}


x86 assembly (clang, -O0):
<CCFD_Rx>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1163 <CCFD_Rx+0x63>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    115e <CCFD_Rx+0x5e>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1125 <CCFD_Rx+0x25>
jmp    122a <CCFD_Rx+0x12a>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11c3 <CCFD_Rx+0xc3>
mov    -0x20(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    116a <CCFD_Rx+0x6a>
mov    -0x20(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    122a <CCFD_Rx+0x12a>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
pop    %rbp
ret

x86 assembly (clang, -O2):
<CCFD_Rx>:
cmp    %edx,%ecx
jne    11bf <CCFD_Rx+0xbf>
test   %ecx,%ecx
jle    11be <CCFD_Rx+0xbe>
mov    %ecx,%r9d
cmp    $0x4,%ecx
jb     1132 <CCFD_Rx+0x32>
lea    (%rsi,%r9,8),%rax
cmp    %rdi,%rax
jbe    127f <CCFD_Rx+0x17f>
lea    (%rdi,%r9,8),%rax
cmp    %rsi,%rax
jbe    127f <CCFD_Rx+0x17f>
xor    %ecx,%ecx
mov    %rcx,%rax
not    %rax
add    %r9,%rax
mov    %r9,%rdx
and    $0x3,%rdx
je     1169 <CCFD_Rx+0x69>
cs nopw 0x0(%rax,%rax,1)
movsd  (%rsi,%rcx,8),%xmm0
addsd  (%rdi,%rcx,8),%xmm0
movsd  %xmm0,(%rdi,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdx
jne    1150 <CCFD_Rx+0x50>
cmp    $0x3,%rax
jb     11be <CCFD_Rx+0xbe>
nop
movsd  (%rsi,%rcx,8),%xmm0
addsd  (%rdi,%rcx,8),%xmm0
movsd  %xmm0,(%rdi,%rcx,8)
movsd  0x8(%rsi,%rcx,8),%xmm0
addsd  0x8(%rdi,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rdi,%rcx,8)
movsd  0x10(%rsi,%rcx,8),%xmm0
addsd  0x10(%rdi,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rdi,%rcx,8)
movsd  0x18(%rsi,%rcx,8),%xmm0
addsd  0x18(%rdi,%rcx,8),%xmm0
movsd  %xmm0,0x18(%rdi,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r9
jne    1170 <CCFD_Rx+0x70>
ret
lea    -0x1(%rcx),%r8d
xor    %eax,%eax
cmp    $0x2,%ecx
jl     13cb <CCFD_Rx+0x2cb>
mov    %r8d,%r9d
cmp    $0x4,%r8d
jb     11f7 <CCFD_Rx+0xf7>
mov    %r9,%rax
shl    $0x4,%rax
add    %rsi,%rax
cmp    %rdi,%rax
jbe    134c <CCFD_Rx+0x24c>
lea    (%rdi,%r9,8),%rax
cmp    %rsi,%rax
jbe    134c <CCFD_Rx+0x24c>
xor    %r10d,%r10d
mov    %r10,%rax
not    %rax
test   $0x1,%r9b
je     1228 <CCFD_Rx+0x128>
mov    %r10,%rcx
shl    $0x4,%rcx
movsd  (%rsi,%rcx,1),%xmm0
addsd  0x8(%rsi,%rcx,1),%xmm0
addsd  (%rdi,%r10,8),%xmm0
movsd  %xmm0,(%rdi,%r10,8)
or     $0x1,%r10
add    %r9,%rax
je     13c7 <CCFD_Rx+0x2c7>
mov    %r10,%rax
shl    $0x4,%rax
add    %rsi,%rax
add    $0x18,%rax
nop
movsd  -0x18(%rax),%xmm0
addsd  -0x10(%rax),%xmm0
addsd  (%rdi,%r10,8),%xmm0
movsd  %xmm0,(%rdi,%r10,8)
movsd  -0x8(%rax),%xmm0
addsd  (%rax),%xmm0
addsd  0x8(%rdi,%r10,8),%xmm0
movsd  %xmm0,0x8(%rdi,%r10,8)
add    $0x2,%r10
add    $0x20,%rax
cmp    %r10,%r9
jne    1240 <CCFD_Rx+0x140>
jmp    13c7 <CCFD_Rx+0x2c7>
mov    %r9d,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rax
mov    %rax,%r8
shr    $0x2,%r8
add    $0x1,%r8
test   %rax,%rax
je     13f8 <CCFD_Rx+0x2f8>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
movupd (%rsi,%rdx,8),%xmm0
movupd 0x10(%rsi,%rdx,8),%xmm1
movupd (%rdi,%rdx,8),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%rdi,%rdx,8),%xmm0
addpd  %xmm1,%xmm0
movupd 0x20(%rdi,%rdx,8),%xmm1
movupd 0x30(%rdi,%rdx,8),%xmm3
movupd %xmm2,(%rdi,%rdx,8)
movupd %xmm0,0x10(%rdi,%rdx,8)
movupd 0x20(%rsi,%rdx,8),%xmm0
addpd  %xmm1,%xmm0
movupd 0x30(%rsi,%rdx,8),%xmm1
addpd  %xmm3,%xmm1
movupd %xmm0,0x20(%rdi,%rdx,8)
movupd %xmm1,0x30(%rdi,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rax
jne    12b0 <CCFD_Rx+0x1b0>
test   $0x1,%r8b
je     133e <CCFD_Rx+0x23e>
movupd (%rsi,%rdx,8),%xmm0
movupd 0x10(%rsi,%rdx,8),%xmm1
movupd (%rdi,%rdx,8),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%rdi,%rdx,8),%xmm0
addpd  %xmm1,%xmm0
movupd %xmm2,(%rdi,%rdx,8)
movupd %xmm0,0x10(%rdi,%rdx,8)
cmp    %r9,%rcx
je     11be <CCFD_Rx+0xbe>
jmp    1134 <CCFD_Rx+0x34>
mov    %r9d,%r10d
and    $0xfffffffc,%r10d
lea    0x20(%rsi),%rax
xor    %ecx,%ecx
nopl   0x0(%rax)
movupd -0x20(%rax),%xmm0
movupd -0x10(%rax),%xmm1
movupd (%rax),%xmm2
movupd 0x10(%rax),%xmm3
movapd %xmm0,%xmm4
unpcklpd %xmm1,%xmm4
movapd %xmm2,%xmm5
unpcklpd %xmm3,%xmm5
unpckhpd %xmm1,%xmm0
addpd  %xmm4,%xmm0
unpckhpd %xmm3,%xmm2
addpd  %xmm5,%xmm2
movupd (%rdi,%rcx,8),%xmm1
addpd  %xmm0,%xmm1
movupd 0x10(%rdi,%rcx,8),%xmm0
addpd  %xmm2,%xmm0
movupd %xmm1,(%rdi,%rcx,8)
movupd %xmm0,0x10(%rdi,%rcx,8)
add    $0x4,%rcx
add    $0x40,%rax
cmp    %rcx,%r10
jne    1360 <CCFD_Rx+0x260>
cmp    %r9,%r10
jne    11fa <CCFD_Rx+0xfa>
lea    (%r8,%r8,1),%eax
mov    %eax,%ecx
movsd  (%rsi,%rcx,8),%xmm0
movslq %r8d,%rcx
addsd  (%rdi,%rcx,8),%xmm0
movsd  %xmm0,(%rdi,%rcx,8)
add    $0xffffffff,%edx
cmp    %edx,%eax
jge    11be <CCFD_Rx+0xbe>
or     $0x1,%eax
addsd  (%rsi,%rax,8),%xmm0
movsd  %xmm0,(%rdi,%rcx,8)
ret
xor    %edx,%edx
test   $0x1,%r8b
jne    1315 <CCFD_Rx+0x215>
jmp    133e <CCFD_Rx+0x23e>

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

LLVM IR (-O2):
define void @CCFD_Rx(double* nocapture %0, double* nocapture %1, i32 %2, i32 %3) {
%5 = icmp eq i32 %3, %2
br i1 %5, label %73, label %6
6: ; preds = %4
%7 = add i32 %3, -1
%8 = icmp sgt i32 %3, 1
br i1 %8, label %9, label %228
9: ; preds = %6
%10 = zext i32 %7 to i64
%11 = icmp ult i32 %7, 4
br i1 %11, label %52, label %12
12: ; preds = %9
%13 = getelementptr double, double* %0, i64 %10
%14 = shl nuw nsw i64 %10, 1
%15 = getelementptr double, double* %1, i64 %14
%16 = icmp ugt double* %15, %0
%17 = icmp ugt double* %13, %1
%18 = and i1 %16, %17
br i1 %18, label %52, label %19
19: ; preds = %12
%20 = and i64 %10, 4294967292
br label %21
21: ; preds = %21, %19
%22 = phi i64 [ 0, %19 ], [ %48, %21 ]
%23 = shl nuw nsw i64 %22, 1
%24 = shl i64 %22, 1
%25 = or i64 %24, 4
%26 = getelementptr inbounds double, double* %1, i64 %23
%27 = getelementptr inbounds double, double* %1, i64 %25
%28 = bitcast double* %26 to <4 x double>*
%29 = bitcast double* %27 to <4 x double>*
%30 = load <4 x double>, <4 x double>* %28
%31 = load <4 x double>, <4 x double>* %29
%32 = shufflevector <4 x double> %30, <4 x double> poison, <2 x i32> <i32 0, i32 2>
%33 = shufflevector <4 x double> %31, <4 x double> poison, <2 x i32> <i32 0, i32 2>
%34 = shufflevector <4 x double> %30, <4 x double> poison, <2 x i32> <i32 1, i32 3>
%35 = shufflevector <4 x double> %31, <4 x double> poison, <2 x i32> <i32 1, i32 3>
%36 = fadd <2 x double> %32, %34
%37 = fadd <2 x double> %33, %35
%38 = getelementptr inbounds double, double* %0, i64 %22
%39 = bitcast double* %38 to <2 x double>*
%40 = load <2 x double>, <2 x double>* %39
%41 = getelementptr inbounds double, double* %38, i64 2
%42 = bitcast double* %41 to <2 x double>*
%43 = load <2 x double>, <2 x double>* %42
%44 = fadd <2 x double> %40, %36
%45 = fadd <2 x double> %43, %37
%46 = bitcast double* %38 to <2 x double>*
store <2 x double> %44, <2 x double>* %46
%47 = bitcast double* %41 to <2 x double>*
store <2 x double> %45, <2 x double>* %47
%48 = add nuw i64 %22, 4
%49 = icmp eq i64 %48, %20
br i1 %49, label %50, label %21
50: ; preds = %21
%51 = icmp eq i64 %20, %10
br i1 %51, label %226, label %52
52: ; preds = %12, %9, %50
%53 = phi i64 [ 0, %12 ], [ 0, %9 ], [ %20, %50 ]
%54 = xor i64 %53, -1
%55 = and i64 %10, 1
%56 = icmp eq i64 %55, 0
br i1 %56, label %69, label %57
57: ; preds = %52
%58 = shl nuw nsw i64 %53, 1
%59 = getelementptr inbounds double, double* %1, i64 %58
%60 = load double, double* %59
%61 = or i64 %58, 1
%62 = getelementptr inbounds double, double* %1, i64 %61
%63 = load double, double* %62
%64 = fadd double %60, %63
%65 = getelementptr inbounds double, double* %0, i64 %53
%66 = load double, double* %65
%67 = fadd double %66, %64
store double %67, double* %65
%68 = or i64 %53, 1
br label %69
69: ; preds = %57, %52
%70 = phi i64 [ %53, %52 ], [ %68, %57 ]
%71 = sub nsw i64 0, %10
%72 = icmp eq i64 %54, %71
br i1 %72, label %226, label %201
73: ; preds = %4
%74 = icmp sgt i32 %3, 0
br i1 %74, label %75, label %245
75: ; preds = %73
%76 = zext i32 %3 to i64
%77 = icmp ult i32 %3, 4
br i1 %77, label %154, label %78
78: ; preds = %75
%79 = getelementptr double, double* %0, i64 %76
%80 = getelementptr double, double* %1, i64 %76
%81 = icmp ugt double* %80, %0
%82 = icmp ugt double* %79, %1
%83 = and i1 %81, %82
br i1 %83, label %154, label %84
84: ; preds = %78
%85 = and i64 %76, 4294967292
%86 = add nsw i64 %85, -4
%87 = lshr exact i64 %86, 2
%88 = add nuw nsw i64 %87, 1
%89 = and i64 %88, 1
%90 = icmp eq i64 %86, 0
br i1 %90, label %132, label %91
91: ; preds = %84
%92 = and i64 %88, 9223372036854775806
br label %93
93: ; preds = %93, %91
%94 = phi i64 [ 0, %91 ], [ %129, %93 ]
%95 = phi i64 [ 0, %91 ], [ %130, %93 ]
%96 = getelementptr inbounds double, double* %1, i64 %94
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = getelementptr inbounds double, double* %96, i64 2
%100 = bitcast double* %99 to <2 x double>*
%101 = load <2 x double>, <2 x double>* %100
%102 = getelementptr inbounds double, double* %0, i64 %94
%103 = bitcast double* %102 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = getelementptr inbounds double, double* %102, i64 2
%106 = bitcast double* %105 to <2 x double>*
%107 = load <2 x double>, <2 x double>* %106
%108 = fadd <2 x double> %98, %104
%109 = fadd <2 x double> %101, %107
%110 = bitcast double* %102 to <2 x double>*
store <2 x double> %108, <2 x double>* %110
%111 = bitcast double* %105 to <2 x double>*
store <2 x double> %109, <2 x double>* %111
%112 = or i64 %94, 4
%113 = getelementptr inbounds double, double* %1, i64 %112
%114 = bitcast double* %113 to <2 x double>*
%115 = load <2 x double>, <2 x double>* %114
%116 = getelementptr inbounds double, double* %113, i64 2
%117 = bitcast double* %116 to <2 x double>*
%118 = load <2 x double>, <2 x double>* %117
%119 = getelementptr inbounds double, double* %0, i64 %112
%120 = bitcast double* %119 to <2 x double>*
%121 = load <2 x double>, <2 x double>* %120
%122 = getelementptr inbounds double, double* %119, i64 2
%123 = bitcast double* %122 to <2 x double>*
%124 = load <2 x double>, <2 x double>* %123
%125 = fadd <2 x double> %115, %121
%126 = fadd <2 x double> %118, %124
%127 = bitcast double* %119 to <2 x double>*
store <2 x double> %125, <2 x double>* %127
%128 = bitcast double* %122 to <2 x double>*
store <2 x double> %126, <2 x double>* %128
%129 = add nuw i64 %94, 8
%130 = add i64 %95, 2
%131 = icmp eq i64 %130, %92
br i1 %131, label %132, label %93
132: ; preds = %93, %84
%133 = phi i64 [ 0, %84 ], [ %129, %93 ]
%134 = icmp eq i64 %89, 0
br i1 %134, label %152, label %135
135: ; preds = %132
%136 = getelementptr inbounds double, double* %1, i64 %133
%137 = bitcast double* %136 to <2 x double>*
%138 = load <2 x double>, <2 x double>* %137
%139 = getelementptr inbounds double, double* %136, i64 2
%140 = bitcast double* %139 to <2 x double>*
%141 = load <2 x double>, <2 x double>* %140
%142 = getelementptr inbounds double, double* %0, i64 %133
%143 = bitcast double* %142 to <2 x double>*
%144 = load <2 x double>, <2 x double>* %143
%145 = getelementptr inbounds double, double* %142, i64 2
%146 = bitcast double* %145 to <2 x double>*
%147 = load <2 x double>, <2 x double>* %146
%148 = fadd <2 x double> %138, %144
%149 = fadd <2 x double> %141, %147
%150 = bitcast double* %142 to <2 x double>*
store <2 x double> %148, <2 x double>* %150
%151 = bitcast double* %145 to <2 x double>*
store <2 x double> %149, <2 x double>* %151
br label %152
152: ; preds = %132, %135
%153 = icmp eq i64 %85, %76
br i1 %153, label %245, label %154
154: ; preds = %78, %75, %152
%155 = phi i64 [ 0, %78 ], [ 0, %75 ], [ %85, %152 ]
%156 = xor i64 %155, -1
%157 = add nsw i64 %156, %76
%158 = and i64 %76, 3
%159 = icmp eq i64 %158, 0
br i1 %159, label %171, label %160
160: ; preds = %154, %160
%161 = phi i64 [ %168, %160 ], [ %155, %154 ]
%162 = phi i64 [ %169, %160 ], [ 0, %154 ]
%163 = getelementptr inbounds double, double* %1, i64 %161
%164 = load double, double* %163
%165 = getelementptr inbounds double, double* %0, i64 %161
%166 = load double, double* %165
%167 = fadd double %164, %166
store double %167, double* %165
%168 = add nuw nsw i64 %161, 1
%169 = add i64 %162, 1
%170 = icmp eq i64 %169, %158
br i1 %170, label %171, label %160
171: ; preds = %160, %154
%172 = phi i64 [ %155, %154 ], [ %168, %160 ]
%173 = icmp ult i64 %157, 3
br i1 %173, label %245, label %174
174: ; preds = %171, %174
%175 = phi i64 [ %199, %174 ], [ %172, %171 ]
%176 = getelementptr inbounds double, double* %1, i64 %175
%177 = load double, double* %176
%178 = getelementptr inbounds double, double* %0, i64 %175
%179 = load double, double* %178
%180 = fadd double %177, %179
store double %180, double* %178
%181 = add nuw nsw i64 %175, 1
%182 = getelementptr inbounds double, double* %1, i64 %181
%183 = load double, double* %182
%184 = getelementptr inbounds double, double* %0, i64 %181
%185 = load double, double* %184
%186 = fadd double %183, %185
store double %186, double* %184
%187 = add nuw nsw i64 %175, 2
%188 = getelementptr inbounds double, double* %1, i64 %187
%189 = load double, double* %188
%190 = getelementptr inbounds double, double* %0, i64 %187
%191 = load double, double* %190
%192 = fadd double %189, %191
store double %192, double* %190
%193 = add nuw nsw i64 %175, 3
%194 = getelementptr inbounds double, double* %1, i64 %193
%195 = load double, double* %194
%196 = getelementptr inbounds double, double* %0, i64 %193
%197 = load double, double* %196
%198 = fadd double %195, %197
store double %198, double* %196
%199 = add nuw nsw i64 %175, 4
%200 = icmp eq i64 %199, %76
br i1 %200, label %245, label %174
201: ; preds = %69, %201
%202 = phi i64 [ %224, %201 ], [ %70, %69 ]
%203 = shl nuw nsw i64 %202, 1
%204 = getelementptr inbounds double, double* %1, i64 %203
%205 = load double, double* %204
%206 = or i64 %203, 1
%207 = getelementptr inbounds double, double* %1, i64 %206
%208 = load double, double* %207
%209 = fadd double %205, %208
%210 = getelementptr inbounds double, double* %0, i64 %202
%211 = load double, double* %210
%212 = fadd double %211, %209
store double %212, double* %210
%213 = add nuw nsw i64 %202, 1
%214 = shl nuw nsw i64 %213, 1
%215 = getelementptr inbounds double, double* %1, i64 %214
%216 = load double, double* %215
%217 = or i64 %214, 1
%218 = getelementptr inbounds double, double* %1, i64 %217
%219 = load double, double* %218
%220 = fadd double %216, %219
%221 = getelementptr inbounds double, double* %0, i64 %213
%222 = load double, double* %221
%223 = fadd double %222, %220
store double %223, double* %221
%224 = add nuw nsw i64 %202, 2
%225 = icmp eq i64 %224, %10
br i1 %225, label %226, label %201
226: ; preds = %69, %201, %50
%227 = shl i32 %7, 1
br label %228
228: ; preds = %226, %6
%229 = phi i32 [ 0, %6 ], [ %227, %226 ]
%230 = zext i32 %229 to i64
%231 = getelementptr inbounds double, double* %1, i64 %230
%232 = load double, double* %231
%233 = sext i32 %7 to i64
%234 = getelementptr inbounds double, double* %0, i64 %233
%235 = load double, double* %234
%236 = fadd double %232, %235
store double %236, double* %234
%237 = add nsw i32 %2, -1
%238 = icmp slt i32 %229, %237
br i1 %238, label %239, label %245
239: ; preds = %228
%240 = or i32 %229, 1
%241 = zext i32 %240 to i64
%242 = getelementptr inbounds double, double* %1, i64 %241
%243 = load double, double* %242
%244 = fadd double %236, %243
store double %244, double* %234
br label %245
245: ; preds = %171, %174, %152, %73, %228, %239
ret void
}