#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__ isalnum(int);
int /*<<< orphan*/ isspace(int);
int parseaddr_domain(char **inp, char **domainp, char **commentp) {
  char c;
  char *src = *inp;
  char *dst;
  char *cdst;
  int comment;
  if (commentp)
    *commentp = 0;
  {
    int _c, _comment = 0;
    while ((_c = *(src))) {
      if (_c == '(') {
        _comment = 1;
        (src)++;
        while ((_comment && (_c = *(src)))) {
          (src)++;
          if (_c == '\\' && *(src))
            (src)++;
          else if (_c == '(')
            _comment++;
          else if (_c == ')')
            _comment--;
        }
        (src)--;
      } else if (!isspace(_c))
        break;
      (src)++;
    }
  };
  *domainp = dst = src;
  for (;;) {
    c = *src++;
    if (isalnum((int)(unsigned char)c) || c == '-' || c == '[' || c == ']') {
      *dst++ = c;
      if (commentp)
        *commentp = 0;
    } else if (c == '.') {
      if (dst > *domainp && dst[-1] != '.')
        *dst++ = c;
      if (commentp)
        *commentp = 0;
    } else if (c == '(') {
      if (commentp) {
        *commentp = cdst = src;
        comment = 1;
        while (comment && (c = *src)) {
          src++;
          if (c == '(')
            comment++;
          else if (c == ')')
            comment--;
          else if (c == '\\' && (c = *src))
            src++;
          if (comment)
            *cdst++ = c;
        }
        *cdst = '\0';
      } else {
        src--;
        {
          int _c, _comment = 0;
          while ((_c = *(src))) {
            if (_c == '(') {
              _comment = 1;
              (src)++;
              while ((_comment && (_c = *(src)))) {
                (src)++;
                if (_c == '\\' && *(src))
                  (src)++;
                else if (_c == '(')
                  _comment++;
                else if (_c == ')')
                  _comment--;
              }
              (src)--;
            } else if (!isspace(_c))
              break;
            (src)++;
          }
        };
      }
    } else if (!isspace((int)(unsigned char)c)) {
      if (dst > *domainp && dst[-1] == '.')
        dst--;
      *dst = '\0';
      *inp = src;
      return c;
    }
  }
}


