int __res_hnok(char const *dn) {
  int ppch;
  int pch;
  int ch;
  char const *tmp;
  int nch;
  char const *tmp___0;
  char __cil_tmp8;
  char __cil_tmp9;
  {
    ppch = '\000';
    pch = 46;
    tmp = dn;
    dn = dn + 1;
    __cil_tmp8 = *tmp;
    ch = (int)__cil_tmp8;
    {
      while (1) {
      while_continue:;
        if (ch != 0) {
        } else {
          goto while_break;
        }
        tmp___0 = dn;
        dn = dn + 1;
        __cil_tmp9 = *tmp___0;
        nch = (int)__cil_tmp9;
        if (ch == 46) {
        } else if (pch == 46) {
          if (ch >= 65) {
            if (ch <= 90) {
            } else {
              goto _L___0;
            }
          } else
          _L___0:
            if (ch >= 97) {
              if (ch <= 122) {
              } else {
                goto _L;
              }
            } else
            _L:
              if (ch >= 48) {
                if (ch <= 57) {
                } else {
                  return (0);
                }
              } else {
                return (0);
              }
        } else if (nch == 46) {
          goto _L___6;
        } else if (nch == 0) {
        _L___6:
          if (ch >= 65) {
            if (ch <= 90) {
            } else {
              goto _L___2;
            }
          } else
          _L___2:
            if (ch >= 97) {
              if (ch <= 122) {
              } else {
                goto _L___1;
              }
            } else
            _L___1:
              if (ch >= 48) {
                if (ch <= 57) {
                } else {
                  return (0);
                }
              } else {
                return (0);
              }
        } else if (ch >= 65) {
          if (ch <= 90) {
          } else {
            goto _L___5;
          }
        } else
        _L___5:
          if (ch >= 97) {
            if (ch <= 122) {
            } else {
              goto _L___4;
            }
          } else
          _L___4:
            if (ch >= 48) {
              if (ch <= 57) {
              } else {
                goto _L___3;
              }
            } else
            _L___3:
              if (ch == 45) {
              } else {
                return (0);
              }
        ppch = pch;
        pch = ch;
        ch = nch;
      }
    while_break:;
    }
    return (1);
  }
}


