search(k, gamma, ap, ac, aklass, as, anewrank, atruth) int *gamma;
int *ac, *ap, *aklass, *as, *anewrank, *atruth, k;
{
  int q, oldp, oldq, nexte, dl, t, i;
  int c, p, klass, newrank, truth;
  p = *ap;
  klass = *aklass;
  truth = *atruth;
  newrank = *anewrank;
  oldp = p;
  q = 0;
  if (klass) {
    while (*(gamma + q + 1) != *(gamma + p + 1)) {
      if (*(gamma + q + 1) > *(gamma + p + 1)) {
        if (*(gamma + q + 2) == -1) {
          *(gamma + q + 2) = p;
          *(gamma + p + 2) = -1;
          *(gamma + p) = newrank;
          c = newrank;
          newrank++;
          klass++;
          *(gamma + p + 3) = q;
          *(gamma + p + 4) = -1;
          truth = 1;
          p = oldp + *(gamma + oldp + 1) * 3 + 5;
          goto IR1;
        } else {
          if (*(gamma + p + 1) > *(gamma + *(gamma + q + 2) + 1)) {
            *(gamma + p + 2) = *(gamma + q + 2);
            *(gamma + p + 3) = q;
            *(gamma + q + 2) = p;
            *(gamma + p + 4) = -1;
            *(gamma + p) = newrank;
            c = newrank;
            newrank++;
            klass++;
            truth = 1;
            p = p + *(gamma + p + 1) * 3 + 5;
            goto IR1;
          } else
            q = *(gamma + q + 2);
        }
      } else {
        if (*(gamma + q + 3) == -1) {
          *(gamma + q + 3) = p;
          *(gamma + p + 3) = -1;
          *(gamma + p) = newrank;
          c = newrank;
          newrank++;
          klass++;
          *(gamma + p + 2) = q;
          *(gamma + p + 4) = -1;
          truth = 1;
          p = oldp + *(gamma + oldp + 1) * 3 + 5;
          goto IR1;
        } else {
          if (*(gamma + p + 1) < *(gamma + *(gamma + q + 3) + 1)) {
            *(gamma + p + 3) = *(gamma + q + 3);
            *(gamma + p + 2) = q;
            *(gamma + q + 3) = p;
            *(gamma + p + 4) = -1;
            *(gamma + p) = newrank;
            c = newrank;
            newrank++;
            klass++;
            truth = 1;
            p = p + *(gamma + p + 1) * 3 + 5;
            goto IR1;
          } else
            q = *(gamma + q + 3);
        }
      }
    }
    do {
      oldq = q;
      dl = *(gamma + q + 1);
      nexte = *(gamma + q + 4);
      q += 5;
      p += 5;
      for (t = 1; t < dl * 3; t++, q++, p++) {
        if (*(gamma + q) != *(gamma + p))
          break;
      }
      if (t == dl * 3) {
        c = *(gamma + oldq);
        p = oldp;
        break;
      }
      if (nexte == -1) {
        klass++;
        *(gamma + oldp) = newrank;
        c = newrank;
        *(gamma + oldp + 4) = -1;
        *(gamma + oldq + 4) = oldp;
        *(gamma + oldp + 2) = *(gamma + oldq + 2);
        *(gamma + oldp + 3) = *(gamma + oldq + 3);
        newrank++;
        truth = 1;
        p = oldp + *(gamma + oldp + 1) * 3 + 5;
        break;
      }
      q = nexte;
      p = oldp;
    } while (q != -1);
  } else {
    klass++;
    *(gamma + p + 4) = -1;
    *(gamma + p + 3) = -1;
    *(gamma + p + 2) = -1;
    *(gamma + p) = k;
    p += *(gamma + p + 1) * 3 + 5;
    c = k;
  }
IR1:
  *ac = c;
  *ap = p;
  *anewrank = newrank;
  *atruth = truth;
  *aklass = klass;
}


