long input_q() {
  long c;
  long is_neg;
  long is_checking;
  long n;
  n = 0;
  is_neg = 0;
  is_checking = 1;
  do {
    c = *(long *)0x100000200;
    if (c == (-1))
      goto input_q_exit;
    if (c == (long)'-') {
      c = *(long *)0x100000200;
      if (c <= (long)'9') {
        if (c >= (long)'0') {
          is_neg = 1;
          is_checking = 0;
        }
      }
    } else if (c <= (long)'9') {
      if (c >= (long)'0') {
        is_checking = 0;
      }
    }
  } while (is_checking == 1);
  is_checking = 1;
  do {
    n = n * 10 + (long)c - (long)'0';
    c = *(long *)0x100000200;
    if (c == (-1))
      goto input_q_exit;
    if (c > (long)'9') {
      is_checking = 0;
    }
    if (c < (long)'0') {
      is_checking = 0;
    }
  } while (is_checking == 1);
input_q_exit:
  if (is_neg == 1) {
    n = 0 - n;
  }
  return n;
}


x86 assembly (clang, -O0):
<input_q>:
push   %rbp
mov    %rsp,%rbp
movq   $0x0,-0x20(%rbp)
movq   $0x0,-0x10(%rbp)
movq   $0x1,-0x18(%rbp)
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
cmpq   $0xffffffffffffffff,-0x8(%rbp)
jne    113d <input_q+0x3d>
jmp    1236 <input_q+0x136>
cmpq   $0x2d,-0x8(%rbp)
jne    1189 <input_q+0x89>
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
cmpq   $0x39,-0x8(%rbp)
jg     1184 <input_q+0x84>
cmpq   $0x30,-0x8(%rbp)
jl     117f <input_q+0x7f>
movq   $0x1,-0x10(%rbp)
movq   $0x0,-0x18(%rbp)
jmp    1184 <input_q+0x84>
jmp    11b1 <input_q+0xb1>
cmpq   $0x39,-0x8(%rbp)
jg     11ac <input_q+0xac>
cmpq   $0x30,-0x8(%rbp)
jl     11a7 <input_q+0xa7>
movq   $0x0,-0x18(%rbp)
jmp    11ac <input_q+0xac>
jmp    11b1 <input_q+0xb1>
jmp    11b6 <input_q+0xb6>
cmpq   $0x1,-0x18(%rbp)
je     111c <input_q+0x1c>
movq   $0x1,-0x18(%rbp)
imul   $0xa,-0x20(%rbp),%rax
add    -0x8(%rbp),%rax
sub    $0x30,%rax
mov    %rax,-0x20(%rbp)
movabs $0x100000200,%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
cmpq   $0xffffffffffffffff,-0x8(%rbp)
jne    11fb <input_q+0xfb>
jmp    1236 <input_q+0x136>
cmpq   $0x39,-0x8(%rbp)
jle    120e <input_q+0x10e>
movq   $0x0,-0x18(%rbp)
cmpq   $0x30,-0x8(%rbp)
jge    1221 <input_q+0x121>
movq   $0x0,-0x18(%rbp)
jmp    1226 <input_q+0x126>
cmpq   $0x1,-0x18(%rbp)
je     11c9 <input_q+0xc9>
jmp    1236 <input_q+0x136>
cmpq   $0x1,-0x10(%rbp)
jne    124b <input_q+0x14b>
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<input_q>:
movabs $0x100000200,%rax
mov    (%rax),%rax
nopl   (%rax)
cmp    $0x2d,%rax
je     1110 <input_q+0x10>
cmp    $0xffffffffffffffff,%rax
jne    111f <input_q+0x1f>
xor    %eax,%eax
ret
add    $0xffffffffffffffc6,%rax
cmp    $0xfffffffffffffff6,%rax
jae    1140 <input_q+0x40>
nopl   0x0(%rax)
jmp    1130 <input_q+0x30>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
jmp    1140 <input_q+0x40>

