#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double *dvector(int, int);
int /*<<< orphan*/ free_dvector(double *, int);
void stub1(float, double *, int);
void stub2(float, double *, int);
int /*<<< orphan*/ svbksbd(double **, double *, double **, int, int, double *,
                           double *);
int svdcmpd(double **, int, int, double *, double **);
int svdfit(float x[], float y[], float sig[], int ndata, double a[], int ma,
           double **u, double **v, double *w, double *chisq,
           void (*funcs)(float, double *, int)) {
  int i, j, ier;
  double wmax, tmp, thresh, sum, *b, *afunc;
  b = dvector(1, ndata);
  afunc = dvector(1, ma);
  for (i = 1; i <= ndata; i++) {
    (*funcs)(x[i], afunc, ma);
    tmp = 1.0 / sig[i];
    for (j = 1; j <= ma; j++)
      u[i][j] = afunc[j] * tmp;
    b[i] = y[i] * tmp;
  }
  ier = svdcmpd(u, ndata, ma, w, v);
  if (ier != 1)
    goto out;
  wmax = 0.0;
  for (j = 1; j <= ma; j++)
    if (w[j] > wmax)
      wmax = w[j];
  thresh = 1.0e-5 * wmax;
  for (j = 1; j <= ma; j++)
    if (w[j] < thresh)
      w[j] = 0.0;
  svbksbd(u, w, v, ndata, ma, b, a);
  *chisq = 0.0;
  for (i = 1; i <= ndata; i++) {
    (*funcs)(x[i], afunc, ma);
    for (sum = 0.0, j = 1; j <= ma; j++)
      sum += a[j] * afunc[j];
    *chisq += (tmp = (y[i] - sum) / sig[i], tmp * tmp);
  }
out:
  free_dvector(afunc, 1);
  free_dvector(b, 1);
  return ier;
}


