#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 fabs(double);
int floor(double);
int dlacon_(int *n, double *v, double *x, int *isgn, double *est, int *kase) {
  int c__1 = 1;
  double zero = 0.0;
  double one = 1.0;
  static int jump;
  int iter;
  int jlast;
  double altsgn, estold;
  int i, j;
  double temp;
  extern int idamax_(int *, double *, int *);
  extern double dasum_(int *, double *, int *);
  extern int dcopy_(int *, double *, int *, double *, int *);
  if (*kase == 0) {
    for (i = 0; i < *n; ++i) {
      x[i] = 1. / (double)(*n);
    }
    *kase = 1;
    jump = 1;
    return 0;
  }
  switch (jump) {
  case 1:
    goto L20;
  case 2:
    goto L40;
  case 3:
    goto L70;
  case 4:
    goto L110;
  case 5:
    goto L140;
  }
L20:
  if (*n == 1) {
    v[0] = x[0];
    *est = fabs(v[0]);
    goto L150;
  }
  *est = dasum_(n, x, &c__1);
  for (i = 0; i < *n; ++i) {
    x[i] = (x[i] >= 0 ? fabs(one) : -fabs(one));
    isgn[i] = (x[i] >= 0 ? floor(x[i] + .5) : -floor(.5 - x[i]));
  }
  *kase = 2;
  jump = 2;
  return 0;
L40:
  j = idamax_(n, &x[0], &c__1);
  --j;
  iter = 2;
L50:
  for (i = 0; i < *n; ++i)
    x[i] = zero;
  x[j] = one;
  *kase = 1;
  jump = 3;
  return 0;
L70:
  dcopy_(n, x, &c__1, v, &c__1);
  estold = *est;
  *est = dasum_(n, v, &c__1);
  for (i = 0; i < *n; ++i)
    if (((x[i] >= 0 ? fabs(one) : -fabs(one)) >= 0
             ? floor((x[i] >= 0 ? fabs(one) : -fabs(one)) + .5)
             : -floor(.5 - (x[i] >= 0 ? fabs(one) : -fabs(one)))) != isgn[i])
      goto L90;
  goto L120;
L90:
  if (*est <= estold)
    goto L120;
  for (i = 0; i < *n; ++i) {
    x[i] = (x[i] >= 0 ? fabs(one) : -fabs(one));
    isgn[i] = (x[i] >= 0 ? floor(x[i] + .5) : -floor(.5 - x[i]));
  }
  *kase = 2;
  jump = 4;
  return 0;
L110:
  jlast = j;
  j = idamax_(n, &x[0], &c__1);
  --j;
  if (x[jlast] != fabs(x[j]) && iter < 5) {
    ++iter;
    goto L50;
  }
L120:
  altsgn = 1.;
  for (i = 1; i <= *n; ++i) {
    x[i - 1] = altsgn * ((double)(i - 1) / (double)(*n - 1) + 1.);
    altsgn = -altsgn;
  }
  *kase = 1;
  jump = 5;
  return 0;
L140:
  temp = dasum_(n, x, &c__1) / (double)(*n * 3) * 2.;
  if (temp > *est) {
    dcopy_(n, &x[0], &c__1, &v[0], &c__1);
    *est = temp;
  }
L150:
  *kase = 0;
  return 0;
}


