#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 */
scalar_t__ CheckDotCommand(char *);
scalar_t__ CheckOpcode(char *);
int /*<<< orphan*/ isdigit(char);
int /*<<< orphan*/ strcmp(char *, char *);
char toupper(char);
uint CheckTokenType(char *word) {
  int i, parse_state;
  uint flags;
  char c;
  if (CheckOpcode(word))
    return (0x0001);
  if (CheckDotCommand(word))
    return (0x0002);
  if (!strcmp(word, "SIZE") || !strcmp(word, "OFFSET"))
    return (0x0002);
  i = 0;
  parse_state = 0;
  if (word[i] == '*') {
    flags = 0x0010;
    i++;
    if (word[i] == '&') {
      flags |= 0x0008;
      i++;
    } else {
      flags |= 0x0004;
      if (word[i] == '-') {
        if (word[i + 1] != '-')
          return (0);
        i += 2;
        flags |= 0x0040;
      }
    }
  } else if (word[i] == '&') {
    flags = 0x0008;
    i++;
  } else
    flags = 0x0004;
  for (;;) {
    c = word[i++];
    c = toupper(c);
    switch (parse_state) {
    case 0:
      if (c == 'B' || c == 'C' || c == 'R' || c == 'T' || c == 'W')
        parse_state = 1;
      else
        return (0);
      break;
    case 1:
      if (isdigit(c))
        parse_state = 2;
      else
        return (0);
      break;
    case 2:
    case 3:
      if (isdigit(c)) {
        parse_state++;
        if (parse_state > 3)
          return (0);
      } else if (c == '.')
        parse_state = 0;
      else if (!c || c == ' ' || c == 0x9)
        return (flags);
      else if (c == '+') {
        if (flags & (0x0008 | 0x0040))
          return (0);
        if (word[i] != c || word[i + 1] != 0)
          return (0);
        flags |= 0x0020;
        return (flags);
      } else
        return (0);
      break;
    }
  }
}