x86 assembly (clang, -O0):
<search>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x54(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x58(%rbp)
mov    0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x60(%rbp)
mov    0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x0,-0x58(%rbp)
je     15f7 <search+0x4f7>
jmp    1163 <search+0x63>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
cmp    0x4(%rcx,%rdx,4),%eax
je     147a <search+0x37a>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jle    130a <search+0x20a>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0xffffffff,0x8(%rax,%rcx,4)
jne    123a <search+0x13a>
mov    -0x54(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x8(%rax,%rcx,4)
ff
mov    -0x5c(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x34(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
movl   $0x1,-0x60(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x38(%rbp),%rdx
imul   $0x3,0x4(%rcx,%rdx,4),%ecx
add    %ecx,%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
jmp    165f <search+0x55f>
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x10(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movslq 0x8(%rdx,%rsi,4),%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jle    12f1 <search+0x1f1>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x8(%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x34(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x54(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
mov    -0x5c(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x1,-0x60(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
imul   $0x3,0x4(%rcx,%rdx,4),%ecx
add    %ecx,%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
jmp    165f <search+0x55f>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x8(%rax,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
jmp    1305 <search+0x205>
jmp    1475 <search+0x375>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0xffffffff,0xc(%rax,%rcx,4)
jne    13a5 <search+0x2a5>
mov    -0x54(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0xc(%rax,%rcx,4)
ff
mov    -0x5c(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x34(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
movl   $0x1,-0x60(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x38(%rbp),%rdx
imul   $0x3,0x4(%rcx,%rdx,4),%ecx
add    %ecx,%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
jmp    165f <search+0x55f>
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x10(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movslq 0xc(%rdx,%rsi,4),%rdx
cmp    0x4(%rcx,%rdx,4),%eax
jge    145c <search+0x35c>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0xc(%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x34(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x54(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
mov    -0x5c(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
movl   $0x1,-0x60(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
imul   $0x3,0x4(%rcx,%rdx,4),%ecx
add    %ecx,%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
jmp    165f <search+0x55f>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0xc(%rax,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
jmp    1470 <search+0x370>
jmp    1475 <search+0x375>
jmp    1163 <search+0x63>
jmp    147f <search+0x37f>
mov    -0x34(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    0x10(%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x34(%rbp)
mov    -0x54(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   $0x3,-0x44(%rbp),%ecx
cmp    %ecx,%eax
jge    1511 <search+0x411>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     14ec <search+0x3ec>
jmp    1511 <search+0x411>
jmp    14f1 <search+0x3f1>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    14bc <search+0x3bc>
mov    -0x48(%rbp),%eax
imul   $0x3,-0x44(%rbp),%ecx
cmp    %ecx,%eax
jne    1539 <search+0x439>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    15f2 <search+0x4f2>
cmpl   $0xffffffff,-0x40(%rbp)
jne    15dc <search+0x4dc>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x5c(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
mov    -0x38(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %edx,0x10(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    0x8(%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,0x8(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    0xc(%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,0xc(%rax,%rcx,4)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
movl   $0x1,-0x60(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x38(%rbp),%rdx
imul   $0x3,0x4(%rcx,%rdx,4),%ecx
add    %ecx,%eax
add    $0x5,%eax
mov    %eax,-0x54(%rbp)
jmp    15f2 <search+0x4f2>
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x54(%rbp)
cmpl   $0xffffffff,-0x34(%rbp)
jne    147f <search+0x37f>
jmp    165a <search+0x55a>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x10(%rax,%rcx,4)
ff
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0xc(%rax,%rcx,4)
ff
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
movl   $0xffffffff,0x8(%rax,%rcx,4)
ff
mov    -0x8(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
imul   $0x3,0x4(%rax,%rcx,4),%eax
add    $0x5,%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x50(%rbp)
jmp    165f <search+0x55f>
mov    -0x50(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x54(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x5c(%rbp),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x60(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x58(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<search>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x40(%rsp),%r14
mov    0x38(%rsp),%r15
movslq (%rdx),%r13
mov    (%r8),%r11d
mov    (%r14),%r12d
mov    (%r15),%ebp
lea    (%rsi,%r13,4),%r10
test   %r11d,%r11d
je     1228 <search+0x128>
mov    %rbp,-0x18(%rsp)
mov    0x4(%r10),%eax
mov    0x4(%rsi),%ebp
xor    %edi,%edi
cmp    %eax,%ebp
jne    1254 <search+0x154>
mov    %rcx,-0x8(%rsp)
lea    0x5(%r13),%eax
mov    %eax,-0xc(%rsp)
cltq
lea    (%rsi,%rax,4),%rbp
movslq %edi,%rax
mov    0x4(%rsi,%rax,4),%ecx
mov    0x10(%rsi,%rax,4),%r9d
lea    (%rcx,%rcx,2),%ebx
mov    $0x1,%r15d
cmp    $0x2,%ebx
jl     11a4 <search+0xa4>
add    $0x5,%edi
movslq %edi,%rcx
lea    (%rsi,%rcx,4),%rdi
lea    -0x1(%rbx),%ecx
xor    %r15d,%r15d
mov    (%rdi,%r15,4),%r14d
cmp    0x0(%rbp,%r15,4),%r14d
jne    11a0 <search+0xa0>
add    $0x1,%r15
cmp    %r15d,%ecx
jne    1180 <search+0x80>
jmp    120c <search+0x10c>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r15d
cmp    %ebx,%r15d
je     120c <search+0x10c>
mov    %r9d,%edi
cmp    $0xffffffff,%r9d
jne    1156 <search+0x56>
add    $0x1,%r11d
mov    -0x18(%rsp),%rbp
mov    %ebp,(%r10)
movl   $0xffffffff,0x10(%r10)
ff
mov    %r13d,0x10(%rsi,%rax,4)
mov    0x8(%rsi,%rax,4),%ecx
mov    %ecx,0x8(%r10)
mov    0xc(%rsi,%rax,4),%eax
mov    %eax,0xc(%r10)
mov    %ebp,%edi
lea    0x1(%rbp),%eax
mov    0x4(%r10),%ecx
lea    (%rcx,%rcx,2),%ecx
mov    -0xc(%rsp),%esi
add    %ecx,%esi
mov    $0x1,%r12d
mov    %esi,%r13d
mov    %eax,%ebp
mov    -0x8(%rsp),%rcx
mov    0x40(%rsp),%r14
mov    0x38(%rsp),%r15
jmp    1339 <search+0x239>
mov    (%rsi,%rax,4),%edi
mov    -0x8(%rsp),%rcx
mov    0x40(%rsp),%r14
mov    0x38(%rsp),%r15
mov    -0x18(%rsp),%rbp
jmp    1339 <search+0x239>
movl   $0xffffffff,0x10(%r10)
ff
movq   $0xffffffffffffffff,0x8(%r10)
ff
mov    %edi,(%r10)
mov    0x4(%r10),%eax
lea    (%rax,%rax,2),%eax
add    %eax,%r13d
add    $0x5,%r13d
mov    $0x1,%r11d
jmp    1339 <search+0x239>
xor    %r9d,%r9d
mov    %rsi,%rbx
jmp    126f <search+0x16f>
nopl   0x0(%rax)
lea    (%rsi,%rdi,4),%rbx
mov    %edi,%r9d
cmp    %eax,%ebp
je     1143 <search+0x43>
cmp    %eax,%ebp
jle    1290 <search+0x190>
movslq 0x8(%rbx),%rdi
cmp    $0xffffffffffffffff,%rdi
je     12b0 <search+0x1b0>
mov    0x4(%rsi,%rdi,4),%ebp
cmp    %ebp,%eax
jle    1260 <search+0x160>
jmp    12fe <search+0x1fe>
nopw   0x0(%rax,%rax,1)
movslq 0xc(%rbx),%rdi
cmp    $0xffffffffffffffff,%rdi
je     12db <search+0x1db>
mov    0x4(%rsi,%rdi,4),%ebp
cmp    %ebp,%eax
jge    1260 <search+0x160>
mov    %edi,0xc(%r10)
mov    %r9d,0x8(%r10)
mov    %r13d,0xc(%rbx)
jmp    130a <search+0x20a>
mov    %r13d,0x8(%rbx)
movl   $0xffffffff,0x8(%r10)
ff
mov    -0x18(%rsp),%rax
mov    %eax,(%r10)
mov    %eax,%edi
add    $0x1,%eax
add    $0x1,%r11d
mov    %r9d,0xc(%r10)
movl   $0xffffffff,0x10(%r10)
ff
jmp    1323 <search+0x223>
mov    %r13d,0xc(%rbx)
movq   $0xffffffffffffffff,0xc(%r10)
ff
mov    -0x18(%rsp),%rax
mov    %eax,(%r10)
mov    %eax,%edi
add    $0x1,%eax
add    $0x1,%r11d
mov    %r9d,0x8(%r10)
jmp    1323 <search+0x223>
mov    %edi,0x8(%r10)
mov    %r9d,0xc(%r10)
mov    %r13d,0x8(%rbx)
movl   $0xffffffff,0x10(%r10)
ff
mov    -0x18(%rsp),%rax
mov    %eax,(%r10)
mov    %eax,%edi
add    $0x1,%eax
add    $0x1,%r11d
mov    0x4(%r10),%esi
lea    (%rsi,%rsi,2),%esi
add    %esi,%r13d
add    $0x5,%r13d
mov    $0x1,%r12d
mov    %eax,%ebp
mov    %edi,(%rcx)
mov    %r13d,(%rdx)
mov    %ebp,(%r15)
mov    %r12d,(%r14)
mov    %r11d,(%r8)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @search(i32 %0, i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7) {
%9 = alloca i32
%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
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
%30 = load i32*, i32** %12
%31 = load i32, i32* %30
store i32 %31, i32* %26
%32 = load i32*, i32** %14
%33 = load i32, i32* %32
store i32 %33, i32* %27
%34 = load i32*, i32** %17
%35 = load i32, i32* %34
store i32 %35, i32* %29
%36 = load i32*, i32** %16
%37 = load i32, i32* %36
store i32 %37, i32* %28
%38 = load i32, i32* %26
store i32 %38, i32* %19
store i32 0, i32* %18
%39 = load i32, i32* %27
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %448
41: ; preds = %8
br label %42
42: ; preds = %326, %41
%43 = load i32*, i32** %11
%44 = load i32, i32* %18
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i32, i32* %43, i64 %45
%47 = getelementptr inbounds i32, i32* %46, i64 1
%48 = load i32, i32* %47
%49 = load i32*, i32** %11
%50 = load i32, i32* %26
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %49, i64 %51
%53 = getelementptr inbounds i32, i32* %52, i64 1
%54 = load i32, i32* %53
%55 = icmp ne i32 %48, %54
br i1 %55, label %56, label %327
56: ; preds = %42
%57 = load i32*, i32** %11
%58 = load i32, i32* %18
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i32, i32* %57, i64 %59
%61 = getelementptr inbounds i32, i32* %60, i64 1
%62 = load i32, i32* %61
%63 = load i32*, i32** %11
%64 = load i32, i32* %26
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %63, i64 %65
%67 = getelementptr inbounds i32, i32* %66, i64 1
%68 = load i32, i32* %67
%69 = icmp sgt i32 %62, %68
br i1 %69, label %70, label %198
70: ; preds = %56
%71 = load i32*, i32** %11
%72 = load i32, i32* %18
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
%75 = getelementptr inbounds i32, i32* %74, i64 2
%76 = load i32, i32* %75
%77 = icmp eq i32 %76, -1
br i1 %77, label %78, label %121
78: ; preds = %70
%79 = load i32, i32* %26
%80 = load i32*, i32** %11
%81 = load i32, i32* %18
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i32, i32* %80, i64 %82
%84 = getelementptr inbounds i32, i32* %83, i64 2
store i32 %79, i32* %84
%85 = load i32*, i32** %11
%86 = load i32, i32* %26
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i32, i32* %85, i64 %87
%89 = getelementptr inbounds i32, i32* %88, i64 2
store i32 -1, i32* %89
%90 = load i32, i32* %28
%91 = load i32*, i32** %11
%92 = load i32, i32* %26
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i32, i32* %91, i64 %93
store i32 %90, i32* %94
%95 = load i32, i32* %28
store i32 %95, i32* %25
%96 = load i32, i32* %28
%97 = add nsw i32 %96, 1
store i32 %97, i32* %28
%98 = load i32, i32* %27
%99 = add nsw i32 %98, 1
store i32 %99, i32* %27
%100 = load i32, i32* %18
%101 = load i32*, i32** %11
%102 = load i32, i32* %26
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i32, i32* %101, i64 %103
%105 = getelementptr inbounds i32, i32* %104, i64 3
store i32 %100, i32* %105
%106 = load i32*, i32** %11
%107 = load i32, i32* %26
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i32, i32* %106, i64 %108
%110 = getelementptr inbounds i32, i32* %109, i64 4
store i32 -1, i32* %110
store i32 1, i32* %29
%111 = load i32, i32* %19
%112 = load i32*, i32** %11
%113 = load i32, i32* %19
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i32, i32* %112, i64 %114
%116 = getelementptr inbounds i32, i32* %115, i64 1
%117 = load i32, i32* %116
%118 = mul nsw i32 %117, 3
%119 = add nsw i32 %111, %118
%120 = add nsw i32 %119, 5
store i32 %120, i32* %26
br label %483
121: ; preds = %70
%122 = load i32*, i32** %11
%123 = load i32, i32* %26
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds i32, i32* %122, i64 %124
%126 = getelementptr inbounds i32, i32* %125, i64 1
%127 = load i32, i32* %126
%128 = load i32*, i32** %11
%129 = load i32*, i32** %11
%130 = load i32, i32* %18
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i32, i32* %129, i64 %131
%133 = getelementptr inbounds i32, i32* %132, i64 2
%134 = load i32, i32* %133
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds i32, i32* %128, i64 %135
%137 = getelementptr inbounds i32, i32* %136, i64 1
%138 = load i32, i32* %137
%139 = icmp sgt i32 %127, %138
br i1 %139, label %140, label %189
140: ; preds = %121
%141 = load i32*, i32** %11
%142 = load i32, i32* %18
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i32, i32* %141, i64 %143
%145 = getelementptr inbounds i32, i32* %144, i64 2
%146 = load i32, i32* %145
%147 = load i32*, i32** %11
%148 = load i32, i32* %26
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i32, i32* %147, i64 %149
%151 = getelementptr inbounds i32, i32* %150, i64 2
store i32 %146, i32* %151
%152 = load i32, i32* %18
%153 = load i32*, i32** %11
%154 = load i32, i32* %26
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds i32, i32* %153, i64 %155
%157 = getelementptr inbounds i32, i32* %156, i64 3
store i32 %152, i32* %157
%158 = load i32, i32* %26
%159 = load i32*, i32** %11
%160 = load i32, i32* %18
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds i32, i32* %159, i64 %161
%163 = getelementptr inbounds i32, i32* %162, i64 2
store i32 %158, i32* %163
%164 = load i32*, i32** %11
%165 = load i32, i32* %26
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i32, i32* %164, i64 %166
%168 = getelementptr inbounds i32, i32* %167, i64 4
store i32 -1, i32* %168
%169 = load i32, i32* %28
%170 = load i32*, i32** %11
%171 = load i32, i32* %26
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i32, i32* %170, i64 %172
store i32 %169, i32* %173
%174 = load i32, i32* %28
store i32 %174, i32* %25
%175 = load i32, i32* %28
%176 = add nsw i32 %175, 1
store i32 %176, i32* %28
%177 = load i32, i32* %27
%178 = add nsw i32 %177, 1
store i32 %178, i32* %27
store i32 1, i32* %29
%179 = load i32, i32* %26
%180 = load i32*, i32** %11
%181 = load i32, i32* %26
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %180, i64 %182
%184 = getelementptr inbounds i32, i32* %183, i64 1
%185 = load i32, i32* %184
%186 = mul nsw i32 %185, 3
%187 = add nsw i32 %179, %186
%188 = add nsw i32 %187, 5
store i32 %188, i32* %26
br label %483
189: ; preds = %121
%190 = load i32*, i32** %11
%191 = load i32, i32* %18
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds i32, i32* %190, i64 %192
%194 = getelementptr inbounds i32, i32* %193, i64 2
%195 = load i32, i32* %194
store i32 %195, i32* %18
br label %196
196: ; preds = %189
br label %197
197: ; preds = %196
br label %326
198: ; preds = %56
%199 = load i32*, i32** %11
%200 = load i32, i32* %18
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds i32, i32* %199, i64 %201
%203 = getelementptr inbounds i32, i32* %202, i64 3
%204 = load i32, i32* %203
%205 = icmp eq i32 %204, -1
br i1 %205, label %206, label %249
206: ; preds = %198
%207 = load i32, i32* %26
%208 = load i32*, i32** %11
%209 = load i32, i32* %18
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i32, i32* %208, i64 %210
%212 = getelementptr inbounds i32, i32* %211, i64 3
store i32 %207, i32* %212
%213 = load i32*, i32** %11
%214 = load i32, i32* %26
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds i32, i32* %213, i64 %215
%217 = getelementptr inbounds i32, i32* %216, i64 3
store i32 -1, i32* %217
%218 = load i32, i32* %28
%219 = load i32*, i32** %11
%220 = load i32, i32* %26
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds i32, i32* %219, i64 %221
store i32 %218, i32* %222
%223 = load i32, i32* %28
store i32 %223, i32* %25
%224 = load i32, i32* %28
%225 = add nsw i32 %224, 1
store i32 %225, i32* %28
%226 = load i32, i32* %27
%227 = add nsw i32 %226, 1
store i32 %227, i32* %27
%228 = load i32, i32* %18
%229 = load i32*, i32** %11
%230 = load i32, i32* %26
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds i32, i32* %229, i64 %231
%233 = getelementptr inbounds i32, i32* %232, i64 2
store i32 %228, i32* %233
%234 = load i32*, i32** %11
%235 = load i32, i32* %26
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds i32, i32* %234, i64 %236
%238 = getelementptr inbounds i32, i32* %237, i64 4
store i32 -1, i32* %238
store i32 1, i32* %29
%239 = load i32, i32* %19
%240 = load i32*, i32** %11
%241 = load i32, i32* %19
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i32, i32* %240, i64 %242
%244 = getelementptr inbounds i32, i32* %243, i64 1
%245 = load i32, i32* %244
%246 = mul nsw i32 %245, 3
%247 = add nsw i32 %239, %246
%248 = add nsw i32 %247, 5
store i32 %248, i32* %26
br label %483
249: ; preds = %198
%250 = load i32*, i32** %11
%251 = load i32, i32* %26
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds i32, i32* %250, i64 %252
%254 = getelementptr inbounds i32, i32* %253, i64 1
%255 = load i32, i32* %254
%256 = load i32*, i32** %11
%257 = load i32*, i32** %11
%258 = load i32, i32* %18
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds i32, i32* %257, i64 %259
%261 = getelementptr inbounds i32, i32* %260, i64 3
%262 = load i32, i32* %261
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i32, i32* %256, i64 %263
%265 = getelementptr inbounds i32, i32* %264, i64 1
%266 = load i32, i32* %265
%267 = icmp slt i32 %255, %266
br i1 %267, label %268, label %317
268: ; preds = %249
%269 = load i32*, i32** %11
%270 = load i32, i32* %18
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds i32, i32* %269, i64 %271
%273 = getelementptr inbounds i32, i32* %272, i64 3
%274 = load i32, i32* %273
%275 = load i32*, i32** %11
%276 = load i32, i32* %26
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds i32, i32* %275, i64 %277
%279 = getelementptr inbounds i32, i32* %278, i64 3
store i32 %274, i32* %279
%280 = load i32, i32* %18
%281 = load i32*, i32** %11
%282 = load i32, i32* %26
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds i32, i32* %281, i64 %283
%285 = getelementptr inbounds i32, i32* %284, i64 2
store i32 %280, i32* %285
%286 = load i32, i32* %26
%287 = load i32*, i32** %11
%288 = load i32, i32* %18
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds i32, i32* %287, i64 %289
%291 = getelementptr inbounds i32, i32* %290, i64 3
store i32 %286, i32* %291
%292 = load i32*, i32** %11
%293 = load i32, i32* %26
%294 = sext i32 %293 to i64
%295 = getelementptr inbounds i32, i32* %292, i64 %294
%296 = getelementptr inbounds i32, i32* %295, i64 4
store i32 -1, i32* %296
%297 = load i32, i32* %28
%298 = load i32*, i32** %11
%299 = load i32, i32* %26
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds i32, i32* %298, i64 %300
store i32 %297, i32* %301
%302 = load i32, i32* %28
store i32 %302, i32* %25
%303 = load i32, i32* %28
%304 = add nsw i32 %303, 1
store i32 %304, i32* %28
%305 = load i32, i32* %27
%306 = add nsw i32 %305, 1
store i32 %306, i32* %27
store i32 1, i32* %29
%307 = load i32, i32* %26
%308 = load i32*, i32** %11
%309 = load i32, i32* %26
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds i32, i32* %308, i64 %310
%312 = getelementptr inbounds i32, i32* %311, i64 1
%313 = load i32, i32* %312
%314 = mul nsw i32 %313, 3
%315 = add nsw i32 %307, %314
%316 = add nsw i32 %315, 5
store i32 %316, i32* %26
br label %483
317: ; preds = %249
%318 = load i32*, i32** %11
%319 = load i32, i32* %18
%320 = sext i32 %319 to i64
%321 = getelementptr inbounds i32, i32* %318, i64 %320
%322 = getelementptr inbounds i32, i32* %321, i64 3
%323 = load i32, i32* %322
store i32 %323, i32* %18
br label %324
324: ; preds = %317
br label %325
325: ; preds = %324
br label %326
326: ; preds = %325, %197
br label %42
327: ; preds = %42
br label %328
328: ; preds = %444, %327
%329 = load i32, i32* %18
store i32 %329, i32* %20
%330 = load i32*, i32** %11
%331 = load i32, i32* %18
%332 = sext i32 %331 to i64
%333 = getelementptr inbounds i32, i32* %330, i64 %332
%334 = getelementptr inbounds i32, i32* %333, i64 1
%335 = load i32, i32* %334
store i32 %335, i32* %22
%336 = load i32*, i32** %11
%337 = load i32, i32* %18
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds i32, i32* %336, i64 %338
%340 = getelementptr inbounds i32, i32* %339, i64 4
%341 = load i32, i32* %340
store i32 %341, i32* %21
%342 = load i32, i32* %18
%343 = add nsw i32 %342, 5
store i32 %343, i32* %18
%344 = load i32, i32* %26
%345 = add nsw i32 %344, 5
store i32 %345, i32* %26
store i32 1, i32* %23
br label %346
346: ; preds = %365, %328
%347 = load i32, i32* %23
%348 = load i32, i32* %22
%349 = mul nsw i32 %348, 3
%350 = icmp slt i32 %347, %349
br i1 %350, label %351, label %372
351: ; preds = %346
%352 = load i32*, i32** %11
%353 = load i32, i32* %18
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i32, i32* %352, i64 %354
%356 = load i32, i32* %355
%357 = load i32*, i32** %11
%358 = load i32, i32* %26
%359 = sext i32 %358 to i64
%360 = getelementptr inbounds i32, i32* %357, i64 %359
%361 = load i32, i32* %360
%362 = icmp ne i32 %356, %361
br i1 %362, label %363, label %364
363: ; preds = %351
br label %372
364: ; preds = %351
br label %365
365: ; preds = %364
%366 = load i32, i32* %23
%367 = add nsw i32 %366, 1
store i32 %367, i32* %23
%368 = load i32, i32* %18
%369 = add nsw i32 %368, 1
store i32 %369, i32* %18
%370 = load i32, i32* %26
%371 = add nsw i32 %370, 1
store i32 %371, i32* %26
br label %346
372: ; preds = %363, %346
%373 = load i32, i32* %23
%374 = load i32, i32* %22
%375 = mul nsw i32 %374, 3
%376 = icmp eq i32 %373, %375
br i1 %376, label %377, label %384
377: ; preds = %372
%378 = load i32*, i32** %11
%379 = load i32, i32* %20
%380 = sext i32 %379 to i64
%381 = getelementptr inbounds i32, i32* %378, i64 %380
%382 = load i32, i32* %381
store i32 %382, i32* %25
%383 = load i32, i32* %19
store i32 %383, i32* %26
br label %447
384: ; preds = %372
%385 = load i32, i32* %21
%386 = icmp eq i32 %385, -1
br i1 %386, label %387, label %441
387: ; preds = %384
%388 = load i32, i32* %27
%389 = add nsw i32 %388, 1
store i32 %389, i32* %27
%390 = load i32, i32* %28
%391 = load i32*, i32** %11
%392 = load i32, i32* %19
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds i32, i32* %391, i64 %393
store i32 %390, i32* %394
%395 = load i32, i32* %28
store i32 %395, i32* %25
%396 = load i32*, i32** %11
%397 = load i32, i32* %19
%398 = sext i32 %397 to i64
%399 = getelementptr inbounds i32, i32* %396, i64 %398
%400 = getelementptr inbounds i32, i32* %399, i64 4
store i32 -1, i32* %400
%401 = load i32, i32* %19
%402 = load i32*, i32** %11
%403 = load i32, i32* %20
%404 = sext i32 %403 to i64
%405 = getelementptr inbounds i32, i32* %402, i64 %404
%406 = getelementptr inbounds i32, i32* %405, i64 4
store i32 %401, i32* %406
%407 = load i32*, i32** %11
%408 = load i32, i32* %20
%409 = sext i32 %408 to i64
%410 = getelementptr inbounds i32, i32* %407, i64 %409
%411 = getelementptr inbounds i32, i32* %410, i64 2
%412 = load i32, i32* %411
%413 = load i32*, i32** %11
%414 = load i32, i32* %19
%415 = sext i32 %414 to i64
%416 = getelementptr inbounds i32, i32* %413, i64 %415
%417 = getelementptr inbounds i32, i32* %416, i64 2
store i32 %412, i32* %417
%418 = load i32*, i32** %11
%419 = load i32, i32* %20
%420 = sext i32 %419 to i64
%421 = getelementptr inbounds i32, i32* %418, i64 %420
%422 = getelementptr inbounds i32, i32* %421, i64 3
%423 = load i32, i32* %422
%424 = load i32*, i32** %11
%425 = load i32, i32* %19
%426 = sext i32 %425 to i64
%427 = getelementptr inbounds i32, i32* %424, i64 %426
%428 = getelementptr inbounds i32, i32* %427, i64 3
store i32 %423, i32* %428
%429 = load i32, i32* %28
%430 = add nsw i32 %429, 1
store i32 %430, i32* %28
store i32 1, i32* %29
%431 = load i32, i32* %19
%432 = load i32*, i32** %11
%433 = load i32, i32* %19
%434 = sext i32 %433 to i64
%435 = getelementptr inbounds i32, i32* %432, i64 %434
%436 = getelementptr inbounds i32, i32* %435, i64 1
%437 = load i32, i32* %436
%438 = mul nsw i32 %437, 3
%439 = add nsw i32 %431, %438
%440 = add nsw i32 %439, 5
store i32 %440, i32* %26
br label %447
441: ; preds = %384
%442 = load i32, i32* %21
store i32 %442, i32* %18
%443 = load i32, i32* %19
store i32 %443, i32* %26
br label %444
444: ; preds = %441
%445 = load i32, i32* %18
%446 = icmp ne i32 %445, -1
br i1 %446, label %328, label %447
447: ; preds = %444, %387, %377
br label %482
448: ; preds = %8
%449 = load i32, i32* %27
%450 = add nsw i32 %449, 1
store i32 %450, i32* %27
%451 = load i32*, i32** %11
%452 = load i32, i32* %26
%453 = sext i32 %452 to i64
%454 = getelementptr inbounds i32, i32* %451, i64 %453
%455 = getelementptr inbounds i32, i32* %454, i64 4
store i32 -1, i32* %455
%456 = load i32*, i32** %11
%457 = load i32, i32* %26
%458 = sext i32 %457 to i64
%459 = getelementptr inbounds i32, i32* %456, i64 %458
%460 = getelementptr inbounds i32, i32* %459, i64 3
store i32 -1, i32* %460
%461 = load i32*, i32** %11
%462 = load i32, i32* %26
%463 = sext i32 %462 to i64
%464 = getelementptr inbounds i32, i32* %461, i64 %463
%465 = getelementptr inbounds i32, i32* %464, i64 2
store i32 -1, i32* %465
%466 = load i32, i32* %10
%467 = load i32*, i32** %11
%468 = load i32, i32* %26
%469 = sext i32 %468 to i64
%470 = getelementptr inbounds i32, i32* %467, i64 %469
store i32 %466, i32* %470
%471 = load i32*, i32** %11
%472 = load i32, i32* %26
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds i32, i32* %471, i64 %473
%475 = getelementptr inbounds i32, i32* %474, i64 1
%476 = load i32, i32* %475
%477 = mul nsw i32 %476, 3
%478 = add nsw i32 %477, 5
%479 = load i32, i32* %26
%480 = add nsw i32 %479, %478
store i32 %480, i32* %26
%481 = load i32, i32* %10
store i32 %481, i32* %25
br label %482
482: ; preds = %448, %447
br label %483
483: ; preds = %482, %268, %206, %140, %78
%484 = load i32, i32* %25
%485 = load i32*, i32** %13
store i32 %484, i32* %485
%486 = load i32, i32* %26
%487 = load i32*, i32** %12
store i32 %486, i32* %487
%488 = load i32, i32* %28
%489 = load i32*, i32** %16
store i32 %488, i32* %489
%490 = load i32, i32* %29
%491 = load i32*, i32** %17
store i32 %490, i32* %491
%492 = load i32, i32* %27
%493 = load i32*, i32** %14
store i32 %492, i32* %493
%494 = load i32, i32* %9
ret i32 %494
}

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