x86 assembly (clang, -O0):
<dlacon_>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
movl   $0x1,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe86(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x38(%rbp),%rax
cmpl   $0x0,(%rax)
jne    11f1 <dlacon_+0xb1>
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    11d1 <dlacon_+0x91>
mov    -0x10(%rbp),%rax
cvtsi2sdl (%rax),%xmm1
movsd  0xe4e(%rip),%xmm0
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1193 <dlacon_+0x53>
mov    -0x38(%rbp),%rax
movl   $0x1,(%rax)
movl   $0x1,0x2e5f(%rip)
movl   $0x0,-0x4(%rbp)
jmp    1968 <dlacon_+0x828>
mov    0x2e4d(%rip),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x80(%rbp)
sub    $0x4,%eax
ja     1236 <dlacon_+0xf6>
mov    -0x80(%rbp),%rax
lea    0xe1c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    123b <dlacon_+0xfb>
jmp    13c6 <dlacon_+0x286>
jmp    1452 <dlacon_+0x312>
jmp    17bb <dlacon_+0x67b>
jmp    18e9 <dlacon_+0x7a9>
jmp    123b <dlacon_+0xfb>
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1278 <dlacon_+0x138>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0xdb9(%rip),%xmm1
pand   %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1957 <dlacon_+0x817>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
call   1050 <dasum_@plt>
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    13a6 <dlacon_+0x266>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12de <dlacon_+0x19e>
movsd  -0x50(%rbp),%xmm0
movaps 0xd53(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    130d <dlacon_+0x1cd>
movsd  -0x50(%rbp),%xmm0
movaps 0xd36(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1361 <dlacon_+0x221>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  0xcc4(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
call   1060 <floor@plt>
mov    %eax,-0x8c(%rbp)
jmp    1387 <dlacon_+0x247>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  0xc9f(%rip),%xmm0
subsd  (%rax,%rcx,8),%xmm0
call   1060 <floor@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x6c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1298 <dlacon_+0x158>
mov    -0x38(%rbp),%rax
movl   $0x2,(%rax)
movl   $0x2,0x2c8a(%rip)
movl   $0x0,-0x4(%rbp)
jmp    1968 <dlacon_+0x828>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
call   1040 <idamax_@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x70(%rbp)
movl   $0x2,-0x54(%rbp)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    1420 <dlacon_+0x2e0>
movsd  -0x48(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    13f1 <dlacon_+0x2b1>
movsd  -0x50(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x70(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
movl   $0x1,(%rax)
movl   $0x3,0x2bfe(%rip)
movl   $0x0,-0x4(%rbp)
jmp    1968 <dlacon_+0x828>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rcx
lea    -0x3c(%rbp),%r8
mov    %r8,%rdx
call   1030 <dcopy_@plt>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
call   1050 <dasum_@plt>
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    1665 <dlacon_+0x525>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     14dd <dlacon_+0x39d>
movsd  -0x50(%rbp),%xmm0
movaps 0xb54(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    150c <dlacon_+0x3cc>
movsd  -0x50(%rbp),%xmm0
movaps 0xb37(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     15ab <dlacon_+0x46b>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1558 <dlacon_+0x418>
movsd  -0x50(%rbp),%xmm0
movaps 0xad9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1587 <dlacon_+0x447>
movsd  -0x50(%rbp),%xmm0
movaps 0xabc(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  0xa79(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1060 <floor@plt>
mov    %eax,-0xa4(%rbp)
jmp    1636 <dlacon_+0x4f6>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     15e2 <dlacon_+0x4a2>
movsd  -0x50(%rbp),%xmm0
movaps 0xa4f(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    1611 <dlacon_+0x4d1>
movsd  -0x50(%rbp),%xmm0
movaps 0xa32(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0x9ef(%rip),%xmm0
subsd  %xmm1,%xmm0
call   1060 <floor@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
mov    -0x28(%rbp),%rcx
movslq -0x6c(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     1652 <dlacon_+0x512>
jmp    166a <dlacon_+0x52a>
jmp    1657 <dlacon_+0x517>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1497 <dlacon_+0x357>
jmp    1835 <dlacon_+0x6f5>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x68(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1686 <dlacon_+0x546>
jmp    1835 <dlacon_+0x6f5>
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    179b <dlacon_+0x65b>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     16d3 <dlacon_+0x593>
movsd  -0x50(%rbp),%xmm0
movaps 0x95e(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1702 <dlacon_+0x5c2>
movsd  -0x50(%rbp),%xmm0
movaps 0x941(%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
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1756 <dlacon_+0x616>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  0x8cf(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
call   1060 <floor@plt>
mov    %eax,-0xbc(%rbp)
jmp    177c <dlacon_+0x63c>
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  0x8aa(%rip),%xmm0
subsd  (%rax,%rcx,8),%xmm0
call   1060 <floor@plt>
mov    %eax,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xbc(%rbp)
mov    -0xbc(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x6c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    168d <dlacon_+0x54d>
mov    -0x38(%rbp),%rax
movl   $0x2,(%rax)
movl   $0x4,0x2895(%rip)
movl   $0x0,-0x4(%rbp)
jmp    1968 <dlacon_+0x828>
mov    -0x70(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
call   1040 <idamax_@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0x821(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jne    1818 <dlacon_+0x6d8>
jp     1818 <dlacon_+0x6d8>
jmp    1830 <dlacon_+0x6f0>
cmpl   $0x5,-0x54(%rbp)
jge    1830 <dlacon_+0x6f0>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13ea <dlacon_+0x2aa>
jmp    1835 <dlacon_+0x6f5>
movsd  0x7c3(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x1,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jg     18c9 <dlacon_+0x789>
movsd  -0x60(%rbp),%xmm0
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
movsd  0x780(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x6c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1849 <dlacon_+0x709>
mov    -0x38(%rbp),%rax
movl   $0x1,(%rax)
movl   $0x5,0x2767(%rip)
movl   $0x0,-0x4(%rbp)
jmp    1968 <dlacon_+0x828>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
lea    -0x3c(%rbp),%rdx
call   1050 <dasum_@plt>
mov    -0x10(%rbp),%rax
imul   $0x3,(%rax),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  0x6f7(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1952 <dlacon_+0x812>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rsi
mov    -0x18(%rbp),%rcx
lea    -0x3c(%rbp),%r8
mov    %r8,%rdx
call   1030 <dcopy_@plt>
movsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1957 <dlacon_+0x817>
mov    -0x38(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dlacon_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,%r14
mov    %rdx,%rbx
mov    %rdi,%r15
movl   $0x1,0x4(%rsp)
cmpl   $0x0,(%r9)
je     11f1 <dlacon_+0xa1>
mov    %r8,%r13
mov    %rcx,%r12
mov    %rsi,%rbp
mov    0x2ec8(%rip),%eax
add    $0xfffffffe,%eax
cmp    $0x3,%eax
ja     121c <dlacon_+0xcc>
lea    0xeb9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x4(%rsp),%rdx
mov    %r15,%rdi
mov    %rbx,%rsi
call   1040 <idamax_@plt>
mov    %eax,%ebp
add    $0xffffffff,%ebp
mov    (%r15),%edx
test   %edx,%edx
jle    11ca <dlacon_+0x7a>
shl    $0x3,%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <memset@plt>
movslq %ebp,%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,(%rbx,%rax,8)
movl   $0x1,(%r14)
movl   $0x3,0x2e60(%rip)
jmp    15b6 <dlacon_+0x466>
mov    (%r15),%eax
test   %eax,%eax
jle    151e <dlacon_+0x3ce>
cvtsi2sd %eax,%xmm1
movsd  0xe08(%rip),%xmm0
divsd  %xmm1,%xmm0
cmp    $0x4,%eax
jae    136a <dlacon_+0x21a>
xor    %ecx,%ecx
jmp    1510 <dlacon_+0x3c0>
cmpl   $0x1,(%r15)
jne    139c <dlacon_+0x24c>
movsd  (%rbx),%xmm0
movsd  %xmm0,0x0(%rbp)
andpd  0xe09(%rip),%xmm0
jmp    1358 <dlacon_+0x208>
mov    %r14,0x8(%rsp)
lea    0x4(%rsp),%r14
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %r14,%rdx
mov    %rbp,%rcx
mov    %r14,%r8
call   1030 <dcopy_@plt>
movsd  0x0(%r13),%xmm0
movsd  %xmm0,0x20(%rsp)
mov    %r15,%rdi
mov    %rbp,%rsi
mov    %r14,%rdx
mov    0x8(%rsp),%r14
call   1060 <dasum_@plt>
movsd  %xmm0,0x0(%r13)
cmpl   $0x0,(%r15)
jle    15a5 <dlacon_+0x455>
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movsd  (%rbx,%rbp,8),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0xd5d(%rip),%xmm0
call   1070 <floor@plt>
mov    %eax,%ecx
neg    %ecx
movsd  0x10(%rsp),%xmm0
ucomisd 0xd5e(%rip),%xmm0
cmovae %eax,%ecx
cmp    (%r12,%rbp,4),%ecx
jne    15c7 <dlacon_+0x477>
add    $0x1,%rbp
movslq (%r15),%rcx
cmp    %rcx,%rbp
jl     1290 <dlacon_+0x140>
jmp    12e8 <dlacon_+0x198>
lea    0x4(%rsp),%rdx
mov    %r15,%rdi
mov    %rbx,%rsi
call   1040 <idamax_@plt>
mov    (%r15),%ecx
test   %ecx,%ecx
jle    15a5 <dlacon_+0x455>
lea    -0x1(%rcx),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    %ecx,%eax
cmp    $0x1,%ecx
jne    1534 <dlacon_+0x3e4>
xor    %ecx,%ecx
jmp    1589 <dlacon_+0x439>
lea    0x4(%rsp),%rdx
mov    %r15,%rdi
mov    %rbx,%rsi
call   1060 <dasum_@plt>
mov    (%r15),%eax
lea    (%rax,%rax,2),%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
addsd  %xmm0,%xmm0
ucomisd 0x0(%r13),%xmm0
jbe    135e <dlacon_+0x20e>
lea    0x4(%rsp),%rdx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %rbp,%rcx
mov    %rdx,%r8
movapd %xmm0,0x10(%rsp)
call   1030 <dcopy_@plt>
movapd 0x10(%rsp),%xmm0
movsd  %xmm0,0x0(%r13)
movl   $0x0,(%r14)
jmp    15b6 <dlacon_+0x466>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x1c,%rdi
jae    143f <dlacon_+0x2ef>
xor    %edi,%edi
jmp    14d5 <dlacon_+0x385>
mov    %r14,0x8(%rsp)
lea    0x4(%rsp),%rdx
mov    %r15,%rdi
mov    %rbx,%rsi
call   1060 <dasum_@plt>
movsd  %xmm0,0x0(%r13)
cmpl   $0x0,(%r15)
jle    1425 <dlacon_+0x2d5>
xor    %ebp,%ebp
lea    0xc5a(%rip),%r14
jmp    13f7 <dlacon_+0x2a7>
nopl   0x0(%rax,%rax,1)
movsd  0xc30(%rip),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1070 <floor@plt>
neg    %eax
mov    %eax,(%r12,%rbp,4)
add    $0x1,%rbp
movslq (%r15),%rax
cmp    %rax,%rbp
jge    1425 <dlacon_+0x2d5>
movsd  (%rbx,%rbp,8),%xmm0
xor    %eax,%eax
ucomisd 0xc12(%rip),%xmm0
setb   %al
movsd  (%r14,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rbp,8)
jb     13d0 <dlacon_+0x280>
addsd  0xbea(%rip),%xmm0
call   1070 <floor@plt>
jmp    13e7 <dlacon_+0x297>
mov    0x8(%rsp),%rax
movl   $0x2,(%rax)
movl   $0x2,0x2c12(%rip)
jmp    15b6 <dlacon_+0x466>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nop
movupd %xmm1,(%rbx,%rdi,8)
movupd %xmm1,0x10(%rbx,%rdi,8)
movupd %xmm1,0x20(%rbx,%rdi,8)
movupd %xmm1,0x30(%rbx,%rdi,8)
movupd %xmm1,0x40(%rbx,%rdi,8)
movupd %xmm1,0x50(%rbx,%rdi,8)
movupd %xmm1,0x60(%rbx,%rdi,8)
movupd %xmm1,0x70(%rbx,%rdi,8)
movupd %xmm1,0x80(%rbx,%rdi,8)
movupd %xmm1,0x90(%rbx,%rdi,8)
movupd %xmm1,0xa0(%rbx,%rdi,8)
movupd %xmm1,0xb0(%rbx,%rdi,8)
movupd %xmm1,0xc0(%rbx,%rdi,8)
movupd %xmm1,0xd0(%rbx,%rdi,8)
movupd %xmm1,0xe0(%rbx,%rdi,8)
movupd %xmm1,0xf0(%rbx,%rdi,8)
add    $0x20,%rdi
add    $0xfffffffffffffff8,%rsi
jne    1450 <dlacon_+0x300>
test   %rdx,%rdx
je     1504 <dlacon_+0x3b4>
lea    (%rbx,%rdi,8),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movupd %xmm1,-0x10(%rsi,%rdi,1)
movupd %xmm1,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    14f0 <dlacon_+0x3a0>
cmp    %rax,%rcx
je     151e <dlacon_+0x3ce>
nopl   0x0(%rax)
movsd  %xmm0,(%rbx,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1510 <dlacon_+0x3c0>
movl   $0x1,(%r14)
movl   $0x1,0x2b1d(%rip)
jmp    15b6 <dlacon_+0x466>
mov    %eax,%edx
and    $0xfffffffe,%edx
xor    %ecx,%ecx
movsd  0xacd(%rip),%xmm1
movapd 0xae5(%rip),%xmm2
nopl   0x0(%rax,%rax,1)
xorps  %xmm3,%xmm3
cvtsi2sd %ecx,%xmm3
divsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,(%rbx,%rcx,8)
lea    0x1(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
divsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
xorpd  %xmm2,%xmm3
movlpd %xmm3,0x8(%rbx,%rcx,8)
add    $0x2,%rcx
cmp    %rcx,%rdx
jne    1550 <dlacon_+0x400>
test   $0x1,%al
je     15a5 <dlacon_+0x455>
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
divsd  %xmm0,%xmm1
addsd  0xa70(%rip),%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
movl   $0x1,(%r14)
movl   $0x5,0x2a96(%rip)
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movsd  0x20(%rsp),%xmm0
ucomisd 0x0(%r13),%xmm0
jae    12e5 <dlacon_+0x195>
cmpl   $0x0,(%r15)
jle    163f <dlacon_+0x4ef>
xor    %ebp,%ebp
lea    0xa38(%rip),%r14
jmp    1611 <dlacon_+0x4c1>
movsd  0xa16(%rip),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1070 <floor@plt>
neg    %eax
mov    %eax,(%r12,%rbp,4)
add    $0x1,%rbp
movslq (%r15),%rax
cmp    %rax,%rbp
jge    163f <dlacon_+0x4ef>
movsd  (%rbx,%rbp,8),%xmm0
xor    %eax,%eax
ucomisd 0x9f8(%rip),%xmm0
setb   %al
movsd  (%r14,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rbp,8)
jb     15ea <dlacon_+0x49a>
addsd  0x9d0(%rip),%xmm0
call   1070 <floor@plt>
jmp    1601 <dlacon_+0x4b1>
mov    0x8(%rsp),%rax
movl   $0x2,(%rax)
movl   $0x4,0x29f8(%rip)
jmp    15b6 <dlacon_+0x466>

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

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