x86 assembly (clang, -O0):
<parseaddr_domain>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1155 <parseaddr_domain+0x35>
mov    -0x18(%rbp),%rax
movq   $0x0,(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x40(%rbp)
cmp    $0x0,%eax
je     126c <parseaddr_domain+0x14c>
cmpl   $0x28,-0x40(%rbp)
jne    1240 <parseaddr_domain+0x120>
movl   $0x1,-0x44(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x44(%rbp)
mov    %al,-0x4d(%rbp)
je     11ae <parseaddr_domain+0x8e>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x40(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    11be <parseaddr_domain+0x9e>
jmp    122f <parseaddr_domain+0x10f>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x5c,-0x40(%rbp)
jne    11f5 <parseaddr_domain+0xd5>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     11f5 <parseaddr_domain+0xd5>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    122a <parseaddr_domain+0x10a>
cmpl   $0x28,-0x40(%rbp)
jne    120d <parseaddr_domain+0xed>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1225 <parseaddr_domain+0x105>
cmpl   $0x29,-0x40(%rbp)
jne    1220 <parseaddr_domain+0x100>
mov    -0x44(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x44(%rbp)
jmp    1225 <parseaddr_domain+0x105>
jmp    122a <parseaddr_domain+0x10a>
jmp    118c <parseaddr_domain+0x6c>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    125b <parseaddr_domain+0x13b>
mov    -0x40(%rbp),%edi
call   1040 <isspace@plt>
cmp    $0x0,%eax
jne    1256 <parseaddr_domain+0x136>
jmp    126c <parseaddr_domain+0x14c>
jmp    125b <parseaddr_domain+0x13b>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    115c <parseaddr_domain+0x3c>
mov    -0x28(%rbp),%rcx
mov    %rcx,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movzbl -0x19(%rbp),%edi
call   1030 <isalnum@plt>
cmp    $0x0,%rax
jne    12c9 <parseaddr_domain+0x1a9>
movsbl -0x19(%rbp),%eax
cmp    $0x2d,%eax
je     12c9 <parseaddr_domain+0x1a9>
movsbl -0x19(%rbp),%eax
cmp    $0x5b,%eax
je     12c9 <parseaddr_domain+0x1a9>
movsbl -0x19(%rbp),%eax
cmp    $0x5d,%eax
jne    12f8 <parseaddr_domain+0x1d8>
mov    -0x19(%rbp),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
cmpq   $0x0,-0x18(%rbp)
je     12f3 <parseaddr_domain+0x1d3>
mov    -0x18(%rbp),%rax
movq   $0x0,(%rax)
jmp    15f9 <parseaddr_domain+0x4d9>
movsbl -0x19(%rbp),%eax
cmp    $0x2e,%eax
jne    1356 <parseaddr_domain+0x236>
mov    -0x30(%rbp),%rax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%rax
jbe    133b <parseaddr_domain+0x21b>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
je     133b <parseaddr_domain+0x21b>
mov    -0x19(%rbp),%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
cmpq   $0x0,-0x18(%rbp)
je     1351 <parseaddr_domain+0x231>
mov    -0x18(%rbp),%rax
movq   $0x0,(%rax)
jmp    15f4 <parseaddr_domain+0x4d4>
movsbl -0x19(%rbp),%eax
cmp    $0x28,%eax
jne    158e <parseaddr_domain+0x46e>
cmpq   $0x0,-0x18(%rbp)
je     1461 <parseaddr_domain+0x341>
mov    -0x28(%rbp),%rcx
mov    %rcx,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x3c(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x3c(%rbp)
mov    %al,-0x4e(%rbp)
je     13a8 <parseaddr_domain+0x288>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x4e(%rbp)
mov    -0x4e(%rbp),%al
test   $0x1,%al
jne    13b8 <parseaddr_domain+0x298>
jmp    1455 <parseaddr_domain+0x335>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x28,%eax
jne    13df <parseaddr_domain+0x2bf>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1432 <parseaddr_domain+0x312>
movsbl -0x19(%rbp),%eax
cmp    $0x29,%eax
jne    13fa <parseaddr_domain+0x2da>
mov    -0x3c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3c(%rbp)
jmp    142d <parseaddr_domain+0x30d>
movsbl -0x19(%rbp),%eax
cmp    $0x5c,%eax
jne    1428 <parseaddr_domain+0x308>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x19(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     1428 <parseaddr_domain+0x308>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    142d <parseaddr_domain+0x30d>
jmp    1432 <parseaddr_domain+0x312>
cmpl   $0x0,-0x3c(%rbp)
je     1450 <parseaddr_domain+0x330>
mov    -0x19(%rbp),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    1384 <parseaddr_domain+0x264>
mov    -0x38(%rbp),%rax
movb   $0x0,(%rax)
jmp    1589 <parseaddr_domain+0x469>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x48(%rbp)
cmp    $0x0,%eax
je     1584 <parseaddr_domain+0x464>
cmpl   $0x28,-0x48(%rbp)
jne    1558 <parseaddr_domain+0x438>
movl   $0x1,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4c(%rbp)
mov    %al,-0x4f(%rbp)
je     14c6 <parseaddr_domain+0x3a6>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x48(%rbp)
cmp    $0x0,%eax
setne  %al
mov    %al,-0x4f(%rbp)
mov    -0x4f(%rbp),%al
test   $0x1,%al
jne    14d6 <parseaddr_domain+0x3b6>
jmp    1547 <parseaddr_domain+0x427>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x5c,-0x48(%rbp)
jne    150d <parseaddr_domain+0x3ed>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     150d <parseaddr_domain+0x3ed>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1542 <parseaddr_domain+0x422>
cmpl   $0x28,-0x48(%rbp)
jne    1525 <parseaddr_domain+0x405>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    153d <parseaddr_domain+0x41d>
cmpl   $0x29,-0x48(%rbp)
jne    1538 <parseaddr_domain+0x418>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
jmp    153d <parseaddr_domain+0x41d>
jmp    1542 <parseaddr_domain+0x422>
jmp    14a4 <parseaddr_domain+0x384>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    1573 <parseaddr_domain+0x453>
mov    -0x48(%rbp),%edi
call   1040 <isspace@plt>
cmp    $0x0,%eax
jne    156e <parseaddr_domain+0x44e>
jmp    1584 <parseaddr_domain+0x464>
jmp    1573 <parseaddr_domain+0x453>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1474 <parseaddr_domain+0x354>
jmp    1589 <parseaddr_domain+0x469>
jmp    15ef <parseaddr_domain+0x4cf>
movzbl -0x19(%rbp),%edi
call   1040 <isspace@plt>
cmp    $0x0,%eax
jne    15ea <parseaddr_domain+0x4ca>
mov    -0x30(%rbp),%rax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%rax
jbe    15ce <parseaddr_domain+0x4ae>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
jne    15ce <parseaddr_domain+0x4ae>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
movsbl -0x19(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret
jmp    15ef <parseaddr_domain+0x4cf>
jmp    15f4 <parseaddr_domain+0x4d4>
jmp    15f9 <parseaddr_domain+0x4d9>
jmp    127b <parseaddr_domain+0x15b>

x86 assembly (clang, -O2):
<parseaddr_domain>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdx,%r13
mov    %rsi,0x8(%rsp)
mov    %rdi,%rbx
mov    (%rdi),%r12
test   %rdx,%rdx
je     115b <parseaddr_domain+0x3b>
movq   $0x0,0x0(%r13)
jmp    115b <parseaddr_domain+0x3b>
nopl   0x0(%rax,%rax,1)
mov    %rcx,%r12
add    $0xffffffffffffffff,%r12
add    $0x1,%r12
movsbl (%r12),%edi
cmp    $0x28,%edi
je     1180 <parseaddr_domain+0x60>
test   %dil,%dil
je     11d5 <parseaddr_domain+0xb5>
call   1040 <isspace@plt>
test   %eax,%eax
jne    1157 <parseaddr_domain+0x37>
jmp    11d5 <parseaddr_domain+0xb5>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
mov    $0x1,%eax
mov    %r12,%rcx
jmp    119a <parseaddr_domain+0x7a>
xchg   %ax,%ax
add    $0xffffffff,%eax
mov    %r12,%rcx
test   %eax,%eax
je     1153 <parseaddr_domain+0x33>
movzbl (%rcx),%edx
test   %dl,%dl
je     1150 <parseaddr_domain+0x30>
lea    0x1(%rcx),%r12
cmp    $0x28,%dl
je     11d0 <parseaddr_domain+0xb0>
cmp    $0x29,%dl
je     1190 <parseaddr_domain+0x70>
cmp    $0x5c,%dl
jne    1193 <parseaddr_domain+0x73>
cmpb   $0x0,0x1(%rcx)
je     1193 <parseaddr_domain+0x73>
add    $0x2,%rcx
mov    %rcx,%r12
jmp    1193 <parseaddr_domain+0x73>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%eax
jmp    1193 <parseaddr_domain+0x73>
mov    %rbx,0x10(%rsp)
mov    0x8(%rsp),%rax
mov    %r12,(%rax)
mov    %r12,%r14
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r12,%rbx
jmp    1212 <parseaddr_domain+0xf2>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,%edi
call   1040 <isspace@plt>
mov    %r12,%rbx
test   %eax,%eax
je     13f2 <parseaddr_domain+0x2d2>
lea    0x1(%rbx),%r12
mov    (%rbx),%r15b
movzbl %r15b,%ebp
mov    %ebp,%edi
call   1030 <isalnum@plt>
test   %rax,%rax
jne    13a0 <parseaddr_domain+0x280>
cmp    $0x2c,%r15b
jg     1350 <parseaddr_domain+0x230>
cmp    $0x28,%r15b
jne    1200 <parseaddr_domain+0xe0>
test   %r13,%r13
je     126b <parseaddr_domain+0x14b>
mov    %r12,0x0(%r13)
mov    (%r12),%dl
test   %dl,%dl
je     1382 <parseaddr_domain+0x262>
mov    $0x1,%ecx
mov    %r12,%rax
jmp    1309 <parseaddr_domain+0x1e9>
nop
mov    %rcx,%rbx
add    $0xffffffffffffffff,%rbx
add    $0x1,%rbx
movsbl (%rbx),%edi
cmp    $0x28,%edi
je     1290 <parseaddr_domain+0x170>
test   %dil,%dil
je     1212 <parseaddr_domain+0xf2>
call   1040 <isspace@plt>
test   %eax,%eax
jne    1267 <parseaddr_domain+0x147>
jmp    1212 <parseaddr_domain+0xf2>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rbx
mov    $0x1,%eax
mov    %rbx,%rcx
jmp    12aa <parseaddr_domain+0x18a>
xchg   %ax,%ax
add    $0xffffffff,%eax
mov    %rbx,%rcx
test   %eax,%eax
je     1263 <parseaddr_domain+0x143>
movzbl (%rcx),%edx
test   %dl,%dl
je     1260 <parseaddr_domain+0x140>
lea    0x1(%rcx),%rbx
cmp    $0x28,%dl
je     12e0 <parseaddr_domain+0x1c0>
cmp    $0x29,%dl
je     12a0 <parseaddr_domain+0x180>
cmp    $0x5c,%dl
jne    12a3 <parseaddr_domain+0x183>
cmpb   $0x0,0x1(%rcx)
je     12a3 <parseaddr_domain+0x183>
add    $0x2,%rcx
mov    %rcx,%rbx
jmp    12a3 <parseaddr_domain+0x183>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%eax
jmp    12a3 <parseaddr_domain+0x183>
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x1,%esi
add    %esi,%ecx
je     1368 <parseaddr_domain+0x248>
mov    %dl,(%rax)
add    $0x1,%rax
movzbl (%rbx),%edx
mov    %rbx,%r12
test   %dl,%dl
je     1368 <parseaddr_domain+0x248>
lea    0x1(%r12),%rbx
cmp    $0x28,%dl
je     12f0 <parseaddr_domain+0x1d0>
cmp    $0x5c,%dl
je     1330 <parseaddr_domain+0x210>
cmp    $0x29,%dl
jne    12f9 <parseaddr_domain+0x1d9>
mov    $0x29,%dl
mov    $0xffffffff,%esi
jmp    12f5 <parseaddr_domain+0x1d5>
cs nopw 0x0(%rax,%rax,1)
movzbl 0x1(%r12),%edx
test   %dl,%dl
je     12f9 <parseaddr_domain+0x1d9>
add    $0x2,%r12
mov    %r12,%rbx
jmp    12f9 <parseaddr_domain+0x1d9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x5a,%r15b
jg     1370 <parseaddr_domain+0x250>
cmp    $0x2d,%r15b
je     13a0 <parseaddr_domain+0x280>
cmp    $0x2e,%r15b
jne    1200 <parseaddr_domain+0xe0>
jmp    13c3 <parseaddr_domain+0x2a3>
movb   $0x0,(%rax)
jmp    1212 <parseaddr_domain+0xf2>
cmp    $0x5d,%r15b
je     13a0 <parseaddr_domain+0x280>
cmp    $0x5b,%r15b
jne    1200 <parseaddr_domain+0xe0>
jmp    13a0 <parseaddr_domain+0x280>
mov    %r12,%rax
mov    %r12,%rbx
movb   $0x0,(%r12)
jmp    1212 <parseaddr_domain+0xf2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    0x1(%r14),%rax
mov    %r15b,(%r14)
mov    %rax,%r14
test   %r13,%r13
je     11f0 <parseaddr_domain+0xd0>
movq   $0x0,0x0(%r13)
mov    %rax,%r14
jmp    11f0 <parseaddr_domain+0xd0>
mov    0x8(%rsp),%rax
cmp    (%rax),%r14
jbe    13dc <parseaddr_domain+0x2bc>
cmpb   $0x2e,-0x1(%r14)
je     13dc <parseaddr_domain+0x2bc>
movb   $0x2e,(%r14)
add    $0x1,%r14
test   %r13,%r13
je     11f0 <parseaddr_domain+0xd0>
movq   $0x0,0x0(%r13)
jmp    11f0 <parseaddr_domain+0xd0>
movsbl %r15b,%eax
mov    0x8(%rsp),%rcx
cmp    (%rcx),%r14
jbe    140d <parseaddr_domain+0x2ed>
lea    -0x1(%r14),%rcx
cmpb   $0x2e,-0x1(%r14)
cmove  %rcx,%r14
mov    0x10(%rsp),%rcx
movb   $0x0,(%r14)
mov    %r12,(%rcx)
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @parseaddr_domain(i8** %0, i8** %1, i8** %2) {
%4 = alloca i8**
%5 = alloca i8**
%6 = alloca i8**
%7 = alloca i8
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i8** %0, i8*** %4
store i8** %1, i8*** %5
store i8** %2, i8*** %6
%16 = load i8**, i8*** %4
%17 = load i8*, i8** %16
store i8* %17, i8** %8
%18 = load i8**, i8*** %6
%19 = icmp ne i8** %18, null
br i1 %19, label %20, label %22
20: ; preds = %3
%21 = load i8**, i8*** %6
store i8* null, i8** %21
br label %22
22: ; preds = %20, %3
store i32 0, i32* %13
br label %23
23: ; preds = %81, %22
%24 = load i8*, i8** %8
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
store i32 %26, i32* %12
%27 = icmp ne i32 %26, 0
br i1 %27, label %28, label %84
28: ; preds = %23
%29 = load i32, i32* %12
%30 = icmp eq i32 %29, 40
br i1 %30, label %31, label %75
31: ; preds = %28
store i32 1, i32* %13
%32 = load i8*, i8** %8
%33 = getelementptr inbounds i8, i8* %32, i32 1
store i8* %33, i8** %8
br label %34
34: ; preds = %71, %31
%35 = load i32, i32* %13
%36 = icmp ne i32 %35, 0
br i1 %36, label %37, label %42
37: ; preds = %34
%38 = load i8*, i8** %8
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
store i32 %40, i32* %12
%41 = icmp ne i32 %40, 0
br label %42
42: ; preds = %37, %34
%43 = phi i1 [ false, %34 ], [ %41, %37 ]
br i1 %43, label %44, label %72
44: ; preds = %42
%45 = load i8*, i8** %8
%46 = getelementptr inbounds i8, i8* %45, i32 1
store i8* %46, i8** %8
%47 = load i32, i32* %12
%48 = icmp eq i32 %47, 92
br i1 %48, label %49, label %57
49: ; preds = %44
%50 = load i8*, i8** %8
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp ne i32 %52, 0
br i1 %53, label %54, label %57
54: ; preds = %49
%55 = load i8*, i8** %8
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %8
br label %71
57: ; preds = %49, %44
%58 = load i32, i32* %12
%59 = icmp eq i32 %58, 40
br i1 %59, label %60, label %63
60: ; preds = %57
%61 = load i32, i32* %13
%62 = add nsw i32 %61, 1
store i32 %62, i32* %13
br label %70
63: ; preds = %57
%64 = load i32, i32* %12
%65 = icmp eq i32 %64, 41
br i1 %65, label %66, label %69
66: ; preds = %63
%67 = load i32, i32* %13
%68 = add nsw i32 %67, -1
store i32 %68, i32* %13
br label %69
69: ; preds = %66, %63
br label %70
70: ; preds = %69, %60
br label %71
71: ; preds = %70, %54
br label %34
72: ; preds = %42
%73 = load i8*, i8** %8
%74 = getelementptr inbounds i8, i8* %73, i32 -1
store i8* %74, i8** %8
br label %81
75: ; preds = %28
%76 = load i32, i32* %12
%77 = call i32 @isspace(i32 %76)
%78 = icmp ne i32 %77, 0
br i1 %78, label %80, label %79
79: ; preds = %75
br label %84
80: ; preds = %75
br label %81
81: ; preds = %80, %72
%82 = load i8*, i8** %8
%83 = getelementptr inbounds i8, i8* %82, i32 1
store i8* %83, i8** %8
br label %23
84: ; preds = %79, %23
%85 = load i8*, i8** %8
store i8* %85, i8** %9
%86 = load i8**, i8*** %5
store i8* %85, i8** %86
br label %87
87: ; preds = %295, %84
%88 = load i8*, i8** %8
%89 = getelementptr inbounds i8, i8* %88, i32 1
store i8* %89, i8** %8
%90 = load i8, i8* %88
store i8 %90, i8* %7
%91 = load i8, i8* %7
%92 = zext i8 %91 to i32
%93 = call i64 @isalnum(i32 %92)
%94 = icmp ne i64 %93, 0
br i1 %94, label %107, label %95
95: ; preds = %87
%96 = load i8, i8* %7
%97 = sext i8 %96 to i32
%98 = icmp eq i32 %97, 45
br i1 %98, label %107, label %99
99: ; preds = %95
%100 = load i8, i8* %7
%101 = sext i8 %100 to i32
%102 = icmp eq i32 %101, 91
br i1 %102, label %107, label %103
103: ; preds = %99
%104 = load i8, i8* %7
%105 = sext i8 %104 to i32
%106 = icmp eq i32 %105, 93
br i1 %106, label %107, label %116
107: ; preds = %103, %99, %95, %87
%108 = load i8, i8* %7
%109 = load i8*, i8** %9
%110 = getelementptr inbounds i8, i8* %109, i32 1
store i8* %110, i8** %9
store i8 %108, i8* %109
%111 = load i8**, i8*** %6
%112 = icmp ne i8** %111, null
br i1 %112, label %113, label %115
113: ; preds = %107
%114 = load i8**, i8*** %6
store i8* null, i8** %114
br label %115
115: ; preds = %113, %107
br label %295
116: ; preds = %103
%117 = load i8, i8* %7
%118 = sext i8 %117 to i32
%119 = icmp eq i32 %118, 46
br i1 %119, label %120, label %141
120: ; preds = %116
%121 = load i8*, i8** %9
%122 = load i8**, i8*** %5
%123 = load i8*, i8** %122
%124 = icmp ugt i8* %121, %123
br i1 %124, label %125, label %135
125: ; preds = %120
%126 = load i8*, i8** %9
%127 = getelementptr inbounds i8, i8* %126, i64 -1
%128 = load i8, i8* %127
%129 = sext i8 %128 to i32
%130 = icmp ne i32 %129, 46
br i1 %130, label %131, label %135
131: ; preds = %125
%132 = load i8, i8* %7
%133 = load i8*, i8** %9
%134 = getelementptr inbounds i8, i8* %133, i32 1
store i8* %134, i8** %9
store i8 %132, i8* %133
br label %135
135: ; preds = %131, %125, %120
%136 = load i8**, i8*** %6
%137 = icmp ne i8** %136, null
br i1 %137, label %138, label %140
138: ; preds = %135
%139 = load i8**, i8*** %6
store i8* null, i8** %139
br label %140
140: ; preds = %138, %135
br label %294
141: ; preds = %116
%142 = load i8, i8* %7
%143 = sext i8 %142 to i32
%144 = icmp eq i32 %143, 40
br i1 %144, label %145, label %267
145: ; preds = %141
%146 = load i8**, i8*** %6
%147 = icmp ne i8** %146, null
br i1 %147, label %148, label %201
148: ; preds = %145
%149 = load i8*, i8** %8
store i8* %149, i8** %10
%150 = load i8**, i8*** %6
store i8* %149, i8** %150
store i32 1, i32* %11
br label %151
151: ; preds = %198, %148
%152 = load i32, i32* %11
%153 = icmp ne i32 %152, 0
br i1 %153, label %154, label %159
154: ; preds = %151
%155 = load i8*, i8** %8
%156 = load i8, i8* %155
store i8 %156, i8* %7
%157 = sext i8 %156 to i32
%158 = icmp ne i32 %157, 0
br label %159
159: ; preds = %154, %151
%160 = phi i1 [ false, %151 ], [ %158, %154 ]
br i1 %160, label %161, label %199
161: ; preds = %159
%162 = load i8*, i8** %8
%163 = getelementptr inbounds i8, i8* %162, i32 1
store i8* %163, i8** %8
%164 = load i8, i8* %7
%165 = sext i8 %164 to i32
%166 = icmp eq i32 %165, 40
br i1 %166, label %167, label %170
167: ; preds = %161
%168 = load i32, i32* %11
%169 = add nsw i32 %168, 1
store i32 %169, i32* %11
br label %191
170: ; preds = %161
%171 = load i8, i8* %7
%172 = sext i8 %171 to i32
%173 = icmp eq i32 %172, 41
br i1 %173, label %174, label %177
174: ; preds = %170
%175 = load i32, i32* %11
%176 = add nsw i32 %175, -1
store i32 %176, i32* %11
br label %190
177: ; preds = %170
%178 = load i8, i8* %7
%179 = sext i8 %178 to i32
%180 = icmp eq i32 %179, 92
br i1 %180, label %181, label %189
181: ; preds = %177
%182 = load i8*, i8** %8
%183 = load i8, i8* %182
store i8 %183, i8* %7
%184 = sext i8 %183 to i32
%185 = icmp ne i32 %184, 0
br i1 %185, label %186, label %189
186: ; preds = %181
%187 = load i8*, i8** %8
%188 = getelementptr inbounds i8, i8* %187, i32 1
store i8* %188, i8** %8
br label %189
189: ; preds = %186, %181, %177
br label %190
190: ; preds = %189, %174
br label %191
191: ; preds = %190, %167
%192 = load i32, i32* %11
%193 = icmp ne i32 %192, 0
br i1 %193, label %194, label %198
194: ; preds = %191
%195 = load i8, i8* %7
%196 = load i8*, i8** %10
%197 = getelementptr inbounds i8, i8* %196, i32 1
store i8* %197, i8** %10
store i8 %195, i8* %196
br label %198
198: ; preds = %194, %191
br label %151
199: ; preds = %159
%200 = load i8*, i8** %10
store i8 0, i8* %200
br label %266
201: ; preds = %145
%202 = load i8*, i8** %8
%203 = getelementptr inbounds i8, i8* %202, i32 -1
store i8* %203, i8** %8
store i32 0, i32* %15
br label %204
204: ; preds = %262, %201
%205 = load i8*, i8** %8
%206 = load i8, i8* %205
%207 = sext i8 %206 to i32
store i32 %207, i32* %14
%208 = icmp ne i32 %207, 0
br i1 %208, label %209, label %265
209: ; preds = %204
%210 = load i32, i32* %14
%211 = icmp eq i32 %210, 40
br i1 %211, label %212, label %256
212: ; preds = %209
store i32 1, i32* %15
%213 = load i8*, i8** %8
%214 = getelementptr inbounds i8, i8* %213, i32 1
store i8* %214, i8** %8
br label %215
215: ; preds = %252, %212
%216 = load i32, i32* %15
%217 = icmp ne i32 %216, 0
br i1 %217, label %218, label %223
218: ; preds = %215
%219 = load i8*, i8** %8
%220 = load i8, i8* %219
%221 = sext i8 %220 to i32
store i32 %221, i32* %14
%222 = icmp ne i32 %221, 0
br label %223
223: ; preds = %218, %215
%224 = phi i1 [ false, %215 ], [ %222, %218 ]
br i1 %224, label %225, label %253
225: ; preds = %223
%226 = load i8*, i8** %8
%227 = getelementptr inbounds i8, i8* %226, i32 1
store i8* %227, i8** %8
%228 = load i32, i32* %14
%229 = icmp eq i32 %228, 92
br i1 %229, label %230, label %238
230: ; preds = %225
%231 = load i8*, i8** %8
%232 = load i8, i8* %231
%233 = sext i8 %232 to i32
%234 = icmp ne i32 %233, 0
br i1 %234, label %235, label %238
235: ; preds = %230
%236 = load i8*, i8** %8
%237 = getelementptr inbounds i8, i8* %236, i32 1
store i8* %237, i8** %8
br label %252
238: ; preds = %230, %225
%239 = load i32, i32* %14
%240 = icmp eq i32 %239, 40
br i1 %240, label %241, label %244
241: ; preds = %238
%242 = load i32, i32* %15
%243 = add nsw i32 %242, 1
store i32 %243, i32* %15
br label %251
244: ; preds = %238
%245 = load i32, i32* %14
%246 = icmp eq i32 %245, 41
br i1 %246, label %247, label %250
247: ; preds = %244
%248 = load i32, i32* %15
%249 = add nsw i32 %248, -1
store i32 %249, i32* %15
br label %250
250: ; preds = %247, %244
br label %251
251: ; preds = %250, %241
br label %252
252: ; preds = %251, %235
br label %215
253: ; preds = %223
%254 = load i8*, i8** %8
%255 = getelementptr inbounds i8, i8* %254, i32 -1
store i8* %255, i8** %8
br label %262
256: ; preds = %209
%257 = load i32, i32* %14
%258 = call i32 @isspace(i32 %257)
%259 = icmp ne i32 %258, 0
br i1 %259, label %261, label %260
260: ; preds = %256
br label %265
261: ; preds = %256
br label %262
262: ; preds = %261, %253
%263 = load i8*, i8** %8
%264 = getelementptr inbounds i8, i8* %263, i32 1
store i8* %264, i8** %8
br label %204
265: ; preds = %260, %204
br label %266
266: ; preds = %265, %199
br label %293
267: ; preds = %141
%268 = load i8, i8* %7
%269 = zext i8 %268 to i32
%270 = call i32 @isspace(i32 %269)
%271 = icmp ne i32 %270, 0
br i1 %271, label %292, label %272
272: ; preds = %267
%273 = load i8*, i8** %9
%274 = load i8**, i8*** %5
%275 = load i8*, i8** %274
%276 = icmp ugt i8* %273, %275
br i1 %276, label %277, label %286
277: ; preds = %272
%278 = load i8*, i8** %9
%279 = getelementptr inbounds i8, i8* %278, i64 -1
%280 = load i8, i8* %279
%281 = sext i8 %280 to i32
%282 = icmp eq i32 %281, 46
br i1 %282, label %283, label %286
283: ; preds = %277
%284 = load i8*, i8** %9
%285 = getelementptr inbounds i8, i8* %284, i32 -1
store i8* %285, i8** %9
br label %286
286: ; preds = %283, %277, %272
%287 = load i8*, i8** %9
store i8 0, i8* %287
%288 = load i8*, i8** %8
%289 = load i8**, i8*** %4
store i8* %288, i8** %289
%290 = load i8, i8* %7
%291 = sext i8 %290 to i32
ret i32 %291
292: ; preds = %267
br label %293
293: ; preds = %292, %266
br label %294
294: ; preds = %293, %140
br label %295
295: ; preds = %294, %115
br label %87
}

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