#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 find_rightmost_num(char const *, int, int *, int *);
int /*<<< orphan*/ strncmp(char *, char const *, int);
int to_i(char const *, int);
void find_number(const char *s, int s_len, int *num_start, int *num_end) {
  int result, dig_start, dig_end, found_num, search_more;
  int next_dig_start, next_dig_end;
  *num_start = 0;
  *num_end = 0;
  if (s_len >= 13 && !strncmp("_DSP48A1_SITE", &s[s_len - 13], 13))
    s_len -= 13;
  else if (s_len >= 15 && !strncmp("_DSP48A1_B_SITE", &s[s_len - 15], 15))
    s_len -= 15;
  result = find_rightmost_num(s, s_len, &dig_start, &dig_end);
  if (!result)
    return;
  found_num = to_i(&s[dig_start], dig_end - dig_start);
  if (dig_end < s_len) {
    *num_start = dig_start;
    *num_end = dig_end;
    return;
  }
  search_more = 0;
  if (dig_start >= 2 && s[dig_start - 1] == '_' &&
      ((s[dig_start - 2] >= 'A' && s[dig_start - 2] <= 'Z') ||
       (s[dig_start - 2] >= '0' && s[dig_start - 2] <= '9')))
    search_more = 1;
  else if (found_num == 0 && dig_start >= 3 && s[dig_start - 1] == 'S' &&
           s[dig_start - 2] == '_' &&
           ((s[dig_start - 3] >= 'A' && s[dig_start - 3] <= 'Z') ||
            (s[dig_start - 3] >= '0' && s[dig_start - 3] <= '9')))
    search_more = 1;
  else if (found_num == 3 && dig_start >= 3 && s[dig_start - 1] == 'N' &&
           s[dig_start - 2] == '_' &&
           ((s[dig_start - 3] >= 'A' && s[dig_start - 3] <= 'Z') ||
            (s[dig_start - 3] >= '0' && s[dig_start - 3] <= '9')))
    search_more = 1;
  else if ((found_num >= 0 && found_num <= 3) && dig_start >= 5 &&
           s[dig_start - 1] == 'T' && s[dig_start - 2] == 'N' &&
           s[dig_start - 3] == 'I' && s[dig_start - 4] == '_' &&
           ((s[dig_start - 5] >= 'A' && s[dig_start - 5] <= 'Z') ||
            (s[dig_start - 5] >= '0' && s[dig_start - 5] <= '9')))
    search_more = 1;
  if (!search_more ||
      !find_rightmost_num(s, dig_start, &next_dig_start, &next_dig_end)) {
    *num_start = dig_start;
    *num_end = dig_end;
  } else {
    *num_start = next_dig_start;
    *num_end = next_dig_end;
  }
}


