symbol() {
  extern symbuf[], ctab[], peeksym, peekc, xeof, line, *csym, cval;
  auto b, c, ct, *sp;
  if (peeksym >= 0) {
    c = peeksym;
    peeksym = -1;
    return (c);
  }
  if (peekc) {
    c = peekc;
    peekc = 0;
  } else {
    if (xeof)
      return (0);
    c = xread();
  }
loop:
  ct = ctab[c];
  if (ct == 0) {
    xeof = 1;
    return (0);
  }
  if (ct == 126) {
    if (c == '\n')
      line = line + 1;
    c = xread();
    goto loop;
  }
  if (c == '=')
    return (subseq('=', 80, 60));
  if (c == '<')
    return (subseq('=', 63, 62));
  if (c == '>')
    return (subseq('=', 65, 64));
  if (c == '!')
    return (subseq('=', 34, 61));
  if (c == '$') {
    if (subseq('(', 0, 1))
      return (2);
    if (subseq(')', 0, 1))
      return (3);
  }
  if (c == '/') {
    if (subseq('*', 1, 0))
      return (43);
  com:
    c = xread();
  com1:
    if (c == 4) {
      xeof = 1;
      error('*/');
      return (0);
    }
    if (c == '\n')
      line = line + 1;
    if (c != '*')
      goto com;
    c = xread();
    if (c != '/')
      goto com1;
    c = xread();
    goto loop;
  }
  if (ct == 124) {
    cval = 0;
    if (c == '0')
      b = 8;
    else
      b = 10;
    while (c >= '0' & c <= '9') {
      cval = cval * b + c - '0';
      c = xread();
    }
    peekc = c;
    return (21);
  }
  if (c == '\'') {
    getcc();
    return (21);
  }
  if (ct == 123) {
    sp = symbuf;
    while (ct == 123 | ct == 124) {
      if (sp < symbuf + 9) {
        *sp = c;
        sp = sp + 1;
      }
      ct = ctab[c = xread()];
    }
    *sp = 0;
    peekc = c;
    csym = lookup();
    if (csym[0] == 1) {
      cval = csym[1];
      return (19);
    }
    return (20);
  }
  if (ct == 127) {
    error('sy');
    c = xread();
    goto loop;
  }
  return (ctab[c]);
}


