#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ sscanf(char *, char *, unsigned long *, unsigned long *);
int is_vma_range_fmt(char *line, unsigned long *start, unsigned long *end) {
  char *p = line;
  while (*line && (((*line) >= '0' && (*line) <= '9') ||
                   ((*line) >= 'a' && (*line) <= 'f') ||
                   ((*line) >= 'A' && (*line) <= 'F')))
    line++;
  if (*line++ != '-')
    return 0;
  while (*line && (((*line) >= '0' && (*line) <= '9') ||
                   ((*line) >= 'a' && (*line) <= 'f') ||
                   ((*line) >= 'A' && (*line) <= 'F')))
    line++;
  if (*line++ != ' ')
    return 0;
  sscanf(p, "%lx-%lx", start, end);
  return 1;
}


x86 assembly (clang, -O0):
<is_vma_range_fmt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x29(%rbp)
je     11bc <is_vma_range_fmt+0xac>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1166 <is_vma_range_fmt+0x56>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x39,%ecx
mov    %al,-0x2a(%rbp)
jle    11b6 <is_vma_range_fmt+0xa6>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     118b <is_vma_range_fmt+0x7b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x66,%ecx
mov    %al,-0x2a(%rbp)
jle    11b6 <is_vma_range_fmt+0xa6>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x41,%ecx
mov    %al,-0x2b(%rbp)
jl     11b0 <is_vma_range_fmt+0xa0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
setle  %al
mov    %al,-0x2b(%rbp)
mov    -0x2b(%rbp),%al
mov    %al,-0x2a(%rbp)
mov    -0x2a(%rbp),%al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    11cc <is_vma_range_fmt+0xbc>
jmp    11dd <is_vma_range_fmt+0xcd>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    112c <is_vma_range_fmt+0x1c>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1204 <is_vma_range_fmt+0xf4>
movl   $0x0,-0x4(%rbp)
jmp    1300 <is_vma_range_fmt+0x1f0>
jmp    1209 <is_vma_range_fmt+0xf9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x2c(%rbp)
je     1299 <is_vma_range_fmt+0x189>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1243 <is_vma_range_fmt+0x133>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x39,%ecx
mov    %al,-0x2d(%rbp)
jle    1293 <is_vma_range_fmt+0x183>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1268 <is_vma_range_fmt+0x158>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x66,%ecx
mov    %al,-0x2d(%rbp)
jle    1293 <is_vma_range_fmt+0x183>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x41,%ecx
mov    %al,-0x2e(%rbp)
jl     128d <is_vma_range_fmt+0x17d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
setle  %al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
mov    %al,-0x2c(%rbp)
mov    -0x2c(%rbp),%al
test   $0x1,%al
jne    12a9 <is_vma_range_fmt+0x199>
jmp    12ba <is_vma_range_fmt+0x1aa>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1209 <is_vma_range_fmt+0xf9>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x20,%eax
je     12e1 <is_vma_range_fmt+0x1d1>
movl   $0x0,-0x4(%rbp)
jmp    1300 <is_vma_range_fmt+0x1f0>
mov    -0x28(%rbp),%rdi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
lea    0xd0c(%rip),%rsi
call   1030 <sscanf@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_vma_range_fmt>:
push   %rax
mov    (%rdi),%cl
xor    %eax,%eax
test   %cl,%cl
je     11c0 <is_vma_range_fmt+0xb0>
mov    %rdx,%r8
mov    %rsi,%r10
lea    0x2(%rdi),%rsi
movabs $0x3f0000003f00000,%r9
jmp    114c <is_vma_range_fmt+0x3c>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl -0x1(%rsi),%ecx
add    $0x1,%rsi
test   %cl,%cl
je     11c0 <is_vma_range_fmt+0xb0>
lea    -0x30(%rcx),%edx
cmp    $0xa,%dl
jb     1140 <is_vma_range_fmt+0x30>
add    $0xd3,%cl
cmp    $0x39,%cl
ja     11c0 <is_vma_range_fmt+0xb0>
movzbl %cl,%ecx
bt     %rcx,%r9
jb     1140 <is_vma_range_fmt+0x30>
test   %rcx,%rcx
jne    11c0 <is_vma_range_fmt+0xb0>
mov    -0x1(%rsi),%cl
test   %cl,%cl
je     11c0 <is_vma_range_fmt+0xb0>
movabs $0x3f0000003f,%r9
jmp    118b <is_vma_range_fmt+0x7b>
nopl   (%rax)
movzbl (%rsi),%ecx
add    $0x1,%rsi
test   %cl,%cl
je     11c0 <is_vma_range_fmt+0xb0>
lea    -0x30(%rcx),%edx
cmp    $0x9,%dl
jbe    1180 <is_vma_range_fmt+0x70>
lea    -0x41(%rcx),%edx
cmp    $0x25,%dl
ja     11a4 <is_vma_range_fmt+0x94>
movzbl %dl,%edx
bt     %rdx,%r9
jb     1180 <is_vma_range_fmt+0x70>
cmp    $0x20,%cl
jne    11c0 <is_vma_range_fmt+0xb0>
lea    0xe50(%rip),%rsi
mov    %r10,%rdx
mov    %r8,%rcx
call   1030 <sscanf@plt>
mov    $0x1,%eax
pop    %rcx
ret

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

