int _glp_mc13d(int n, const int icn[], const int ip[], const int lenr[],
               int ior[], int ib[], int lowl[], int numb[], int prev[]) {
  int *arp = ior;
  int dummy, i, i1, i2, icnt, ii, isn, ist, ist1, iv, iw, j, lcnt, nnm1, num,
      stp;
  icnt = 0;
  num = 0;
  nnm1 = n + n - 1;
  for (j = 1; j <= n; j++) {
    numb[j] = 0;
    arp[j] = lenr[j] - 1;
  }
  for (isn = 1; isn <= n; isn++) {
    if (numb[isn] != 0)
      continue;
    iv = isn;
    ist = 1;
    lowl[iv] = numb[iv] = 1;
    ib[n] = iv;
    for (dummy = 1; dummy <= nnm1; dummy++) {
      i1 = arp[iv];
      if (i1 >= 0) {
        i2 = ip[iv] + lenr[iv] - 1;
        i1 = i2 - i1;
        for (ii = i1; ii <= i2; ii++) {
          iw = icn[ii];
          if (numb[iw] == 0)
            goto L70;
          if (lowl[iw] < lowl[iv])
            lowl[iv] = lowl[iw];
        }
        arp[iv] = -1;
      }
      if (lowl[iv] < numb[iv])
        goto L60;
      num++;
      ist1 = n + 1 - ist;
      lcnt = icnt + 1;
      for (stp = ist1; stp <= n; stp++) {
        iw = ib[stp];
        lowl[iw] = n + 1;
        numb[iw] = ++icnt;
        if (iw == iv)
          break;
      }
      ist = n - stp;
      ib[num] = lcnt;
      if (ist != 0)
        goto L60;
      if (icnt < n)
        break;
      goto L100;
    L60:
      iw = iv;
      iv = prev[iv];
      if (lowl[iw] < lowl[iv])
        lowl[iv] = lowl[iw];
      continue;
    L70:
      arp[iv] = i2 - ii - 1;
      prev[iw] = iv;
      iv = iw;
      lowl[iv] = numb[iv] = ++ist;
      ib[n + 1 - ist] = iv;
    }
  }
L100:
  for (i = 1; i <= n; i++)
    arp[numb[i]] = i;
  return num;
}


