#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*/ risalnum(char);
scalar_t__ risalpha(char);
scalar_t__ risdigit(char);
scalar_t__ rstreq(char const *, char const *);
int strcmp(char *, char *);
int /*<<< orphan*/ strcpy(char *, char const *);
int strlen(char const *);
int rpmvercmp(const char *a, const char *b) {
  if (rstreq(a, b))
    return 0;
  char oldch1, oldch2;
  char abuf[strlen(a) + 1], bbuf[strlen(b) + 1];
  char *str1 = abuf, *str2 = bbuf;
  char *one, *two;
  int rc;
  int isnum;
  strcpy(str1, a);
  strcpy(str2, b);
  one = str1;
  two = str2;
  while (*one || *two) {
    while (*one && !risalnum(*one) && *one != '~')
      one++;
    while (*two && !risalnum(*two) && *two != '~')
      two++;
    if (*one == '~' || *two == '~') {
      if (*one != '~')
        return 1;
      if (*two != '~')
        return -1;
      one++;
      two++;
      continue;
    }
    if (!(*one && *two))
      break;
    str1 = one;
    str2 = two;
    if (risdigit(*str1)) {
      while (*str1 && risdigit(*str1))
        str1++;
      while (*str2 && risdigit(*str2))
        str2++;
      isnum = 1;
    } else {
      while (*str1 && risalpha(*str1))
        str1++;
      while (*str2 && risalpha(*str2))
        str2++;
      isnum = 0;
    }
    oldch1 = *str1;
    *str1 = '\0';
    oldch2 = *str2;
    *str2 = '\0';
    if (one == str1)
      return -1;
    if (two == str2)
      return (isnum ? 1 : -1);
    if (isnum) {
      size_t onelen, twolen;
      while (*one == '0')
        one++;
      while (*two == '0')
        two++;
      onelen = strlen(one);
      twolen = strlen(two);
      if (onelen > twolen)
        return 1;
      if (twolen > onelen)
        return -1;
    }
    rc = strcmp(one, two);
    if (rc)
      return (rc < 1 ? -1 : 1);
    *str1 = oldch1;
    one = str1;
    *str2 = oldch2;
    two = str2;
  }
  if ((!*one) && (!*two))
    return 0;
  if (!*one)
    return -1;
  else
    return 1;
}


