int expansion_sum_zeroelim1(elen, e, flen, f, h)
int elen;
float *e;
int flen;
float *f;
float *h;
{
  float Q;
  float Qnew;
  int index, findex, hindex, hlast;
  float hnow;
  float bvirt;
  float avirt, bround, around;
  Q = f[0];
  for (hindex = 0; hindex < elen; hindex++) {
    hnow = e[hindex];
    Qnew = (float)(Q + hnow);
    bvirt = (float)(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 = (float)(Q + hnow);
      bvirt = (float)(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
movss  (%rax),%xmm0
movss  %xmm0,-0x2c(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11c2 <expansion_sum_zeroelim1+0xc2>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x2c(%rbp),%xmm0
subss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
addss  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    112a <expansion_sum_zeroelim1+0x2a>
movss  -0x2c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x40(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12c5 <expansion_sum_zeroelim1+0x1c5>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jg     129d <expansion_sum_zeroelim1+0x19d>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x2c(%rbp),%xmm0
subss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
addss  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1205 <expansion_sum_zeroelim1+0x105>
movss  -0x2c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x40(%rbp)
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11e1 <expansion_sum_zeroelim1+0xe1>
movl   $0xffffffff,-0x3c(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x40(%rbp),%eax
jg     133f <expansion_sum_zeroelim1+0x23f>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1312 <expansion_sum_zeroelim1+0x212>
jp     1312 <expansion_sum_zeroelim1+0x212>
jmp    132c <expansion_sum_zeroelim1+0x22c>
movss  -0x44(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
mov    %ecx,-0x3c(%rbp)
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1331 <expansion_sum_zeroelim1+0x231>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12d3 <expansion_sum_zeroelim1+0x1d3>
cmpl   $0xffffffff,-0x3c(%rbp)
jne    1355 <expansion_sum_zeroelim1+0x255>
movl   $0x1,-0x4(%rbp)
jmp    135e <expansion_sum_zeroelim1+0x25e>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<expansion_sum_zeroelim1>:
movss  (%rcx),%xmm0
test   %edi,%edi
jle    1114 <expansion_sum_zeroelim1+0x14>
mov    %edi,%r9d
cmp    $0x1,%edi
jne    111b <expansion_sum_zeroelim1+0x1b>
xor    %eax,%eax
jmp    1193 <expansion_sum_zeroelim1+0x93>
xor    %edi,%edi
jmp    11c8 <expansion_sum_zeroelim1+0xc8>
mov    %r9d,%r10d
and    $0xfffffffe,%r10d
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  (%rsi,%rax,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
movaps %xmm2,%xmm3
subss  %xmm0,%xmm3
movaps %xmm2,%xmm4
subss  %xmm3,%xmm4
subss  %xmm3,%xmm1
subss  %xmm4,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%r8,%rax,4)
movss  0x4(%rsi,%rax,4),%xmm1
movaps %xmm2,%xmm0
addss  %xmm1,%xmm0
movaps %xmm0,%xmm3
subss  %xmm2,%xmm3
movaps %xmm0,%xmm4
subss  %xmm3,%xmm4
subss  %xmm3,%xmm1
subss  %xmm4,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,0x4(%r8,%rax,4)
add    $0x2,%rax
cmp    %rax,%r10
jne    1130 <expansion_sum_zeroelim1+0x30>
test   $0x1,%r9b
je     11c8 <expansion_sum_zeroelim1+0xc8>
movss  (%rsi,%rax,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
movaps %xmm2,%xmm3
subss  %xmm0,%xmm3
movaps %xmm2,%xmm4
subss  %xmm3,%xmm4
subss  %xmm3,%xmm1
subss  %xmm4,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%r8,%rax,4)
movaps %xmm2,%xmm0
mov    %edi,%eax
movss  %xmm0,(%r8,%rax,4)
cmp    $0x2,%edx
jl     125c <expansion_sum_zeroelim1+0x15c>
mov    %edx,%r9d
mov    $0x1,%esi
xor    %edx,%edx
jmp    120b <expansion_sum_zeroelim1+0x10b>
cs nopw 0x0(%rax,%rax,1)
nop
movaps %xmm1,%xmm0
movss  %xmm0,0x4(%r8,%rax,4)
add    $0x1,%rax
add    $0x1,%rsi
add    $0x1,%rdx
cmp    %r9,%rsi
je     125a <expansion_sum_zeroelim1+0x15a>
movss  (%rcx,%rsi,4),%xmm1
cmp    %rax,%rsi
ja     11f0 <expansion_sum_zeroelim1+0xf0>
mov    %rdx,%rdi
movaps %xmm1,%xmm0
nopl   0x0(%rax,%rax,1)
movss  0x4(%r8,%rdi,4),%xmm2
addss  %xmm2,%xmm0
movaps %xmm0,%xmm3
subss  %xmm1,%xmm3
movaps %xmm0,%xmm4
subss  %xmm3,%xmm4
subss  %xmm3,%xmm2
subss  %xmm4,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,0x4(%r8,%rdi,4)
add    $0x1,%rdi
movaps %xmm0,%xmm1
cmp    %rax,%rdi
jb     1220 <expansion_sum_zeroelim1+0x120>
jmp    11f3 <expansion_sum_zeroelim1+0xf3>
mov    %eax,%edi
lea    0x1(%rdi),%eax
test   %edi,%edi
je     12c0 <expansion_sum_zeroelim1+0x1c0>
mov    %eax,%esi
and    $0xfffffffe,%esi
mov    $0xffffffff,%ecx
xor    %edx,%edx
xorps  %xmm0,%xmm0
jmp    1289 <expansion_sum_zeroelim1+0x189>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%rdx
cmp    %rdx,%rsi
je     12c7 <expansion_sum_zeroelim1+0x1c7>
movss  (%r8,%rdx,4),%xmm1
ucomiss %xmm0,%xmm1
jne    1296 <expansion_sum_zeroelim1+0x196>
jnp    12a3 <expansion_sum_zeroelim1+0x1a3>
movslq %ecx,%rdi
add    $0x1,%ecx
movss  %xmm1,0x4(%r8,%rdi,4)
movss  0x4(%r8,%rdx,4),%xmm1
ucomiss %xmm0,%xmm1
jne    12b1 <expansion_sum_zeroelim1+0x1b1>
jnp    1280 <expansion_sum_zeroelim1+0x180>
movslq %ecx,%rdi
add    $0x1,%ecx
movss  %xmm1,0x4(%r8,%rdi,4)
jmp    1280 <expansion_sum_zeroelim1+0x180>
mov    $0xffffffff,%ecx
xor    %edx,%edx
test   $0x1,%al
je     12e8 <expansion_sum_zeroelim1+0x1e8>
movss  (%r8,%rdx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12db <expansion_sum_zeroelim1+0x1db>
jnp    12e8 <expansion_sum_zeroelim1+0x1e8>
movslq %ecx,%rax
add    $0x1,%ecx
movss  %xmm0,0x4(%r8,%rax,4)
inc    %ecx
mov    $0x1,%eax
cmovne %ecx,%eax
ret

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

LLVM IR (-O2):
define i32 @expansion_sum_zeroelim1(i32 %0, float* nocapture %1, i32 %2, float* nocapture %3, float* nocapture %4) {
%6 = load float, float* %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 float [ %6, %12 ], [ %30, %14 ]
%17 = phi i64 [ 0, %12 ], [ %38, %14 ]
%18 = getelementptr inbounds float, float* %1, i64 %15
%19 = load float, float* %18
%20 = fadd float %16, %19
%21 = fsub float %20, %16
%22 = fsub float %20, %21
%23 = fsub float %19, %21
%24 = fsub float %16, %22
%25 = fadd float %23, %24
%26 = getelementptr inbounds float, float* %4, i64 %15
store float %25, float* %26
%27 = or i64 %15, 1
%28 = getelementptr inbounds float, float* %1, i64 %27
%29 = load float, float* %28
%30 = fadd float %20, %29
%31 = fsub float %30, %20
%32 = fsub float %30, %31
%33 = fsub float %29, %31
%34 = fsub float %20, %32
%35 = fadd float %33, %34
%36 = getelementptr inbounds float, float* %4, i64 %27
store float %35, float* %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 float [ undef, %8 ], [ %30, %14 ]
%42 = phi i64 [ 0, %8 ], [ %37, %14 ]
%43 = phi float [ %6, %8 ], [ %30, %14 ]
%44 = icmp eq i64 %10, 0
br i1 %44, label %55, label %45
45: ; preds = %40
%46 = getelementptr inbounds float, float* %1, i64 %42
%47 = load float, float* %46
%48 = fadd float %43, %47
%49 = fsub float %48, %43
%50 = fsub float %48, %49
%51 = fsub float %47, %49
%52 = fsub float %43, %50
%53 = fadd float %51, %52
%54 = getelementptr inbounds float, float* %4, i64 %42
store float %53, float* %54
br label %55
55: ; preds = %45, %40, %5
%56 = phi float [ %6, %5 ], [ %41, %40 ], [ %48, %45 ]
%57 = phi i32 [ 0, %5 ], [ %0, %40 ], [ %0, %45 ]
%58 = zext i32 %57 to i64
%59 = getelementptr inbounds float, float* %4, i64 %58
store float %56, float* %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 float, float* %3, i64 %75
%77 = load float, float* %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 float [ %84, %79 ], [ %77, %73 ]
%82 = getelementptr inbounds float, float* %4, i64 %80
%83 = load float, float* %82
%84 = fadd float %81, %83
%85 = fsub float %84, %81
%86 = fsub float %84, %85
%87 = fsub float %83, %85
%88 = fsub float %81, %86
%89 = fadd float %87, %88
store float %89, float* %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 float [ %77, %73 ], [ %84, %79 ]
%94 = add nuw nsw i64 %74, 1
%95 = getelementptr inbounds float, float* %4, i64 %94
store float %93, float* %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 float, float* %4, i64 %99
%103 = load float, float* %102
%104 = fcmp une float %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 float, float* %4, i64 %107
store float %103, float* %108
br label %109
109: ; preds = %98, %105
%110 = phi i32 [ %106, %105 ], [ %100, %98 ]
%111 = or i64 %99, 1
%112 = getelementptr inbounds float, float* %4, i64 %111
%113 = load float, float* %112
%114 = fcmp une float %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 float, float* %4, i64 %117
store float %113, float* %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 float, float* %4, i64 %126
%131 = load float, float* %130
%132 = fcmp une float %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 float, float* %4, i64 %135
store float %131, float* %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
}