x86 assembly (clang, -O0):
<CheckTokenType>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1070 <CheckOpcode@plt>
cmp    $0x0,%rax
je     117b <CheckTokenType+0x2b>
movl   $0x1,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
mov    -0x10(%rbp),%rdi
call   1060 <CheckDotCommand@plt>
cmp    $0x0,%rax
je     119a <CheckTokenType+0x4a>
movl   $0x2,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
mov    -0x10(%rbp),%rdi
lea    0xe5b(%rip),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%eax
je     11cc <CheckTokenType+0x7c>
mov    -0x10(%rbp),%rdi
lea    0xe47(%rip),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%eax
jne    11d8 <CheckTokenType+0x88>
movl   $0x2,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2a,%eax
jne    1297 <CheckTokenType+0x147>
movl   $0x10,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x26,%eax
jne    1237 <CheckTokenType+0xe7>
mov    -0x1c(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1292 <CheckTokenType+0x142>
mov    -0x1c(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    128d <CheckTokenType+0x13d>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
je     127b <CheckTokenType+0x12b>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
or     $0x40,%eax
mov    %eax,-0x1c(%rbp)
jmp    1292 <CheckTokenType+0x142>
jmp    12cd <CheckTokenType+0x17d>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x26,%eax
jne    12c1 <CheckTokenType+0x171>
movl   $0x8,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12c8 <CheckTokenType+0x178>
movl   $0x4,-0x1c(%rbp)
jmp    12cd <CheckTokenType+0x17d>
jmp    12d2 <CheckTokenType+0x182>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x14(%rbp)
mov    (%rax,%rcx,1),%al
mov    %al,-0x1d(%rbp)
movsbl -0x1d(%rbp),%edi
call   1040 <toupper@plt>
mov    %al,-0x1d(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
test   %eax,%eax
je     132c <CheckTokenType+0x1dc>
jmp    1307 <CheckTokenType+0x1b7>
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
je     138a <CheckTokenType+0x23a>
jmp    1318 <CheckTokenType+0x1c8>
mov    -0x24(%rbp),%eax
add    $0xfffffffe,%eax
sub    $0x2,%eax
jb     13b9 <CheckTokenType+0x269>
jmp    14c7 <CheckTokenType+0x377>
movsbl -0x1d(%rbp),%eax
cmp    $0x42,%eax
je     136d <CheckTokenType+0x21d>
movsbl -0x1d(%rbp),%eax
cmp    $0x43,%eax
je     136d <CheckTokenType+0x21d>
movsbl -0x1d(%rbp),%eax
cmp    $0x52,%eax
je     136d <CheckTokenType+0x21d>
movsbl -0x1d(%rbp),%eax
cmp    $0x54,%eax
je     136d <CheckTokenType+0x21d>
movsbl -0x1d(%rbp),%eax
cmp    $0x57,%eax
jne    1379 <CheckTokenType+0x229>
movl   $0x1,-0x18(%rbp)
jmp    1385 <CheckTokenType+0x235>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
jmp    14c7 <CheckTokenType+0x377>
movsbl -0x1d(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13a8 <CheckTokenType+0x258>
movl   $0x2,-0x18(%rbp)
jmp    13b4 <CheckTokenType+0x264>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
jmp    14c7 <CheckTokenType+0x377>
movsbl -0x1d(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     13ef <CheckTokenType+0x29f>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jle    13ea <CheckTokenType+0x29a>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
jmp    14c2 <CheckTokenType+0x372>
movsbl -0x1d(%rbp),%eax
cmp    $0x2e,%eax
jne    1408 <CheckTokenType+0x2b8>
movl   $0x0,-0x18(%rbp)
jmp    14bd <CheckTokenType+0x36d>
cmpb   $0x0,-0x1d(%rbp)
je     142c <CheckTokenType+0x2dc>
movsbl -0x1d(%rbp),%eax
cmp    $0x20,%eax
je     142c <CheckTokenType+0x2dc>
movsbl -0x1d(%rbp),%eax
cmp    $0x9,%eax
jne    1437 <CheckTokenType+0x2e7>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
movsbl -0x1d(%rbp),%eax
cmp    $0x2b,%eax
jne    14b1 <CheckTokenType+0x361>
mov    -0x1c(%rbp),%eax
and    $0x48,%eax
cmp    $0x0,%eax
je     145f <CheckTokenType+0x30f>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x1d(%rbp),%ecx
cmp    %ecx,%eax
jne    1491 <CheckTokenType+0x341>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     149d <CheckTokenType+0x34d>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
mov    -0x1c(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
movl   $0x0,-0x4(%rbp)
jmp    14cc <CheckTokenType+0x37c>
jmp    14c2 <CheckTokenType+0x372>
jmp    14c7 <CheckTokenType+0x377>
jmp    12d2 <CheckTokenType+0x182>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CheckTokenType>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%r14
call   1070 <CheckOpcode@plt>
mov    $0x1,%ebp
test   %rax,%rax
jne    117f <CheckTokenType+0x2f>
mov    %r14,%rdi
call   1060 <CheckDotCommand@plt>
mov    $0x2,%ebp
test   %rax,%rax
je     1190 <CheckTokenType+0x40>
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xe69(%rip),%rsi
mov    %r14,%rdi
call   1050 <strcmp@plt>
test   %eax,%eax
je     117f <CheckTokenType+0x2f>
lea    0xe5b(%rip),%rsi
mov    %r14,%rdi
call   1050 <strcmp@plt>
test   %eax,%eax
je     117f <CheckTokenType+0x2f>
mov    (%r14),%al
mov    $0x1,%r15d
cmp    $0x26,%al
je     11ec <CheckTokenType+0x9c>
cmp    $0x2a,%al
jne    11f6 <CheckTokenType+0xa6>
mov    0x1(%r14),%al
cmp    $0x26,%al
je     1203 <CheckTokenType+0xb3>
cmp    $0x2d,%al
jne    1213 <CheckTokenType+0xc3>
xor    %ebp,%ebp
cmpb   $0x2d,0x2(%r14)
jne    117f <CheckTokenType+0x2f>
movl   $0x54,0x4(%rsp)
mov    $0x3,%r15d
jmp    121b <CheckTokenType+0xcb>
movl   $0x8,0x4(%rsp)
jmp    121b <CheckTokenType+0xcb>
movl   $0x4,0x4(%rsp)
xor    %r15d,%r15d
jmp    121b <CheckTokenType+0xcb>
movl   $0x18,0x4(%rsp)
mov    $0x2,%r15d
jmp    121b <CheckTokenType+0xcb>
movl   $0x14,0x4(%rsp)
add    $0x1,%r15
xor    %r12d,%r12d
mov    $0x250003,%r13d
xor    %ebp,%ebp
jmp    124a <CheckTokenType+0xfa>
nopl   0x0(%rax)
movsbl %bl,%edi
call   1030 <isdigit@plt>
mov    $0x2,%r12d
test   %eax,%eax
je     130b <CheckTokenType+0x1bb>
add    $0x1,%r15
movsbl -0x1(%r14,%r15,1),%edi
call   1040 <toupper@plt>
mov    %eax,%ebx
lea    -0x2(%r12),%eax
cmp    $0x2,%eax
jb     1290 <CheckTokenType+0x140>
cmp    $0x1,%r12d
je     1230 <CheckTokenType+0xe0>
test   %r12d,%r12d
jne    1246 <CheckTokenType+0xf6>
add    $0xbe,%bl
cmp    $0x15,%bl
ja     117f <CheckTokenType+0x2f>
mov    $0x1,%r12d
movzbl %bl,%eax
bt     %rax,%r13
jb     1246 <CheckTokenType+0xf6>
jmp    117f <CheckTokenType+0x2f>
nopl   0x0(%rax)
movsbl %bl,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     12ac <CheckTokenType+0x15c>
cmp    $0x2,%r12d
jg     130b <CheckTokenType+0x1bb>
add    $0x1,%r12d
add    $0x1,%r15
jmp    124a <CheckTokenType+0xfa>
xor    %r12d,%r12d
cmp    $0x2e,%bl
je     1246 <CheckTokenType+0xf6>
cmp    $0x1f,%bl
jg     12cc <CheckTokenType+0x17c>
test   %bl,%bl
je     1312 <CheckTokenType+0x1c2>
mov    0x4(%rsp),%ebp
cmp    $0x9,%bl
je     117f <CheckTokenType+0x2f>
jmp    130b <CheckTokenType+0x1bb>
cmp    $0x20,%bl
je     1312 <CheckTokenType+0x1c2>
cmp    $0x2b,%bl
jne    130b <CheckTokenType+0x1bb>
xor    %ebp,%ebp
testb  $0x48,0x4(%rsp)
jne    117f <CheckTokenType+0x2f>
mov    %r15d,%eax
cmpb   $0x2b,(%r14,%rax,1)
jne    117f <CheckTokenType+0x2f>
add    $0x1,%r15d
mov    0x4(%rsp),%eax
or     $0x20,%eax
xor    %ebp,%ebp
cmpb   $0x0,(%r14,%r15,1)
cmove  %eax,%ebp
jmp    117f <CheckTokenType+0x2f>
xor    %ebp,%ebp
jmp    117f <CheckTokenType+0x2f>
mov    0x4(%rsp),%ebp
jmp    117f <CheckTokenType+0x2f>

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

LLVM IR (-O2):
@.str = [5 x i8] c"SIZE\00"
@.str.1 = [7 x i8] c"OFFSET\00"
define i32 @CheckTokenType(i8* %0) {
%2 = tail call i64 @CheckOpcode(i8* %0)
%3 = icmp eq i64 %2, 0
br i1 %3, label %4, label %65
4: ; preds = %1
%5 = tail call i64 @CheckDotCommand(i8* %0)
%6 = icmp eq i64 %5, 0
br i1 %6, label %7, label %65
7: ; preds = %4
%8 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(5) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%9 = icmp eq i32 %8, 0
br i1 %9, label %65, label %10
10: ; preds = %7
%11 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%12 = icmp eq i32 %11, 0
br i1 %12, label %65, label %13
13: ; preds = %10
%14 = load i8, i8* %0
switch i8 %14, label %22 [
i8 42, label %15
i8 38, label %24
]
15: ; preds = %13
%16 = getelementptr inbounds i8, i8* %0, i64 1
%17 = load i8, i8* %16
switch i8 %17, label %23 [
i8 38, label %24
i8 45, label %18
]
18: ; preds = %15
%19 = getelementptr inbounds i8, i8* %0, i64 2
%20 = load i8, i8* %19
%21 = icmp eq i8 %20, 45
br i1 %21, label %24, label %65
22: ; preds = %13
br label %24
23: ; preds = %15
br label %24
24: ; preds = %13, %18, %15, %23, %22
%25 = phi i64 [ 0, %22 ], [ 2, %15 ], [ 1, %23 ], [ 3, %18 ], [ 1, %13 ]
%26 = phi i32 [ 4, %22 ], [ 24, %15 ], [ 20, %23 ], [ 84, %18 ], [ 8, %13 ]
br label %27
27: ; preds = %45, %24
%28 = phi i64 [ %25, %24 ], [ %30, %45 ]
%29 = phi i32 [ 0, %24 ], [ %46, %45 ]
%30 = add nuw i64 %28, 1
%31 = getelementptr inbounds i8, i8* %0, i64 %28
%32 = load i8, i8* %31
%33 = tail call signext i8 @toupper(i8 signext %32)
switch i32 %29, label %45 [
i32 0, label %34
i32 1, label %35
i32 2, label %38
i32 3, label %38
]
34: ; preds = %27
switch i8 %33, label %63 [
i8 87, label %45
i8 84, label %45
i8 82, label %45
i8 67, label %45
i8 66, label %45
]
35: ; preds = %27
%36 = tail call i32 @isdigit(i8 signext %33)
%37 = icmp eq i32 %36, 0
br i1 %37, label %63, label %45
38: ; preds = %27, %27
%39 = tail call i32 @isdigit(i8 signext %33)
%40 = icmp eq i32 %39, 0
br i1 %40, label %44, label %41
41: ; preds = %38
%42 = add nsw i32 %29, 1
%43 = icmp sgt i32 %29, 2
br i1 %43, label %63, label %45
44: ; preds = %38
switch i8 %33, label %65 [
i8 46, label %45
i8 32, label %63
i8 9, label %63
i8 0, label %63
i8 43, label %47
]
45: ; preds = %44, %35, %34, %34, %34, %34, %34, %41, %27
%46 = phi i32 [ 0, %44 ], [ 2, %35 ], [ 1, %34 ], [ 1, %34 ], [ 1, %34 ], [ 1, %34 ], [ 1, %34 ], [ %42, %41 ], [ %29, %27 ]
br label %27
47: ; preds = %44
%48 = and i32 %26, 72
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %65
50: ; preds = %47
%51 = and i64 %30, 4294967295
%52 = getelementptr inbounds i8, i8* %0, i64 %51
%53 = load i8, i8* %52
%54 = icmp eq i8 %53, 43
br i1 %54, label %55, label %65
55: ; preds = %50
%56 = add i64 %28, 2
%57 = and i64 %56, 4294967295
%58 = getelementptr inbounds i8, i8* %0, i64 %57
%59 = load i8, i8* %58
%60 = icmp eq i8 %59, 0
%61 = or i32 %26, 32
%62 = select i1 %60, i32 %61, i32 0
br label %65
63: ; preds = %34, %35, %41, %44, %44, %44
%64 = phi i32 [ %26, %44 ], [ %26, %44 ], [ %26, %44 ], [ 0, %41 ], [ 0, %35 ], [ 0, %34 ]
br label %65
65: ; preds = %44, %63, %55, %50, %47, %18, %7, %10, %4, %1
%66 = phi i32 [ 1, %1 ], [ 2, %4 ], [ 2, %10 ], [ 2, %7 ], [ 0, %18 ], [ 0, %47 ], [ 0, %50 ], [ %62, %55 ], [ %64, %63 ], [ 0, %44 ]
ret i32 %66
}