void path(int n, double *a, int *f, double *u, double *v, int *fb, int *rc,
          double *pi, int *lr, int *uc, double INF, int ii, int *jj_p) {
  int k, j, jj, l, r, nuc, nlr;
  double ia, min;
  lr[0] = ii;
  for (k = 0; k < n; k++) {
    pi[k] = a[ii * n + k] - u[ii] - v[k];
    rc[k] = ii;
    uc[k] = k;
  }
  nuc = n;
  nlr = 1;
  goto L40;
L20:
  r = lr[nlr - 1];
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    ia = a[r * n + j] - u[r] - v[j];
    if (ia < pi[j]) {
      pi[j] = ia;
      rc[j] = r;
    }
  }
L40:
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    if (pi[j] == 0)
      goto L100;
  }
  min = INF;
  for (l = 0; l < nuc; l++) {
    j = uc[l];
    if (min > pi[j])
      min = pi[j];
  }
  for (l = 0; l < nlr; l++) {
    r = lr[l];
    u[r] += min;
  }
  for (j = 0; j < n; j++) {
    if (pi[j] == 0) {
      v[j] -= min;
    } else {
      pi[j] -= min;
    }
  }
  goto L40;
L100:
  if (fb[j] < 0)
    goto L110;
  nlr++;
  lr[nlr - 1] = fb[j];
  uc[l] = uc[nuc - 1];
  nuc--;
  goto L20;
L110:
  jj = j;
  (*jj_p) = jj;
}


