float update_fit3(map, a, coords, data, win_list, sigmay, dim, ivars,
                  total_units, samples, u, b, dd, diag, workspace, atb)
float **map, **data, **a, *b, **u, **dd, *diag, *workspace, *atb, sigmay;
int **coords, *win_list;
int dim, ivars, total_units, samples;
{
  int i, j, k, p, winner, dist, diff, s_count;
  float factory, c, distf, sum, d;
  int d_count;
  float weight, rms_error, error_weight();
  float wmax, thresh, press;
  int ma = ivars + 1;
  factory = -.5 / (sigmay * sigmay);
  for (i = 1; i <= samples; i++)
    win_list[i] = winner = find_winner(map, data, i, ivars, total_units);
  press = 0;
  s_count = 0;
  for (j = 1; j <= total_units; j++) {
    p = 1;
    for (i = 1; i <= samples; i++) {
      dist = 0;
      winner = win_list[i];
      for (k = 1; k <= dim; k++) {
        diff = coords[winner][k] - coords[j][k];
        dist = dist + diff * diff;
      }
      weight = exp(dist * factory);
      if (weight > .01) {
        u[p][1] = weight;
        for (k = 1; k <= ivars; k++)
          u[p][k + 1] = data[i][k] * weight;
        b[p] = data[i][ivars + 1] * weight;
        p++;
      }
    }
    if (p > ivars + 1)
      regress_ch2(u, b, a[j], p - 1, ivars, dd, diag, atb);
    sum = 0;
    k = 0;
    for (i = 1; i <= samples; i++) {
      if (win_list[i] == j) {
        distf = error_weight(data, i, ivars, a, j, dd, diag, atb, workspace);
        if (distf >= 0.0) {
          sum += distf * distf;
          k++;
        }
      }
    }
    press += sum;
    s_count += k;
  }
  if (s_count * 4 > samples)
    press = sqrt(press / ((float)s_count));
  else
    press = -1.0;
  return (press);
}