x86 assembly (clang, -O0):
<symbol>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    0x2e41(%rip),%rax
cmpl   $0x0,(%rax)
jl     118c <symbol+0x3c>
mov    0x2e31(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0xc(%rbp)
mov    0x2e25(%rip),%rax
movl   $0xffffffff,(%rax)
mov    -0xc(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
mov    0x2e25(%rip),%rax
cmpl   $0x0,(%rax)
je     11ba <symbol+0x6a>
mov    0x2e15(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0xc(%rbp)
mov    0x2e09(%rip),%rax
movl   $0x0,(%rax)
jmp    11e0 <symbol+0x90>
mov    0x2e27(%rip),%rax
cmpl   $0x0,(%rax)
je     11d6 <symbol+0x86>
movl   $0x0,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
jmp    11e5 <symbol+0x95>
movslq -0xc(%rbp),%rcx
mov    0x2de0(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
jne    1219 <symbol+0xc9>
mov    0x2de1(%rip),%rax
movl   $0x1,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x7e,-0x10(%rbp)
jne    1251 <symbol+0x101>
cmpl   $0xa,-0xc(%rbp)
jne    1242 <symbol+0xf2>
mov    0x2dac(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2da0(%rip),%rax
mov    %ecx,(%rax)
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
jmp    11e5 <symbol+0x95>
cmpl   $0x3d,-0xc(%rbp)
jne    1279 <symbol+0x129>
mov    $0x3d,%edi
mov    $0x50,%esi
mov    $0x3c,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
mov    %eax,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x3c,-0xc(%rbp)
jne    12a1 <symbol+0x151>
mov    $0x3d,%edi
mov    $0x3f,%esi
mov    $0x3e,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
mov    %eax,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x3e,-0xc(%rbp)
jne    12c9 <symbol+0x179>
mov    $0x3d,%edi
mov    $0x41,%esi
mov    $0x40,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
mov    %eax,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x21,-0xc(%rbp)
jne    12ee <symbol+0x19e>
mov    $0x3d,%edx
mov    $0x22,%esi
mov    %edx,%edi
mov    $0x0,%al
call   1070 <subseq@plt>
mov    %eax,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x24,-0xc(%rbp)
jne    134d <symbol+0x1fd>
mov    $0x28,%edi
xor    %esi,%esi
mov    $0x1,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
cmp    $0x0,%eax
je     1320 <symbol+0x1d0>
movl   $0x2,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
mov    $0x29,%edi
xor    %esi,%esi
mov    $0x1,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
cmp    $0x0,%eax
je     1348 <symbol+0x1f8>
movl   $0x3,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
jmp    134d <symbol+0x1fd>
cmpl   $0x2f,-0xc(%rbp)
jne    1413 <symbol+0x2c3>
mov    $0x2a,%edi
mov    $0x1,%esi
xor    %edx,%edx
mov    $0x0,%al
call   1070 <subseq@plt>
cmp    $0x0,%eax
je     137f <symbol+0x22f>
movl   $0x2b,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
jmp    1384 <symbol+0x234>
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
cmpl   $0x4,-0xc(%rbp)
jne    13bd <symbol+0x26d>
mov    0x2c49(%rip),%rax
movl   $0x1,(%rax)
mov    $0x2a2f,%edi
mov    $0x0,%al
call   1060 <error@plt>
movl   $0x0,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0xa,-0xc(%rbp)
jne    13dc <symbol+0x28c>
mov    0x2c12(%rip),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    0x2c06(%rip),%rax
mov    %ecx,(%rax)
cmpl   $0x2a,-0xc(%rbp)
je     13eb <symbol+0x29b>
jmp    1384 <symbol+0x234>
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
cmpl   $0x2f,-0xc(%rbp)
je     1404 <symbol+0x2b4>
jmp    138e <symbol+0x23e>
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
jmp    11e5 <symbol+0x95>
cmpl   $0x7c,-0x10(%rbp)
jne    14b3 <symbol+0x363>
mov    0x2b84(%rip),%rax
movl   $0x0,(%rax)
cmpl   $0x30,-0xc(%rbp)
jne    1440 <symbol+0x2f0>
movl   $0x8,-0x8(%rbp)
jmp    1447 <symbol+0x2f7>
movl   $0xa,-0x8(%rbp)
jmp    144c <symbol+0x2fc>
cmpl   $0x30,-0xc(%rbp)
setge  %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x39,-0xc(%rbp)
setle  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     149b <symbol+0x34b>
mov    0x2b31(%rip),%rax
mov    (%rax),%ecx
imul   -0x8(%rbp),%ecx
add    -0xc(%rbp),%ecx
sub    $0x30,%ecx
mov    0x2b1e(%rip),%rax
mov    %ecx,(%rax)
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
jmp    144c <symbol+0x2fc>
mov    -0xc(%rbp),%ecx
mov    0x2b13(%rip),%rax
mov    %ecx,(%rax)
movl   $0x15,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x27,-0xc(%rbp)
jne    14d0 <symbol+0x380>
mov    $0x0,%al
call   1030 <getcc@plt>
movl   $0x15,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x7b,-0x10(%rbp)
jne    15bd <symbol+0x46d>
mov    0x2adf(%rip),%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x7b,-0x10(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x7c,-0x10(%rbp)
sete   %cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     1552 <symbol+0x402>
mov    0x2ab0(%rip),%rax
add    $0x24,%rax
cmp    %rax,-0x18(%rbp)
jae    1533 <symbol+0x3e3>
mov    -0xc(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
movslq %eax,%rcx
mov    0x2a89(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x10(%rbp)
jmp    14e5 <symbol+0x395>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0xc(%rbp),%ecx
mov    0x2a52(%rip),%rax
mov    %ecx,(%rax)
mov    $0x0,%al
call   1040 <lookup@plt>
movslq %eax,%rcx
mov    0x2a5f(%rip),%rax
mov    %rcx,(%rax)
mov    0x2a55(%rip),%rax
mov    (%rax),%rax
cmpl   $0x1,(%rax)
jne    15b1 <symbol+0x461>
mov    0x2a42(%rip),%rax
mov    (%rax),%rax
mov    0x4(%rax),%ecx
mov    0x2a05(%rip),%rax
mov    %ecx,(%rax)
movl   $0x13,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
movl   $0x14,-0x4(%rbp)
jmp    15f3 <symbol+0x4a3>
cmpl   $0x7f,-0x10(%rbp)
jne    15e2 <symbol+0x492>
mov    $0x7379,%edi
mov    $0x0,%al
call   1060 <error@plt>
mov    $0x0,%al
call   1050 <xread@plt>
mov    %eax,-0xc(%rbp)
jmp    11e5 <symbol+0x95>
movslq -0xc(%rbp),%rcx
mov    0x29e3(%rip),%rax
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<symbol>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    0x2e3e(%rip),%rax
mov    (%rax),%ebp
test   %ebp,%ebp
js     117f <symbol+0x2f>
movl   $0xffffffff,(%rax)
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2e32(%rip),%rax
mov    (%rax),%ebx
test   %ebx,%ebx
je     12b3 <symbol+0x163>
movl   $0x0,(%rax)
mov    0x2e33(%rip),%r15
mov    0x2e3c(%rip),%r12
lea    0xe55(%rip),%r13
jmp    11c5 <symbol+0x75>
nopl   (%rax)
mov    $0x7379,%edi
xor    %eax,%eax
call   1060 <error@plt>
xor    %eax,%eax
call   1050 <xread@plt>
mov    %eax,%ebx
movslq %ebx,%r14
mov    (%r15,%r14,4),%ebp
cmp    $0x7e,%ebp
je     1230 <symbol+0xe0>
test   %ebp,%ebp
je     12f3 <symbol+0x1a3>
lea    -0x21(%rbx),%eax
cmp    $0x1d,%eax
ja     123c <symbol+0xec>
movslq 0x0(%r13,%rax,4),%rax
add    %r13,%rax
jmp    *%rax
mov    $0x28,%edi
xor    %esi,%esi
mov    $0x1,%edx
xor    %eax,%eax
call   1070 <subseq@plt>
test   %eax,%eax
jne    140e <symbol+0x2be>
mov    $0x29,%edi
xor    %esi,%esi
mov    $0x1,%edx
xor    %eax,%eax
call   1070 <subseq@plt>
test   %eax,%eax
jne    1422 <symbol+0x2d2>
cmp    $0x7f,%ebp
je     11b0 <symbol+0x60>
jmp    1307 <symbol+0x1b7>
nopl   0x0(%rax,%rax,1)
cmp    $0xa,%ebx
jne    11bc <symbol+0x6c>
addl   $0x1,(%r12)
jmp    11bc <symbol+0x6c>
cmp    $0x7c,%ebp
je     142c <symbol+0x2dc>
cmp    $0x27,%ebx
je     1452 <symbol+0x302>
cmp    $0x7f,%ebp
je     11b0 <symbol+0x60>
jmp    1333 <symbol+0x1e3>
mov    $0x2a,%edi
mov    $0x1,%esi
xor    %edx,%edx
xor    %eax,%eax
call   1070 <subseq@plt>
test   %eax,%eax
jne    1418 <symbol+0x2c8>
xor    %eax,%eax
call   1050 <xread@plt>
xchg   %ax,%ax
cmp    $0x2a,%eax
jne    12a0 <symbol+0x150>
xor    %eax,%eax
call   1050 <xread@plt>
cmp    $0x2f,%eax
jne    1280 <symbol+0x130>
jmp    11bc <symbol+0x6c>
cs nopw 0x0(%rax,%rax,1)
cmp    $0xa,%eax
je     12ac <symbol+0x15c>
cmp    $0x4,%eax
je     12d3 <symbol+0x183>
jmp    1277 <symbol+0x127>
addl   $0x1,(%r12)
jmp    1277 <symbol+0x127>
mov    0x2d2e(%rip),%rax
xor    %ebp,%ebp
cmpl   $0x0,(%rax)
jne    116e <symbol+0x1e>
xor    %eax,%eax
call   1050 <xread@plt>
mov    %eax,%ebx
jmp    1196 <symbol+0x46>
mov    0x2d0e(%rip),%rax
movl   $0x1,(%rax)
xor    %ebp,%ebp
mov    $0x2a2f,%edi
xor    %eax,%eax
call   1060 <error@plt>
jmp    116e <symbol+0x1e>
mov    0x2cee(%rip),%rax
movl   $0x1,(%rax)
xor    %ebp,%ebp
jmp    116e <symbol+0x1e>
cmp    $0x7b,%ebp
mov    0x2ca7(%rip),%r12
je     1343 <symbol+0x1f3>
cmp    $0x7c,%ebp
jne    1463 <symbol+0x313>
mov    0x2c85(%rip),%rax
movl   $0x0,(%rax)
mov    $0x24,%ebx
jmp    14b6 <symbol+0x366>
cmp    $0x7b,%ebp
mov    0x2c7b(%rip),%r12
jne    116e <symbol+0x1e>
mov    0x2c76(%rip),%rbp
lea    0x24(%rbp),%r14
jmp    1367 <symbol+0x217>
xor    %eax,%eax
call   1050 <xread@plt>
mov    %eax,%ebx
cltq
mov    (%r15,%rax,4),%eax
add    $0xffffff85,%eax
cmp    $0x2,%eax
jae    1375 <symbol+0x225>
cmp    %r14,%rbp
jae    1350 <symbol+0x200>
mov    %ebx,0x0(%rbp)
add    $0x4,%rbp
jmp    1350 <symbol+0x200>
movl   $0x0,0x0(%rbp)
mov    %ebx,(%r12)
xor    %eax,%eax
call   1040 <lookup@plt>
cltq
mov    0x2c48(%rip),%rcx
mov    %rax,(%rcx)
mov    $0x14,%ebp
cmpl   $0x1,(%rax)
jne    116e <symbol+0x1e>
mov    0x4(%rax),%eax
mov    0x2bfd(%rip),%rcx
mov    %eax,(%rcx)
mov    $0x13,%ebp
jmp    116e <symbol+0x1e>
mov    $0x3d,%edi
mov    $0x22,%esi
mov    $0x3d,%edx
jmp    13f9 <symbol+0x2a9>
mov    $0x3d,%edi
mov    $0x3f,%esi
mov    $0x3e,%edx
jmp    13f9 <symbol+0x2a9>
mov    $0x3d,%edi
mov    $0x50,%esi
mov    $0x3c,%edx
jmp    13f9 <symbol+0x2a9>
mov    $0x3d,%edi
mov    $0x41,%esi
mov    $0x40,%edx
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <subseq@plt>
mov    $0x2,%ebp
jmp    116e <symbol+0x1e>
mov    $0x2b,%ebp
jmp    116e <symbol+0x1e>
mov    $0x3,%ebp
jmp    116e <symbol+0x1e>
mov    0x2b75(%rip),%r14
movl   $0x0,(%r14)
cmp    $0x30,%ebx
jne    146c <symbol+0x31c>
mov    $0x30,%ebx
mov    $0x8,%ebp
mov    0x2b68(%rip),%r12
jmp    1480 <symbol+0x330>
xor    %eax,%eax
call   1030 <getcc@plt>
mov    $0x15,%ebp
jmp    116e <symbol+0x1e>
mov    (%r15,%r14,4),%ebp
jmp    116e <symbol+0x1e>
lea    -0x30(%rbx),%eax
mov    $0xa,%ebp
cmp    $0x9,%eax
mov    0x2b3a(%rip),%r12
ja     14b6 <symbol+0x366>
add    $0xffffffd0,%ebx
mov    %ebx,(%r14)
xor    %eax,%eax
call   1050 <xread@plt>
mov    %eax,%ebx
add    $0xffffffd0,%eax
cmp    $0x9,%eax
ja     14b6 <symbol+0x366>
mov    (%r14),%eax
imul   %ebp,%eax
add    %ebx,%eax
add    $0xffffffd0,%eax
mov    %eax,(%r14)
xor    %eax,%eax
call   1050 <xread@plt>
mov    %eax,%ebx
add    $0xffffffd0,%eax
cmp    $0xa,%eax
jb     1497 <symbol+0x347>
mov    %ebx,(%r12)
mov    $0x15,%ebp
jmp    116e <symbol+0x1e>

LLVM IR (-O0):
@peeksym = external global i32
@peekc = external global i32
@xeof = external global i32
@ctab = external global [0 x i32]
@line = external global i32
@cval = external global i32
@symbuf = external global [0 x i32]
@csym = external global i32*
define i32 @symbol() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32*
%6 = load i32, i32* @peeksym
%7 = icmp sge i32 %6, 0
br i1 %7, label %8, label %11
8: ; preds = %0
%9 = load i32, i32* @peeksym
store i32 %9, i32* %3
store i32 -1, i32* @peeksym
%10 = load i32, i32* %3
store i32 %10, i32* %1
br label %191
11: ; preds = %0
%12 = load i32, i32* @peekc
%13 = icmp ne i32 %12, 0
br i1 %13, label %14, label %16
14: ; preds = %11
%15 = load i32, i32* @peekc
store i32 %15, i32* %3
store i32 0, i32* @peekc
br label %22
16: ; preds = %11
%17 = load i32, i32* @xeof
%18 = icmp ne i32 %17, 0
br i1 %18, label %19, label %20
19: ; preds = %16
store i32 0, i32* %1
br label %191
20: ; preds = %16
%21 = call i32 (...) @xread()
store i32 %21, i32* %3
br label %22
22: ; preds = %20, %14
br label %23
23: ; preds = %183, %104, %40, %22
%24 = load i32, i32* %3
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [0 x i32], [0 x i32]* @ctab, i64 0, i64 %25
%27 = load i32, i32* %26
store i32 %27, i32* %4
%28 = load i32, i32* %4
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %23
store i32 1, i32* @xeof
store i32 0, i32* %1
br label %191
31: ; preds = %23
%32 = load i32, i32* %4
%33 = icmp eq i32 %32, 126
br i1 %33, label %34, label %42
34: ; preds = %31
%35 = load i32, i32* %3
%36 = icmp eq i32 %35, 10
br i1 %36, label %37, label %40
37: ; preds = %34
%38 = load i32, i32* @line
%39 = add nsw i32 %38, 1
store i32 %39, i32* @line
br label %40
40: ; preds = %37, %34
%41 = call i32 (...) @xread()
store i32 %41, i32* %3
br label %23
42: ; preds = %31
%43 = load i32, i32* %3
%44 = icmp eq i32 %43, 61
br i1 %44, label %45, label %47
45: ; preds = %42
%46 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 80, i32 60)
store i32 %46, i32* %1
br label %191
47: ; preds = %42
%48 = load i32, i32* %3
%49 = icmp eq i32 %48, 60
br i1 %49, label %50, label %52
50: ; preds = %47
%51 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 63, i32 62)
store i32 %51, i32* %1
br label %191
52: ; preds = %47
%53 = load i32, i32* %3
%54 = icmp eq i32 %53, 62
br i1 %54, label %55, label %57
55: ; preds = %52
%56 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 65, i32 64)
store i32 %56, i32* %1
br label %191
57: ; preds = %52
%58 = load i32, i32* %3
%59 = icmp eq i32 %58, 33
br i1 %59, label %60, label %62
60: ; preds = %57
%61 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 34, i32 61)
store i32 %61, i32* %1
br label %191
62: ; preds = %57
%63 = load i32, i32* %3
%64 = icmp eq i32 %63, 36
br i1 %64, label %65, label %74
65: ; preds = %62
%66 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 40, i32 0, i32 1)
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %69
68: ; preds = %65
store i32 2, i32* %1
br label %191
69: ; preds = %65
%70 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 41, i32 0, i32 1)
%71 = icmp ne i32 %70, 0
br i1 %71, label %72, label %73
72: ; preds = %69
store i32 3, i32* %1
br label %191
73: ; preds = %69
br label %74
74: ; preds = %73, %62
%75 = load i32, i32* %3
%76 = icmp eq i32 %75, 47
br i1 %76, label %77, label %106
77: ; preds = %74
%78 = call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 42, i32 1, i32 0)
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %81
80: ; preds = %77
store i32 43, i32* %1
br label %191
81: ; preds = %77
br label %82
82: ; preds = %98, %81
%83 = call i32 (...) @xread()
store i32 %83, i32* %3
br label %84
84: ; preds = %103, %82
%85 = load i32, i32* %3
%86 = icmp eq i32 %85, 4
br i1 %86, label %87, label %89
87: ; preds = %84
store i32 1, i32* @xeof
%88 = call i32 (i32, ...) bitcast (i32 (...)* @error to i32 (i32, ...)*)(i32 10799)
store i32 0, i32* %1
br label %191
89: ; preds = %84
%90 = load i32, i32* %3
%91 = icmp eq i32 %90, 10
br i1 %91, label %92, label %95
92: ; preds = %89
%93 = load i32, i32* @line
%94 = add nsw i32 %93, 1
store i32 %94, i32* @line
br label %95
95: ; preds = %92, %89
%96 = load i32, i32* %3
%97 = icmp ne i32 %96, 42
br i1 %97, label %98, label %99
98: ; preds = %95
br label %82
99: ; preds = %95
%100 = call i32 (...) @xread()
store i32 %100, i32* %3
%101 = load i32, i32* %3
%102 = icmp ne i32 %101, 47
br i1 %102, label %103, label %104
103: ; preds = %99
br label %84
104: ; preds = %99
%105 = call i32 (...) @xread()
store i32 %105, i32* %3
br label %23
106: ; preds = %74
%107 = load i32, i32* %4
%108 = icmp eq i32 %107, 124
br i1 %108, label %109, label %134
109: ; preds = %106
store i32 0, i32* @cval
%110 = load i32, i32* %3
%111 = icmp eq i32 %110, 48
br i1 %111, label %112, label %113
112: ; preds = %109
store i32 8, i32* %2
br label %114
113: ; preds = %109
store i32 10, i32* %2
br label %114
114: ; preds = %113, %112
br label %115
115: ; preds = %124, %114
%116 = load i32, i32* %3
%117 = icmp sge i32 %116, 48
%118 = zext i1 %117 to i32
%119 = load i32, i32* %3
%120 = icmp sle i32 %119, 57
%121 = zext i1 %120 to i32
%122 = and i32 %118, %121
%123 = icmp ne i32 %122, 0
br i1 %123, label %124, label %132
124: ; preds = %115
%125 = load i32, i32* @cval
%126 = load i32, i32* %2
%127 = mul nsw i32 %125, %126
%128 = load i32, i32* %3
%129 = add nsw i32 %127, %128
%130 = sub nsw i32 %129, 48
store i32 %130, i32* @cval
%131 = call i32 (...) @xread()
store i32 %131, i32* %3
br label %115
132: ; preds = %115
%133 = load i32, i32* %3
store i32 %133, i32* @peekc
store i32 21, i32* %1
br label %191
134: ; preds = %106
%135 = load i32, i32* %3
%136 = icmp eq i32 %135, 39
br i1 %136, label %137, label %139
137: ; preds = %134
%138 = call i32 (...) @getcc()
store i32 21, i32* %1
br label %191
139: ; preds = %134
%140 = load i32, i32* %4
%141 = icmp eq i32 %140, 123
br i1 %141, label %142, label %180
142: ; preds = %139
store i32* getelementptr inbounds ([0 x i32], [0 x i32]* @symbuf, i64 0, i64 0), i32** %5
br label %143
143: ; preds = %160, %142
%144 = load i32, i32* %4
%145 = icmp eq i32 %144, 123
%146 = zext i1 %145 to i32
%147 = load i32, i32* %4
%148 = icmp eq i32 %147, 124
%149 = zext i1 %148 to i32
%150 = or i32 %146, %149
%151 = icmp ne i32 %150, 0
br i1 %151, label %152, label %165
152: ; preds = %143
%153 = load i32*, i32** %5
%154 = icmp ult i32* %153, getelementptr inbounds ([0 x i32], [0 x i32]* @symbuf, i64 0, i64 9)
br i1 %154, label %155, label %160
155: ; preds = %152
%156 = load i32, i32* %3
%157 = load i32*, i32** %5
store i32 %156, i32* %157
%158 = load i32*, i32** %5
%159 = getelementptr inbounds i32, i32* %158, i64 1
store i32* %159, i32** %5
br label %160
160: ; preds = %155, %152
%161 = call i32 (...) @xread()
store i32 %161, i32* %3
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds [0 x i32], [0 x i32]* @ctab, i64 0, i64 %162
%164 = load i32, i32* %163
store i32 %164, i32* %4
br label %143
165: ; preds = %143
%166 = load i32*, i32** %5
store i32 0, i32* %166
%167 = load i32, i32* %3
store i32 %167, i32* @peekc
%168 = call i32 (...) @lookup()
%169 = sext i32 %168 to i64
%170 = inttoptr i64 %169 to i32*
store i32* %170, i32** @csym
%171 = load i32*, i32** @csym
%172 = getelementptr inbounds i32, i32* %171, i64 0
%173 = load i32, i32* %172
%174 = icmp eq i32 %173, 1
br i1 %174, label %175, label %179
175: ; preds = %165
%176 = load i32*, i32** @csym
%177 = getelementptr inbounds i32, i32* %176, i64 1
%178 = load i32, i32* %177
store i32 %178, i32* @cval
store i32 19, i32* %1
br label %191
179: ; preds = %165
store i32 20, i32* %1
br label %191
180: ; preds = %139
%181 = load i32, i32* %4
%182 = icmp eq i32 %181, 127
br i1 %182, label %183, label %186
183: ; preds = %180
%184 = call i32 (i32, ...) bitcast (i32 (...)* @error to i32 (i32, ...)*)(i32 29561)
%185 = call i32 (...) @xread()
store i32 %185, i32* %3
br label %23
186: ; preds = %180
%187 = load i32, i32* %3
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds [0 x i32], [0 x i32]* @ctab, i64 0, i64 %188
%190 = load i32, i32* %189
store i32 %190, i32* %1
br label %191
191: ; preds = %186, %179, %175, %137, %132, %87, %80, %72, %68, %60, %55, %50, %45, %30, %19, %8
%192 = load i32, i32* %1
ret i32 %192
}