LLVM IR (-O2):
@.str = [8 x i8] c"%lx-%lx\00"
define i32 @is_vma_range_fmt(i8* nocapture %0, i64* %1, i64* %2) {
%4 = load i8, i8* %0
%5 = icmp eq i8 %4, 0
br i1 %5, label %34, label %6
6: ; preds = %3, %17
%7 = phi i8 [ %19, %17 ], [ %4, %3 ]
%8 = phi i8* [ %18, %17 ], [ %0, %3 ]
%9 = freeze i8 %7
%10 = add i8 %9, -48
%11 = icmp ult i8 %10, 10
br i1 %11, label %17, label %12
12: ; preds = %6
switch i8 %9, label %34 [
i8 102, label %17
i8 101, label %17
i8 100, label %17
i8 99, label %17
i8 98, label %17
i8 97, label %17
i8 70, label %17
i8 69, label %17
i8 68, label %17
i8 67, label %17
i8 66, label %17
i8 65, label %17
i8 45, label %13
]
13: ; preds = %12
%14 = getelementptr inbounds i8, i8* %8, i64 1
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 0
br i1 %16, label %34, label %21
17: ; preds = %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %12, %6
%18 = getelementptr inbounds i8, i8* %8, i64 1
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, 0
br i1 %20, label %34, label %6
21: ; preds = %13, %27
%22 = phi i8 [ %29, %27 ], [ %15, %13 ]
%23 = phi i8* [ %28, %27 ], [ %14, %13 ]
%24 = freeze i8 %22
%25 = add i8 %24, -48
%26 = icmp ult i8 %25, 10
br i1 %26, label %27, label %31
27: ; preds = %21, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31, %31
%28 = getelementptr inbounds i8, i8* %23, i64 1
%29 = load i8, i8* %28
%30 = icmp eq i8 %29, 0
br i1 %30, label %34, label %21
31: ; preds = %21
switch i8 %24, label %34 [
i8 102, label %27
i8 101, label %27
i8 100, label %27
i8 99, label %27
i8 98, label %27
i8 97, label %27
i8 70, label %27
i8 69, label %27
i8 68, label %27
i8 67, label %27
i8 66, label %27
i8 65, label %27
i8 32, label %32
]
32: ; preds = %31
%33 = tail call i32 @sscanf(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i64* %1, i64* %2)
br label %34
34: ; preds = %17, %12, %27, %31, %3, %13, %32
%35 = phi i32 [ 1, %32 ], [ 0, %13 ], [ 0, %3 ], [ 0, %31 ], [ 0, %27 ], [ 0, %12 ], [ 0, %17 ]
ret i32 %35
}