#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int uint;

/* Variables and functions */
int /*<<< orphan*/ memcpy(int *, int *, int);
int /*<<< orphan*/ memset(int *, int /*<<< orphan*/, int);
int typeCount(int);
uint eval(uint *card) {
  uint compress[7] = {0, 0, 0, 0, 0, 0, 0};
  uint n = 0;
  int i, j, k, t, level, diff;
  int count_shun[5], prev_shun[5], pos_shun[5], type_same[4], pos_type[4];
  memcpy(compress, card, sizeof(uint) * 7);
  for (i = 0; i < 6; i++) {
    k = i;
    for (j = i + 1; j < 7; j++)
      if (compress[k] % 100 < compress[j] % 100)
        k = j;
    j = compress[k];
    compress[k] = compress[i];
    compress[i] = j;
  }
  j = 0;
  k = 0;
  compress[0] = (compress[0] % 100) << 4 | (1 << (compress[0] / 100));
  for (i = 1; i < 7; i++) {
    if ((compress[k] >> 4) == (compress[i] % 100)) {
      compress[k] |= 1 << (compress[i] / 100);
    } else {
      k++;
      compress[k] = (compress[i] % 100) << 4 | (1 << (compress[i] / 100));
    }
  }
  for (i = k + 1; i < 7; i++)
    compress[i] = 0;
  n = k + 1;
  memset(count_shun, 0, 5 * sizeof(uint));
  memset(prev_shun, 0, 5 * sizeof(uint));
  memset(pos_shun, 0, 5 * sizeof(uint));
  memset(type_same, 0, 4 * sizeof(uint));
  memset(pos_type, 0, 4 * sizeof(uint));
  level = 0;
  diff = 0;
  for (i = 0; i < n; i++) {
    j = compress[i] >> 4;
    k = compress[i] & 0x0f;
    switch (typeCount(k)) {
    case 4:
      level = 7;
      diff = ((j) << 16);
      return ((level) << 20) + diff;
      break;
    case 3:
      if (level == 1) {
        level = 6;
        diff += ((j) << 16);
        return ((level) << 20) + diff;
      } else if (level < 3) {
        level = 3;
        diff = ((j) << 16);
      }
      break;
    case 2:
      if (level == 3) {
        level = 6;
        diff += ((j) << 12);
        return ((level) << 20) + diff;
      } else if (level == 1) {
        level = 2;
        diff += ((j) << 8);
      } else if (level == 0) {
        level = 1;
        diff += ((j) << 12);
      }
      break;
    case 1:
      break;
    }
    if (j + 1 == prev_shun[4]) {
      count_shun[4]++;
      prev_shun[4] = j;
      if (count_shun[4] >= 5 && level < 4) {
        level = 4;
        diff = (compress[pos_shun[4]] >> 4);
      } else if (count_shun[4] == 4 && prev_shun[4] == 2 &&
                 compress[0] >> 4 == 14) {
        level = 4;
        diff = (compress[pos_shun[4]] >> 4);
      }
    } else if (count_shun[4] < 5) {
      count_shun[4] = 1;
      prev_shun[4] = j;
      pos_shun[4] = i;
    }
    for (t = 0; t < 4; t++) {
      if (k & (1 << t)) {
        if (j + 1 == prev_shun[t]) {
          count_shun[t]++;
          prev_shun[t] = j;
        } else if (count_shun[t] < 5) {
          count_shun[t] = 1;
          prev_shun[t] = j;
          pos_shun[t] = i;
        }
        if (count_shun[t] >= 5) {
          level = 8;
          diff = (compress[pos_shun[t]] >> 4);
          return ((level) << 20) + diff;
        } else if (count_shun[t] == 4 && prev_shun[t] == 2 &&
                   compress[0] >> 4 == 14) {
          level = 8;
          diff = (compress[pos_shun[4]] >> 4);
          return ((level) << 20) + diff;
        }
        type_same[t]++;
        if (pos_type[t] == 0) {
          pos_type[t] = j;
        } else if (type_same[t] >= 5 && level < 5) {
          level = 5;
          diff = (pos_type[t]);
        }
      } else {
        count_shun[t] = 0;
        prev_shun[t] = 0;
        pos_shun[t] = 0;
      }
    }
  }
  switch (level) {
  case 3:
    break;
  case 2:
    for (i = 0; i < n; i++) {
      k = compress[i] & 0x0f;
      if (typeCount(k) == 1) {
        diff += (compress[i] >> 4);
        break;
      }
    }
    break;
  case 1:
    t = 0;
    for (i = 0; i < n; i++) {
      k = compress[i] & 0x0f;
      if (typeCount(k) == 1) {
        diff += (compress[i] >> 4) << ((2 - t) * 4);
        t++;
        if (t >= 3)
          break;
      }
    }
    break;
  case 0:
    diff = ((compress[0] >> 4) << 16) + ((compress[1] >> 4) << 12) +
           ((compress[2] >> 4) << 8) + ((compress[3] >> 4) << 4) +
           (compress[4] >> 4);
    break;
  }
  return ((level) << 20) + diff;
}


