#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 */
bool isNumber(char *s) {
  double i = 3.;
  if (s == NULL) {
    return false;
  }
  char state = 0;
  while (*s) {
    switch (state) {
    case 0:
      if (*s == ' ') {
        s++;
      } else {
        state = 1;
      }
      break;
    case 1:
      if (*s == '.') {
        state = 2;
        s++;
      } else if (*s == '+' || *s == '-') {
        state = 5;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 6;
        s++;
      } else {
        return false;
      }
      break;
    case 2:
      if (*s >= '0' && *s <= '9') {
        state = 3;
        s++;
      } else {
        return false;
      }
      break;
    case 3:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 4:
      if (*s == ' ') {
        s++;
      } else {
        return false;
      }
      break;
    case 5:
      if (*s == '.') {
        state = 2;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 6;
        s++;
      } else {
        return false;
      }
      break;
    case 6:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == '.') {
        state = 10;
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 7:
      if (*s == '+' || *s == '-') {
        state = 8;
        s++;
      } else if (*s >= '0' && *s <= '9') {
        state = 9;
        s++;
      } else {
        return false;
      }
      break;
    case 8:
      if (*s >= '0' && *s <= '9') {
        state = 9;
        s++;
      } else {
        return false;
      }
      break;
    case 9:
      if (*s >= '0' && *s <= '9') {
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else {
        return false;
      }
      break;
    case 10:
      if (*s >= '0' && *s <= '9') {
        state = 3;
        s++;
      } else if (*s == ' ') {
        state = 4;
        s++;
      } else if (*s == 'e') {
        state = 7;
        s++;
      } else {
        return false;
      }
      break;
    }
  }
  if (state == 3 || state == 4 || state == 6 || state == 9 || state == 10) {
    return true;
  }
  return false;
}


x86 assembly (clang, -O0):
<isNumber>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movsd  0xef0(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    112c <isNumber+0x2c>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
movb   $0x0,-0x19(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1647 <isNumber+0x547>
movsbl -0x19(%rbp),%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xa,%eax
ja     1642 <isNumber+0x542>
mov    -0x28(%rbp),%rax
lea    0xead(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1185 <isNumber+0x85>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1189 <isNumber+0x89>
movb   $0x1,-0x19(%rbp)
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    11b3 <isNumber+0xb3>
movb   $0x2,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1233 <isNumber+0x133>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     11d3 <isNumber+0xd3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    11e8 <isNumber+0xe8>
movb   $0x5,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    122e <isNumber+0x12e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     121d <isNumber+0x11d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     121d <isNumber+0x11d>
movb   $0x6,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1229 <isNumber+0x129>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    122e <isNumber+0x12e>
jmp    1233 <isNumber+0x133>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     126d <isNumber+0x16d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     126d <isNumber+0x16d>
movb   $0x3,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1279 <isNumber+0x179>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     12af <isNumber+0x1af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     12af <isNumber+0x1af>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    130f <isNumber+0x20f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
jne    12d4 <isNumber+0x1d4>
movb   $0x7,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    130a <isNumber+0x20a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    12f9 <isNumber+0x1f9>
movb   $0x4,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1305 <isNumber+0x205>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    130a <isNumber+0x20a>
jmp    130f <isNumber+0x20f>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1335 <isNumber+0x235>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1341 <isNumber+0x241>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    136b <isNumber+0x26b>
movb   $0x2,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13b1 <isNumber+0x2b1>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     13a0 <isNumber+0x2a0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     13a0 <isNumber+0x2a0>
movb   $0x6,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13ac <isNumber+0x2ac>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    13b1 <isNumber+0x2b1>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     13e7 <isNumber+0x2e7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     13e7 <isNumber+0x2e7>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1471 <isNumber+0x371>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    140c <isNumber+0x30c>
movb   $0xa,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    146c <isNumber+0x36c>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
jne    1431 <isNumber+0x331>
movb   $0x7,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1467 <isNumber+0x367>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1456 <isNumber+0x356>
movb   $0x4,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1462 <isNumber+0x362>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    1467 <isNumber+0x367>
jmp    146c <isNumber+0x36c>
jmp    1471 <isNumber+0x371>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2b,%eax
je     1496 <isNumber+0x396>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    14ab <isNumber+0x3ab>
movb   $0x8,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14f1 <isNumber+0x3f1>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     14e0 <isNumber+0x3e0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     14e0 <isNumber+0x3e0>
movb   $0x9,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14ec <isNumber+0x3ec>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    14f1 <isNumber+0x3f1>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     152b <isNumber+0x42b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     152b <isNumber+0x42b>
movb   $0x9,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1537 <isNumber+0x437>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     156d <isNumber+0x46d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     156d <isNumber+0x46d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    15a3 <isNumber+0x4a3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1592 <isNumber+0x492>
movb   $0x4,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    159e <isNumber+0x49e>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    15a3 <isNumber+0x4a3>
jmp    1642 <isNumber+0x542>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     15dd <isNumber+0x4dd>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     15dd <isNumber+0x4dd>
movb   $0x3,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    163d <isNumber+0x53d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1602 <isNumber+0x502>
movb   $0x4,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1638 <isNumber+0x538>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x65,%eax
jne    1627 <isNumber+0x527>
movb   $0x7,-0x19(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1633 <isNumber+0x533>
movl   $0x0,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
jmp    1638 <isNumber+0x538>
jmp    163d <isNumber+0x53d>
jmp    1642 <isNumber+0x542>
jmp    1130 <isNumber+0x30>
movsbl -0x19(%rbp),%eax
cmp    $0x3,%eax
je     1688 <isNumber+0x588>
movsbl -0x19(%rbp),%eax
cmp    $0x4,%eax
je     1688 <isNumber+0x588>
movsbl -0x19(%rbp),%eax
cmp    $0x6,%eax
je     1688 <isNumber+0x588>
movsbl -0x19(%rbp),%eax
cmp    $0x9,%eax
je     1688 <isNumber+0x588>
movsbl -0x19(%rbp),%eax
cmp    $0xa,%eax
jne    1694 <isNumber+0x594>
movl   $0x1,-0x4(%rbp)
jmp    169b <isNumber+0x59b>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<isNumber>:
xor    %eax,%eax
test   %rdi,%rdi
je     12a2 <isNumber+0x1a2>
mov    (%rdi),%sil
test   %sil,%sil
je     12a2 <isNumber+0x1a2>
xor    %edx,%edx
lea    0xee0(%rip),%rax
mov    $0x1,%r8d
jmp    1142 <isNumber+0x42>
cmp    $0x20,%sil
jne    12a3 <isNumber+0x1a3>
add    $0x1,%rdi
movzbl (%rdi),%esi
test   %sil,%sil
je     128a <isNumber+0x18a>
movsbl %dl,%ecx
cmp    $0xa,%ecx
ja     1136 <isNumber+0x36>
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
xor    %ecx,%ecx
cmp    $0x20,%sil
sete   %cl
movzbl %dl,%edx
cmovne %r8d,%edx
add    %rcx,%rdi
jmp    1136 <isNumber+0x36>
cmp    $0x2b,%sil
je     125d <isNumber+0x15d>
cmp    $0x2d,%sil
je     125d <isNumber+0x15d>
cmp    $0x2e,%sil
jne    1248 <isNumber+0x148>
add    $0x1,%rdi
mov    $0x2,%dl
jmp    1136 <isNumber+0x36>
add    $0xd0,%sil
cmp    $0x9,%sil
jbe    123d <isNumber+0x13d>
jmp    12a3 <isNumber+0x1a3>
lea    -0x30(%rsi),%ecx
cmp    $0x9,%cl
jbe    1132 <isNumber+0x32>
cmp    $0x20,%sil
je     1274 <isNumber+0x174>
cmp    $0x65,%sil
je     127f <isNumber+0x17f>
jmp    12a3 <isNumber+0x1a3>
lea    -0x30(%rsi),%ecx
cmp    $0x9,%cl
jbe    1132 <isNumber+0x32>
cmp    $0x20,%sil
je     1274 <isNumber+0x174>
cmp    $0x65,%sil
je     127f <isNumber+0x17f>
cmp    $0x2e,%sil
jne    12a3 <isNumber+0x1a3>
add    $0x1,%rdi
mov    $0xa,%dl
jmp    1136 <isNumber+0x36>
cmp    $0x2d,%sil
je     1203 <isNumber+0x103>
cmp    $0x2b,%sil
jne    120e <isNumber+0x10e>
add    $0x1,%rdi
mov    $0x8,%dl
jmp    1136 <isNumber+0x36>
add    $0xd0,%sil
cmp    $0x9,%sil
ja     12a3 <isNumber+0x1a3>
add    $0x1,%rdi
mov    $0x9,%dl
jmp    1136 <isNumber+0x36>
lea    -0x30(%rsi),%ecx
cmp    $0x9,%cl
jbe    1132 <isNumber+0x32>
jmp    126e <isNumber+0x16e>
lea    -0x30(%rsi),%ecx
cmp    $0x9,%cl
ja     1268 <isNumber+0x168>
add    $0x1,%rdi
mov    $0x3,%dl
jmp    1136 <isNumber+0x36>
add    $0xd0,%sil
cmp    $0x9,%sil
ja     12a3 <isNumber+0x1a3>
add    $0x1,%rdi
mov    $0x6,%dl
jmp    1136 <isNumber+0x36>
add    $0x1,%rdi
mov    $0x5,%dl
jmp    1136 <isNumber+0x36>
cmp    $0x65,%sil
je     127f <isNumber+0x17f>
cmp    $0x20,%sil
jne    12a3 <isNumber+0x1a3>
add    $0x1,%rdi
mov    $0x4,%dl
jmp    1136 <isNumber+0x36>
add    $0x1,%rdi
mov    $0x7,%dl
jmp    1136 <isNumber+0x36>
add    $0xfd,%dl
xor    %eax,%eax
cmp    $0x7,%dl
ja     12a2 <isNumber+0x1a2>
movsbq %dl,%rax
lea    0xd8d(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret
xor    %eax,%eax
ret

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

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