int gadaptive(ystart, nvar, xs, x2, eps, hguess, hmin, work, ier, epjac, iflag,
              jstart)
double *ystart, *xs, x2, eps, *hguess, hmin, *work, epjac;
int nvar, *ier, iflag, *jstart;
{
  double h1 = *hguess;
  int nstp, i;
  double x1 = *xs;
  double x, hnext, hdid, h;
  double *yscal, *y, *dydx, *work2;
  yscal = work;
  y = work + nvar;
  dydx = y + nvar;
  work2 = dydx + nvar;
  x = x1;
  h = ((x2 - x1) >= 0.0 ? fabs(h1) : -fabs(h1));
  set_wieners(*hguess, ystart, x1);
  *ier = 0;
  for (i = 0; i < nvar; i++)
    y[i] = ystart[i];
  for (nstp = 1; nstp <= 100000; nstp++) {
    rhs(x, y, dydx, nvar);
    for (i = 0; i < nvar; i++)
      if (iflag == 9)
        yscal[i] = ((1) > (fabs(y[i])) ? (1) : (fabs(y[i])));
      else
        yscal[i] = fabs(y[i]) + fabs(dydx[i] * h) + 1.0e-30;
    if ((x + h - x2) * (x + h - x1) > 0.0)
      h = x2 - x;
    if (iflag == 9)
      stiff(y, dydx, nvar, &x, h, eps, yscal, &hdid, &hnext, work2, epjac, ier);
    else
      rkqs(y, dydx, nvar, &x, h, eps, yscal, &hdid, &hnext, work2, ier);
    if (*ier > 0)
      return -1;
    if ((x - x2) * (x2 - x1) >= 0.0) {
      for (i = 0; i < nvar; i++)
        ystart[i] = y[i];
      *hguess = ((x2 - x1) >= 0.0 ? fabs(hnext) : -fabs(hnext));
      *xs = x2;
      return 0;
    }
    if (fabs(hnext) <= hmin) {
      *ier = 2;
      return -1;
    }
    h = hnext;
  }
  *ier = 3;
  return -1;
}


