int expansion_sum_zeroelim1(elen, e, flen, f, h)
int elen;
double *e;
int flen;
double *f;
double *h;
{
  double Q;
  double Qnew;
  int index, findex, hindex, hlast;
  double hnow;
  double bvirt;
  double avirt, bround, around;
  Q = f[0];
  for (hindex = 0; hindex < elen; hindex++) {
    hnow = e[hindex];
    Qnew = (double)(Q + hnow);
    bvirt = (double)(Qnew - Q);
    avirt = Qnew - bvirt;
    bround = hnow - bvirt;
    around = Q - avirt;
    h[hindex] = around + bround;
    Q = Qnew;
  }
  h[hindex] = Q;
  hlast = hindex;
  for (findex = 1; findex < flen; findex++) {
    Q = f[findex];
    for (hindex = findex; hindex <= hlast; hindex++) {
      hnow = h[hindex];
      Qnew = (double)(Q + hnow);
      bvirt = (double)(Qnew - Q);
      avirt = Qnew - bvirt;
      bround = hnow - bvirt;
      around = Q - avirt;
      h[hindex] = around + bround;
      Q = Qnew;
    }
    h[++hlast] = Q;
  }
  hindex = -1;
  for (index = 0; index <= hlast; index++) {
    hnow = h[index];
    if (hnow != 0.0) {
      h[++hindex] = hnow;
    }
  }
  if (hindex == -1) {
    return 1;
  } else {
    return hindex + 1;
  }
}


x86 assembly (clang, -O0):
<expansion_sum_zeroelim1>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11c2 <expansion_sum_zeroelim1+0xc2>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    112a <expansion_sum_zeroelim1+0x2a>
movsd  -0x30(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12c5 <expansion_sum_zeroelim1+0x1c5>
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     129d <expansion_sum_zeroelim1+0x19d>
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1205 <expansion_sum_zeroelim1+0x105>
movsd  -0x30(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x48(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11e1 <expansion_sum_zeroelim1+0xe1>
movl   $0xffffffff,-0x44(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     133b <expansion_sum_zeroelim1+0x23b>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    130e <expansion_sum_zeroelim1+0x20e>
jp     130e <expansion_sum_zeroelim1+0x20e>
jmp    1328 <expansion_sum_zeroelim1+0x228>
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x44(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    132d <expansion_sum_zeroelim1+0x22d>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12d3 <expansion_sum_zeroelim1+0x1d3>
cmpl   $0xffffffff,-0x44(%rbp)
jne    1351 <expansion_sum_zeroelim1+0x251>
movl   $0x1,-0x4(%rbp)
jmp    135a <expansion_sum_zeroelim1+0x25a>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<expansion_sum_zeroelim1>:
movsd  (%rcx),%xmm0
test   %edi,%edi
jle    1117 <expansion_sum_zeroelim1+0x17>
mov    %edi,%r9d
cmp    $0x1,%edi
jne    111e <expansion_sum_zeroelim1+0x1e>
xor    %eax,%eax
jmp    1199 <expansion_sum_zeroelim1+0x99>
xor    %edi,%edi
jmp    11d2 <expansion_sum_zeroelim1+0xd2>
mov    %r9d,%r10d
and    $0xfffffffe,%r10d
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movsd  (%rsi,%rax,8),%xmm1
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm2,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  %xmm3,%xmm4
subsd  %xmm3,%xmm1
subsd  %xmm4,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm1
movapd %xmm2,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm3
subsd  %xmm2,%xmm3
movapd %xmm0,%xmm4
subsd  %xmm3,%xmm4
subsd  %xmm3,%xmm1
subsd  %xmm4,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%r8,%rax,8)
add    $0x2,%rax
cmp    %rax,%r10
jne    1130 <expansion_sum_zeroelim1+0x30>
test   $0x1,%r9b
je     11d2 <expansion_sum_zeroelim1+0xd2>
movsd  (%rsi,%rax,8),%xmm1
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm2,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm2,%xmm4
subsd  %xmm3,%xmm4
subsd  %xmm3,%xmm1
subsd  %xmm4,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rax,8)
movapd %xmm2,%xmm0
mov    %edi,%eax
movsd  %xmm0,(%r8,%rax,8)
cmp    $0x2,%edx
jl     125f <expansion_sum_zeroelim1+0x15f>
mov    %edx,%r9d
mov    $0x1,%esi
xor    %edx,%edx
jmp    120c <expansion_sum_zeroelim1+0x10c>
nop
movapd %xmm1,%xmm0
movsd  %xmm0,0x8(%r8,%rax,8)
add    $0x1,%rax
add    $0x1,%rsi
add    $0x1,%rdx
cmp    %r9,%rsi
je     125d <expansion_sum_zeroelim1+0x15d>
movsd  (%rcx,%rsi,8),%xmm1
cmp    %rax,%rsi
ja     11f0 <expansion_sum_zeroelim1+0xf0>
mov    %rdx,%rdi
movapd %xmm1,%xmm0
nopl   (%rax)
movsd  0x8(%r8,%rdi,8),%xmm2
addsd  %xmm2,%xmm0
movapd %xmm0,%xmm3
subsd  %xmm1,%xmm3
movapd %xmm0,%xmm4
subsd  %xmm3,%xmm4
subsd  %xmm3,%xmm2
subsd  %xmm4,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%r8,%rdi,8)
add    $0x1,%rdi
movapd %xmm0,%xmm1
cmp    %rax,%rdi
jb     1220 <expansion_sum_zeroelim1+0x120>
jmp    11f4 <expansion_sum_zeroelim1+0xf4>
mov    %eax,%edi
lea    0x1(%rdi),%eax
test   %edi,%edi
je     12c2 <expansion_sum_zeroelim1+0x1c2>
mov    %eax,%esi
and    $0xfffffffe,%esi
mov    $0xffffffff,%ecx
xor    %edx,%edx
xorpd  %xmm0,%xmm0
jmp    1289 <expansion_sum_zeroelim1+0x189>
nopl   0x0(%rax,%rax,1)
add    $0x2,%rdx
cmp    %rdx,%rsi
je     12c9 <expansion_sum_zeroelim1+0x1c9>
movsd  (%r8,%rdx,8),%xmm1
ucomisd %xmm0,%xmm1
jne    1297 <expansion_sum_zeroelim1+0x197>
jnp    12a4 <expansion_sum_zeroelim1+0x1a4>
movslq %ecx,%rdi
add    $0x1,%ecx
movsd  %xmm1,0x8(%r8,%rdi,8)
movsd  0x8(%r8,%rdx,8),%xmm1
ucomisd %xmm0,%xmm1
jne    12b3 <expansion_sum_zeroelim1+0x1b3>
jnp    1280 <expansion_sum_zeroelim1+0x180>
movslq %ecx,%rdi
add    $0x1,%ecx
movsd  %xmm1,0x8(%r8,%rdi,8)
jmp    1280 <expansion_sum_zeroelim1+0x180>
mov    $0xffffffff,%ecx
xor    %edx,%edx
test   $0x1,%al
je     12ec <expansion_sum_zeroelim1+0x1ec>
movsd  (%r8,%rdx,8),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12df <expansion_sum_zeroelim1+0x1df>
jnp    12ec <expansion_sum_zeroelim1+0x1ec>
movslq %ecx,%rax
add    $0x1,%ecx
movsd  %xmm0,0x8(%r8,%rax,8)
inc    %ecx
mov    $0x1,%eax
cmovne %ecx,%eax
ret

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

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