x86 assembly (clang, -O0):
<find_number>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
cmpl   $0xd,-0xc(%rbp)
jl     119c <find_number+0x6c>
mov    -0x8(%rbp),%rsi
mov    -0xc(%rbp),%eax
sub    $0xd,%eax
cltq
add    %rax,%rsi
lea    0xe85(%rip),%rdi
mov    $0xd,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    119c <find_number+0x6c>
mov    -0xc(%rbp),%eax
sub    $0xd,%eax
mov    %eax,-0xc(%rbp)
jmp    11dd <find_number+0xad>
cmpl   $0xf,-0xc(%rbp)
jl     11d8 <find_number+0xa8>
mov    -0x8(%rbp),%rsi
mov    -0xc(%rbp),%eax
sub    $0xf,%eax
cltq
add    %rax,%rsi
lea    0xe52(%rip),%rdi
mov    $0xf,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    11d8 <find_number+0xa8>
mov    -0xc(%rbp),%eax
sub    $0xf,%eax
mov    %eax,-0xc(%rbp)
jmp    11dd <find_number+0xad>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
lea    -0x28(%rbp),%rdx
lea    -0x2c(%rbp),%rcx
call   1050 <find_rightmost_num@plt>
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    1203 <find_number+0xd3>
jmp    15aa <find_number+0x47a>
mov    -0x8(%rbp),%rdi
movslq -0x28(%rbp),%rax
add    %rax,%rdi
mov    -0x2c(%rbp),%esi
sub    -0x28(%rbp),%esi
call   1040 <to_i@plt>
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    123f <find_number+0x10f>
mov    -0x28(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    15aa <find_number+0x47a>
movl   $0x0,-0x34(%rbp)
cmpl   $0x2,-0x28(%rbp)
jl     12de <find_number+0x1ae>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5f,%eax
jne    12de <find_number+0x1ae>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     129e <find_number+0x16e>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jle    12d2 <find_number+0x1a2>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     12de <find_number+0x1ae>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     12de <find_number+0x1ae>
movl   $0x1,-0x34(%rbp)
jmp    155a <find_number+0x42a>
cmpl   $0x0,-0x30(%rbp)
jne    139a <find_number+0x26a>
cmpl   $0x3,-0x28(%rbp)
jl     139a <find_number+0x26a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x53,%eax
jne    139a <find_number+0x26a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5f,%eax
jne    139a <find_number+0x26a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     135a <find_number+0x22a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jle    138e <find_number+0x25e>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     139a <find_number+0x26a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     139a <find_number+0x26a>
movl   $0x1,-0x34(%rbp)
jmp    1555 <find_number+0x425>
cmpl   $0x3,-0x30(%rbp)
jne    1456 <find_number+0x326>
cmpl   $0x3,-0x28(%rbp)
jl     1456 <find_number+0x326>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4e,%eax
jne    1456 <find_number+0x326>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5f,%eax
jne    1456 <find_number+0x326>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1416 <find_number+0x2e6>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jle    144a <find_number+0x31a>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1456 <find_number+0x326>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1456 <find_number+0x326>
movl   $0x1,-0x34(%rbp)
jmp    1550 <find_number+0x420>
cmpl   $0x0,-0x30(%rbp)
jl     154b <find_number+0x41b>
cmpl   $0x3,-0x30(%rbp)
jg     154b <find_number+0x41b>
cmpl   $0x5,-0x28(%rbp)
jl     154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x54,%eax
jne    154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4e,%eax
jne    154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x49,%eax
jne    154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5f,%eax
jne    154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1510 <find_number+0x3e0>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jle    1544 <find_number+0x414>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     154b <find_number+0x41b>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     154b <find_number+0x41b>
movl   $0x1,-0x34(%rbp)
jmp    1550 <find_number+0x420>
jmp    1555 <find_number+0x425>
jmp    155a <find_number+0x42a>
cmpl   $0x0,-0x34(%rbp)
je     1581 <find_number+0x451>
mov    -0x8(%rbp),%rdi
mov    -0x28(%rbp),%esi
lea    -0x38(%rbp),%rdx
lea    -0x3c(%rbp),%rcx
call   1050 <find_rightmost_num@plt>
cmp    $0x0,%eax
jne    1598 <find_number+0x468>
mov    -0x28(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    15aa <find_number+0x47a>
mov    -0x38(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_number>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdx,%r15
mov    %esi,%ebp
mov    %rdi,%rbx
movl   $0x0,(%rdx)
mov    %rcx,(%rsp)
movl   $0x0,(%rcx)
cmp    $0xd,%esi
jl     119c <find_number+0x6c>
lea    -0xd(%rbp),%r14d
lea    (%rbx,%r14,1),%rsi
lea    0xe96(%rip),%rdi
mov    $0xd,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
je     119f <find_number+0x6f>
cmp    $0xf,%ebp
jb     119c <find_number+0x6c>
lea    -0xf(%rbp),%r14d
lea    (%rbx,%r14,1),%rsi
lea    0xe82(%rip),%rdi
mov    $0xf,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
cmove  %r14d,%ebp
mov    %ebp,%r14d
lea    0xc(%rsp),%r13
lea    0x8(%rsp),%r12
mov    %rbx,%rdi
mov    %r14d,%esi
mov    %r13,%rdx
mov    %r12,%rcx
call   1050 <find_rightmost_num@plt>
test   %eax,%eax
je     1312 <find_number+0x1e2>
movslq 0xc(%rsp),%rdi
mov    0x8(%rsp),%esi
sub    %edi,%esi
add    %rbx,%rdi
call   1040 <to_i@plt>
mov    0x8(%rsp),%ecx
mov    0xc(%rsp),%esi
cmp    %r14d,%ecx
jl     1309 <find_number+0x1d9>
cmp    $0x2,%esi
jl     1309 <find_number+0x1d9>
lea    -0x1(%rsi),%edi
mov    (%rbx,%rdi,1),%dl
cmp    $0x5f,%dl
jne    122b <find_number+0xfb>
lea    -0x2(%rsi),%edx
mov    (%rbx,%rdx,1),%dl
lea    -0x41(%rdx),%ebp
cmp    $0x1a,%bpl
jb     12df <find_number+0x1af>
add    $0xd0,%dl
cmp    $0xa,%dl
jb     12df <find_number+0x1af>
cmp    $0x3,%esi
setae  %r8b
test   %eax,%eax
jne    1266 <find_number+0x136>
cmp    $0x2,%esi
ja     12a0 <find_number+0x170>
jmp    1266 <find_number+0x136>
cmp    $0x3,%esi
setae  %r8b
test   %eax,%eax
jne    1266 <find_number+0x136>
cmp    $0x2,%esi
jbe    1266 <find_number+0x136>
cmp    $0x53,%dl
jne    12a0 <find_number+0x170>
lea    -0x2(%rsi),%edx
cmpb   $0x5f,(%rbx,%rdx,1)
jne    12a0 <find_number+0x170>
lea    -0x3(%rsi),%edx
mov    (%rbx,%rdx,1),%dl
lea    -0x41(%rdx),%ebp
cmp    $0x1a,%bpl
jb     12df <find_number+0x1af>
add    $0xd0,%dl
cmp    $0xa,%dl
jae    12a0 <find_number+0x170>
jmp    12df <find_number+0x1af>
cmp    $0x3,%eax
jne    12a0 <find_number+0x170>
test   %r8b,%r8b
je     12a0 <find_number+0x170>
cmpb   $0x4e,(%rbx,%rdi,1)
jne    12a0 <find_number+0x170>
lea    -0x2(%rsi),%edx
cmpb   $0x5f,(%rbx,%rdx,1)
jne    12a0 <find_number+0x170>
movslq %esi,%r8
add    $0xfffffffffffffffd,%r8
mov    %r8d,%ebp
mov    (%rbx,%rbp,1),%dl
add    $0xbf,%dl
cmp    $0x1a,%dl
jb     12df <find_number+0x1af>
mov    (%rbx,%r8,1),%dl
add    $0xd0,%dl
cmp    $0xa,%dl
jb     12df <find_number+0x1af>
cmp    $0x3,%eax
ja     1309 <find_number+0x1d9>
cmp    $0x5,%esi
jb     1309 <find_number+0x1d9>
cmpb   $0x54,(%rbx,%rdi,1)
jne    1309 <find_number+0x1d9>
lea    -0x2(%rsi),%eax
cmpb   $0x4e,(%rbx,%rax,1)
jne    1309 <find_number+0x1d9>
lea    -0x3(%rsi),%eax
cmpb   $0x49,(%rbx,%rax,1)
jne    1309 <find_number+0x1d9>
lea    -0x4(%rsi),%eax
cmpb   $0x5f,(%rbx,%rax,1)
jne    1309 <find_number+0x1d9>
lea    -0x5(%rsi),%eax
mov    (%rbx,%rax,1),%al
lea    -0x41(%rax),%edx
cmp    $0x1a,%dl
jb     12df <find_number+0x1af>
add    $0xd0,%al
cmp    $0x9,%al
ja     1309 <find_number+0x1d9>
lea    0x14(%rsp),%rbp
lea    0x10(%rsp),%r14
mov    %rbx,%rdi
mov    %rbp,%rdx
mov    %r14,%rcx
call   1050 <find_rightmost_num@plt>
test   %eax,%eax
cmovne %rbp,%r13
mov    0x0(%r13),%esi
cmovne %r14,%r12
mov    (%r12),%ecx
mov    (%rsp),%rax
mov    %esi,(%r15)
mov    %ecx,(%rax)
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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