#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 */
typedef int u_int;
typedef int u_char;

/* Variables and functions */
int NS_IN6ADDRSZ;
int NS_INADDRSZ;
int NS_INT16SZ;
scalar_t__ inet_pton4(char const *, int *);
int /*<<< orphan*/ memcpy(int *, int *, int);
int /*<<< orphan*/ memset(int *, char, int);
char *strchr(char const *, int);
int inet_pton6(const char *src, u_char *dst) {
  static const char xdigits_l[] = "0123456789abcdef",
                    xdigits_u[] = "0123456789ABCDEF";
  u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
  const char *xdigits, *curtok;
  int ch, seen_xdigits;
  u_int val;
  memset((tp = tmp), '\0', NS_IN6ADDRSZ);
  endp = tp + NS_IN6ADDRSZ;
  colonp = NULL;
  if (*src == ':')
    if (*++src != ':')
      return (0);
  curtok = src;
  seen_xdigits = 0;
  val = 0;
  while ((ch = *src++) != '\0') {
    const char *pch;
    if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
      pch = strchr((xdigits = xdigits_u), ch);
    if (pch != NULL) {
      val <<= 4;
      val |= (pch - xdigits);
      if (++seen_xdigits > 4)
        return (0);
      continue;
    }
    if (ch == ':') {
      curtok = src;
      if (!seen_xdigits) {
        if (colonp)
          return (0);
        colonp = tp;
        continue;
      } else if (*src == '\0') {
        return (0);
      }
      if (tp + NS_INT16SZ > endp)
        return (0);
      *tp++ = (u_char)(val >> 8) & 0xff;
      *tp++ = (u_char)val & 0xff;
      seen_xdigits = 0;
      val = 0;
      continue;
    }
    if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
        inet_pton4(curtok, tp) > 0) {
      tp += NS_INADDRSZ;
      seen_xdigits = 0;
      break;
    }
    return (0);
  }
  if (seen_xdigits) {
    if (tp + NS_INT16SZ > endp)
      return (0);
    *tp++ = (u_char)(val >> 8) & 0xff;
    *tp++ = (u_char)val & 0xff;
  }
  if (colonp != NULL) {
    const int n = tp - colonp;
    int i;
    if (tp == endp)
      return (0);
    for (i = 1; i <= n; i++) {
      endp[-i] = colonp[n - i];
      colonp[n - i] = 0;
    }
    tp = endp;
  }
  if (tp != endp)
    return (0);
  memcpy(dst, tmp, NS_IN6ADDRSZ);
  return (1);
}