x86 assembly (clang, -O0):
<svdfit>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    -0x1c(%rbp),%esi
mov    $0x1,%edi
call   1050 <dvector@plt>
mov    %rax,-0x60(%rbp)
mov    -0x2c(%rbp),%esi
mov    $0x1,%edi
call   1050 <dvector@plt>
mov    %rax,-0x68(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     125d <svdfit+0x11d>
mov    0x30(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movss  (%rcx,%rdx,4),%xmm0
mov    -0x68(%rbp),%rdi
mov    -0x2c(%rbp),%esi
call   *%rax
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe2d(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     122c <svdfit+0xec>
mov    -0x68(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x48(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11eb <svdfit+0xab>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  -0x48(%rbp),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    119c <svdfit+0x5c>
mov    0x10(%rbp),%rdi
mov    -0x1c(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    0x20(%rbp),%rcx
mov    0x18(%rbp),%r8
call   1040 <svdcmpd@plt>
mov    %eax,-0x38(%rbp)
cmpl   $0x1,-0x38(%rbp)
je     1286 <svdfit+0x146>
jmp    1454 <svdfit+0x314>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     12de <svdfit+0x19e>
mov    0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    12cb <svdfit+0x18b>
mov    0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    12d0 <svdfit+0x190>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1295 <svdfit+0x155>
movsd  0xd1a(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1342 <svdfit+0x202>
mov    0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x50(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    132f <svdfit+0x1ef>
mov    0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1334 <svdfit+0x1f4>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12f7 <svdfit+0x1b7>
mov    0x10(%rbp),%rdi
mov    0x20(%rbp),%rsi
mov    0x18(%rbp),%rdx
mov    -0x1c(%rbp),%ecx
mov    -0x2c(%rbp),%r8d
mov    -0x60(%rbp),%r9
mov    -0x28(%rbp),%rax
mov    %rax,(%rsp)
call   1030 <svbksbd@plt>
mov    0x28(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     144f <svdfit+0x30f>
mov    0x30(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq -0x30(%rbp),%rdx
movss  (%rcx,%rdx,4),%xmm0
mov    -0x68(%rbp),%rdi
mov    -0x2c(%rbp),%esi
call   *%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     13f3 <svdfit+0x2b3>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13ad <svdfit+0x26d>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
subsd  -0x58(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1378 <svdfit+0x238>
jmp    1454 <svdfit+0x314>
mov    -0x68(%rbp),%rdi
mov    $0x1,%esi
call   1060 <free_dvector@plt>
mov    -0x60(%rbp),%rdi
mov    $0x1,%esi
call   1060 <free_dvector@plt>
mov    -0x38(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<svdfit>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r9d,%r14d
mov    %r8,%rbx
mov    %ecx,%ebp
mov    %rdx,0x40(%rsp)
mov    %rsi,0x38(%rsp)
mov    %rdi,0x30(%rsp)
mov    $0x1,%edi
mov    %ecx,%esi
call   1050 <dvector@plt>
mov    %rax,0x28(%rsp)
mov    $0x1,%edi
mov    %r14d,%esi
call   1050 <dvector@plt>
mov    %rax,%r15
mov    %rbp,0x10(%rsp)
test   %ebp,%ebp
jle    1400 <svdfit+0x2c0>
lea    0x1(%r14),%r12d
mov    0x10(%rsp),%rax
lea    0x1(%rax),%r13d
lea    0x8(%r15),%rax
mov    %rax,0x70(%rsp)
lea    (%r15,%r12,8),%rax
mov    %rax,0x20(%rsp)
lea    -0x1(%r12),%rax
lea    -0x5(%r12),%rcx
mov    %rcx,0x68(%rsp)
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %rax,0x18(%rsp)
and    $0xfffffffffffffffc,%rax
mov    %rax,0x58(%rsp)
add    $0x1,%rax
mov    %rax,0x50(%rsp)
mov    %rcx,%rax
mov    %rcx,0x60(%rsp)
and    $0xfffffffffffffffe,%rcx
mov    %rcx,0x48(%rsp)
mov    $0x1,%ebp
jmp    1229 <svdfit+0xe9>
nopl   0x0(%rax,%rax,1)
mov    0x38(%rsp),%rax
movss  (%rax,%rbp,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rsp),%rax
movsd  %xmm0,(%rax,%rbp,8)
add    $0x1,%rbp
cmp    %r13,%rbp
je     1400 <svdfit+0x2c0>
mov    0x30(%rsp),%rax
movss  (%rax,%rbp,4),%xmm0
mov    %r15,%rdi
mov    %r14d,%esi
call   *0xd0(%rsp)
mov    0x40(%rsp),%rax
movss  (%rax,%rbp,4),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
movsd  0xda7(%rip),%xmm0
divsd  %xmm1,%xmm0
test   %r14d,%r14d
jle    1200 <svdfit+0xc0>
mov    0xb0(%rsp),%rax
mov    (%rax,%rbp,8),%rax
mov    $0x1,%ecx
cmpq   $0x4,0x18(%rsp)
jb     1360 <svdfit+0x220>
lea    0x8(%rax),%rdx
cmp    0x20(%rsp),%rdx
jae    1299 <svdfit+0x159>
lea    (%rax,%r12,8),%rdx
cmp    %rdx,0x70(%rsp)
jb     1360 <svdfit+0x220>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
cmpq   $0x4,0x68(%rsp)
jae    12ad <svdfit+0x16d>
xor    %ecx,%ecx
jmp    130e <svdfit+0x1ce>
mov    0x48(%rsp),%rdx
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd 0x8(%r15,%rcx,8),%xmm2
movupd 0x18(%r15,%rcx,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x8(%rax,%rcx,8)
movupd %xmm3,0x18(%rax,%rcx,8)
movupd 0x28(%r15,%rcx,8),%xmm2
movupd 0x38(%r15,%rcx,8),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x28(%rax,%rcx,8)
movupd %xmm3,0x38(%rax,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rdx
jne    12c0 <svdfit+0x180>
testb  $0x1,0x60(%rsp)
je     133d <svdfit+0x1fd>
shl    $0x3,%rcx
or     $0x8,%rcx
movupd (%r15,%rcx,1),%xmm2
movupd 0x10(%r15,%rcx,1),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,(%rax,%rcx,1)
movupd %xmm3,0x10(%rax,%rcx,1)
mov    0x50(%rsp),%rcx
mov    0x58(%rsp),%rdx
cmp    %rdx,0x18(%rsp)
je     1200 <svdfit+0xc0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12d,%esi
sub    %ecx,%esi
mov    %rcx,%rdx
not    %rdx
add    %r12,%rdx
and    $0x3,%rsi
je     1399 <svdfit+0x259>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1380 <svdfit+0x240>
cmp    $0x3,%rdx
jb     1200 <svdfit+0xc0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rax,%rcx,8)
movsd  0x8(%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rax,%rcx,8)
movsd  0x10(%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rax,%rcx,8)
movsd  0x18(%r15,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rax,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r12
jne    13b0 <svdfit+0x270>
jmp    1200 <svdfit+0xc0>
mov    0xb0(%rsp),%r13
mov    %r13,%rdi
mov    0x10(%rsp),%rsi
mov    %r14d,%edx
mov    0xc0(%rsp),%r12
mov    %r12,%rcx
mov    0xb8(%rsp),%rbp
mov    %rbp,%r8
call   1040 <svdcmpd@plt>
mov    %eax,0x20(%rsp)
cmp    $0x1,%eax
jne    16ec <svdfit+0x5ac>
test   %r14d,%r14d
jle    154f <svdfit+0x40f>
mov    %r14d,%eax
lea    -0x1(%rax),%rcx
mov    %eax,%edx
and    $0x3,%edx
cmp    $0x3,%rcx
jae    1461 <svdfit+0x321>
xorpd  %xmm1,%xmm1
mov    $0x1,%esi
jmp    14a9 <svdfit+0x369>
mov    %eax,%edi
and    $0xfffffffc,%edi
xorpd  %xmm1,%xmm1
xor    %esi,%esi
nopl   0x0(%rax)
movsd  0x8(%r12,%rsi,8),%xmm0
maxsd  %xmm1,%xmm0
movsd  0x10(%r12,%rsi,8),%xmm1
maxsd  %xmm0,%xmm1
movsd  0x18(%r12,%rsi,8),%xmm0
maxsd  %xmm1,%xmm0
movsd  0x20(%r12,%rsi,8),%xmm1
maxsd  %xmm0,%xmm1
add    $0x4,%rsi
cmp    %rsi,%rdi
jne    1470 <svdfit+0x330>
add    $0x1,%rsi
movapd %xmm1,%xmm0
test   %rdx,%rdx
je     14d6 <svdfit+0x396>
lea    (%r12,%rsi,8),%rsi
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movsd  (%rsi,%rdi,8),%xmm0
maxsd  %xmm1,%xmm0
add    $0x1,%rdi
movapd %xmm0,%xmm1
cmp    %rdi,%rdx
jne    14c0 <svdfit+0x380>
test   %r14d,%r14d
jle    154f <svdfit+0x40f>
mulsd  0xb25(%rip),%xmm0
test   %rcx,%rcx
je     1536 <svdfit+0x3f6>
mov    %eax,%edx
and    $0xfffffffe,%edx
neg    %rdx
mov    $0x1,%ecx
jmp    1512 <svdfit+0x3d2>
nopw   0x0(%rax,%rax,1)
lea    (%rdx,%rcx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rcx
cmp    $0x1,%rsi
je     153b <svdfit+0x3fb>
ucomisd (%r12,%rcx,8),%xmm0
jbe    1522 <svdfit+0x3e2>
movq   $0x0,(%r12,%rcx,8)
ucomisd 0x8(%r12,%rcx,8),%xmm0
jbe    1500 <svdfit+0x3c0>
movq   $0x0,0x8(%r12,%rcx,8)
jmp    1500 <svdfit+0x3c0>
mov    $0x1,%ecx
test   $0x1,%al
je     154f <svdfit+0x40f>
ucomisd (%r12,%rcx,8),%xmm0
jbe    154f <svdfit+0x40f>
movq   $0x0,(%r12,%rcx,8)
mov    %rbx,(%rsp)
mov    %r13,%rdi
mov    %r12,%rsi
mov    %rbp,%rdx
mov    0x10(%rsp),%rbp
mov    %ebp,%ecx
mov    %r14d,%r8d
mov    0x28(%rsp),%r9
call   1030 <svbksbd@plt>
mov    0xc8(%rsp),%rax
movq   $0x0,(%rax)
test   %ebp,%ebp
jle    16ec <svdfit+0x5ac>
lea    0x1(%r14),%ecx
mov    0x10(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x10(%rsp)
lea    -0x1(%rcx),%r13
add    $0xfffffffffffffffe,%rcx
mov    %rcx,0x18(%rsp)
mov    %r13d,%ebp
and    $0x3,%ebp
and    $0xfffffffffffffffc,%r13
mov    $0x1,%r12d
jmp    160d <svdfit+0x4cd>
nopw   0x0(%rax,%rax,1)
xorpd  %xmm0,%xmm0
mov    0x38(%rsp),%rax
movss  (%rax,%r12,4),%xmm1
cvtss2sd %xmm1,%xmm1
subsd  %xmm0,%xmm1
mov    0x40(%rsp),%rax
movss  (%rax,%r12,4),%xmm0
cvtss2sd %xmm0,%xmm0
divsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm1
mov    0xc8(%rsp),%rax
addsd  (%rax),%xmm1
movsd  %xmm1,(%rax)
add    $0x1,%r12
cmp    0x10(%rsp),%r12
je     16ec <svdfit+0x5ac>
mov    0x30(%rsp),%rax
movss  (%rax,%r12,4),%xmm0
mov    %r15,%rdi
mov    %r14d,%esi
call   *0xd0(%rsp)
test   %r14d,%r14d
jle    15c0 <svdfit+0x480>
cmpq   $0x3,0x18(%rsp)
jae    1650 <svdfit+0x510>
xorpd  %xmm0,%xmm0
mov    $0x1,%eax
test   %rbp,%rbp
jne    16ba <svdfit+0x57a>
jmp    15c4 <svdfit+0x484>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorpd  %xmm0,%xmm0
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
movsd  0x8(%rbx,%rax,8),%xmm1
movsd  0x10(%rbx,%rax,8),%xmm2
mulsd  0x8(%r15,%rax,8),%xmm1
mulsd  0x10(%r15,%rax,8),%xmm2
addsd  %xmm0,%xmm1
movsd  0x18(%rbx,%rax,8),%xmm3
mulsd  0x18(%r15,%rax,8),%xmm3
addsd  %xmm1,%xmm2
movsd  0x20(%rbx,%rax,8),%xmm0
mulsd  0x20(%r15,%rax,8),%xmm0
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm0
add    $0x4,%rax
cmp    %rax,%r13
jne    1660 <svdfit+0x520>
add    $0x1,%rax
test   %rbp,%rbp
je     15c4 <svdfit+0x484>
lea    (%r15,%rax,8),%rcx
lea    (%rbx,%rax,8),%rax
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rax,%rdx,8),%xmm1
mulsd  (%rcx,%rdx,8),%xmm1
addsd  %xmm1,%xmm0
add    $0x1,%rdx
cmp    %rdx,%rbp
jne    16d0 <svdfit+0x590>
jmp    15c4 <svdfit+0x484>
mov    %r15,%rdi
mov    $0x1,%esi
call   1060 <free_dvector@plt>
mov    0x28(%rsp),%rdi
mov    $0x1,%esi
call   1060 <free_dvector@plt>
mov    0x20(%rsp),%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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