#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 */
size_t LONGBITS;
char *utob(char *buf, size_t buf_size, unsigned long val, size_t bits) {
  size_t i, shift, str_pos;
  if (buf_size == 0) {
    return buf;
  }
  if (bits == 0 || bits > LONGBITS) {
    bits = LONGBITS;
  }
  str_pos = 0;
  for (i = bits; i > 0; --i) {
    if (str_pos >= (buf_size - 1)) {
      break;
    }
    shift = (i - 1);
    buf[str_pos++] = ((val >> shift) & 1) ? '1' : '0';
  }
  buf[str_pos] = '\0';
  return buf;
}


x86 assembly (clang, -O0):
<utob>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    112c <utob+0x2c>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    11f7 <utob+0xf7>
cmpq   $0x0,-0x28(%rbp)
je     114b <utob+0x4b>
mov    -0x28(%rbp),%rax
mov    0x2ea6(%rip),%rcx
cmp    (%rcx),%rax
jbe    1159 <utob+0x59>
mov    0x2e96(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jbe    11e3 <utob+0xe3>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jb     118e <utob+0x8e>
jmp    11e3 <utob+0xe3>
mov    -0x30(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rdx
mov    -0x38(%rbp),%rcx
shr    %cl,%rdx
and    $0x1,%rdx
mov    $0x30,%eax
mov    $0x31,%ecx
cmp    $0x0,%rdx
cmovne %ecx,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %rcx,%rsi
add    $0x1,%rsi
mov    %rsi,-0x40(%rbp)
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    1169 <utob+0x69>
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<utob>:
mov    %rdi,%rax
test   %rsi,%rsi
je     18d0 <utob+0x7d0>
push   %rbx
mov    0x2ed4(%rip),%rdi
mov    (%rdi),%r8
cmp    %rcx,%r8
mov    %rcx,%rdi
cmovb  %r8,%rdi
test   %rcx,%rcx
cmove  %r8,%rdi
xor    %ebx,%ebx
test   %rdi,%rdi
je     18cb <utob+0x7cb>
mov    %rsi,%r8
add    $0xffffffffffffffff,%r8
je     18cb <utob+0x7cb>
lea    -0x1(%rdi),%rcx
add    $0xfffffffffffffffe,%rsi
cmp    %rcx,%rsi
cmovae %rcx,%rsi
add    $0x1,%rsi
test   %rcx,%rcx
mov    $0x1,%r9d
cmovne %rsi,%r9
cmp    $0x10,%r9
jae    116d <utob+0x6d>
xor    %ebx,%ebx
jmp    189f <utob+0x79f>
mov    %r9,%rbx
and    $0xfffffffffffffff0,%rbx
movq   %rdi,%xmm0
pshufd $0x44,%xmm0,%xmm9
movdqa 0xe78(%rip),%xmm11
paddq  %xmm9,%xmm11
movdqa 0xe7b(%rip),%xmm5
paddq  %xmm9,%xmm5
movdqa 0xe7e(%rip),%xmm7
paddq  %xmm9,%xmm7
movdqa 0xe81(%rip),%xmm3
paddq  %xmm9,%xmm3
movdqa 0xe84(%rip),%xmm6
paddq  %xmm9,%xmm6
movdqa 0xe87(%rip),%xmm4
paddq  %xmm9,%xmm4
movdqa 0xe8a(%rip),%xmm2
paddq  %xmm9,%xmm2
paddq  0xe8c(%rip),%xmm9
movq   %rdx,%xmm0
pshufd $0x44,%xmm0,%xmm8
lea    -0x10(%rbx),%rsi
mov    %rsi,%r10
shr    $0x4,%r10
add    $0x1,%r10
test   %rsi,%rsi
je     18d1 <utob+0x7d1>
mov    %r10,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %r11d,%r11d
movdqa 0xe66(%rip),%xmm10
pxor   %xmm14,%xmm14
nop
movdqa %xmm9,-0x50(%rsp)
movdqa %xmm2,-0x40(%rsp)
movdqa %xmm4,-0x30(%rsp)
movdqa %xmm6,-0x20(%rsp)
movdqa %xmm3,-0x70(%rsp)
movdqa %xmm7,-0x10(%rsp)
movdqa %xmm5,-0x60(%rsp)
movdqa -0x60(%rsp),%xmm13
pcmpeqd %xmm15,%xmm15
paddq  %xmm15,%xmm13
movdqa %xmm7,%xmm1
paddq  %xmm15,%xmm1
movdqa -0x70(%rsp),%xmm3
paddq  %xmm15,%xmm3
movdqa %xmm6,%xmm5
paddq  %xmm15,%xmm5
movdqa %xmm4,%xmm6
paddq  %xmm15,%xmm6
movdqa %xmm2,%xmm4
movdqa %xmm9,%xmm2
paddq  %xmm15,%xmm2
movdqa %xmm10,%xmm7
psllq  %xmm2,%xmm7
paddq  %xmm15,%xmm4
pshufd $0xee,%xmm2,%xmm0
movdqa %xmm10,%xmm2
psllq  %xmm0,%xmm2
movsd  %xmm7,%xmm2
movdqa %xmm10,%xmm0
psllq  %xmm4,%xmm0
pshufd $0xee,%xmm4,%xmm7
movdqa %xmm10,%xmm4
psllq  %xmm7,%xmm4
movdqa %xmm10,%xmm7
psllq  %xmm6,%xmm7
movsd  %xmm0,%xmm4
pshufd $0xee,%xmm6,%xmm0
movdqa %xmm10,%xmm12
psllq  %xmm0,%xmm12
movsd  %xmm7,%xmm12
movdqa %xmm10,%xmm0
psllq  %xmm5,%xmm0
pshufd $0xee,%xmm5,%xmm6
movdqa %xmm10,%xmm5
psllq  %xmm6,%xmm5
movdqa %xmm10,%xmm6
psllq  %xmm3,%xmm6
movsd  %xmm0,%xmm5
pshufd $0xee,%xmm3,%xmm0
movdqa %xmm10,%xmm9
psllq  %xmm0,%xmm9
movsd  %xmm6,%xmm9
movdqa %xmm10,%xmm0
psllq  %xmm1,%xmm0
pshufd $0xee,%xmm1,%xmm1
movdqa %xmm10,%xmm7
psllq  %xmm1,%xmm7
movdqa %xmm10,%xmm1
psllq  %xmm13,%xmm1
pshufd $0xee,%xmm13,%xmm3
movdqa %xmm10,%xmm13
psllq  %xmm3,%xmm13
movdqa %xmm11,%xmm3
paddq  %xmm15,%xmm3
movsd  %xmm0,%xmm7
movsd  %xmm1,%xmm13
movdqa %xmm10,%xmm1
psllq  %xmm3,%xmm1
pshufd $0xee,%xmm3,%xmm3
movdqa %xmm10,%xmm0
psllq  %xmm3,%xmm0
movsd  %xmm1,%xmm0
andpd  %xmm8,%xmm0
andpd  %xmm8,%xmm13
andpd  %xmm8,%xmm7
andpd  %xmm8,%xmm9
andpd  %xmm8,%xmm5
andpd  %xmm8,%xmm12
andpd  %xmm8,%xmm4
andpd  %xmm8,%xmm2
pcmpeqd %xmm14,%xmm2
pshufd $0xb1,%xmm2,%xmm1
pand   %xmm2,%xmm1
pcmpeqd %xmm14,%xmm4
pshufd $0xb1,%xmm4,%xmm2
pand   %xmm4,%xmm2
packssdw %xmm2,%xmm1
pcmpeqd %xmm14,%xmm12
pshufd $0xb1,%xmm12,%xmm2
pand   %xmm12,%xmm2
pcmpeqd %xmm14,%xmm5
pshufd $0xb1,%xmm5,%xmm3
pand   %xmm5,%xmm3
packssdw %xmm3,%xmm2
packssdw %xmm2,%xmm1
pcmpeqd %xmm14,%xmm9
pshufd $0xb1,%xmm9,%xmm2
pand   %xmm9,%xmm2
pcmpeqd %xmm14,%xmm7
pshufd $0xb1,%xmm7,%xmm3
pand   %xmm7,%xmm3
packssdw %xmm3,%xmm2
pcmpeqd %xmm14,%xmm13
pshufd $0xb1,%xmm13,%xmm3
pand   %xmm13,%xmm3
pcmpeqd %xmm14,%xmm0
pshufd $0xb1,%xmm0,%xmm4
pand   %xmm0,%xmm4
packssdw %xmm4,%xmm3
packssdw %xmm3,%xmm2
packsswb %xmm2,%xmm1
movdqa 0xc4e(%rip),%xmm15
paddb  %xmm15,%xmm1
movdqu %xmm1,(%rax,%r11,1)
movdqa %xmm11,%xmm12
movdqa 0xc46(%rip),%xmm1
paddq  %xmm1,%xmm12
movdqa -0x60(%rsp),%xmm13
paddq  %xmm1,%xmm13
movdqa -0x10(%rsp),%xmm2
paddq  %xmm1,%xmm2
movdqa -0x70(%rsp),%xmm6
paddq  %xmm1,%xmm6
movdqa -0x20(%rsp),%xmm0
paddq  %xmm1,%xmm0
movdqa -0x30(%rsp),%xmm5
paddq  %xmm1,%xmm5
movdqa -0x40(%rsp),%xmm4
paddq  %xmm1,%xmm4
movdqa -0x50(%rsp),%xmm7
paddq  %xmm1,%xmm7
movdqa %xmm10,%xmm1
psllq  %xmm7,%xmm1
pshufd $0xee,%xmm7,%xmm7
movdqa %xmm10,%xmm9
psllq  %xmm7,%xmm9
movdqa %xmm10,%xmm7
psllq  %xmm4,%xmm7
movsd  %xmm1,%xmm9
pshufd $0xee,%xmm4,%xmm1
movdqa %xmm10,%xmm4
psllq  %xmm1,%xmm4
movsd  %xmm7,%xmm4
movdqa %xmm10,%xmm1
psllq  %xmm5,%xmm1
pshufd $0xee,%xmm5,%xmm7
movdqa %xmm10,%xmm5
psllq  %xmm7,%xmm5
movdqa %xmm10,%xmm7
psllq  %xmm0,%xmm7
movsd  %xmm1,%xmm5
pshufd $0xee,%xmm0,%xmm1
movdqa %xmm10,%xmm0
psllq  %xmm1,%xmm0
movsd  %xmm7,%xmm0
movdqa %xmm10,%xmm1
psllq  %xmm6,%xmm1
pshufd $0xee,%xmm6,%xmm6
movdqa %xmm10,%xmm7
psllq  %xmm6,%xmm7
movdqa %xmm10,%xmm3
psllq  %xmm2,%xmm3
movsd  %xmm1,%xmm7
pshufd $0xee,%xmm2,%xmm1
movdqa %xmm10,%xmm6
psllq  %xmm1,%xmm6
movsd  %xmm3,%xmm6
movdqa %xmm10,%xmm1
psllq  %xmm13,%xmm1
pshufd $0xee,%xmm13,%xmm2
movdqa %xmm10,%xmm13
psllq  %xmm2,%xmm13
movdqa %xmm10,%xmm2
psllq  %xmm12,%xmm2
movsd  %xmm1,%xmm13
pshufd $0xee,%xmm12,%xmm12
movdqa %xmm10,%xmm1
psllq  %xmm12,%xmm1
movsd  %xmm2,%xmm1
andpd  %xmm8,%xmm4
andpd  %xmm8,%xmm9
pcmpeqd %xmm14,%xmm9
pshufd $0xb1,%xmm9,%xmm2
pand   %xmm9,%xmm2
movdqa -0x50(%rsp),%xmm9
pcmpeqd %xmm14,%xmm4
pshufd $0xb1,%xmm4,%xmm3
pand   %xmm4,%xmm3
andpd  %xmm8,%xmm0
andpd  %xmm8,%xmm5
packssdw %xmm3,%xmm2
pcmpeqd %xmm14,%xmm5
pshufd $0xb1,%xmm5,%xmm3
pand   %xmm5,%xmm3
pcmpeqd %xmm14,%xmm0
pshufd $0xb1,%xmm0,%xmm4
pand   %xmm0,%xmm4
packssdw %xmm4,%xmm3
andpd  %xmm8,%xmm6
andpd  %xmm8,%xmm7
packssdw %xmm3,%xmm2
pcmpeqd %xmm14,%xmm7
pshufd $0xb1,%xmm7,%xmm0
pand   %xmm7,%xmm0
movdqa -0x10(%rsp),%xmm7
pcmpeqd %xmm14,%xmm6
pshufd $0xb1,%xmm6,%xmm3
pand   %xmm6,%xmm3
movdqa -0x20(%rsp),%xmm6
andpd  %xmm8,%xmm1
andpd  %xmm8,%xmm13
packssdw %xmm3,%xmm0
pcmpeqd %xmm14,%xmm13
pshufd $0xb1,%xmm13,%xmm3
pand   %xmm13,%xmm3
movdqa -0x60(%rsp),%xmm5
pcmpeqd %xmm14,%xmm1
pshufd $0xb1,%xmm1,%xmm4
pand   %xmm1,%xmm4
packssdw %xmm4,%xmm3
movdqa -0x30(%rsp),%xmm4
packssdw %xmm3,%xmm0
movdqa -0x70(%rsp),%xmm3
packsswb %xmm0,%xmm2
paddb  %xmm15,%xmm2
movdqu %xmm2,0x10(%rax,%r11,1)
movdqa -0x40(%rsp),%xmm2
add    $0x20,%r11
movdqa 0xa2d(%rip),%xmm0
paddq  %xmm0,%xmm9
paddq  %xmm0,%xmm2
paddq  %xmm0,%xmm4
paddq  %xmm0,%xmm6
paddq  %xmm0,%xmm3
paddq  %xmm0,%xmm7
paddq  %xmm0,%xmm5
paddq  %xmm0,%xmm11
add    $0xfffffffffffffffe,%rsi
jne    1220 <utob+0x120>
test   $0x1,%r10b
je     1897 <utob+0x797>
pcmpeqd %xmm0,%xmm0
movdqa %xmm11,%xmm12
paddq  %xmm0,%xmm12
paddq  %xmm0,%xmm5
paddq  %xmm0,%xmm7
paddq  %xmm0,%xmm3
paddq  %xmm0,%xmm6
paddq  %xmm0,%xmm4
paddq  %xmm0,%xmm2
paddq  %xmm0,%xmm9
movdqa %xmm2,%xmm10
movdqa 0x98f(%rip),%xmm2
movdqa %xmm2,%xmm0
psllq  %xmm9,%xmm0
pshufd $0xee,%xmm9,%xmm1
movdqa %xmm2,%xmm9
psllq  %xmm1,%xmm9
movdqa %xmm2,%xmm1
psllq  %xmm10,%xmm1
movsd  %xmm0,%xmm9
movdqa %xmm3,%xmm0
pshufd $0xee,%xmm10,%xmm3
movdqa %xmm2,%xmm11
psllq  %xmm3,%xmm11
movsd  %xmm1,%xmm11
movdqa %xmm2,%xmm1
psllq  %xmm4,%xmm1
pshufd $0xee,%xmm4,%xmm3
movdqa %xmm2,%xmm4
psllq  %xmm3,%xmm4
movdqa %xmm2,%xmm3
psllq  %xmm6,%xmm3
movsd  %xmm1,%xmm4
pshufd $0xee,%xmm6,%xmm1
movdqa %xmm2,%xmm6
psllq  %xmm1,%xmm6
movsd  %xmm3,%xmm6
movdqa %xmm2,%xmm1
psllq  %xmm0,%xmm1
pshufd $0xee,%xmm0,%xmm3
movdqa %xmm2,%xmm13
psllq  %xmm3,%xmm13
movdqa %xmm2,%xmm3
psllq  %xmm7,%xmm3
movsd  %xmm1,%xmm13
pshufd $0xee,%xmm7,%xmm1
movdqa %xmm2,%xmm7
psllq  %xmm1,%xmm7
movsd  %xmm3,%xmm7
movdqa %xmm2,%xmm1
psllq  %xmm5,%xmm1
pshufd $0xee,%xmm5,%xmm10
movdqa %xmm2,%xmm3
psllq  %xmm10,%xmm3
movdqa %xmm2,%xmm0
psllq  %xmm12,%xmm0
movsd  %xmm1,%xmm3
pshufd $0xee,%xmm12,%xmm1
psllq  %xmm1,%xmm2
movsd  %xmm0,%xmm2
andpd  %xmm8,%xmm2
andpd  %xmm8,%xmm3
andpd  %xmm8,%xmm7
andpd  %xmm8,%xmm13
andpd  %xmm8,%xmm6
andpd  %xmm8,%xmm4
andpd  %xmm8,%xmm11
andpd  %xmm8,%xmm9
pxor   %xmm8,%xmm8
pcmpeqd %xmm8,%xmm9
pshufd $0xb1,%xmm9,%xmm1
pand   %xmm9,%xmm1
pcmpeqd %xmm8,%xmm11
pshufd $0xb1,%xmm11,%xmm0
pand   %xmm11,%xmm0
packssdw %xmm0,%xmm1
pcmpeqd %xmm8,%xmm4
pshufd $0xb1,%xmm4,%xmm0
pand   %xmm4,%xmm0
pcmpeqd %xmm8,%xmm6
pshufd $0xb1,%xmm6,%xmm4
pand   %xmm6,%xmm4
packssdw %xmm4,%xmm0
packssdw %xmm0,%xmm1
pcmpeqd %xmm8,%xmm13
pshufd $0xb1,%xmm13,%xmm0
pand   %xmm13,%xmm0
pcmpeqd %xmm8,%xmm7
pshufd $0xb1,%xmm7,%xmm4
pand   %xmm7,%xmm4
packssdw %xmm4,%xmm0
pcmpeqd %xmm8,%xmm3
pshufd $0xb1,%xmm3,%xmm4
pand   %xmm3,%xmm4
pcmpeqd %xmm8,%xmm2
pshufd $0xb1,%xmm2,%xmm3
pand   %xmm2,%xmm3
packssdw %xmm3,%xmm4
packssdw %xmm4,%xmm0
packsswb %xmm0,%xmm1
paddb  0x7ff(%rip),%xmm1
movdqu %xmm1,(%rax,%r11,1)
cmp    %rbx,%r9
je     18cb <utob+0x7cb>
sub    %rbx,%rdi
add    $0xffffffffffffffff,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
bt     %rdi,%rdx
mov    $0x31,%cl
adc    $0xff,%cl
mov    %cl,(%rax,%rbx,1)
add    $0x1,%rbx
add    $0xffffffffffffffff,%rdi
jae    18cb <utob+0x7cb>
cmp    %r8,%rbx
jb     18b0 <utob+0x7b0>
movb   $0x0,(%rax,%rbx,1)
pop    %rbx
ret
xor    %r11d,%r11d
test   $0x1,%r10b
jne    16b9 <utob+0x5b9>
jmp    1897 <utob+0x797>

LLVM IR (-O0):
@LONGBITS = global i64 0
define i8* @utob(i8* %0, i64 %1, i64 %2, i64 %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca i64
store i8* %0, i8** %6
store i64 %1, i64* %7
store i64 %2, i64* %8
store i64 %3, i64* %9
%13 = load i64, i64* %7
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %17
15: ; preds = %4
%16 = load i8*, i8** %6
store i8* %16, i8** %5
br label %60
17: ; preds = %4
%18 = load i64, i64* %9
%19 = icmp eq i64 %18, 0
br i1 %19, label %24, label %20
20: ; preds = %17
%21 = load i64, i64* %9
%22 = load i64, i64* @LONGBITS
%23 = icmp ugt i64 %21, %22
br i1 %23, label %24, label %26
24: ; preds = %20, %17
%25 = load i64, i64* @LONGBITS
store i64 %25, i64* %9
br label %26
26: ; preds = %24, %20
store i64 0, i64* %12
%27 = load i64, i64* %9
store i64 %27, i64* %10
br label %28
28: ; preds = %52, %26
%29 = load i64, i64* %10
%30 = icmp ugt i64 %29, 0
br i1 %30, label %31, label %55
31: ; preds = %28
%32 = load i64, i64* %12
%33 = load i64, i64* %7
%34 = sub i64 %33, 1
%35 = icmp uge i64 %32, %34
br i1 %35, label %36, label %37
36: ; preds = %31
br label %55
37: ; preds = %31
%38 = load i64, i64* %10
%39 = sub i64 %38, 1
store i64 %39, i64* %11
%40 = load i64, i64* %8
%41 = load i64, i64* %11
%42 = lshr i64 %40, %41
%43 = and i64 %42, 1
%44 = icmp ne i64 %43, 0
%45 = zext i1 %44 to i64
%46 = select i1 %44, i32 49, i32 48
%47 = trunc i32 %46 to i8
%48 = load i8*, i8** %6
%49 = load i64, i64* %12
%50 = add i64 %49, 1
store i64 %50, i64* %12
%51 = getelementptr inbounds i8, i8* %48, i64 %49
store i8 %47, i8* %51
br label %52
52: ; preds = %37
%53 = load i64, i64* %10
%54 = add i64 %53, -1
store i64 %54, i64* %10
br label %28
55: ; preds = %36, %28
%56 = load i8*, i8** %6
%57 = load i64, i64* %12
%58 = getelementptr inbounds i8, i8* %56, i64 %57
store i8 0, i8* %58
%59 = load i8*, i8** %6
store i8* %59, i8** %5
br label %60
60: ; preds = %55, %15
%61 = load i8*, i8** %5
ret i8* %61
}

LLVM IR (-O2):
@LONGBITS = global i64 0
define i8* @utob(i8* returned writeonly %0, i64 %1, i64 %2, i64 %3) {
%5 = icmp eq i64 %1, 0
br i1 %5, label %95, label %6
6: ; preds = %4
%7 = icmp eq i64 %3, 0
%8 = load i64, i64* @LONGBITS
%9 = icmp ult i64 %8, %3
%10 = select i1 %7, i1 true, i1 %9
%11 = select i1 %10, i64 %8, i64 %3
%12 = add i64 %1, -1
%13 = icmp ne i64 %11, 0
%14 = icmp ne i64 %12, 0
%15 = and i1 %13, %14
br i1 %15, label %16, label %92
16: ; preds = %6
%17 = add i64 %11, -1
%18 = add i64 %1, -2
%19 = icmp eq i64 %17, 0
%20 = call i64 @llvm.umin.i64(i64 %18, i64 %17)
%21 = add i64 %20, 1
%22 = select i1 %19, i64 1, i64 %21
%23 = icmp ult i64 %22, 16
br i1 %23, label %76, label %24
24: ; preds = %16
%25 = and i64 %22, -16
%26 = sub i64 %11, %25
%27 = insertelement <16 x i64> poison, i64 %11, i64 0
%28 = shufflevector <16 x i64> %27, <16 x i64> poison, <16 x i32> zeroinitializer
%29 = add <16 x i64> %28, <i64 0, i64 -1, i64 -2, i64 -3, i64 -4, i64 -5, i64 -6, i64 -7, i64 -8, i64 -9, i64 -10, i64 -11, i64 -12, i64 -13, i64 -14, i64 -15>
%30 = insertelement <16 x i64> poison, i64 %2, i64 0
%31 = shufflevector <16 x i64> %30, <16 x i64> poison, <16 x i32> zeroinitializer
%32 = add i64 %25, -16
%33 = lshr exact i64 %32, 4
%34 = add nuw nsw i64 %33, 1
%35 = and i64 %34, 1
%36 = icmp eq i64 %32, 0
br i1 %36, label %62, label %37
37: ; preds = %24
%38 = and i64 %34, 2305843009213693950
br label %39
39: ; preds = %39, %37
%40 = phi i64 [ 0, %37 ], [ %58, %39 ]
%41 = phi <16 x i64> [ %29, %37 ], [ %59, %39 ]
%42 = phi i64 [ 0, %37 ], [ %60, %39 ]
%43 = add <16 x i64> %41, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
%44 = shl nuw <16 x i64> <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>, %43
%45 = and <16 x i64> %44, %31
%46 = icmp eq <16 x i64> %45, zeroinitializer
%47 = select <16 x i1> %46, <16 x i8> <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>, <16 x i8> <i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49>
%48 = getelementptr inbounds i8, i8* %0, i64 %40
%49 = bitcast i8* %48 to <16 x i8>*
store <16 x i8> %47, <16 x i8>* %49
%50 = or i64 %40, 16
%51 = add <16 x i64> %41, <i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17, i64 -17>
%52 = shl nuw <16 x i64> <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>, %51
%53 = and <16 x i64> %52, %31
%54 = icmp eq <16 x i64> %53, zeroinitializer
%55 = select <16 x i1> %54, <16 x i8> <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>, <16 x i8> <i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49>
%56 = getelementptr inbounds i8, i8* %0, i64 %50
%57 = bitcast i8* %56 to <16 x i8>*
store <16 x i8> %55, <16 x i8>* %57
%58 = add nuw i64 %40, 32
%59 = add <16 x i64> %41, <i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32, i64 -32>
%60 = add i64 %42, 2
%61 = icmp eq i64 %60, %38
br i1 %61, label %62, label %39
62: ; preds = %39, %24
%63 = phi i64 [ 0, %24 ], [ %58, %39 ]
%64 = phi <16 x i64> [ %29, %24 ], [ %59, %39 ]
%65 = icmp eq i64 %35, 0
br i1 %65, label %74, label %66
66: ; preds = %62
%67 = add <16 x i64> %64, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
%68 = shl nuw <16 x i64> <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>, %67
%69 = and <16 x i64> %68, %31
%70 = icmp eq <16 x i64> %69, zeroinitializer
%71 = select <16 x i1> %70, <16 x i8> <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>, <16 x i8> <i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49>
%72 = getelementptr inbounds i8, i8* %0, i64 %63
%73 = bitcast i8* %72 to <16 x i8>*
store <16 x i8> %71, <16 x i8>* %73
br label %74
74: ; preds = %62, %66
%75 = icmp eq i64 %22, %25
br i1 %75, label %92, label %76
76: ; preds = %16, %74
%77 = phi i64 [ 0, %16 ], [ %25, %74 ]
%78 = phi i64 [ %11, %16 ], [ %26, %74 ]
br label %79
79: ; preds = %76, %79
%80 = phi i64 [ %87, %79 ], [ %77, %76 ]
%81 = phi i64 [ %82, %79 ], [ %78, %76 ]
%82 = add i64 %81, -1
%83 = shl nuw i64 1, %82
%84 = and i64 %83, %2
%85 = icmp eq i64 %84, 0
%86 = select i1 %85, i8 48, i8 49
%87 = add nuw i64 %80, 1
%88 = getelementptr inbounds i8, i8* %0, i64 %80
store i8 %86, i8* %88
%89 = icmp ne i64 %82, 0
%90 = icmp ult i64 %87, %12
%91 = select i1 %89, i1 %90, i1 false
br i1 %91, label %79, label %92
92: ; preds = %79, %74, %6
%93 = phi i64 [ 0, %6 ], [ %25, %74 ], [ %87, %79 ]
%94 = getelementptr inbounds i8, i8* %0, i64 %93
store i8 0, i8* %94
br label %95
95: ; preds = %4, %92
ret i8* %0
}