#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 atoi(char *);
scalar_t__ isdigit(char);
int /*<<< orphan*/ memcpy(char *, char *, int);
int /*<<< orphan*/ printf(char *, ...);
int Numb(char *str, char **tail, int *number) {
  int i, j, k, m, i_i, sgn = 1;
  char s[10];
  *number = 0;
  *tail = str;
  if (str[0] == '\'') {
    if (str[1] == '\\') {
      if (str[3] != '\'')
        return 0;
      if (str[2] == 'n')
        *number = 10;
      if (str[2] == 'r')
        *number = 13;
      if (str[2] == 't')
        *number = 10;
      *tail = &str[4];
    } else {
      if (str[2] != '\'')
        return 0;
      *number = str[1];
      *tail = &str[3];
    }
    return 1;
  }
  if ((str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) || str[0] == '#') {
    if (str[0] == '#')
      i = 1;
    else
      i = 2;
    i_i = i;
    while (1) {
      if (!(str[i] >= '0' && str[i] <= '9') &&
          !(str[i] >= 'A' && str[i] <= 'F') &&
          !(str[i] >= 'a' && str[i] <= 'f'))
        break;
      i++;
    }
    j = i;
    k = 1;
    *number = 0;
    for (i = j - 1; i >= i_i; i--) {
      m = str[i];
      switch (m) {
      case 'a':
      case 'A':
        m = 10;
        break;
      case 'b':
      case 'B':
        m = 11;
        break;
      case 'c':
      case 'C':
        m = 12;
        break;
      case 'd':
      case 'D':
        m = 13;
        break;
      case 'e':
      case 'E':
        m = 14;
        break;
      case 'f':
      case 'F':
        m = 15;
        break;
      }
      if (m >= 48 && m < 58)
        m -= 48;
      if (m < 0 || m > 15)
        return 0;
      *number = *number + k * m;
      k *= 16;
    }
    *tail = &str[j];
    printf(">>> HEX %4.4X | %s |\n", *number, *tail);
    return 1;
  }
  j = 0;
  if (str[0] == '-') {
    j++;
    sgn = -1;
  }
  if (str[0] == '+') {
    j++;
    sgn = 1;
  }
  if (isdigit(str[j])) {
    i = j;
    while (1) {
      if (!isdigit(str[i]))
        break;
      i++;
    }
    k = i - j;
    memcpy(s, &str[j], k);
    s[k] = 0;
    *number = sgn * atoi(s);
    *tail = &str[i];
    printf(">>> INT %s=%i | %s |\n", s, *number, *tail);
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<Numb>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
jne    1259 <Numb+0x119>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x5c,%eax
jne    1213 <Numb+0xd3>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x27,%eax
je     11ae <Numb+0x6e>
movl   $0x0,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x6e,%eax
jne    11c9 <Numb+0x89>
mov    -0x20(%rbp),%rax
movl   $0xa,(%rax)
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
jne    11e4 <Numb+0xa4>
mov    -0x20(%rbp),%rax
movl   $0xd,(%rax)
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x74,%eax
jne    11ff <Numb+0xbf>
mov    -0x20(%rbp),%rax
movl   $0xa,(%rax)
mov    -0x10(%rbp),%rcx
add    $0x4,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
jmp    124d <Numb+0x10d>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x27,%eax
je     1230 <Numb+0xf0>
movl   $0x0,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rcx
add    $0x3,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jne    128b <Numb+0x14b>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x78,%eax
je     129b <Numb+0x15b>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x58,%eax
je     129b <Numb+0x15b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    149e <Numb+0x35e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
jne    12b7 <Numb+0x177>
movl   $0x1,-0x24(%rbp)
jmp    12be <Numb+0x17e>
movl   $0x2,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12ee <Numb+0x1ae>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1347 <Numb+0x207>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1318 <Numb+0x1d8>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jle    1347 <Numb+0x207>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     1342 <Numb+0x202>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jle    1347 <Numb+0x207>
jmp    1355 <Numb+0x215>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12c4 <Numb+0x184>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     1465 <Numb+0x325>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x25,%eax
ja     13fc <Numb+0x2bc>
mov    -0x50(%rbp),%rax
lea    0xc50(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xa,-0x30(%rbp)
jmp    13fc <Numb+0x2bc>
movl   $0xb,-0x30(%rbp)
jmp    13fc <Numb+0x2bc>
movl   $0xc,-0x30(%rbp)
jmp    13fc <Numb+0x2bc>
movl   $0xd,-0x30(%rbp)
jmp    13fc <Numb+0x2bc>
movl   $0xe,-0x30(%rbp)
jmp    13fc <Numb+0x2bc>
movl   $0xf,-0x30(%rbp)
cmpl   $0x30,-0x30(%rbp)
jl     1419 <Numb+0x2d9>
cmpl   $0x3a,-0x30(%rbp)
jge    1419 <Numb+0x2d9>
mov    -0x30(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jl     142d <Numb+0x2ed>
cmpl   $0xf,-0x30(%rbp)
jle    1439 <Numb+0x2f9>
movl   $0x0,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
mov    -0x2c(%rbp),%eax
imul   -0x30(%rbp),%eax
add    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1375 <Numb+0x235>
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rax
add    %rax,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%esi
mov    -0x18(%rbp),%rax
mov    (%rax),%rdx
lea    0xc0d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
movl   $0x0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    14c5 <Numb+0x385>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
movl   $0xffffffff,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
jne    14e5 <Numb+0x3a5>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     15b5 <Numb+0x475>
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    1526 <Numb+0x3e6>
jmp    1534 <Numb+0x3f4>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1506 <Numb+0x3c6>
mov    -0x24(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
lea    -0x42(%rbp),%rdi
mov    -0x10(%rbp),%rsi
movslq -0x28(%rbp),%rax
add    %rax,%rsi
mov    -0x2c(%rbp),%edx
call   1050 <memcpy@plt>
movslq -0x2c(%rbp),%rax
movb   $0x0,-0x42(%rbp,%rax,1)
mov    -0x38(%rbp),%eax
mov    %eax,-0x54(%rbp)
lea    -0x42(%rbp),%rdi
call   1060 <atoi@plt>
mov    -0x54(%rbp),%ecx
imul   %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rcx
movslq -0x24(%rbp),%rax
add    %rax,%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
lea    -0x42(%rbp),%rsi
mov    -0x20(%rbp),%rax
mov    (%rax),%edx
mov    -0x18(%rbp),%rax
mov    (%rax),%rcx
lea    0xb0c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    15bc <Numb+0x47c>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Numb>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r9
mov    %rdi,%r15
movl   $0x0,(%rdx)
mov    %rdi,(%rsi)
mov    (%rdi),%bpl
mov    $0x1,%eax
xor    %r12d,%r12d
lea    -0x23(%rbp),%esi
mov    $0x0,%ecx
mov    $0x1,%r13d
cmp    $0xd,%sil
ja     1333 <Numb+0x1f3>
movzbl %sil,%ecx
lea    0xe75(%rip),%rdi
movslq (%rdi,%rcx,4),%rsi
add    %rdi,%rsi
xor    %ecx,%ecx
mov    $0x1,%r13d
jmp    *%rsi
movsbl 0x1(%r15),%eax
cmp    $0x5c,%eax
jne    13eb <Numb+0x2ab>
xor    %r12d,%r12d
cmpb   $0x27,0x3(%r15)
jne    140b <Numb+0x2cb>
mov    %rdx,%rsi
mov    0x2(%r15),%dl
cmp    $0x6e,%dl
mov    %rsi,%rax
jne    11d1 <Numb+0x91>
movl   $0xa,(%rax)
mov    0x2(%r15),%dl
cmp    $0x72,%dl
jne    11e0 <Numb+0xa0>
movl   $0xd,(%rax)
mov    0x2(%r15),%dl
mov    $0x4,%ecx
mov    $0xa,%eax
cmp    $0x74,%dl
je     13fd <Numb+0x2bd>
jmp    13ff <Numb+0x2bf>
mov    $0xffffffff,%r13d
mov    $0x1,%ecx
jmp    1333 <Numb+0x1f3>
mov    0x1(%r15),%bl
or     $0x20,%bl
mov    $0x0,%ecx
mov    $0x1,%r13d
cmp    $0x78,%bl
jne    1333 <Numb+0x1f3>
xor    %ecx,%ecx
cmp    $0x23,%bpl
sete   %cl
mov    $0x2,%r10d
sub    %ecx,%r10d
mov    %r10,%rcx
shl    $0x20,%rcx
movabs $0x100000000,%rsi
movabs $0x3f0000003f,%rdi
mov    %r10,%rax
jmp    1267 <Numb+0x127>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rax
add    %rsi,%rcx
movzbl (%r15,%rax,1),%ebp
lea    -0x30(%rbp),%ebx
cmp    $0xa,%bl
jb     1260 <Numb+0x120>
add    $0xbf,%bpl
cmp    $0x25,%bpl
ja     1288 <Numb+0x148>
movzbl %bpl,%ebp
bt     %rbp,%rdi
jb     1260 <Numb+0x120>
xor    %esi,%esi
cmp    %eax,%r10d
jae    1315 <Numb+0x1d5>
sar    $0x20,%rcx
mov    $0x1,%edi
xor    %esi,%esi
lea    0xd93(%rip),%r8
cs nopw 0x0(%rax,%rax,1)
nop
movsbl -0x1(%r15,%rcx,1),%ebp
lea    -0x41(%rbp),%ebx
cmp    $0x25,%ebx
ja     12f0 <Numb+0x1b0>
movslq (%r8,%rbx,4),%rbx
add    %r8,%rbx
jmp    *%rbx
mov    $0xa,%ebp
jmp    12f0 <Numb+0x1b0>
mov    $0xb,%ebp
jmp    12f0 <Numb+0x1b0>
mov    $0xc,%ebp
jmp    12f0 <Numb+0x1b0>
mov    $0xd,%ebp
jmp    12f0 <Numb+0x1b0>
mov    $0xe,%ebp
jmp    12f0 <Numb+0x1b0>
mov    $0xf,%ebp
nop
lea    -0x30(%rbp),%ebx
cmp    $0xa,%ebx
cmovb  %ebx,%ebp
cmp    $0xf,%ebp
ja     141d <Numb+0x2dd>
add    $0xffffffffffffffff,%rcx
imul   %edi,%ebp
add    %ebp,%esi
mov    %esi,(%rdx)
shl    $0x4,%edi
cmp    %r10,%rcx
jg     12b0 <Numb+0x170>
mov    %eax,%eax
add    %rax,%r15
mov    %r15,(%r9)
lea    0xdac(%rip),%rdi
mov    %r15,%rdx
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1405 <Numb+0x2c5>
mov    %rdx,0x8(%rsp)
mov    %r9,0x10(%rsp)
xor    %r14d,%r14d
cmp    $0x2b,%bpl
sete   %r14b
mov    %ecx,%ebx
cmove  %eax,%r13d
add    %rbx,%r14
movsbl (%r15,%r14,1),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     140b <Numb+0x2cb>
add    %r15,%r14
xor    %eax,%eax
cmp    $0x2b,%bpl
sete   %al
add    %rax,%rbx
add    $0xffffffffffffffff,%rbx
mov    $0xffffffff,%ebp
nopl   0x0(%rax)
movsbl 0x1(%r15,%rbx,1),%edi
call   1030 <isdigit@plt>
add    $0x1,%rbx
add    $0x1,%ebp
test   %rax,%rax
jne    1380 <Numb+0x240>
mov    %ebx,%eax
add    %rax,%r15
lea    0x1e(%rsp),%r12
mov    %r12,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1050 <memcpy@plt>
movslq %ebp,%rax
movb   $0x0,0x1e(%rsp,%rax,1)
mov    %r12,%rdi
call   1060 <atoi@plt>
imul   %eax,%r13d
mov    0x8(%rsp),%rax
mov    %r13d,(%rax)
mov    0x10(%rsp),%rax
mov    %r15,(%rax)
lea    0xd0d(%rip),%rdi
mov    %r12,%rsi
mov    %r13d,%edx
mov    %r15,%rcx
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1405 <Numb+0x2c5>
mov    %rdx,%rsi
xor    %r12d,%r12d
mov    $0x3,%ecx
cmpb   $0x27,0x2(%r15)
jne    140b <Numb+0x2cb>
mov    %eax,(%rsi)
add    %rcx,%r15
mov    %r15,(%r9)
mov    $0x1,%r12d
mov    %r12d,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %r12d,%r12d
jmp    140b <Numb+0x2cb>

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

LLVM IR (-O2):
@.str = [22 x i8] c">>> HEX %4.4X | %s |\0A\00"
@.str.1 = [22 x i8] c">>> INT %s=%i | %s |\0A\00"
define i32 @Numb(i8* %0, i8** nocapture writeonly %1, i32* nocapture %2) {
%4 = alloca [10 x i8]
%5 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 0
store i32 0, i32* %2
store i8* %0, i8** %1
%6 = load i8, i8* %0
switch i8 %6, label %95 [
i8 39, label %7
i8 48, label %40
i8 35, label %43
i8 45, label %94
]
7: ; preds = %3
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = load i8, i8* %8
%10 = icmp eq i8 %9, 92
br i1 %10, label %11, label %29
11: ; preds = %7
%12 = getelementptr inbounds i8, i8* %0, i64 3
%13 = load i8, i8* %12
%14 = icmp eq i8 %13, 39
br i1 %14, label %15, label %129
15: ; preds = %11
%16 = getelementptr inbounds i8, i8* %0, i64 2
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 110
br i1 %18, label %19, label %21
19: ; preds = %15
store i32 10, i32* %2
%20 = load i8, i8* %16
br label %21
21: ; preds = %19, %15
%22 = phi i8 [ %20, %19 ], [ %17, %15 ]
%23 = icmp eq i8 %22, 114
br i1 %23, label %24, label %26
24: ; preds = %21
store i32 13, i32* %2
%25 = load i8, i8* %16
br label %26
26: ; preds = %24, %21
%27 = phi i8 [ %25, %24 ], [ %22, %21 ]
%28 = icmp eq i8 %27, 116
br i1 %28, label %34, label %37
29: ; preds = %7
%30 = sext i8 %9 to i32
%31 = getelementptr inbounds i8, i8* %0, i64 2
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 39
br i1 %33, label %34, label %129
34: ; preds = %29, %26
%35 = phi i32 [ 10, %26 ], [ %30, %29 ]
%36 = phi i64 [ 4, %26 ], [ 3, %29 ]
store i32 %35, i32* %2
br label %37
37: ; preds = %34, %26
%38 = phi i64 [ 4, %26 ], [ %36, %34 ]
%39 = getelementptr inbounds i8, i8* %0, i64 %38
store i8* %39, i8** %1
br label %129
40: ; preds = %3
%41 = getelementptr inbounds i8, i8* %0, i64 1
%42 = load i8, i8* %41
switch i8 %42, label %95 [
i8 120, label %43
i8 88, label %43
]
43: ; preds = %3, %40, %40
%44 = icmp eq i8 %6, 35
%45 = select i1 %44, i32 1, i32 2
%46 = zext i32 %45 to i64
br label %47
47: ; preds = %55, %43
%48 = phi i64 [ %56, %55 ], [ %46, %43 ]
%49 = getelementptr inbounds i8, i8* %0, i64 %48
%50 = load i8, i8* %49
%51 = freeze i8 %50
%52 = add i8 %51, -48
%53 = icmp ult i8 %52, 10
br i1 %53, label %55, label %54
54: ; preds = %47
switch i8 %51, label %57 [
i8 102, label %55
i8 101, label %55
i8 100, label %55
i8 99, label %55
i8 98, label %55
i8 97, label %55
i8 70, label %55
i8 69, label %55
i8 68, label %55
i8 67, label %55
i8 66, label %55
i8 65, label %55
]
55: ; preds = %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %54, %47
%56 = add nuw i64 %48, 1
br label %47
57: ; preds = %54
%58 = trunc i64 %48 to i32
%59 = and i64 %48, 4294967295
%60 = getelementptr inbounds i8, i8* %0, i64 %59
%61 = icmp ult i32 %45, %58
br i1 %61, label %62, label %91
62: ; preds = %57
%63 = shl i64 %48, 32
%64 = ashr exact i64 %63, 32
%65 = zext i32 %45 to i64
br label %66
66: ; preds = %62, %86
%67 = phi i32 [ 0, %62 ], [ %88, %86 ]
%68 = phi i64 [ %64, %62 ], [ %70, %86 ]
%69 = phi i32 [ 1, %62 ], [ %89, %86 ]
%70 = add nsw i64 %68, -1
%71 = getelementptr inbounds i8, i8* %0, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
switch i32 %73, label %80 [
i32 97, label %74
i32 65, label %74
i32 98, label %75
i32 66, label %75
i32 99, label %76
i32 67, label %76
i32 100, label %77
i32 68, label %77
i32 101, label %78
i32 69, label %78
i32 102, label %79
i32 70, label %79
]
74: ; preds = %66, %66
br label %80
75: ; preds = %66, %66
br label %80
76: ; preds = %66, %66
br label %80
77: ; preds = %66, %66
br label %80
78: ; preds = %66, %66
br label %80
79: ; preds = %66, %66
br label %80
80: ; preds = %66, %79, %78, %77, %76, %75, %74
%81 = phi i32 [ %73, %66 ], [ 15, %79 ], [ 14, %78 ], [ 13, %77 ], [ 12, %76 ], [ 11, %75 ], [ 10, %74 ]
%82 = add nsw i32 %81, -48
%83 = icmp ult i32 %82, 10
%84 = select i1 %83, i32 %82, i32 %81
%85 = icmp ugt i32 %84, 15
br i1 %85, label %129, label %86
86: ; preds = %80
%87 = mul nsw i32 %84, %69
%88 = add nsw i32 %67, %87
store i32 %88, i32* %2
%89 = shl nsw i32 %69, 4
%90 = icmp sgt i64 %70, %65
br i1 %90, label %66, label %91
91: ; preds = %86, %57
%92 = phi i32 [ 0, %57 ], [ %88, %86 ]
store i8* %60, i8** %1
%93 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i64 0, i64 0), i32 %92, i8* %60)
br label %129
94: ; preds = %3
br label %95
95: ; preds = %3, %40, %94
%96 = phi i32 [ 1, %94 ], [ 0, %40 ], [ 0, %3 ]
%97 = phi i32 [ -1, %94 ], [ 1, %40 ], [ 1, %3 ]
%98 = icmp eq i8 %6, 43
%99 = zext i1 %98 to i32
%100 = add nuw nsw i32 %96, %99
%101 = select i1 %98, i32 1, i32 %97
%102 = zext i32 %100 to i64
%103 = getelementptr inbounds i8, i8* %0, i64 %102
%104 = load i8, i8* %103
%105 = tail call i64 @isdigit(i8 signext %104)
%106 = icmp eq i64 %105, 0
br i1 %106, label %129, label %107
107: ; preds = %95
%108 = zext i32 %96 to i64
%109 = zext i1 %98 to i64
%110 = add nuw nsw i64 %108, %109
br label %111
111: ; preds = %107, %111
%112 = phi i64 [ %110, %107 ], [ %117, %111 ]
%113 = getelementptr inbounds i8, i8* %0, i64 %112
%114 = load i8, i8* %113
%115 = tail call i64 @isdigit(i8 signext %114)
%116 = icmp eq i64 %115, 0
%117 = add nuw i64 %112, 1
br i1 %116, label %118, label %111
118: ; preds = %111
%119 = trunc i64 %112 to i32
%120 = and i64 %112, 4294967295
%121 = getelementptr inbounds i8, i8* %0, i64 %120
%122 = sub nsw i32 %119, %100
%123 = call i32 @memcpy(i8* %5, i8* %103, i32 %122)
%124 = sext i32 %122 to i64
%125 = getelementptr inbounds [10 x i8], [10 x i8]* %4, i64 0, i64 %124
store i8 0, i8* %125
%126 = call i32 @atoi(i8* %5)
%127 = mul nsw i32 %126, %101
store i32 %127, i32* %2
store i8* %121, i8** %1
%128 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.1, i64 0, i64 0), i8* %5, i32 %127, i8* %121)
br label %129
129: ; preds = %80, %95, %29, %11, %118, %91, %37
%130 = phi i32 [ 1, %37 ], [ 1, %91 ], [ 1, %118 ], [ 0, %11 ], [ 0, %29 ], [ 0, %95 ], [ 0, %80 ]
ret i32 %130
}