#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*/ ISORegexp__identifier_char(char);
int /*<<< orphan*/ ISORegexp__white_space(char);
int /*<<< orphan*/ isdigit(char);
int ISORegexp__test_cclass(char *text, int chcl, int range_from, int range_to,
                           char *drawn_from, int reverse) {
  int match = 0;
  switch (chcl) {
  case 1:
    if (text[0])
      match = 1;
    break;
  case 2:
    if (isdigit(text[0]))
      match = 1;
    break;
  case 3:
    if (ISORegexp__white_space(text[0]))
      match = 1;
    break;
  case 9:
    if (text[0] == '\t')
      match = 1;
    break;
  case 4:
    if (!(ISORegexp__white_space(text[0])))
      match = 1;
    break;
  case 5:
    if (ISORegexp__identifier_char(text[0]))
      match = 1;
    break;
  case 6:
    if ((text[0] == '-') || (text[0] == '_') ||
        ((text[0] >= 'a') && (text[0] <= 'z')) ||
        ((text[0] >= '0') && (text[0] <= '9')))
      match = 1;
    break;
  case 7:
    if ((text[0] == '-') || (text[0] == '_') || (text[0] == ':') ||
        ((text[0] >= 'a') && (text[0] <= 'z')) ||
        ((text[0] >= '0') && (text[0] <= '9')))
      match = 1;
    break;
  case 8:
    for (int j = range_from; j <= range_to; j++) {
      int c1 = drawn_from[j], c2 = c1;
      if ((j + 1 < range_to) && (drawn_from[j + 1] == '-')) {
        c2 = drawn_from[j + 2];
        j += 2;
      }
      int c = *text;
      if ((c >= c1) && (c <= c2)) {
        match = 1;
        break;
      }
    }
    break;
  }
  if (reverse)
    match = (match) ? 0 : 1;
  return match;
}


