int mc64fd_(int *pos0, int *qlen, int *n, int *q, double *d__, int *l,
            int *iway) {
  int i__1;
  int i__;
  double di, dk, dr;
  int qk, pos, idum, posk;
  --l;
  --d__;
  --q;
  if (*qlen == *pos0) {
    --(*qlen);
    return 0;
  }
  i__ = q[*qlen];
  di = d__[i__];
  --(*qlen);
  pos = *pos0;
  if (*iway == 1) {
    i__1 = *n;
    for (idum = 1; idum <= i__1; ++idum) {
      if (pos <= 1) {
        goto L20;
      }
      posk = pos / 2;
      qk = q[posk];
      if (di <= d__[qk]) {
        goto L20;
      }
      q[pos] = qk;
      l[qk] = pos;
      pos = posk;
    }
  L20:
    q[pos] = i__;
    l[i__] = pos;
    i__1 = *n;
    for (idum = 1; idum <= i__1; ++idum) {
      posk = pos << 1;
      if (posk > *qlen) {
        goto L40;
      }
      dk = d__[q[posk]];
      if (posk < *qlen) {
        dr = d__[q[posk + 1]];
        if (dk < dr) {
          ++posk;
          dk = dr;
        }
      }
      if (di >= dk) {
        goto L40;
      }
      qk = q[posk];
      q[pos] = qk;
      l[qk] = pos;
      pos = posk;
    }
  } else {
    i__1 = *n;
    for (idum = 1; idum <= i__1; ++idum) {
      if (pos <= 1) {
        goto L34;
      }
      posk = pos / 2;
      qk = q[posk];
      if (di >= d__[qk]) {
        goto L34;
      }
      q[pos] = qk;
      l[qk] = pos;
      pos = posk;
    }
  L34:
    q[pos] = i__;
    l[i__] = pos;
    i__1 = *n;
    for (idum = 1; idum <= i__1; ++idum) {
      posk = pos << 1;
      if (posk > *qlen) {
        goto L40;
      }
      dk = d__[q[posk]];
      if (posk < *qlen) {
        dr = d__[q[posk + 1]];
        if (dk > dr) {
          ++posk;
          dk = dr;
        }
      }
      if (di <= dk) {
        goto L40;
      }
      qk = q[posk];
      q[pos] = qk;
      l[qk] = pos;
      pos = posk;
    }
  }
L40:
  q[pos] = i__;
  l[i__] = pos;
  return 0;
}