x86 assembly (clang, -O0):
<gadaptive>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  %xmm1,-0x30(%rbp)
mov    %rcx,-0x38(%rbp)
movsd  %xmm2,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  %xmm3,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x98(%rbp)
mov    -0x48(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xa0(%rbp)
mov    -0xa0(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xa8(%rbp)
mov    -0xa8(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xb0(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1228 <gadaptive+0xe8>
movsd  -0x60(%rbp),%xmm0
movaps 0xde9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1257 <gadaptive+0x117>
movsd  -0x60(%rbp),%xmm0
movaps 0xdcc(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rdi
movsd  -0x70(%rbp),%xmm1
mov    $0x2,%al
call   1050 <set_wieners@plt>
mov    -0x50(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12c7 <gadaptive+0x187>
mov    -0x10(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xa0(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1290 <gadaptive+0x150>
movl   $0x1,-0x64(%rbp)
cmpl   $0x186a0,-0x64(%rbp)
jg     1663 <gadaptive+0x523>
movsd  -0x78(%rbp),%xmm0
mov    -0xa0(%rbp),%rdi
mov    -0xa8(%rbp),%rsi
mov    -0x14(%rbp),%edx
mov    $0x1,%al
call   1030 <rhs@plt>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1408 <gadaptive+0x2c8>
cmpl   $0x9,0x10(%rbp)
jne    1397 <gadaptive+0x257>
mov    -0xa0(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xcd4(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xce0(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1357 <gadaptive+0x217>
movsd  0xcce(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    137a <gadaptive+0x23a>
mov    -0xa0(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xc92(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x98(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    13f5 <gadaptive+0x2b5>
mov    -0xa0(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xc52(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0xa8(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movaps 0xc2f(%rip),%xmm2
pand   %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xc2f(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x98(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    13fa <gadaptive+0x2ba>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    12ff <gadaptive+0x1bf>
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
subsd  -0x28(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
addsd  -0x90(%rbp),%xmm1
ff
subsd  -0x70(%rbp),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    144f <gadaptive+0x30f>
movsd  -0x28(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cmpl   $0x9,0x10(%rbp)
jne    14b7 <gadaptive+0x377>
mov    -0xa0(%rbp),%rdi
mov    -0xa8(%rbp),%rsi
mov    -0x14(%rbp),%edx
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm1
mov    -0x98(%rbp),%r8
mov    -0xb0(%rbp),%r10
movsd  -0x58(%rbp),%xmm2
mov    -0x50(%rbp),%rax
lea    -0x78(%rbp),%rcx
lea    -0x88(%rbp),%r9
lea    -0x80(%rbp),%r11
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x3,%al
call   1060 <stiff@plt>
jmp    150b <gadaptive+0x3cb>
mov    -0xa0(%rbp),%rdi
mov    -0xa8(%rbp),%rsi
mov    -0x14(%rbp),%edx
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x30(%rbp),%xmm1
mov    -0x98(%rbp),%r8
mov    -0xb0(%rbp),%r10
mov    -0x50(%rbp),%rax
lea    -0x78(%rbp),%rcx
lea    -0x88(%rbp),%r9
lea    -0x80(%rbp),%r11
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x2,%al
call   1040 <rkqs@plt>
mov    -0x50(%rbp),%rax
cmpl   $0x0,(%rax)
jle    1524 <gadaptive+0x3e4>
movl   $0xffffffff,-0x4(%rbp)
jmp    1674 <gadaptive+0x534>
movsd  -0x78(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x70(%rbp),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1613 <gadaptive+0x4d3>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1587 <gadaptive+0x447>
mov    -0xa0(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1550 <gadaptive+0x410>
movsd  -0x28(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     15bb <gadaptive+0x47b>
movsd  -0x80(%rbp),%xmm0
movaps 0xa56(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    15ea <gadaptive+0x4aa>
movsd  -0x80(%rbp),%xmm0
movaps 0xa39(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x28(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1674 <gadaptive+0x534>
movsd  -0x80(%rbp),%xmm1
movaps 0x9e1(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1648 <gadaptive+0x508>
mov    -0x50(%rbp),%rax
movl   $0x2,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    1674 <gadaptive+0x534>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    12ce <gadaptive+0x18e>
mov    -0x50(%rbp),%rax
movl   $0x3,(%rax)
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gadaptive>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
movsd  %xmm3,0x88(%rsp)
mov    %r9,%r12
movsd  %xmm2,0x90(%rsp)
movsd  %xmm1,0x58(%rsp)
movapd %xmm0,%xmm2
mov    %esi,%ebp
mov    %rdi,%rbx
mov    %rcx,0x80(%rsp)
movsd  (%rcx),%xmm0
mov    %rdx,0x78(%rsp)
movsd  (%rdx),%xmm1
movslq %esi,%r15
mov    %r8,0x8(%rsp)
lea    (%r8,%r15,8),%r14
lea    (%r14,%r15,8),%rax
mov    %rax,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  %xmm2,0x30(%rsp)
movapd %xmm2,%xmm3
subsd  %xmm1,%xmm3
movapd 0xe45(%rip),%xmm4
andpd  %xmm0,%xmm4
movapd 0xe49(%rip),%xmm2
orpd   %xmm0,%xmm2
xorpd  %xmm5,%xmm5
movsd  %xmm3,0x48(%rsp)
cmplesd %xmm3,%xmm5
andpd  %xmm5,%xmm4
andnpd %xmm2,%xmm5
orpd   %xmm4,%xmm5
movapd %xmm5,0xa0(%rsp)
movsd  %xmm1,0x68(%rsp)
mov    $0x2,%al
call   1050 <set_wieners@plt>
mov    %r12,%r8
movl   $0x0,(%r12)
mov    %ebp,0x14(%rsp)
mov    %ebp,%ebp
test   %r15d,%r15d
jle    13b8 <gadaptive+0x278>
cmpl   $0x4,0x14(%rsp)
jb     1240 <gadaptive+0x100>
lea    (%rbx,%rbp,8),%rax
cmp    %rax,%r14
jae    12cc <gadaptive+0x18c>
lea    (%r15,%rbp,1),%rax
mov    0x8(%rsp),%rcx
lea    (%rcx,%rax,8),%rax
cmp    %rbx,%rax
jbe    12cc <gadaptive+0x18c>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %rbp,%rcx
mov    %rbp,%rdx
and    $0x3,%rdx
je     1275 <gadaptive+0x135>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,(%r14,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    1260 <gadaptive+0x120>
cmp    $0x3,%rcx
jb     13b8 <gadaptive+0x278>
mov    0x8(%rsp),%rcx
lea    (%rcx,%r15,8),%rcx
add    $0x18,%rcx
nopl   0x0(%rax)
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,-0x18(%rcx,%rax,8)
movsd  0x8(%rbx,%rax,8),%xmm0
movsd  %xmm0,-0x10(%rcx,%rax,8)
movsd  0x10(%rbx,%rax,8),%xmm0
movsd  %xmm0,-0x8(%rcx,%rax,8)
movsd  0x18(%rbx,%rax,8),%xmm0
movsd  %xmm0,(%rcx,%rax,8)
add    $0x4,%rax
cmp    %rax,%rbp
jne    1290 <gadaptive+0x150>
jmp    13b8 <gadaptive+0x278>
mov    %ebp,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0xc,%rsi
jae    12ef <gadaptive+0x1af>
xor    %esi,%esi
jmp    136c <gadaptive+0x22c>
and    $0xfffffffffffffffc,%rdx
mov    0x8(%rsp),%rsi
lea    (%rsi,%r15,8),%rdi
add    $0x70,%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups (%rbx,%rsi,8),%xmm0
movups 0x10(%rbx,%rsi,8),%xmm1
movups %xmm0,-0x70(%rdi,%rsi,8)
movups %xmm1,-0x60(%rdi,%rsi,8)
movups 0x20(%rbx,%rsi,8),%xmm0
movups 0x30(%rbx,%rsi,8),%xmm1
movups %xmm0,-0x50(%rdi,%rsi,8)
movups %xmm1,-0x40(%rdi,%rsi,8)
movups 0x40(%rbx,%rsi,8),%xmm0
movups 0x50(%rbx,%rsi,8),%xmm1
movups %xmm0,-0x30(%rdi,%rsi,8)
movups %xmm1,-0x20(%rdi,%rsi,8)
movupd 0x60(%rbx,%rsi,8),%xmm0
movupd 0x70(%rbx,%rsi,8),%xmm1
movupd %xmm0,-0x10(%rdi,%rsi,8)
movupd %xmm1,(%rdi,%rsi,8)
add    $0x10,%rsi
add    $0xfffffffffffffffc,%rdx
jne    1310 <gadaptive+0x1d0>
test   %rcx,%rcx
je     13af <gadaptive+0x26f>
lea    (%rsi,%r15,1),%rdx
mov    0x8(%rsp),%rdi
lea    (%rdi,%rdx,8),%rdx
add    $0x10,%rdx
lea    (%rbx,%rsi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rcx
xor    %edi,%edi
movupd -0x10(%rsi,%rdi,1),%xmm0
movupd (%rsi,%rdi,1),%xmm1
movupd %xmm0,-0x10(%rdx,%rdi,1)
movupd %xmm1,(%rdx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rcx
jne    1390 <gadaptive+0x250>
cmp    %rbp,%rax
jne    1242 <gadaptive+0x102>
mov    %rbx,0x70(%rsp)
mov    %rbp,0x40(%rsp)
mov    %r14,0x18(%rsp)
mov    0xf0(%rsp),%ebp
mov    0x20(%rsp),%rax
lea    (%rax,%r15,8),%rax
mov    %rax,0x50(%rsp)
mov    %r15,%r12
shl    $0x4,%r12
mov    $0x1,%r13d
movsd  0x68(%rsp),%xmm0
mov    %r8,0x60(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x18(%rsp),%rdi
mov    0x20(%rsp),%rsi
mov    0x14(%rsp),%r14d
mov    %r14d,%edx
mov    $0x1,%al
call   1030 <rhs@plt>
test   %r14d,%r14d
movapd 0xa0(%rsp),%xmm4
movapd 0xbd3(%rip),%xmm2
movsd  0xbf3(%rip),%xmm3
movsd  0xbe3(%rip),%xmm5
jle    14a0 <gadaptive+0x360>
mov    0x40(%rsp),%rax
mov    0x8(%rsp),%rcx
jmp    1478 <gadaptive+0x338>
nopl   0x0(%rax,%rax,1)
movsd  (%rcx,%r12,1),%xmm1
mulsd  %xmm4,%xmm1
andpd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm5,%xmm0
movapd %xmm0,%xmm1
movsd  %xmm1,(%rcx)
add    $0x8,%rcx
add    $0xffffffffffffffff,%rax
je     14a0 <gadaptive+0x360>
movsd  (%rcx,%r15,8),%xmm0
andpd  %xmm2,%xmm0
cmp    $0x9,%ebp
jne    1450 <gadaptive+0x310>
movapd %xmm3,%xmm1
maxsd  %xmm0,%xmm1
jmp    146a <gadaptive+0x32a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x28(%rsp),%xmm0
movapd %xmm4,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm2
movsd  0x30(%rsp),%xmm3
subsd  %xmm3,%xmm2
subsd  0x68(%rsp),%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm3,%xmm2
subsd  %xmm0,%xmm2
xorpd  %xmm0,%xmm0
cmpltsd %xmm1,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm4,%xmm0
orpd   %xmm2,%xmm0
sub    $0x8,%rsp
cmp    $0x9,%ebp
jne    1540 <gadaptive+0x400>
mov    0x20(%rsp),%rdi
mov    0x28(%rsp),%rsi
mov    %r14d,%edx
lea    0x30(%rsp),%rcx
movsd  0x60(%rsp),%xmm1
mov    0x10(%rsp),%r8
lea    0xa0(%rsp),%r9
movsd  0x90(%rsp),%xmm2
mov    $0x3,%al
mov    0x68(%rsp),%r14
push   %r14
push   0x60(%rsp)
lea    0x50(%rsp),%rbx
push   %rbx
call   1060 <stiff@plt>
jmp    157d <gadaptive+0x43d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x20(%rsp),%rdi
mov    0x28(%rsp),%rsi
mov    %r14d,%edx
lea    0x30(%rsp),%rcx
movsd  0x60(%rsp),%xmm1
mov    0x10(%rsp),%r8
lea    0xa0(%rsp),%r9
mov    $0x2,%al
mov    0x68(%rsp),%r14
push   %r14
push   0x60(%rsp)
lea    0x50(%rsp),%rbx
push   %rbx
call   1040 <rkqs@plt>
add    $0x20,%rsp
mov    $0xffffffff,%eax
cmpl   $0x0,(%r14)
jg     1806 <gadaptive+0x6c6>
movsd  0x28(%rsp),%xmm0
movapd %xmm0,%xmm1
subsd  0x30(%rsp),%xmm1
mulsd  0x48(%rsp),%xmm1
ucomisd 0xa82(%rip),%xmm1
jae    15fe <gadaptive+0x4be>
mov    %r14,%r8
movsd  0x38(%rsp),%xmm3
movapd %xmm3,%xmm1
andpd  0xa3b(%rip),%xmm1
movsd  0x90(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jae    16cc <gadaptive+0x58c>
movapd %xmm3,0xa0(%rsp)
add    $0x1,%r13d
cmp    $0x186a1,%r13d
jne    1400 <gadaptive+0x2c0>
movl   $0x3,(%r8)
jmp    1806 <gadaptive+0x6c6>
mov    0x14(%rsp),%eax
test   %eax,%eax
mov    0x18(%rsp),%r14
mov    0x40(%rsp),%rbp
mov    0x70(%rsp),%rbx
jle    17b8 <gadaptive+0x678>
cmp    $0x4,%eax
jb     1641 <gadaptive+0x501>
lea    (%r15,%rbp,1),%rax
mov    0x8(%rsp),%rcx
lea    (%rcx,%rax,8),%rax
cmp    %rbx,%rax
jbe    16d8 <gadaptive+0x598>
lea    (%rbx,%rbp,8),%rax
cmp    %rax,%r14
jae    16d8 <gadaptive+0x598>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %rbp,%rcx
mov    %rbp,%rdx
and    $0x3,%rdx
je     1675 <gadaptive+0x535>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%r14,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    1660 <gadaptive+0x520>
cmp    $0x3,%rcx
jb     17b8 <gadaptive+0x678>
mov    0x8(%rsp),%rcx
lea    (%rcx,%r15,8),%rcx
add    $0x18,%rcx
nopl   0x0(%rax)
movsd  -0x18(%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
movsd  -0x10(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rax,8)
movsd  -0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rax,8)
movsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rax,8)
add    $0x4,%rax
cmp    %rax,%rbp
jne    1690 <gadaptive+0x550>
jmp    17b8 <gadaptive+0x678>
movl   $0x2,(%r8)
jmp    1806 <gadaptive+0x6c6>
mov    %ebp,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0xc,%rsi
jae    16fb <gadaptive+0x5bb>
xor    %esi,%esi
jmp    176c <gadaptive+0x62c>
and    $0xfffffffffffffffc,%rdx
mov    0x8(%rsp),%rsi
lea    (%rsi,%r15,8),%rdi
add    $0x70,%rdi
xor    %esi,%esi
xchg   %ax,%ax
movups -0x70(%rdi,%rsi,8),%xmm0
movups -0x60(%rdi,%rsi,8),%xmm1
movups %xmm0,(%rbx,%rsi,8)
movups %xmm1,0x10(%rbx,%rsi,8)
movups -0x50(%rdi,%rsi,8),%xmm0
movups -0x40(%rdi,%rsi,8),%xmm1
movups %xmm0,0x20(%rbx,%rsi,8)
movups %xmm1,0x30(%rbx,%rsi,8)
movups -0x30(%rdi,%rsi,8),%xmm0
movups -0x20(%rdi,%rsi,8),%xmm1
movups %xmm0,0x40(%rbx,%rsi,8)
movups %xmm1,0x50(%rbx,%rsi,8)
movupd -0x10(%rdi,%rsi,8),%xmm0
movupd (%rdi,%rsi,8),%xmm1
movupd %xmm0,0x60(%rbx,%rsi,8)
movupd %xmm1,0x70(%rbx,%rsi,8)
add    $0x10,%rsi
add    $0xfffffffffffffffc,%rdx
jne    1710 <gadaptive+0x5d0>
test   %rcx,%rcx
je     17af <gadaptive+0x66f>
lea    (%rbx,%rsi,8),%rdx
add    $0x10,%rdx
add    %r15,%rsi
mov    0x8(%rsp),%rdi
lea    (%rdi,%rsi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rcx
xor    %edi,%edi
nop
movupd -0x10(%rsi,%rdi,1),%xmm0
movupd (%rsi,%rdi,1),%xmm1
movupd %xmm0,-0x10(%rdx,%rdi,1)
movupd %xmm1,(%rdx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rcx
jne    1790 <gadaptive+0x650>
cmp    %rbp,%rax
jne    1643 <gadaptive+0x503>
movsd  0x38(%rsp),%xmm0
movapd 0x83a(%rip),%xmm1
andpd  %xmm0,%xmm1
orpd   0x83e(%rip),%xmm0
xorpd  %xmm2,%xmm2
cmplesd 0x48(%rsp),%xmm2
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
mov    0x80(%rsp),%rax
movlpd %xmm2,(%rax)
movsd  0x30(%rsp),%xmm0
mov    0x78(%rsp),%rax
movsd  %xmm0,(%rax)
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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