void BOBYQA(int n, int npt, double *x, double *xl, double *xu,
            double (*func)(void *data, int n, const double *x), void *data,
            double rhobeg, double rhoend, int iprint, int maxfun, double *w) {
  int j, id, np, iw, igo, ihq, ixb, ixa, ifv, isl, jsl, ipq, ivl, ixn, ixo, ixp,
      isu, jsu, ndim;
  int ibmat, izmat;
  extern void bobyqb_(
      int n, int npt, double *x, double *xl, double *xu,
      double (*func)(void *data, int n, const double *x), void *data,
      double rhobeg, double rhoend, int iprint, int maxfun, double *xbase,
      double *xpt, double *fval, double *xopt, double *gopt, double *hq,
      double *pq, double *bmat, double *zmat, int ndim, double *sl, double *su,
      double *xnew, double *xalt, double *d__, double *vlag, double *w);
  np = n + 1;
  if (npt < n + 2 || npt > (n + 2) * np / 2) {
    printf("Return from BOBYQA because NPT is not in the required interval\n");
    return;
  }
  ndim = npt + n;
  ixb = 0;
  ixp = ixb + n;
  ifv = ixp + n * npt;
  ixo = ifv + npt;
  igo = ixo + n;
  ihq = igo + n;
  ipq = ihq + n * np / 2;
  ibmat = ipq + npt;
  izmat = ibmat + ndim * n;
  isl = izmat + npt * (npt - np);
  isu = isl + n;
  ixn = isu + n;
  ixa = ixn + n;
  id = ixa + n;
  ivl = id + n;
  iw = ivl + ndim;
  for (j = 0; j < n; ++j) {
    double temp = xu[j] - xl[j];
    if (temp < 2 * rhobeg) {
      printf("Return from BOBYQA because one of the differences XU(I)-XL(I) is "
             "less than 2*RHOBEG.\n");
      return;
    }
    jsl = isl + j;
    jsu = jsl + n;
    w[jsl] = xl[j] - x[j];
    w[jsu] = xu[j] - x[j];
    if (w[jsl] >= -rhobeg) {
      if (w[jsl] >= 0) {
        x[j] = xl[j];
        w[jsl] = 0;
        w[jsu] = temp;
      } else {
        x[j] = xl[j] + rhobeg;
        w[jsl] = -rhobeg;
        w[jsu] = xu[j] - x[j];
        if (rhobeg > w[jsu]) {
          w[jsu] = rhobeg;
        }
      }
    } else if (w[jsu] <= rhobeg) {
      if (w[jsu] <= 0) {
        x[j] = xu[j];
        w[jsl] = -temp;
        w[jsu] = 0;
      } else {
        x[j] = xu[j] - rhobeg;
        w[jsl] = xl[j] - x[j];
        if (-rhobeg < w[jsl]) {
          w[jsl] = -rhobeg;
        }
        w[jsu] = rhobeg;
      }
    }
  }
  bobyqb_(n, npt, x, xl, xu, func, data, rhobeg, rhoend, iprint, maxfun,
          &w[ixb], &w[ixp], &w[ifv], &w[ixo], &w[igo], &w[ihq], &w[ipq],
          &w[ibmat], &w[izmat], ndim, &w[isl], &w[isu], &w[ixn], &w[ixa],
          &w[id], &w[ivl], &w[iw]);
}


