#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 */

/* Variables and functions */
int /*<<< orphan*/ STDIN_FILENO;
int /*<<< orphan*/ read(int /*<<< orphan*/, char *, int);
unsigned int readkey(void) {
  unsigned int whatwegot;
  char onechar[1];
  whatwegot = 0;
  while (1) {
    read(STDIN_FILENO, onechar, 1);
    if (whatwegot & 1) {
      if (whatwegot & 2) {
        if (whatwegot & 128) {
          if (onechar[0] == 'A')
            return 0x10000012;
          else if (onechar[0] == 'B')
            return 0x10000013;
          else if (onechar[0] == 'C')
            return 0x10000014;
          else if (onechar[0] == 'D')
            return 0x10000015;
          else if (onechar[0] == 'E')
            return 0x10000016;
          else
            return onechar[0];
        } else if (whatwegot & 256) {
          if (whatwegot & 512) {
            if (onechar[0] == '~')
              return 0x10000016;
            else
              return onechar[0];
          } else if (whatwegot & 1024) {
            if (onechar[0] == '~')
              return 0x10000017;
            else
              return onechar[0];
          } else if (whatwegot & 2048) {
            if (onechar[0] == '~')
              return 0x10000018;
            else
              return onechar[0];
          } else if (whatwegot & 4096) {
            if (onechar[0] == '~')
              return 0x10000019;
            else
              return onechar[0];
          } else {
            if (onechar[0] == '~')
              return 0x10000006;
            else if (onechar[0] == '5')
              whatwegot |= 512;
            else if (onechar[0] == '7')
              whatwegot |= 1024;
            else if (onechar[0] == '8')
              whatwegot |= 2048;
            else if (onechar[0] == '9')
              whatwegot |= 4096;
            else
              return onechar[0];
          }
        } else if (whatwegot & 8) {
          if (whatwegot & 8192) {
            if (onechar[0] == '~')
              return 0x1000001A;
            else
              return onechar[0];
          } else if (whatwegot & 16384) {
            if (onechar[0] == '~')
              return 0x1000001B;
            else
              return onechar[0];
          } else if (whatwegot & 32768) {
            if (onechar[0] == '~')
              return 0x1000001C;
            else
              return onechar[0];
          } else if (whatwegot & 65536) {
            if (onechar[0] == '~')
              return 0x1000001D;
            else
              return onechar[0];
          } else {
            if (onechar[0] == '~')
              return 0x10000008;
            else if (onechar[0] == 'A')
              return 0x1000000A;
            else if (onechar[0] == 'B')
              return 0x1000000B;
            else if (onechar[0] == 'D')
              return 0x1000000C;
            else if (onechar[0] == 'C')
              return 0x1000000D;
            else if (onechar[0] == '0')
              whatwegot |= 8192;
            else if (onechar[0] == '1')
              whatwegot |= 16384;
            else if (onechar[0] == '3')
              whatwegot |= 32768;
            else if (onechar[0] == '4')
              whatwegot |= 65536;
            else
              return onechar[0];
          }
        } else if (whatwegot & 32) {
          if (onechar[0] == '~')
            return 0x10000009;
          else
            return onechar[0];
        } else if (whatwegot & 131072) {
          if (onechar[0] == '~')
            return 0x10000007;
          else
            return onechar[0];
        } else if (whatwegot & 16) {
          if (onechar[0] == '~')
            return 0x10000004;
          else if (onechar[0] == 'A')
            return 0x1000000E;
          else if (onechar[0] == 'B')
            return 0x1000000F;
          else if (onechar[0] == 'D')
            return 0x10000010;
          else if (onechar[0] == 'C')
            return 0x10000011;
          else
            return onechar[0];
        } else if (whatwegot & 64) {
          if (onechar[0] == '~')
            return 0x10000005;
          else
            return onechar[0];
        } else {
          if (onechar[0] == 'A')
            return 0x10000000;
          else if (onechar[0] == 'B')
            return 0x10000001;
          else if (onechar[0] == 'D')
            return 0x10000002;
          else if (onechar[0] == 'C')
            return 0x10000003;
          else if (onechar[0] == 'H')
            return 0x10000006;
          else if (onechar[0] == 'F')
            return 0x10000007;
          else if (onechar[0] == 'E')
            return 0x1000001F;
          else if (onechar[0] == 'G')
            return 0x1000001F;
          else if (onechar[0] == '1')
            whatwegot |= 256;
          else if (onechar[0] == '2')
            whatwegot |= 8;
          else if (onechar[0] == '3')
            whatwegot |= 32;
          else if (onechar[0] == '4')
            whatwegot |= 131072;
          else if (onechar[0] == '5')
            whatwegot |= 16;
          else if (onechar[0] == '6')
            whatwegot |= 64;
          else if (onechar[0] == '[')
            whatwegot |= 128;
          else
            return onechar[0];
        }
      } else if (whatwegot & 4) {
        if (onechar[0] == 'P')
          return 0x10000012;
        else if (onechar[0] == 'Q')
          return 0x10000013;
        else if (onechar[0] == 'R')
          return 0x10000014;
        else if (onechar[0] == 'S')
          return 0x10000015;
        else
          return onechar[0];
      } else {
        if (onechar[0] == '[')
          whatwegot |= 2;
        else if (onechar[0] == 'O')
          whatwegot |= 4;
        else if (onechar[0] == 033)
          return 0x1000001E;
        else {
          return onechar[0];
        }
      }
    }
    if (!(whatwegot & 1)) {
      if (onechar[0] == 033)
        whatwegot |= 1;
      else
        return onechar[0];
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<readkey>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x8(%rbp)
mov    0x2eba(%rip),%rax
mov    (%rax),%edi
lea    -0x9(%rbp),%rsi
mov    $0x1,%edx
call   1030 <read@plt>
mov    -0x8(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     19eb <readkey+0x8db>
mov    -0x8(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     18fd <readkey+0x7ed>
mov    -0x8(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     11ee <readkey+0xde>
movsbl -0x9(%rbp),%eax
cmp    $0x41,%eax
jne    117e <readkey+0x6e>
movl   $0x10000012,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x42,%eax
jne    1197 <readkey+0x87>
movl   $0x10000013,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x43,%eax
jne    11b0 <readkey+0xa0>
movl   $0x10000014,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x44,%eax
jne    11c9 <readkey+0xb9>
movl   $0x10000015,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x45,%eax
jne    11e2 <readkey+0xd2>
movl   $0x10000016,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x100,%eax
cmp    $0x0,%eax
je     139d <readkey+0x28d>
mov    -0x8(%rbp),%eax
and    $0x200,%eax
cmp    $0x0,%eax
je     1235 <readkey+0x125>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1229 <readkey+0x119>
movl   $0x10000016,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x400,%eax
cmp    $0x0,%eax
je     126b <readkey+0x15b>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    125f <readkey+0x14f>
movl   $0x10000017,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x800,%eax
cmp    $0x0,%eax
je     12a1 <readkey+0x191>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1295 <readkey+0x185>
movl   $0x10000018,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x1000,%eax
cmp    $0x0,%eax
je     12d7 <readkey+0x1c7>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    12cb <readkey+0x1bb>
movl   $0x10000019,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    12f0 <readkey+0x1e0>
movl   $0x10000006,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x35,%eax
jne    130d <readkey+0x1fd>
mov    -0x8(%rbp),%eax
or     $0x200,%eax
mov    %eax,-0x8(%rbp)
jmp    137f <readkey+0x26f>
movsbl -0x9(%rbp),%eax
cmp    $0x37,%eax
jne    132a <readkey+0x21a>
mov    -0x8(%rbp),%eax
or     $0x400,%eax
mov    %eax,-0x8(%rbp)
jmp    137a <readkey+0x26a>
movsbl -0x9(%rbp),%eax
cmp    $0x38,%eax
jne    1347 <readkey+0x237>
mov    -0x8(%rbp),%eax
or     $0x800,%eax
mov    %eax,-0x8(%rbp)
jmp    1375 <readkey+0x265>
movsbl -0x9(%rbp),%eax
cmp    $0x39,%eax
jne    1364 <readkey+0x254>
mov    -0x8(%rbp),%eax
or     $0x1000,%eax
mov    %eax,-0x8(%rbp)
jmp    1370 <readkey+0x260>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
jmp    1375 <readkey+0x265>
jmp    137a <readkey+0x26a>
jmp    137f <readkey+0x26f>
jmp    1384 <readkey+0x274>
jmp    1389 <readkey+0x279>
jmp    138e <readkey+0x27e>
jmp    1393 <readkey+0x283>
jmp    1398 <readkey+0x288>
jmp    18f3 <readkey+0x7e3>
mov    -0x8(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     15c2 <readkey+0x4b2>
mov    -0x8(%rbp),%eax
and    $0x2000,%eax
cmp    $0x0,%eax
je     13e2 <readkey+0x2d2>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    13d6 <readkey+0x2c6>
movl   $0x1000001a,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x4000,%eax
cmp    $0x0,%eax
je     1418 <readkey+0x308>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    140c <readkey+0x2fc>
movl   $0x1000001b,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x8000,%eax
cmp    $0x0,%eax
je     144e <readkey+0x33e>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1442 <readkey+0x332>
movl   $0x1000001c,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x10000,%eax
cmp    $0x0,%eax
je     1484 <readkey+0x374>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1478 <readkey+0x368>
movl   $0x1000001d,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    149d <readkey+0x38d>
movl   $0x10000008,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x41,%eax
jne    14b6 <readkey+0x3a6>
movl   $0x1000000a,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x42,%eax
jne    14cf <readkey+0x3bf>
movl   $0x1000000b,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x44,%eax
jne    14e8 <readkey+0x3d8>
movl   $0x1000000c,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x43,%eax
jne    1501 <readkey+0x3f1>
movl   $0x1000000d,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x30,%eax
jne    151e <readkey+0x40e>
mov    -0x8(%rbp),%eax
or     $0x2000,%eax
mov    %eax,-0x8(%rbp)
jmp    1590 <readkey+0x480>
movsbl -0x9(%rbp),%eax
cmp    $0x31,%eax
jne    153b <readkey+0x42b>
mov    -0x8(%rbp),%eax
or     $0x4000,%eax
mov    %eax,-0x8(%rbp)
jmp    158b <readkey+0x47b>
movsbl -0x9(%rbp),%eax
cmp    $0x33,%eax
jne    1558 <readkey+0x448>
mov    -0x8(%rbp),%eax
or     $0x8000,%eax
mov    %eax,-0x8(%rbp)
jmp    1586 <readkey+0x476>
movsbl -0x9(%rbp),%eax
cmp    $0x34,%eax
jne    1575 <readkey+0x465>
mov    -0x8(%rbp),%eax
or     $0x10000,%eax
mov    %eax,-0x8(%rbp)
jmp    1581 <readkey+0x471>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
jmp    1586 <readkey+0x476>
jmp    158b <readkey+0x47b>
jmp    1590 <readkey+0x480>
jmp    1595 <readkey+0x485>
jmp    159a <readkey+0x48a>
jmp    159f <readkey+0x48f>
jmp    15a4 <readkey+0x494>
jmp    15a9 <readkey+0x499>
jmp    15ae <readkey+0x49e>
jmp    15b3 <readkey+0x4a3>
jmp    15b8 <readkey+0x4a8>
jmp    15bd <readkey+0x4ad>
jmp    18ee <readkey+0x7de>
mov    -0x8(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     15f6 <readkey+0x4e6>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    15ea <readkey+0x4da>
movl   $0x10000009,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x20000,%eax
cmp    $0x0,%eax
je     162c <readkey+0x51c>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1620 <readkey+0x510>
movl   $0x10000007,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     16c4 <readkey+0x5b4>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    1654 <readkey+0x544>
movl   $0x10000004,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x41,%eax
jne    166d <readkey+0x55d>
movl   $0x1000000e,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x42,%eax
jne    1686 <readkey+0x576>
movl   $0x1000000f,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x44,%eax
jne    169f <readkey+0x58f>
movl   $0x10000010,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x43,%eax
jne    16b8 <readkey+0x5a8>
movl   $0x10000011,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
mov    -0x8(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     16f8 <readkey+0x5e8>
movsbl -0x9(%rbp),%eax
cmp    $0x7e,%eax
jne    16ec <readkey+0x5dc>
movl   $0x10000005,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x41,%eax
jne    1711 <readkey+0x601>
movl   $0x10000000,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x42,%eax
jne    172a <readkey+0x61a>
movl   $0x10000001,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x44,%eax
jne    1743 <readkey+0x633>
movl   $0x10000002,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x43,%eax
jne    175c <readkey+0x64c>
movl   $0x10000003,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x48,%eax
jne    1775 <readkey+0x665>
movl   $0x10000006,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x46,%eax
jne    178e <readkey+0x67e>
movl   $0x10000007,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x45,%eax
jne    17a7 <readkey+0x697>
movl   $0x1000001f,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x47,%eax
jne    17c0 <readkey+0x6b0>
movl   $0x1000001f,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x31,%eax
jne    17dd <readkey+0x6cd>
mov    -0x8(%rbp),%eax
or     $0x100,%eax
mov    %eax,-0x8(%rbp)
jmp    18ad <readkey+0x79d>
movsbl -0x9(%rbp),%eax
cmp    $0x32,%eax
jne    17f8 <readkey+0x6e8>
mov    -0x8(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x8(%rbp)
jmp    18a8 <readkey+0x798>
movsbl -0x9(%rbp),%eax
cmp    $0x33,%eax
jne    1813 <readkey+0x703>
mov    -0x8(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x8(%rbp)
jmp    18a3 <readkey+0x793>
movsbl -0x9(%rbp),%eax
cmp    $0x34,%eax
jne    1830 <readkey+0x720>
mov    -0x8(%rbp),%eax
or     $0x20000,%eax
mov    %eax,-0x8(%rbp)
jmp    189e <readkey+0x78e>
movsbl -0x9(%rbp),%eax
cmp    $0x35,%eax
jne    184b <readkey+0x73b>
mov    -0x8(%rbp),%eax
or     $0x10,%eax
mov    %eax,-0x8(%rbp)
jmp    1899 <readkey+0x789>
movsbl -0x9(%rbp),%eax
cmp    $0x36,%eax
jne    1866 <readkey+0x756>
mov    -0x8(%rbp),%eax
or     $0x40,%eax
mov    %eax,-0x8(%rbp)
jmp    1894 <readkey+0x784>
movsbl -0x9(%rbp),%eax
cmp    $0x5b,%eax
jne    1883 <readkey+0x773>
mov    -0x8(%rbp),%eax
or     $0x80,%eax
mov    %eax,-0x8(%rbp)
jmp    188f <readkey+0x77f>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
jmp    1894 <readkey+0x784>
jmp    1899 <readkey+0x789>
jmp    189e <readkey+0x78e>
jmp    18a3 <readkey+0x793>
jmp    18a8 <readkey+0x798>
jmp    18ad <readkey+0x79d>
jmp    18b2 <readkey+0x7a2>
jmp    18b7 <readkey+0x7a7>
jmp    18bc <readkey+0x7ac>
jmp    18c1 <readkey+0x7b1>
jmp    18c6 <readkey+0x7b6>
jmp    18cb <readkey+0x7bb>
jmp    18d0 <readkey+0x7c0>
jmp    18d5 <readkey+0x7c5>
jmp    18da <readkey+0x7ca>
jmp    18df <readkey+0x7cf>
jmp    18e4 <readkey+0x7d4>
jmp    18e9 <readkey+0x7d9>
jmp    18ee <readkey+0x7de>
jmp    18f3 <readkey+0x7e3>
jmp    18f8 <readkey+0x7e8>
jmp    19e6 <readkey+0x8d6>
mov    -0x8(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     197c <readkey+0x86c>
movsbl -0x9(%rbp),%eax
cmp    $0x50,%eax
jne    1925 <readkey+0x815>
movl   $0x10000012,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x51,%eax
jne    193e <readkey+0x82e>
movl   $0x10000013,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x52,%eax
jne    1957 <readkey+0x847>
movl   $0x10000014,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x53,%eax
jne    1970 <readkey+0x860>
movl   $0x10000015,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
cmp    $0x5b,%eax
jne    1997 <readkey+0x887>
mov    -0x8(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    19dc <readkey+0x8cc>
movsbl -0x9(%rbp),%eax
cmp    $0x4f,%eax
jne    19b2 <readkey+0x8a2>
mov    -0x8(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x8(%rbp)
jmp    19d7 <readkey+0x8c7>
movsbl -0x9(%rbp),%eax
cmp    $0x1b,%eax
jne    19cb <readkey+0x8bb>
movl   $0x1000001e,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
jmp    19dc <readkey+0x8cc>
jmp    19e1 <readkey+0x8d1>
jmp    19e6 <readkey+0x8d6>
jmp    19eb <readkey+0x8db>
mov    -0x8(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1a26 <readkey+0x916>
movsbl -0x9(%rbp),%eax
cmp    $0x1b,%eax
jne    1a15 <readkey+0x905>
mov    -0x8(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1a21 <readkey+0x911>
movsbl -0x9(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1a2b <readkey+0x91b>
jmp    1a26 <readkey+0x916>
jmp    111f <readkey+0xf>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<readkey>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %ebp,%ebp
mov    0x2ebc(%rip),%r14
lea    0x7(%rsp),%r15
lea    0xee4(%rip),%r12
lea    0xec9(%rip),%r13
nopw   0x0(%rax,%rax,1)
mov    (%r14),%edi
mov    %r15,%rsi
mov    $0x1,%edx
call   1030 <read@plt>
test   $0x1,%bpl
jne    1170 <readkey+0x60>
test   $0x1,%bpl
jne    1140 <readkey+0x30>
movsbl 0x7(%rsp),%eax
cmp    $0x1b,%eax
jne    151b <readkey+0x40b>
or     $0x1,%ebp
jmp    1140 <readkey+0x30>
nop
test   $0x2,%bpl
jne    11a0 <readkey+0x90>
movsbl 0x7(%rsp),%ecx
test   $0x4,%bpl
jne    137d <readkey+0x26d>
cmp    $0x4f,%cl
je     1289 <readkey+0x179>
cmp    $0x5b,%cl
jne    13b6 <readkey+0x2a6>
or     $0x2,%ebp
jmp    1156 <readkey+0x46>
nopl   0x0(%rax)
test   $0x80,%bpl
jne    1398 <readkey+0x288>
test   $0x100,%ebp
jne    1231 <readkey+0x121>
test   $0x8,%bpl
jne    1291 <readkey+0x181>
test   $0x20,%bpl
jne    141a <readkey+0x30a>
test   $0x20000,%ebp
jne    1444 <readkey+0x334>
test   $0x10,%bpl
jne    146e <readkey+0x35e>
movsbl 0x7(%rsp),%r8d
test   $0x40,%bpl
jne    14a8 <readkey+0x398>
lea    -0x31(%r8),%ecx
cmp    $0x2a,%cl
ja     14e6 <readkey+0x3d6>
mov    $0x10000006,%r9d
mov    $0x10000003,%esi
mov    $0x10000002,%edi
mov    $0x10000001,%ebx
mov    $0x10000000,%eax
movzbl %cl,%ecx
lea    0xf43(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
or     $0x100,%ebp
jmp    1156 <readkey+0x46>
test   $0x200,%ebp
jne    13cb <readkey+0x2bb>
test   $0x400,%ebp
jne    13e0 <readkey+0x2d0>
test   $0x800,%ebp
jne    13f5 <readkey+0x2e5>
movsbl 0x7(%rsp),%ecx
test   $0x1000,%ebp
jne    140a <readkey+0x2fa>
lea    -0x35(%rcx),%eax
cmp    $0x4,%al
ja     14c6 <readkey+0x3b6>
movzbl %al,%eax
movslq 0x0(%r13,%rax,4),%rax
add    %r13,%rax
jmp    *%rax
or     $0x200,%ebp
jmp    1156 <readkey+0x46>
or     $0x4,%ebp
jmp    1156 <readkey+0x46>
test   $0x2000,%ebp
jne    142f <readkey+0x31f>
test   $0x4000,%ebp
jne    1459 <readkey+0x349>
test   $0x8000,%ebp
jne    1496 <readkey+0x386>
movsbl 0x7(%rsp),%r8d
test   $0x10000,%ebp
jne    14b7 <readkey+0x3a7>
lea    -0x30(%r8),%ecx
cmp    $0x4e,%cl
ja     14e6 <readkey+0x3d6>
mov    $0x1000000d,%r9d
mov    $0x1000000c,%esi
mov    $0x1000000b,%edi
mov    $0x1000000a,%ebx
mov    $0x10000008,%eax
movzbl %cl,%ecx
movslq (%r12,%rcx,4),%rcx
add    %r12,%rcx
jmp    *%rcx
or     $0x2000,%ebp
jmp    1156 <readkey+0x46>
or     $0x400,%ebp
jmp    1156 <readkey+0x46>
or     $0x800,%ebp
jmp    1156 <readkey+0x46>
or     $0x1000,%ebp
jmp    1156 <readkey+0x46>
or     $0x4000,%ebp
jmp    1156 <readkey+0x46>
or     $0x8000,%ebp
jmp    1156 <readkey+0x46>
or     $0x10000,%ebp
jmp    1156 <readkey+0x46>
or     $0x8,%ebp
jmp    1156 <readkey+0x46>
or     $0x20,%ebp
jmp    1156 <readkey+0x46>
or     $0x20000,%ebp
jmp    1156 <readkey+0x46>
or     $0x10,%ebp
jmp    1156 <readkey+0x46>
or     $0x40,%ebp
jmp    1156 <readkey+0x46>
or     $0x80,%ebp
jmp    1156 <readkey+0x46>
lea    -0x50(%rcx),%edx
mov    %ecx,%eax
cmp    $0x4,%dl
jae    151b <readkey+0x40b>
movzbl %dl,%eax
add    $0x10000012,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%eax
lea    -0x41(%rax),%ecx
cmp    $0x5,%cl
jae    151b <readkey+0x40b>
movzbl %cl,%eax
add    $0x10000012,%eax
jmp    151b <readkey+0x40b>
mov    $0x1000001e,%eax
cmp    $0x1b,%cl
je     151b <readkey+0x40b>
mov    %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x10000016,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x10000017,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x10000018,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
cmp    $0x7e,%cl
mov    $0x10000019,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x10000009,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x1000001a,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x10000007,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x1000001b,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
mov    0x7(%rsp),%cl
lea    -0x41(%rcx),%eax
cmp    $0x3,%al
ja     14eb <readkey+0x3db>
movzbl %al,%eax
lea    0xccd(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x1000000e,%eax
jmp    151b <readkey+0x40b>
movsbl 0x7(%rsp),%ecx
cmp    $0x7e,%ecx
mov    $0x1000001c,%eax
cmovne %ecx,%eax
jmp    151b <readkey+0x40b>
cmp    $0x7e,%r8b
mov    $0x10000005,%eax
cmovne %r8d,%eax
jmp    151b <readkey+0x40b>
cmp    $0x7e,%r8b
mov    $0x1000001d,%eax
cmovne %r8d,%eax
jmp    151b <readkey+0x40b>
mov    $0x10000006,%eax
cmp    $0x7e,%cl
je     151b <readkey+0x40b>
jmp    13c4 <readkey+0x2b4>
mov    %ebx,%eax
jmp    151b <readkey+0x40b>
mov    %edi,%eax
jmp    151b <readkey+0x40b>
mov    %r9d,%eax
jmp    151b <readkey+0x40b>
mov    %esi,%eax
jmp    151b <readkey+0x40b>
mov    %r8d,%eax
jmp    151b <readkey+0x40b>
mov    $0x10000004,%eax
cmp    $0x7e,%cl
je     151b <readkey+0x40b>
movsbl %cl,%eax
jmp    151b <readkey+0x40b>
mov    $0x1000001f,%eax
jmp    151b <readkey+0x40b>
mov    $0x1000000f,%eax
jmp    151b <readkey+0x40b>
mov    $0x10000011,%eax
jmp    151b <readkey+0x40b>
mov    $0x10000010,%eax
jmp    151b <readkey+0x40b>
mov    $0x10000007,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@STDIN_FILENO = global i32 0
define i32 @readkey() {
%1 = alloca [1 x i8]
%2 = getelementptr inbounds [1 x i8], [1 x i8]* %1, i64 0, i64 0
br label %3
3: ; preds = %192, %0
%4 = phi i32 [ 0, %0 ], [ %193, %192 ]
%5 = load i32, i32* @STDIN_FILENO
%6 = call i32 @read(i32 %5, i8* %2, i32 1)
%7 = and i32 %4, 1
%8 = icmp eq i32 %7, 0
br i1 %8, label %183, label %9
9: ; preds = %3
%10 = and i32 %4, 2
%11 = icmp eq i32 %10, 0
br i1 %11, label %167, label %12
12: ; preds = %9
%13 = and i32 %4, 128
%14 = icmp eq i32 %13, 0
br i1 %14, label %21, label %15
15: ; preds = %12
%16 = load i8, i8* %2
%17 = add i8 %16, -65
%18 = icmp ult i8 %17, 5
br i1 %18, label %204, label %19
19: ; preds = %15
%20 = sext i8 %16 to i32
br label %212
21: ; preds = %12
%22 = and i32 %4, 256
%23 = icmp eq i32 %22, 0
br i1 %23, label %67, label %24
24: ; preds = %21
%25 = and i32 %4, 512
%26 = icmp eq i32 %25, 0
br i1 %26, label %32, label %27
27: ; preds = %24
%28 = load i8, i8* %2
%29 = icmp eq i8 %28, 126
%30 = sext i8 %28 to i32
%31 = select i1 %29, i32 268435478, i32 %30
br label %212
32: ; preds = %24
%33 = and i32 %4, 1024
%34 = icmp eq i32 %33, 0
br i1 %34, label %40, label %35
35: ; preds = %32
%36 = load i8, i8* %2
%37 = icmp eq i8 %36, 126
%38 = sext i8 %36 to i32
%39 = select i1 %37, i32 268435479, i32 %38
br label %212
40: ; preds = %32
%41 = and i32 %4, 2048
%42 = icmp eq i32 %41, 0
br i1 %42, label %48, label %43
43: ; preds = %40
%44 = load i8, i8* %2
%45 = icmp eq i8 %44, 126
%46 = sext i8 %44 to i32
%47 = select i1 %45, i32 268435480, i32 %46
br label %212
48: ; preds = %40
%49 = and i32 %4, 4096
%50 = icmp eq i32 %49, 0
%51 = load i8, i8* %2
br i1 %50, label %56, label %52
52: ; preds = %48
%53 = icmp eq i8 %51, 126
%54 = sext i8 %51 to i32
%55 = select i1 %53, i32 268435481, i32 %54
br label %212
56: ; preds = %48
switch i8 %51, label %65 [
i8 126, label %196
i8 53, label %57
i8 55, label %59
i8 56, label %61
i8 57, label %63
]
57: ; preds = %56
%58 = or i32 %4, 512
br label %183
59: ; preds = %56
%60 = or i32 %4, 1024
br label %183
61: ; preds = %56
%62 = or i32 %4, 2048
br label %183
63: ; preds = %56
%64 = or i32 %4, 4096
br label %183
65: ; preds = %56
%66 = sext i8 %51 to i32
br label %212
67: ; preds = %21
%68 = and i32 %4, 8
%69 = icmp eq i32 %68, 0
br i1 %69, label %113, label %70
70: ; preds = %67
%71 = and i32 %4, 8192
%72 = icmp eq i32 %71, 0
br i1 %72, label %78, label %73
73: ; preds = %70
%74 = load i8, i8* %2
%75 = icmp eq i8 %74, 126
%76 = sext i8 %74 to i32
%77 = select i1 %75, i32 268435482, i32 %76
br label %212
78: ; preds = %70
%79 = and i32 %4, 16384
%80 = icmp eq i32 %79, 0
br i1 %80, label %86, label %81
81: ; preds = %78
%82 = load i8, i8* %2
%83 = icmp eq i8 %82, 126
%84 = sext i8 %82 to i32
%85 = select i1 %83, i32 268435483, i32 %84
br label %212
86: ; preds = %78
%87 = and i32 %4, 32768
%88 = icmp eq i32 %87, 0
br i1 %88, label %94, label %89
89: ; preds = %86
%90 = load i8, i8* %2
%91 = icmp eq i8 %90, 126
%92 = sext i8 %90 to i32
%93 = select i1 %91, i32 268435484, i32 %92
br label %212
94: ; preds = %86
%95 = and i32 %4, 65536
%96 = icmp eq i32 %95, 0
%97 = load i8, i8* %2
br i1 %96, label %102, label %98
98: ; preds = %94
%99 = icmp eq i8 %97, 126
%100 = sext i8 %97 to i32
%101 = select i1 %99, i32 268435485, i32 %100
br label %212
102: ; preds = %94
switch i8 %97, label %111 [
i8 126, label %196
i8 65, label %198
i8 66, label %200
i8 68, label %202
i8 67, label %210
i8 48, label %103
i8 49, label %105
i8 51, label %107
i8 52, label %109
]
103: ; preds = %102
%104 = or i32 %4, 8192
br label %183
105: ; preds = %102
%106 = or i32 %4, 16384
br label %183
107: ; preds = %102
%108 = or i32 %4, 32768
br label %183
109: ; preds = %102
%110 = or i32 %4, 65536
br label %183
111: ; preds = %102
%112 = sext i8 %97 to i32
br label %212
113: ; preds = %67
%114 = and i32 %4, 32
%115 = icmp eq i32 %114, 0
br i1 %115, label %121, label %116
116: ; preds = %113
%117 = load i8, i8* %2
%118 = icmp eq i8 %117, 126
%119 = sext i8 %117 to i32
%120 = select i1 %118, i32 268435465, i32 %119
br label %212
121: ; preds = %113
%122 = and i32 %4, 131072
%123 = icmp eq i32 %122, 0
br i1 %123, label %129, label %124
124: ; preds = %121
%125 = load i8, i8* %2
%126 = icmp eq i8 %125, 126
%127 = sext i8 %125 to i32
%128 = select i1 %126, i32 268435463, i32 %127
br label %212
129: ; preds = %121
%130 = and i32 %4, 16
%131 = icmp eq i32 %130, 0
br i1 %131, label %140, label %132
132: ; preds = %129
%133 = load i8, i8* %2
switch i8 %133, label %138 [
i8 126, label %212
i8 65, label %134
i8 66, label %135
i8 68, label %136
i8 67, label %137
]
134: ; preds = %132
br label %212
135: ; preds = %132
br label %212
136: ; preds = %132
br label %212
137: ; preds = %132
br label %212
138: ; preds = %132
%139 = sext i8 %133 to i32
br label %212
140: ; preds = %129
%141 = and i32 %4, 64
%142 = icmp eq i32 %141, 0
%143 = load i8, i8* %2
br i1 %142, label %148, label %144
144: ; preds = %140
%145 = icmp eq i8 %143, 126
%146 = sext i8 %143 to i32
%147 = select i1 %145, i32 268435461, i32 %146
br label %212
148: ; preds = %140
switch i8 %143, label %165 [
i8 65, label %196
i8 66, label %198
i8 68, label %200
i8 67, label %202
i8 72, label %210
i8 70, label %212
i8 69, label %149
i8 71, label %150
i8 49, label %151
i8 50, label %153
i8 51, label %155
i8 52, label %157
i8 53, label %159
i8 54, label %161
i8 91, label %163
]
149: ; preds = %148
br label %212
150: ; preds = %148
br label %212
151: ; preds = %148
%152 = or i32 %4, 256
br label %183
153: ; preds = %148
%154 = or i32 %4, 8
br label %183
155: ; preds = %148
%156 = or i32 %4, 32
br label %183
157: ; preds = %148
%158 = or i32 %4, 131072
br label %183
159: ; preds = %148
%160 = or i32 %4, 16
br label %183
161: ; preds = %148
%162 = or i32 %4, 64
br label %183
163: ; preds = %148
%164 = or i32 %4, 128
br label %183
165: ; preds = %148
%166 = sext i8 %143 to i32
br label %212
167: ; preds = %9
%168 = and i32 %4, 4
%169 = icmp eq i32 %168, 0
%170 = load i8, i8* %2
br i1 %169, label %176, label %171
171: ; preds = %167
%172 = add i8 %170, -80
%173 = icmp ult i8 %172, 4
br i1 %173, label %207, label %174
174: ; preds = %171
%175 = sext i8 %170 to i32
br label %212
176: ; preds = %167
switch i8 %170, label %181 [
i8 91, label %177
i8 79, label %179
i8 27, label %196
]
177: ; preds = %176
%178 = or i32 %4, 2
br label %183
179: ; preds = %176
%180 = or i32 %4, 4
br label %183
181: ; preds = %176
%182 = sext i8 %170 to i32
br label %212
183: ; preds = %57, %61, %63, %59, %151, %155, %159, %163, %161, %157, %153, %105, %109, %107, %103, %177, %179, %3
%184 = phi i32 [ %58, %57 ], [ %60, %59 ], [ %62, %61 ], [ %64, %63 ], [ %104, %103 ], [ %106, %105 ], [ %108, %107 ], [ %110, %109 ], [ %152, %151 ], [ %154, %153 ], [ %156, %155 ], [ %158, %157 ], [ %160, %159 ], [ %162, %161 ], [ %164, %163 ], [ %178, %177 ], [ %180, %179 ], [ %4, %3 ]
%185 = and i32 %184, 1
%186 = icmp eq i32 %185, 0
br i1 %186, label %187, label %192
187: ; preds = %183
%188 = load i8, i8* %2
%189 = icmp eq i8 %188, 27
br i1 %189, label %190, label %194
190: ; preds = %187
%191 = or i32 %184, 1
br label %192
192: ; preds = %190, %183
%193 = phi i32 [ %184, %183 ], [ %191, %190 ]
br label %3
194: ; preds = %187
%195 = sext i8 %188 to i32
br label %212
196: ; preds = %56, %102, %148, %176
%197 = phi i32 [ 268435486, %176 ], [ 268435456, %148 ], [ 268435464, %102 ], [ 268435462, %56 ]
br label %212
198: ; preds = %102, %148
%199 = phi i32 [ 268435457, %148 ], [ 268435466, %102 ]
br label %212
200: ; preds = %102, %148
%201 = phi i32 [ 268435458, %148 ], [ 268435467, %102 ]
br label %212
202: ; preds = %102, %148
%203 = phi i32 [ 268435459, %148 ], [ 268435468, %102 ]
br label %212
204: ; preds = %15
%205 = zext i8 %17 to i32
%206 = add nuw nsw i32 %205, 268435474
br label %212
207: ; preds = %171
%208 = zext i8 %172 to i32
%209 = add nuw nsw i32 %208, 268435474
br label %212
210: ; preds = %102, %148
%211 = phi i32 [ 268435462, %148 ], [ 268435469, %102 ]
br label %212
212: ; preds = %148, %210, %207, %204, %202, %200, %198, %196, %144, %124, %116, %98, %89, %81, %73, %52, %43, %35, %27, %132, %194, %181, %174, %165, %150, %149, %138, %137, %136, %135, %134, %111, %65, %19
%213 = phi i32 [ %20, %19 ], [ %195, %194 ], [ %66, %65 ], [ %112, %111 ], [ 268435470, %134 ], [ 268435471, %135 ], [ 268435472, %136 ], [ 268435473, %137 ], [ %139, %138 ], [ 268435487, %149 ], [ 268435487, %150 ], [ %166, %165 ], [ %175, %174 ], [ %182, %181 ], [ 268435460, %132 ], [ %31, %27 ], [ %39, %35 ], [ %47, %43 ], [ %55, %52 ], [ %77, %73 ], [ %85, %81 ], [ %93, %89 ], [ %101, %98 ], [ %120, %116 ], [ %128, %124 ], [ %147, %144 ], [ %197, %196 ], [ %199, %198 ], [ %201, %200 ], [ %203, %202 ], [ %206, %204 ], [ %209, %207 ], [ %211, %210 ], [ 268435463, %148 ]
ret i32 %213
}