#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*/ EMSGSIZE;
int /*<<< orphan*/ ENOENT;
int /*<<< orphan*/ errno;
scalar_t__ isdigit(int);
scalar_t__ isupper(int);
scalar_t__ isxdigit(int);
char const *strchr(char const *, int);
int tolower(int);
int inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) {
  static const char xdigits[] = "0123456789abcdef";
  static const char digits[] = "0123456789";
  int n, ch, tmp = 0, dirty, bits;
  const unsigned char *odst = dst;
  ch = *src++;
  if (ch == '0' && (src[0] == 'x' || src[0] == 'X') &&
      (isxdigit((int)((unsigned char)src[1])))) {
    if (!size)
      goto emsgsize;
    dirty = 0;
    src++;
    while ((ch = *src++) != '\0' && (isxdigit((int)((unsigned char)ch)))) {
      if ((isupper((int)((unsigned char)ch))))
        ch = tolower(ch);
      n = (int)(strchr(xdigits, ch) - xdigits);
      if (dirty == 0)
        tmp = n;
      else
        tmp = (tmp << 4) | n;
      if (++dirty == 2) {
        if (!size--)
          goto emsgsize;
        *dst++ = (unsigned char)tmp;
        dirty = 0;
      }
    }
    if (dirty) {
      if (!size--)
        goto emsgsize;
      *dst++ = (unsigned char)(tmp << 4);
    }
  } else if ((isdigit((int)((unsigned char)ch)))) {
    for (;;) {
      tmp = 0;
      do {
        n = (int)(strchr(digits, ch) - digits);
        tmp *= 10;
        tmp += n;
        if (tmp > 255)
          goto enoent;
      } while ((ch = *src++) != '\0' && (isdigit((int)((unsigned char)ch))));
      if (!size--)
        goto emsgsize;
      *dst++ = (unsigned char)tmp;
      if (ch == '\0' || ch == '/')
        break;
      if (ch != '.')
        goto enoent;
      ch = *src++;
      if (!(isdigit((int)((unsigned char)ch))))
        goto enoent;
    }
  } else
    goto enoent;
  bits = -1;
  if (ch == '/' && (isdigit((int)((unsigned char)src[0]))) && dst > odst) {
    ch = *src++;
    bits = 0;
    do {
      n = (int)(strchr(digits, ch) - digits);
      bits *= 10;
      bits += n;
    } while ((ch = *src++) != '\0' && (isdigit((int)((unsigned char)ch))));
    if (ch != '\0')
      goto enoent;
    if (bits > 32)
      goto emsgsize;
  }
  if (ch != '\0')
    goto enoent;
  if (dst == odst)
    goto enoent;
  if (bits == -1) {
    if (*odst >= 240)
      bits = 32;
    else if (*odst >= 224)
      bits = 8;
    else if (*odst >= 192)
      bits = 24;
    else if (*odst >= 128)
      bits = 16;
    else
      bits = 8;
    if (bits < ((dst - odst) * 8))
      bits = (int)(dst - odst) * 8;
    if (bits == 8 && *odst == 224)
      bits = 4;
  }
  while (bits > ((dst - odst) * 8)) {
    if (!size--)
      goto emsgsize;
    *dst++ = '\0';
  }
  return (bits);
enoent:
  (errno = (ENOENT));
  return (-1);
emsgsize:
  (errno = (EMSGSIZE));
  return (-1);
}


