#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 unsigned char u_int;
typedef int u_char;

/* Variables and functions */
int /*<<< orphan*/ EINVAL;
int /*<<< orphan*/ EMSGSIZE;
int /*<<< orphan*/ errno;
int /*<<< orphan*/ memcpy(unsigned char *, int const *, int);
int /*<<< orphan*/ memset(unsigned char *, int /*<<< orphan*/, int);
scalar_t__ sprintf(char *, char *, int);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
char *inet_net_ntop_ipv6(const u_char *src, int bits, char *dst, size_t size) {
  u_int m;
  int b;
  int p;
  int zero_s, zero_l, tmp_zero_s, tmp_zero_l;
  int i;
  int is_ipv4 = 0;
  unsigned char inbuf[16];
  char outbuf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255/128")];
  char *cp;
  int words;
  u_char *s;
  if (bits < 0 || bits > 128) {
    errno = EINVAL;
    return (NULL);
  }
  cp = outbuf;
  if (bits == 0) {
    *cp++ = ':';
    *cp++ = ':';
    *cp = '\0';
  } else {
    p = (bits + 7) / 8;
    memcpy(inbuf, src, p);
    memset(inbuf + p, 0, 16 - p);
    b = bits % 8;
    if (b != 0) {
      m = ~0 << (8 - b);
      inbuf[p - 1] &= m;
    }
    s = inbuf;
    words = (bits + 15) / 16;
    if (words == 1)
      words = 2;
    zero_s = zero_l = tmp_zero_s = tmp_zero_l = 0;
    for (i = 0; i < (words * 2); i += 2) {
      if ((s[i] | s[i + 1]) == 0) {
        if (tmp_zero_l == 0)
          tmp_zero_s = i / 2;
        tmp_zero_l++;
      } else {
        if (tmp_zero_l && zero_l < tmp_zero_l) {
          zero_s = tmp_zero_s;
          zero_l = tmp_zero_l;
          tmp_zero_l = 0;
        }
      }
    }
    if (tmp_zero_l && zero_l < tmp_zero_l) {
      zero_s = tmp_zero_s;
      zero_l = tmp_zero_l;
    }
    if (zero_l != words && zero_s == 0 &&
        ((zero_l == 6) || ((zero_l == 5 && s[10] == 0xff && s[11] == 0xff) ||
                           ((zero_l == 7 && s[14] != 0 && s[15] != 1)))))
      is_ipv4 = 1;
    for (p = 0; p < words; p++) {
      if (zero_l != 0 && p >= zero_s && p < zero_s + zero_l) {
        if (p == zero_s)
          *cp++ = ':';
        if (p == words - 1)
          *cp++ = ':';
        s++;
        s++;
        continue;
      }
      if (is_ipv4 && p > 5) {
        *cp++ = (p == 6) ? ':' : '.';
        cp += ((size_t)sprintf(cp, "%u", *s++));
        if (p != 7 || bits > 120) {
          *cp++ = '.';
          cp += ((size_t)sprintf(cp, "%u", *s++));
        }
      } else {
        if (cp != outbuf)
          *cp++ = ':';
        cp += ((size_t)sprintf(cp, "%x", *s * 256 + s[1]));
        s += 2;
      }
    }
  }
  sprintf(cp, "/%u", bits);
  if (strlen(outbuf) + 1 > size)
    goto emsgsize;
  strcpy(dst, outbuf);
  return (dst);
emsgsize:
  errno = EMSGSIZE;
  return (NULL);
}