x86 assembly (clang, -O0):
<__res_hnok>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x2e,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x39(%rbp)
movsbl -0x39(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    113f <__res_hnok+0x3f>
cmpl   $0x0,-0x1c(%rbp)
je     114e <__res_hnok+0x4e>
jmp    1153 <__res_hnok+0x53>
jmp    13a5 <__res_hnok+0x2a5>
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
movsbl -0x3a(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x2e,-0x1c(%rbp)
jne    1186 <__res_hnok+0x86>
jmp    138e <__res_hnok+0x28e>
cmpl   $0x2e,-0x18(%rbp)
jne    1225 <__res_hnok+0x125>
cmpl   $0x41,-0x1c(%rbp)
jl     11b3 <__res_hnok+0xb3>
cmpl   $0x5a,-0x1c(%rbp)
jg     11a9 <__res_hnok+0xa9>
jmp    11ae <__res_hnok+0xae>
jmp    11b8 <__res_hnok+0xb8>
jmp    1220 <__res_hnok+0x120>
jmp    11b8 <__res_hnok+0xb8>
cmpl   $0x61,-0x1c(%rbp)
jl     11db <__res_hnok+0xdb>
cmpl   $0x7a,-0x1c(%rbp)
jg     11d1 <__res_hnok+0xd1>
jmp    11d6 <__res_hnok+0xd6>
jmp    11e0 <__res_hnok+0xe0>
jmp    121b <__res_hnok+0x11b>
jmp    11e0 <__res_hnok+0xe0>
cmpl   $0x30,-0x1c(%rbp)
jl     120a <__res_hnok+0x10a>
cmpl   $0x39,-0x1c(%rbp)
jg     11f9 <__res_hnok+0xf9>
jmp    1205 <__res_hnok+0x105>
movl   $0x0,-0x4(%rbp)
jmp    13ac <__res_hnok+0x2ac>
jmp    1216 <__res_hnok+0x116>
movl   $0x0,-0x4(%rbp)
jmp    13ac <__res_hnok+0x2ac>
jmp    121b <__res_hnok+0x11b>
jmp    1220 <__res_hnok+0x120>
jmp    1389 <__res_hnok+0x289>
cmpl   $0x2e,-0x2c(%rbp)
jne    1234 <__res_hnok+0x134>
jmp    1243 <__res_hnok+0x143>
cmpl   $0x0,-0x2c(%rbp)
jne    12d8 <__res_hnok+0x1d8>
jmp    1243 <__res_hnok+0x143>
cmpl   $0x41,-0x1c(%rbp)
jl     1266 <__res_hnok+0x166>
cmpl   $0x5a,-0x1c(%rbp)
jg     125c <__res_hnok+0x15c>
jmp    1261 <__res_hnok+0x161>
jmp    126b <__res_hnok+0x16b>
jmp    12d3 <__res_hnok+0x1d3>
jmp    126b <__res_hnok+0x16b>
cmpl   $0x61,-0x1c(%rbp)
jl     128e <__res_hnok+0x18e>
cmpl   $0x7a,-0x1c(%rbp)
jg     1284 <__res_hnok+0x184>
jmp    1289 <__res_hnok+0x189>
jmp    1293 <__res_hnok+0x193>
jmp    12ce <__res_hnok+0x1ce>
jmp    1293 <__res_hnok+0x193>
cmpl   $0x30,-0x1c(%rbp)
jl     12bd <__res_hnok+0x1bd>
cmpl   $0x39,-0x1c(%rbp)
jg     12ac <__res_hnok+0x1ac>
jmp    12b8 <__res_hnok+0x1b8>
movl   $0x0,-0x4(%rbp)
jmp    13ac <__res_hnok+0x2ac>
jmp    12c9 <__res_hnok+0x1c9>
movl   $0x0,-0x4(%rbp)
jmp    13ac <__res_hnok+0x2ac>
jmp    12ce <__res_hnok+0x1ce>
jmp    12d3 <__res_hnok+0x1d3>
jmp    137f <__res_hnok+0x27f>
cmpl   $0x41,-0x1c(%rbp)
jl     12fb <__res_hnok+0x1fb>
cmpl   $0x5a,-0x1c(%rbp)
jg     12f1 <__res_hnok+0x1f1>
jmp    12f6 <__res_hnok+0x1f6>
jmp    1300 <__res_hnok+0x200>
jmp    137a <__res_hnok+0x27a>
jmp    1300 <__res_hnok+0x200>
cmpl   $0x61,-0x1c(%rbp)
jl     1323 <__res_hnok+0x223>
cmpl   $0x7a,-0x1c(%rbp)
jg     1319 <__res_hnok+0x219>
jmp    131e <__res_hnok+0x21e>
jmp    1328 <__res_hnok+0x228>
jmp    1375 <__res_hnok+0x275>
jmp    1328 <__res_hnok+0x228>
cmpl   $0x30,-0x1c(%rbp)
jl     134b <__res_hnok+0x24b>
cmpl   $0x39,-0x1c(%rbp)
jg     1341 <__res_hnok+0x241>
jmp    1346 <__res_hnok+0x246>
jmp    1350 <__res_hnok+0x250>
jmp    1370 <__res_hnok+0x270>
jmp    1350 <__res_hnok+0x250>
cmpl   $0x2d,-0x1c(%rbp)
jne    135f <__res_hnok+0x25f>
jmp    136b <__res_hnok+0x26b>
movl   $0x0,-0x4(%rbp)
jmp    13ac <__res_hnok+0x2ac>
jmp    1370 <__res_hnok+0x270>
jmp    1375 <__res_hnok+0x275>
jmp    137a <__res_hnok+0x27a>
jmp    137f <__res_hnok+0x27f>
jmp    1384 <__res_hnok+0x284>
jmp    1389 <__res_hnok+0x289>
jmp    138e <__res_hnok+0x28e>
mov    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    113a <__res_hnok+0x3a>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__res_hnok>:
mov    (%rdi),%r8b
mov    $0x1,%eax
test   %r8b,%r8b
je     1183 <__res_hnok+0x83>
add    $0x1,%rdi
mov    $0x2e,%esi
jmp    112c <__res_hnok+0x2c>
nopl   0x0(%rax,%rax,1)
movsbl %dl,%esi
add    $0x1,%rdi
test   %r8b,%r8b
je     1183 <__res_hnok+0x83>
mov    %r8d,%edx
movzbl (%rdi),%r8d
cmp    $0x2e,%dl
je     1120 <__res_hnok+0x20>
cmp    $0x2e,%esi
je     1150 <__res_hnok+0x50>
cmp    $0x2e,%r8b
je     1150 <__res_hnok+0x50>
test   %r8b,%r8b
jne    1167 <__res_hnok+0x67>
nopl   0x0(%rax,%rax,1)
mov    %edx,%ecx
and    $0xdf,%cl
add    $0xbf,%cl
cmp    $0x1a,%cl
jb     1120 <__res_hnok+0x20>
lea    -0x30(%rdx),%ecx
cmp    $0xa,%cl
jb     1120 <__res_hnok+0x20>
jmp    1181 <__res_hnok+0x81>
mov    %edx,%ecx
and    $0xdf,%cl
add    $0xbf,%cl
cmp    $0x1a,%cl
jb     1120 <__res_hnok+0x20>
cmp    $0x2d,%dl
je     1120 <__res_hnok+0x20>
lea    -0x30(%rdx),%ecx
cmp    $0x9,%cl
jbe    1120 <__res_hnok+0x20>
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @__res_hnok(i8* nocapture %0) {
%2 = load i8, i8* %0
%3 = icmp eq i8 %2, 0
br i1 %3, label %40, label %4
4: ; preds = %1, %38
%5 = phi i8* [ %9, %38 ], [ %0, %1 ]
%6 = phi i32 [ %8, %38 ], [ 46, %1 ]
%7 = phi i8 [ %10, %38 ], [ %2, %1 ]
%8 = sext i8 %7 to i32
%9 = getelementptr inbounds i8, i8* %5, i64 1
%10 = load i8, i8* %9
%11 = icmp eq i8 %7, 46
br i1 %11, label %38, label %12
12: ; preds = %4
%13 = icmp eq i32 %6, 46
br i1 %13, label %14, label %21
14: ; preds = %12
%15 = and i8 %7, -33
%16 = add i8 %15, -65
%17 = icmp ult i8 %16, 26
%18 = add i8 %7, -48
%19 = icmp ult i8 %18, 10
%20 = select i1 %17, i1 true, i1 %19
br i1 %20, label %38, label %40
21: ; preds = %12
switch i8 %10, label %29 [
i8 46, label %22
i8 0, label %22
]
22: ; preds = %21, %21
%23 = and i8 %7, -33
%24 = add i8 %23, -65
%25 = icmp ult i8 %24, 26
%26 = add i8 %7, -48
%27 = icmp ult i8 %26, 10
%28 = select i1 %25, i1 true, i1 %27
br i1 %28, label %38, label %40
29: ; preds = %21
%30 = and i8 %7, -33
%31 = add i8 %30, -65
%32 = icmp ult i8 %31, 26
br i1 %32, label %38, label %33
33: ; preds = %29
%34 = add i8 %7, -48
%35 = icmp ult i8 %34, 10
%36 = icmp eq i8 %7, 45
%37 = or i1 %36, %35
br i1 %37, label %38, label %40
38: ; preds = %33, %29, %22, %14, %4
%39 = icmp eq i8 %10, 0
br i1 %39, label %40, label %4
40: ; preds = %33, %38, %14, %22, %1
%41 = phi i32 [ 1, %1 ], [ 0, %22 ], [ 0, %14 ], [ 1, %38 ], [ 0, %33 ]
ret i32 %41
}