x86 assembly (clang, -O0):
<inet_pton6>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    0x2e8e(%rip),%rax
mov    (%rax),%eax
mov    %rsp,%rcx
mov    %rcx,-0x20(%rbp)
lea    0xf(,%rax,4),%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rdi
sub    %rcx,%rdi
mov    %rdi,-0x78(%rbp)
mov    %rdi,%rsp
mov    %rax,-0x28(%rbp)
mov    %rdi,-0x30(%rbp)
mov    0x2e5d(%rip),%rax
mov    (%rax),%edx
xor    %esi,%esi
call   1040 <memset@plt>
mov    -0x30(%rbp),%rax
mov    0x2e49(%rip),%rcx
movslq (%rcx),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
jne    11f9 <inet_pton6+0xb9>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl 0x1(%rax),%eax
cmp    $0x3a,%eax
je     11f4 <inet_pton6+0xb4>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
jmp    11f9 <inet_pton6+0xb9>
mov    -0x10(%rbp),%rax
mov    %rax,-0x50(%rbp)
movl   $0x0,-0x58(%rbp)
movl   $0x0,-0x5c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
cmp    $0x0,%eax
je     142b <inet_pton6+0x2eb>
lea    0xdcc(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x54(%rbp),%esi
lea    0xdbe(%rip),%rdi
call   1030 <strchr@plt>
mov    %rax,-0x68(%rbp)
cmp    $0x0,%rax
jne    1273 <inet_pton6+0x133>
lea    0xdc4(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x54(%rbp),%esi
lea    0xdb6(%rip),%rdi
call   1030 <strchr@plt>
mov    %rax,-0x68(%rbp)
cmpq   $0x0,-0x68(%rbp)
je     12c6 <inet_pton6+0x186>
mov    -0x5c(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x68(%rbp),%rcx
mov    -0x48(%rbp),%rax
sub    %rax,%rcx
movslq -0x5c(%rbp),%rax
or     %rcx,%rax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
cmp    $0x4,%eax
jle    12c1 <inet_pton6+0x181>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
jmp    120f <inet_pton6+0xcf>
cmpl   $0x3a,-0x54(%rbp)
jne    13b1 <inet_pton6+0x271>
mov    -0x10(%rbp),%rax
mov    %rax,-0x50(%rbp)
cmpl   $0x0,-0x58(%rbp)
jne    130d <inet_pton6+0x1cd>
cmpq   $0x0,-0x40(%rbp)
je     1300 <inet_pton6+0x1c0>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
jmp    120f <inet_pton6+0xcf>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1330 <inet_pton6+0x1f0>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
jmp    1335 <inet_pton6+0x1f5>
mov    -0x30(%rbp),%rax
mov    0x2c98(%rip),%rcx
movslq (%rcx),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
cmp    -0x38(%rbp),%rax
jbe    1367 <inet_pton6+0x227>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
mov    -0x5c(%rbp),%ecx
sar    $0x8,%ecx
and    $0xff,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
mov    -0x5c(%rbp),%ecx
and    $0xff,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
movl   $0x0,-0x58(%rbp)
movl   $0x0,-0x5c(%rbp)
jmp    120f <inet_pton6+0xcf>
cmpl   $0x2e,-0x54(%rbp)
jne    1418 <inet_pton6+0x2d8>
mov    -0x30(%rbp),%rax
mov    0x2c02(%rip),%rcx
movslq (%rcx),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
cmp    -0x38(%rbp),%rax
ja     1418 <inet_pton6+0x2d8>
mov    -0x50(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1060 <inet_pton4@plt>
cmp    $0x0,%rax
jle    1418 <inet_pton6+0x2d8>
mov    0x2bd0(%rip),%rax
mov    (%rax),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x58(%rbp)
jmp    142b <inet_pton6+0x2eb>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
cmpl   $0x0,-0x58(%rbp)
je     149e <inet_pton6+0x35e>
mov    -0x30(%rbp),%rax
mov    0x2b98(%rip),%rcx
movslq (%rcx),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
cmp    -0x38(%rbp),%rax
jbe    1467 <inet_pton6+0x327>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
mov    -0x5c(%rbp),%ecx
sar    $0x8,%ecx
and    $0xff,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
mov    -0x5c(%rbp),%ecx
and    $0xff,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
cmpq   $0x0,-0x40(%rbp)
je     1538 <inet_pton6+0x3f8>
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%rcx
sub    %rcx,%rax
sar    $0x2,%rax
mov    %eax,-0x6c(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jne    14dc <inet_pton6+0x39c>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
movl   $0x1,-0x70(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jg     1530 <inet_pton6+0x3f0>
mov    -0x40(%rbp),%rax
mov    -0x6c(%rbp),%ecx
sub    -0x70(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x38(%rbp),%rax
xor    %ecx,%ecx
sub    -0x70(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x40(%rbp),%rax
mov    -0x6c(%rbp),%ecx
sub    -0x70(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    14e3 <inet_pton6+0x3a3>
mov    -0x38(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
je     1559 <inet_pton6+0x419>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
jmp    157d <inet_pton6+0x43d>
mov    -0x78(%rbp),%rsi
mov    -0x18(%rbp),%rdi
mov    0x2a80(%rip),%rax
mov    (%rax),%edx
call   1050 <memcpy@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x60(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<inet_pton6>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rsi,-0x68(%rbp)
mov    %rdi,%r13
mov    0x2e89(%rip),%r14
mov    (%r14),%edx
mov    %rsp,%rbx
lea    0xf(,%rdx,4),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rbx
mov    %rbx,%rsp
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
movslq (%r14),%rcx
lea    (%rbx,%rcx,4),%rax
mov    0x0(%r13),%r12b
mov    %rbx,-0x48(%rbp)
mov    %rbx,%rdx
test   %r12b,%r12b
je     1319 <inet_pton6+0x1d9>
cmp    $0x3a,%r12b
mov    %rax,-0x38(%rbp)
mov    %rcx,-0x60(%rbp)
jne    11c1 <inet_pton6+0x81>
xor    %ebx,%ebx
cmpb   $0x3a,0x1(%r13)
jne    140d <inet_pton6+0x2cd>
mov    %r13,%rax
add    $0x1,%r13
mov    $0x3a,%r12b
mov    %r13,-0x58(%rbp)
add    $0x1,%r13
xor    %eax,%eax
mov    %rax,-0x50(%rbp)
xor    %r14d,%r14d
xor    %eax,%eax
mov    %rax,-0x30(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x40(%rbp)
movsbl %r12b,%ebx
mov    $0x11,%edx
lea    0xe10(%rip),%r15
mov    %r15,%rdi
mov    %ebx,%esi
call   1040 <memchr@plt>
mov    %r15,%rcx
test   %rax,%rax
jne    1220 <inet_pton6+0xe0>
mov    $0x11,%edx
lea    0xe12(%rip),%r15
mov    %r15,%rdi
mov    %ebx,%esi
call   1040 <memchr@plt>
mov    %r15,%rcx
test   %rax,%rax
je     1252 <inet_pton6+0x112>
cmp    $0x3,%r14d
jg     140b <inet_pton6+0x2cb>
mov    -0x50(%rbp),%r15
shl    $0x4,%r15d
sub    %ecx,%eax
or     %r15d,%eax
add    $0x1,%r14d
mov    %rax,-0x50(%rbp)
movzbl 0x0(%r13),%r12d
add    $0x1,%r13
test   %r12b,%r12b
jne    11e0 <inet_pton6+0xa0>
jmp    12d4 <inet_pton6+0x194>
xor    %ebx,%ebx
cmp    $0x3a,%r12b
jne    141e <inet_pton6+0x2de>
test   %r14d,%r14d
je     12b0 <inet_pton6+0x170>
cmpb   $0x0,0x0(%r13)
mov    -0x40(%rbp),%rcx
je     140d <inet_pton6+0x2cd>
mov    0x2d5f(%rip),%rax
movslq (%rax),%rax
lea    (%rcx,%rax,4),%rax
cmp    -0x38(%rbp),%rax
ja     140d <inet_pton6+0x2cd>
mov    -0x50(%rbp),%rdx
movzbl %dh,%eax
mov    -0x40(%rbp),%rcx
mov    %eax,(%rcx)
movzbl %dl,%eax
mov    %eax,0x4(%rcx)
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
xor    %r14d,%r14d
mov    %r13,-0x58(%rbp)
xor    %eax,%eax
jmp    123b <inet_pton6+0xfb>
xor    %r14d,%r14d
mov    %r13,-0x58(%rbp)
mov    $0x0,%ebx
cmpq   $0x0,-0x30(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x30(%rbp)
je     123f <inet_pton6+0xff>
jmp    140d <inet_pton6+0x2cd>
test   %r14d,%r14d
je     1347 <inet_pton6+0x207>
mov    0x2cf8(%rip),%rax
movslq (%rax),%rax
mov    -0x40(%rbp),%rcx
lea    (%rcx,%rax,4),%rax
xor    %ebx,%ebx
cmp    -0x38(%rbp),%rax
ja     140d <inet_pton6+0x2cd>
mov    -0x50(%rbp),%rcx
movzbl %ch,%eax
mov    -0x40(%rbp),%rdx
mov    %eax,(%rdx)
movzbl %cl,%eax
mov    %eax,0x4(%rdx)
add    $0x8,%rdx
mov    -0x38(%rbp),%rax
cmpq   $0x0,-0x30(%rbp)
jne    1356 <inet_pton6+0x216>
mov    $0x0,%ebx
cmp    %rax,%rdx
jne    140d <inet_pton6+0x2cd>
mov    0x2cba(%rip),%rax
mov    (%rax),%edx
mov    -0x68(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1050 <memcpy@plt>
mov    $0x1,%ebx
jmp    140d <inet_pton6+0x2cd>
mov    -0x38(%rbp),%rax
mov    -0x40(%rbp),%rdx
cmpq   $0x0,-0x30(%rbp)
je     1319 <inet_pton6+0x1d9>
cmp    %rax,%rdx
je     140b <inet_pton6+0x2cb>
sub    -0x30(%rbp),%rdx
mov    %rdx,%rcx
shr    $0x2,%rcx
test   %ecx,%ecx
jle    1327 <inet_pton6+0x1e7>
mov    %rdx,%r11
movslq %ecx,%r9
add    $0x1,%ecx
lea    -0x1(%rcx),%r10
mov    $0x1,%esi
cmp    $0x8,%r10
jae    145a <inet_pton6+0x31a>
lea    0x1(%rsi),%rax
test   $0x4,%r11b
je     13ba <inet_pton6+0x27a>
mov    %r9,%rdx
sub    %rsi,%rdx
mov    -0x30(%rbp),%rdi
mov    (%rdi,%rdx,4),%r8d
shl    $0x2,%rsi
mov    -0x38(%rbp),%rbx
sub    %rsi,%rbx
mov    %r8d,(%rbx)
movl   $0x0,(%rdi,%rdx,4)
mov    %rax,%rsi
cmp    %rax,%rcx
je     1327 <inet_pton6+0x1e7>
mov    -0x30(%rbp),%rax
lea    (%rax,%r9,4),%rax
neg    %rsi
neg    %rcx
mov    -0x38(%rbp),%rdi
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%rax,%rsi,4),%edx
mov    %edx,(%rdi,%rsi,4)
movl   $0x0,(%rax,%rsi,4)
mov    -0x4(%rax,%rsi,4),%edx
mov    %edx,-0x4(%rdi,%rsi,4)
movl   $0x0,-0x4(%rax,%rsi,4)
add    $0xfffffffffffffffe,%rsi
cmp    %rsi,%rcx
jne    13e0 <inet_pton6+0x2a0>
jmp    1327 <inet_pton6+0x1e7>
xor    %ebx,%ebx
mov    %ebx,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x2e,%r12b
jne    140d <inet_pton6+0x2cd>
mov    0x2b9d(%rip),%r14
movslq (%r14),%rax
mov    -0x40(%rbp),%rsi
lea    (%rsi,%rax,4),%rax
cmp    -0x38(%rbp),%rax
ja     140d <inet_pton6+0x2cd>
mov    -0x58(%rbp),%rdi
call   1060 <inet_pton4@plt>
test   %rax,%rax
jle    140d <inet_pton6+0x2cd>
movslq (%r14),%rax
mov    -0x40(%rbp),%rdx
lea    (%rdx,%rax,4),%rdx
jmp    130e <inet_pton6+0x1ce>
lea    -0x2(%rcx),%rax
mov    $0x4,%edx
mul    %rdx
mov    -0x48(%rbp),%rdx
mov    -0x60(%rbp),%r14
lea    -0x4(%rdx,%r14,4),%rbx
seto   %dl
mov    %rbx,%rdi
sub    %rax,%rdi
cmp    %rbx,%rdi
ja     138a <inet_pton6+0x24a>
test   %dl,%dl
jne    138a <inet_pton6+0x24a>
mov    -0x30(%rbp),%rdi
lea    (%rdi,%r9,4),%rbx
add    $0xfffffffffffffffc,%rbx
mov    %rbx,%rdi
sub    %rax,%rdi
cmp    %rbx,%rdi
ja     138a <inet_pton6+0x24a>
test   %dl,%dl
jne    138a <inet_pton6+0x24a>
mov    %r14,%rax
sub    %rcx,%rax
mov    -0x48(%rbp),%rdx
lea    (%rdx,%rax,4),%rax
add    $0x4,%rax
mov    -0x30(%rbp),%rdx
lea    (%rdx,%r9,4),%rdx
cmp    %rdx,%rax
jae    14eb <inet_pton6+0x3ab>
mov    %r9,%rax
sub    %rcx,%rax
mov    -0x30(%rbp),%rdx
lea    (%rdx,%rax,4),%rax
add    $0x4,%rax
cmp    -0x38(%rbp),%rax
jb     138a <inet_pton6+0x24a>
mov    %r10,%rsi
and    $0xfffffffffffffff8,%rsi
lea    -0x8(%rsi),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     1577 <inet_pton6+0x437>
mov    %r8,%rdx
and    $0xfffffffffffffffe,%rdx
mov    -0x48(%rbp),%rax
lea    (%rax,%r14,4),%rdi
add    $0xfffffffffffffff0,%rdi
mov    -0x30(%rbp),%rax
lea    (%rax,%r9,4),%rbx
add    $0xfffffffffffffff0,%rbx
xor    %eax,%eax
xorps  %xmm0,%xmm0
movups -0x10(%rbx,%rax,4),%xmm1
movups (%rbx,%rax,4),%xmm2
movups %xmm2,(%rdi,%rax,4)
movups %xmm1,-0x10(%rdi,%rax,4)
movups %xmm0,(%rbx,%rax,4)
movups %xmm0,-0x10(%rbx,%rax,4)
movups -0x30(%rbx,%rax,4),%xmm1
movups -0x20(%rbx,%rax,4),%xmm2
movups %xmm2,-0x20(%rdi,%rax,4)
movups %xmm1,-0x30(%rdi,%rax,4)
movups %xmm0,-0x20(%rbx,%rax,4)
movups %xmm0,-0x30(%rbx,%rax,4)
add    $0xfffffffffffffff0,%rax
add    $0xfffffffffffffffe,%rdx
jne    152a <inet_pton6+0x3ea>
mov    $0x1,%edx
sub    %rax,%rdx
jmp    157c <inet_pton6+0x43c>
mov    $0x1,%edx
test   $0x1,%r8b
je     15b6 <inet_pton6+0x476>
mov    %r9,%rax
sub    %rdx,%rax
mov    -0x30(%rbp),%rbx
movups -0x1c(%rbx,%rax,4),%xmm0
movups -0xc(%rbx,%rax,4),%xmm1
shl    $0x2,%rdx
mov    -0x38(%rbp),%rdi
sub    %rdx,%rdi
movups %xmm1,-0xc(%rdi)
movups %xmm0,-0x1c(%rdi)
xorps  %xmm0,%xmm0
movups %xmm0,-0xc(%rbx,%rax,4)
movups %xmm0,-0x1c(%rbx,%rax,4)
cmp    %rsi,%r10
je     1327 <inet_pton6+0x1e7>
or     $0x1,%rsi
jmp    138a <inet_pton6+0x24a>

LLVM IR (-O0):
@inet_pton6.xdigits_l = internal constant [17 x i8] c"0123456789abcdef\00"
@inet_pton6.xdigits_u = internal constant [17 x i8] c"0123456789ABCDEF\00"
@NS_IN6ADDRSZ = global i32 0
@NS_INT16SZ = global i32 0
@NS_INADDRSZ = global i32 0
define i32 @inet_pton6(i8* %0, i32* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i32*
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i8*
%18 = alloca i32
%19 = alloca i32
store i8* %0, i8** %4
store i32* %1, i32** %5
%20 = load i32, i32* @NS_IN6ADDRSZ
%21 = zext i32 %20 to i64
%22 = call i8* @llvm.stacksave()
store i8* %22, i8** %6
%23 = alloca i32, i64 %21
store i64 %21, i64* %7
store i32* %23, i32** %8
%24 = load i32, i32* @NS_IN6ADDRSZ
%25 = call i32 @memset(i32* %23, i8 signext 0, i32 %24)
%26 = load i32*, i32** %8
%27 = load i32, i32* @NS_IN6ADDRSZ
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i32, i32* %26, i64 %28
store i32* %29, i32** %9
store i32* null, i32** %10
%30 = load i8*, i8** %4
%31 = load i8, i8* %30
%32 = sext i8 %31 to i32
%33 = icmp eq i32 %32, 58
br i1 %33, label %34, label %42
34: ; preds = %2
%35 = load i8*, i8** %4
%36 = getelementptr inbounds i8, i8* %35, i32 1
store i8* %36, i8** %4
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = icmp ne i32 %38, 58
br i1 %39, label %40, label %41
40: ; preds = %34
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
41: ; preds = %34
br label %42
42: ; preds = %41, %2
%43 = load i8*, i8** %4
store i8* %43, i8** %12
store i32 0, i32* %14
store i32 0, i32* %15
br label %44
44: ; preds = %105, %88, %76, %42
%45 = load i8*, i8** %4
%46 = getelementptr inbounds i8, i8* %45, i32 1
store i8* %46, i8** %4
%47 = load i8, i8* %45
%48 = sext i8 %47 to i32
store i32 %48, i32* %13
%49 = icmp ne i32 %48, 0
br i1 %49, label %50, label %136
50: ; preds = %44
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @inet_pton6.xdigits_l, i64 0, i64 0), i8** %11
%51 = load i32, i32* %13
%52 = call i8* @strchr(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @inet_pton6.xdigits_l, i64 0, i64 0), i32 %51)
store i8* %52, i8** %17
%53 = icmp eq i8* %52, null
br i1 %53, label %54, label %57
54: ; preds = %50
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @inet_pton6.xdigits_u, i64 0, i64 0), i8** %11
%55 = load i32, i32* %13
%56 = call i8* @strchr(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @inet_pton6.xdigits_u, i64 0, i64 0), i32 %55)
store i8* %56, i8** %17
br label %57
57: ; preds = %54, %50
%58 = load i8*, i8** %17
%59 = icmp ne i8* %58, null
br i1 %59, label %60, label %77
60: ; preds = %57
%61 = load i32, i32* %15
%62 = shl i32 %61, 4
store i32 %62, i32* %15
%63 = load i8*, i8** %17
%64 = load i8*, i8** %11
%65 = ptrtoint i8* %63 to i64
%66 = ptrtoint i8* %64 to i64
%67 = sub i64 %65, %66
%68 = load i32, i32* %15
%69 = sext i32 %68 to i64
%70 = or i64 %69, %67
%71 = trunc i64 %70 to i32
store i32 %71, i32* %15
%72 = load i32, i32* %14
%73 = add nsw i32 %72, 1
store i32 %73, i32* %14
%74 = icmp sgt i32 %73, 4
br i1 %74, label %75, label %76
75: ; preds = %60
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
76: ; preds = %60
br label %44
77: ; preds = %57
%78 = load i32, i32* %13
%79 = icmp eq i32 %78, 58
br i1 %79, label %80, label %115
80: ; preds = %77
%81 = load i8*, i8** %4
store i8* %81, i8** %12
%82 = load i32, i32* %14
%83 = icmp ne i32 %82, 0
br i1 %83, label %90, label %84
84: ; preds = %80
%85 = load i32*, i32** %10
%86 = icmp ne i32* %85, null
br i1 %86, label %87, label %88
87: ; preds = %84
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
88: ; preds = %84
%89 = load i32*, i32** %8
store i32* %89, i32** %10
br label %44
90: ; preds = %80
%91 = load i8*, i8** %4
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp eq i32 %93, 0
br i1 %94, label %95, label %96
95: ; preds = %90
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
96: ; preds = %90
br label %97
97: ; preds = %96
%98 = load i32*, i32** %8
%99 = load i32, i32* @NS_INT16SZ
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds i32, i32* %98, i64 %100
%102 = load i32*, i32** %9
%103 = icmp ugt i32* %101, %102
br i1 %103, label %104, label %105
104: ; preds = %97
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
105: ; preds = %97
%106 = load i32, i32* %15
%107 = ashr i32 %106, 8
%108 = and i32 %107, 255
%109 = load i32*, i32** %8
%110 = getelementptr inbounds i32, i32* %109, i32 1
store i32* %110, i32** %8
store i32 %108, i32* %109
%111 = load i32, i32* %15
%112 = and i32 %111, 255
%113 = load i32*, i32** %8
%114 = getelementptr inbounds i32, i32* %113, i32 1
store i32* %114, i32** %8
store i32 %112, i32* %113
store i32 0, i32* %14
store i32 0, i32* %15
br label %44
115: ; preds = %77
%116 = load i32, i32* %13
%117 = icmp eq i32 %116, 46
br i1 %117, label %118, label %135
118: ; preds = %115
%119 = load i32*, i32** %8
%120 = load i32, i32* @NS_INADDRSZ
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i32, i32* %119, i64 %121
%123 = load i32*, i32** %9
%124 = icmp ule i32* %122, %123
br i1 %124, label %125, label %135
125: ; preds = %118
%126 = load i8*, i8** %12
%127 = load i32*, i32** %8
%128 = call i64 @inet_pton4(i8* %126, i32* %127)
%129 = icmp sgt i64 %128, 0
br i1 %129, label %130, label %135
130: ; preds = %125
%131 = load i32, i32* @NS_INADDRSZ
%132 = load i32*, i32** %8
%133 = sext i32 %131 to i64
%134 = getelementptr inbounds i32, i32* %132, i64 %133
store i32* %134, i32** %8
store i32 0, i32* %14
br label %136
135: ; preds = %125, %118, %115
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
136: ; preds = %130, %44
%137 = load i32, i32* %14
%138 = icmp ne i32 %137, 0
br i1 %138, label %139, label %157
139: ; preds = %136
%140 = load i32*, i32** %8
%141 = load i32, i32* @NS_INT16SZ
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i32, i32* %140, i64 %142
%144 = load i32*, i32** %9
%145 = icmp ugt i32* %143, %144
br i1 %145, label %146, label %147
146: ; preds = %139
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
147: ; preds = %139
%148 = load i32, i32* %15
%149 = ashr i32 %148, 8
%150 = and i32 %149, 255
%151 = load i32*, i32** %8
%152 = getelementptr inbounds i32, i32* %151, i32 1
store i32* %152, i32** %8
store i32 %150, i32* %151
%153 = load i32, i32* %15
%154 = and i32 %153, 255
%155 = load i32*, i32** %8
%156 = getelementptr inbounds i32, i32* %155, i32 1
store i32* %156, i32** %8
store i32 %154, i32* %155
br label %157
157: ; preds = %147, %136
%158 = load i32*, i32** %10
%159 = icmp ne i32* %158, null
br i1 %159, label %160, label %201
160: ; preds = %157
%161 = load i32*, i32** %8
%162 = load i32*, i32** %10
%163 = ptrtoint i32* %161 to i64
%164 = ptrtoint i32* %162 to i64
%165 = sub i64 %163, %164
%166 = sdiv exact i64 %165, 4
%167 = trunc i64 %166 to i32
store i32 %167, i32* %18
%168 = load i32*, i32** %8
%169 = load i32*, i32** %9
%170 = icmp eq i32* %168, %169
br i1 %170, label %171, label %172
171: ; preds = %160
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
172: ; preds = %160
store i32 1, i32* %19
br label %173
173: ; preds = %196, %172
%174 = load i32, i32* %19
%175 = load i32, i32* %18
%176 = icmp sle i32 %174, %175
br i1 %176, label %177, label %199
177: ; preds = %173
%178 = load i32*, i32** %10
%179 = load i32, i32* %18
%180 = load i32, i32* %19
%181 = sub nsw i32 %179, %180
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %178, i64 %182
%184 = load i32, i32* %183
%185 = load i32*, i32** %9
%186 = load i32, i32* %19
%187 = sub nsw i32 0, %186
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds i32, i32* %185, i64 %188
store i32 %184, i32* %189
%190 = load i32*, i32** %10
%191 = load i32, i32* %18
%192 = load i32, i32* %19
%193 = sub nsw i32 %191, %192
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i32, i32* %190, i64 %194
store i32 0, i32* %195
br label %196
196: ; preds = %177
%197 = load i32, i32* %19
%198 = add nsw i32 %197, 1
store i32 %198, i32* %19
br label %173
199: ; preds = %173
%200 = load i32*, i32** %9
store i32* %200, i32** %8
br label %201
201: ; preds = %199, %157
%202 = load i32*, i32** %8
%203 = load i32*, i32** %9
%204 = icmp ne i32* %202, %203
br i1 %204, label %205, label %206
205: ; preds = %201
store i32 0, i32* %3
store i32 1, i32* %16
br label %210
206: ; preds = %201
%207 = load i32*, i32** %5
%208 = load i32, i32* @NS_IN6ADDRSZ
%209 = call i32 @memcpy(i32* %207, i32* %23, i32 %208)
store i32 1, i32* %3
store i32 1, i32* %16
br label %210
210: ; preds = %206, %205, %171, %146, %135, %104, %95, %87, %75, %40
%211 = load i8*, i8** %6
%212 = load i32, i32* %3
ret i32 %212
}

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