#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 */
scalar_t__ strchr(char *, char const);
int email_isvalid(const char *address) {
  int count = 0;
  const char *c, *domain;
  static char *rfc822_specials = "()<>@,;:\\\"[]";
  for (c = address; *c; c++) {
    if (*c == '\"' && (c == address || *(c - 1) == '.' || *(c - 1) == '\"')) {
      while (*++c) {
        if (*c == '\"')
          break;
        if (*c == '\\' && (*++c == ' '))
          continue;
        if (*c <= ' ' || *c >= 127)
          return 0;
      }
      if (!*c++)
        return 0;
      if (*c == '@')
        break;
      if (*c != '.')
        return 0;
      continue;
    }
    if (*c == '@')
      break;
    if (*c <= ' ' || *c >= 127)
      return 0;
    if (strchr(rfc822_specials, *c))
      return 0;
  }
  if (c == address || *(c - 1) == '.')
    return 0;
  if (!*(domain = ++c))
    return 0;
  do {
    if (*c == '.') {
      if (c == domain || *(c - 1) == '.')
        return 0;
      count++;
    }
    if (*c <= ' ' || *c >= 127)
      return 0;
    if (strchr(rfc822_specials, *c))
      return 0;
  } while (*++c);
  return (count >= 1);
}


x86 assembly (clang, -O0):
<email_isvalid>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmpb   $0x0,(%rax)
je     12e7 <email_isvalid+0x1d7>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    1267 <email_isvalid+0x157>
mov    -0x20(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1178 <email_isvalid+0x68>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
je     1178 <email_isvalid+0x68>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x22,%eax
jne    1267 <email_isvalid+0x157>
jmp    117d <email_isvalid+0x6d>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
cmpb   $0x0,0x1(%rax)
je     120d <email_isvalid+0xfd>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    11ab <email_isvalid+0x9b>
jmp    120d <email_isvalid+0xfd>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    11dc <email_isvalid+0xcc>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
jne    11dc <email_isvalid+0xcc>
jmp    117d <email_isvalid+0x6d>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jle    11fc <email_isvalid+0xec>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7f,%eax
jl     1208 <email_isvalid+0xf8>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
jmp    117d <email_isvalid+0x6d>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
cmpb   $0x0,(%rax)
jne    1231 <email_isvalid+0x121>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    1246 <email_isvalid+0x136>
jmp    12e7 <email_isvalid+0x1d7>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     1262 <email_isvalid+0x152>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
jmp    12d6 <email_isvalid+0x1c6>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    127c <email_isvalid+0x16c>
jmp    12e7 <email_isvalid+0x1d7>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jle    129c <email_isvalid+0x18c>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7f,%eax
jl     12a8 <email_isvalid+0x198>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
mov    0x2d79(%rip),%rdi
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     12d1 <email_isvalid+0x1c1>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
jmp    12d6 <email_isvalid+0x1c6>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    112b <email_isvalid+0x1b>
mov    -0x20(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1306 <email_isvalid+0x1f6>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
jne    1312 <email_isvalid+0x202>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
cmpb   $0x0,0x1(%rax)
jne    133b <email_isvalid+0x22b>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
jmp    1340 <email_isvalid+0x230>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1384 <email_isvalid+0x274>
mov    -0x20(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     136f <email_isvalid+0x25f>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
jne    137b <email_isvalid+0x26b>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jle    13a4 <email_isvalid+0x294>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7f,%eax
jl     13b0 <email_isvalid+0x2a0>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
mov    0x2c71(%rip),%rdi
mov    -0x20(%rbp),%rax
movsbl (%rax),%esi
call   1030 <strchr@plt>
cmp    $0x0,%rax
je     13d9 <email_isvalid+0x2c9>
movl   $0x0,-0x4(%rbp)
jmp    1406 <email_isvalid+0x2f6>
jmp    13de <email_isvalid+0x2ce>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
cmpb   $0x0,0x1(%rax)
jne    1340 <email_isvalid+0x230>
cmpl   $0x1,-0x14(%rbp)
setge  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<email_isvalid>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rdi,%r15
lea    0xedf(%rip),%r14
mov    %rdi,%rbx
mov    (%rbx),%al
cmp    $0x22,%al
je     1160 <email_isvalid+0x50>
test   %al,%al
je     11e3 <email_isvalid+0xd3>
cmp    $0x40,%al
je     11e3 <email_isvalid+0xd3>
lea    -0x7f(%rax),%ecx
cmp    $0xa2,%cl
jb     1256 <email_isvalid+0x146>
movsbl %al,%esi
mov    %r14,%rdi
call   1030 <strchr@plt>
test   %rax,%rax
je     11d5 <email_isvalid+0xc5>
jmp    1256 <email_isvalid+0x146>
nopl   0x0(%rax,%rax,1)
cmp    %r15,%rbx
je     118c <email_isvalid+0x7c>
mov    -0x1(%rbx),%cl
cmp    $0x2e,%cl
je     118c <email_isvalid+0x7c>
cmp    $0x22,%cl
je     118c <email_isvalid+0x7c>
jmp    1146 <email_isvalid+0x36>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x81,%cl
cmp    $0xa2,%cl
jb     1256 <email_isvalid+0x146>
movzbl 0x1(%rbx),%ecx
cmp    $0x5c,%cl
je     11b0 <email_isvalid+0xa0>
test   %cl,%cl
je     11c0 <email_isvalid+0xb0>
cmp    $0x22,%cl
je     11c0 <email_isvalid+0xb0>
add    $0x1,%rbx
jmp    1180 <email_isvalid+0x70>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x2(%rbx),%ecx
add    $0x2,%rbx
cmp    $0x20,%cl
je     118c <email_isvalid+0x7c>
jmp    1180 <email_isvalid+0x70>
nop
xor    %eax,%eax
test   %cl,%cl
je     1258 <email_isvalid+0x148>
add    $0x2,%rbx
mov    (%rbx),%cl
cmp    $0x2e,%cl
jne    11de <email_isvalid+0xce>
add    $0x1,%rbx
jmp    1124 <email_isvalid+0x14>
cmp    $0x40,%cl
jne    1258 <email_isvalid+0x148>
xor    %eax,%eax
cmp    %r15,%rbx
je     1258 <email_isvalid+0x148>
cmpb   $0x2e,-0x1(%rbx)
je     1258 <email_isvalid+0x148>
mov    0x1(%rbx),%cl
test   %cl,%cl
je     1258 <email_isvalid+0x148>
xor    %r15d,%r15d
lea    0xdff(%rip),%r14
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x2e,%cl
jne    1228 <email_isvalid+0x118>
xor    %eax,%eax
test   %r15,%r15
je     1258 <email_isvalid+0x148>
cmpb   $0x2e,(%rbx,%r15,1)
je     1258 <email_isvalid+0x148>
add    $0x1,%ebp
jmp    122f <email_isvalid+0x11f>
lea    -0x7f(%rcx),%eax
cmp    $0xa2,%al
jb     1256 <email_isvalid+0x146>
movsbl %cl,%esi
mov    %r14,%rdi
call   1030 <strchr@plt>
test   %rax,%rax
jne    1256 <email_isvalid+0x146>
movzbl 0x2(%rbx,%r15,1),%ecx
add    $0x1,%r15
test   %cl,%cl
jne    1210 <email_isvalid+0x100>
xor    %eax,%eax
test   %ebp,%ebp
setg   %al
jmp    1258 <email_isvalid+0x148>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [13 x i8] c"()<>@,;:\\\22[]\00"
define i32 @email_isvalid(i8* %0) {
br label %2
2: ; preds = %37, %1
%3 = phi i8* [ %0, %1 ], [ %39, %37 ]
%4 = load i8, i8* %3
switch i8 %4, label %31 [
i8 0, label %40
i8 34, label %5
i8 64, label %40
]
5: ; preds = %2
%6 = icmp eq i8* %3, %0
br i1 %6, label %10, label %7
7: ; preds = %5
%8 = getelementptr inbounds i8, i8* %3, i64 -1
%9 = load i8, i8* %8
switch i8 %9, label %34 [
i8 46, label %10
i8 34, label %10
]
10: ; preds = %7, %7, %5
br label %11
11: ; preds = %19, %10
%12 = phi i8* [ %3, %10 ], [ %20, %19 ]
%13 = getelementptr inbounds i8, i8* %12, i64 1
%14 = load i8, i8* %13
switch i8 %14, label %21 [
i8 0, label %26
i8 34, label %26
i8 92, label %15
]
15: ; preds = %11
%16 = getelementptr inbounds i8, i8* %12, i64 2
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 32
br i1 %18, label %19, label %21
19: ; preds = %15, %21
%20 = phi i8* [ %16, %15 ], [ %23, %21 ]
br label %11
21: ; preds = %11, %15
%22 = phi i8 [ %17, %15 ], [ %14, %11 ]
%23 = phi i8* [ %16, %15 ], [ %13, %11 ]
%24 = add i8 %22, -127
%25 = icmp ult i8 %24, -94
br i1 %25, label %81, label %19
26: ; preds = %11, %11
%27 = getelementptr inbounds i8, i8* %12, i64 2
%28 = icmp eq i8 %14, 0
br i1 %28, label %81, label %29
29: ; preds = %26
%30 = load i8, i8* %27
switch i8 %30, label %81 [
i8 64, label %40
i8 46, label %37
]
31: ; preds = %2
%32 = add i8 %4, -127
%33 = icmp ult i8 %32, -94
br i1 %33, label %81, label %34
34: ; preds = %7, %31
%35 = tail call i64 @strchr(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i8 signext %4)
%36 = icmp eq i64 %35, 0
br i1 %36, label %37, label %81
37: ; preds = %29, %34
%38 = phi i8* [ %3, %34 ], [ %27, %29 ]
%39 = getelementptr inbounds i8, i8* %38, i64 1
br label %2
40: ; preds = %2, %2, %29
%41 = phi i8* [ %27, %29 ], [ %3, %2 ], [ %3, %2 ]
%42 = icmp eq i8* %41, %0
br i1 %42, label %81, label %43
43: ; preds = %40
%44 = getelementptr inbounds i8, i8* %41, i64 -1
%45 = load i8, i8* %44
%46 = icmp eq i8 %45, 46
br i1 %46, label %81, label %47
47: ; preds = %43
%48 = getelementptr inbounds i8, i8* %41, i64 1
%49 = load i8, i8* %48
%50 = icmp eq i8 %49, 0
br i1 %50, label %81, label %51
51: ; preds = %47
%52 = getelementptr inbounds i8, i8* %41, i64 -1
br label %53
53: ; preds = %51, %73
%54 = phi i8 [ %76, %73 ], [ %49, %51 ]
%55 = phi i32 [ %70, %73 ], [ 0, %51 ]
%56 = phi i64 [ %74, %73 ], [ 1, %51 ]
%57 = icmp eq i8 %54, 46
br i1 %57, label %58, label %66
58: ; preds = %53
%59 = icmp eq i64 %56, 1
br i1 %59, label %81, label %60
60: ; preds = %58
%61 = getelementptr inbounds i8, i8* %52, i64 %56
%62 = load i8, i8* %61
%63 = icmp eq i8 %62, 46
br i1 %63, label %81, label %64
64: ; preds = %60
%65 = add nsw i32 %55, 1
br label %69
66: ; preds = %53
%67 = add i8 %54, -127
%68 = icmp ult i8 %67, -94
br i1 %68, label %81, label %69
69: ; preds = %64, %66
%70 = phi i32 [ %65, %64 ], [ %55, %66 ]
%71 = tail call i64 @strchr(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i8 signext %54)
%72 = icmp eq i64 %71, 0
br i1 %72, label %73, label %81
73: ; preds = %69
%74 = add nuw nsw i64 %56, 1
%75 = getelementptr inbounds i8, i8* %41, i64 %74
%76 = load i8, i8* %75
%77 = icmp eq i8 %76, 0
br i1 %77, label %78, label %53
78: ; preds = %73
%79 = icmp sgt i32 %70, 0
%80 = zext i1 %79 to i32
br label %81
81: ; preds = %34, %31, %29, %26, %21, %69, %66, %58, %60, %47, %40, %43, %78
%82 = phi i32 [ %80, %78 ], [ 0, %43 ], [ 0, %40 ], [ 0, %47 ], [ 0, %60 ], [ 0, %58 ], [ 0, %66 ], [ 0, %69 ], [ 0, %21 ], [ 0, %26 ], [ 0, %29 ], [ 0, %31 ], [ 0, %34 ]
ret i32 %82
}