#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 */
scalar_t__ sc_is_alpha(char);
scalar_t__ sc_is_digit(char);
int sc_strlen(char *);
int strcmp(char *, char *);
int sc_substrcmp_ex(char *A, char *B, int start, char border) {
  int walker = start;
  int length_of_matched = 0;
  int counter = 0;
  int length_of_B = sc_strlen(B);
  int lenth_of_A = sc_strlen(A);
  if (lenth_of_A == length_of_B)
    return strcmp(A, B);
  if (0x20 != A[walker] && '\t' != A[walker] && '\r' != A[walker] &&
      '\n' != A[walker] && '\\' != A[walker] && border != A[walker]) {
    if (0 == sc_is_alpha(A[walker]))
      return 1;
  }
  while (0x20 == A[walker] || '\t' == A[walker] || '\r' == A[walker] ||
         '\n' == A[walker] || '\\' == A[walker] || border == A[walker]) {
    walker++;
  }
  for (; counter < length_of_B; walker++, counter++, length_of_matched++) {
    if (A[walker] != B[counter])
      return 1;
  }
  if (length_of_matched < lenth_of_A) {
    if (0 != sc_is_alpha(A[walker]) || 0 != sc_is_digit(A[walker]) ||
        '_' == A[walker])
      return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<sc_substrcmp_ex>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %cl,%al
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %al,-0x1d(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <sc_strlen@plt>
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <sc_strlen@plt>
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    11a5 <sc_substrcmp_ex+0x65>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1050 <strcmp@plt>
mov    %eax,-0x4(%rbp)
jmp    1418 <sc_substrcmp_ex+0x2d8>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x20,%eax
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x9,%eax
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0xd,%eax
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0xa,%eax
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x5c,%eax
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
movsbl -0x1d(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
je     126a <sc_substrcmp_ex+0x12a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1060 <sc_is_alpha@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    1265 <sc_substrcmp_ex+0x125>
movl   $0x1,-0x4(%rbp)
jmp    1418 <sc_substrcmp_ex+0x2d8>
jmp    126a <sc_substrcmp_ex+0x12a>
jmp    126f <sc_substrcmp_ex+0x12f>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%al
mov    $0x20,%ecx
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
je     131d <sc_substrcmp_ex+0x1dd>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%al
mov    $0x9,%ecx
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
je     131d <sc_substrcmp_ex+0x1dd>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%al
mov    $0xd,%ecx
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
je     131d <sc_substrcmp_ex+0x1dd>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%al
mov    $0xa,%ecx
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
je     131d <sc_substrcmp_ex+0x1dd>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
mov    $0x1,%al
mov    $0x5c,%ecx
cmp    %edx,%ecx
mov    %al,-0x35(%rbp)
je     131d <sc_substrcmp_ex+0x1dd>
movsbl -0x1d(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x24(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    132d <sc_substrcmp_ex+0x1ed>
jmp    133b <sc_substrcmp_ex+0x1fb>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    126f <sc_substrcmp_ex+0x12f>
jmp    1340 <sc_substrcmp_ex+0x200>
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    139d <sc_substrcmp_ex+0x25d>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
movslq -0x2c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
je     1378 <sc_substrcmp_ex+0x238>
movl   $0x1,-0x4(%rbp)
jmp    1418 <sc_substrcmp_ex+0x2d8>
jmp    137d <sc_substrcmp_ex+0x23d>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1340 <sc_substrcmp_ex+0x200>
mov    -0x28(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1411 <sc_substrcmp_ex+0x2d1>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1060 <sc_is_alpha@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    1400 <sc_substrcmp_ex+0x2c0>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1040 <sc_is_digit@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    %rcx,%rax
jne    1400 <sc_substrcmp_ex+0x2c0>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
mov    $0x5f,%eax
cmp    %ecx,%eax
jne    140c <sc_substrcmp_ex+0x2cc>
movl   $0x1,-0x4(%rbp)
jmp    1418 <sc_substrcmp_ex+0x2d8>
jmp    1411 <sc_substrcmp_ex+0x2d1>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sc_substrcmp_ex>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %ecx,%r12d
mov    %edx,%r13d
mov    %rsi,%r15
mov    %rdi,%rbx
mov    %rsi,%rdi
call   1030 <sc_strlen@plt>
mov    %eax,%r14d
mov    %rbx,%rdi
call   1030 <sc_strlen@plt>
cmp    %r14d,%eax
jne    1188 <sc_substrcmp_ex+0x48>
mov    %rbx,%rdi
mov    %r15,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <strcmp@plt>
mov    %eax,%edi
movslq %r13d,%rbp
movzbl (%rbx,%rbp,1),%eax
movabs $0x100002600,%r13
cmp    $0x20,%rax
ja     11a7 <sc_substrcmp_ex+0x67>
bt     %rax,%r13
jb     11c9 <sc_substrcmp_ex+0x89>
cmp    $0x5c,%al
je     11c9 <sc_substrcmp_ex+0x89>
cmp    %r12b,%al
je     11c9 <sc_substrcmp_ex+0x89>
mov    %edi,0x4(%rsp)
movsbl %al,%edi
call   1060 <sc_is_alpha@plt>
mov    0x4(%rsp),%edi
test   %rax,%rax
je     1283 <sc_substrcmp_ex+0x143>
mov    %rbp,%rax
shl    $0x20,%rax
movabs $0x100000000,%rcx
jmp    11ed <sc_substrcmp_ex+0xad>
nopl   0x0(%rax)
bt     %rdx,%r13
jae    11f7 <sc_substrcmp_ex+0xb7>
add    $0x1,%rbp
add    %rcx,%rax
movzbl (%rbx,%rbp,1),%edx
cmp    $0x20,%rdx
jbe    11e0 <sc_substrcmp_ex+0xa0>
cmp    $0x5c,%dl
je     11e6 <sc_substrcmp_ex+0xa6>
cmp    %r12b,%dl
je     11e6 <sc_substrcmp_ex+0xa6>
test   %r14d,%r14d
jle    124a <sc_substrcmp_ex+0x10a>
mov    %ebp,%ecx
sar    $0x20,%rax
lea    -0x1(%r14),%edx
movslq %ebp,%rcx
lea    (%rax,%rdx,1),%rbp
add    $0x1,%rbp
mov    %r14d,%esi
add    %rbx,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rcx,%rdx,1),%eax
cmp    (%r15,%rdx,1),%al
jne    1283 <sc_substrcmp_ex+0x143>
add    $0x1,%rdx
cmp    %rdx,%rsi
jne    1230 <sc_substrcmp_ex+0xf0>
cmp    %edi,%r14d
jl     1252 <sc_substrcmp_ex+0x112>
jmp    127f <sc_substrcmp_ex+0x13f>
xor    %r14d,%r14d
cmp    %edi,%r14d
jge    127f <sc_substrcmp_ex+0x13f>
movslq %ebp,%r14
movsbl (%rbx,%r14,1),%edi
call   1060 <sc_is_alpha@plt>
mov    $0x1,%ebp
test   %rax,%rax
jne    1288 <sc_substrcmp_ex+0x148>
movsbl (%rbx,%r14,1),%edi
call   1040 <sc_is_digit@plt>
test   %rax,%rax
jne    1288 <sc_substrcmp_ex+0x148>
cmpb   $0x5f,(%rbx,%r14,1)
je     1288 <sc_substrcmp_ex+0x148>
xor    %ebp,%ebp
jmp    1288 <sc_substrcmp_ex+0x148>
mov    $0x1,%ebp
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @sc_substrcmp_ex(i8* %0, i8* %1, i32 %2, i8 signext %3) {
%5 = tail call i32 @sc_strlen(i8* %1)
%6 = tail call i32 @sc_strlen(i8* %0)
%7 = icmp eq i32 %6, %5
br i1 %7, label %8, label %10
8: ; preds = %4
%9 = tail call i32 @strcmp(i8* dereferenceable(1) %0, i8* dereferenceable(1) %1)
br label %69
10: ; preds = %4
%11 = sext i32 %2 to i64
%12 = getelementptr inbounds i8, i8* %0, i64 %11
%13 = load i8, i8* %12
switch i8 %13, label %14 [
i8 32, label %19
i8 9, label %19
i8 13, label %19
i8 10, label %19
i8 92, label %19
]
14: ; preds = %10
%15 = icmp eq i8 %13, %3
br i1 %15, label %19, label %16
16: ; preds = %14
%17 = tail call i64 @sc_is_alpha(i8 signext %13)
%18 = icmp eq i64 %17, 0
br i1 %18, label %69, label %19
19: ; preds = %10, %10, %10, %10, %10, %16, %14
br label %20
20: ; preds = %19, %36
%21 = phi i64 [ %37, %36 ], [ %11, %19 ]
%22 = getelementptr inbounds i8, i8* %0, i64 %21
%23 = load i8, i8* %22
switch i8 %23, label %24 [
i8 32, label %36
i8 9, label %36
i8 13, label %36
i8 10, label %36
i8 92, label %36
]
24: ; preds = %20
%25 = icmp eq i8 %23, %3
br i1 %25, label %36, label %26
26: ; preds = %24
%27 = icmp sgt i32 %5, 0
br i1 %27, label %28, label %50
28: ; preds = %26
%29 = shl i64 %21, 32
%30 = ashr exact i64 %29, 32
%31 = add nsw i32 %5, -1
%32 = zext i32 %31 to i64
%33 = add nsw i64 %30, %32
%34 = add nsw i64 %33, 1
%35 = zext i32 %5 to i64
br label %38
36: ; preds = %20, %20, %20, %20, %20, %24
%37 = add i64 %21, 1
br label %20
38: ; preds = %28, %46
%39 = phi i64 [ 0, %28 ], [ %48, %46 ]
%40 = phi i64 [ %30, %28 ], [ %47, %46 ]
%41 = getelementptr inbounds i8, i8* %0, i64 %40
%42 = load i8, i8* %41
%43 = getelementptr inbounds i8, i8* %1, i64 %39
%44 = load i8, i8* %43
%45 = icmp eq i8 %42, %44
br i1 %45, label %46, label %69
46: ; preds = %38
%47 = add nsw i64 %40, 1
%48 = add nuw nsw i64 %39, 1
%49 = icmp eq i64 %48, %35
br i1 %49, label %50, label %38
50: ; preds = %46, %26
%51 = phi i32 [ 0, %26 ], [ %5, %46 ]
%52 = phi i64 [ %21, %26 ], [ %34, %46 ]
%53 = icmp slt i32 %51, %6
br i1 %53, label %54, label %68
54: ; preds = %50
%55 = shl i64 %52, 32
%56 = ashr exact i64 %55, 32
%57 = getelementptr inbounds i8, i8* %0, i64 %56
%58 = load i8, i8* %57
%59 = tail call i64 @sc_is_alpha(i8 signext %58)
%60 = icmp eq i64 %59, 0
br i1 %60, label %61, label %69
61: ; preds = %54
%62 = load i8, i8* %57
%63 = tail call i64 @sc_is_digit(i8 signext %62)
%64 = icmp eq i64 %63, 0
br i1 %64, label %65, label %69
65: ; preds = %61
%66 = load i8, i8* %57
%67 = icmp eq i8 %66, 95
br i1 %67, label %69, label %68
68: ; preds = %65, %50
br label %69
69: ; preds = %38, %54, %61, %65, %16, %68, %8
%70 = phi i32 [ %9, %8 ], [ 0, %68 ], [ 1, %16 ], [ 1, %65 ], [ 1, %61 ], [ 1, %54 ], [ 1, %38 ]
ret i32 %70
}