#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__ isdigit(int);
int memcmp(char const *, char const *, int);
int name_cmp(const char *a, const char *b, int separator) {
  while (1) {
    int cha = (unsigned char)*a, chb = (unsigned char)*b;
    if (!cha || !chb)
      return cha - chb;
    if (isdigit(cha)) {
      const char *sa, *sb, *ea, *eb;
      int res;
      if (!isdigit(chb))
        return chb == separator ? 1 : -1;
      sa = a;
      while (*sa == '0')
        sa++;
      ea = sa;
      while (isdigit((unsigned char)*ea))
        ea++;
      sb = b;
      while (*sb == '0')
        sb++;
      eb = sb;
      while (isdigit((unsigned char)*eb))
        eb++;
      res = (ea - sa) - (eb - sb);
      if (!res)
        res = memcmp(sa, sb, ea - sa);
      if (!res)
        res = (sb - b) - (sa - a);
      if (res)
        return res;
      a = ea;
      b = eb;
      continue;
    }
    if (cha != chb) {
      if (cha == separator)
        return -1;
      if (isdigit(chb) || chb == separator)
        return 1;
      return cha - chb;
    }
    a++;
    b++;
  }
}


x86 assembly (clang, -O0):
<name_cmp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     115b <name_cmp+0x3b>
cmpl   $0x0,-0x24(%rbp)
jne    1169 <name_cmp+0x49>
mov    -0x20(%rbp),%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x20(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     12ed <name_cmp+0x1cd>
mov    -0x24(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    11aa <name_cmp+0x8a>
mov    -0x24(%rbp),%edx
mov    -0x1c(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    11d3 <name_cmp+0xb3>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11b2 <name_cmp+0x92>
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1202 <name_cmp+0xe2>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    11db <name_cmp+0xbb>
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    122b <name_cmp+0x10b>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    120a <name_cmp+0xea>
mov    -0x38(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     125a <name_cmp+0x13a>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1233 <name_cmp+0x113>
mov    -0x40(%rbp),%rax
mov    -0x30(%rbp),%rcx
sub    %rcx,%rax
mov    -0x48(%rbp),%rcx
mov    -0x38(%rbp),%rdx
sub    %rdx,%rcx
sub    %rcx,%rax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jne    129d <name_cmp+0x17d>
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rax
mov    -0x30(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%edx
call   1040 <memcmp@plt>
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jne    12c3 <name_cmp+0x1a3>
mov    -0x38(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    %rcx,%rax
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rdx
sub    %rdx,%rcx
sub    %rcx,%rax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     12d8 <name_cmp+0x1b8>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x40(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1133 <name_cmp+0x13>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1349 <name_cmp+0x229>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    1311 <name_cmp+0x1f1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x24(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    132f <name_cmp+0x20f>
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    133b <name_cmp+0x21b>
movl   $0x1,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x20(%rbp),%eax
sub    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1366 <name_cmp+0x246>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1133 <name_cmp+0x13>
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<name_cmp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    (%rdi),%bl
mov    (%rsi),%r13b
test   %bl,%bl
je     1277 <name_cmp+0x157>
test   %r13b,%r13b
je     1277 <name_cmp+0x157>
mov    %rsi,%r14
mov    %rdi,%r15
mov    %edx,0xc(%rsp)
xchg   %ax,%ax
movzbl %bl,%ebp
mov    %ebp,%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1250 <name_cmp+0x130>
movzbl %r13b,%ebx
mov    %ebx,%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1291 <name_cmp+0x171>
mov    $0x1,%eax
mov    %r15,%rcx
mov    %r15,0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r15,%r13
mov    %eax,%ebx
movzbl (%r15),%edi
add    $0x1,%r15
lea    0x1(%rbx),%eax
cmp    $0x30,%edi
je     1190 <name_cmp+0x70>
call   1030 <isdigit@plt>
mov    %r13,%r15
test   %rax,%rax
je     11d3 <name_cmp+0xb3>
mov    %r13,%r15
cs nopw 0x0(%rax,%rax,1)
nop
movzbl 0x1(%r15),%edi
add    $0x1,%r15
call   1030 <isdigit@plt>
test   %rax,%rax
jne    11c0 <name_cmp+0xa0>
lea    -0x1(%r14),%rbp
nopw   0x0(%rax,%rax,1)
movzbl 0x1(%rbp),%edi
add    $0x1,%rbp
add    $0xffffffff,%ebx
cmp    $0x30,%edi
je     11e0 <name_cmp+0xc0>
call   1030 <isdigit@plt>
mov    %rbp,%r12
test   %rax,%rax
je     1214 <name_cmp+0xf4>
mov    %rbp,%r12
movzbl 0x1(%r12),%edi
add    $0x1,%r12
call   1030 <isdigit@plt>
test   %rax,%rax
jne    1200 <name_cmp+0xe0>
lea    (%r15,%r14,1),%eax
sub    0x10(%rsp),%eax
sub    %r12d,%eax
sub    %ebx,%eax
jne    1234 <name_cmp+0x114>
mov    %r15,%rdx
sub    %r13,%rdx
mov    %r13,%rdi
mov    %rbp,%rsi
call   1040 <memcmp@plt>
neg    %ebx
test   %eax,%eax
cmovne %eax,%ebx
test   %ebx,%ebx
je     1260 <name_cmp+0x140>
jmp    1280 <name_cmp+0x160>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    %r13b,%bl
jne    12a2 <name_cmp+0x182>
add    $0x1,%r15
add    $0x1,%r14
mov    %r14,%r12
mov    (%r15),%bl
mov    (%r12),%r13b
test   %bl,%bl
je     1277 <name_cmp+0x157>
mov    %r12,%r14
test   %r13b,%r13b
jne    1150 <name_cmp+0x30>
movzbl %bl,%ebx
movzbl %r13b,%eax
sub    %eax,%ebx
mov    %ebx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %eax,%eax
cmp    0xc(%rsp),%ebx
sete   %al
lea    (%rax,%rax,1),%ebx
add    $0xffffffff,%ebx
jmp    1280 <name_cmp+0x160>
mov    $0xffffffff,%ebx
cmp    0xc(%rsp),%ebp
je     1280 <name_cmp+0x160>
movzbl %r13b,%ebx
mov    %ebx,%edi
call   1030 <isdigit@plt>
sub    %ebx,%ebp
cmp    0xc(%rsp),%ebx
mov    $0x1,%ecx
cmove  %ecx,%ebp
test   %rax,%rax
cmovne %ecx,%ebp
mov    %ebp,%ebx
jmp    1280 <name_cmp+0x160>

LLVM IR (-O0):
define i32 @name_cmp(i8* %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
br label %15
15: ; preds = %3, %133, %158
%16 = load i8*, i8** %5
%17 = load i8, i8* %16
%18 = zext i8 %17 to i32
store i32 %18, i32* %8
%19 = load i8*, i8** %6
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
store i32 %21, i32* %9
%22 = load i32, i32* %8
%23 = icmp ne i32 %22, 0
br i1 %23, label %24, label %27
24: ; preds = %15
%25 = load i32, i32* %9
%26 = icmp ne i32 %25, 0
br i1 %26, label %31, label %27
27: ; preds = %24, %15
%28 = load i32, i32* %8
%29 = load i32, i32* %9
%30 = sub nsw i32 %28, %29
store i32 %30, i32* %4
br label %163
31: ; preds = %24
%32 = load i32, i32* %8
%33 = call i64 @isdigit(i32 %32)
%34 = icmp ne i64 %33, 0
br i1 %34, label %35, label %136
35: ; preds = %31
%36 = load i32, i32* %9
%37 = call i64 @isdigit(i32 %36)
%38 = icmp ne i64 %37, 0
br i1 %38, label %45, label %39
39: ; preds = %35
%40 = load i32, i32* %9
%41 = load i32, i32* %7
%42 = icmp eq i32 %40, %41
%43 = zext i1 %42 to i64
%44 = select i1 %42, i32 1, i32 -1
store i32 %44, i32* %4
br label %163
45: ; preds = %35
%46 = load i8*, i8** %5
store i8* %46, i8** %10
br label %47
47: ; preds = %52, %45
%48 = load i8*, i8** %10
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 48
br i1 %51, label %52, label %55
52: ; preds = %47
%53 = load i8*, i8** %10
%54 = getelementptr inbounds i8, i8* %53, i32 1
store i8* %54, i8** %10
br label %47
55: ; preds = %47
%56 = load i8*, i8** %10
store i8* %56, i8** %12
br label %57
57: ; preds = %63, %55
%58 = load i8*, i8** %12
%59 = load i8, i8* %58
%60 = zext i8 %59 to i32
%61 = call i64 @isdigit(i32 %60)
%62 = icmp ne i64 %61, 0
br i1 %62, label %63, label %66
63: ; preds = %57
%64 = load i8*, i8** %12
%65 = getelementptr inbounds i8, i8* %64, i32 1
store i8* %65, i8** %12
br label %57
66: ; preds = %57
%67 = load i8*, i8** %6
store i8* %67, i8** %11
br label %68
68: ; preds = %73, %66
%69 = load i8*, i8** %11
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 48
br i1 %72, label %73, label %76
73: ; preds = %68
%74 = load i8*, i8** %11
%75 = getelementptr inbounds i8, i8* %74, i32 1
store i8* %75, i8** %11
br label %68
76: ; preds = %68
%77 = load i8*, i8** %11
store i8* %77, i8** %13
br label %78
78: ; preds = %84, %76
%79 = load i8*, i8** %13
%80 = load i8, i8* %79
%81 = zext i8 %80 to i32
%82 = call i64 @isdigit(i32 %81)
%83 = icmp ne i64 %82, 0
br i1 %83, label %84, label %87
84: ; preds = %78
%85 = load i8*, i8** %13
%86 = getelementptr inbounds i8, i8* %85, i32 1
store i8* %86, i8** %13
br label %78
87: ; preds = %78
%88 = load i8*, i8** %12
%89 = load i8*, i8** %10
%90 = ptrtoint i8* %88 to i64
%91 = ptrtoint i8* %89 to i64
%92 = sub i64 %90, %91
%93 = load i8*, i8** %13
%94 = load i8*, i8** %11
%95 = ptrtoint i8* %93 to i64
%96 = ptrtoint i8* %94 to i64
%97 = sub i64 %95, %96
%98 = sub nsw i64 %92, %97
%99 = trunc i64 %98 to i32
store i32 %99, i32* %14
%100 = load i32, i32* %14
%101 = icmp ne i32 %100, 0
br i1 %101, label %112, label %102
102: ; preds = %87
%103 = load i8*, i8** %10
%104 = load i8*, i8** %11
%105 = load i8*, i8** %12
%106 = load i8*, i8** %10
%107 = ptrtoint i8* %105 to i64
%108 = ptrtoint i8* %106 to i64
%109 = sub i64 %107, %108
%110 = trunc i64 %109 to i32
%111 = call i32 @memcmp(i8* %103, i8* %104, i32 %110)
store i32 %111, i32* %14
br label %112
112: ; preds = %102, %87
%113 = load i32, i32* %14
%114 = icmp ne i32 %113, 0
br i1 %114, label %128, label %115
115: ; preds = %112
%116 = load i8*, i8** %11
%117 = load i8*, i8** %6
%118 = ptrtoint i8* %116 to i64
%119 = ptrtoint i8* %117 to i64
%120 = sub i64 %118, %119
%121 = load i8*, i8** %10
%122 = load i8*, i8** %5
%123 = ptrtoint i8* %121 to i64
%124 = ptrtoint i8* %122 to i64
%125 = sub i64 %123, %124
%126 = sub nsw i64 %120, %125
%127 = trunc i64 %126 to i32
store i32 %127, i32* %14
br label %128
128: ; preds = %115, %112
%129 = load i32, i32* %14
%130 = icmp ne i32 %129, 0
br i1 %130, label %131, label %133
131: ; preds = %128
%132 = load i32, i32* %14
store i32 %132, i32* %4
br label %163
133: ; preds = %128
%134 = load i8*, i8** %12
store i8* %134, i8** %5
%135 = load i8*, i8** %13
store i8* %135, i8** %6
br label %15
136: ; preds = %31
%137 = load i32, i32* %8
%138 = load i32, i32* %9
%139 = icmp ne i32 %137, %138
br i1 %139, label %140, label %158
140: ; preds = %136
%141 = load i32, i32* %8
%142 = load i32, i32* %7
%143 = icmp eq i32 %141, %142
br i1 %143, label %144, label %145
144: ; preds = %140
store i32 -1, i32* %4
br label %163
145: ; preds = %140
%146 = load i32, i32* %9
%147 = call i64 @isdigit(i32 %146)
%148 = icmp ne i64 %147, 0
br i1 %148, label %153, label %149
149: ; preds = %145
%150 = load i32, i32* %9
%151 = load i32, i32* %7
%152 = icmp eq i32 %150, %151
br i1 %152, label %153, label %154
153: ; preds = %149, %145
store i32 1, i32* %4
br label %163
154: ; preds = %149
%155 = load i32, i32* %8
%156 = load i32, i32* %9
%157 = sub nsw i32 %155, %156
store i32 %157, i32* %4
br label %163
158: ; preds = %136
%159 = load i8*, i8** %5
%160 = getelementptr inbounds i8, i8* %159, i32 1
store i8* %160, i8** %5
%161 = load i8*, i8** %6
%162 = getelementptr inbounds i8, i8* %161, i32 1
store i8* %162, i8** %6
br label %15
163: ; preds = %154, %153, %144, %131, %39, %27
%164 = load i32, i32* %4
ret i32 %164
}

LLVM IR (-O2):
define i32 @name_cmp(i8* %0, i8* %1, i32 %2) {
%4 = load i8, i8* %0
%5 = load i8, i8* %1
%6 = icmp ne i8 %4, 0
%7 = icmp ne i8 %5, 0
%8 = select i1 %6, i1 %7, i1 false
br i1 %8, label %15, label %9
9: ; preds = %104, %3
%10 = phi i8 [ %4, %3 ], [ %107, %104 ]
%11 = phi i8 [ %5, %3 ], [ %108, %104 ]
%12 = zext i8 %10 to i32
%13 = zext i8 %11 to i32
%14 = sub nsw i32 %12, %13
br label %112
15: ; preds = %3, %104
%16 = phi i8 [ %108, %104 ], [ %5, %3 ]
%17 = phi i8 [ %107, %104 ], [ %4, %3 ]
%18 = phi i8* [ %106, %104 ], [ %0, %3 ]
%19 = phi i8* [ %105, %104 ], [ %1, %3 ]
%20 = zext i8 %17 to i32
%21 = tail call i64 @isdigit(i32 %20)
%22 = icmp eq i64 %21, 0
br i1 %22, label %89, label %23
23: ; preds = %15
%24 = zext i8 %16 to i32
%25 = tail call i64 @isdigit(i32 %24)
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %30
27: ; preds = %23
%28 = icmp eq i32 %24, %2
%29 = select i1 %28, i32 1, i32 -1
br label %112
30: ; preds = %23, %30
%31 = phi i8* [ %34, %30 ], [ %18, %23 ]
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 48
%34 = getelementptr inbounds i8, i8* %31, i64 1
br i1 %33, label %30, label %35
35: ; preds = %30
%36 = zext i8 %32 to i32
%37 = tail call i64 @isdigit(i32 %36)
%38 = icmp eq i64 %37, 0
br i1 %38, label %46, label %39
39: ; preds = %35, %39
%40 = phi i8* [ %41, %39 ], [ %31, %35 ]
%41 = getelementptr inbounds i8, i8* %40, i64 1
%42 = load i8, i8* %41
%43 = zext i8 %42 to i32
%44 = tail call i64 @isdigit(i32 %43)
%45 = icmp eq i64 %44, 0
br i1 %45, label %46, label %39
46: ; preds = %39, %35
%47 = phi i8* [ %31, %35 ], [ %41, %39 ]
br label %48
48: ; preds = %48, %46
%49 = phi i8* [ %52, %48 ], [ %19, %46 ]
%50 = load i8, i8* %49
%51 = icmp eq i8 %50, 48
%52 = getelementptr inbounds i8, i8* %49, i64 1
br i1 %51, label %48, label %53
53: ; preds = %48
%54 = zext i8 %50 to i32
%55 = tail call i64 @isdigit(i32 %54)
%56 = icmp eq i64 %55, 0
br i1 %56, label %64, label %57
57: ; preds = %53, %57
%58 = phi i8* [ %59, %57 ], [ %49, %53 ]
%59 = getelementptr inbounds i8, i8* %58, i64 1
%60 = load i8, i8* %59
%61 = zext i8 %60 to i32
%62 = tail call i64 @isdigit(i32 %61)
%63 = icmp eq i64 %62, 0
br i1 %63, label %64, label %57
64: ; preds = %57, %53
%65 = phi i8* [ %49, %53 ], [ %59, %57 ]
%66 = ptrtoint i8* %47 to i64
%67 = ptrtoint i8* %31 to i64
%68 = sub i64 %66, %67
%69 = ptrtoint i8* %65 to i64
%70 = ptrtoint i8* %49 to i64
%71 = add i64 %68, %70
%72 = sub i64 %71, %69
%73 = trunc i64 %72 to i32
%74 = icmp eq i32 %73, 0
br i1 %74, label %75, label %78
75: ; preds = %64
%76 = trunc i64 %68 to i32
%77 = tail call i32 @memcmp(i8* %31, i8* %49, i32 %76)
br label %78
78: ; preds = %75, %64
%79 = phi i32 [ %73, %64 ], [ %77, %75 ]
%80 = icmp eq i32 %79, 0
%81 = ptrtoint i8* %19 to i64
%82 = ptrtoint i8* %18 to i64
%83 = add i64 %81, %67
%84 = sub i64 %82, %83
%85 = add i64 %84, %70
%86 = trunc i64 %85 to i32
%87 = select i1 %80, i32 %86, i32 %79
%88 = icmp eq i32 %87, 0
br i1 %88, label %104, label %112
89: ; preds = %15
%90 = icmp eq i8 %17, %16
br i1 %90, label %101, label %91
91: ; preds = %89
%92 = zext i8 %16 to i32
%93 = icmp eq i32 %20, %2
br i1 %93, label %112, label %94
94: ; preds = %91
%95 = tail call i64 @isdigit(i32 %92)
%96 = icmp ne i64 %95, 0
%97 = icmp eq i32 %92, %2
%98 = select i1 %96, i1 true, i1 %97
%99 = sub nsw i32 %20, %92
%100 = select i1 %98, i32 1, i32 %99
br label %112
101: ; preds = %89
%102 = getelementptr inbounds i8, i8* %18, i64 1
%103 = getelementptr inbounds i8, i8* %19, i64 1
br label %104
104: ; preds = %78, %101
%105 = phi i8* [ %103, %101 ], [ %65, %78 ]
%106 = phi i8* [ %102, %101 ], [ %47, %78 ]
%107 = load i8, i8* %106
%108 = load i8, i8* %105
%109 = icmp ne i8 %107, 0
%110 = icmp ne i8 %108, 0
%111 = select i1 %109, i1 %110, i1 false
br i1 %111, label %15, label %9
112: ; preds = %78, %9, %27, %91, %94
%113 = phi i32 [ %100, %94 ], [ -1, %91 ], [ %29, %27 ], [ %14, %9 ], [ %87, %78 ]
ret i32 %113
}