x86 assembly (clang, -O0):
<ISORegexp__test_cclass>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x8,%eax
ja     13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x40(%rbp),%rax
lea    0xe8c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
cmpb   $0x0,(%rax)
je     1191 <ISORegexp__test_cclass+0x61>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     11b2 <ISORegexp__test_cclass+0x82>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <ISORegexp__white_space@plt>
cmp    $0x0,%eax
je     11d3 <ISORegexp__test_cclass+0xa3>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
jne    11ef <ISORegexp__test_cclass+0xbf>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1040 <ISORegexp__white_space@plt>
cmp    $0x0,%eax
jne    1210 <ISORegexp__test_cclass+0xe0>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%edi
call   1050 <ISORegexp__identifier_char@plt>
cmp    $0x0,%eax
je     1231 <ISORegexp__test_cclass+0x101>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1296 <ISORegexp__test_cclass+0x166>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
je     1296 <ISORegexp__test_cclass+0x166>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1276 <ISORegexp__test_cclass+0x146>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jle    1296 <ISORegexp__test_cclass+0x166>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     129d <ISORegexp__test_cclass+0x16d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     129d <ISORegexp__test_cclass+0x16d>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1312 <ISORegexp__test_cclass+0x1e2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
je     1312 <ISORegexp__test_cclass+0x1e2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
je     1312 <ISORegexp__test_cclass+0x1e2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     12f2 <ISORegexp__test_cclass+0x1c2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jle    1312 <ISORegexp__test_cclass+0x1e2>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1319 <ISORegexp__test_cclass+0x1e9>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1319 <ISORegexp__test_cclass+0x1e9>
movl   $0x1,-0x28(%rbp)
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
mov    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     13cc <ISORegexp__test_cclass+0x29c>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
cmp    -0x14(%rbp),%eax
jge    138b <ISORegexp__test_cclass+0x25b>
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    138b <ISORegexp__test_cclass+0x25b>
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x30(%rbp),%eax
jl     13b9 <ISORegexp__test_cclass+0x289>
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     13b9 <ISORegexp__test_cclass+0x289>
movl   $0x1,-0x28(%rbp)
jmp    13cc <ISORegexp__test_cclass+0x29c>
jmp    13be <ISORegexp__test_cclass+0x28e>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1324 <ISORegexp__test_cclass+0x1f4>
jmp    13d1 <ISORegexp__test_cclass+0x2a1>
cmpl   $0x0,-0x24(%rbp)
je     13ee <ISORegexp__test_cclass+0x2be>
mov    -0x28(%rbp),%edx
mov    $0x1,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ISORegexp__test_cclass>:
push   %rbp
push   %rbx
push   %rax
mov    %r9d,%ebp
add    $0xffffffff,%esi
cmp    $0x8,%esi
ja     1238 <ISORegexp__test_cclass+0x108>
lea    0xeb7(%rip),%rax
movslq (%rax,%rsi,4),%rsi
add    %rax,%rsi
jmp    *%rsi
cmpb   $0x0,(%rdi)
setne  %al
jmp    123a <ISORegexp__test_cclass+0x10a>
movsbl (%rdi),%edi
call   1030 <isdigit@plt>
jmp    118b <ISORegexp__test_cclass+0x5b>
movsbl (%rdi),%edi
call   1040 <ISORegexp__white_space@plt>
jmp    118b <ISORegexp__test_cclass+0x5b>
movsbl (%rdi),%edi
call   1040 <ISORegexp__white_space@plt>
test   %eax,%eax
sete   %al
jmp    123a <ISORegexp__test_cclass+0x10a>
movsbl (%rdi),%edi
call   1050 <ISORegexp__identifier_char@plt>
test   %eax,%eax
setne  %al
jmp    123a <ISORegexp__test_cclass+0x10a>
mov    (%rdi),%al
cmp    $0x2d,%al
je     11c1 <ISORegexp__test_cclass+0x91>
cmp    $0x5f,%al
je     11c1 <ISORegexp__test_cclass+0x91>
jmp    122a <ISORegexp__test_cclass+0xfa>
mov    (%rdi),%al
lea    -0x2d(%rax),%ecx
cmp    $0x32,%cl
ja     122a <ISORegexp__test_cclass+0xfa>
movzbl %cl,%ecx
movabs $0x4000000002001,%rdx
bt     %rcx,%rdx
jae    122a <ISORegexp__test_cclass+0xfa>
mov    $0x1,%al
jmp    123a <ISORegexp__test_cclass+0x10a>
cmp    %ecx,%edx
jg     1238 <ISORegexp__test_cclass+0x108>
mov    (%rdi),%dil
nopl   0x0(%rax)
movslq %edx,%rsi
movzbl (%r8,%rsi,1),%eax
lea    0x1(%rsi),%rbx
cmp    %ecx,%ebx
jge    1200 <ISORegexp__test_cclass+0xd0>
cmpb   $0x2d,(%r8,%rbx,1)
mov    %eax,%r9d
jne    1203 <ISORegexp__test_cclass+0xd3>
movzbl 0x2(%r8,%rsi,1),%r9d
add    $0x2,%rsi
mov    %esi,%edx
jmp    1203 <ISORegexp__test_cclass+0xd3>
nopl   0x0(%rax,%rax,1)
mov    %eax,%r9d
cmp    %al,%dil
setl   %bl
cmp    %dil,%r9b
setl   %al
or     %bl,%al
cmp    $0x1,%al
jne    121e <ISORegexp__test_cclass+0xee>
lea    0x1(%rdx),%esi
cmp    %ecx,%edx
mov    %esi,%edx
jl     11d0 <ISORegexp__test_cclass+0xa0>
xor    $0x1,%al
jmp    123a <ISORegexp__test_cclass+0x10a>
cmpb   $0x9,(%rdi)
sete   %al
jmp    123a <ISORegexp__test_cclass+0x10a>
lea    -0x61(%rax),%ecx
cmp    $0x1a,%cl
jb     11c1 <ISORegexp__test_cclass+0x91>
add    $0xd0,%al
cmp    $0x9,%al
jbe    11c1 <ISORegexp__test_cclass+0x91>
xor    %eax,%eax
test   %ebp,%ebp
setne  %cl
xor    %al,%cl
movzbl %cl,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @ISORegexp__test_cclass(i8* nocapture %0, i32 %1, i32 %2, i32 %3, i8* nocapture %4, i32 %5) {
switch i32 %1, label %79 [
i32 1, label %11
i32 2, label %14
i32 3, label %18
i32 9, label %22
i32 4, label %25
i32 5, label %29
i32 6, label %33
i32 7, label %42
i32 8, label %7
]
7: ; preds = %6
%8 = icmp sgt i32 %2, %3
br i1 %8, label %79, label %9
9: ; preds = %7
%10 = load i8, i8* %0
br label %51
11: ; preds = %6
%12 = load i8, i8* %0
%13 = icmp ne i8 %12, 0
br label %79
14: ; preds = %6
%15 = load i8, i8* %0
%16 = tail call i32 @isdigit(i8 signext %15)
%17 = icmp ne i32 %16, 0
br label %79
18: ; preds = %6
%19 = load i8, i8* %0
%20 = tail call i32 @ISORegexp__white_space(i8 signext %19)
%21 = icmp ne i32 %20, 0
br label %79
22: ; preds = %6
%23 = load i8, i8* %0
%24 = icmp eq i8 %23, 9
br label %79
25: ; preds = %6
%26 = load i8, i8* %0
%27 = tail call i32 @ISORegexp__white_space(i8 signext %26)
%28 = icmp eq i32 %27, 0
br label %79
29: ; preds = %6
%30 = load i8, i8* %0
%31 = tail call i32 @ISORegexp__identifier_char(i8 signext %30)
%32 = icmp ne i32 %31, 0
br label %79
33: ; preds = %6
%34 = load i8, i8* %0
switch i8 %34, label %35 [
i8 45, label %41
i8 95, label %41
]
35: ; preds = %33
%36 = add i8 %34, -97
%37 = icmp ult i8 %36, 26
%38 = add i8 %34, -48
%39 = icmp ult i8 %38, 10
%40 = or i1 %37, %39
br i1 %40, label %41, label %79
41: ; preds = %35, %33, %33
br label %79
42: ; preds = %6
%43 = load i8, i8* %0
switch i8 %43, label %44 [
i8 45, label %50
i8 95, label %50
i8 58, label %50
]
44: ; preds = %42
%45 = add i8 %43, -97
%46 = icmp ult i8 %45, 26
%47 = add i8 %43, -48
%48 = icmp ult i8 %47, 10
%49 = or i1 %46, %48
br i1 %49, label %50, label %79
50: ; preds = %44, %42, %42, %42
br label %79
51: ; preds = %68, %9
%52 = phi i32 [ %2, %9 ], [ %74, %68 ]
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %4, i64 %53
%55 = load i8, i8* %54
%56 = add nsw i32 %52, 1
%57 = icmp slt i32 %56, %3
br i1 %57, label %58, label %68
58: ; preds = %51
%59 = sext i32 %56 to i64
%60 = getelementptr inbounds i8, i8* %4, i64 %59
%61 = load i8, i8* %60
%62 = icmp eq i8 %61, 45
br i1 %62, label %63, label %68
63: ; preds = %58
%64 = add nsw i32 %52, 2
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i8, i8* %4, i64 %65
%67 = load i8, i8* %66
br label %68
68: ; preds = %63, %58, %51
%69 = phi i32 [ %64, %63 ], [ %52, %58 ], [ %52, %51 ]
%70 = phi i8 [ %67, %63 ], [ %55, %58 ], [ %55, %51 ]
%71 = icmp slt i8 %10, %55
%72 = icmp slt i8 %70, %10
%73 = select i1 %71, i1 true, i1 %72
%74 = add nsw i32 %69, 1
%75 = icmp slt i32 %69, %3
%76 = select i1 %73, i1 %75, i1 false
br i1 %76, label %51, label %77
77: ; preds = %68
%78 = xor i1 %73, true
br label %79
79: ; preds = %77, %7, %44, %35, %29, %25, %22, %18, %14, %11, %50, %41, %6
%80 = phi i1 [ false, %6 ], [ true, %50 ], [ true, %41 ], [ %13, %11 ], [ %17, %14 ], [ %21, %18 ], [ %24, %22 ], [ %28, %25 ], [ %32, %29 ], [ false, %35 ], [ false, %44 ], [ false, %7 ], [ %78, %77 ]
%81 = icmp ne i32 %5, 0
%82 = xor i1 %81, %80
%83 = zext i1 %82 to i32
ret i32 %83
}