x86 assembly (clang, -O0):
<eval>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %rdi,-0x10(%rbp)
lea    -0x30(%rbp),%rdi
xor    %esi,%esi
mov    $0x1c,%edx
call   1030 <memset@plt>
movl   $0x0,-0x34(%rbp)
lea    -0x30(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    $0x1c,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x38(%rbp)
cmpl   $0x6,-0x38(%rbp)
jge    1215 <eval+0xe5>
mov    -0x38(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x7,-0x3c(%rbp)
jge    11e1 <eval+0xb1>
movslq -0x40(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0xc4(%rbp)
movslq -0x3c(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    -0xc4(%rbp),%edx
cmp    %eax,%edx
jge    11ce <eval+0x9e>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    11d3 <eval+0xa3>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1188 <eval+0x58>
movslq -0x40(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    %eax,-0x3c(%rbp)
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%ecx
movslq -0x40(%rbp),%rax
mov    %ecx,-0x30(%rbp,%rax,4)
mov    -0x3c(%rbp),%ecx
movslq -0x38(%rbp),%rax
mov    %ecx,-0x30(%rbp,%rax,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    116f <eval+0x3f>
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
shl    $0x4,%edx
mov    %edx,-0xc8(%rbp)
mov    -0x30(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xc8(%rbp),%eax
mov    $0x1,%edx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
movl   $0x1,-0x38(%rbp)
cmpl   $0x7,-0x38(%rbp)
jge    1322 <eval+0x1f2>
movslq -0x40(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0xcc(%rbp)
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    -0xcc(%rbp),%eax
cmp    %edx,%eax
jne    12c4 <eval+0x194>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,%ecx
movslq -0x40(%rbp),%rax
or     -0x30(%rbp,%rax,4),%ecx
mov    %ecx,-0x30(%rbp,%rax,4)
jmp    130f <eval+0x1df>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
shl    $0x4,%edx
mov    %edx,-0xd0(%rbp)
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    -0xd0(%rbp),%ecx
or     %eax,%ecx
movslq -0x40(%rbp),%rax
mov    %ecx,-0x30(%rbp,%rax,4)
jmp    1314 <eval+0x1e4>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    125f <eval+0x12f>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x7,-0x38(%rbp)
jge    134f <eval+0x21f>
movslq -0x38(%rbp),%rax
movl   $0x0,-0x30(%rbp,%rax,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    132b <eval+0x1fb>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
lea    -0x60(%rbp),%rdi
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    -0x80(%rbp),%rdi
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    -0xa0(%rbp),%rdi
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    -0xb0(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
lea    -0xc0(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    17c0 <eval+0x690>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0x3c(%rbp)
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
and    $0xf,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
call   1050 <typeCount@plt>
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0xd8(%rbp)
sub    $0x3,%eax
ja     1516 <eval+0x3e6>
mov    -0xd8(%rbp),%rax
lea    0xbf7(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x7,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    191d <eval+0x7ed>
cmpl   $0x1,-0x48(%rbp)
jne    1471 <eval+0x341>
movl   $0x6,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    191d <eval+0x7ed>
cmpl   $0x3,-0x48(%rbp)
jge    148b <eval+0x35b>
movl   $0x3,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
mov    %eax,-0x4c(%rbp)
jmp    1490 <eval+0x360>
jmp    1516 <eval+0x3e6>
cmpl   $0x3,-0x48(%rbp)
jne    14c3 <eval+0x393>
movl   $0x6,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0xc,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    191d <eval+0x7ed>
cmpl   $0x1,-0x48(%rbp)
jne    14e5 <eval+0x3b5>
movl   $0x2,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x8,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1507 <eval+0x3d7>
cmpl   $0x0,-0x48(%rbp)
jne    1502 <eval+0x3d2>
movl   $0x1,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0xc,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1507 <eval+0x3d7>
jmp    150c <eval+0x3dc>
jmp    1516 <eval+0x3e6>
jmp    1516 <eval+0x3e6>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
cmp    -0x70(%rbp),%eax
jne    15aa <eval+0x47a>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x70(%rbp)
cmpl   $0x5,-0x50(%rbp)
jl     1565 <eval+0x435>
cmpl   $0x4,-0x48(%rbp)
jge    1565 <eval+0x435>
movl   $0x4,-0x48(%rbp)
movslq -0x90(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0x4c(%rbp)
jmp    15a5 <eval+0x475>
cmpl   $0x4,-0x50(%rbp)
jne    15a0 <eval+0x470>
cmpl   $0x2,-0x70(%rbp)
jne    15a0 <eval+0x470>
mov    -0x30(%rbp),%eax
sar    $0x4,%eax
cmp    $0xe,%eax
jne    15a0 <eval+0x470>
movl   $0x4,-0x48(%rbp)
movslq -0x90(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0x4c(%rbp)
jmp    15a5 <eval+0x475>
jmp    15cf <eval+0x49f>
cmpl   $0x5,-0x50(%rbp)
jge    15ca <eval+0x49a>
movl   $0x1,-0x50(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x90(%rbp)
jmp    15cf <eval+0x49f>
movl   $0x0,-0x44(%rbp)
cmpl   $0x4,-0x44(%rbp)
jge    17ad <eval+0x67d>
mov    -0x40(%rbp),%eax
mov    -0x44(%rbp),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     1773 <eval+0x643>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
movslq -0x44(%rbp),%rcx
cmp    -0x80(%rbp,%rcx,4),%eax
jne    162d <eval+0x4fd>
movslq -0x44(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x60(%rbp,%rax,4)
mov    -0x3c(%rbp),%ecx
movslq -0x44(%rbp),%rax
mov    %ecx,-0x80(%rbp,%rax,4)
jmp    1666 <eval+0x536>
movslq -0x44(%rbp),%rax
cmpl   $0x5,-0x60(%rbp,%rax,4)
jge    1661 <eval+0x531>
movslq -0x44(%rbp),%rax
movl   $0x1,-0x60(%rbp,%rax,4)
mov    -0x3c(%rbp),%ecx
movslq -0x44(%rbp),%rax
mov    %ecx,-0x80(%rbp,%rax,4)
mov    -0x38(%rbp),%ecx
movslq -0x44(%rbp),%rax
mov    %ecx,-0xa0(%rbp,%rax,4)
jmp    1666 <eval+0x536>
movslq -0x44(%rbp),%rax
cmpl   $0x5,-0x60(%rbp,%rax,4)
jl     16a3 <eval+0x573>
movl   $0x8,-0x48(%rbp)
movslq -0x44(%rbp),%rax
movslq -0xa0(%rbp,%rax,4),%rax
ff
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    191d <eval+0x7ed>
movslq -0x44(%rbp),%rax
cmpl   $0x4,-0x60(%rbp,%rax,4)
jne    16f9 <eval+0x5c9>
movslq -0x44(%rbp),%rax
cmpl   $0x2,-0x80(%rbp,%rax,4)
jne    16f9 <eval+0x5c9>
mov    -0x30(%rbp),%eax
sar    $0x4,%eax
cmp    $0xe,%eax
jne    16f9 <eval+0x5c9>
movl   $0x8,-0x48(%rbp)
movslq -0x90(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    191d <eval+0x7ed>
jmp    16fe <eval+0x5ce>
movslq -0x44(%rbp),%rax
mov    -0xb0(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0xb0(%rbp,%rax,4)
movslq -0x44(%rbp),%rax
cmpl   $0x0,-0xc0(%rbp,%rax,4)
jne    1738 <eval+0x608>
mov    -0x3c(%rbp),%ecx
movslq -0x44(%rbp),%rax
mov    %ecx,-0xc0(%rbp,%rax,4)
jmp    176e <eval+0x63e>
movslq -0x44(%rbp),%rax
cmpl   $0x5,-0xb0(%rbp,%rax,4)
05
jl     1769 <eval+0x639>
cmpl   $0x5,-0x48(%rbp)
jge    1769 <eval+0x639>
movl   $0x5,-0x48(%rbp)
movslq -0x44(%rbp),%rax
mov    -0xc0(%rbp,%rax,4),%eax
mov    %eax,-0x4c(%rbp)
jmp    176e <eval+0x63e>
jmp    179a <eval+0x66a>
movslq -0x44(%rbp),%rax
movl   $0x0,-0x60(%rbp,%rax,4)
movslq -0x44(%rbp),%rax
movl   $0x0,-0x80(%rbp,%rax,4)
movslq -0x44(%rbp),%rax
movl   $0x0,-0xa0(%rbp,%rax,4)
jmp    179f <eval+0x66f>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    15d6 <eval+0x4a6>
jmp    17b2 <eval+0x682>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    13c6 <eval+0x296>
mov    -0x48(%rbp),%eax
mov    %rax,-0xe0(%rbp)
sub    $0x3,%rax
ja     1911 <eval+0x7e1>
mov    -0xe0(%rbp),%rax
lea    0x81e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    1911 <eval+0x7e1>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    184b <eval+0x71b>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
and    $0xf,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
call   1050 <typeCount@plt>
cmp    $0x1,%eax
jne    1838 <eval+0x708>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    184b <eval+0x71b>
jmp    183d <eval+0x70d>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    17f7 <eval+0x6c7>
jmp    1911 <eval+0x7e1>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    18d7 <eval+0x7a7>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
and    $0xf,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
call   1050 <typeCount@plt>
cmp    $0x1,%eax
jne    18c4 <eval+0x794>
movslq -0x38(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
sar    $0x4,%eax
mov    $0x2,%ecx
sub    -0x44(%rbp),%ecx
shl    $0x2,%ecx
shl    %cl,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x3,-0x44(%rbp)
jl     18bf <eval+0x78f>
jmp    18d7 <eval+0x7a7>
jmp    18c4 <eval+0x794>
jmp    18c9 <eval+0x799>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    185e <eval+0x72e>
jmp    1911 <eval+0x7e1>
mov    -0x30(%rbp),%eax
sar    $0x4,%eax
shl    $0x10,%eax
mov    -0x2c(%rbp),%ecx
sar    $0x4,%ecx
shl    $0xc,%ecx
add    %ecx,%eax
mov    -0x28(%rbp),%ecx
sar    $0x4,%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    -0x24(%rbp),%ecx
sar    $0x4,%ecx
shl    $0x4,%ecx
add    %ecx,%eax
mov    -0x20(%rbp),%ecx
sar    $0x4,%ecx
add    %ecx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
shl    $0x14,%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<eval>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %rdi,%rsi
xorps  %xmm0,%xmm0
movups %xmm0,0xc(%rsp)
movaps %xmm0,(%rsp)
mov    %rsp,%rdi
mov    $0x1c,%edx
call   1040 <memcpy@plt>
xor    %eax,%eax
jmp    1189 <eval+0x59>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movslq %edx,%rdx
mov    (%rsp,%rdx,4),%esi
mov    (%rsp,%rcx,4),%edi
mov    %edi,(%rsp,%rdx,4)
mov    %esi,(%rsp,%rcx,4)
cmp    $0x6,%rax
je     1365 <eval+0x235>
mov    %rax,%rcx
add    $0x1,%rax
movslq (%rsp,%rcx,4),%rsi
imul   $0x51eb851f,%rsi,%rdx
mov    %rdx,%rdi
shr    $0x3f,%rdi
sar    $0x25,%rdx
add    %edi,%edx
imul   $0x64,%edx,%edx
sub    %edx,%esi
movslq 0x4(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rdx
mov    %rdx,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdx
add    %ebp,%edx
imul   $0x64,%edx,%edx
sub    %edx,%edi
mov    %rax,%rdx
cmp    %edi,%esi
jl     11d5 <eval+0xa5>
mov    %rcx,%rdx
cmp    $0x5,%rcx
je     1170 <eval+0x40>
movslq %edx,%rsi
movslq (%rsp,%rsi,4),%rsi
imul   $0x51eb851f,%rsi,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdi
add    %ebp,%edi
imul   $0x64,%edi,%edi
sub    %edi,%esi
movslq 0x8(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
sar    $0x25,%rbp
add    %ebx,%ebp
imul   $0x64,%ebp,%ebp
sub    %ebp,%edi
cmp    %edi,%esi
jge    1220 <eval+0xf0>
lea    0x2(%rcx),%edx
cmp    $0x4,%rcx
je     1170 <eval+0x40>
movslq %edx,%rsi
movslq (%rsp,%rsi,4),%rsi
imul   $0x51eb851f,%rsi,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdi
add    %ebp,%edi
imul   $0x64,%edi,%edi
sub    %edi,%esi
movslq 0xc(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
sar    $0x25,%rbp
add    %ebx,%ebp
imul   $0x64,%ebp,%ebp
sub    %ebp,%edi
cmp    %edi,%esi
jge    126f <eval+0x13f>
lea    0x3(%rcx),%edx
cmp    $0x3,%rcx
je     1170 <eval+0x40>
movslq %edx,%rsi
movslq (%rsp,%rsi,4),%rsi
imul   $0x51eb851f,%rsi,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdi
add    %ebp,%edi
imul   $0x64,%edi,%edi
sub    %edi,%esi
movslq 0x10(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
sar    $0x25,%rbp
add    %ebx,%ebp
imul   $0x64,%ebp,%ebp
sub    %ebp,%edi
cmp    %edi,%esi
jge    12be <eval+0x18e>
lea    0x4(%rcx),%edx
cmp    $0x2,%rcx
je     1170 <eval+0x40>
movslq %edx,%rsi
movslq (%rsp,%rsi,4),%rsi
imul   $0x51eb851f,%rsi,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdi
add    %ebp,%edi
imul   $0x64,%edi,%edi
sub    %edi,%esi
movslq 0x14(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
sar    $0x25,%rbp
add    %ebx,%ebp
imul   $0x64,%ebp,%ebp
sub    %ebp,%edi
cmp    %edi,%esi
jge    130d <eval+0x1dd>
lea    0x5(%rcx),%edx
cmp    $0x1,%rcx
je     1170 <eval+0x40>
movslq %edx,%rsi
movslq (%rsp,%rsi,4),%rsi
imul   $0x51eb851f,%rsi,%rdi
mov    %rdi,%rbp
shr    $0x3f,%rbp
sar    $0x25,%rdi
add    %ebp,%edi
imul   $0x64,%edi,%edi
sub    %edi,%esi
movslq 0x18(%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rbp
mov    %rbp,%rbx
shr    $0x3f,%rbx
sar    $0x25,%rbp
add    %ebx,%ebp
imul   $0x64,%ebp,%ebp
sub    %ebp,%edi
cmp    %edi,%esi
jge    1170 <eval+0x40>
lea    0x6(%rcx),%edx
jmp    1170 <eval+0x40>
movslq (%rsp),%rax
imul   $0x51eb851f,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rcx
add    %edx,%ecx
imul   $0x64,%ecx,%edx
sub    %edx,%eax
shl    $0x4,%eax
bts    %ecx,%eax
mov    %eax,(%rsp)
xor    %r14d,%r14d
mov    $0x1,%ecx
jmp    13ba <eval+0x28a>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x1(%rdx),%r14d
shl    $0x4,%ebp
bts    %esi,%ebp
mov    %ebp,0x4(%rsp,%rdx,4)
mov    %ebp,%eax
add    $0x1,%rcx
cmp    $0x7,%rcx
je     1404 <eval+0x2d4>
mov    %eax,%ebx
sar    $0x4,%ebx
movslq (%rsp,%rcx,4),%rdi
imul   $0x51eb851f,%rdi,%rsi
mov    %rsi,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rsi
add    %edx,%esi
imul   $0x64,%esi,%edx
mov    %edi,%ebp
sub    %edx,%ebp
movslq %r14d,%rdx
cmp    %ebp,%ebx
jne    13a0 <eval+0x270>
movslq %edi,%rsi
imul   $0x51eb851f,%rsi,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
shr    $0x25,%rsi
add    %edi,%esi
bts    %esi,%eax
mov    %eax,(%rsp,%rdx,4)
jmp    13b0 <eval+0x280>
cmp    $0x5,%r14d
jg     142c <eval+0x2fc>
movslq %r14d,%rax
lea    (%rsp,%rax,4),%rdi
add    $0x4,%rdi
mov    $0x5,%eax
sub    %r14d,%eax
lea    0x4(,%rax,4),%rdx
xor    %esi,%esi
call   1030 <memset@plt>
lea    0x70(%rsp),%rdi
xor    %ebx,%ebx
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    0x50(%rsp),%rdi
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    0x30(%rsp),%rdi
xor    %esi,%esi
mov    $0x14,%edx
call   1030 <memset@plt>
lea    0xa0(%rsp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
lea    0x90(%rsp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1030 <memset@plt>
test   %r14d,%r14d
js     16fe <eval+0x5ce>
lea    0x1(%r14),%eax
mov    %rax,0x28(%rsp)
xor    %r13d,%r13d
xor    %r15d,%r15d
mov    (%rsp,%r13,4),%ebp
mov    %ebp,%r12d
sar    $0x4,%r12d
and    $0xf,%ebp
mov    %ebp,%edi
call   1050 <typeCount@plt>
cmp    $0x2,%eax
je     14d0 <eval+0x3a0>
cmp    $0x3,%eax
mov    %rbx,%r9
je     14f0 <eval+0x3c0>
cmp    $0x4,%eax
jne    1540 <eval+0x410>
jmp    17a3 <eval+0x673>
nopl   (%rax)
test   %r15d,%r15d
mov    %rbx,%r9
je     1513 <eval+0x3e3>
cmp    $0x1,%r15d
je     1524 <eval+0x3f4>
cmp    $0x3,%r15d
jne    1540 <eval+0x410>
jmp    17eb <eval+0x6bb>
nopl   0x0(%rax)
cmp    $0x1,%r15d
je     17b3 <eval+0x683>
mov    %r12d,%eax
shl    $0x10,%eax
cmp    $0x3,%r15d
mov    $0x3,%ecx
cmovl  %ecx,%r15d
cmovl  %eax,%r9d
jmp    1540 <eval+0x410>
mov    %r12d,%eax
shl    $0xc,%eax
add    %eax,%r9d
mov    $0x1,%r15d
jmp    1540 <eval+0x410>
mov    %r12d,%eax
shl    $0x8,%eax
add    %eax,%r9d
mov    $0x2,%r15d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%r12),%eax
mov    0x80(%rsp),%edx
cmp    0x60(%rsp),%eax
jne    15b0 <eval+0x480>
lea    0x1(%rdx),%ecx
mov    %ecx,0x80(%rsp)
mov    %r12d,0x60(%rsp)
cmp    $0x4,%edx
jl     156c <eval+0x43c>
cmp    $0x3,%r15d
jle    1590 <eval+0x460>
cmp    $0x4,%ecx
jne    15ca <eval+0x49a>
cmp    $0x2,%r12d
jne    15ca <eval+0x49a>
mov    (%rsp),%ecx
and    $0xfffffff0,%ecx
cmp    $0xe0,%ecx
jne    15ca <eval+0x49a>
cs nopw 0x0(%rax,%rax,1)
nop
movslq 0x40(%rsp),%rcx
mov    (%rsp,%rcx,4),%r9d
sar    $0x4,%r9d
mov    $0x4,%r15d
jmp    15ca <eval+0x49a>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x4,%edx
jg     15ca <eval+0x49a>
movl   $0x1,0x80(%rsp)
mov    %r12d,0x60(%rsp)
mov    %r13d,0x40(%rsp)
mov    (%rsp),%r8d
and    $0xfffffff0,%r8d
xor    %edx,%edx
jmp    1606 <eval+0x4d6>
cs nopw 0x0(%rax,%rax,1)
movl   $0x0,0x70(%rsp,%rdx,4)
movl   $0x0,0x50(%rsp,%rdx,4)
movl   $0x0,0x30(%rsp,%rdx,4)
add    $0x1,%rdx
cmp    $0x4,%rdx
je     16c0 <eval+0x590>
bt     %edx,%ebp
jae    15e0 <eval+0x4b0>
mov    0x70(%rsp,%rdx,4),%esi
cmp    0x50(%rsp,%rdx,4),%eax
jne    1650 <eval+0x520>
lea    0x1(%rsi),%edi
mov    %edi,0x70(%rsp,%rdx,4)
mov    %r12d,0x50(%rsp,%rdx,4)
cmp    $0x4,%esi
jge    16f7 <eval+0x5c7>
cmp    $0x4,%edi
jne    166b <eval+0x53b>
cmp    $0x2,%r12d
jne    166b <eval+0x53b>
cmp    $0xe0,%r8d
jne    166b <eval+0x53b>
jmp    173d <eval+0x60d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x4,%esi
jg     16f7 <eval+0x5c7>
movl   $0x1,0x70(%rsp,%rdx,4)
mov    %r12d,0x50(%rsp,%rdx,4)
mov    %r13d,0x30(%rsp,%rdx,4)
mov    0xa0(%rsp,%rdx,4),%edi
lea    0x1(%rdi),%esi
mov    %esi,0xa0(%rsp,%rdx,4)
mov    0x90(%rsp,%rdx,4),%esi
test   %esi,%esi
je     16b0 <eval+0x580>
cmp    $0x4,%edi
setge  %bl
cmp    $0x5,%r15d
setl   %cl
mov    $0x5,%edi
test   %cl,%bl
jne    16a3 <eval+0x573>
mov    %r15d,%edi
mov    %r9d,%esi
mov    %edi,%r15d
mov    %esi,%r9d
jmp    15f8 <eval+0x4c8>
xchg   %ax,%ax
mov    %r12d,0x90(%rsp,%rdx,4)
jmp    15f8 <eval+0x4c8>
nopl   (%rax)
mov    %r9,%rbx
add    $0x1,%r13
cmp    0x28(%rsp),%r13
jne    14a1 <eval+0x371>
test   %r15d,%r15d
je     16fe <eval+0x5ce>
cmp    $0x2,%r15d
je     17c4 <eval+0x694>
cmp    $0x1,%r15d
jne    1734 <eval+0x604>
test   %r14d,%r14d
js     17ff <eval+0x6cf>
xor    %ebp,%ebp
xor    %r14d,%r14d
jmp    1775 <eval+0x645>
movslq 0x30(%rsp,%rdx,4),%rax
jmp    1742 <eval+0x612>
mov    (%rsp),%eax
mov    0x4(%rsp),%ecx
and    $0xfffffff0,%eax
shl    $0xc,%eax
and    $0xfffffff0,%ecx
shl    $0x8,%ecx
add    %eax,%ecx
mov    0x8(%rsp),%eax
and    $0xfffffff0,%eax
shl    $0x4,%eax
add    %ecx,%eax
mov    0xc(%rsp),%ecx
and    $0xfffffff0,%ecx
add    %eax,%ecx
mov    0x10(%rsp),%ebx
sar    $0x4,%ebx
add    %ecx,%ebx
xor    %r15d,%r15d
shl    $0x14,%r15d
add    %ebx,%r15d
jmp    1751 <eval+0x621>
movslq 0x40(%rsp),%rax
mov    (%rsp,%rax,4),%r15d
sar    $0x4,%r15d
add    $0x800000,%r15d
mov    %r15d,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x1,%r14d
add    $0x1,%rbp
cmp    %rbp,0x28(%rsp)
je     1734 <eval+0x604>
mov    (%rsp,%rbp,4),%edi
and    $0xf,%edi
call   1050 <typeCount@plt>
cmp    $0x1,%eax
jne    176a <eval+0x63a>
mov    (%rsp,%rbp,4),%eax
sar    $0x4,%eax
lea    0x0(,%r14,4),%edx
mov    $0x8,%cl
sub    %dl,%cl
shl    %cl,%eax
add    %eax,%ebx
cmp    $0x1,%r14d
jle    1766 <eval+0x636>
jmp    1734 <eval+0x604>
shl    $0x10,%r12d
add    $0x700000,%r12d
mov    %r12d,%r15d
jmp    1751 <eval+0x621>
shl    $0x10,%r12d
lea    (%r9,%r12,1),%r15d
add    $0x600000,%r15d
jmp    1751 <eval+0x621>
test   %r14d,%r14d
js     180a <eval+0x6da>
xor    %ebp,%ebp
mov    (%rsp,%rbp,4),%edi
and    $0xf,%edi
call   1050 <typeCount@plt>
cmp    $0x1,%eax
je     1815 <eval+0x6e5>
add    $0x1,%rbp
cmp    %rbp,0x28(%rsp)
jne    17cb <eval+0x69b>
jmp    1734 <eval+0x604>
shl    $0xc,%r12d
lea    (%r9,%r12,1),%r15d
add    $0x600000,%r15d
jmp    1751 <eval+0x621>
mov    $0x1,%r15d
jmp    1734 <eval+0x604>
mov    $0x2,%r15d
jmp    1734 <eval+0x604>
mov    (%rsp,%rbp,4),%eax
sar    $0x4,%eax
add    %ebx,%eax
mov    %eax,%ebx
jmp    1734 <eval+0x604>

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

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