x86 assembly (clang, -O0):
<mc64fd_>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x38(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jne    116d <mc64fd_+0x6d>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1551 <mc64fd_+0x451>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x60(%rbp)
mov    0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jne    136f <mc64fd_+0x26f>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1249 <mc64fd_+0x149>
cmpl   $0x1,-0x60(%rbp)
jg     11dc <mc64fd_+0xdc>
jmp    124e <mc64fd_+0x14e>
mov    -0x60(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
movsd  -0x48(%rbp),%xmm1
mov    -0x30(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     1219 <mc64fd_+0x119>
jmp    124e <mc64fd_+0x14e>
mov    -0x5c(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    11c1 <mc64fd_+0xc1>
jmp    124e <mc64fd_+0x14e>
mov    -0x40(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     136a <mc64fd_+0x26a>
mov    -0x60(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jle    12a3 <mc64fd_+0x1a3>
jmp    152e <mc64fd_+0x42e>
mov    -0x30(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq -0x68(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    1317 <mc64fd_+0x217>
mov    -0x30(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    -0x68(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1312 <mc64fd_+0x212>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1317 <mc64fd_+0x217>
movsd  -0x48(%rbp),%xmm0
ucomisd -0x50(%rbp),%xmm0
jb     132c <mc64fd_+0x22c>
jmp    152e <mc64fd_+0x42e>
mov    -0x28(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    127a <mc64fd_+0x17a>
jmp    1529 <mc64fd_+0x429>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1403 <mc64fd_+0x303>
cmpl   $0x1,-0x60(%rbp)
jg     139a <mc64fd_+0x29a>
jmp    1408 <mc64fd_+0x308>
mov    -0x60(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x5c(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     13d3 <mc64fd_+0x2d3>
jmp    1408 <mc64fd_+0x308>
mov    -0x5c(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    137f <mc64fd_+0x27f>
jmp    1408 <mc64fd_+0x308>
mov    -0x40(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1524 <mc64fd_+0x424>
mov    -0x60(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jle    145d <mc64fd_+0x35d>
jmp    152e <mc64fd_+0x42e>
mov    -0x30(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq -0x68(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jge    14cd <mc64fd_+0x3cd>
mov    -0x30(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    -0x68(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x50(%rbp),%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    14c8 <mc64fd_+0x3c8>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    14cd <mc64fd_+0x3cd>
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     14e6 <mc64fd_+0x3e6>
jmp    152e <mc64fd_+0x42e>
mov    -0x28(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1434 <mc64fd_+0x334>
jmp    1529 <mc64fd_+0x429>
jmp    152e <mc64fd_+0x42e>
mov    -0x40(%rbp),%edx
mov    -0x28(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<mc64fd_>:
push   %rbp
push   %r14
push   %rbx
movslq (%rsi),%rax
cmp    (%rdi),%eax
jne    1115 <mc64fd_+0x15>
add    $0xffffffff,%eax
mov    %eax,(%rsi)
jmp    126f <mc64fd_+0x16f>
mov    0x20(%rsp),%r14
mov    -0x4(%rcx,%rax,4),%ebx
movslq %ebx,%r10
movsd  -0x8(%r8,%r10,8),%xmm0
add    $0xffffffff,%eax
mov    %eax,(%rsi)
mov    (%rdi),%ebp
mov    (%rdx),%r11d
test   %r11d,%r11d
setle  %dil
cmp    $0x2,%ebp
setl   %bl
or     %dil,%bl
cmpl   $0x1,(%r14)
jne    11da <mc64fd_+0xda>
test   %bl,%bl
je     1276 <mc64fd_+0x176>
mov    %ebp,%r14d
movslq %r14d,%rax
mov    %r10d,-0x4(%rcx,%rax,4)
mov    %eax,-0x4(%r9,%r10,4)
mov    (%rdx),%eax
test   %eax,%eax
jle    125f <mc64fd_+0x15f>
xchg   %ax,%ax
lea    (%r14,%r14,1),%edx
mov    (%rsi),%edi
cmp    %edi,%edx
jg     125f <mc64fd_+0x15f>
movslq %edx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movsd  -0x8(%r8,%rdi,8),%xmm1
jge    11af <mc64fd_+0xaf>
mov    %edx,%ebx
or     $0x1,%ebx
movslq %ebx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movsd  -0x8(%r8,%rdi,8),%xmm2
ucomisd %xmm1,%xmm2
jbe    11af <mc64fd_+0xaf>
movapd %xmm2,%xmm1
mov    %ebx,%edx
ucomisd %xmm1,%xmm0
jae    125f <mc64fd_+0x15f>
movslq %edx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movslq %r14d,%rbp
mov    %edi,-0x4(%rcx,%rbp,4)
mov    %r14d,-0x4(%r9,%rdi,4)
mov    %edx,%r14d
add    $0xffffffff,%eax
jne    1170 <mc64fd_+0x70>
jmp    1262 <mc64fd_+0x162>
test   %bl,%bl
je     12c0 <mc64fd_+0x1c0>
mov    %ebp,%r14d
movslq %r14d,%rax
mov    %r10d,-0x4(%rcx,%rax,4)
mov    %eax,-0x4(%r9,%r10,4)
mov    (%rdx),%eax
test   %eax,%eax
jle    125f <mc64fd_+0x15f>
nopl   0x0(%rax,%rax,1)
lea    (%r14,%r14,1),%edx
mov    (%rsi),%edi
cmp    %edi,%edx
jg     125f <mc64fd_+0x15f>
movslq %edx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movsd  -0x8(%r8,%rdi,8),%xmm1
jge    123b <mc64fd_+0x13b>
mov    %edx,%ebx
or     $0x1,%ebx
movslq %ebx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movsd  -0x8(%r8,%rdi,8),%xmm2
ucomisd %xmm2,%xmm1
jbe    123b <mc64fd_+0x13b>
movapd %xmm2,%xmm1
mov    %ebx,%edx
ucomisd %xmm0,%xmm1
jae    125f <mc64fd_+0x15f>
movslq %edx,%rdi
movslq -0x4(%rcx,%rdi,4),%rdi
movslq %r14d,%rbp
mov    %edi,-0x4(%rcx,%rbp,4)
mov    %r14d,-0x4(%r9,%rdi,4)
mov    %edx,%r14d
add    $0xffffffff,%eax
jne    1200 <mc64fd_+0x100>
jmp    1262 <mc64fd_+0x162>
mov    %r14d,%edx
movslq %edx,%rax
mov    %r10d,-0x4(%rcx,%rax,4)
mov    %eax,-0x4(%r9,%r10,4)
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    $0x1,%ebx
mov    %ebp,%r14d
xchg   %ax,%ax
shr    %r14d
mov    -0x4(%rcx,%r14,4),%edi
movslq %edi,%rdi
movsd  -0x8(%r8,%rdi,8),%xmm1
ucomisd %xmm0,%xmm1
jae    1154 <mc64fd_+0x54>
mov    %ebp,%eax
mov    %edi,-0x4(%rcx,%rax,4)
mov    %ebp,-0x4(%r9,%rdi,4)
cmp    %r11d,%ebx
jge    1157 <mc64fd_+0x57>
add    $0x1,%ebx
cmp    $0x3,%ebp
mov    %r14d,%ebp
ja     1280 <mc64fd_+0x180>
jmp    1157 <mc64fd_+0x57>
mov    $0x1,%ebx
mov    %ebp,%r14d
nopl   0x0(%rax,%rax,1)
shr    %r14d
mov    -0x4(%rcx,%r14,4),%eax
movslq %eax,%rdi
ucomisd -0x8(%r8,%rdi,8),%xmm0
jae    11e2 <mc64fd_+0xe2>
mov    %ebp,%eax
mov    %edi,-0x4(%rcx,%rax,4)
mov    %ebp,-0x4(%r9,%rdi,4)
cmp    %r11d,%ebx
jge    11e5 <mc64fd_+0xe5>
add    $0x1,%ebx
cmp    $0x3,%ebp
mov    %r14d,%ebp
ja     12d0 <mc64fd_+0x1d0>
jmp    11e5 <mc64fd_+0xe5>

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

LLVM IR (-O2):
define i32 @mc64fd_(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, double* nocapture %4, i32* nocapture writeonly %5, i32* nocapture %6) {
%8 = getelementptr inbounds i32, i32* %5, i64 -1
%9 = getelementptr inbounds double, double* %4, i64 -1
%10 = getelementptr inbounds i32, i32* %3, i64 -1
%11 = load i32, i32* %1
%12 = load i32, i32* %0
%13 = icmp eq i32 %11, %12
br i1 %13, label %14, label %16
14: ; preds = %7
%15 = add nsw i32 %11, -1
store i32 %15, i32* %1
br label %166
16: ; preds = %7
%17 = sext i32 %11 to i64
%18 = getelementptr inbounds i32, i32* %10, i64 %17
%19 = load i32, i32* %18
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds double, double* %9, i64 %20
%22 = load double, double* %21
%23 = add nsw i32 %11, -1
store i32 %23, i32* %1
%24 = load i32, i32* %0
%25 = load i32, i32* %6
%26 = icmp eq i32 %25, 1
%27 = load i32, i32* %2
%28 = icmp slt i32 %27, 1
%29 = icmp slt i32 %24, 2
%30 = select i1 %28, i1 true, i1 %29
br i1 %26, label %31, label %96
31: ; preds = %16
br i1 %30, label %51, label %32
32: ; preds = %31, %43
%33 = phi i32 [ %47, %43 ], [ 1, %31 ]
%34 = phi i32 [ %35, %43 ], [ %24, %31 ]
%35 = lshr i32 %34, 1
%36 = zext i32 %35 to i64
%37 = getelementptr inbounds i32, i32* %10, i64 %36
%38 = load i32, i32* %37
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds double, double* %9, i64 %39
%41 = load double, double* %40
%42 = fcmp ugt double %22, %41
br i1 %42, label %43, label %51
43: ; preds = %32
%44 = zext i32 %34 to i64
%45 = getelementptr inbounds i32, i32* %10, i64 %44
store i32 %38, i32* %45
%46 = getelementptr inbounds i32, i32* %8, i64 %39
store i32 %34, i32* %46
%47 = add nuw nsw i32 %33, 1
%48 = icmp sge i32 %33, %27
%49 = icmp ult i32 %34, 4
%50 = select i1 %48, i1 true, i1 %49
br i1 %50, label %51, label %32
51: ; preds = %32, %43, %31
%52 = phi i32 [ %24, %31 ], [ %35, %43 ], [ %34, %32 ]
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i32, i32* %10, i64 %53
store i32 %19, i32* %54
%55 = getelementptr inbounds i32, i32* %8, i64 %20
store i32 %52, i32* %55
%56 = load i32, i32* %2
%57 = icmp slt i32 %56, 1
br i1 %57, label %161, label %58
58: ; preds = %51, %86
%59 = phi i32 [ %94, %86 ], [ 1, %51 ]
%60 = phi i32 [ %84, %86 ], [ %52, %51 ]
%61 = shl i32 %60, 1
%62 = load i32, i32* %1
%63 = icmp sgt i32 %61, %62
br i1 %63, label %161, label %64
64: ; preds = %58
%65 = sext i32 %61 to i64
%66 = getelementptr inbounds i32, i32* %10, i64 %65
%67 = load i32, i32* %66
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds double, double* %9, i64 %68
%70 = load double, double* %69
%71 = icmp slt i32 %61, %62
br i1 %71, label %72, label %82
72: ; preds = %64
%73 = or i32 %61, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i32, i32* %10, i64 %74
%76 = load i32, i32* %75
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %9, i64 %77
%79 = load double, double* %78
%80 = fcmp olt double %70, %79
br i1 %80, label %81, label %82
81: ; preds = %72
br label %82
82: ; preds = %72, %81, %64
%83 = phi double [ %79, %81 ], [ %70, %72 ], [ %70, %64 ]
%84 = phi i32 [ %73, %81 ], [ %61, %72 ], [ %61, %64 ]
%85 = fcmp ult double %22, %83
br i1 %85, label %86, label %161
86: ; preds = %82
%87 = sext i32 %84 to i64
%88 = getelementptr inbounds i32, i32* %10, i64 %87
%89 = load i32, i32* %88
%90 = sext i32 %60 to i64
%91 = getelementptr inbounds i32, i32* %10, i64 %90
store i32 %89, i32* %91
%92 = sext i32 %89 to i64
%93 = getelementptr inbounds i32, i32* %8, i64 %92
store i32 %60, i32* %93
%94 = add nuw i32 %59, 1
%95 = icmp eq i32 %59, %56
br i1 %95, label %161, label %58
96: ; preds = %16
br i1 %30, label %116, label %97
97: ; preds = %96, %108
%98 = phi i32 [ %112, %108 ], [ 1, %96 ]
%99 = phi i32 [ %100, %108 ], [ %24, %96 ]
%100 = lshr i32 %99, 1
%101 = zext i32 %100 to i64
%102 = getelementptr inbounds i32, i32* %10, i64 %101
%103 = load i32, i32* %102
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds double, double* %9, i64 %104
%106 = load double, double* %105
%107 = fcmp ult double %22, %106
br i1 %107, label %108, label %116
108: ; preds = %97
%109 = zext i32 %99 to i64
%110 = getelementptr inbounds i32, i32* %10, i64 %109
store i32 %103, i32* %110
%111 = getelementptr inbounds i32, i32* %8, i64 %104
store i32 %99, i32* %111
%112 = add nuw nsw i32 %98, 1
%113 = icmp sge i32 %98, %27
%114 = icmp ult i32 %99, 4
%115 = select i1 %113, i1 true, i1 %114
br i1 %115, label %116, label %97
116: ; preds = %97, %108, %96
%117 = phi i32 [ %24, %96 ], [ %100, %108 ], [ %99, %97 ]
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i32, i32* %10, i64 %118
store i32 %19, i32* %119
%120 = getelementptr inbounds i32, i32* %8, i64 %20
store i32 %117, i32* %120
%121 = load i32, i32* %2
%122 = icmp slt i32 %121, 1
br i1 %122, label %161, label %123
123: ; preds = %116, %151
%124 = phi i32 [ %159, %151 ], [ 1, %116 ]
%125 = phi i32 [ %149, %151 ], [ %117, %116 ]
%126 = shl i32 %125, 1
%127 = load i32, i32* %1
%128 = icmp sgt i32 %126, %127
br i1 %128, label %161, label %129
129: ; preds = %123
%130 = sext i32 %126 to i64
%131 = getelementptr inbounds i32, i32* %10, i64 %130
%132 = load i32, i32* %131
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double, double* %9, i64 %133
%135 = load double, double* %134
%136 = icmp slt i32 %126, %127
br i1 %136, label %137, label %147
137: ; preds = %129
%138 = or i32 %126, 1
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i32, i32* %10, i64 %139
%141 = load i32, i32* %140
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double, double* %9, i64 %142
%144 = load double, double* %143
%145 = fcmp ogt double %135, %144
br i1 %145, label %146, label %147
146: ; preds = %137
br label %147
147: ; preds = %137, %146, %129
%148 = phi double [ %144, %146 ], [ %135, %137 ], [ %135, %129 ]
%149 = phi i32 [ %138, %146 ], [ %126, %137 ], [ %126, %129 ]
%150 = fcmp ugt double %22, %148
br i1 %150, label %151, label %161
151: ; preds = %147
%152 = sext i32 %149 to i64
%153 = getelementptr inbounds i32, i32* %10, i64 %152
%154 = load i32, i32* %153
%155 = sext i32 %125 to i64
%156 = getelementptr inbounds i32, i32* %10, i64 %155
store i32 %154, i32* %156
%157 = sext i32 %154 to i64
%158 = getelementptr inbounds i32, i32* %8, i64 %157
store i32 %125, i32* %158
%159 = add nuw i32 %124, 1
%160 = icmp eq i32 %124, %121
br i1 %160, label %161, label %123
161: ; preds = %123, %147, %151, %58, %82, %86, %116, %51
%162 = phi i32 [ %52, %51 ], [ %117, %116 ], [ %60, %58 ], [ %60, %82 ], [ %84, %86 ], [ %125, %123 ], [ %125, %147 ], [ %149, %151 ]
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds i32, i32* %10, i64 %163
store i32 %19, i32* %164
%165 = getelementptr inbounds i32, i32* %8, i64 %20
store i32 %162, i32* %165
br label %166
166: ; preds = %161, %14
ret i32 0
}