x86 assembly (clang, -O0):
<path>:
push   %rbp
mov    %rsp,%rbp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
mov    0x30(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11ba <path+0xba>
mov    -0x10(%rbp),%rax
mov    0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq 0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x30(%rbp),%edx
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x3c(%rbp),%edx
mov    0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1147 <path+0x47>
mov    -0x4(%rbp),%eax
mov    %eax,-0x50(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    1289 <path+0x189>
mov    0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    1284 <path+0x184>
mov    0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x40(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x4c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm1
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1271 <path+0x171>
movsd  -0x60(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4c(%rbp),%edx
mov    0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1276 <path+0x176>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    11e6 <path+0xe6>
jmp    1289 <path+0x189>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    12e2 <path+0x1e2>
mov    0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12cf <path+0x1cf>
jp     12cf <path+0x1cf>
jmp    1416 <path+0x316>
jmp    12d4 <path+0x1d4>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1290 <path+0x190>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    134a <path+0x24a>
mov    0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1337 <path+0x237>
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    133c <path+0x23c>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12f3 <path+0x1f3>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    1390 <path+0x290>
mov    0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x4c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1351 <path+0x251>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1411 <path+0x311>
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13e3 <path+0x2e3>
jp     13e3 <path+0x2e3>
movsd  -0x68(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    13fe <path+0x2fe>
movsd  -0x68(%rbp),%xmm1
mov    0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1403 <path+0x303>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1397 <path+0x297>
jmp    1289 <path+0x189>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    142d <path+0x32d>
jmp    147a <path+0x37a>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x28(%rbp),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    0x28(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x50(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
jmp    11cc <path+0xcc>
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<path>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r9,-0x30(%rsp)
mov    %r8,-0x70(%rsp)
mov    0x58(%rsp),%r14d
mov    0x48(%rsp),%r10
mov    0x40(%rsp),%r12
mov    0x38(%rsp),%r13
mov    %r14d,(%r10)
mov    %edi,%eax
mov    %rdi,-0x60(%rsp)
test   %edi,%edi
mov    %rsi,-0x68(%rsp)
mov    %rax,-0x80(%rsp)
jle    143f <path+0x33f>
mov    %r14d,%edx
mov    -0x60(%rsp),%rdi
imul   %edi,%edx
movslq %r14d,%rax
lea    (%rcx,%rax,8),%r8
movslq %edx,%rbp
cmp    $0x1,%edi
jne    116b <path+0x6b>
xor    %r15d,%r15d
mov    -0x80(%rsp),%rax
jmp    1359 <path+0x259>
mov    -0x80(%rsp),%rbx
lea    (%r12,%rbx,8),%rdi
lea    (%rsi,%rbp,8),%r9
mov    %rbp,-0x78(%rsp)
add    %rbx,%rbp
lea    (%rsi,%rbp,8),%rbp
lea    (%rcx,%rax,8),%rax
add    $0x8,%rax
cmp    %r12,%rbp
mov    %r13,%rsi
seta   %r13b
mov    -0x70(%rsp),%rdx
lea    (%rdx,%rbx,8),%rbp
cmp    %rdi,%r9
lea    (%rsi,%rbx,4),%r15
setb   %r9b
cmp    %r12,%rax
seta   %r11b
cmp    %rdi,%r8
setb   %al
cmp    %r12,%rbp
seta   %sil
cmp    %rdx,%rdi
mov    0x50(%rsp),%rdx
lea    (%rdx,%rbx,4),%rdi
seta   %bl
cmp    0x38(%rsp),%rdi
seta   %dil
cmp    %rdx,%r15
seta   %bpl
xor    %r15d,%r15d
test   %r9b,%r13b
jne    1345 <path+0x245>
and    %al,%r11b
jne    1345 <path+0x245>
and    %bl,%sil
mov    -0x68(%rsp),%rsi
mov    0x38(%rsp),%r13
mov    -0x80(%rsp),%rax
jne    1354 <path+0x254>
and    %bpl,%dil
mov    -0x78(%rsp),%rbp
jne    1359 <path+0x259>
mov    %eax,%r15d
and    $0xfffffffe,%r15d
movd   %r14d,%xmm1
pshufd $0x50,%xmm1,%xmm1
lea    -0x2(%r15),%rax
mov    %rax,%r11
shr    %r11
add    $0x1,%r11
test   %rax,%rax
je     12e6 <path+0x1e6>
mov    %r11,%rdx
and    $0xfffffffffffffffe,%rdx
movsd  (%r8),%xmm3
unpcklpd %xmm3,%xmm3
lea    (%rsi,%rbp,8),%rbp
add    $0x10,%rbp
movdqa 0xda0(%rip),%xmm2
xor    %edi,%edi
movdqa 0xda5(%rip),%xmm8
movdqa 0xdad(%rip),%xmm5
mov    -0x70(%rsp),%rax
mov    0x50(%rsp),%rbx
nopl   (%rax)
movupd -0x10(%rbp,%rdi,8),%xmm6
subpd  %xmm3,%xmm6
movupd (%rax,%rdi,8),%xmm7
subpd  %xmm7,%xmm6
movupd %xmm6,(%r12,%rdi,8)
movq   %xmm1,0x0(%r13,%rdi,4)
movq   %xmm2,(%rbx,%rdi,4)
movdqa %xmm2,%xmm6
paddd  %xmm8,%xmm6
movupd 0x0(%rbp,%rdi,8),%xmm7
subpd  %xmm3,%xmm7
movupd 0x10(%rax,%rdi,8),%xmm4
subpd  %xmm4,%xmm7
movupd %xmm7,0x10(%r12,%rdi,8)
movq   %xmm1,0x8(%r13,%rdi,4)
movq   %xmm6,0x8(%rbx,%rdi,4)
add    $0x4,%rdi
paddd  %xmm5,%xmm2
add    $0xfffffffffffffffe,%rdx
jne    1280 <path+0x180>
jmp    12f5 <path+0x1f5>
movdqa 0xd12(%rip),%xmm2
xor    %edi,%edi
mov    0x50(%rsp),%rbx
test   $0x1,%r11b
mov    -0x78(%rsp),%rbp
je     1336 <path+0x236>
lea    (%rdi,%rbp,1),%rax
movupd (%rsi,%rax,8),%xmm3
movsd  (%r8),%xmm4
unpcklpd %xmm4,%xmm4
subpd  %xmm4,%xmm3
mov    -0x70(%rsp),%rax
movupd (%rax,%rdi,8),%xmm4
subpd  %xmm4,%xmm3
movupd %xmm3,(%r12,%rdi,8)
movq   %xmm1,0x0(%r13,%rdi,4)
movq   %xmm2,(%rbx,%rdi,4)
mov    -0x80(%rsp),%rax
cmp    %rax,%r15
jne    1359 <path+0x259>
jmp    143f <path+0x33f>
mov    -0x68(%rsp),%rsi
mov    0x38(%rsp),%r13
mov    -0x80(%rsp),%rax
mov    -0x78(%rsp),%rbp
mov    %r15,%rdx
not    %rdx
test   $0x1,%al
je     1399 <path+0x299>
lea    (%r15,%rbp,1),%rax
movsd  (%rsi,%rax,8),%xmm1
subsd  (%r8),%xmm1
mov    -0x70(%rsp),%rax
subsd  (%rax,%r15,8),%xmm1
movsd  %xmm1,(%r12,%r15,8)
mov    %r14d,0x0(%r13,%r15,4)
mov    0x50(%rsp),%rax
mov    %r15d,(%rax,%r15,4)
mov    -0x80(%rsp),%rax
or     $0x1,%r15
add    %rax,%rdx
je     143f <path+0x33f>
add    %r15,%rbp
lea    (%rsi,%rbp,8),%r9
add    $0x8,%r9
mov    0x50(%rsp),%rax
lea    0x4(%rax,%r15,4),%r11
lea    0x4(%r13,%r15,4),%rbp
lea    (%r12,%r15,8),%rbx
add    $0x8,%rbx
mov    -0x70(%rsp),%rax
lea    (%rax,%r15,8),%rsi
add    $0x8,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  -0x8(%r9,%rdi,8),%xmm1
subsd  (%r8),%xmm1
subsd  -0x8(%rsi,%rdi,8),%xmm1
movsd  %xmm1,-0x8(%rbx,%rdi,8)
mov    %r14d,-0x4(%rbp,%rdi,4)
lea    (%r15,%rdi,1),%rax
mov    %eax,-0x4(%r11,%rdi,4)
movsd  (%r9,%rdi,8),%xmm1
subsd  (%r8),%xmm1
subsd  (%rsi,%rdi,8),%xmm1
movsd  %xmm1,(%rbx,%rdi,8)
mov    %r14d,0x0(%rbp,%rdi,4)
add    $0x1,%eax
mov    %eax,(%r11,%rdi,4)
lea    (%r15,%rdi,1),%rax
add    $0x2,%rax
add    $0x2,%rdi
cmp    -0x80(%rsp),%rax
mov    -0x80(%rsp),%rax
jne    13e0 <path+0x2e0>
mov    -0x60(%rsp),%r15
movslq %r15d,%rdx
mov    %rdx,-0x78(%rsp)
and    $0xfffffffe,%eax
mov    %rax,-0x38(%rsp)
lea    0x8(%r12),%rax
mov    %rax,-0x40(%rsp)
lea    -0x1(%r15),%r14d
mov    $0x1,%r13d
xor    %eax,%eax
mov    %rax,-0x50(%rsp)
pxor   %xmm1,%xmm1
xor    %eax,%eax
mov    %r15d,%edx
mov    -0x70(%rsp),%r8
mov    0x50(%rsp),%rbx
jmp    14b5 <path+0x3b5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r13
addq   $0xffffffffffffffff,-0x78(%rsp)
mov    -0x54(%rsp),%eax
add    $0x1,%eax
addq   $0x1,-0x50(%rsp)
add    $0xffffffff,%r14d
mov    0x50(%rsp),%rbx
mov    -0x10(%rsp),%rdx
mov    %r14d,%r14d
mov    %r14,-0x8(%rsp)
mov    %r13d,%r14d
and    $0x3,%r14d
mov    %r13,-0x48(%rsp)
mov    %r13,%r11
and    $0xfffffffffffffffc,%r11
mov    %edx,%edi
and    $0x3,%edi
mov    %edx,%r13d
mov    %r13d,%esi
and    $0xfffffffc,%esi
mov    %rsi,-0x28(%rsp)
mov    %r15d,%esi
mov    %eax,-0x54(%rsp)
sub    %eax,%esi
mov    %rsi,-0x18(%rsp)
lea    -0x1(%rsi),%rax
mov    %rax,-0x20(%rsp)
add    $0xffffffff,%edx
mov    %rdx,-0x10(%rsp)
movapd %xmm0,%xmm2
cmpq   $0x0,-0x78(%rsp)
jle    15f0 <path+0x4f0>
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rbx,%rsi,4),%eax
movslq %eax,%rbp
movsd  (%r12,%rbp,8),%xmm2
ucomisd %xmm1,%xmm2
jne    1538 <path+0x438>
jnp    1790 <path+0x690>
add    $0x1,%rsi
cmp    %rsi,%r13
jne    1520 <path+0x420>
movapd %xmm0,%xmm2
cmpq   $0x0,-0x78(%rsp)
jle    15f0 <path+0x4f0>
cmpq   $0x3,-0x20(%rsp)
jae    1561 <path+0x461>
xor    %esi,%esi
movapd %xmm0,%xmm3
jmp    15b4 <path+0x4b4>
xor    %esi,%esi
movapd %xmm0,%xmm3
mov    -0x28(%rsp),%rdx
nopl   0x0(%rax)
movslq (%rbx,%rsi,4),%rax
movsd  (%r12,%rax,8),%xmm2
minsd  %xmm3,%xmm2
movslq 0x4(%rbx,%rsi,4),%rax
movsd  (%r12,%rax,8),%xmm3
minsd  %xmm2,%xmm3
movslq 0x8(%rbx,%rsi,4),%rax
movsd  (%r12,%rax,8),%xmm2
minsd  %xmm3,%xmm2
movslq 0xc(%rbx,%rsi,4),%rax
movsd  (%r12,%rax,8),%xmm3
minsd  %xmm2,%xmm3
add    $0x4,%rsi
cmp    %rsi,%rdx
jne    1570 <path+0x470>
movapd %xmm3,%xmm2
testb  $0x3,-0x18(%rsp)
je     15f0 <path+0x4f0>
lea    (%rbx,%rsi,4),%rsi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movslq (%rsi,%rbp,4),%rax
movsd  (%r12,%rax,8),%xmm2
minsd  %xmm3,%xmm2
add    $0x1,%rbp
movapd %xmm2,%xmm3
cmp    %rbp,%rdi
jne    15d0 <path+0x4d0>
nopl   0x0(%rax,%rax,1)
cmpq   $0x3,-0x50(%rsp)
jae    1600 <path+0x500>
xor    %esi,%esi
jmp    1664 <path+0x564>
nopl   0x0(%rax)
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq (%r10,%rsi,4),%rax
movsd  (%rcx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rax,8)
movslq 0x4(%r10,%rsi,4),%rax
movsd  (%rcx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rax,8)
movslq 0x8(%r10,%rsi,4),%rax
movsd  (%rcx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rax,8)
movslq 0xc(%r10,%rsi,4),%rax
movsd  (%rcx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rax,8)
add    $0x4,%rsi
cmp    %rsi,%r11
jne    1610 <path+0x510>
testb  $0x3,-0x48(%rsp)
je     169b <path+0x59b>
lea    (%r10,%rsi,4),%rsi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movslq (%rsi,%rax,4),%rdx
movsd  (%rcx,%rdx,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,(%rcx,%rdx,8)
add    $0x1,%rax
cmp    %rax,%r14
jne    1680 <path+0x580>
test   %r15d,%r15d
jle    1502 <path+0x402>
cmp    $0x1,%r15d
jne    16f0 <path+0x5f0>
xor    %r9d,%r9d
testb  $0x1,-0x80(%rsp)
mov    -0x70(%rsp),%r8
mov    -0x60(%rsp),%r15
je     1502 <path+0x402>
movsd  (%r12,%r9,8),%xmm3
ucomisd %xmm1,%xmm3
jne    1774 <path+0x674>
jp     1774 <path+0x674>
lea    (%r8,%r9,8),%rax
movsd  (%r8,%r9,8),%xmm3
jmp    1778 <path+0x678>
nopw   0x0(%rax,%rax,1)
mov    -0x40(%rsp),%r15
xor    %r9d,%r9d
mov    -0x38(%rsp),%rsi
jmp    1719 <path+0x619>
nop
subsd  %xmm2,%xmm3
movsd  %xmm3,(%rax)
add    $0x2,%r9
add    $0x10,%r15
add    $0x10,%r8
cmp    %r9,%rsi
je     16ad <path+0x5ad>
movsd  -0x8(%r15),%xmm3
ucomisd %xmm1,%xmm3
jne    1740 <path+0x640>
jp     1740 <path+0x640>
movsd  (%r8),%xmm3
mov    %r8,%rax
jmp    1744 <path+0x644>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%r12,%r9,8),%rax
subsd  %xmm2,%xmm3
movsd  %xmm3,(%rax)
movsd  (%r15),%xmm3
ucomisd %xmm1,%xmm3
mov    %r15,%rax
jne    1700 <path+0x600>
jp     1700 <path+0x600>
mov    %r9,%rax
or     $0x1,%rax
mov    -0x70(%rsp),%rdx
lea    (%rdx,%rax,8),%rax
movsd  0x8(%r8),%xmm3
jmp    1700 <path+0x600>
lea    (%r12,%r9,8),%rax
subsd  %xmm2,%xmm3
movsd  %xmm3,(%rax)
jmp    1502 <path+0x402>
cs nopw 0x0(%rax,%rax,1)
nop
mov    -0x30(%rsp),%rdx
mov    (%rdx,%rbp,4),%edi
test   %edi,%edi
js     1835 <path+0x735>
mov    %esi,%eax
mov    -0x48(%rsp),%r13
mov    %edi,(%r10,%r13,4)
mov    -0x78(%rsp),%rsi
mov    -0x4(%rbx,%rsi,4),%edx
mov    %edx,(%rbx,%rax,4)
cmp    $0x1,%rsi
mov    -0x68(%rsp),%rbp
mov    0x38(%rsp),%r11
mov    -0x8(%rsp),%r14
jle    1490 <path+0x390>
mov    (%r10,%r13,4),%r9d
movslq %r9d,%rdi
mov    %r9d,%esi
imul   %r15d,%esi
xor    %ebx,%ebx
jmp    17fd <path+0x6fd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rbx
cmp    %rbx,%r14
je     1490 <path+0x390>
mov    0x50(%rsp),%rax
movslq (%rax,%rbx,4),%rax
movslq %esi,%rdx
add    %rax,%rdx
movsd  0x0(%rbp,%rdx,8),%xmm2
subsd  (%rcx,%rdi,8),%xmm2
subsd  (%r8,%rax,8),%xmm2
movsd  (%r12,%rax,8),%xmm3
ucomisd %xmm2,%xmm3
jbe    17f0 <path+0x6f0>
movsd  %xmm2,(%r12,%rax,8)
mov    %r9d,(%r11,%rax,4)
jmp    17f0 <path+0x6f0>
mov    0x60(%rsp),%rcx
mov    %eax,(%rcx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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