#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*/ printf(char *, char *);
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 *);
scalar_t__ strlen(char const *);
int rpmvercmp(const char *a, const char *b) {
  char oldch1, oldch2;
  char abuf[strlen(a) + 1], bbuf[strlen(b) + 1];
  char *str1 = abuf, *str2 = bbuf;
  char *one, *two;
  int rc;
  int isnum;
  if (rstreq(a, b))
    return 0;
  strcpy(str1, a);
  strcpy(str2, b);
  one = str1;
  two = str2;
  while (*one && *two) {
    while (*one && !risalnum(*one))
      one++;
    while (*two && !risalnum(*two))
      two++;
    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) {
      while (*one == '0')
        one++;
      while (*two == '0')
        two++;
      if (strlen(one) > strlen(two))
        return 1;
      if (strlen(two) > strlen(one))
        return -1;
    }
    rc = strcmp(one, two);
    if (rc)
      return (rc < 1 ? -1 : 1);
    *str1 = oldch1;
    one = str1;
    *str2 = oldch2;
    two = str2;
  }
  printf("Still have- %s\n", one);
  printf("Still have- %s\n", two);
  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
call   1050 <strlen@plt>
mov    %rax,%rdx
mov    %rdx,%rax
add    $0x1,%rax
mov    %rsp,%rcx
mov    %rcx,-0x28(%rbp)
add    $0x10,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x70(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0x70(%rbp),%rcx
mov    %rax,%rsi
mov    %rsi,%rdx
add    $0x1,%rdx
add    $0x10,%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    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1040 <rstreq@plt>
cmp    $0x0,%rax
je     1224 <rpmvercmp+0xa4>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
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
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x71(%rbp)
je     1273 <rpmvercmp+0xf3>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x71(%rbp)
mov    -0x71(%rbp),%al
test   $0x1,%al
jne    1283 <rpmvercmp+0x103>
jmp    1670 <rpmvercmp+0x4f0>
jmp    1288 <rpmvercmp+0x108>
mov    -0x50(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x72(%rbp)
je     12b4 <rpmvercmp+0x134>
mov    -0x50(%rbp),%rax
movsbl (%rax),%edi
call   1080 <risalnum@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x72(%rbp)
mov    -0x72(%rbp),%al
test   $0x1,%al
jne    12c4 <rpmvercmp+0x144>
jmp    12d5 <rpmvercmp+0x155>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1288 <rpmvercmp+0x108>
jmp    12da <rpmvercmp+0x15a>
mov    -0x58(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x73(%rbp)
je     1306 <rpmvercmp+0x186>
mov    -0x58(%rbp),%rax
movsbl (%rax),%edi
call   1080 <risalnum@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x73(%rbp)
mov    -0x73(%rbp),%al
test   $0x1,%al
jne    1316 <rpmvercmp+0x196>
jmp    1327 <rpmvercmp+0x1a7>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    12da <rpmvercmp+0x15a>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1347 <rpmvercmp+0x1c7>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    134c <rpmvercmp+0x1cc>
jmp    1670 <rpmvercmp+0x4f0>
mov    -0x50(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   1090 <risdigit@plt>
cmp    $0x0,%rax
je     1420 <rpmvercmp+0x2a0>
jmp    1377 <rpmvercmp+0x1f7>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x74(%rbp)
je     13a2 <rpmvercmp+0x222>
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   1090 <risdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x74(%rbp)
mov    -0x74(%rbp),%al
test   $0x1,%al
jne    13b2 <rpmvercmp+0x232>
jmp    13c3 <rpmvercmp+0x243>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1377 <rpmvercmp+0x1f7>
jmp    13c8 <rpmvercmp+0x248>
mov    -0x48(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x75(%rbp)
je     13f3 <rpmvercmp+0x273>
mov    -0x48(%rbp),%rax
movsbl (%rax),%edi
call   1090 <risdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x75(%rbp)
mov    -0x75(%rbp),%al
test   $0x1,%al
jne    1403 <rpmvercmp+0x283>
jmp    1414 <rpmvercmp+0x294>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    13c8 <rpmvercmp+0x248>
movl   $0x1,-0x60(%rbp)
jmp    14c9 <rpmvercmp+0x349>
jmp    1425 <rpmvercmp+0x2a5>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x76(%rbp)
je     1450 <rpmvercmp+0x2d0>
mov    -0x40(%rbp),%rax
movsbl (%rax),%edi
call   10a0 <risalpha@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x76(%rbp)
mov    -0x76(%rbp),%al
test   $0x1,%al
jne    1460 <rpmvercmp+0x2e0>
jmp    1471 <rpmvercmp+0x2f1>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1425 <rpmvercmp+0x2a5>
jmp    1476 <rpmvercmp+0x2f6>
mov    -0x48(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x77(%rbp)
je     14a1 <rpmvercmp+0x321>
mov    -0x48(%rbp),%rax
movsbl (%rax),%edi
call   10a0 <risalpha@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x77(%rbp)
mov    -0x77(%rbp),%al
test   $0x1,%al
jne    14b1 <rpmvercmp+0x331>
jmp    14c2 <rpmvercmp+0x342>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1476 <rpmvercmp+0x2f6>
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    150a <rpmvercmp+0x38a>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
mov    -0x58(%rbp),%rax
cmp    -0x48(%rbp),%rax
jne    153a <rpmvercmp+0x3ba>
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    16eb <rpmvercmp+0x56b>
cmpl   $0x0,-0x60(%rbp)
je     160d <rpmvercmp+0x48d>
jmp    1549 <rpmvercmp+0x3c9>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    156a <rpmvercmp+0x3ea>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1549 <rpmvercmp+0x3c9>
jmp    156f <rpmvercmp+0x3ef>
mov    -0x58(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    1590 <rpmvercmp+0x410>
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
jmp    156f <rpmvercmp+0x3ef>
mov    -0x50(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,-0x80(%rbp)
mov    -0x58(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0x80(%rbp),%rax
cmp    %rcx,%rax
jle    15c9 <rpmvercmp+0x449>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
mov    -0x58(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,-0x88(%rbp)
mov    -0x50(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,%rcx
mov    -0x88(%rbp),%rax
cmp    %rcx,%rax
jle    1608 <rpmvercmp+0x488>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
jmp    160d <rpmvercmp+0x48d>
mov    -0x50(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   1070 <strcmp@plt>
mov    %eax,-0x5c(%rbp)
cmpl   $0x0,-0x5c(%rbp)
je     1649 <rpmvercmp+0x4c9>
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    16eb <rpmvercmp+0x56b>
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    124e <rpmvercmp+0xce>
mov    -0x50(%rbp),%rsi
lea    0x985(%rip),%rdi
call   1060 <printf@plt>
mov    -0x58(%rbp),%rsi
lea    0x975(%rip),%rdi
call   1060 <printf@plt>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
jne    16bd <rpmvercmp+0x53d>
mov    -0x58(%rbp),%rax
cmpb   $0x0,(%rax)
jne    16bd <rpmvercmp+0x53d>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
jne    16dd <rpmvercmp+0x55d>
movl   $0xffffffff,-0x4(%rbp)
movl   $0x1,-0x64(%rbp)
jmp    16eb <rpmvercmp+0x56b>
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,%r15
mov    %rdi,%r12
call   1050 <strlen@plt>
mov    %rsp,%r14
add    $0x10,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r14
mov    %r14,%rsp
mov    %r15,%rdi
call   1050 <strlen@plt>
mov    %rsp,%rbx
add    $0x10,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rbx
mov    %rbx,%rsp
mov    %r12,%rdi
mov    %r15,%rsi
call   1040 <rstreq@plt>
xor    %ecx,%ecx
test   %rax,%rax
jne    1423 <rpmvercmp+0x2a3>
mov    %r14,%rdi
mov    %r12,%rsi
call   1030 <strcpy@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
call   1030 <strcpy@plt>
cmpb   $0x0,(%r14)
je     13ea <rpmvercmp+0x26a>
mov    (%rbx),%r13b
test   %r13b,%r13b
je     13ea <rpmvercmp+0x26a>
mov    (%r14),%al
test   %al,%al
je     1240 <rpmvercmp+0xc0>
nop
movsbl %al,%edi
call   1080 <risalnum@plt>
test   %eax,%eax
jne    1229 <rpmvercmp+0xa9>
movzbl 0x1(%r14),%eax
add    $0x1,%r14
test   %al,%al
jne    1210 <rpmvercmp+0x90>
mov    (%rbx),%r13b
test   %r13b,%r13b
je     125b <rpmvercmp+0xdb>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl %r13b,%edi
call   1080 <risalnum@plt>
test   %eax,%eax
jne    125b <rpmvercmp+0xdb>
movzbl 0x1(%rbx),%r13d
add    $0x1,%rbx
test   %r13b,%r13b
jne    1240 <rpmvercmp+0xc0>
mov    %r14,%r15
mov    %rbx,%r12
mov    (%r14),%al
test   %al,%al
je     13e4 <rpmvercmp+0x264>
cmpb   $0x0,(%r12)
je     13e4 <rpmvercmp+0x264>
movsbl %al,%edi
call   1090 <risdigit@plt>
mov    %rax,%r13
mov    (%r15),%al
mov    %r15,%r14
test   %r13,%r13
je     12e9 <rpmvercmp+0x169>
nopl   (%rax)
test   %al,%al
je     12ae <rpmvercmp+0x12e>
movsbl %al,%edi
call   1090 <risdigit@plt>
test   %rax,%rax
je     12ae <rpmvercmp+0x12e>
movzbl 0x1(%r14),%eax
add    $0x1,%r14
test   %al,%al
jne    1294 <rpmvercmp+0x114>
mov    (%r12),%al
test   %al,%al
je     1340 <rpmvercmp+0x1c0>
mov    %r12,%rbx
nopl   (%rax)
movsbl %al,%edi
call   1090 <risdigit@plt>
test   %rax,%rax
je     1330 <rpmvercmp+0x1b0>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    12c0 <rpmvercmp+0x140>
jmp    1330 <rpmvercmp+0x1b0>
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%r14),%eax
add    $0x1,%r14
test   %al,%al
je     12fa <rpmvercmp+0x17a>
movsbl %al,%edi
call   10a0 <risalpha@plt>
test   %rax,%rax
jne    12e0 <rpmvercmp+0x160>
mov    (%r12),%al
test   %al,%al
je     1340 <rpmvercmp+0x1c0>
mov    %r12,%rbx
cs nopw 0x0(%rax,%rax,1)
nop
movsbl %al,%edi
call   10a0 <risalpha@plt>
test   %rax,%rax
je     1330 <rpmvercmp+0x1b0>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    1310 <rpmvercmp+0x190>
nopl   0x0(%rax)
mov    %r13,%rax
jmp    1346 <rpmvercmp+0x1c6>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r13,%rax
mov    %r12,%rbx
mov    (%r14),%dl
movb   $0x0,(%r14)
mov    (%rbx),%r13b
movb   $0x0,(%rbx)
mov    $0xffffffff,%ecx
cmp    %r14,%r15
je     1423 <rpmvercmp+0x2a3>
cmp    %rbx,%r12
je     1434 <rpmvercmp+0x2b4>
test   %rax,%rax
mov    %dl,-0x29(%rbp)
je     13c2 <rpmvercmp+0x242>
add    $0xffffffffffffffff,%r15
cs nopw 0x0(%rax,%rax,1)
cmpb   $0x30,0x1(%r15)
lea    0x1(%r15),%r15
je     1380 <rpmvercmp+0x200>
add    $0xffffffffffffffff,%r12
nop
cmpb   $0x30,0x1(%r12)
lea    0x1(%r12),%r12
je     1390 <rpmvercmp+0x210>
mov    %r15,%rdi
call   1050 <strlen@plt>
mov    %rax,-0x38(%rbp)
mov    %r12,%rdi
call   1050 <strlen@plt>
cmp    %rax,-0x38(%rbp)
jg     144d <rpmvercmp+0x2cd>
mov    $0xffffffff,%ecx
jl     1423 <rpmvercmp+0x2a3>
mov    %r15,%rdi
mov    %r12,%rsi
call   1070 <strcmp@plt>
test   %eax,%eax
jne    143f <rpmvercmp+0x2bf>
mov    -0x29(%rbp),%al
mov    %al,(%r14)
mov    %r13b,(%rbx)
test   %al,%al
jne    11ff <rpmvercmp+0x7f>
jmp    13ea <rpmvercmp+0x26a>
mov    %r15,%r14
mov    %r12,%rbx
lea    0xc0f(%rip),%r15
mov    %r15,%rdi
mov    %r14,%rsi
call   1060 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1060 <printf@plt>
mov    $0x1,%eax
cmpb   $0x0,(%r14)
jne    1421 <rpmvercmp+0x2a1>
mov    $0xffffffff,%eax
cmpb   $0x0,(%rbx)
mov    $0x0,%ecx
je     1423 <rpmvercmp+0x2a3>
mov    %eax,%ecx
mov    %ecx,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x1,%rax
sbb    %ecx,%ecx
or     $0x1,%ecx
jmp    1423 <rpmvercmp+0x2a3>
setg   %al
movzbl %al,%eax
lea    (%rax,%rax,1),%ecx
add    $0xffffffff,%ecx
jmp    1423 <rpmvercmp+0x2a3>
mov    $0x1,%ecx
jmp    1423 <rpmvercmp+0x2a3>

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

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