#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*/ isascii(char);
scalar_t__ isdigit(char const);
int /*<<< orphan*/ isprint(char);
int /*<<< orphan*/ *strchr(char *, char const);
int checkfmt(const char *s) {
  char c;
  int seen = 0;
  if (*s == '*') {
    s++;
    if (*s == '\0' || strchr("dksu", *s) == NULL) {
      return (-1);
    }
    s++;
  }
  while ((c = *s++) != 0) {
    if (!isascii(c) || !isprint(c)) {
      return (-1);
    }
    if (c != '%') {
      continue;
    }
    if (*s == '%') {
      s++;
      continue;
    }
    if (seen) {
      return (-1);
    }
    while (*s != '\0' && strchr(" '+-0#", *s) != NULL) {
      s++;
    }
    while (isdigit(*s)) {
      s++;
    }
    if (*s == '.') {
      s++;
      while (isdigit(*s)) {
        s++;
      }
    }
    if (*s == 'l') {
      s++;
    } else if (*s == 'h') {
      s++;
      if (*s == 'h')
        s++;
    }
    if (*s == '\0' || strchr("cCdiouxX", *s) == NULL) {
      return (-1);
    }
    seen = 1;
  }
  return (0);
}


x86 assembly (clang, -O0):
<checkfmt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    11b4 <checkfmt+0x74>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     119c <checkfmt+0x5c>
mov    -0x10(%rbp),%rax
lea    0xe76(%rip),%rdi
movsbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
jne    11a8 <checkfmt+0x68>
movl   $0xffffffff,-0x4(%rbp)
jmp    13cd <checkfmt+0x28d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11b9 <checkfmt+0x79>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x11(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     13c6 <checkfmt+0x286>
movsbl -0x11(%rbp),%edi
call   1060 <isascii@plt>
cmp    $0x0,%eax
je     11fd <checkfmt+0xbd>
movsbl -0x11(%rbp),%edi
call   1050 <isprint@plt>
cmp    $0x0,%eax
jne    1209 <checkfmt+0xc9>
movl   $0xffffffff,-0x4(%rbp)
jmp    13cd <checkfmt+0x28d>
movsbl -0x11(%rbp),%eax
cmp    $0x25,%eax
je     121b <checkfmt+0xdb>
jmp    11b9 <checkfmt+0x79>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
jne    123c <checkfmt+0xfc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11b9 <checkfmt+0x79>
cmpl   $0x0,-0x18(%rbp)
je     1252 <checkfmt+0x112>
movl   $0xffffffff,-0x4(%rbp)
jmp    13cd <checkfmt+0x28d>
jmp    1257 <checkfmt+0x117>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x19(%rbp)
je     1289 <checkfmt+0x149>
mov    -0x10(%rbp),%rax
lea    0xd8e(%rip),%rdi
movsbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x19(%rbp)
mov    -0x19(%rbp),%al
test   $0x1,%al
jne    1299 <checkfmt+0x159>
jmp    12aa <checkfmt+0x16a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1257 <checkfmt+0x117>
jmp    12af <checkfmt+0x16f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     12d6 <checkfmt+0x196>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12af <checkfmt+0x16f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    131e <checkfmt+0x1de>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1319 <checkfmt+0x1d9>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12f2 <checkfmt+0x1b2>
jmp    131e <checkfmt+0x1de>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6c,%eax
jne    133f <checkfmt+0x1ff>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1381 <checkfmt+0x241>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
jne    137c <checkfmt+0x23c>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x68,%eax
jne    1377 <checkfmt+0x237>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    137c <checkfmt+0x23c>
jmp    1381 <checkfmt+0x241>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13ae <checkfmt+0x26e>
mov    -0x10(%rbp),%rax
lea    0xc70(%rip),%rdi
movsbl (%rax),%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
jne    13ba <checkfmt+0x27a>
movl   $0xffffffff,-0x4(%rbp)
jmp    13cd <checkfmt+0x28d>
movl   $0x1,-0x18(%rbp)
jmp    11b9 <checkfmt+0x79>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<checkfmt>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rdi,%r15
mov    (%rdi),%bl
cmp    $0x2a,%bl
jne    1183 <checkfmt+0x43>
mov    0x1(%r15),%al
mov    $0xffffffff,%r14d
test   %al,%al
je     12d7 <checkfmt+0x197>
movsbl %al,%esi
lea    0xe93(%rip),%rdi
call   1040 <strchr@plt>
test   %rax,%rax
je     12d7 <checkfmt+0x197>
mov    0x2(%r15),%bl
add    $0x2,%r15
xor    %r14d,%r14d
test   %bl,%bl
jne    119f <checkfmt+0x5f>
jmp    12d7 <checkfmt+0x197>
nop
mov    %rbp,%r15
movzbl 0x0(%rbp),%ebx
test   %bl,%bl
je     12d7 <checkfmt+0x197>
movsbl %bl,%ebp
mov    %ebp,%edi
call   1060 <isascii@plt>
test   %eax,%eax
je     12d1 <checkfmt+0x191>
mov    %ebp,%edi
call   1050 <isprint@plt>
test   %eax,%eax
je     12d1 <checkfmt+0x191>
lea    0x1(%r15),%rbp
cmp    $0x25,%bl
jne    1190 <checkfmt+0x50>
movzbl 0x0(%rbp),%eax
cmp    $0x25,%al
jne    11e5 <checkfmt+0xa5>
add    $0x2,%r15
mov    %r15,%rbp
movzbl (%r15),%ebx
test   %bl,%bl
jne    119f <checkfmt+0x5f>
jmp    12d7 <checkfmt+0x197>
test   %al,%al
je     120c <checkfmt+0xcc>
lea    0xe15(%rip),%rbx
movsbl %al,%esi
mov    %rbx,%rdi
call   1040 <strchr@plt>
test   %rax,%rax
je     120c <checkfmt+0xcc>
movzbl 0x1(%rbp),%eax
add    $0x1,%rbp
test   %al,%al
jne    11f0 <checkfmt+0xb0>
add    $0xffffffffffffffff,%rbp
movsbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1030 <isdigit@plt>
test   %rax,%rax
jne    1210 <checkfmt+0xd0>
mov    0x0(%rbp),%al
cmp    $0x2e,%al
jne    1245 <checkfmt+0x105>
nopl   0x0(%rax)
movsbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1030 <isdigit@plt>
test   %rax,%rax
jne    1230 <checkfmt+0xf0>
mov    0x0(%rbp),%al
cmp    $0x68,%al
je     1253 <checkfmt+0x113>
cmp    $0x6c,%al
jne    1263 <checkfmt+0x123>
add    $0x1,%rbp
jmp    1263 <checkfmt+0x123>
cmpb   $0x68,0x1(%rbp)
lea    0x2(%rbp),%rax
lea    0x1(%rbp),%rbp
cmove  %rax,%rbp
mov    0x0(%rbp),%al
test   %al,%al
je     12d1 <checkfmt+0x191>
movsbl %al,%esi
lea    0xd98(%rip),%rdi
call   1040 <strchr@plt>
test   %rax,%rax
je     12d1 <checkfmt+0x191>
mov    0x0(%rbp),%r15b
test   %r15b,%r15b
jne    1295 <checkfmt+0x155>
jmp    12d7 <checkfmt+0x197>
mov    %rax,%rbp
movzbl (%rax),%r15d
test   %r15b,%r15b
je     12d7 <checkfmt+0x197>
movsbl %r15b,%ebx
mov    %ebx,%edi
call   1060 <isascii@plt>
test   %eax,%eax
je     12d1 <checkfmt+0x191>
mov    %ebx,%edi
call   1050 <isprint@plt>
test   %eax,%eax
je     12d1 <checkfmt+0x191>
lea    0x1(%rbp),%rax
cmp    $0x25,%r15b
jne    1289 <checkfmt+0x149>
cmpb   $0x25,(%rax)
jne    12d1 <checkfmt+0x191>
add    $0x2,%rbp
mov    %rbp,%rax
movzbl 0x0(%rbp),%r15d
test   %r15b,%r15b
jne    1295 <checkfmt+0x155>
jmp    12d7 <checkfmt+0x197>
mov    $0xffffffff,%r14d
mov    %r14d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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