LLVM IR (-O0):
define i64 @input_q() {
%1 = alloca i64
%2 = alloca i64
%3 = alloca i64
%4 = alloca i64
store i64 0, i64* %4
store i64 0, i64* %2
store i64 1, i64* %3
br label %5
5: ; preds = %33, %0
%6 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %6, i64* %1
%7 = load i64, i64* %1
%8 = icmp eq i64 %7, -1
br i1 %8, label %9, label %10
9: ; preds = %5
br label %60
10: ; preds = %5
%11 = load i64, i64* %1
%12 = icmp eq i64 %11, 45
br i1 %12, label %13, label %23
13: ; preds = %10
%14 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %14, i64* %1
%15 = load i64, i64* %1
%16 = icmp sle i64 %15, 57
br i1 %16, label %17, label %22
17: ; preds = %13
%18 = load i64, i64* %1
%19 = icmp sge i64 %18, 48
br i1 %19, label %20, label %21
20: ; preds = %17
store i64 1, i64* %2
store i64 0, i64* %3
br label %21
21: ; preds = %20, %17
br label %22
22: ; preds = %21, %13
br label %32
23: ; preds = %10
%24 = load i64, i64* %1
%25 = icmp sle i64 %24, 57
br i1 %25, label %26, label %31
26: ; preds = %23
%27 = load i64, i64* %1
%28 = icmp sge i64 %27, 48
br i1 %28, label %29, label %30
29: ; preds = %26
store i64 0, i64* %3
br label %30
30: ; preds = %29, %26
br label %31
31: ; preds = %30, %23
br label %32
32: ; preds = %31, %22
br label %33
33: ; preds = %32
%34 = load i64, i64* %3
%35 = icmp eq i64 %34, 1
br i1 %35, label %5, label %36
36: ; preds = %33
store i64 1, i64* %3
br label %37
37: ; preds = %56, %36
%38 = load i64, i64* %4
%39 = mul nsw i64 %38, 10
%40 = load i64, i64* %1
%41 = add nsw i64 %39, %40
%42 = sub nsw i64 %41, 48
store i64 %42, i64* %4
%43 = load i64, i64* inttoptr (i64 4294967808 to i64*)
store i64 %43, i64* %1
%44 = load i64, i64* %1
%45 = icmp eq i64 %44, -1
br i1 %45, label %46, label %47
46: ; preds = %37
br label %60
47: ; preds = %37
%48 = load i64, i64* %1
%49 = icmp sgt i64 %48, 57
br i1 %49, label %50, label %51
50: ; preds = %47
store i64 0, i64* %3
br label %51
51: ; preds = %50, %47
%52 = load i64, i64* %1
%53 = icmp slt i64 %52, 48
br i1 %53, label %54, label %55
54: ; preds = %51
store i64 0, i64* %3
br label %55
55: ; preds = %54, %51
br label %56
56: ; preds = %55
%57 = load i64, i64* %3
%58 = icmp eq i64 %57, 1
br i1 %58, label %37, label %59
59: ; preds = %56
br label %60
60: ; preds = %59, %46, %9
%61 = load i64, i64* %2
%62 = icmp eq i64 %61, 1
br i1 %62, label %63, label %66
63: ; preds = %60
%64 = load i64, i64* %4
%65 = sub nsw i64 0, %64
store i64 %65, i64* %4
br label %66
66: ; preds = %63, %60
%67 = load i64, i64* %4
ret i64 %67
}

LLVM IR (-O2):
define i64 @input_q() {
%1 = load i64, i64* inttoptr (i64 4294967808 to i64*)
br label %2
2: ; preds = %2, %0
switch i64 %1, label %3 [
i64 -1, label %8
i64 45, label %2
]
3: ; preds = %2
%4 = add i64 %1, -58
%5 = icmp ult i64 %4, -10
br i1 %5, label %6, label %7
6: ; preds = %3, %6
br label %6
7: ; preds = %3, %7
br label %7
8: ; preds = %2
ret i64 0
}