x86 assembly (clang, -O0):
<_glp_mc13d>:
push   %rbp
mov    %rsp,%rbp
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)
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x74(%rbp)
mov    -0x4(%rbp),%eax
add    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x70(%rbp)
movl   $0x1,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1192 <_glp_mc13d+0x92>
mov    0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sub    $0x1,%edx
mov    -0x38(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1150 <_glp_mc13d+0x50>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     147d <_glp_mc13d+0x37d>
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11bc <_glp_mc13d+0xbc>
jmp    146f <_glp_mc13d+0x36f>
mov    -0x54(%rbp),%eax
mov    %eax,-0x60(%rbp)
movl   $0x1,-0x58(%rbp)
mov    0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x60(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x30(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movl   $0x1,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x70(%rbp),%eax
jg     146a <_glp_mc13d+0x36a>
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
jl     12d0 <_glp_mc13d+0x1d0>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
movslq -0x60(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
sub    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     12c1 <_glp_mc13d+0x1c1>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x64(%rbp)
mov    0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    127c <_glp_mc13d+0x17c>
jmp    13ff <_glp_mc13d+0x2ff>
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x10(%rbp),%rcx
movslq -0x60(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    12ae <_glp_mc13d+0x1ae>
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x10(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    12b3 <_glp_mc13d+0x1b3>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    124b <_glp_mc13d+0x14b>
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x18(%rbp),%rcx
movslq -0x60(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    12f1 <_glp_mc13d+0x1f1>
jmp    13b4 <_glp_mc13d+0x2b4>
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
sub    -0x58(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1378 <_glp_mc13d+0x278>
mov    -0x30(%rbp),%rax
movslq -0x78(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x64(%rbp)
mov    -0x4(%rbp),%edx
add    $0x1,%edx
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4c(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x4c(%rbp)
mov    0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x64(%rbp),%eax
cmp    -0x60(%rbp),%eax
jne    1365 <_glp_mc13d+0x265>
jmp    1378 <_glp_mc13d+0x278>
jmp    136a <_glp_mc13d+0x26a>
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1315 <_glp_mc13d+0x215>
mov    -0x4(%rbp),%eax
sub    -0x78(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x6c(%rbp),%edx
mov    -0x30(%rbp),%rax
movslq -0x74(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
cmpl   $0x0,-0x58(%rbp)
je     139e <_glp_mc13d+0x29e>
jmp    13b4 <_glp_mc13d+0x2b4>
mov    -0x4c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13af <_glp_mc13d+0x2af>
jmp    146a <_glp_mc13d+0x36a>
jmp    1482 <_glp_mc13d+0x382>
mov    -0x60(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    0x20(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x60(%rbp)
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x10(%rbp),%rcx
movslq -0x60(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    13fa <_glp_mc13d+0x2fa>
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x10(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    145c <_glp_mc13d+0x35c>
mov    -0x48(%rbp),%edx
sub    -0x50(%rbp),%edx
sub    $0x1,%edx
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    0x20(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x64(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x58(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x58(%rbp)
mov    0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x60(%rbp),%edx
mov    -0x30(%rbp),%rax
mov    -0x4(%rbp),%ecx
add    $0x1,%ecx
sub    -0x58(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11fc <_glp_mc13d+0xfc>
jmp    146f <_glp_mc13d+0x36f>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1199 <_glp_mc13d+0x99>
jmp    1482 <_glp_mc13d+0x382>
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     14b9 <_glp_mc13d+0x3b9>
mov    -0x40(%rbp),%edx
mov    -0x38(%rbp),%rax
mov    0x18(%rbp),%rcx
movslq -0x40(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1489 <_glp_mc13d+0x389>
mov    -0x74(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<_glp_mc13d>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,-0x8(%rsp)
mov    %rsi,-0x10(%rsp)
xor    %r13d,%r13d
test   %edi,%edi
jle    15c2 <_glp_mc13d+0x4c2>
mov    0x40(%rsp),%r10
mov    %edi,%r12d
lea    0x1(%r12),%rbp
mov    $0x1,%esi
cmp    $0x8,%edi
mov    %rdi,-0x50(%rsp)
mov    %rcx,-0x48(%rsp)
jae    11a5 <_glp_mc13d+0xa5>
mov    %rsi,%rax
not    %rax
test   $0x1,%bpl
jne    1162 <_glp_mc13d+0x62>
movl   $0x0,(%r10,%rsi,4)
mov    (%rcx,%rsi,4),%edx
add    $0xffffffff,%edx
mov    %edx,(%r8,%rsi,4)
add    $0x1,%rsi
add    %rbp,%rax
je     12f0 <_glp_mc13d+0x1f0>
nopl   0x0(%rax,%rax,1)
movl   $0x0,(%r10,%rsi,4)
mov    (%rcx,%rsi,4),%eax
add    $0xffffffff,%eax
mov    %eax,(%r8,%rsi,4)
movl   $0x0,0x4(%r10,%rsi,4)
mov    0x4(%rcx,%rsi,4),%eax
add    $0xffffffff,%eax
mov    %eax,0x4(%r8,%rsi,4)
add    $0x2,%rsi
cmp    %rsi,%rbp
jne    1170 <_glp_mc13d+0x70>
jmp    12f0 <_glp_mc13d+0x1f0>
lea    0x4(%r10),%rax
lea    (%r10,%rbp,4),%r10
lea    0x4(%r8),%rdi
lea    (%r8,%rbp,4),%r15
lea    0x4(%rcx),%rbx
lea    (%rcx,%rbp,4),%rdx
cmp    %r15,%rax
setb   %r11b
cmp    %r10,%rdi
setb   %r14b
cmp    %rdx,%rax
setb   %al
cmp    %r10,%rbx
setb   %r10b
cmp    %rdx,%rdi
setb   %cl
cmp    %r15,%rbx
setb   %bl
test   %r14b,%r11b
jne    15d0 <_glp_mc13d+0x4d0>
and    %r10b,%al
jne    15d0 <_glp_mc13d+0x4d0>
and    %bl,%cl
mov    0x40(%rsp),%r10
mov    -0x48(%rsp),%rcx
mov    -0x50(%rsp),%rdi
jne    1140 <_glp_mc13d+0x40>
mov    %r12d,%esi
and    $0xfffffff8,%esi
lea    -0x8(%rsi),%rax
mov    %rax,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
test   %rax,%rax
je     15ed <_glp_mc13d+0x4ed>
mov    %rdi,%rax
and    $0xfffffffffffffffe,%rax
mov    $0x1,%edx
pxor   %xmm0,%xmm0
pcmpeqd %xmm1,%xmm1
nop
movdqu %xmm0,(%r10,%rdx,4)
movdqu %xmm0,0x10(%r10,%rdx,4)
movdqu (%rcx,%rdx,4),%xmm2
movdqu 0x10(%rcx,%rdx,4),%xmm3
paddd  %xmm1,%xmm2
paddd  %xmm1,%xmm3
movdqu %xmm2,(%r8,%rdx,4)
movdqu %xmm3,0x10(%r8,%rdx,4)
movdqu %xmm0,0x20(%r10,%rdx,4)
movdqu %xmm0,0x30(%r10,%rdx,4)
movdqu 0x20(%rcx,%rdx,4),%xmm2
movdqu 0x30(%rcx,%rdx,4),%xmm3
paddd  %xmm1,%xmm2
paddd  %xmm1,%xmm3
movdqu %xmm2,0x20(%r8,%rdx,4)
movdqu %xmm3,0x30(%r8,%rdx,4)
add    $0x10,%rdx
add    $0xfffffffffffffffe,%rax
jne    1240 <_glp_mc13d+0x140>
test   $0x1,%dil
je     12e2 <_glp_mc13d+0x1e2>
pxor   %xmm0,%xmm0
movdqu %xmm0,(%r10,%rdx,4)
movdqu %xmm0,0x10(%r10,%rdx,4)
movdqu (%rcx,%rdx,4),%xmm0
movdqu 0x10(%rcx,%rdx,4),%xmm1
pcmpeqd %xmm2,%xmm2
paddd  %xmm2,%xmm0
paddd  %xmm2,%xmm1
movdqu %xmm0,(%r8,%rdx,4)
movdqu %xmm1,0x10(%r8,%rdx,4)
cmp    %rsi,%r12
mov    -0x50(%rsp),%rdi
jne    15e4 <_glp_mc13d+0x4e4>
test   %edi,%edi
jle    15c2 <_glp_mc13d+0x4c2>
mov    %rbp,-0x18(%rsp)
mov    0x38(%rsp),%rbx
lea    (%rdi,%rdi,1),%eax
cmp    $0x3,%eax
mov    $0x2,%ecx
cmovge %eax,%ecx
mov    %ecx,-0x24(%rsp)
lea    0x1(%rdi),%ebp
xor    %r13d,%r13d
mov    $0x1,%eax
mov    %rax,-0x30(%rsp)
xor    %r14d,%r14d
mov    %r12,-0x38(%rsp)
mov    %r9,-0x40(%rsp)
jmp    1357 <_glp_mc13d+0x257>
cmp    -0x50(%rsp),%r14d
jge    1538 <_glp_mc13d+0x438>
xchg   %ax,%ax
mov    -0x30(%rsp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rsp)
cmp    %rbp,%rax
je     1538 <_glp_mc13d+0x438>
mov    -0x30(%rsp),%rax
cmpl   $0x0,(%r10,%rax,4)
jne    1340 <_glp_mc13d+0x240>
movl   $0x1,(%r10,%rax,4)
movl   $0x1,(%rbx,%rax,4)
mov    %eax,(%r9,%r12,4)
mov    $0x1,%r15d
mov    %eax,%ecx
mov    $0x1,%edi
jmp    13e1 <_glp_mc13d+0x2e1>
not    %eax
add    %r12d,%eax
mov    %r10,%r8
mov    %eax,(%r10,%rsi,4)
mov    0x48(%rsp),%rax
mov    %ecx,(%rax,%r11,4)
mov    -0x50(%rsp),%rax
sub    %edi,%eax
lea    0x1(%rdi),%ecx
mov    0x40(%rsp),%r10
mov    %ecx,(%r10,%r11,4)
mov    %ecx,(%rbx,%r11,4)
cltq
mov    -0x40(%rsp),%r9
mov    %r11d,(%r9,%rax,4)
mov    %ecx,%edi
mov    -0x20(%rsp),%r13
mov    -0x38(%rsp),%r12
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15d
mov    %edx,%ecx
cmp    -0x24(%rsp),%r15d
je     1340 <_glp_mc13d+0x240>
movslq %ecx,%rsi
mov    (%r8,%rsi,4),%r12d
test   %r12d,%r12d
js     1475 <_glp_mc13d+0x375>
mov    %r13,-0x20(%rsp)
mov    %r8,%r10
mov    -0x48(%rsp),%rax
mov    (%rax,%rsi,4),%edx
mov    -0x8(%rsp),%rax
add    (%rax,%rsi,4),%edx
mov    %r12d,%eax
not    %eax
add    %edx,%eax
cmp    %eax,%edx
jle    1460 <_glp_mc13d+0x360>
cltq
mov    -0x10(%rsp),%rdx
lea    (%rdx,%rax,4),%r13
lea    0x1(%r12),%r8d
xor    %eax,%eax
jmp    1439 <_glp_mc13d+0x339>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    %eax,%r8d
je     1460 <_glp_mc13d+0x360>
mov    0x0(%r13,%rax,4),%edx
movslq %edx,%r11
mov    0x40(%rsp),%r9
cmpl   $0x0,(%r9,%r11,4)
je     1385 <_glp_mc13d+0x285>
mov    (%rbx,%r11,4),%edx
cmp    (%rbx,%rsi,4),%edx
jge    1430 <_glp_mc13d+0x330>
mov    %edx,(%rbx,%rsi,4)
jmp    1430 <_glp_mc13d+0x330>
nop
mov    %r10,%r8
movl   $0xffffffff,(%r10,%rsi,4)
ff
mov    -0x20(%rsp),%r13
mov    0x40(%rsp),%r10
mov    (%rbx,%rsi,4),%eax
cmp    (%r10,%rsi,4),%eax
jge    1490 <_glp_mc13d+0x390>
mov    -0x38(%rsp),%r12
mov    -0x40(%rsp),%r9
jmp    151c <_glp_mc13d+0x41c>
nopl   (%rax)
add    $0x1,%r13d
mov    %ebp,%edx
sub    %edi,%edx
lea    0x1(%r14),%r11d
mov    -0x50(%rsp),%rdi
cmp    %edi,%edx
jle    14c0 <_glp_mc13d+0x3c0>
mov    -0x38(%rsp),%r12
mov    -0x40(%rsp),%r9
jmp    150a <_glp_mc13d+0x40a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movslq %edx,%rdi
add    $0xffffffffffffffff,%rdi
mov    %r11d,%eax
mov    -0x38(%rsp),%r12
mov    -0x40(%rsp),%r9
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %eax,%r14d
movslq 0x4(%r9,%rdi,4),%rax
mov    %ebp,(%rbx,%rax,4)
mov    %r14d,(%r10,%rax,4)
cmp    %ecx,%eax
je     1505 <_glp_mc13d+0x405>
add    $0x1,%edx
add    $0x1,%rdi
lea    0x1(%r14),%eax
cmp    %r12,%rdi
jl     14e0 <_glp_mc13d+0x3e0>
mov    %ebp,%edx
mov    -0x50(%rsp),%rdi
movslq %r13d,%rax
mov    %r11d,(%r9,%rax,4)
sub    %edx,%edi
je     1333 <_glp_mc13d+0x233>
mov    (%rbx,%rsi,4),%eax
mov    0x48(%rsp),%rcx
mov    (%rcx,%rsi,4),%edx
movslq %edx,%rcx
cmp    (%rbx,%rcx,4),%eax
jge    13d0 <_glp_mc13d+0x2d0>
mov    %eax,(%rbx,%rcx,4)
jmp    13d0 <_glp_mc13d+0x2d0>
cmpl   $0x0,-0x50(%rsp)
jle    15c2 <_glp_mc13d+0x4c2>
mov    -0x18(%rsp),%rax
add    $0xfffffffffffffffe,%rax
mov    %r12d,%ecx
and    $0x3,%ecx
mov    $0x1,%edx
cmp    $0x3,%rax
jb     15a9 <_glp_mc13d+0x4a9>
and    $0xfffffffc,%r12d
mov    $0x1,%edx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movslq (%r10,%rdx,4),%rsi
mov    %edx,(%r8,%rsi,4)
lea    0x1(%rdx),%esi
movslq 0x4(%r10,%rdx,4),%rdi
mov    %esi,(%r8,%rdi,4)
lea    0x2(%rdx),%esi
movslq 0x8(%r10,%rdx,4),%rdi
mov    %esi,(%r8,%rdi,4)
lea    0x3(%rdx),%esi
movslq 0xc(%r10,%rdx,4),%rdi
mov    %esi,(%r8,%rdi,4)
add    $0x4,%rdx
add    $0x4,%rax
cmp    %r12,%rax
jne    1570 <_glp_mc13d+0x470>
test   %rcx,%rcx
je     15c2 <_glp_mc13d+0x4c2>
xchg   %ax,%ax
movslq (%r10,%rdx,4),%rax
mov    %edx,(%r8,%rax,4)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rcx
jne    15b0 <_glp_mc13d+0x4b0>
mov    %r13d,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x40(%rsp),%r10
mov    -0x48(%rsp),%rcx
mov    -0x50(%rsp),%rdi
jmp    1140 <_glp_mc13d+0x40>
or     $0x1,%rsi
jmp    1140 <_glp_mc13d+0x40>
mov    $0x1,%edx
test   $0x1,%dil
jne    12ad <_glp_mc13d+0x1ad>
jmp    12e2 <_glp_mc13d+0x1e2>

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

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