void wafil0(float *x, int n, int kc, float *tmp) {
  int i, m;
  float s, fm, s1, s2, b1, b2;
  m = 2 * kc + 1;
  fm = 1.0 / (float)m;
  s = 0.0;
  for (i = 1; i <= 2 * kc + 1; i++)
    s += x[i] * fm;
  tmp[kc + 1] = s;
  for (i = kc + 2; i <= n - kc; i++) {
    s -= x[i - kc - 1] * fm + x[i + kc] * fm;
    tmp[i] = s;
  }
  m = kc;
  fm = 1.0 / (float)m;
  s1 = 0.0;
  s2 = 0.0;
  for (i = 1; i <= m; i++) {
    s1 += x[i];
    s2 += x[n - i + 1];
  }
  b1 = (s1 * fm - tmp[kc + 1]) * 2.0 * fm;
  b2 = (s2 * fm - tmp[n - kc]) * 2.0 * fm;
  for (i = 1; i <= kc; i++) {
    tmp[kc + 1 - i] = tmp[kc + 1] + i * b1;
    tmp[n - kc + i] = tmp[n - kc] + i * b2;
  }
  for (i = 1; i <= n; i++)
    x[i] -= tmp[i];
}


x86 assembly (clang, -O0):
<wafil0>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
cvtsi2ssl -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xed1(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x10(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1191 <wafil0+0x91>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x28(%rbp),%xmm2
movss  -0x24(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    114b <wafil0+0x4b>
movss  -0x24(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
cmp    %ecx,%eax
jg     1229 <wafil0+0x129>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  -0x28(%rbp),%xmm2
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x28(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b1 <wafil0+0xb1>
mov    -0x10(%rbp),%eax
mov    %eax,-0x20(%rbp)
cvtsi2ssl -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdc0(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     12b4 <wafil0+0x1b4>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1264 <wafil0+0x164>
movss  -0x2c(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd17(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x28(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x30(%rbp),%xmm0
movss  -0x28(%rbp),%xmm2
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcc0(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x28(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     13f5 <wafil0+0x2f5>
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtsi2ssl -0x1c(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
sub    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtsi2ssl -0x1c(%rbp),%xmm0
movss  -0x38(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    -0x10(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1369 <wafil0+0x269>
movl   $0x1,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1439 <wafil0+0x339>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13fc <wafil0+0x2fc>
pop    %rbp
ret

x86 assembly (clang, -O2):
<wafil0>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
lea    0x1(%rdx,%rdx,1),%eax
cvtsi2ss %eax,%xmm2
lea    (%rdx,%rdx,1),%r10d
movss  0xee4(%rip),%xmm0
movaps %xmm0,%xmm1
divss  %xmm2,%xmm1
test   %eax,%eax
jle    113f <wafil0+0x3f>
lea    0x2(%r10),%ebx
lea    -0x2(%rbx),%rax
cmp    $0x3,%rax
jae    1147 <wafil0+0x47>
xorps  %xmm2,%xmm2
mov    $0x1,%eax
jmp    11a5 <wafil0+0xa5>
xorps  %xmm2,%xmm2
jmp    11d7 <wafil0+0xd7>
add    $0xffffffffffffffff,%rbx
and    $0xfffffffffffffffc,%rbx
xorps  %xmm2,%xmm2
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  0x4(%rdi,%rax,4),%xmm3
mulss  %xmm1,%xmm3
addss  %xmm2,%xmm3
movss  0x8(%rdi,%rax,4),%xmm2
mulss  %xmm1,%xmm2
addss  %xmm3,%xmm2
movss  0xc(%rdi,%rax,4),%xmm3
mulss  %xmm1,%xmm3
addss  %xmm2,%xmm3
movss  0x10(%rdi,%rax,4),%xmm2
mulss  %xmm1,%xmm2
addss  %xmm3,%xmm2
add    $0x4,%rax
cmp    %rax,%rbx
jne    1160 <wafil0+0x60>
add    $0x1,%rax
lea    (%rdi,%rax,4),%r8
mov    %edx,%eax
and    $0x1,%eax
lea    0x4(,%rax,8),%rbx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movss  (%r8,%rax,1),%xmm3
mulss  %xmm1,%xmm3
addss  %xmm3,%xmm2
add    $0x4,%rax
cmp    %rax,%rbx
jne    11c0 <wafil0+0xc0>
lea    0x1(%rdx),%r8d
movslq %r8d,%r11
movss  %xmm2,(%rcx,%r11,4)
lea    0x2(%rdx),%eax
mov    %esi,%r9d
sub    %edx,%r9d
cmp    %r9d,%eax
jg     12b9 <wafil0+0x1b9>
movslq %eax,%r14
movslq %edx,%rax
lea    -0x2(%rsi),%ebp
test   $0x1,%sil
jne    122d <wafil0+0x12d>
lea    (%r14,%rax,1),%rbx
movss  (%rdi,%rbx,4),%xmm3
mulss  %xmm1,%xmm3
movss  0x4(%rdi),%xmm4
mulss  %xmm1,%xmm4
addss  %xmm3,%xmm4
subss  %xmm4,%xmm2
movss  %xmm2,(%rcx,%r14,4)
add    $0x1,%r14
cmp    %r10d,%ebp
je     12b9 <wafil0+0x1b9>
mov    %r9d,%r10d
sub    %r14d,%r10d
add    $0x1,%r10d
lea    (%rcx,%r14,4),%r12
add    $0x4,%r12
add    %r14,%rax
lea    (%rdi,%rax,4),%rax
add    $0x4,%rax
sub    %edx,%r14d
lea    -0x1(%r14),%r15d
xor    %ebx,%ebx
nopl   0x0(%rax)
lea    (%r15,%rbx,1),%ebp
movslq %ebp,%rbp
movss  -0x4(%rax,%rbx,4),%xmm3
mulss  %xmm1,%xmm3
movss  (%rdi,%rbp,4),%xmm4
mulss  %xmm1,%xmm4
addss  %xmm3,%xmm4
subss  %xmm4,%xmm2
movss  %xmm2,-0x4(%r12,%rbx,4)
lea    (%r14,%rbx,1),%ebp
movslq %ebp,%rbp
movss  (%rax,%rbx,4),%xmm3
mulss  %xmm1,%xmm3
movss  (%rdi,%rbp,4),%xmm4
mulss  %xmm1,%xmm4
addss  %xmm3,%xmm4
subss  %xmm4,%xmm2
movss  %xmm2,(%r12,%rbx,4)
add    $0x2,%rbx
cmp    %ebx,%r10d
jne    1260 <wafil0+0x160>
test   %edx,%edx
jle    12d7 <wafil0+0x1d7>
mov    %r8d,%r10d
add    $0xffffffffffffffff,%r10
cmp    $0x2,%r8d
jne    12df <wafil0+0x1df>
xorps  %xmm1,%xmm1
mov    $0x1,%eax
xorps  %xmm2,%xmm2
jmp    1333 <wafil0+0x233>
xorps  %xmm2,%xmm2
xorps  %xmm1,%xmm1
jmp    134b <wafil0+0x24b>
mov    %r10,%r14
and    $0xfffffffffffffffe,%r14
neg    %r14
xorps  %xmm1,%xmm1
mov    $0x1,%eax
mov    %esi,%ebx
xorps  %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
addss  (%rdi,%rax,4),%xmm2
movslq %ebx,%rbx
addss  (%rdi,%rbx,4),%xmm1
addss  0x4(%rdi,%rax,4),%xmm2
lea    -0x1(%rbx),%ebp
movslq %ebp,%rbp
addss  (%rdi,%rbp,4),%xmm1
add    $0xfffffffe,%ebx
lea    (%r14,%rax,1),%rbp
add    $0x2,%rbp
add    $0x2,%rax
cmp    $0x1,%rbp
jne    1300 <wafil0+0x200>
test   $0x1,%r10b
je     134b <wafil0+0x24b>
lea    0x1(%rsi),%ebp
addss  (%rdi,%rax,4),%xmm2
sub    %eax,%ebp
movslq %ebp,%rax
addss  (%rdi,%rax,4),%xmm1
test   %edx,%edx
jle    141a <wafil0+0x31a>
xorps  %xmm3,%xmm3
cvtsi2ss %edx,%xmm3
divss  %xmm3,%xmm0
movss  (%rcx,%r11,4),%xmm3
mulss  %xmm0,%xmm2
subss  %xmm3,%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm2,%xmm2
xorps  %xmm4,%xmm4
cvtss2sd %xmm0,%xmm4
mulsd  %xmm4,%xmm2
cvtsd2ss %xmm2,%xmm2
movslq %r9d,%r10
mulss  %xmm0,%xmm1
subss  (%rcx,%r10,4),%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  %xmm0,%xmm0
mulsd  %xmm4,%xmm0
cvtsd2ss %xmm0,%xmm0
addss  %xmm2,%xmm3
movss  %xmm3,-0x4(%rcx,%r11,4)
movss  (%rcx,%r10,4),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x4(%rcx,%r10,4)
cmp    $0x2,%r8d
je     141a <wafil0+0x31a>
mov    %r8d,%r8d
lea    (%rcx,%r11,4),%rbx
add    $0xfffffffffffffff8,%rbx
mov    %r9d,%eax
mov    $0x2,%edx
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
movaps %xmm1,%xmm3
mulss  %xmm2,%xmm3
addss  (%rcx,%r11,4),%xmm3
movss  %xmm3,(%rbx)
mulss  %xmm0,%xmm1
addss  (%rcx,%r10,4),%xmm1
lea    (%rax,%rdx,1),%ebp
movslq %ebp,%rbp
movss  %xmm1,(%rcx,%rbp,4)
add    $0x1,%rdx
add    $0xfffffffffffffffc,%rbx
cmp    %rdx,%r8
jne    13e0 <wafil0+0x2e0>
test   %esi,%esi
jle    158e <wafil0+0x48e>
mov    %esi,%r8d
lea    0x1(%r8),%r10
mov    $0x1,%edx
cmp    $0x8,%esi
jb     1503 <wafil0+0x403>
lea    0x4(%rdi),%rax
lea    (%rcx,%r10,4),%rsi
cmp    %rsi,%rax
jae    1455 <wafil0+0x355>
lea    (%rdi,%r10,4),%rax
lea    0x4(%rcx),%rsi
cmp    %rax,%rsi
jb     1503 <wafil0+0x403>
mov    %r8d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rax,%rax
je     1597 <wafil0+0x497>
mov    %r9,%rbx
and    $0xfffffffffffffffe,%rbx
mov    $0x1,%esi
nop
movups (%rcx,%rsi,4),%xmm0
movups 0x10(%rcx,%rsi,4),%xmm1
movups (%rdi,%rsi,4),%xmm2
subps  %xmm0,%xmm2
movups 0x10(%rdi,%rsi,4),%xmm0
subps  %xmm1,%xmm0
movups 0x20(%rdi,%rsi,4),%xmm1
movups 0x30(%rdi,%rsi,4),%xmm3
movups %xmm2,(%rdi,%rsi,4)
movups %xmm0,0x10(%rdi,%rsi,4)
movups 0x20(%rcx,%rsi,4),%xmm0
subps  %xmm0,%xmm1
movups 0x30(%rcx,%rsi,4),%xmm0
subps  %xmm0,%xmm3
movups %xmm1,0x20(%rdi,%rsi,4)
movups %xmm3,0x30(%rdi,%rsi,4)
add    $0x10,%rsi
add    $0xfffffffffffffffe,%rbx
jne    1480 <wafil0+0x380>
test   $0x1,%r9b
je     14f6 <wafil0+0x3f6>
movups (%rcx,%rsi,4),%xmm0
movups 0x10(%rcx,%rsi,4),%xmm1
movups (%rdi,%rsi,4),%xmm2
subps  %xmm0,%xmm2
movups 0x10(%rdi,%rsi,4),%xmm0
subps  %xmm1,%xmm0
movups %xmm2,(%rdi,%rsi,4)
movups %xmm0,0x10(%rdi,%rsi,4)
cmp    %rdx,%r8
je     158e <wafil0+0x48e>
or     $0x1,%rdx
mov    %r10d,%eax
sub    %edx,%eax
mov    %rdx,%rsi
not    %rsi
add    %r10,%rsi
and    $0x3,%rax
je     1539 <wafil0+0x439>
nopw   0x0(%rax,%rax,1)
movss  (%rdi,%rdx,4),%xmm0
subss  (%rcx,%rdx,4),%xmm0
movss  %xmm0,(%rdi,%rdx,4)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rax
jne    1520 <wafil0+0x420>
cmp    $0x3,%rsi
jb     158e <wafil0+0x48e>
nop
movss  (%rdi,%rdx,4),%xmm0
subss  (%rcx,%rdx,4),%xmm0
movss  0x4(%rdi,%rdx,4),%xmm1
movss  %xmm0,(%rdi,%rdx,4)
subss  0x4(%rcx,%rdx,4),%xmm1
movss  %xmm1,0x4(%rdi,%rdx,4)
movss  0x8(%rdi,%rdx,4),%xmm0
subss  0x8(%rcx,%rdx,4),%xmm0
movss  %xmm0,0x8(%rdi,%rdx,4)
movss  0xc(%rdi,%rdx,4),%xmm0
subss  0xc(%rcx,%rdx,4),%xmm0
movss  %xmm0,0xc(%rdi,%rdx,4)
add    $0x4,%rdx
cmp    %rdx,%r10
jne    1540 <wafil0+0x440>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x1,%esi
test   $0x1,%r9b
jne    14d5 <wafil0+0x3d5>
jmp    14f6 <wafil0+0x3f6>

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

LLVM IR (-O2):
define void @wafil0(float* nocapture %0, i32 %1, i32 %2, float* nocapture %3) {
%5 = shl i32 %2, 1
%6 = or i32 %5, 1
%7 = sitofp i32 %6 to float
%8 = fdiv float 1.000000e+00, %7
%9 = icmp slt i32 %6, 1
br i1 %9, label %55, label %10
10: ; preds = %4
%11 = add i32 %5, 2
%12 = zext i32 %11 to i64
%13 = add nsw i64 %12, -1
%14 = add nsw i64 %12, -2
%15 = and i64 %13, 3
%16 = icmp ult i64 %14, 3
br i1 %16, label %41, label %17
17: ; preds = %10
%18 = and i64 %13, -4
br label %19
19: ; preds = %19, %17
%20 = phi i64 [ 1, %17 ], [ %38, %19 ]
%21 = phi float [ 0.000000e+00, %17 ], [ %37, %19 ]
%22 = phi i64 [ 0, %17 ], [ %39, %19 ]
%23 = getelementptr inbounds float, float* %0, i64 %20
%24 = load float, float* %23
%25 = tail call float @llvm.fmuladd.f32(float %24, float %8, float %21)
%26 = add nuw nsw i64 %20, 1
%27 = getelementptr inbounds float, float* %0, i64 %26
%28 = load float, float* %27
%29 = tail call float @llvm.fmuladd.f32(float %28, float %8, float %25)
%30 = add nuw nsw i64 %20, 2
%31 = getelementptr inbounds float, float* %0, i64 %30
%32 = load float, float* %31
%33 = tail call float @llvm.fmuladd.f32(float %32, float %8, float %29)
%34 = add nuw nsw i64 %20, 3
%35 = getelementptr inbounds float, float* %0, i64 %34
%36 = load float, float* %35
%37 = tail call float @llvm.fmuladd.f32(float %36, float %8, float %33)
%38 = add nuw nsw i64 %20, 4
%39 = add i64 %22, 4
%40 = icmp eq i64 %39, %18
br i1 %40, label %41, label %19
41: ; preds = %10, %19
%42 = phi float [ undef, %10 ], [ %37, %19 ]
%43 = phi i64 [ 1, %10 ], [ %38, %19 ]
%44 = phi float [ 0.000000e+00, %10 ], [ %37, %19 ]
br label %45
45: ; preds = %45, %41
%46 = phi i64 [ %43, %41 ], [ %52, %45 ]
%47 = phi float [ %44, %41 ], [ %51, %45 ]
%48 = phi i64 [ 0, %41 ], [ %53, %45 ]
%49 = getelementptr inbounds float, float* %0, i64 %46
%50 = load float, float* %49
%51 = tail call float @llvm.fmuladd.f32(float %50, float %8, float %47)
%52 = add nuw nsw i64 %46, 1
%53 = add i64 %48, 1
%54 = icmp eq i64 %53, %15
br i1 %54, label %55, label %45
55: ; preds = %45, %4
%56 = phi float [ 0.000000e+00, %4 ], [ %51, %45 ]
%57 = add i32 %2, 1
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %3, i64 %58
store float %56, float* %59
%60 = add i32 %2, 2
%61 = sub nsw i32 %1, %2
%62 = icmp sgt i32 %60, %61
br i1 %62, label %118, label %63
63: ; preds = %55
%64 = xor i32 %2, -1
%65 = sext i32 %60 to i64
%66 = sext i32 %2 to i64
%67 = add i32 %1, 1
%68 = sub i32 %67, %2
%69 = add i32 %1, -2
%70 = and i32 %1, 1
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %83
72: ; preds = %63
%73 = getelementptr inbounds float, float* %0, i64 1
%74 = load float, float* %73
%75 = add nsw i64 %65, %66
%76 = getelementptr inbounds float, float* %0, i64 %75
%77 = load float, float* %76
%78 = fmul float %8, %77
%79 = tail call float @llvm.fmuladd.f32(float %74, float %8, float %78)
%80 = fsub float %56, %79
%81 = getelementptr inbounds float, float* %3, i64 %65
store float %80, float* %81
%82 = add nsw i64 %65, 1
br label %83
83: ; preds = %72, %63
%84 = phi i64 [ %65, %63 ], [ %82, %72 ]
%85 = phi float [ %56, %63 ], [ %80, %72 ]
%86 = icmp eq i32 %69, %5
br i1 %86, label %118, label %87
87: ; preds = %83, %87
%88 = phi i64 [ %115, %87 ], [ %84, %83 ]
%89 = phi float [ %113, %87 ], [ %85, %83 ]
%90 = trunc i64 %88 to i32
%91 = add i32 %90, %64
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds float, float* %0, i64 %92
%94 = load float, float* %93
%95 = add nsw i64 %88, %66
%96 = getelementptr inbounds float, float* %0, i64 %95
%97 = load float, float* %96
%98 = fmul float %8, %97
%99 = tail call float @llvm.fmuladd.f32(float %94, float %8, float %98)
%100 = fsub float %89, %99
%101 = getelementptr inbounds float, float* %3, i64 %88
store float %100, float* %101
%102 = add nsw i64 %88, 1
%103 = trunc i64 %102 to i32
%104 = add i32 %103, %64
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds float, float* %0, i64 %105
%107 = load float, float* %106
%108 = add nsw i64 %102, %66
%109 = getelementptr inbounds float, float* %0, i64 %108
%110 = load float, float* %109
%111 = fmul float %8, %110
%112 = tail call float @llvm.fmuladd.f32(float %107, float %8, float %111)
%113 = fsub float %100, %112
%114 = getelementptr inbounds float, float* %3, i64 %102
store float %113, float* %114
%115 = add nsw i64 %88, 2
%116 = trunc i64 %115 to i32
%117 = icmp eq i32 %68, %116
br i1 %117, label %118, label %87
118: ; preds = %83, %87, %55
%119 = sitofp i32 %2 to float
%120 = fdiv float 1.000000e+00, %119
%121 = icmp slt i32 %2, 1
br i1 %121, label %174, label %122
122: ; preds = %118
%123 = add i32 %1, 1
%124 = zext i32 %57 to i64
%125 = add nsw i64 %124, -1
%126 = and i64 %125, 1
%127 = icmp eq i32 %57, 2
br i1 %127, label %157, label %128
128: ; preds = %122
%129 = and i64 %125, -2
br label %130
130: ; preds = %130, %128
%131 = phi i64 [ 1, %128 ], [ %154, %130 ]
%132 = phi float [ 0.000000e+00, %128 ], [ %153, %130 ]
%133 = phi float [ 0.000000e+00, %128 ], [ %147, %130 ]
%134 = phi i64 [ 0, %128 ], [ %155, %130 ]
%135 = getelementptr inbounds float, float* %0, i64 %131
%136 = load float, float* %135
%137 = fadd float %133, %136
%138 = trunc i64 %131 to i32
%139 = sub i32 %123, %138
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds float, float* %0, i64 %140
%142 = load float, float* %141
%143 = fadd float %132, %142
%144 = add nuw nsw i64 %131, 1
%145 = getelementptr inbounds float, float* %0, i64 %144
%146 = load float, float* %145
%147 = fadd float %137, %146
%148 = trunc i64 %144 to i32
%149 = sub i32 %123, %148
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds float, float* %0, i64 %150
%152 = load float, float* %151
%153 = fadd float %143, %152
%154 = add nuw nsw i64 %131, 2
%155 = add i64 %134, 2
%156 = icmp eq i64 %155, %129
br i1 %156, label %157, label %130
157: ; preds = %130, %122
%158 = phi float [ undef, %122 ], [ %147, %130 ]
%159 = phi float [ undef, %122 ], [ %153, %130 ]
%160 = phi i64 [ 1, %122 ], [ %154, %130 ]
%161 = phi float [ 0.000000e+00, %122 ], [ %153, %130 ]
%162 = phi float [ 0.000000e+00, %122 ], [ %147, %130 ]
%163 = icmp eq i64 %126, 0
br i1 %163, label %174, label %164
164: ; preds = %157
%165 = getelementptr inbounds float, float* %0, i64 %160
%166 = load float, float* %165
%167 = fadd float %162, %166
%168 = trunc i64 %160 to i32
%169 = sub i32 %123, %168
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds float, float* %0, i64 %170
%172 = load float, float* %171
%173 = fadd float %161, %172
br label %174
174: ; preds = %164, %157, %118
%175 = phi float [ 0.000000e+00, %118 ], [ %158, %157 ], [ %167, %164 ]
%176 = phi float [ 0.000000e+00, %118 ], [ %159, %157 ], [ %173, %164 ]
%177 = load float, float* %59
%178 = fneg float %177
%179 = tail call float @llvm.fmuladd.f32(float %175, float %120, float %178)
%180 = fpext float %179 to double
%181 = fmul double %180, 2.000000e+00
%182 = fpext float %120 to double
%183 = fmul double %181, %182
%184 = fptrunc double %183 to float
%185 = sext i32 %61 to i64
%186 = getelementptr inbounds float, float* %3, i64 %185
%187 = load float, float* %186
%188 = fneg float %187
%189 = tail call float @llvm.fmuladd.f32(float %176, float %120, float %188)
%190 = fpext float %189 to double
%191 = fmul double %190, 2.000000e+00
%192 = fmul double %191, %182
%193 = fptrunc double %192 to float
br i1 %121, label %205, label %194
194: ; preds = %174
%195 = zext i32 %57 to i64
%196 = fadd float %177, %184
%197 = add nsw i64 %58, -1
%198 = getelementptr inbounds float, float* %3, i64 %197
store float %196, float* %198
%199 = load float, float* %186
%200 = fadd float %199, %193
%201 = add nsw i32 %61, 1
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds float, float* %3, i64 %202
store float %200, float* %203
%204 = icmp eq i32 %57, 2
br i1 %204, label %205, label %315
205: ; preds = %315, %194, %174
%206 = icmp slt i32 %1, 1
br i1 %206, label %357, label %207
207: ; preds = %205
%208 = add nuw i32 %1, 1
%209 = zext i32 %208 to i64
%210 = add nsw i64 %209, -1
%211 = icmp ult i64 %210, 8
br i1 %211, label %294, label %212
212: ; preds = %207
%213 = getelementptr float, float* %0, i64 1
%214 = getelementptr float, float* %0, i64 %209
%215 = getelementptr float, float* %3, i64 1
%216 = getelementptr float, float* %3, i64 %209
%217 = icmp ult float* %213, %216
%218 = icmp ult float* %215, %214
%219 = and i1 %217, %218
br i1 %219, label %294, label %220
220: ; preds = %212
%221 = and i64 %210, -8
%222 = or i64 %221, 1
%223 = add nsw i64 %221, -8
%224 = lshr exact i64 %223, 3
%225 = add nuw nsw i64 %224, 1
%226 = and i64 %225, 1
%227 = icmp eq i64 %223, 0
br i1 %227, label %272, label %228
228: ; preds = %220
%229 = and i64 %225, 4611686018427387902
br label %230
230: ; preds = %230, %228
%231 = phi i64 [ 0, %228 ], [ %267, %230 ]
%232 = phi i64 [ 0, %228 ], [ %268, %230 ]
%233 = or i64 %231, 1
%234 = getelementptr inbounds float, float* %3, i64 %233
%235 = bitcast float* %234 to <4 x float>*
%236 = load <4 x float>, <4 x float>* %235
%237 = getelementptr inbounds float, float* %234, i64 4
%238 = bitcast float* %237 to <4 x float>*
%239 = load <4 x float>, <4 x float>* %238
%240 = getelementptr inbounds float, float* %0, i64 %233
%241 = bitcast float* %240 to <4 x float>*
%242 = load <4 x float>, <4 x float>* %241
%243 = getelementptr inbounds float, float* %240, i64 4
%244 = bitcast float* %243 to <4 x float>*
%245 = load <4 x float>, <4 x float>* %244
%246 = fsub <4 x float> %242, %236
%247 = fsub <4 x float> %245, %239
%248 = bitcast float* %240 to <4 x float>*
store <4 x float> %246, <4 x float>* %248
%249 = bitcast float* %243 to <4 x float>*
store <4 x float> %247, <4 x float>* %249
%250 = or i64 %231, 9
%251 = getelementptr inbounds float, float* %3, i64 %250
%252 = bitcast float* %251 to <4 x float>*
%253 = load <4 x float>, <4 x float>* %252
%254 = getelementptr inbounds float, float* %251, i64 4
%255 = bitcast float* %254 to <4 x float>*
%256 = load <4 x float>, <4 x float>* %255
%257 = getelementptr inbounds float, float* %0, i64 %250
%258 = bitcast float* %257 to <4 x float>*
%259 = load <4 x float>, <4 x float>* %258
%260 = getelementptr inbounds float, float* %257, i64 4
%261 = bitcast float* %260 to <4 x float>*
%262 = load <4 x float>, <4 x float>* %261
%263 = fsub <4 x float> %259, %253
%264 = fsub <4 x float> %262, %256
%265 = bitcast float* %257 to <4 x float>*
store <4 x float> %263, <4 x float>* %265
%266 = bitcast float* %260 to <4 x float>*
store <4 x float> %264, <4 x float>* %266
%267 = add nuw i64 %231, 16
%268 = add i64 %232, 2
%269 = icmp eq i64 %268, %229
br i1 %269, label %270, label %230
270: ; preds = %230
%271 = or i64 %267, 1
br label %272
272: ; preds = %270, %220
%273 = phi i64 [ 1, %220 ], [ %271, %270 ]
%274 = icmp eq i64 %226, 0
br i1 %274, label %292, label %275
275: ; preds = %272
%276 = getelementptr inbounds float, float* %3, i64 %273
%277 = bitcast float* %276 to <4 x float>*
%278 = load <4 x float>, <4 x float>* %277
%279 = getelementptr inbounds float, float* %276, i64 4
%280 = bitcast float* %279 to <4 x float>*
%281 = load <4 x float>, <4 x float>* %280
%282 = getelementptr inbounds float, float* %0, i64 %273
%283 = bitcast float* %282 to <4 x float>*
%284 = load <4 x float>, <4 x float>* %283
%285 = getelementptr inbounds float, float* %282, i64 4
%286 = bitcast float* %285 to <4 x float>*
%287 = load <4 x float>, <4 x float>* %286
%288 = fsub <4 x float> %284, %278
%289 = fsub <4 x float> %287, %281
%290 = bitcast float* %282 to <4 x float>*
store <4 x float> %288, <4 x float>* %290
%291 = bitcast float* %285 to <4 x float>*
store <4 x float> %289, <4 x float>* %291
br label %292
292: ; preds = %272, %275
%293 = icmp eq i64 %210, %221
br i1 %293, label %357, label %294
294: ; preds = %212, %207, %292
%295 = phi i64 [ 1, %212 ], [ 1, %207 ], [ %222, %292 ]
%296 = sub nsw i64 %209, %295
%297 = xor i64 %295, -1
%298 = add nsw i64 %297, %209
%299 = and i64 %296, 3
%300 = icmp eq i64 %299, 0
br i1 %300, label %312, label %301
301: ; preds = %294, %301
%302 = phi i64 [ %309, %301 ], [ %295, %294 ]
%303 = phi i64 [ %310, %301 ], [ 0, %294 ]
%304 = getelementptr inbounds float, float* %3, i64 %302
%305 = load float, float* %304
%306 = getelementptr inbounds float, float* %0, i64 %302
%307 = load float, float* %306
%308 = fsub float %307, %305
store float %308, float* %306
%309 = add nuw nsw i64 %302, 1
%310 = add i64 %303, 1
%311 = icmp eq i64 %310, %299
br i1 %311, label %312, label %301
312: ; preds = %301, %294
%313 = phi i64 [ %295, %294 ], [ %309, %301 ]
%314 = icmp ult i64 %298, 3
br i1 %314, label %357, label %330
315: ; preds = %194, %315
%316 = phi i64 [ %328, %315 ], [ 2, %194 ]
%317 = load float, float* %59
%318 = trunc i64 %316 to i32
%319 = sitofp i32 %318 to float
%320 = tail call float @llvm.fmuladd.f32(float %319, float %184, float %317)
%321 = sub nsw i64 %58, %316
%322 = getelementptr inbounds float, float* %3, i64 %321
store float %320, float* %322
%323 = load float, float* %186
%324 = tail call float @llvm.fmuladd.f32(float %319, float %193, float %323)
%325 = add nsw i32 %61, %318
%326 = sext i32 %325 to i64
%327 = getelementptr inbounds float, float* %3, i64 %326
store float %324, float* %327
%328 = add nuw nsw i64 %316, 1
%329 = icmp eq i64 %328, %195
br i1 %329, label %205, label %315
330: ; preds = %312, %330
%331 = phi i64 [ %355, %330 ], [ %313, %312 ]
%332 = getelementptr inbounds float, float* %3, i64 %331
%333 = load float, float* %332
%334 = getelementptr inbounds float, float* %0, i64 %331
%335 = load float, float* %334
%336 = fsub float %335, %333
store float %336, float* %334
%337 = add nuw nsw i64 %331, 1
%338 = getelementptr inbounds float, float* %3, i64 %337
%339 = load float, float* %338
%340 = getelementptr inbounds float, float* %0, i64 %337
%341 = load float, float* %340
%342 = fsub float %341, %339
store float %342, float* %340
%343 = add nuw nsw i64 %331, 2
%344 = getelementptr inbounds float, float* %3, i64 %343
%345 = load float, float* %344
%346 = getelementptr inbounds float, float* %0, i64 %343
%347 = load float, float* %346
%348 = fsub float %347, %345
store float %348, float* %346
%349 = add nuw nsw i64 %331, 3
%350 = getelementptr inbounds float, float* %3, i64 %349
%351 = load float, float* %350
%352 = getelementptr inbounds float, float* %0, i64 %349
%353 = load float, float* %352
%354 = fsub float %353, %351
store float %354, float* %352
%355 = add nuw nsw i64 %331, 4
%356 = icmp eq i64 %355, %209
br i1 %356, label %357, label %330
357: ; preds = %312, %330, %292, %205
ret void
}