x86 assembly (clang, -O0):
<inet_net_ntop_ipv6>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
movl   $0x0,-0x4c(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     1188 <inet_net_ntop_ipv6+0x38>
cmpl   $0x80,-0x14(%rbp)
jle    11a7 <inet_net_ntop_ipv6+0x57>
mov    0x2e41(%rip),%rax
mov    (%rax),%ecx
mov    0x2e40(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    16b6 <inet_net_ntop_ipv6+0x566>
lea    -0xa0(%rbp),%rax
mov    %rax,-0xa8(%rbp)
cmpl   $0x0,-0x14(%rbp)
jne    11fe <inet_net_ntop_ipv6+0xae>
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x3a,(%rax)
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x3a,(%rax)
mov    -0xa8(%rbp),%rax
movb   $0x0,(%rax)
jmp    1649 <inet_net_ntop_ipv6+0x4f9>
mov    -0x14(%rbp),%eax
add    $0x7,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
lea    -0x60(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x34(%rbp),%edx
call   1060 <memcpy@plt>
lea    -0x60(%rbp),%rdi
movslq -0x34(%rbp),%rax
add    %rax,%rdi
mov    $0x10,%edx
sub    -0x34(%rbp),%edx
xor    %esi,%esi
call   1050 <memset@plt>
mov    -0x14(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
je     127a <inet_net_ntop_ipv6+0x12a>
mov    $0x8,%ecx
sub    -0x30(%rbp),%ecx
mov    $0xffffffff,%eax
shl    %cl,%eax
mov    %al,-0x29(%rbp)
movzbl -0x29(%rbp),%edx
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
cltq
movzbl -0x60(%rbp,%rax,1),%ecx
and    %edx,%ecx
mov    %cl,-0x60(%rbp,%rax,1)
lea    -0x60(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x14(%rbp),%eax
add    $0xf,%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
mov    %eax,-0xac(%rbp)
cmpl   $0x1,-0xac(%rbp)
jne    12b0 <inet_net_ntop_ipv6+0x160>
movl   $0x2,-0xac(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0xac(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jge    1378 <inet_net_ntop_ipv6+0x228>
mov    -0xb8(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0xb8(%rbp),%rcx
mov    -0x48(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
or     (%rcx,%rdx,4),%eax
cmp    $0x0,%eax
jne    1337 <inet_net_ntop_ipv6+0x1e7>
cmpl   $0x0,-0x44(%rbp)
jne    1329 <inet_net_ntop_ipv6+0x1d9>
mov    -0x48(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1365 <inet_net_ntop_ipv6+0x215>
cmpl   $0x0,-0x44(%rbp)
je     1360 <inet_net_ntop_ipv6+0x210>
mov    -0x3c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1360 <inet_net_ntop_ipv6+0x210>
mov    -0x40(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x44(%rbp)
jmp    1365 <inet_net_ntop_ipv6+0x215>
jmp    136a <inet_net_ntop_ipv6+0x21a>
mov    -0x48(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x48(%rbp)
jmp    12d3 <inet_net_ntop_ipv6+0x183>
cmpl   $0x0,-0x44(%rbp)
je     139a <inet_net_ntop_ipv6+0x24a>
mov    -0x3c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    139a <inet_net_ntop_ipv6+0x24a>
mov    -0x40(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xac(%rbp),%eax
je     1422 <inet_net_ntop_ipv6+0x2d2>
cmpl   $0x0,-0x38(%rbp)
jne    1422 <inet_net_ntop_ipv6+0x2d2>
cmpl   $0x6,-0x3c(%rbp)
je     141b <inet_net_ntop_ipv6+0x2cb>
cmpl   $0x5,-0x3c(%rbp)
jne    13ef <inet_net_ntop_ipv6+0x29f>
mov    -0xb8(%rbp),%rax
cmpl   $0xff,0x28(%rax)
jne    13ef <inet_net_ntop_ipv6+0x29f>
mov    -0xb8(%rbp),%rax
cmpl   $0xff,0x2c(%rax)
je     141b <inet_net_ntop_ipv6+0x2cb>
cmpl   $0x7,-0x3c(%rbp)
jne    1422 <inet_net_ntop_ipv6+0x2d2>
mov    -0xb8(%rbp),%rax
cmpl   $0x0,0x38(%rax)
je     1422 <inet_net_ntop_ipv6+0x2d2>
mov    -0xb8(%rbp),%rax
cmpl   $0x1,0x3c(%rax)
je     1422 <inet_net_ntop_ipv6+0x2d2>
movl   $0x1,-0x4c(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xac(%rbp),%eax
jge    1644 <inet_net_ntop_ipv6+0x4f4>
cmpl   $0x0,-0x3c(%rbp)
je     14d8 <inet_net_ntop_ipv6+0x388>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jl     14d8 <inet_net_ntop_ipv6+0x388>
mov    -0x34(%rbp),%eax
mov    -0x38(%rbp),%ecx
add    -0x3c(%rbp),%ecx
cmp    %ecx,%eax
jge    14d8 <inet_net_ntop_ipv6+0x388>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jne    1483 <inet_net_ntop_ipv6+0x333>
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x3a,(%rax)
mov    -0x34(%rbp),%eax
mov    -0xac(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    14af <inet_net_ntop_ipv6+0x35f>
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x3a,(%rax)
mov    -0xb8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0xb8(%rbp)
mov    -0xb8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0xb8(%rbp)
jmp    1636 <inet_net_ntop_ipv6+0x4e6>
cmpl   $0x0,-0x4c(%rbp)
je     15b9 <inet_net_ntop_ipv6+0x469>
cmpl   $0x5,-0x34(%rbp)
jle    15b9 <inet_net_ntop_ipv6+0x469>
mov    -0x34(%rbp),%edx
mov    $0x2e,%eax
mov    $0x3a,%ecx
cmp    $0x6,%edx
cmove  %ecx,%eax
mov    %al,%cl
mov    -0xa8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0xa8(%rbp)
mov    %cl,(%rax)
mov    -0xa8(%rbp),%rdi
mov    -0xb8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0xb8(%rbp)
mov    (%rax),%edx
lea    0xac7(%rip),%rsi
call   1070 <sprintf@plt>
add    -0xa8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
cmpl   $0x7,-0x34(%rbp)
jne    1564 <inet_net_ntop_ipv6+0x414>
cmpl   $0x78,-0x14(%rbp)
jle    15b4 <inet_net_ntop_ipv6+0x464>
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x2e,(%rax)
mov    -0xa8(%rbp),%rdi
mov    -0xb8(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0xb8(%rbp)
mov    (%rax),%edx
lea    0xa63(%rip),%rsi
call   1070 <sprintf@plt>
add    -0xa8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
jmp    1631 <inet_net_ntop_ipv6+0x4e1>
mov    -0xa8(%rbp),%rax
lea    -0xa0(%rbp),%rcx
cmp    %rcx,%rax
je     15e8 <inet_net_ntop_ipv6+0x498>
mov    -0xa8(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0xa8(%rbp)
movb   $0x3a,(%rax)
mov    -0xa8(%rbp),%rdi
mov    -0xb8(%rbp),%rax
mov    (%rax),%edx
shl    $0x8,%edx
mov    -0xb8(%rbp),%rax
add    0x4(%rax),%edx
lea    0x9f4(%rip),%rsi
call   1070 <sprintf@plt>
add    -0xa8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
mov    -0xb8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0xb8(%rbp)
jmp    1636 <inet_net_ntop_ipv6+0x4e6>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1429 <inet_net_ntop_ipv6+0x2d9>
jmp    1649 <inet_net_ntop_ipv6+0x4f9>
mov    -0xa8(%rbp),%rdi
mov    -0x14(%rbp),%edx
lea    0x9a9(%rip),%rsi
call   1070 <sprintf@plt>
lea    -0xa0(%rbp),%rdi
call   1040 <strlen@plt>
add    $0x1,%eax
cltq
cmp    -0x28(%rbp),%rax
jbe    167f <inet_net_ntop_ipv6+0x52f>
jmp    169c <inet_net_ntop_ipv6+0x54c>
mov    -0x20(%rbp),%rdi
lea    -0xa0(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    16b6 <inet_net_ntop_ipv6+0x566>
mov    0x2945(%rip),%rax
mov    (%rax),%ecx
mov    0x292c(%rip),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<inet_net_ntop_ipv6>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %esi,%r14d
cmp    $0x81,%esi
jb     1178 <inet_net_ntop_ipv6+0x28>
mov    0x2e5d(%rip),%rax
jmp    145d <inet_net_ntop_ipv6+0x30d>
mov    %rcx,0x40(%rsp)
mov    %rdx,0x38(%rsp)
test   %r14d,%r14d
mov    %r14,0x30(%rsp)
je     12a0 <inet_net_ntop_ipv6+0x150>
mov    %rdi,%rsi
lea    0x7(%r14),%ebp
shr    $0x3,%ebp
lea    0x10(%rsp),%r12
mov    %r12,%rdi
mov    %ebp,%edx
call   1060 <memcpy@plt>
lea    (%rsp,%rbp,1),%rdi
add    $0x10,%rdi
mov    $0x10,%edx
sub    %ebp,%edx
xor    %r15d,%r15d
xor    %esi,%esi
call   1050 <memset@plt>
mov    %r14d,%eax
and    $0x7,%eax
je     11dc <inet_net_ntop_ipv6+0x8c>
mov    $0x8,%cl
sub    %al,%cl
mov    $0xffffffff,%eax
shl    %cl,%eax
add    $0xffffffff,%ebp
and    %al,0x10(%rsp,%rbp,1)
lea    0xf(%r14),%eax
shr    $0x4,%eax
lea    -0x1(%r14),%ecx
cmp    $0x10,%ecx
mov    $0x2,%r13d
cmovae %eax,%r13d
mov    $0x0,%ebx
mov    $0x0,%eax
mov    $0x0,%ebp
test   %r13d,%r13d
je     1253 <inet_net_ntop_ipv6+0x103>
lea    0x0(%r13,%r13,1),%ecx
xor    %edx,%edx
xor    %esi,%esi
xor    %edi,%edi
xor    %eax,%eax
xor    %ebx,%ebx
xor    %r15d,%r15d
jmp    1238 <inet_net_ntop_ipv6+0xe8>
nopl   0x0(%rax)
test   %edi,%edi
cmove  %edx,%eax
add    $0x1,%edi
mov    %edi,%ebp
add    $0x2,%rsi
add    $0x1,%edx
mov    %ebp,%edi
cmp    %rcx,%rsi
jae    1253 <inet_net_ntop_ipv6+0x103>
mov    0x14(%rsp,%rsi,4),%ebp
or     0x10(%rsp,%rsi,4),%ebp
je     1220 <inet_net_ntop_ipv6+0xd0>
xor    %ebp,%ebp
test   %edi,%edi
je     122a <inet_net_ntop_ipv6+0xda>
cmp    %edi,%ebx
jge    1228 <inet_net_ntop_ipv6+0xd8>
mov    %eax,%r15d
mov    %edi,%ebx
jmp    122a <inet_net_ntop_ipv6+0xda>
test   %ebp,%ebp
setne  %cl
cmp    %ebp,%ebx
setl   %dl
test   %dl,%cl
cmovne %eax,%r15d
cmovne %ebp,%ebx
movl   $0x0,0xc(%rsp)
cmp    %r13d,%ebx
je     12b6 <inet_net_ntop_ipv6+0x166>
test   %r15d,%r15d
mov    %r15,%rbp
jne    12d9 <inet_net_ntop_ipv6+0x189>
cmp    $0x7,%ebx
je     12bb <inet_net_ntop_ipv6+0x16b>
cmp    $0x6,%ebx
je     12d3 <inet_net_ntop_ipv6+0x183>
cmp    $0x5,%ebx
jne    12c9 <inet_net_ntop_ipv6+0x179>
cmpl   $0xff,0x38(%rsp)
jne    12c9 <inet_net_ntop_ipv6+0x179>
cmpl   $0xff,0x3c(%rsp)
je     12d3 <inet_net_ntop_ipv6+0x183>
jmp    12c9 <inet_net_ntop_ipv6+0x179>
movw   $0x3a3a,0x50(%rsp)
lea    0x52(%rsp),%r14
movb   $0x0,0x52(%rsp)
jmp    142c <inet_net_ntop_ipv6+0x2dc>
mov    %r15,%rbp
jmp    12d9 <inet_net_ntop_ipv6+0x189>
cmpl   $0x0,0x48(%rsp)
je     12c9 <inet_net_ntop_ipv6+0x179>
cmpl   $0x1,0x4c(%rsp)
jne    12d3 <inet_net_ntop_ipv6+0x183>
movl   $0x0,0xc(%rsp)
jmp    12d9 <inet_net_ntop_ipv6+0x189>
mov    $0x1,%al
mov    %eax,0xc(%rsp)
lea    0x50(%rsp),%r14
test   %r13d,%r13d
je     142c <inet_net_ntop_ipv6+0x2dc>
lea    (%rbx,%rbp,1),%eax
mov    %eax,0x2c(%rsp)
neg    %r13d
xor    %r15d,%r15d
mov    %rbx,0x48(%rsp)
jmp    1314 <inet_net_ntop_ipv6+0x1c4>
nopl   0x0(%rax,%rax,1)
add    $0x8,%r12
add    $0x1,%r15d
mov    %r13d,%eax
add    %r15d,%eax
je     142c <inet_net_ntop_ipv6+0x2dc>
test   %ebx,%ebx
je     1350 <inet_net_ntop_ipv6+0x200>
cmp    %ebp,%r15d
jl     1350 <inet_net_ntop_ipv6+0x200>
cmp    0x2c(%rsp),%r15d
jge    1350 <inet_net_ntop_ipv6+0x200>
lea    (%r15,%r13,1),%eax
cmp    %r15d,%ebp
jne    1335 <inet_net_ntop_ipv6+0x1e5>
movb   $0x3a,(%r14)
add    $0x1,%r14
cmp    $0xffffffff,%eax
jne    1300 <inet_net_ntop_ipv6+0x1b0>
movb   $0x3a,(%r14)
add    $0x1,%r14
jmp    1300 <inet_net_ntop_ipv6+0x1b0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x6,%r15d
setae  %al
and    0xc(%rsp),%al
cmp    $0x1,%al
jne    13b0 <inet_net_ntop_ipv6+0x260>
cmp    $0x6,%r15d
mov    $0x2e,%eax
mov    $0x3a,%ecx
cmove  %ecx,%eax
lea    0x1(%r14),%rdi
mov    %al,(%r14)
mov    (%r12),%edx
lea    0xc82(%rip),%rsi
call   1070 <sprintf@plt>
add    %rax,%r14
add    $0x1,%r14
cmpl   $0x78,0x30(%rsp)
jg     1403 <inet_net_ntop_ipv6+0x2b3>
cmp    $0x7,%r15d
jne    1403 <inet_net_ntop_ipv6+0x2b3>
add    $0x4,%r12
jmp    1304 <inet_net_ntop_ipv6+0x1b4>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r13,%rbx
mov    %rbp,%r13
lea    0x50(%rsp),%rcx
mov    %rcx,%rbp
cmp    %rcx,%r14
je     13ce <inet_net_ntop_ipv6+0x27e>
movb   $0x3a,(%r14)
add    $0x1,%r14
mov    %r14,%rbp
mov    (%r12),%edx
shl    $0x8,%edx
add    0x4(%r12),%edx
mov    %rbp,%rdi
lea    0xc1c(%rip),%rsi
call   1070 <sprintf@plt>
mov    %rax,%r14
add    %rbp,%r14
add    $0x8,%r12
mov    %r13,%rbp
mov    %rbx,%r13
mov    0x48(%rsp),%rbx
jmp    1304 <inet_net_ntop_ipv6+0x1b4>
lea    0x1(%r14),%rdi
movb   $0x2e,(%r14)
mov    0x4(%r12),%edx
add    $0x8,%r12
lea    0xbe9(%rip),%rsi
call   1070 <sprintf@plt>
add    %rax,%r14
add    $0x1,%r14
jmp    1304 <inet_net_ntop_ipv6+0x1b4>
lea    0xbd0(%rip),%rsi
mov    %r14,%rdi
mov    0x30(%rsp),%rdx
call   1070 <sprintf@plt>
lea    0x50(%rsp),%rdi
call   1040 <strlen@plt>
add    $0x1,%eax
cltq
cmp    0x40(%rsp),%rax
jbe    146c <inet_net_ntop_ipv6+0x31c>
mov    0x2b8b(%rip),%rax
mov    (%rax),%eax
mov    0x2b72(%rip),%rcx
mov    %eax,(%rcx)
xor    %ebx,%ebx
jmp    147e <inet_net_ntop_ipv6+0x32e>
lea    0x50(%rsp),%rsi
mov    0x38(%rsp),%rbx
mov    %rbx,%rdi
call   1030 <strcpy@plt>
mov    %rbx,%rax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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