x86 assembly (clang, -O0):
<rpmvercmp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <rstreq@plt>
cmp    $0x0,%rax
je     11a6 <rpmvercmp+0x36>
movl   $0x0,-0x4(%rbp)
jmp    178f <rpmvercmp+0x61f>
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
add    $0x1,%eax
mov    %rsp,%rcx
mov    %rcx,-0x28(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x80(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0x80(%rbp),%rcx
add    $0x1,%eax
mov    %eax,%edx
mov    %rdx,%rsi
add    $0xf,%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rax
sub    %rsi,%rax
mov    %rax,%rsp
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x48(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x40(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x50(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x81(%rbp)
jne    125c <rpmvercmp+0xec>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    126f <rpmvercmp+0xff>
jmp    172d <rpmvercmp+0x5bd>
jmp    1274 <rpmvercmp+0x104>
mov    -0x50(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x82(%rbp)
je     12be <rpmvercmp+0x14e>
mov    -0x50(%rbp),%rax
movsbl (%rax),%edi
call   1070 <risalnum@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x82(%rbp)
jne    12be <rpmvercmp+0x14e>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
setne  %al
mov    %al,-0x82(%rbp)
mov    -0x82(%rbp),%al
test   $0x1,%al
jne    12d1 <rpmvercmp+0x161>
jmp    12e2 <rpmvercmp+0x172>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1274 <rpmvercmp+0x104>
jmp    12e7 <rpmvercmp+0x177>
mov    -0x58(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x83(%rbp)
je     1331 <rpmvercmp+0x1c1>
mov    -0x58(%rbp),%rax
movsbl (%rax),%edi
call   1070 <risalnum@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x83(%rbp)
jne    1331 <rpmvercmp+0x1c1>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
setne  %al
mov    %al,-0x83(%rbp)
mov    -0x83(%rbp),%al
test   $0x1,%al
jne    1344 <rpmvercmp+0x1d4>
jmp    1355 <rpmvercmp+0x1e5>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    12e7 <rpmvercmp+0x177>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     1375 <rpmvercmp+0x205>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
jne    13d8 <rpmvercmp+0x268>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     1398 <rpmvercmp+0x228>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
je     13bb <rpmvercmp+0x24b>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    1231 <rpmvercmp+0xc1>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13f8 <rpmvercmp+0x288>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    13fd <rpmvercmp+0x28d>
jmp    172d <rpmvercmp+0x5bd>
mov    -0x50(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   1080 <risdigit@plt>
cmp    $0x0,%rax
je     14e3 <rpmvercmp+0x373>
jmp    1428 <rpmvercmp+0x2b8>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x84(%rbp)
je     1459 <rpmvercmp+0x2e9>
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   1080 <risdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x84(%rbp)
mov    -0x84(%rbp),%al
test   $0x1,%al
jne    146c <rpmvercmp+0x2fc>
jmp    147d <rpmvercmp+0x30d>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1428 <rpmvercmp+0x2b8>
jmp    1482 <rpmvercmp+0x312>
mov    -0x48(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x85(%rbp)
je     14b3 <rpmvercmp+0x343>
mov    -0x48(%rbp),%rax
movsbl (%rax),%edi
call   1080 <risdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x85(%rbp)
mov    -0x85(%rbp),%al
test   $0x1,%al
jne    14c6 <rpmvercmp+0x356>
jmp    14d7 <rpmvercmp+0x367>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1482 <rpmvercmp+0x312>
movl   $0x1,-0x60(%rbp)
jmp    159e <rpmvercmp+0x42e>
jmp    14e8 <rpmvercmp+0x378>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x86(%rbp)
je     1519 <rpmvercmp+0x3a9>
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   1090 <risalpha@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x86(%rbp)
mov    -0x86(%rbp),%al
test   $0x1,%al
jne    152c <rpmvercmp+0x3bc>
jmp    153d <rpmvercmp+0x3cd>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    14e8 <rpmvercmp+0x378>
jmp    1542 <rpmvercmp+0x3d2>
mov    -0x48(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x87(%rbp)
je     1573 <rpmvercmp+0x403>
mov    -0x48(%rbp),%rax
movsbl (%rax),%edi
call   1090 <risalpha@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x87(%rbp)
mov    -0x87(%rbp),%al
test   $0x1,%al
jne    1586 <rpmvercmp+0x416>
jmp    1597 <rpmvercmp+0x427>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1542 <rpmvercmp+0x3d2>
movl   $0x0,-0x60(%rbp)
mov    -0x40(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x19(%rbp)
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x48(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x1a(%rbp)
mov    -0x48(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    15df <rpmvercmp+0x46f>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x58(%rbp),%rax
cmp    -0x48(%rbp),%rax
jne    160f <rpmvercmp+0x49f>
mov    -0x60(%rbp),%edx
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
cmpl   $0x0,-0x60(%rbp)
je     16ca <rpmvercmp+0x55a>
jmp    161e <rpmvercmp+0x4ae>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    163f <rpmvercmp+0x4cf>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    161e <rpmvercmp+0x4ae>
jmp    1644 <rpmvercmp+0x4d4>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    1665 <rpmvercmp+0x4f5>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    1644 <rpmvercmp+0x4d4>
mov    -0x50(%rbp),%rdi
call   1050 <strlen@plt>
cltq
mov    %rax,-0x70(%rbp)
mov    -0x58(%rbp),%rdi
call   1050 <strlen@plt>
cltq
mov    %rax,-0x78(%rbp)
mov    -0x70(%rbp),%rax
cmp    -0x78(%rbp),%rax
jbe    16a4 <rpmvercmp+0x534>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x78(%rbp),%rax
cmp    -0x70(%rbp),%rax
jbe    16c5 <rpmvercmp+0x555>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
jmp    16ca <rpmvercmp+0x55a>
mov    -0x50(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   1060 <strcmp@plt>
mov    %eax,-0x5c(%rbp)
cmpl   $0x0,-0x5c(%rbp)
je     1706 <rpmvercmp+0x596>
mov    -0x5c(%rbp),%edx
mov    $0x1,%eax
mov    $0xffffffff,%ecx
cmp    $0x1,%edx
cmovl  %ecx,%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x19(%rbp),%cl
mov    -0x40(%rbp),%rax
mov    %cl,(%rax)
mov    -0x40(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x1a(%rbp),%cl
mov    -0x48(%rbp),%rax
mov    %cl,(%rax)
mov    -0x48(%rbp),%rax
mov    %rax,-0x58(%rbp)
jmp    1231 <rpmvercmp+0xc1>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
jne    175a <rpmvercmp+0x5ea>
mov    -0x58(%rbp),%rax
cmpb   $0x0,(%rax)
jne    175a <rpmvercmp+0x5ea>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
jne    177a <rpmvercmp+0x60a>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    1788 <rpmvercmp+0x618>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rpmvercmp>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rsi,%r12
mov    %rdi,%r13
call   1040 <rstreq@plt>
xor    %edx,%edx
test   %rax,%rax
jne    1465 <rpmvercmp+0x2f5>
mov    %r13,%rdi
call   1050 <strlen@plt>
mov    %rsp,-0x38(%rbp)
add    $0x1,%eax
mov    %rsp,%r14
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r14
mov    %r14,%rsp
mov    %r12,%rdi
call   1050 <strlen@plt>
add    $0x1,%eax
mov    %rsp,%r15
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r15
mov    %r15,%rsp
mov    %r14,%rdi
mov    %r13,%rsi
call   1030 <strcpy@plt>
mov    %r15,%rdi
mov    %r12,%rsi
call   1030 <strcpy@plt>
mov    (%r14),%r12b
test   %r12b,%r12b
jne    11fb <rpmvercmp+0x8b>
cmpb   $0x0,(%r15)
je     1454 <rpmvercmp+0x2e4>
mov    (%r14),%al
test   %al,%al
je     122f <rpmvercmp+0xbf>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %al,%edi
call   1070 <risalnum@plt>
test   %eax,%eax
jne    122f <rpmvercmp+0xbf>
cmpb   $0x7e,(%r14)
je     122f <rpmvercmp+0xbf>
movzbl 0x1(%r14),%eax
add    $0x1,%r14
test   %al,%al
jne    1210 <rpmvercmp+0xa0>
mov    (%r15),%al
test   %al,%al
je     125f <rpmvercmp+0xef>
cs nopw 0x0(%rax,%rax,1)
movsbl %al,%edi
call   1070 <risalnum@plt>
test   %eax,%eax
jne    125f <rpmvercmp+0xef>
cmpb   $0x7e,(%r15)
je     125f <rpmvercmp+0xef>
movzbl 0x1(%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    1240 <rpmvercmp+0xd0>
mov    (%r14),%cl
mov    (%r15),%al
cmp    $0x7e,%cl
je     140f <rpmvercmp+0x29f>
mov    $0x1,%edx
cmp    $0x7e,%al
je     1461 <rpmvercmp+0x2f1>
test   %cl,%cl
je     1420 <rpmvercmp+0x2b0>
test   %al,%al
je     1420 <rpmvercmp+0x2b0>
movsbl %cl,%edi
call   1080 <risdigit@plt>
mov    %rax,%r12
mov    (%r14),%al
mov    %r14,%r13
test   %r12,%r12
je     1309 <rpmvercmp+0x199>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   %al,%al
je     12ce <rpmvercmp+0x15e>
movsbl %al,%edi
call   1080 <risdigit@plt>
test   %rax,%rax
je     12ce <rpmvercmp+0x15e>
movzbl 0x1(%r13),%eax
add    $0x1,%r13
test   %al,%al
jne    12b4 <rpmvercmp+0x144>
mov    (%r15),%al
test   %al,%al
je     1360 <rpmvercmp+0x1f0>
mov    %r15,%rbx
nopl   0x0(%rax)
movsbl %al,%edi
call   1080 <risdigit@plt>
test   %rax,%rax
je     1350 <rpmvercmp+0x1e0>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    12e0 <rpmvercmp+0x170>
jmp    1350 <rpmvercmp+0x1e0>
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%r13),%eax
add    $0x1,%r13
test   %al,%al
je     131a <rpmvercmp+0x1aa>
movsbl %al,%edi
call   1090 <risalpha@plt>
test   %rax,%rax
jne    1300 <rpmvercmp+0x190>
mov    (%r15),%al
test   %al,%al
je     1360 <rpmvercmp+0x1f0>
mov    %r15,%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl %al,%edi
call   1090 <risalpha@plt>
test   %rax,%rax
je     1350 <rpmvercmp+0x1e0>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    1330 <rpmvercmp+0x1c0>
nopl   0x0(%rax)
mov    %r12,%rax
jmp    1366 <rpmvercmp+0x1f6>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r12,%rax
mov    %r15,%rbx
mov    0x0(%r13),%r12b
movb   $0x0,0x0(%r13)
mov    (%rbx),%cl
movb   $0x0,(%rbx)
cmp    %r13,%r14
je     1434 <rpmvercmp+0x2c4>
cmp    %rbx,%r15
je     143b <rpmvercmp+0x2cb>
test   %rax,%rax
mov    %cl,-0x29(%rbp)
je     13e3 <rpmvercmp+0x273>
add    $0xffffffffffffffff,%r14
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmpb   $0x30,0x1(%r14)
lea    0x1(%r14),%r14
je     13a0 <rpmvercmp+0x230>
add    $0xffffffffffffffff,%r15
nop
cmpb   $0x30,0x1(%r15)
lea    0x1(%r15),%r15
je     13b0 <rpmvercmp+0x240>
mov    %r14,%rdi
call   1050 <strlen@plt>
mov    %eax,-0x30(%rbp)
mov    %r15,%rdi
call   1050 <strlen@plt>
cmp    %eax,-0x30(%rbp)
mov    $0x1,%edx
ja     1461 <rpmvercmp+0x2f1>
mov    $0xffffffff,%edx
jb     1461 <rpmvercmp+0x2f1>
mov    %r14,%rdi
mov    %r15,%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
jne    1446 <rpmvercmp+0x2d6>
mov    %r12b,0x0(%r13)
mov    -0x29(%rbp),%al
mov    %al,(%rbx)
mov    %r13,%r14
mov    %rbx,%r15
test   %r12b,%r12b
jne    11fb <rpmvercmp+0x8b>
jmp    11f1 <rpmvercmp+0x81>
cmp    $0x7e,%al
jne    1434 <rpmvercmp+0x2c4>
add    $0x1,%r14
add    $0x1,%r15
jmp    11e9 <rpmvercmp+0x79>
mov    $0x1,%edx
test   %cl,%cl
jne    1461 <rpmvercmp+0x2f1>
mov    $0xffffffff,%edx
test   %al,%al
jne    1461 <rpmvercmp+0x2f1>
jmp    145f <rpmvercmp+0x2ef>
mov    $0xffffffff,%edx
jmp    1461 <rpmvercmp+0x2f1>
cmp    $0x1,%rax
sbb    %edx,%edx
or     $0x1,%edx
jmp    1461 <rpmvercmp+0x2f1>
setg   %al
movzbl %al,%eax
lea    (%rax,%rax,1),%edx
add    $0xffffffff,%edx
jmp    1461 <rpmvercmp+0x2f1>
mov    $0x1,%edx
cmpb   $0x0,(%r14)
jne    1461 <rpmvercmp+0x2f1>
xor    %edx,%edx
mov    -0x38(%rbp),%rsp
mov    %edx,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @rpmvercmp(i8* %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8*
%9 = alloca i64
%10 = alloca i64
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i64
%19 = alloca i64
store i8* %0, i8** %4
store i8* %1, i8** %5
%20 = load i8*, i8** %4
%21 = load i8*, i8** %5
%22 = call i64 @rstreq(i8* %20, i8* %21)
%23 = icmp ne i64 %22, 0
br i1 %23, label %24, label %25
24: ; preds = %2
store i32 0, i32* %3
br label %303
25: ; preds = %2
%26 = load i8*, i8** %4
%27 = call i32 @strlen(i8* %26)
%28 = add nsw i32 %27, 1
%29 = zext i32 %28 to i64
%30 = call i8* @llvm.stacksave()
store i8* %30, i8** %8
%31 = alloca i8, i64 %29
store i64 %29, i64* %9
%32 = load i8*, i8** %5
%33 = call i32 @strlen(i8* %32)
%34 = add nsw i32 %33, 1
%35 = zext i32 %34 to i64
%36 = alloca i8, i64 %35
store i64 %35, i64* %10
store i8* %31, i8** %11
store i8* %36, i8** %12
%37 = load i8*, i8** %11
%38 = load i8*, i8** %4
%39 = call i32 @strcpy(i8* %37, i8* %38)
%40 = load i8*, i8** %12
%41 = load i8*, i8** %5
%42 = call i32 @strcpy(i8* %40, i8* %41)
%43 = load i8*, i8** %11
store i8* %43, i8** %13
%44 = load i8*, i8** %12
store i8* %44, i8** %14
br label %45
45: ; preds = %279, %121, %25
%46 = load i8*, i8** %13
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = icmp ne i32 %48, 0
br i1 %49, label %55, label %50
50: ; preds = %45
%51 = load i8*, i8** %14
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = icmp ne i32 %53, 0
br label %55
55: ; preds = %50, %45
%56 = phi i1 [ true, %45 ], [ %54, %50 ]
br i1 %56, label %57, label %286
57: ; preds = %55
br label %58
58: ; preds = %75, %57
%59 = load i8*, i8** %13
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp ne i32 %61, 0
br i1 %62, label %63, label %73
63: ; preds = %58
%64 = load i8*, i8** %13
%65 = load i8, i8* %64
%66 = call i32 @risalnum(i8 signext %65)
%67 = icmp ne i32 %66, 0
br i1 %67, label %73, label %68
68: ; preds = %63
%69 = load i8*, i8** %13
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp ne i32 %71, 126
br label %73
73: ; preds = %68, %63, %58
%74 = phi i1 [ false, %63 ], [ false, %58 ], [ %72, %68 ]
br i1 %74, label %75, label %78
75: ; preds = %73
%76 = load i8*, i8** %13
%77 = getelementptr inbounds i8, i8* %76, i32 1
store i8* %77, i8** %13
br label %58
78: ; preds = %73
br label %79
79: ; preds = %96, %78
%80 = load i8*, i8** %14
%81 = load i8, i8* %80
%82 = sext i8 %81 to i32
%83 = icmp ne i32 %82, 0
br i1 %83, label %84, label %94
84: ; preds = %79
%85 = load i8*, i8** %14
%86 = load i8, i8* %85
%87 = call i32 @risalnum(i8 signext %86)
%88 = icmp ne i32 %87, 0
br i1 %88, label %94, label %89
89: ; preds = %84
%90 = load i8*, i8** %14
%91 = load i8, i8* %90
%92 = sext i8 %91 to i32
%93 = icmp ne i32 %92, 126
br label %94
94: ; preds = %89, %84, %79
%95 = phi i1 [ false, %84 ], [ false, %79 ], [ %93, %89 ]
br i1 %95, label %96, label %99
96: ; preds = %94
%97 = load i8*, i8** %14
%98 = getelementptr inbounds i8, i8* %97, i32 1
store i8* %98, i8** %14
br label %79
99: ; preds = %94
%100 = load i8*, i8** %13
%101 = load i8, i8* %100
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 126
br i1 %103, label %109, label %104
104: ; preds = %99
%105 = load i8*, i8** %14
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = icmp eq i32 %107, 126
br i1 %108, label %109, label %126
109: ; preds = %104, %99
%110 = load i8*, i8** %13
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = icmp ne i32 %112, 126
br i1 %113, label %114, label %115
114: ; preds = %109
store i32 1, i32* %3
store i32 1, i32* %17
br label %301
115: ; preds = %109
%116 = load i8*, i8** %14
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = icmp ne i32 %118, 126
br i1 %119, label %120, label %121
120: ; preds = %115
store i32 -1, i32* %3
store i32 1, i32* %17
br label %301
121: ; preds = %115
%122 = load i8*, i8** %13
%123 = getelementptr inbounds i8, i8* %122, i32 1
store i8* %123, i8** %13
%124 = load i8*, i8** %14
%125 = getelementptr inbounds i8, i8* %124, i32 1
store i8* %125, i8** %14
br label %45
126: ; preds = %104
%127 = load i8*, i8** %13
%128 = load i8, i8* %127
%129 = sext i8 %128 to i32
%130 = icmp ne i32 %129, 0
br i1 %130, label %131, label %136
131: ; preds = %126
%132 = load i8*, i8** %14
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
%135 = icmp ne i32 %134, 0
br i1 %135, label %137, label %136
136: ; preds = %131, %126
br label %286
137: ; preds = %131
%138 = load i8*, i8** %13
store i8* %138, i8** %11
%139 = load i8*, i8** %14
store i8* %139, i8** %12
%140 = load i8*, i8** %11
%141 = load i8, i8* %140
%142 = call i64 @risdigit(i8 signext %141)
%143 = icmp ne i64 %142, 0
br i1 %143, label %144, label %177
144: ; preds = %137
br label %145
145: ; preds = %157, %144
%146 = load i8*, i8** %11
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = icmp ne i32 %148, 0
br i1 %149, label %150, label %155
150: ; preds = %145
%151 = load i8*, i8** %11
%152 = load i8, i8* %151
%153 = call i64 @risdigit(i8 signext %152)
%154 = icmp ne i64 %153, 0
br label %155
155: ; preds = %150, %145
%156 = phi i1 [ false, %145 ], [ %154, %150 ]
br i1 %156, label %157, label %160
157: ; preds = %155
%158 = load i8*, i8** %11
%159 = getelementptr inbounds i8, i8* %158, i32 1
store i8* %159, i8** %11
br label %145
160: ; preds = %155
br label %161
161: ; preds = %173, %160
%162 = load i8*, i8** %12
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = icmp ne i32 %164, 0
br i1 %165, label %166, label %171
166: ; preds = %161
%167 = load i8*, i8** %12
%168 = load i8, i8* %167
%169 = call i64 @risdigit(i8 signext %168)
%170 = icmp ne i64 %169, 0
br label %171
171: ; preds = %166, %161
%172 = phi i1 [ false, %161 ], [ %170, %166 ]
br i1 %172, label %173, label %176
173: ; preds = %171
%174 = load i8*, i8** %12
%175 = getelementptr inbounds i8, i8* %174, i32 1
store i8* %175, i8** %12
br label %161
176: ; preds = %171
store i32 1, i32* %16
br label %210
177: ; preds = %137
br label %178
178: ; preds = %190, %177
%179 = load i8*, i8** %11
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = icmp ne i32 %181, 0
br i1 %182, label %183, label %188
183: ; preds = %178
%184 = load i8*, i8** %11
%185 = load i8, i8* %184
%186 = call i64 @risalpha(i8 signext %185)
%187 = icmp ne i64 %186, 0
br label %188
188: ; preds = %183, %178
%189 = phi i1 [ false, %178 ], [ %187, %183 ]
br i1 %189, label %190, label %193
190: ; preds = %188
%191 = load i8*, i8** %11
%192 = getelementptr inbounds i8, i8* %191, i32 1
store i8* %192, i8** %11
br label %178
193: ; preds = %188
br label %194
194: ; preds = %206, %193
%195 = load i8*, i8** %12
%196 = load i8, i8* %195
%197 = sext i8 %196 to i32
%198 = icmp ne i32 %197, 0
br i1 %198, label %199, label %204
199: ; preds = %194
%200 = load i8*, i8** %12
%201 = load i8, i8* %200
%202 = call i64 @risalpha(i8 signext %201)
%203 = icmp ne i64 %202, 0
br label %204
204: ; preds = %199, %194
%205 = phi i1 [ false, %194 ], [ %203, %199 ]
br i1 %205, label %206, label %209
206: ; preds = %204
%207 = load i8*, i8** %12
%208 = getelementptr inbounds i8, i8* %207, i32 1
store i8* %208, i8** %12
br label %194
209: ; preds = %204
store i32 0, i32* %16
br label %210
210: ; preds = %209, %176
%211 = load i8*, i8** %11
%212 = load i8, i8* %211
store i8 %212, i8* %6
%213 = load i8*, i8** %11
store i8 0, i8* %213
%214 = load i8*, i8** %12
%215 = load i8, i8* %214
store i8 %215, i8* %7
%216 = load i8*, i8** %12
store i8 0, i8* %216
%217 = load i8*, i8** %13
%218 = load i8*, i8** %11
%219 = icmp eq i8* %217, %218
br i1 %219, label %220, label %221
220: ; preds = %210
store i32 -1, i32* %3
store i32 1, i32* %17
br label %301
221: ; preds = %210
%222 = load i8*, i8** %14
%223 = load i8*, i8** %12
%224 = icmp eq i8* %222, %223
br i1 %224, label %225, label %230
225: ; preds = %221
%226 = load i32, i32* %16
%227 = icmp ne i32 %226, 0
%228 = zext i1 %227 to i64
%229 = select i1 %227, i32 1, i32 -1
store i32 %229, i32* %3
store i32 1, i32* %17
br label %301
230: ; preds = %221
%231 = load i32, i32* %16
%232 = icmp ne i32 %231, 0
br i1 %232, label %233, label %268
233: ; preds = %230
br label %234
234: ; preds = %239, %233
%235 = load i8*, i8** %13
%236 = load i8, i8* %235
%237 = sext i8 %236 to i32
%238 = icmp eq i32 %237, 48
br i1 %238, label %239, label %242
239: ; preds = %234
%240 = load i8*, i8** %13
%241 = getelementptr inbounds i8, i8* %240, i32 1
store i8* %241, i8** %13
br label %234
242: ; preds = %234
br label %243
243: ; preds = %248, %242
%244 = load i8*, i8** %14
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = icmp eq i32 %246, 48
br i1 %247, label %248, label %251
248: ; preds = %243
%249 = load i8*, i8** %14
%250 = getelementptr inbounds i8, i8* %249, i32 1
store i8* %250, i8** %14
br label %243
251: ; preds = %243
%252 = load i8*, i8** %13
%253 = call i32 @strlen(i8* %252)
%254 = sext i32 %253 to i64
store i64 %254, i64* %18
%255 = load i8*, i8** %14
%256 = call i32 @strlen(i8* %255)
%257 = sext i32 %256 to i64
store i64 %257, i64* %19
%258 = load i64, i64* %18
%259 = load i64, i64* %19
%260 = icmp ugt i64 %258, %259
br i1 %260, label %261, label %262
261: ; preds = %251
store i32 1, i32* %3
store i32 1, i32* %17
br label %301
262: ; preds = %251
%263 = load i64, i64* %19
%264 = load i64, i64* %18
%265 = icmp ugt i64 %263, %264
br i1 %265, label %266, label %267
266: ; preds = %262
store i32 -1, i32* %3
store i32 1, i32* %17
br label %301
267: ; preds = %262
br label %268
268: ; preds = %267, %230
%269 = load i8*, i8** %13
%270 = load i8*, i8** %14
%271 = call i32 @strcmp(i8* %269, i8* %270)
store i32 %271, i32* %15
%272 = load i32, i32* %15
%273 = icmp ne i32 %272, 0
br i1 %273, label %274, label %279
274: ; preds = %268
%275 = load i32, i32* %15
%276 = icmp slt i32 %275, 1
%277 = zext i1 %276 to i64
%278 = select i1 %276, i32 -1, i32 1
store i32 %278, i32* %3
store i32 1, i32* %17
br label %301
279: ; preds = %268
%280 = load i8, i8* %6
%281 = load i8*, i8** %11
store i8 %280, i8* %281
%282 = load i8*, i8** %11
store i8* %282, i8** %13
%283 = load i8, i8* %7
%284 = load i8*, i8** %12
store i8 %283, i8* %284
%285 = load i8*, i8** %12
store i8* %285, i8** %14
br label %45
286: ; preds = %136, %55
%287 = load i8*, i8** %13
%288 = load i8, i8* %287
%289 = icmp ne i8 %288, 0
br i1 %289, label %295, label %290
290: ; preds = %286
%291 = load i8*, i8** %14
%292 = load i8, i8* %291
%293 = icmp ne i8 %292, 0
br i1 %293, label %295, label %294
294: ; preds = %290
store i32 0, i32* %3
store i32 1, i32* %17
br label %301
295: ; preds = %290, %286
%296 = load i8*, i8** %13
%297 = load i8, i8* %296
%298 = icmp ne i8 %297, 0
br i1 %298, label %300, label %299
299: ; preds = %295
store i32 -1, i32* %3
store i32 1, i32* %17
br label %301
300: ; preds = %295
store i32 1, i32* %3
store i32 1, i32* %17
br label %301
301: ; preds = %300, %299, %294, %274, %266, %261, %225, %220, %120, %114
%302 = load i8*, i8** %8
br label %303
303: ; preds = %301, %24
%304 = load i32, i32* %3
ret i32 %304
}

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