x86 assembly (clang, -O0):
<update_fit3>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
cvtsd2ss %xmm0,%xmm0
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movss  %xmm0,-0x2c(%rbp)
mov    %r9d,-0x30(%rbp)
mov    0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
movss  -0x2c(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe44(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x20(%rbp),%eax
jg     1213 <update_fit3+0xc3>
mov    -0x8(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x34(%rbp),%edx
mov    0x10(%rbp),%ecx
mov    0x18(%rbp),%r8d
mov    $0x0,%al
call   1050 <find_winner@plt>
mov    %eax,%edx
mov    %edx,-0x44(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11d0 <update_fit3+0x80>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x7c(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     14dd <update_fit3+0x38d>
movl   $0x1,-0x40(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x20(%rbp),%eax
jg     13a7 <update_fit3+0x257>
movl   $0x0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x44(%rbp)
movl   $0x1,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jg     12bd <update_fit3+0x16d>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x38(%rbp),%rdx
mov    (%rcx,%rdx,8),%rcx
movslq -0x3c(%rbp),%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x4c(%rbp),%ecx
imul   -0x4c(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    126b <update_fit3+0x11b>
cvtsi2ssl -0x48(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <exp@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd1e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1394 <update_fit3+0x244>
movss  -0x6c(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movss  %xmm0,0x4(%rax)
movl   $0x1,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jg     135f <update_fit3+0x20f>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x6c(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1311 <update_fit3+0x1c1>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x6c(%rbp),%xmm0
mov    0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1399 <update_fit3+0x249>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1243 <update_fit3+0xf3>
mov    -0x40(%rbp),%eax
mov    0x10(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jle    13f2 <update_fit3+0x2a2>
mov    0x28(%rbp),%rdi
mov    0x30(%rbp),%rsi
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
mov    0x10(%rbp),%r8d
mov    0x38(%rbp),%r9
mov    0x40(%rbp),%r10
mov    0x50(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
mov    $0x0,%al
call   1030 <regress_ch2@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x20(%rbp),%eax
jg     14b7 <update_fit3+0x367>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x38(%rbp),%eax
jne    14a4 <update_fit3+0x354>
mov    -0x20(%rbp),%rdi
mov    -0x34(%rbp),%esi
mov    0x10(%rbp),%edx
mov    -0x10(%rbp),%rcx
mov    -0x38(%rbp),%r8d
mov    0x38(%rbp),%r9
mov    0x40(%rbp),%r11
mov    0x50(%rbp),%r10
mov    0x48(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   1060 <error_weight@plt>
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     149f <update_fit3+0x34f>
movss  -0x5c(%rbp),%xmm0
movss  -0x5c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    14a4 <update_fit3+0x354>
jmp    14a9 <update_fit3+0x359>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1408 <update_fit3+0x2b8>
movss  -0x60(%rbp),%xmm0
addss  -0x7c(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1229 <update_fit3+0xd9>
mov    -0x50(%rbp),%eax
shl    $0x2,%eax
cmp    0x20(%rbp),%eax
jle    1511 <update_fit3+0x3c1>
movss  -0x7c(%rbp),%xmm0
cvtsi2ssl -0x50(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
call   1070 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x7c(%rbp)
jmp    151e <update_fit3+0x3ce>
movss  0xaf7(%rip),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x7c(%rbp),%xmm0
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<update_fit3>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x108,%rsp
mov    %r9,0x38(%rsp)
movsd  %xmm0,0x20(%rsp)
mov    %rcx,%r15
mov    %rdx,0x100(%rsp)
mov    %rsi,0x70(%rsp)
mov    0x180(%rsp),%rax
mov    %rax,0x68(%rsp)
mov    0x178(%rsp),%rax
mov    %rax,0xf8(%rsp)
mov    0x170(%rsp),%rax
mov    %rax,0x60(%rsp)
mov    0x168(%rsp),%rax
mov    %rax,0x58(%rsp)
mov    0x160(%rsp),%rax
mov    %rax,0x50(%rsp)
mov    0x158(%rsp),%rax
mov    %rax,0x48(%rsp)
mov    0x150(%rsp),%eax
mov    0x148(%rsp),%r12d
mov    0x140(%rsp),%r13d
mov    %rax,0x18(%rsp)
test   %eax,%eax
mov    %r8,0x10(%rsp)
jle    1237 <update_fit3+0xe7>
mov    %rdi,%r14
mov    0x18(%rsp),%rax
lea    0x1(%rax),%ebx
mov    $0x1,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r14,%rdi
mov    %r15,%rsi
mov    %ebp,%edx
mov    %r13d,%ecx
mov    %r12d,%r8d
xor    %eax,%eax
call   1060 <find_winner@plt>
mov    0x10(%rsp),%r8
mov    %eax,(%r8,%rbp,4)
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    1210 <update_fit3+0xc0>
test   %r12d,%r12d
jle    18cf <update_fit3+0x77f>
mov    %r15,0x80(%rsp)
movsd  0x20(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
mulss  %xmm0,%xmm0
movss  0xda2(%rip),%xmm1
divss  %xmm0,%xmm1
movss  %xmm1,0x34(%rsp)
mov    %r13,0x28(%rsp)
add    $0x1,%r13d
movslq %r13d,%rax
mov    %rax,0xf0(%rsp)
mov    0x38(%rsp),%rbp
mov    %r12,%rax
lea    0x1(%rbp),%r12d
mov    0x18(%rsp),%r14
lea    0x1(%r14),%ecx
mov    %rcx,0x20(%rsp)
add    $0x1,%eax
mov    %rax,0x90(%rsp)
lea    0x1(%r13),%rax
mov    %rax,0xc0(%rsp)
lea    -0x1(%r13),%rax
lea    -0x1(%r12),%rcx
lea    -0x9(%r12),%rdx
mov    %rdx,0xe8(%rsp)
shr    $0x3,%rdx
add    $0x1,%rdx
lea    -0x9(%r13),%rsi
mov    %rsi,0xb0(%rsp)
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %rcx,0x78(%rsp)
mov    %rcx,%rdi
and    $0xfffffffffffffff8,%rdi
mov    %rdx,%rcx
mov    %rdx,0xe0(%rsp)
and    $0xfffffffffffffffe,%rdx
mov    %rdx,0xc8(%rsp)
mov    %rax,0x40(%rsp)
mov    %rax,%rcx
and    $0xfffffffffffffff8,%rcx
mov    %rsi,%rax
mov    %rsi,0xa8(%rsp)
and    $0xfffffffffffffffe,%rsi
mov    %rsi,0x88(%rsp)
xorps  %xmm0,%xmm0
mov    %rdi,0xd8(%rsp)
lea    0x1(%rdi),%rax
mov    %rax,0xd0(%rsp)
mov    %rcx,0xa0(%rsp)
lea    0x1(%rcx),%rax
mov    %rax,0x98(%rsp)
mov    $0x1,%r15d
xor    %ecx,%ecx
jmp    1392 <update_fit3+0x242>
nopw   0x0(%rax,%rax,1)
xor    %ebp,%ebp
xorps  %xmm1,%xmm1
movss  %xmm1,0xc(%rsp)
mov    0xb8(%rsp),%rcx
add    %ebp,%ecx
addss  0xc(%rsp),%xmm0
add    $0x1,%r15
cmp    0x90(%rsp),%r15
mov    0x38(%rsp),%rbp
je     18d9 <update_fit3+0x789>
test   %r14d,%r14d
movss  %xmm0,0x8(%rsp)
mov    %rcx,0xb8(%rsp)
mov    $0x1,%r14d
jle    17e0 <update_fit3+0x690>
mov    $0x1,%ebx
jmp    13f1 <update_fit3+0x2a1>
cs nopw 0x0(%rax,%rax,1)
mov    0xf0(%rsp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    0x50(%rsp),%rax
movss  %xmm0,(%rax,%r14,4)
add    $0x1,%r14d
movss  0x8(%rsp),%xmm0
add    $0x1,%rbx
cmp    0x20(%rsp),%rbx
je     17e0 <update_fit3+0x690>
test   %ebp,%ebp
jle    1420 <update_fit3+0x2d0>
movslq (%r8,%rbx,4),%rax
mov    0x100(%rsp),%rcx
mov    (%rcx,%rax,8),%rax
mov    (%rcx,%r15,8),%rcx
cmpq   $0x8,0x78(%rsp)
jae    1430 <update_fit3+0x2e0>
xor    %edx,%edx
mov    $0x1,%esi
jmp    15d0 <update_fit3+0x480>
nopl   (%rax)
xor    %edx,%edx
jmp    15e4 <update_fit3+0x494>
nopw   0x0(%rax,%rax,1)
cmpq   $0x8,0xe8(%rsp)
jae    1448 <update_fit3+0x2f8>
xorps  %xmm0,%xmm0
xor    %edx,%edx
xorps  %xmm1,%xmm1
jmp    152a <update_fit3+0x3da>
xorps  %xmm0,%xmm0
mov    0xc8(%rsp),%rsi
xor    %edx,%edx
xorps  %xmm1,%xmm1
nopl   0x0(%rax,%rax,1)
movdqu 0x4(%rax,%rdx,4),%xmm4
movdqu 0x14(%rax,%rdx,4),%xmm5
movdqu 0x24(%rax,%rdx,4),%xmm3
movdqu 0x34(%rax,%rdx,4),%xmm2
movdqu 0x4(%rcx,%rdx,4),%xmm6
psubd  %xmm6,%xmm4
movdqu 0x14(%rcx,%rdx,4),%xmm6
psubd  %xmm6,%xmm5
movdqu 0x24(%rcx,%rdx,4),%xmm6
psubd  %xmm6,%xmm3
movdqu 0x34(%rcx,%rdx,4),%xmm6
psubd  %xmm6,%xmm2
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm4,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm6,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm4
paddd  %xmm0,%xmm4
pshufd $0xf5,%xmm5,%xmm0
pmuludq %xmm5,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm0,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm5
paddd  %xmm1,%xmm5
pshufd $0xf5,%xmm3,%xmm1
pmuludq %xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm0
pmuludq %xmm1,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
paddd  %xmm4,%xmm0
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm2,%xmm2
pshufd $0xe8,%xmm2,%xmm1
pmuludq %xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm2
punpckldq %xmm2,%xmm1
paddd  %xmm5,%xmm1
add    $0x10,%rdx
add    $0xfffffffffffffffe,%rsi
jne    1460 <update_fit3+0x310>
testb  $0x1,0xe0(%rsp)
01
je     1598 <update_fit3+0x448>
shl    $0x2,%rdx
or     $0x4,%rdx
movdqu (%rax,%rdx,1),%xmm2
movdqu 0x10(%rax,%rdx,1),%xmm3
movdqu (%rcx,%rdx,1),%xmm4
psubd  %xmm4,%xmm2
movdqu 0x10(%rcx,%rdx,1),%xmm4
psubd  %xmm4,%xmm3
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm2,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm4,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm2
paddd  %xmm2,%xmm0
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm3,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm2,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm3
paddd  %xmm3,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%edx
mov    0xd0(%rsp),%rsi
mov    0xd8(%rsp),%rdi
cmp    %rdi,0x78(%rsp)
je     15e4 <update_fit3+0x494>
nopl   0x0(%rax)
mov    (%rax,%rsi,4),%edi
sub    (%rcx,%rsi,4),%edi
imul   %edi,%edi
add    %edi,%edx
add    $0x1,%rsi
cmp    %rsi,%r12
jne    15d0 <update_fit3+0x480>
xorps  %xmm0,%xmm0
cvtsi2ss %edx,%xmm0
mulss  0x34(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <exp@plt>
cvtsd2ss %xmm0,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd 0xa03(%rip),%xmm1
jbe    1690 <update_fit3+0x540>
movslq %r14d,%r14
mov    0x48(%rsp),%rax
mov    (%rax,%r14,8),%rcx
movss  %xmm0,0x4(%rcx)
mov    0x80(%rsp),%rax
mov    (%rax,%rbx,8),%rax
cmpl   $0x0,0x28(%rsp)
mov    0x10(%rsp),%r8
jle    13c0 <update_fit3+0x270>
mov    $0x1,%edx
cmpq   $0x8,0x40(%rsp)
jb     1740 <update_fit3+0x5f0>
lea    0x8(%rcx),%rsi
lea    (%rax,%r13,4),%rdi
cmp    %rdi,%rsi
jae    1677 <update_fit3+0x527>
mov    0xc0(%rsp),%rsi
lea    (%rcx,%rsi,4),%rsi
lea    0x4(%rax),%rdi
cmp    %rsi,%rdi
jb     1740 <update_fit3+0x5f0>
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
cmpq   $0x8,0xb0(%rsp)
jae    169a <update_fit3+0x54a>
xor    %edx,%edx
jmp    16ee <update_fit3+0x59e>
nopl   (%rax)
mov    0x10(%rsp),%r8
jmp    13dc <update_fit3+0x28c>
mov    0x88(%rsp),%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups 0x4(%rax,%rdx,4),%xmm2
movups 0x14(%rax,%rdx,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,0x8(%rcx,%rdx,4)
movups %xmm3,0x18(%rcx,%rdx,4)
movups 0x24(%rax,%rdx,4),%xmm2
movups 0x34(%rax,%rdx,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,0x28(%rcx,%rdx,4)
movups %xmm3,0x38(%rcx,%rdx,4)
add    $0x10,%rdx
add    $0xfffffffffffffffe,%rsi
jne    16b0 <update_fit3+0x560>
testb  $0x1,0xa8(%rsp)
01
je     171f <update_fit3+0x5cf>
shl    $0x2,%rdx
mov    %rdx,%rsi
or     $0x4,%rsi
movups (%rax,%rsi,1),%xmm2
movups 0x10(%rax,%rsi,1),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
or     $0x8,%rdx
movups %xmm2,(%rcx,%rdx,1)
movups %xmm3,0x10(%rcx,%rdx,1)
mov    0x98(%rsp),%rdx
mov    0xa0(%rsp),%rsi
cmp    %rsi,0x40(%rsp)
je     13c0 <update_fit3+0x270>
nopw   0x0(%rax,%rax,1)
mov    %r13d,%edi
sub    %edx,%edi
mov    %rdx,%rsi
not    %rsi
add    %r13,%rsi
and    $0x3,%rdi
je     1779 <update_fit3+0x629>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  (%rax,%rdx,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x4(%rcx,%rdx,4)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rdi
jne    1760 <update_fit3+0x610>
cmp    $0x3,%rsi
jb     13c0 <update_fit3+0x270>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  (%rax,%rdx,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x4(%rcx,%rdx,4)
movss  0x4(%rax,%rdx,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x8(%rcx,%rdx,4)
movss  0x8(%rax,%rdx,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0xc(%rcx,%rdx,4)
movss  0xc(%rax,%rdx,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x10(%rcx,%rdx,4)
add    $0x4,%rdx
cmp    %rdx,%r13
jne    1790 <update_fit3+0x640>
jmp    13c0 <update_fit3+0x270>
nopl   (%rax)
cmp    %r13d,%r14d
jle    1827 <update_fit3+0x6d7>
mov    0x70(%rsp),%rax
mov    (%rax,%r15,8),%rdx
add    $0xffffffff,%r14d
mov    0x48(%rsp),%rdi
mov    0x50(%rsp),%rsi
mov    %r14d,%ecx
mov    0x28(%rsp),%r8
mov    0x58(%rsp),%r9
xor    %eax,%eax
push   0x68(%rsp)
push   0x68(%rsp)
call   1030 <regress_ch2@plt>
movss  0x18(%rsp),%xmm0
mov    0x20(%rsp),%r8
add    $0x10,%rsp
mov    0x18(%rsp),%r14
test   %r14d,%r14d
jle    1360 <update_fit3+0x210>
xorps  %xmm1,%xmm1
movss  %xmm1,0xc(%rsp)
xor    %ebp,%ebp
mov    $0x1,%ebx
jmp    186a <update_fit3+0x71a>
nopw   0x0(%rax,%rax,1)
mov    0x10(%rsp),%r8
movss  0x8(%rsp),%xmm0
add    $0x1,%rbx
cmp    %rbx,0x20(%rsp)
je     136b <update_fit3+0x21b>
mov    (%r8,%rbx,4),%eax
cmp    %rax,%r15
jne    185b <update_fit3+0x70b>
sub    $0x8,%rsp
mov    0x88(%rsp),%rdi
mov    %ebx,%esi
mov    0x30(%rsp),%rdx
mov    0x78(%rsp),%rcx
mov    %r15d,%r8d
mov    0x60(%rsp),%r9
xor    %eax,%eax
push   0x100(%rsp)
push   0x78(%rsp)
push   0x78(%rsp)
call   1070 <error_weight@plt>
add    $0x20,%rsp
ucomiss 0x754(%rip),%xmm0
jb     1850 <update_fit3+0x700>
mulss  %xmm0,%xmm0
movss  0xc(%rsp),%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0xc(%rsp)
add    $0x1,%ebp
jmp    1850 <update_fit3+0x700>
xorps  %xmm0,%xmm0
xor    %ecx,%ecx
mov    0x18(%rsp),%r14
lea    0x0(,%rcx,4),%eax
cmp    %r14d,%eax
jle    18fe <update_fit3+0x7ae>
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
divss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1918 <update_fit3+0x7c8>
sqrtss %xmm0,%xmm0
jmp    1906 <update_fit3+0x7b6>
movss  0x6fe(%rip),%xmm0
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <sqrtf@plt>

LLVM IR (-O0):
define float @update_fit3(float** %0, float** %1, i32** %2, float** %3, i32* %4, double %5, i32 %6, i32 %7, i32 %8, i32 %9, float** %10, float* %11, float** %12, float* %13, float* %14, float* %15) {
%17 = alloca float**
%18 = alloca float**
%19 = alloca i32**
%20 = alloca float**
%21 = alloca i32*
%22 = alloca float
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca float**
%28 = alloca float*
%29 = alloca float**
%30 = alloca float*
%31 = alloca float*
%32 = alloca float*
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca float
%42 = alloca float
%43 = alloca float
%44 = alloca float
%45 = alloca float
%46 = alloca i32
%47 = alloca float
%48 = alloca float
%49 = alloca float
%50 = alloca float
%51 = alloca float
%52 = alloca i32
%53 = fptrunc double %5 to float
store float** %0, float*** %17
store float** %1, float*** %18
store i32** %2, i32*** %19
store float** %3, float*** %20
store i32* %4, i32** %21
store float %53, float* %22
store i32 %6, i32* %23
store i32 %7, i32* %24
store i32 %8, i32* %25
store i32 %9, i32* %26
store float** %10, float*** %27
store float* %11, float** %28
store float** %12, float*** %29
store float* %13, float** %30
store float* %14, float** %31
store float* %15, float** %32
%54 = load i32, i32* %24
%55 = add nsw i32 %54, 1
store i32 %55, i32* %52
%56 = load float, float* %22
%57 = load float, float* %22
%58 = fmul float %56, %57
%59 = fpext float %58 to double
%60 = fdiv double -5.000000e-01, %59
%61 = fptrunc double %60 to float
store float %61, float* %41
store i32 1, i32* %33
br label %62
62: ; preds = %77, %16
%63 = load i32, i32* %33
%64 = load i32, i32* %26
%65 = icmp sle i32 %63, %64
br i1 %65, label %66, label %80
66: ; preds = %62
%67 = load float**, float*** %17
%68 = load float**, float*** %20
%69 = load i32, i32* %33
%70 = load i32, i32* %24
%71 = load i32, i32* %25
%72 = call i32 (float**, float**, i32, i32, i32, ...) bitcast (i32 (...)* @find_winner to i32 (float**, float**, i32, i32, i32, ...)*)(float** %67, float** %68, i32 %69, i32 %70, i32 %71)
store i32 %72, i32* %37
%73 = load i32*, i32** %21
%74 = load i32, i32* %33
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i32, i32* %73, i64 %75
store i32 %72, i32* %76
br label %77
77: ; preds = %66
%78 = load i32, i32* %33
%79 = add nsw i32 %78, 1
store i32 %79, i32* %33
br label %62
80: ; preds = %62
store float 0.000000e+00, float* %51
store i32 0, i32* %40
store i32 1, i32* %34
br label %81
81: ; preds = %264, %80
%82 = load i32, i32* %34
%83 = load i32, i32* %25
%84 = icmp sle i32 %82, %83
br i1 %84, label %85, label %267
85: ; preds = %81
store i32 1, i32* %36
store i32 1, i32* %33
br label %86
86: ; preds = %195, %85
%87 = load i32, i32* %33
%88 = load i32, i32* %26
%89 = icmp sle i32 %87, %88
br i1 %89, label %90, label %198
90: ; preds = %86
store i32 0, i32* %38
%91 = load i32*, i32** %21
%92 = load i32, i32* %33
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i32, i32* %91, i64 %93
%95 = load i32, i32* %94
store i32 %95, i32* %37
store i32 1, i32* %35
br label %96
96: ; preds = %125, %90
%97 = load i32, i32* %35
%98 = load i32, i32* %23
%99 = icmp sle i32 %97, %98
br i1 %99, label %100, label %128
100: ; preds = %96
%101 = load i32**, i32*** %19
%102 = load i32, i32* %37
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i32*, i32** %101, i64 %103
%105 = load i32*, i32** %104
%106 = load i32, i32* %35
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i32, i32* %105, i64 %107
%109 = load i32, i32* %108
%110 = load i32**, i32*** %19
%111 = load i32, i32* %34
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i32*, i32** %110, i64 %112
%114 = load i32*, i32** %113
%115 = load i32, i32* %35
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i32, i32* %114, i64 %116
%118 = load i32, i32* %117
%119 = sub nsw i32 %109, %118
store i32 %119, i32* %39
%120 = load i32, i32* %38
%121 = load i32, i32* %39
%122 = load i32, i32* %39
%123 = mul nsw i32 %121, %122
%124 = add nsw i32 %120, %123
store i32 %124, i32* %38
br label %125
125: ; preds = %100
%126 = load i32, i32* %35
%127 = add nsw i32 %126, 1
store i32 %127, i32* %35
br label %96
128: ; preds = %96
%129 = load i32, i32* %38
%130 = sitofp i32 %129 to float
%131 = load float, float* %41
%132 = fmul float %130, %131
%133 = fpext float %132 to double
%134 = call double @exp(double %133)
%135 = fptrunc double %134 to float
store float %135, float* %47
%136 = load float, float* %47
%137 = fpext float %136 to double
%138 = fcmp ogt double %137, 1.000000e-02
br i1 %138, label %139, label %194
139: ; preds = %128
%140 = load float, float* %47
%141 = load float**, float*** %27
%142 = load i32, i32* %36
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds float*, float** %141, i64 %143
%145 = load float*, float** %144
%146 = getelementptr inbounds float, float* %145, i64 1
store float %140, float* %146
store i32 1, i32* %35
br label %147
147: ; preds = %172, %139
%148 = load i32, i32* %35
%149 = load i32, i32* %24
%150 = icmp sle i32 %148, %149
br i1 %150, label %151, label %175
151: ; preds = %147
%152 = load float**, float*** %20
%153 = load i32, i32* %33
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds float*, float** %152, i64 %154
%156 = load float*, float** %155
%157 = load i32, i32* %35
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds float, float* %156, i64 %158
%160 = load float, float* %159
%161 = load float, float* %47
%162 = fmul float %160, %161
%163 = load float**, float*** %27
%164 = load i32, i32* %36
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds float*, float** %163, i64 %165
%167 = load float*, float** %166
%168 = load i32, i32* %35
%169 = add nsw i32 %168, 1
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds float, float* %167, i64 %170
store float %162, float* %171
br label %172
172: ; preds = %151
%173 = load i32, i32* %35
%174 = add nsw i32 %173, 1
store i32 %174, i32* %35
br label %147
175: ; preds = %147
%176 = load float**, float*** %20
%177 = load i32, i32* %33
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds float*, float** %176, i64 %178
%180 = load float*, float** %179
%181 = load i32, i32* %24
%182 = add nsw i32 %181, 1
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds float, float* %180, i64 %183
%185 = load float, float* %184
%186 = load float, float* %47
%187 = fmul float %185, %186
%188 = load float*, float** %28
%189 = load i32, i32* %36
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds float, float* %188, i64 %190
store float %187, float* %191
%192 = load i32, i32* %36
%193 = add nsw i32 %192, 1
store i32 %193, i32* %36
br label %194
194: ; preds = %175, %128
br label %195
195: ; preds = %194
%196 = load i32, i32* %33
%197 = add nsw i32 %196, 1
store i32 %197, i32* %33
br label %86
198: ; preds = %86
%199 = load i32, i32* %36
%200 = load i32, i32* %24
%201 = add nsw i32 %200, 1
%202 = icmp sgt i32 %199, %201
br i1 %202, label %203, label %218
203: ; preds = %198
%204 = load float**, float*** %27
%205 = load float*, float** %28
%206 = load float**, float*** %18
%207 = load i32, i32* %34
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds float*, float** %206, i64 %208
%210 = load float*, float** %209
%211 = load i32, i32* %36
%212 = sub nsw i32 %211, 1
%213 = load i32, i32* %24
%214 = load float**, float*** %29
%215 = load float*, float** %30
%216 = load float*, float** %32
%217 = call i32 (float**, float*, float*, i32, i32, float**, float*, float*, ...) bitcast (i32 (...)* @regress_ch2 to i32 (float**, float*, float*, i32, i32, float**, float*, float*, ...)*)(float** %204, float* %205, float* %210, i32 %212, i32 %213, float** %214, float* %215, float* %216)
br label %218
218: ; preds = %203, %198
store float 0.000000e+00, float* %44
store i32 0, i32* %35
store i32 1, i32* %33
br label %219
219: ; preds = %254, %218
%220 = load i32, i32* %33
%221 = load i32, i32* %26
%222 = icmp sle i32 %220, %221
br i1 %222, label %223, label %257
223: ; preds = %219
%224 = load i32*, i32** %21
%225 = load i32, i32* %33
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds i32, i32* %224, i64 %226
%228 = load i32, i32* %227
%229 = load i32, i32* %34
%230 = icmp eq i32 %228, %229
br i1 %230, label %231, label %253
231: ; preds = %223
%232 = load float**, float*** %20
%233 = load i32, i32* %33
%234 = load i32, i32* %24
%235 = load float**, float*** %18
%236 = load i32, i32* %34
%237 = load float**, float*** %29
%238 = load float*, float** %30
%239 = load float*, float** %32
%240 = load float*, float** %31
%241 = call float (float**, i32, i32, float**, i32, float**, float*, float*, float*, ...) bitcast (float (...)* @error_weight to float (float**, i32, i32, float**, i32, float**, float*, float*, float*, ...)*)(float** %232, i32 %233, i32 %234, float** %235, i32 %236, float** %237, float* %238, float* %239, float* %240)
store float %241, float* %43
%242 = load float, float* %43
%243 = fpext float %242 to double
%244 = fcmp oge double %243, 0.000000e+00
br i1 %244, label %245, label %252
245: ; preds = %231
%246 = load float, float* %43
%247 = load float, float* %43
%248 = load float, float* %44
%249 = call float @llvm.fmuladd.f32(float %246, float %247, float %248)
store float %249, float* %44
%250 = load i32, i32* %35
%251 = add nsw i32 %250, 1
store i32 %251, i32* %35
br label %252
252: ; preds = %245, %231
br label %253
253: ; preds = %252, %223
br label %254
254: ; preds = %253
%255 = load i32, i32* %33
%256 = add nsw i32 %255, 1
store i32 %256, i32* %33
br label %219
257: ; preds = %219
%258 = load float, float* %44
%259 = load float, float* %51
%260 = fadd float %259, %258
store float %260, float* %51
%261 = load i32, i32* %35
%262 = load i32, i32* %40
%263 = add nsw i32 %262, %261
store i32 %263, i32* %40
br label %264
264: ; preds = %257
%265 = load i32, i32* %34
%266 = add nsw i32 %265, 1
store i32 %266, i32* %34
br label %81
267: ; preds = %81
%268 = load i32, i32* %40
%269 = mul nsw i32 %268, 4
%270 = load i32, i32* %26
%271 = icmp sgt i32 %269, %270
br i1 %271, label %272, label %280
272: ; preds = %267
%273 = load float, float* %51
%274 = load i32, i32* %40
%275 = sitofp i32 %274 to float
%276 = fdiv float %273, %275
%277 = fpext float %276 to double
%278 = call double @sqrt(double %277)
%279 = fptrunc double %278 to float
store float %279, float* %51
br label %281
280: ; preds = %267
store float -1.000000e+00, float* %51
br label %281
281: ; preds = %280, %272
%282 = load float, float* %51
ret float %282
}

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