x86 assembly (clang, -O0):
<BOBYQA>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1a8,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %edi,-0x2c(%rbp)
mov    %esi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  %xmm0,-0x58(%rbp)
movsd  %xmm1,-0x60(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
cmp    %ecx,%eax
jl     11a7 <BOBYQA+0x87>
mov    -0x30(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
imul   -0x6c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xc4(%rbp),%eax
cmp    %ecx,%eax
jle    11ba <BOBYQA+0x9a>
lea    0xe5a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    18d5 <BOBYQA+0x7b5>
mov    -0x30(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0xac(%rbp)
movl   $0x0,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0xa0(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0xc8(%rbp)
mov    -0x2c(%rbp),%eax
imul   -0x6c(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xc8(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
mov    -0xac(%rbp),%ecx
imul   -0x2c(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
mov    -0x30(%rbp),%ecx
mov    -0x30(%rbp),%edx
sub    -0x6c(%rbp),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x94(%rbp),%eax
add    -0xac(%rbp),%eax
mov    %eax,-0x70(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    1664 <BOBYQA+0x544>
mov    -0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0xcf2(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1330 <BOBYQA+0x210>
lea    0xd24(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    18d5 <BOBYQA+0x7b5>
mov    -0x88(%rbp),%eax
add    -0x64(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0xa8(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
ucomisd %xmm1,%xmm0
jb     14ee <BOBYQA+0x3ce>
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     143f <BOBYQA+0x31f>
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    14e9 <BOBYQA+0x3c9>
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x58(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    14e4 <BOBYQA+0x3c4>
movsd  -0x58(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    14e9 <BOBYQA+0x3c9>
jmp    1651 <BOBYQA+0x531>
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     164c <BOBYQA+0x52c>
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jb     1587 <BOBYQA+0x467>
mov    -0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1647 <BOBYQA+0x527>
mov    -0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x58(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1632 <BOBYQA+0x512>
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0xa8(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    164c <BOBYQA+0x52c>
jmp    1651 <BOBYQA+0x531>
jmp    1656 <BOBYQA+0x536>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    12d0 <BOBYQA+0x1b0>
mov    -0x2c(%rbp),%edi
mov    -0x30(%rbp),%esi
mov    -0x38(%rbp),%rdx
mov    -0x40(%rbp),%rax
mov    %rax,-0x130(%rbp)
mov    -0x48(%rbp),%r8
mov    -0x50(%rbp),%r9
mov    0x10(%rbp),%rax
mov    %rax,-0x128(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
mov    0x18(%rbp),%eax
mov    %eax,-0x120(%rbp)
mov    0x20(%rbp),%eax
mov    %eax,-0x11c(%rbp)
mov    0x28(%rbp),%rax
movslq -0x7c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x118(%rbp)
mov    0x28(%rbp),%rax
movslq -0xa0(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x110(%rbp)
mov    0x28(%rbp),%rax
movslq -0x84(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x108(%rbp)
mov    0x28(%rbp),%rax
movslq -0x9c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x100(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xf8(%rbp)
mov    0x28(%rbp),%rax
movslq -0x78(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xf0(%rbp)
mov    0x28(%rbp),%rax
movslq -0x90(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xe8(%rbp)
mov    0x28(%rbp),%rax
movslq -0xb0(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xe0(%rbp)
mov    0x28(%rbp),%rax
movslq -0xb4(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xd8(%rbp)
mov    -0xac(%rbp),%r13d
mov    0x28(%rbp),%r12
movslq -0x88(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r12
mov    0x28(%rbp),%r15
movslq -0xa4(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r15
mov    0x28(%rbp),%r14
movslq -0x98(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r14
mov    0x28(%rbp),%rbx
movslq -0x80(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rbx
mov    0x28(%rbp),%r11
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r11
mov    0x28(%rbp),%r10
movslq -0x94(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    0x28(%rbp),%rax
movslq -0x70(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x130(%rbp),%rcx
mov    %rax,-0xd0(%rbp)
mov    -0x128(%rbp),%rax
mov    %rax,(%rsp)
mov    -0x120(%rbp),%eax
mov    %eax,0x8(%rsp)
mov    -0x11c(%rbp),%eax
mov    %eax,0x10(%rsp)
mov    -0x118(%rbp),%rax
mov    %rax,0x18(%rsp)
mov    -0x110(%rbp),%rax
mov    %rax,0x20(%rsp)
mov    -0x108(%rbp),%rax
mov    %rax,0x28(%rsp)
mov    -0x100(%rbp),%rax
mov    %rax,0x30(%rsp)
mov    -0xf8(%rbp),%rax
mov    %rax,0x38(%rsp)
mov    -0xf0(%rbp),%rax
mov    %rax,0x40(%rsp)
mov    -0xe8(%rbp),%rax
mov    %rax,0x48(%rsp)
mov    -0xe0(%rbp),%rax
mov    %rax,0x50(%rsp)
mov    -0xd8(%rbp),%rax
mov    %rax,0x58(%rsp)
mov    -0xd0(%rbp),%rax
mov    %r13d,0x60(%rsp)
mov    %r12,0x68(%rsp)
mov    %r15,0x70(%rsp)
mov    %r14,0x78(%rsp)
mov    %rbx,0x80(%rsp)
mov    %r11,0x88(%rsp)
mov    %r10,0x90(%rsp)
mov    %rax,0x98(%rsp)
call   1040 <bobyqb_@plt>
add    $0x1a8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<BOBYQA>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
lea    0x2(%rdi),%ebx
cmp    %esi,%ebx
jg     114b <BOBYQA+0x2b>
lea    0x1(%rdi),%ebp
imul   %ebp,%ebx
mov    %ebx,%eax
shr    $0x1f,%eax
add    %ebx,%eax
sar    %eax
cmp    %esi,%eax
jge    1168 <BOBYQA+0x48>
lea    0xf13(%rip),%rdi
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <puts@plt>
mov    0xd8(%rsp),%r12
mov    0xd0(%rsp),%r10d
mov    0xc8(%rsp),%r15d
mov    0xc0(%rsp),%rax
mov    %rax,0x80(%rsp)
lea    (%rsi,%rdi,1),%r13d
mov    %esi,%ebx
imul   %edi,%ebx
add    %edi,%ebx
lea    (%rbx,%rsi,1),%eax
mov    %rax,0x38(%rsp)
add    %edi,%eax
mov    %rax,0x30(%rsp)
add    %edi,%eax
mov    %esi,%r14d
sub    %ebp,%r14d
imul   %edi,%ebp
mov    %ebp,%r11d
shr    $0x1f,%r11d
add    %ebp,%r11d
sar    %r11d
mov    %eax,0x28(%rsp)
add    %eax,%r11d
lea    (%r11,%rsi,1),%ebp
mov    %r13d,%eax
imul   %edi,%eax
add    %ebp,%eax
imul   %esi,%r14d
add    %eax,%r14d
test   %edi,%edi
mov    %r15,0x78(%rsp)
mov    %r10,0x70(%rsp)
mov    %r9,0x68(%rsp)
mov    %rbx,0x40(%rsp)
mov    %ebp,0x20(%rsp)
jle    133d <BOBYQA+0x21d>
mov    %eax,0x10(%rsp)
mov    %r13,0x18(%rsp)
movapd %xmm0,%xmm2
addsd  %xmm0,%xmm2
movapd 0xdeb(%rip),%xmm3
xorpd  %xmm0,%xmm3
movslq %r14d,%rax
mov    %edi,%ebp
lea    (%rax,%rbp,1),%rbx
lea    (%r12,%rbx,8),%r10
mov    %rax,%r9
lea    (%r12,%rax,8),%r15
xor    %r13d,%r13d
xorpd  %xmm4,%xmm4
movapd 0xdc3(%rip),%xmm8
jmp    1263 <BOBYQA+0x143>
nop
movsd  %xmm5,(%rdx,%r13,8)
xorpd  %xmm7,%xmm7
movsd  %xmm7,(%r15,%r13,8)
movsd  %xmm6,(%r10,%r13,8)
add    $0x1,%r13
cmp    %r13,%rbp
je     134a <BOBYQA+0x22a>
movsd  (%r8,%r13,8),%xmm6
movsd  (%rcx,%r13,8),%xmm7
subsd  %xmm7,%xmm6
ucomisd %xmm6,%xmm2
ja     1498 <BOBYQA+0x378>
subsd  (%rdx,%r13,8),%xmm7
movsd  %xmm7,(%r15,%r13,8)
movsd  (%r8,%r13,8),%xmm5
subsd  (%rdx,%r13,8),%xmm5
movsd  %xmm5,(%r10,%r13,8)
ucomisd %xmm3,%xmm7
jae    12e0 <BOBYQA+0x1c0>
ucomisd %xmm5,%xmm0
jb     1256 <BOBYQA+0x136>
ucomisd %xmm5,%xmm4
movsd  (%r8,%r13,8),%xmm5
jae    1325 <BOBYQA+0x205>
subsd  %xmm0,%xmm5
movsd  %xmm5,(%rdx,%r13,8)
movsd  (%rcx,%r13,8),%xmm6
subsd  %xmm5,%xmm6
movapd %xmm3,%xmm7
minsd  %xmm6,%xmm7
movapd %xmm0,%xmm6
jmp    124a <BOBYQA+0x12a>
nopl   0x0(%rax,%rax,1)
ucomisd %xmm4,%xmm7
movsd  (%rcx,%r13,8),%xmm5
jae    1240 <BOBYQA+0x120>
addsd  %xmm0,%xmm5
movsd  %xmm5,(%rdx,%r13,8)
movsd  %xmm3,(%r15,%r13,8)
movsd  (%r8,%r13,8),%xmm5
subsd  (%rdx,%r13,8),%xmm5
movsd  %xmm5,(%r10,%r13,8)
ucomisd %xmm5,%xmm0
movapd %xmm0,%xmm6
ja     1250 <BOBYQA+0x130>
jmp    1256 <BOBYQA+0x136>
movsd  %xmm5,(%rdx,%r13,8)
xorpd  %xmm8,%xmm6
movapd %xmm6,%xmm7
xorpd  %xmm6,%xmm6
jmp    124a <BOBYQA+0x12a>
movslq %edi,%rbp
movslq %r14d,%rbx
mov    %rbx,0x8(%rsp)
jmp    1358 <BOBYQA+0x238>
mov    0x18(%rsp),%r13
mov    %r9,0x8(%rsp)
mov    0x10(%rsp),%eax
add    %edi,%r14d
lea    (%r14,%rdi,1),%ebx
mov    %rbx,0x50(%rsp)
add    %edi,%ebx
lea    (%rbx,%rdi,1),%r10d
lea    (%r10,%rdi,1),%r9d
lea    (%r9,%r13,1),%r15d
mov    %r15d,0x4c(%rsp)
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x18(%rsp)
movslq 0x40(%rsp),%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x40(%rsp)
movslq 0x38(%rsp),%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x38(%rsp)
movslq 0x30(%rsp),%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x30(%rsp)
movslq 0x28(%rsp),%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x28(%rsp)
movslq %r11d,%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x10(%rsp)
movslq 0x20(%rsp),%rbp
lea    (%r12,%rbp,8),%rbp
mov    %rbp,0x20(%rsp)
movslq %eax,%rbp
lea    (%r12,%rbp,8),%rax
mov    %rax,0x60(%rsp)
mov    0x8(%rsp),%rax
lea    (%r12,%rax,8),%rax
mov    %rax,0x8(%rsp)
movslq %r14d,%rax
lea    (%r12,%rax,8),%rax
mov    %rax,0x58(%rsp)
movslq 0x50(%rsp),%rbp
lea    (%r12,%rbp,8),%r14
movslq %ebx,%rbx
lea    (%r12,%rbx,8),%r11
movslq %r10d,%rax
lea    (%r12,%rax,8),%rax
movslq %r9d,%rbp
lea    (%r12,%rbp,8),%rbp
movslq 0x4c(%rsp),%rbx
lea    (%r12,%rbx,8),%rbx
mov    0x68(%rsp),%r9
push   %rbx
push   %rbp
push   %rax
push   %r11
push   %r14
push   0x80(%rsp)
push   0x38(%rsp)
push   %r13
push   0xa0(%rsp)
push   0x68(%rsp)
push   0x60(%rsp)
push   0x80(%rsp)
push   0x90(%rsp)
push   0xa0(%rsp)
push   0xb0(%rsp)
push   0x90(%rsp)
push   %r12
push   0xf8(%rsp)
push   0x108(%rsp)
push   0x118(%rsp)
call   1040 <bobyqb_@plt>
add    $0x128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xb71(%rip),%rdi
jmp    1152 <BOBYQA+0x32>

LLVM IR (-O0):
@.str = [64 x i8] c"Return from BOBYQA because NPT is not in the required interval\0A\00"
@.str.1 = [86 x i8] c"Return from BOBYQA because one of the differences XU(I)-XL(I) is less than 2*RHOBEG.\0A\00"
define void @BOBYQA(i32 %0, i32 %1, double* %2, double* %3, double* %4, double (i8*, i32, double*)* %5, i8* %6, double %7, double %8, i32 %9, i32 %10, double* %11) {
%13 = alloca i32
%14 = alloca i32
%15 = alloca double*
%16 = alloca double*
%17 = alloca double*
%18 = alloca double (i8*, i32, double*)*
%19 = alloca i8*
%20 = alloca double
%21 = alloca double
%22 = alloca i32
%23 = alloca i32
%24 = alloca double*
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%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 i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca double
store i32 %0, i32* %13
store i32 %1, i32* %14
store double* %2, double** %15
store double* %3, double** %16
store double* %4, double** %17
store double (i8*, i32, double*)* %5, double (i8*, i32, double*)** %18
store i8* %6, i8** %19
store double %7, double* %20
store double %8, double* %21
store i32 %9, i32* %22
store i32 %10, i32* %23
store double* %11, double** %24
%47 = load i32, i32* %13
%48 = add nsw i32 %47, 1
store i32 %48, i32* %27
%49 = load i32, i32* %14
%50 = load i32, i32* %13
%51 = add nsw i32 %50, 2
%52 = icmp slt i32 %49, %51
br i1 %52, label %61, label %53
53: ; preds = %12
%54 = load i32, i32* %14
%55 = load i32, i32* %13
%56 = add nsw i32 %55, 2
%57 = load i32, i32* %27
%58 = mul nsw i32 %56, %57
%59 = sdiv i32 %58, 2
%60 = icmp sgt i32 %54, %59
br i1 %60, label %61, label %63
61: ; preds = %53, %12
%62 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0))
br label %430
63: ; preds = %53
%64 = load i32, i32* %14
%65 = load i32, i32* %13
%66 = add nsw i32 %64, %65
store i32 %66, i32* %43
store i32 0, i32* %31
%67 = load i32, i32* %31
%68 = load i32, i32* %13
%69 = add nsw i32 %67, %68
store i32 %69, i32* %40
%70 = load i32, i32* %40
%71 = load i32, i32* %13
%72 = load i32, i32* %14
%73 = mul nsw i32 %71, %72
%74 = add nsw i32 %70, %73
store i32 %74, i32* %33
%75 = load i32, i32* %33
%76 = load i32, i32* %14
%77 = add nsw i32 %75, %76
store i32 %77, i32* %39
%78 = load i32, i32* %39
%79 = load i32, i32* %13
%80 = add nsw i32 %78, %79
store i32 %80, i32* %29
%81 = load i32, i32* %29
%82 = load i32, i32* %13
%83 = add nsw i32 %81, %82
store i32 %83, i32* %30
%84 = load i32, i32* %30
%85 = load i32, i32* %13
%86 = load i32, i32* %27
%87 = mul nsw i32 %85, %86
%88 = sdiv i32 %87, 2
%89 = add nsw i32 %84, %88
store i32 %89, i32* %36
%90 = load i32, i32* %36
%91 = load i32, i32* %14
%92 = add nsw i32 %90, %91
store i32 %92, i32* %44
%93 = load i32, i32* %44
%94 = load i32, i32* %43
%95 = load i32, i32* %13
%96 = mul nsw i32 %94, %95
%97 = add nsw i32 %93, %96
store i32 %97, i32* %45
%98 = load i32, i32* %45
%99 = load i32, i32* %14
%100 = load i32, i32* %14
%101 = load i32, i32* %27
%102 = sub nsw i32 %100, %101
%103 = mul nsw i32 %99, %102
%104 = add nsw i32 %98, %103
store i32 %104, i32* %34
%105 = load i32, i32* %34
%106 = load i32, i32* %13
%107 = add nsw i32 %105, %106
store i32 %107, i32* %41
%108 = load i32, i32* %41
%109 = load i32, i32* %13
%110 = add nsw i32 %108, %109
store i32 %110, i32* %38
%111 = load i32, i32* %38
%112 = load i32, i32* %13
%113 = add nsw i32 %111, %112
store i32 %113, i32* %32
%114 = load i32, i32* %32
%115 = load i32, i32* %13
%116 = add nsw i32 %114, %115
store i32 %116, i32* %26
%117 = load i32, i32* %26
%118 = load i32, i32* %13
%119 = add nsw i32 %117, %118
store i32 %119, i32* %37
%120 = load i32, i32* %37
%121 = load i32, i32* %43
%122 = add nsw i32 %120, %121
store i32 %122, i32* %28
store i32 0, i32* %25
br label %123
123: ; preds = %350, %63
%124 = load i32, i32* %25
%125 = load i32, i32* %13
%126 = icmp slt i32 %124, %125
br i1 %126, label %127, label %353
127: ; preds = %123
%128 = load double*, double** %17
%129 = load i32, i32* %25
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
%132 = load double, double* %131
%133 = load double*, double** %16
%134 = load i32, i32* %25
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds double, double* %133, i64 %135
%137 = load double, double* %136
%138 = fsub double %132, %137
store double %138, double* %46
%139 = load double, double* %46
%140 = load double, double* %20
%141 = fmul double 2.000000e+00, %140
%142 = fcmp olt double %139, %141
br i1 %142, label %143, label %145
143: ; preds = %127
%144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([86 x i8], [86 x i8]* @.str.1, i64 0, i64 0))
br label %430
145: ; preds = %127
%146 = load i32, i32* %34
%147 = load i32, i32* %25
%148 = add nsw i32 %146, %147
store i32 %148, i32* %35
%149 = load i32, i32* %35
%150 = load i32, i32* %13
%151 = add nsw i32 %149, %150
store i32 %151, i32* %42
%152 = load double*, double** %16
%153 = load i32, i32* %25
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds double, double* %152, i64 %154
%156 = load double, double* %155
%157 = load double*, double** %15
%158 = load i32, i32* %25
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds double, double* %157, i64 %159
%161 = load double, double* %160
%162 = fsub double %156, %161
%163 = load double*, double** %24
%164 = load i32, i32* %35
%165 = sext i32 %164 to i64
%166 = getelementptr inbounds double, double* %163, i64 %165
store double %162, double* %166
%167 = load double*, double** %17
%168 = load i32, i32* %25
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds double, double* %167, i64 %169
%171 = load double, double* %170
%172 = load double*, double** %15
%173 = load i32, i32* %25
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds double, double* %172, i64 %174
%176 = load double, double* %175
%177 = fsub double %171, %176
%178 = load double*, double** %24
%179 = load i32, i32* %42
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds double, double* %178, i64 %180
store double %177, double* %181
%182 = load double*, double** %24
%183 = load i32, i32* %35
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds double, double* %182, i64 %184
%186 = load double, double* %185
%187 = load double, double* %20
%188 = fneg double %187
%189 = fcmp oge double %186, %188
br i1 %189, label %190, label %264
190: ; preds = %145
%191 = load double*, double** %24
%192 = load i32, i32* %35
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds double, double* %191, i64 %193
%195 = load double, double* %194
%196 = fcmp oge double %195, 0.000000e+00
br i1 %196, label %197, label %216
197: ; preds = %190
%198 = load double*, double** %16
%199 = load i32, i32* %25
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds double, double* %198, i64 %200
%202 = load double, double* %201
%203 = load double*, double** %15
%204 = load i32, i32* %25
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds double, double* %203, i64 %205
store double %202, double* %206
%207 = load double*, double** %24
%208 = load i32, i32* %35
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds double, double* %207, i64 %209
store double 0.000000e+00, double* %210
%211 = load double, double* %46
%212 = load double*, double** %24
%213 = load i32, i32* %42
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds double, double* %212, i64 %214
store double %211, double* %215
br label %263
216: ; preds = %190
%217 = load double*, double** %16
%218 = load i32, i32* %25
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds double, double* %217, i64 %219
%221 = load double, double* %220
%222 = load double, double* %20
%223 = fadd double %221, %222
%224 = load double*, double** %15
%225 = load i32, i32* %25
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds double, double* %224, i64 %226
store double %223, double* %227
%228 = load double, double* %20
%229 = fneg double %228
%230 = load double*, double** %24
%231 = load i32, i32* %35
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds double, double* %230, i64 %232
store double %229, double* %233
%234 = load double*, double** %17
%235 = load i32, i32* %25
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds double, double* %234, i64 %236
%238 = load double, double* %237
%239 = load double*, double** %15
%240 = load i32, i32* %25
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds double, double* %239, i64 %241
%243 = load double, double* %242
%244 = fsub double %238, %243
%245 = load double*, double** %24
%246 = load i32, i32* %42
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds double, double* %245, i64 %247
store double %244, double* %248
%249 = load double, double* %20
%250 = load double*, double** %24
%251 = load i32, i32* %42
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds double, double* %250, i64 %252
%254 = load double, double* %253
%255 = fcmp ogt double %249, %254
br i1 %255, label %256, label %262
256: ; preds = %216
%257 = load double, double* %20
%258 = load double*, double** %24
%259 = load i32, i32* %42
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds double, double* %258, i64 %260
store double %257, double* %261
br label %262
262: ; preds = %256, %216
br label %263
263: ; preds = %262, %197
br label %349
264: ; preds = %145
%265 = load double*, double** %24
%266 = load i32, i32* %42
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds double, double* %265, i64 %267
%269 = load double, double* %268
%270 = load double, double* %20
%271 = fcmp ole double %269, %270
br i1 %271, label %272, label %348
272: ; preds = %264
%273 = load double*, double** %24
%274 = load i32, i32* %42
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds double, double* %273, i64 %275
%277 = load double, double* %276
%278 = fcmp ole double %277, 0.000000e+00
br i1 %278, label %279, label %299
279: ; preds = %272
%280 = load double*, double** %17
%281 = load i32, i32* %25
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds double, double* %280, i64 %282
%284 = load double, double* %283
%285 = load double*, double** %15
%286 = load i32, i32* %25
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds double, double* %285, i64 %287
store double %284, double* %288
%289 = load double, double* %46
%290 = fneg double %289
%291 = load double*, double** %24
%292 = load i32, i32* %35
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds double, double* %291, i64 %293
store double %290, double* %294
%295 = load double*, double** %24
%296 = load i32, i32* %42
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds double, double* %295, i64 %297
store double 0.000000e+00, double* %298
br label %347
299: ; preds = %272
%300 = load double*, double** %17
%301 = load i32, i32* %25
%302 = sext i32 %301 to i64
%303 = getelementptr inbounds double, double* %300, i64 %302
%304 = load double, double* %303
%305 = load double, double* %20
%306 = fsub double %304, %305
%307 = load double*, double** %15
%308 = load i32, i32* %25
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds double, double* %307, i64 %309
store double %306, double* %310
%311 = load double*, double** %16
%312 = load i32, i32* %25
%313 = sext i32 %312 to i64
%314 = getelementptr inbounds double, double* %311, i64 %313
%315 = load double, double* %314
%316 = load double*, double** %15
%317 = load i32, i32* %25
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds double, double* %316, i64 %318
%320 = load double, double* %319
%321 = fsub double %315, %320
%322 = load double*, double** %24
%323 = load i32, i32* %35
%324 = sext i32 %323 to i64
%325 = getelementptr inbounds double, double* %322, i64 %324
store double %321, double* %325
%326 = load double, double* %20
%327 = fneg double %326
%328 = load double*, double** %24
%329 = load i32, i32* %35
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double, double* %328, i64 %330
%332 = load double, double* %331
%333 = fcmp olt double %327, %332
br i1 %333, label %334, label %341
334: ; preds = %299
%335 = load double, double* %20
%336 = fneg double %335
%337 = load double*, double** %24
%338 = load i32, i32* %35
%339 = sext i32 %338 to i64
%340 = getelementptr inbounds double, double* %337, i64 %339
store double %336, double* %340
br label %341
341: ; preds = %334, %299
%342 = load double, double* %20
%343 = load double*, double** %24
%344 = load i32, i32* %42
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds double, double* %343, i64 %345
store double %342, double* %346
br label %347
347: ; preds = %341, %279
br label %348
348: ; preds = %347, %264
br label %349
349: ; preds = %348, %263
br label %350
350: ; preds = %349
%351 = load i32, i32* %25
%352 = add nsw i32 %351, 1
store i32 %352, i32* %25
br label %123
353: ; preds = %123
%354 = load i32, i32* %13
%355 = load i32, i32* %14
%356 = load double*, double** %15
%357 = load double*, double** %16
%358 = load double*, double** %17
%359 = load double (i8*, i32, double*)*, double (i8*, i32, double*)** %18
%360 = load i8*, i8** %19
%361 = load double, double* %20
%362 = load double, double* %21
%363 = load i32, i32* %22
%364 = load i32, i32* %23
%365 = load double*, double** %24
%366 = load i32, i32* %31
%367 = sext i32 %366 to i64
%368 = getelementptr inbounds double, double* %365, i64 %367
%369 = load double*, double** %24
%370 = load i32, i32* %40
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds double, double* %369, i64 %371
%373 = load double*, double** %24
%374 = load i32, i32* %33
%375 = sext i32 %374 to i64
%376 = getelementptr inbounds double, double* %373, i64 %375
%377 = load double*, double** %24
%378 = load i32, i32* %39
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds double, double* %377, i64 %379
%381 = load double*, double** %24
%382 = load i32, i32* %29
%383 = sext i32 %382 to i64
%384 = getelementptr inbounds double, double* %381, i64 %383
%385 = load double*, double** %24
%386 = load i32, i32* %30
%387 = sext i32 %386 to i64
%388 = getelementptr inbounds double, double* %385, i64 %387
%389 = load double*, double** %24
%390 = load i32, i32* %36
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds double, double* %389, i64 %391
%393 = load double*, double** %24
%394 = load i32, i32* %44
%395 = sext i32 %394 to i64
%396 = getelementptr inbounds double, double* %393, i64 %395
%397 = load double*, double** %24
%398 = load i32, i32* %45
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds double, double* %397, i64 %399
%401 = load i32, i32* %43
%402 = load double*, double** %24
%403 = load i32, i32* %34
%404 = sext i32 %403 to i64
%405 = getelementptr inbounds double, double* %402, i64 %404
%406 = load double*, double** %24
%407 = load i32, i32* %41
%408 = sext i32 %407 to i64
%409 = getelementptr inbounds double, double* %406, i64 %408
%410 = load double*, double** %24
%411 = load i32, i32* %38
%412 = sext i32 %411 to i64
%413 = getelementptr inbounds double, double* %410, i64 %412
%414 = load double*, double** %24
%415 = load i32, i32* %32
%416 = sext i32 %415 to i64
%417 = getelementptr inbounds double, double* %414, i64 %416
%418 = load double*, double** %24
%419 = load i32, i32* %26
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds double, double* %418, i64 %420
%422 = load double*, double** %24
%423 = load i32, i32* %37
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds double, double* %422, i64 %424
%426 = load double*, double** %24
%427 = load i32, i32* %28
%428 = sext i32 %427 to i64
%429 = getelementptr inbounds double, double* %426, i64 %428
br label %430
430: ; preds = %353, %143, %61
ret void
}

LLVM IR (-O2):
@str = [85 x i8] c"Return from BOBYQA because one of the differences XU(I)-XL(I) is less than 2*RHOBEG.\00"
@str.2 = [63 x i8] c"Return from BOBYQA because NPT is not in the required interval\00"
define void @BOBYQA(i32 %0, i32 %1, double* %2, double* %3, double* %4, double (i8*, i32, double*)* %5, i8* %6, double %7, double %8, i32 %9, i32 %10, double* %11) {
%13 = add nsw i32 %0, 1
%14 = add nsw i32 %0, 2
%15 = icmp sgt i32 %14, %1
br i1 %15, label %20, label %16
16: ; preds = %12
%17 = mul nsw i32 %14, %13
%18 = sdiv i32 %17, 2
%19 = icmp slt i32 %18, %1
br i1 %19, label %20, label %22
20: ; preds = %16, %12
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.2, i64 0, i64 0))
br label %138
22: ; preds = %16
%23 = add nsw i32 %1, %0
%24 = mul nsw i32 %1, %0
%25 = add nsw i32 %24, %0
%26 = add nsw i32 %25, %1
%27 = add nsw i32 %26, %0
%28 = add nsw i32 %27, %0
%29 = mul nsw i32 %13, %0
%30 = sdiv i32 %29, 2
%31 = add nsw i32 %28, %30
%32 = add nsw i32 %31, %1
%33 = mul nsw i32 %23, %0
%34 = add nsw i32 %32, %33
%35 = sub nsw i32 %1, %13
%36 = mul nsw i32 %35, %1
%37 = add nsw i32 %34, %36
%38 = add nsw i32 %37, %0
%39 = add nsw i32 %38, %0
%40 = add nsw i32 %39, %0
%41 = add nsw i32 %40, %0
%42 = add nsw i32 %41, %0
%43 = add nsw i32 %42, %23
%44 = icmp sgt i32 %0, 0
br i1 %44, label %48, label %45
45: ; preds = %22
%46 = sext i32 %0 to i64
%47 = sext i32 %37 to i64
br label %107
48: ; preds = %22
%49 = fmul double %7, 2.000000e+00
%50 = fneg double %7
%51 = sext i32 %37 to i64
%52 = zext i32 %0 to i64
%53 = zext i32 %0 to i64
br label %54
54: ; preds = %48, %104
%55 = phi i64 [ 0, %48 ], [ %105, %104 ]
%56 = getelementptr inbounds double, double* %4, i64 %55
%57 = load double, double* %56
%58 = getelementptr inbounds double, double* %3, i64 %55
%59 = load double, double* %58
%60 = fsub double %57, %59
%61 = fcmp olt double %60, %49
br i1 %61, label %97, label %62
62: ; preds = %54
%63 = add nsw i64 %55, %51
%64 = add nsw i64 %63, %52
%65 = getelementptr inbounds double, double* %2, i64 %55
%66 = load double, double* %65
%67 = fsub double %59, %66
%68 = getelementptr inbounds double, double* %11, i64 %63
store double %67, double* %68
%69 = load double, double* %56
%70 = load double, double* %65
%71 = fsub double %69, %70
%72 = getelementptr inbounds double, double* %11, i64 %64
store double %71, double* %72
%73 = fcmp ult double %67, %50
br i1 %73, label %84, label %74
74: ; preds = %62
%75 = fcmp ult double %67, 0.000000e+00
%76 = load double, double* %58
br i1 %75, label %78, label %77
77: ; preds = %74
store double %76, double* %65
br label %99
78: ; preds = %74
%79 = fadd double %76, %7
store double %79, double* %65
store double %50, double* %68
%80 = load double, double* %56
%81 = load double, double* %65
%82 = fsub double %80, %81
store double %82, double* %72
%83 = fcmp olt double %82, %7
br i1 %83, label %102, label %104
84: ; preds = %62
%85 = fcmp ugt double %71, %7
br i1 %85, label %104, label %86
86: ; preds = %84
%87 = fcmp ugt double %71, 0.000000e+00
%88 = load double, double* %56
br i1 %87, label %91, label %89
89: ; preds = %86
store double %88, double* %65
%90 = fneg double %60
br label %99
91: ; preds = %86
%92 = fsub double %88, %7
store double %92, double* %65
%93 = load double, double* %58
%94 = fsub double %93, %92
%95 = fcmp ogt double %94, %50
%96 = select i1 %95, double %50, double %94
br label %99
97: ; preds = %54
%98 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @str, i64 0, i64 0))
br label %138
99: ; preds = %77, %89, %91
%100 = phi double [ %96, %91 ], [ %90, %89 ], [ 0.000000e+00, %77 ]
%101 = phi double [ %7, %91 ], [ 0.000000e+00, %89 ], [ %60, %77 ]
store double %100, double* %68
br label %102
102: ; preds = %99, %78
%103 = phi double [ %7, %78 ], [ %101, %99 ]
store double %103, double* %72
br label %104
104: ; preds = %102, %78, %84
%105 = add nuw nsw i64 %55, 1
%106 = icmp eq i64 %105, %53
br i1 %106, label %107, label %54
107: ; preds = %104, %45
%108 = phi i64 [ %47, %45 ], [ %51, %104 ]
%109 = phi i64 [ %46, %45 ], [ %52, %104 ]
%110 = getelementptr inbounds double, double* %11, i64 %109
%111 = sext i32 %25 to i64
%112 = getelementptr inbounds double, double* %11, i64 %111
%113 = sext i32 %26 to i64
%114 = getelementptr inbounds double, double* %11, i64 %113
%115 = sext i32 %27 to i64
%116 = getelementptr inbounds double, double* %11, i64 %115
%117 = sext i32 %28 to i64
%118 = getelementptr inbounds double, double* %11, i64 %117
%119 = sext i32 %31 to i64
%120 = getelementptr inbounds double, double* %11, i64 %119
%121 = sext i32 %32 to i64
%122 = getelementptr inbounds double, double* %11, i64 %121
%123 = sext i32 %34 to i64
%124 = getelementptr inbounds double, double* %11, i64 %123
%125 = getelementptr inbounds double, double* %11, i64 %108
%126 = sext i32 %38 to i64
%127 = getelementptr inbounds double, double* %11, i64 %126
%128 = sext i32 %39 to i64
%129 = getelementptr inbounds double, double* %11, i64 %128
%130 = sext i32 %40 to i64
%131 = getelementptr inbounds double, double* %11, i64 %130
%132 = sext i32 %41 to i64
%133 = getelementptr inbounds double, double* %11, i64 %132
%134 = sext i32 %42 to i64
%135 = getelementptr inbounds double, double* %11, i64 %134
%136 = sext i32 %43 to i64
%137 = getelementptr inbounds double, double* %11, i64 %136
tail call void @bobyqb_(i32 %0, i32 %1, double* %2, double* %3, double* %4, double (i8*, i32, double*)* %5, i8* %6, double %7, double %8, i32 %9, i32 %10, double* %11, double* %110, double* %112, double* %114, double* %116, double* %118, double* %120, double* %122, double* %124, i32 %23, double* %125, double* %127, double* %129, double* %131, double* %133, double* %135, double* %137)
br label %138
138: ; preds = %97, %107, %20
ret void
}