LLVM IR (-O2):
@peeksym = external global i32
@peekc = external global i32
@xeof = external global i32
@ctab = external global [0 x i32]
@line = external global i32
@cval = external global i32
@symbuf = external global [0 x i32]
@csym = external global i32*
define i32 @symbol() {
%1 = load i32, i32* @peeksym
%2 = icmp sgt i32 %1, -1
br i1 %2, label %3, label %4
3: ; preds = %0
store i32 -1, i32* @peeksym
br label %119
4: ; preds = %0
%5 = load i32, i32* @peekc
%6 = icmp eq i32 %5, 0
br i1 %6, label %8, label %7
7: ; preds = %4
store i32 0, i32* @peekc
br label %13
8: ; preds = %4
%9 = load i32, i32* @xeof
%10 = icmp eq i32 %9, 0
br i1 %10, label %11, label %119
11: ; preds = %8
%12 = tail call i32 (...) @xread()
br label %13
13: ; preds = %11, %7
%14 = phi i32 [ %12, %11 ], [ %5, %7 ]
br label %15
15: ; preds = %13, %26
%16 = phi i32 [ %27, %26 ], [ %14, %13 ]
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [0 x i32], [0 x i32]* @ctab, i64 0, i64 %17
%19 = load i32, i32* %18
switch i32 %19, label %28 [
i32 0, label %20
i32 126, label %21
]
20: ; preds = %15
store i32 1, i32* @xeof
br label %119
21: ; preds = %15
%22 = icmp eq i32 %16, 10
br i1 %22, label %23, label %26
23: ; preds = %21
%24 = load i32, i32* @line
%25 = add nsw i32 %24, 1
store i32 %25, i32* @line
br label %26
26: ; preds = %56, %21, %23, %117
%27 = tail call i32 (...) @xread()
br label %15
28: ; preds = %15
switch i32 %16, label %59 [
i32 61, label %29
i32 60, label %31
i32 62, label %33
i32 33, label %35
i32 36, label %37
i32 47, label %43
]
29: ; preds = %28
%30 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 80, i32 60)
br label %119
31: ; preds = %28
%32 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 63, i32 62)
br label %119
33: ; preds = %28
%34 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 65, i32 64)
br label %119
35: ; preds = %28
%36 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 61, i32 34, i32 61)
br label %119
37: ; preds = %28
%38 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 40, i32 0, i32 1)
%39 = icmp eq i32 %38, 0
br i1 %39, label %40, label %119
40: ; preds = %37
%41 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 41, i32 0, i32 1)
%42 = icmp eq i32 %41, 0
br i1 %42, label %61, label %119
43: ; preds = %28
%44 = tail call i32 (i32, i32, i32, ...) bitcast (i32 (...)* @subseq to i32 (i32, i32, i32, ...)*)(i32 42, i32 1, i32 0)
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %119
46: ; preds = %43, %55
%47 = tail call i32 (...) @xread()
br label %48
48: ; preds = %56, %46
%49 = phi i32 [ %47, %46 ], [ %57, %56 ]
switch i32 %49, label %55 [
i32 4, label %50
i32 10, label %52
i32 42, label %56
]
50: ; preds = %48
store i32 1, i32* @xeof
%51 = tail call i32 (i32, ...) bitcast (i32 (...)* @error to i32 (i32, ...)*)(i32 10799)
br label %119
52: ; preds = %48
%53 = load i32, i32* @line
%54 = add nsw i32 %53, 1
store i32 %54, i32* @line
br label %55
55: ; preds = %48, %52
br label %46
56: ; preds = %48
%57 = tail call i32 (...) @xread()
%58 = icmp eq i32 %57, 47
br i1 %58, label %26, label %48
59: ; preds = %28
%60 = icmp eq i32 %19, 124
br i1 %60, label %65, label %88
61: ; preds = %40
switch i32 %19, label %63 [
i32 124, label %62
i32 123, label %93
i32 127, label %117
]
62: ; preds = %61
store i32 0, i32* @cval
br label %86
63: ; preds = %61
%64 = load i32, i32* %18
br label %119
65: ; preds = %59
store i32 0, i32* @cval
%66 = icmp eq i32 %16, 48
br i1 %66, label %70, label %67
67: ; preds = %65
%68 = add i32 %16, -48
%69 = icmp ult i32 %68, 10
br i1 %69, label %70, label %86
70: ; preds = %65, %67
%71 = phi i32 [ 10, %67 ], [ 8, %65 ]
%72 = phi i32 [ %16, %67 ], [ 48, %65 ]
%73 = add nsw i32 %72, -48
store i32 %73, i32* @cval
%74 = tail call i32 (...) @xread()
%75 = add i32 %74, -48
%76 = icmp ult i32 %75, 10
br i1 %76, label %77, label %86
77: ; preds = %70, %77
%78 = phi i32 [ %83, %77 ], [ %74, %70 ]
%79 = load i32, i32* @cval
%80 = mul nsw i32 %79, %71
%81 = add nsw i32 %78, -48
%82 = add i32 %81, %80
store i32 %82, i32* @cval
%83 = tail call i32 (...) @xread()
%84 = add i32 %83, -48
%85 = icmp ult i32 %84, 10
br i1 %85, label %77, label %86
86: ; preds = %77, %70, %62, %67
%87 = phi i32 [ %16, %67 ], [ 36, %62 ], [ %74, %70 ], [ %83, %77 ]
store i32 %87, i32* @peekc
br label %119
88: ; preds = %59
%89 = icmp eq i32 %16, 39
br i1 %89, label %90, label %92
90: ; preds = %88
%91 = tail call i32 (...) @getcc()
br label %119
92: ; preds = %88
switch i32 %19, label %119 [
i32 123, label %93
i32 127, label %117
]
93: ; preds = %92, %61
br label %94
94: ; preds = %93, %100
%95 = phi i32* [ %101, %100 ], [ getelementptr inbounds ([0 x i32], [0 x i32]* @symbuf, i64 0, i64 0), %93 ]
%96 = phi i32 [ %102, %100 ], [ %16, %93 ]
%97 = icmp ult i32* %95, getelementptr inbounds ([0 x i32], [0 x i32]* @symbuf, i64 0, i64 9)
br i1 %97, label %98, label %100
98: ; preds = %94
store i32 %96, i32* %95
%99 = getelementptr inbounds i32, i32* %95, i64 1
br label %100
100: ; preds = %98, %94
%101 = phi i32* [ %99, %98 ], [ %95, %94 ]
%102 = tail call i32 (...) @xread()
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds [0 x i32], [0 x i32]* @ctab, i64 0, i64 %103
%105 = load i32, i32* %104
%106 = add i32 %105, -123
%107 = icmp ult i32 %106, 2
br i1 %107, label %94, label %108
108: ; preds = %100
store i32 0, i32* %101
store i32 %102, i32* @peekc
%109 = tail call i32 (...) @lookup()
%110 = sext i32 %109 to i64
%111 = inttoptr i64 %110 to i32*
store i32* %111, i32** @csym
%112 = load i32, i32* %111
%113 = icmp eq i32 %112, 1
br i1 %113, label %114, label %119
114: ; preds = %108
%115 = getelementptr inbounds i32, i32* %111, i64 1
%116 = load i32, i32* %115
store i32 %116, i32* @cval
br label %119
117: ; preds = %61, %92
%118 = tail call i32 (i32, ...) bitcast (i32 (...)* @error to i32 (i32, ...)*)(i32 29561)
br label %26
119: ; preds = %43, %40, %37, %92, %63, %108, %8, %114, %90, %86, %50, %35, %33, %31, %29, %20, %3
%120 = phi i32 [ %1, %3 ], [ 0, %20 ], [ %30, %29 ], [ %32, %31 ], [ %34, %33 ], [ %36, %35 ], [ 0, %50 ], [ 21, %86 ], [ 21, %90 ], [ 19, %114 ], [ 0, %8 ], [ 20, %108 ], [ %64, %63 ], [ 43, %43 ], [ 3, %40 ], [ 2, %37 ], [ %19, %92 ]
ret i32 %120
}