x86 assembly (clang, -O0):
<inet_net_pton_ipv4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x28(%rbp)
jne    1329 <inet_net_pton_ipv4+0x1d9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
je     11b2 <inet_net_pton_ipv4+0x62>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    1329 <inet_net_pton_ipv4+0x1d9>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1070 <isxdigit@plt>
cmp    $0x0,%rax
je     1329 <inet_net_pton_ipv4+0x1d9>
cmpq   $0x0,-0x20(%rbp)
jne    11d9 <inet_net_pton_ipv4+0x89>
jmp    16e0 <inet_net_pton_ipv4+0x590>
movl   $0x0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%ecx
mov    %ecx,-0x28(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x41(%rbp)
je     1224 <inet_net_pton_ipv4+0xd4>
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1070 <isxdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    1234 <inet_net_pton_ipv4+0xe4>
jmp    12e3 <inet_net_pton_ipv4+0x193>
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1060 <isupper@plt>
cmp    $0x0,%rax
je     1254 <inet_net_pton_ipv4+0x104>
mov    -0x28(%rbp),%edi
call   1050 <tolower@plt>
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%esi
lea    0xda2(%rip),%rdi
call   1040 <strchr@plt>
lea    0xd96(%rip),%rcx
sub    %rcx,%rax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1285 <inet_net_pton_ipv4+0x135>
mov    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1291 <inet_net_pton_ipv4+0x141>
mov    -0x2c(%rbp),%eax
shl    $0x4,%eax
or     -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmp    $0x2,%eax
jne    12de <inet_net_pton_ipv4+0x18e>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
cmp    $0x0,%rax
jne    12c1 <inet_net_pton_ipv4+0x171>
jmp    16e0 <inet_net_pton_ipv4+0x590>
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
movl   $0x0,-0x30(%rbp)
jmp    11ec <inet_net_pton_ipv4+0x9c>
cmpl   $0x0,-0x30(%rbp)
je     1324 <inet_net_pton_ipv4+0x1d4>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
cmp    $0x0,%rax
jne    130b <inet_net_pton_ipv4+0x1bb>
jmp    16e0 <inet_net_pton_ipv4+0x590>
mov    -0x2c(%rbp),%eax
shl    $0x4,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    146f <inet_net_pton_ipv4+0x31f>
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1465 <inet_net_pton_ipv4+0x315>
jmp    1343 <inet_net_pton_ipv4+0x1f3>
movl   $0x0,-0x2c(%rbp)
mov    -0x28(%rbp),%esi
lea    0xcbd(%rip),%rdi
call   1040 <strchr@plt>
lea    0xcb1(%rip),%rcx
sub    %rcx,%rax
mov    %eax,-0x24(%rbp)
imul   $0xa,-0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0xff,-0x2c(%rbp)
jle    1388 <inet_net_pton_ipv4+0x238>
jmp    16c2 <inet_net_pton_ipv4+0x572>
jmp    138d <inet_net_pton_ipv4+0x23d>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%ecx
mov    %ecx,-0x28(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x42(%rbp)
je     13c5 <inet_net_pton_ipv4+0x275>
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    134a <inet_net_pton_ipv4+0x1fa>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
cmp    $0x0,%rax
jne    13ee <inet_net_pton_ipv4+0x29e>
jmp    16e0 <inet_net_pton_ipv4+0x590>
mov    -0x2c(%rbp),%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
cmpl   $0x0,-0x28(%rbp)
je     1418 <inet_net_pton_ipv4+0x2c8>
cmpl   $0x2f,-0x28(%rbp)
jne    141d <inet_net_pton_ipv4+0x2cd>
jmp    1460 <inet_net_pton_ipv4+0x310>
cmpl   $0x2e,-0x28(%rbp)
je     142c <inet_net_pton_ipv4+0x2dc>
jmp    16c2 <inet_net_pton_ipv4+0x572>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
jne    145b <inet_net_pton_ipv4+0x30b>
jmp    16c2 <inet_net_pton_ipv4+0x572>
jmp    1343 <inet_net_pton_ipv4+0x1f3>
jmp    146a <inet_net_pton_ipv4+0x31a>
jmp    16c2 <inet_net_pton_ipv4+0x572>
jmp    146f <inet_net_pton_ipv4+0x31f>
movl   $0xffffffff,-0x34(%rbp)
cmpl   $0x2f,-0x28(%rbp)
jne    1552 <inet_net_pton_ipv4+0x402>
mov    -0x10(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1552 <inet_net_pton_ipv4+0x402>
mov    -0x18(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    1552 <inet_net_pton_ipv4+0x402>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x28(%rbp),%esi
lea    0xb47(%rip),%rdi
call   1040 <strchr@plt>
lea    0xb3b(%rip),%rcx
sub    %rcx,%rax
mov    %eax,-0x24(%rbp)
imul   $0xa,-0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x24(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%ecx
mov    %ecx,-0x28(%rbp)
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x43(%rbp)
je     1524 <inet_net_pton_ipv4+0x3d4>
mov    -0x28(%rbp),%eax
movzbl %al,%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x43(%rbp)
mov    -0x43(%rbp),%al
test   $0x1,%al
jne    14c0 <inet_net_pton_ipv4+0x370>
cmpl   $0x0,-0x28(%rbp)
je     153e <inet_net_pton_ipv4+0x3ee>
jmp    16c2 <inet_net_pton_ipv4+0x572>
cmpl   $0x20,-0x34(%rbp)
jle    154d <inet_net_pton_ipv4+0x3fd>
jmp    16e0 <inet_net_pton_ipv4+0x590>
jmp    1552 <inet_net_pton_ipv4+0x402>
cmpl   $0x0,-0x28(%rbp)
je     1561 <inet_net_pton_ipv4+0x411>
jmp    16c2 <inet_net_pton_ipv4+0x572>
mov    -0x18(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    1574 <inet_net_pton_ipv4+0x424>
jmp    16c2 <inet_net_pton_ipv4+0x572>
cmpl   $0xffffffff,-0x34(%rbp)
jne    1661 <inet_net_pton_ipv4+0x511>
mov    -0x40(%rbp),%rax
movzbl (%rax),%eax
cmp    $0xf0,%eax
jl     159c <inet_net_pton_ipv4+0x44c>
movl   $0x20,-0x34(%rbp)
jmp    160c <inet_net_pton_ipv4+0x4bc>
mov    -0x40(%rbp),%rax
movzbl (%rax),%eax
cmp    $0xe0,%eax
jl     15ba <inet_net_pton_ipv4+0x46a>
movl   $0x8,-0x34(%rbp)
jmp    1607 <inet_net_pton_ipv4+0x4b7>
mov    -0x40(%rbp),%rax
movzbl (%rax),%eax
cmp    $0xc0,%eax
jl     15d8 <inet_net_pton_ipv4+0x488>
movl   $0x18,-0x34(%rbp)
jmp    1602 <inet_net_pton_ipv4+0x4b2>
mov    -0x40(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x80,%eax
jl     15f6 <inet_net_pton_ipv4+0x4a6>
movl   $0x10,-0x34(%rbp)
jmp    15fd <inet_net_pton_ipv4+0x4ad>
movl   $0x8,-0x34(%rbp)
jmp    1602 <inet_net_pton_ipv4+0x4b2>
jmp    1607 <inet_net_pton_ipv4+0x4b7>
jmp    160c <inet_net_pton_ipv4+0x4bc>
movslq -0x34(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    -0x40(%rbp),%rdx
sub    %rdx,%rcx
shl    $0x3,%rcx
cmp    %rcx,%rax
jge    1639 <inet_net_pton_ipv4+0x4e9>
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
shl    $0x3,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x8,-0x34(%rbp)
jne    165c <inet_net_pton_ipv4+0x50c>
mov    -0x40(%rbp),%rax
movzbl (%rax),%eax
cmp    $0xe0,%eax
jne    165c <inet_net_pton_ipv4+0x50c>
movl   $0x4,-0x34(%rbp)
jmp    1661 <inet_net_pton_ipv4+0x511>
jmp    1666 <inet_net_pton_ipv4+0x516>
movslq -0x34(%rbp),%rax
mov    -0x18(%rbp),%rcx
mov    -0x40(%rbp),%rdx
sub    %rdx,%rcx
shl    $0x3,%rcx
cmp    %rcx,%rax
jle    16b7 <inet_net_pton_ipv4+0x567>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x20(%rbp)
cmp    $0x0,%rax
jne    16a0 <inet_net_pton_ipv4+0x550>
jmp    16e0 <inet_net_pton_ipv4+0x590>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x0,(%rax)
jmp    1666 <inet_net_pton_ipv4+0x516>
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16f9 <inet_net_pton_ipv4+0x5a9>
mov    0x28ff(%rip),%rax
mov    (%rax),%ecx
mov    0x2906(%rip),%rax
mov    %ecx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    16f9 <inet_net_pton_ipv4+0x5a9>
mov    0x2901(%rip),%rax
mov    (%rax),%ecx
mov    0x28e8(%rip),%rax
mov    %ecx,(%rax)
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<inet_net_pton_ipv4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdx,0x8(%rsp)
mov    %rsi,(%rsp)
lea    0x1(%rdi),%rbx
movzbl (%rdi),%r15d
cmp    $0x30,%r15d
jne    11c5 <inet_net_pton_ipv4+0x75>
mov    (%rbx),%al
or     $0x20,%al
cmp    $0x78,%al
jne    11c5 <inet_net_pton_ipv4+0x75>
mov    %rdi,%r14
movzbl 0x2(%rdi),%edi
call   1070 <isxdigit@plt>
test   %rax,%rax
je     11c5 <inet_net_pton_ipv4+0x75>
mov    0x2e53(%rip),%rax
cmpq   $0x0,0x8(%rsp)
je     13b0 <inet_net_pton_ipv4+0x260>
mov    0x2(%r14),%r15b
test   %r15b,%r15b
je     13a9 <inet_net_pton_ipv4+0x259>
add    $0x3,%r14
xor    %ebx,%ebx
xor    %r12d,%r12d
mov    (%rsp),%rax
mov    %rax,0x10(%rsp)
jmp    1296 <inet_net_pton_ipv4+0x146>
mov    %r15d,%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     13a9 <inet_net_pton_ipv4+0x259>
lea    0xe34(%rip),%r12
mov    (%rsp),%r13
add    $0x1,%rbx
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
mov    %rbx,%r14
movsbl %r15b,%esi
mov    $0xb,%edx
mov    %r12,%rdi
call   1040 <memchr@plt>
sub    %r12d,%eax
lea    0x0(%rbp,%rbp,4),%ecx
lea    (%rax,%rcx,2),%ebp
cmp    $0xff,%ebp
jg     13a9 <inet_net_pton_ipv4+0x259>
movzbl -0x1(%r14),%r15d
test   %r15d,%r15d
je     1235 <inet_net_pton_ipv4+0xe5>
mov    %r15d,%edi
call   1030 <isdigit@plt>
lea    0x1(%r14),%rbx
test   %rax,%rax
jne    11f0 <inet_net_pton_ipv4+0xa0>
mov    0x8(%rsp),%rbx
sub    $0x1,%rbx
jb     1572 <inet_net_pton_ipv4+0x422>
mov    %bpl,0x0(%r13)
add    $0x1,%r13
cmp    $0x2e,%r15b
jne    1323 <inet_net_pton_ipv4+0x1d3>
mov    %rbx,0x8(%rsp)
mov    (%r14),%r15b
add    $0x1,%r14
movzbl %r15b,%edi
call   1030 <isdigit@plt>
mov    %r14,%rbx
test   %rax,%rax
jne    11e1 <inet_net_pton_ipv4+0x91>
jmp    13a9 <inet_net_pton_ipv4+0x259>
nopl   0x0(%rax)
mov    $0x1,%ebx
movzbl (%r14),%r15d
add    $0x1,%r14
test   %r15b,%r15b
je     13d3 <inet_net_pton_ipv4+0x283>
movzbl %r15b,%r13d
mov    %r13d,%edi
call   1070 <isxdigit@plt>
test   %rax,%rax
je     13d6 <inet_net_pton_ipv4+0x286>
movsbl %r13b,%ebp
mov    %r13d,%edi
call   1060 <isupper@plt>
mov    %ebx,%r15d
test   %rax,%rax
je     12c8 <inet_net_pton_ipv4+0x178>
mov    %ebp,%edi
call   1050 <tolower@plt>
mov    %eax,%ebp
mov    $0x11,%edx
lea    0xd2c(%rip),%rbx
mov    %rbx,%rdi
mov    %ebp,%esi
call   1040 <memchr@plt>
sub    %ebx,%eax
shl    $0x4,%r12d
test   %r15d,%r15d
cmove  %r15d,%r12d
or     %eax,%r12d
cmp    $0x1,%r15d
jne    1280 <inet_net_pton_ipv4+0x130>
mov    0x8(%rsp),%rax
test   %rax,%rax
je     1572 <inet_net_pton_ipv4+0x422>
add    $0xffffffffffffffff,%rax
mov    %rax,0x8(%rsp)
mov    0x10(%rsp),%rax
mov    %r12b,(%rax)
add    $0x1,%rax
mov    %rax,0x10(%rsp)
xor    %ebx,%ebx
jmp    1285 <inet_net_pton_ipv4+0x135>
test   %r15b,%r15b
mov    0x2c9b(%rip),%rax
je     1335 <inet_net_pton_ipv4+0x1e5>
cmp    $0x2f,%r15b
jne    13b0 <inet_net_pton_ipv4+0x260>
cmp    $0x2f,%r15b
jne    140e <inet_net_pton_ipv4+0x2be>
movzbl (%r14),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     13a9 <inet_net_pton_ipv4+0x259>
cmp    (%rsp),%r13
jbe    13a9 <inet_net_pton_ipv4+0x259>
mov    %r13,%r15
mov    (%r14),%bpl
add    $0x1,%r14
xor    %r13d,%r13d
lea    0xcaa(%rip),%r12
nopw   0x0(%rax,%rax,1)
movsbl %bpl,%esi
mov    $0xb,%edx
mov    %r12,%rdi
call   1040 <memchr@plt>
sub    %r12d,%eax
lea    0x0(%r13,%r13,4),%ecx
lea    (%rax,%rcx,2),%r13d
movzbl (%r14),%ebp
test   %ebp,%ebp
je     1565 <inet_net_pton_ipv4+0x415>
mov    %ebp,%edi
call   1030 <isdigit@plt>
add    $0x1,%r14
test   %rax,%rax
jne    1370 <inet_net_pton_ipv4+0x220>
mov    0x2c18(%rip),%rax
mov    (%rax),%eax
mov    0x2c1f(%rip),%rcx
mov    %eax,(%rcx)
mov    $0xffffffff,%r13d
mov    %r13d,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %r15d,%r15d
mov    0x2c0b(%rip),%rax
test   %ebx,%ebx
je     154c <inet_net_pton_ipv4+0x3fc>
mov    0x8(%rsp),%rbx
test   %rbx,%rbx
je     13b0 <inet_net_pton_ipv4+0x260>
add    $0xffffffffffffffff,%rbx
shl    $0x4,%r12b
mov    0x10(%rsp),%r13
mov    %r12b,0x0(%r13)
add    $0x1,%r13
cmp    $0x2f,%r15b
je     133f <inet_net_pton_ipv4+0x1ef>
mov    0x2bb3(%rip),%rax
test   %r15b,%r15b
jne    13b0 <inet_net_pton_ipv4+0x260>
mov    %r13,%r15
cmp    (%rsp),%r13
je     13b0 <inet_net_pton_ipv4+0x260>
mov    (%rsp),%rax
mov    (%rax),%al
mov    $0x20,%edx
cmp    $0xef,%al
ja     1453 <inet_net_pton_ipv4+0x303>
mov    $0x8,%edx
cmp    $0xdf,%al
ja     1453 <inet_net_pton_ipv4+0x303>
mov    $0x18,%edx
cmp    $0xbf,%al
ja     1453 <inet_net_pton_ipv4+0x303>
mov    %eax,%ecx
shr    $0x7,%cl
movzbl %cl,%ecx
lea    0x8(,%rcx,8),%edx
mov    %edx,%esi
mov    %r15,%rbp
mov    %r15,%r13
sub    (%rsp),%r13
lea    0x0(,%r13,8),%rcx
shl    $0x3,%r13d
cmp    %rsi,%rcx
cmovle %edx,%r13d
cmp    $0x8,%r13d
jne    1487 <inet_net_pton_ipv4+0x337>
xor    %edx,%edx
cmp    $0xe0,%al
setne  %dl
lea    0x4(,%rdx,4),%r13d
movslq %r13d,%rax
cmp    %rax,%rcx
jge    13c1 <inet_net_pton_ipv4+0x271>
mov    %rbp,%rcx
mov    (%rsp),%rdi
sub    %rdi,%rcx
lea    0x8(,%rcx,8),%rcx
cmp    %rax,%rcx
cmovle %rax,%rcx
lea    (%rcx,%rdi,8),%rdx
shl    $0x3,%rdi
lea    0x0(,%rbp,8),%rcx
not    %rcx
add    %rdx,%rcx
shr    $0x3,%rcx
cmp    %rcx,%rbx
cmovb  %rbx,%rcx
cmp    $0x10,%rcx
jb     1511 <inet_net_pton_ipv4+0x3c1>
add    $0x1,%rcx
mov    %ecx,%edx
and    $0xf,%edx
test   %rdx,%rdx
mov    $0x10,%esi
cmovne %rdx,%rsi
sub    %rsi,%rcx
sub    %rcx,%rbx
lea    (%rcx,%rbp,1),%rdx
xor    %esi,%esi
xorps  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movups %xmm0,0x0(%rbp,%rsi,1)
add    $0x10,%rsi
cmp    %rsi,%rcx
jne    1500 <inet_net_pton_ipv4+0x3b0>
mov    %rdx,%rbp
lea    0x0(,%rbp,8),%rcx
sub    %rdi,%rcx
xor    %edx,%edx
mov    0x2ac3(%rip),%rsi
cs nopw 0x0(%rax,%rax,1)
nop
cmp    %rdx,%rbx
je     157e <inet_net_pton_ipv4+0x42e>
movb   $0x0,0x0(%rbp,%rdx,1)
add    $0x1,%rdx
add    $0x8,%rcx
cmp    %rax,%rcx
jl     1530 <inet_net_pton_ipv4+0x3e0>
jmp    13c1 <inet_net_pton_ipv4+0x271>
mov    0x8(%rsp),%rbx
mov    0x10(%rsp),%r13
cmp    $0x2f,%r15b
je     133f <inet_net_pton_ipv4+0x1ef>
jmp    140e <inet_net_pton_ipv4+0x2be>
cmp    $0x20,%r13d
mov    0x2a58(%rip),%rax
jle    1586 <inet_net_pton_ipv4+0x436>
mov    0x2a6f(%rip),%rax
jmp    13b0 <inet_net_pton_ipv4+0x260>
mov    %rsi,%rax
jmp    13b0 <inet_net_pton_ipv4+0x260>
mov    %r15,%rcx
sub    (%rsp),%rcx
je     13b0 <inet_net_pton_ipv4+0x260>
cmp    $0xffffffff,%r13d
je     1423 <inet_net_pton_ipv4+0x2d3>
shl    $0x3,%rcx
mov    %r15,%rbp
jmp    1487 <inet_net_pton_ipv4+0x337>

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

LLVM IR (-O2):
@inet_net_pton_ipv4.xdigits = internal constant [17 x i8] c"0123456789abcdef\00"
@inet_net_pton_ipv4.digits = internal constant [11 x i8] c"0123456789\00"
@ENOENT = global i32 0
@errno = global i32 0
@EMSGSIZE = global i32 0
define i32 @inet_net_pton_ipv4(i8* nocapture %0, i8* %1, i64 %2) {
%4 = getelementptr inbounds i8, i8* %0, i64 1
%5 = load i8, i8* %0
%6 = icmp eq i8 %5, 48
br i1 %6, label %7, label %77
7: ; preds = %3
%8 = load i8, i8* %4
switch i8 %8, label %77 [
i8 120, label %9
i8 88, label %9
]
9: ; preds = %7, %7
%10 = getelementptr inbounds i8, i8* %0, i64 2
%11 = load i8, i8* %10
%12 = zext i8 %11 to i32
%13 = tail call i64 @isxdigit(i32 %12)
%14 = icmp eq i64 %13, 0
br i1 %14, label %77, label %15
15: ; preds = %9
%16 = icmp eq i64 %2, 0
br i1 %16, label %239, label %17
17: ; preds = %15
%18 = load i8, i8* %10
%19 = icmp eq i8 %18, 0
br i1 %19, label %239, label %20
20: ; preds = %17
%21 = getelementptr inbounds i8, i8* %0, i64 3
br label %22
22: ; preds = %20, %55
%23 = phi i8 [ %60, %55 ], [ %18, %20 ]
%24 = phi i8* [ %59, %55 ], [ %21, %20 ]
%25 = phi i32 [ %58, %55 ], [ 0, %20 ]
%26 = phi i32 [ %47, %55 ], [ 0, %20 ]
%27 = phi i64 [ %57, %55 ], [ %2, %20 ]
%28 = phi i8* [ %56, %55 ], [ %1, %20 ]
%29 = sext i8 %23 to i32
%30 = zext i8 %23 to i32
%31 = tail call i64 @isxdigit(i32 %30)
%32 = icmp eq i64 %31, 0
br i1 %32, label %62, label %33
33: ; preds = %22
%34 = tail call i64 @isupper(i32 %30)
%35 = icmp eq i64 %34, 0
br i1 %35, label %38, label %36
36: ; preds = %33
%37 = tail call i32 @tolower(i32 %29)
br label %38
38: ; preds = %36, %33
%39 = phi i32 [ %37, %36 ], [ %29, %33 ]
%40 = tail call i8* @memchr(i8* dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8]* @inet_net_pton_ipv4.xdigits, i64 0, i64 0), i32 %39, i64 17)
%41 = ptrtoint i8* %40 to i64
%42 = trunc i64 %41 to i32
%43 = sub i32 %42, ptrtoint ([17 x i8]* @inet_net_pton_ipv4.xdigits to i32)
%44 = icmp eq i32 %25, 0
%45 = shl i32 %26, 4
%46 = select i1 %44, i32 0, i32 %45
%47 = or i32 %43, %46
%48 = icmp eq i32 %25, 1
br i1 %48, label %49, label %55
49: ; preds = %38
%50 = icmp eq i64 %27, 0
br i1 %50, label %239, label %51
51: ; preds = %49
%52 = add i64 %27, -1
%53 = trunc i32 %47 to i8
%54 = getelementptr inbounds i8, i8* %28, i64 1
store i8 %53, i8* %28
br label %55
55: ; preds = %51, %38
%56 = phi i8* [ %54, %51 ], [ %28, %38 ]
%57 = phi i64 [ %52, %51 ], [ %27, %38 ]
%58 = phi i32 [ 0, %51 ], [ 1, %38 ]
%59 = getelementptr inbounds i8, i8* %24, i64 1
%60 = load i8, i8* %24
%61 = icmp eq i8 %60, 0
br i1 %61, label %62, label %22
62: ; preds = %22, %55
%63 = phi i8 [ %23, %22 ], [ 0, %55 ]
%64 = phi i8* [ %28, %22 ], [ %56, %55 ]
%65 = phi i64 [ %27, %22 ], [ %57, %55 ]
%66 = phi i32 [ %26, %22 ], [ %47, %55 ]
%67 = phi i32 [ %25, %22 ], [ %58, %55 ]
%68 = phi i8* [ %24, %22 ], [ %59, %55 ]
%69 = icmp eq i32 %67, 0
br i1 %69, label %118, label %70
70: ; preds = %62
%71 = icmp eq i64 %65, 0
br i1 %71, label %239, label %72
72: ; preds = %70
%73 = add i64 %65, -1
%74 = trunc i32 %66 to i8
%75 = shl i8 %74, 4
%76 = getelementptr inbounds i8, i8* %64, i64 1
store i8 %75, i8* %64
br label %118
77: ; preds = %7, %9, %3
%78 = zext i8 %5 to i32
%79 = tail call i64 @isdigit(i32 %78)
%80 = icmp eq i64 %79, 0
br i1 %80, label %239, label %81
81: ; preds = %77, %112
%82 = phi i8* [ %113, %112 ], [ %4, %77 ]
%83 = phi i8* [ %111, %112 ], [ %1, %77 ]
%84 = phi i64 [ %107, %112 ], [ %2, %77 ]
%85 = phi i8 [ %114, %112 ], [ %5, %77 ]
br label %86
86: ; preds = %102, %81
%87 = phi i8* [ %82, %81 ], [ %99, %102 ]
%88 = phi i8 [ %85, %81 ], [ %100, %102 ]
%89 = phi i32 [ 0, %81 ], [ %96, %102 ]
%90 = sext i8 %88 to i32
%91 = tail call i8* @memchr(i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @inet_net_pton_ipv4.digits, i64 0, i64 0), i32 %90, i64 11)
%92 = ptrtoint i8* %91 to i64
%93 = trunc i64 %92 to i32
%94 = sub i32 %93, ptrtoint ([11 x i8]* @inet_net_pton_ipv4.digits to i32)
%95 = mul nsw i32 %89, 10
%96 = add nsw i32 %94, %95
%97 = icmp sgt i32 %96, 255
br i1 %97, label %239, label %98
98: ; preds = %86
%99 = getelementptr inbounds i8, i8* %87, i64 1
%100 = load i8, i8* %87
%101 = icmp eq i8 %100, 0
br i1 %101, label %106, label %102
102: ; preds = %98
%103 = zext i8 %100 to i32
%104 = tail call i64 @isdigit(i32 %103)
%105 = icmp eq i64 %104, 0
br i1 %105, label %106, label %86
106: ; preds = %98, %102
%107 = add i64 %84, -1
%108 = icmp eq i64 %84, 0
br i1 %108, label %239, label %109
109: ; preds = %106
%110 = trunc i32 %96 to i8
%111 = getelementptr inbounds i8, i8* %83, i64 1
store i8 %110, i8* %83
switch i8 %100, label %239 [
i8 47, label %118
i8 0, label %118
i8 46, label %112
]
112: ; preds = %109
%113 = getelementptr inbounds i8, i8* %87, i64 2
%114 = load i8, i8* %99
%115 = zext i8 %114 to i32
%116 = tail call i64 @isdigit(i32 %115)
%117 = icmp eq i64 %116, 0
br i1 %117, label %239, label %81
118: ; preds = %109, %109, %62, %72
%119 = phi i8* [ %68, %72 ], [ %68, %62 ], [ %99, %109 ], [ %99, %109 ]
%120 = phi i8* [ %76, %72 ], [ %64, %62 ], [ %111, %109 ], [ %111, %109 ]
%121 = phi i64 [ %73, %72 ], [ %65, %62 ], [ %107, %109 ], [ %107, %109 ]
%122 = phi i8 [ %63, %72 ], [ %63, %62 ], [ %100, %109 ], [ %100, %109 ]
%123 = ptrtoint i8* %120 to i64
%124 = icmp eq i8 %122, 47
br i1 %124, label %125, label %156
125: ; preds = %118
%126 = load i8, i8* %119
%127 = zext i8 %126 to i32
%128 = tail call i64 @isdigit(i32 %127)
%129 = icmp ne i64 %128, 0
%130 = icmp ugt i8* %120, %1
%131 = select i1 %129, i1 %130, i1 false
br i1 %131, label %132, label %239
132: ; preds = %125
%133 = load i8, i8* %119
br label %134
134: ; preds = %148, %132
%135 = phi i8* [ %119, %132 ], [ %139, %148 ]
%136 = phi i8 [ %133, %132 ], [ %146, %148 ]
%137 = phi i32 [ 0, %132 ], [ %145, %148 ]
%138 = sext i8 %136 to i32
%139 = getelementptr inbounds i8, i8* %135, i64 1
%140 = tail call i8* @memchr(i8* dereferenceable(11) getelementptr inbounds ([11 x i8], [11 x i8]* @inet_net_pton_ipv4.digits, i64 0, i64 0), i32 %138, i64 11)
%141 = ptrtoint i8* %140 to i64
%142 = trunc i64 %141 to i32
%143 = sub i32 %142, ptrtoint ([11 x i8]* @inet_net_pton_ipv4.digits to i32)
%144 = mul nsw i32 %137, 10
%145 = add nsw i32 %143, %144
%146 = load i8, i8* %139
%147 = icmp eq i8 %146, 0
br i1 %147, label %152, label %148
148: ; preds = %134
%149 = zext i8 %146 to i32
%150 = tail call i64 @isdigit(i32 %149)
%151 = icmp eq i64 %150, 0
br i1 %151, label %239, label %134
152: ; preds = %134
%153 = icmp sgt i32 %145, 32
br i1 %153, label %239, label %154
154: ; preds = %152
%155 = icmp eq i8* %120, %1
br i1 %155, label %239, label %160
156: ; preds = %118
%157 = icmp ne i8 %122, 0
%158 = icmp eq i8* %120, %1
%159 = select i1 %157, i1 true, i1 %158
br i1 %159, label %239, label %167
160: ; preds = %154
%161 = icmp eq i32 %145, -1
br i1 %161, label %167, label %162
162: ; preds = %160
%163 = ptrtoint i8* %1 to i64
%164 = ptrtoint i8* %120 to i64
%165 = sub i64 %164, %163
%166 = shl nsw i64 %165, 3
br label %192
167: ; preds = %156, %160
%168 = load i8, i8* %1
%169 = icmp ugt i8 %168, -17
br i1 %169, label %177, label %170
170: ; preds = %167
%171 = icmp ugt i8 %168, -33
br i1 %171, label %177, label %172
172: ; preds = %170
%173 = icmp ugt i8 %168, -65
br i1 %173, label %177, label %174
174: ; preds = %172
%175 = icmp slt i8 %168, 0
%176 = select i1 %175, i32 16, i32 8
br label %177
177: ; preds = %174, %172, %170, %167
%178 = phi i32 [ 32, %167 ], [ 8, %170 ], [ 24, %172 ], [ %176, %174 ]
%179 = zext i32 %178 to i64
%180 = ptrtoint i8* %120 to i64
%181 = ptrtoint i8* %1 to i64
%182 = sub i64 %180, %181
%183 = shl nsw i64 %182, 3
%184 = icmp sgt i64 %183, %179
%185 = trunc i64 %182 to i32
%186 = shl nsw i32 %185, 3
%187 = select i1 %184, i32 %186, i32 %178
%188 = icmp eq i32 %187, 8
br i1 %188, label %189, label %192
189: ; preds = %177
%190 = icmp eq i8 %168, -32
%191 = select i1 %190, i32 4, i32 8
br label %192
192: ; preds = %162, %189, %177
%193 = phi i64 [ %166, %162 ], [ %183, %189 ], [ %183, %177 ]
%194 = phi i64 [ %163, %162 ], [ %181, %189 ], [ %181, %177 ]
%195 = phi i32 [ %145, %162 ], [ %191, %189 ], [ %187, %177 ]
%196 = sext i32 %195 to i64
%197 = icmp slt i64 %193, %196
br i1 %197, label %198, label %242
198: ; preds = %192
%199 = add i64 %123, 1
%200 = sub i64 %199, %194
%201 = shl i64 %200, 3
%202 = call i64 @llvm.smax.i64(i64 %201, i64 %196)
%203 = shl i64 %194, 3
%204 = add i64 %202, %203
%205 = add i64 %204, -1
%206 = mul i64 %123, -8
%207 = add i64 %206, %205
%208 = lshr i64 %207, 3
%209 = call i64 @llvm.umin.i64(i64 %121, i64 %208)
%210 = add nuw nsw i64 %209, 1
%211 = icmp ult i64 %209, 16
br i1 %211, label %225, label %212
212: ; preds = %198
%213 = and i64 %210, 15
%214 = icmp eq i64 %213, 0
%215 = select i1 %214, i64 16, i64 %213
%216 = sub nsw i64 %210, %215
%217 = sub i64 %121, %216
%218 = getelementptr i8, i8* %120, i64 %216
br label %219
219: ; preds = %219, %212
%220 = phi i64 [ 0, %212 ], [ %223, %219 ]
%221 = getelementptr i8, i8* %120, i64 %220
%222 = bitcast i8* %221 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %222
%223 = add nuw i64 %220, 16
%224 = icmp eq i64 %223, %216
br i1 %224, label %225, label %219
225: ; preds = %219, %198
%226 = phi i64 [ %121, %198 ], [ %217, %219 ]
%227 = phi i8* [ %120, %198 ], [ %218, %219 ]
br label %228
228: ; preds = %225, %232
%229 = phi i64 [ %233, %232 ], [ %226, %225 ]
%230 = phi i8* [ %234, %232 ], [ %227, %225 ]
%231 = icmp eq i64 %229, 0
br i1 %231, label %239, label %232
232: ; preds = %228
%233 = add i64 %229, -1
%234 = getelementptr inbounds i8, i8* %230, i64 1
store i8 0, i8* %230
%235 = ptrtoint i8* %234 to i64
%236 = sub i64 %235, %194
%237 = shl nsw i64 %236, 3
%238 = icmp slt i64 %237, %196
br i1 %238, label %228, label %242
239: ; preds = %49, %106, %112, %109, %86, %148, %228, %15, %70, %152, %77, %154, %156, %125, %17
%240 = phi i32* [ @ENOENT, %17 ], [ @ENOENT, %125 ], [ @ENOENT, %156 ], [ @ENOENT, %154 ], [ @ENOENT, %77 ], [ @EMSGSIZE, %152 ], [ @EMSGSIZE, %70 ], [ @EMSGSIZE, %15 ], [ @EMSGSIZE, %228 ], [ @ENOENT, %148 ], [ @ENOENT, %86 ], [ @ENOENT, %109 ], [ @ENOENT, %112 ], [ @EMSGSIZE, %106 ], [ @EMSGSIZE, %49 ]
%241 = load i32, i32* %240
store i32 %241, i32* @errno
br label %242
242: ; preds = %232, %239, %192
%243 = phi i32 [ %195, %192 ], [ -1, %239 ], [ %195, %232 ]
ret i32 %243
}