#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ check_space(unsigned char *, unsigned char *, int, int);
unsigned char *option_put(unsigned char *p, unsigned char *end, int opt,
                          int len, unsigned int val) {
  int i;
  if (check_space(p, end, len, opt)) {
    *(p++) = opt;
    *(p++) = len;
    for (i = 0; i < len; i++)
      *(p++) = val >> (8 * (len - (i + 1)));
  }
  return p;
}


x86 assembly (clang, -O0):
<option_put>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%edx
mov    -0x14(%rbp),%ecx
call   1030 <check_space@plt>
cmp    $0x0,%rax
je     11bf <option_put+0xaf>
mov    -0x14(%rbp),%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0x18(%rbp),%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11ba <option_put+0xaa>
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
mov    -0x20(%rbp),%edx
add    $0x1,%edx
sub    %edx,%ecx
shl    $0x3,%ecx
shr    %cl,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    117a <option_put+0x6a>
jmp    11bf <option_put+0xaf>
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<option_put>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x58,%rsp
mov    %r8d,%r14d
mov    %ecx,%ebx
mov    %edx,%r15d
mov    %rdi,%rbp
mov    %ecx,%edx
mov    %r15d,%ecx
call   1030 <check_space@plt>
test   %rax,%rax
je     1759 <option_put+0x649>
mov    %r15b,0x0(%rbp)
lea    0x2(%rbp),%rax
mov    %bl,0x1(%rbp)
test   %ebx,%ebx
jle    1756 <option_put+0x646>
lea    -0x1(%rbx),%r8d
xor    %ecx,%ecx
cmp    $0xf,%r8d
jb     1727 <option_put+0x617>
add    $0x1,%r8
mov    %r8,%rcx
and    $0xfffffffffffffff0,%rcx
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm12
movd   %r14d,%xmm0
pshufd $0x0,%xmm0,%xmm9
lea    -0x10(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x4,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     1767 <option_put+0x657>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xe9e(%rip),%xmm3
movdqa 0xea6(%rip),%xmm2
movdqa 0xead(%rip),%xmm8
movdqa 0xeb4(%rip),%xmm10
xor    %esi,%esi
xchg   %ax,%ax
movdqa %xmm2,0x40(%rsp)
movdqa %xmm3,(%rsp)
movdqa %xmm2,%xmm13
movdqa %xmm8,%xmm14
movdqa %xmm8,0x30(%rsp)
movdqa %xmm10,%xmm15
movdqa %xmm10,%xmm7
pcmpeqd %xmm0,%xmm0
pxor   %xmm0,%xmm7
pxor   %xmm0,%xmm14
movdqa %xmm2,%xmm6
pxor   %xmm0,%xmm6
movdqa %xmm3,%xmm1
pxor   %xmm0,%xmm1
paddd  %xmm12,%xmm1
paddd  %xmm12,%xmm6
paddd  %xmm12,%xmm14
paddd  %xmm12,%xmm7
pslld  $0x3,%xmm7
pslld  $0x3,%xmm14
pslld  $0x3,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm9,%xmm2
psrld  %xmm0,%xmm2
pslld  $0x3,%xmm6
pshuflw $0x54,%xmm1,%xmm11
movdqa %xmm9,%xmm0
psrld  %xmm11,%xmm0
movdqa %xmm3,%xmm11
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
punpcklqdq %xmm2,%xmm0
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm9,%xmm2
psrld  %xmm1,%xmm2
punpckhqdq %xmm5,%xmm2
pshuflw $0xfe,%xmm6,%xmm1
movdqa %xmm9,%xmm3
psrld  %xmm1,%xmm3
shufps $0xcc,%xmm2,%xmm0
pshuflw $0x54,%xmm6,%xmm2
movdqa %xmm9,%xmm1
psrld  %xmm2,%xmm1
pshufd $0xee,%xmm6,%xmm2
pshuflw $0xfe,%xmm2,%xmm5
movdqa %xmm9,%xmm6
psrld  %xmm5,%xmm6
punpcklqdq %xmm3,%xmm1
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm9,%xmm3
psrld  %xmm2,%xmm3
punpckhqdq %xmm6,%xmm3
pshuflw $0xfe,%xmm14,%xmm2
movdqa %xmm9,%xmm5
psrld  %xmm2,%xmm5
shufps $0xcc,%xmm3,%xmm1
pshuflw $0x54,%xmm14,%xmm3
movdqa %xmm9,%xmm2
psrld  %xmm3,%xmm2
pshufd $0xee,%xmm14,%xmm3
pshuflw $0xfe,%xmm3,%xmm6
movdqa %xmm9,%xmm4
psrld  %xmm6,%xmm4
punpcklqdq %xmm5,%xmm2
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
punpckhqdq %xmm4,%xmm5
pshuflw $0xfe,%xmm7,%xmm3
movdqa %xmm9,%xmm4
psrld  %xmm3,%xmm4
shufps $0xcc,%xmm5,%xmm2
pshuflw $0x54,%xmm7,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
pshufd $0xee,%xmm7,%xmm3
pshuflw $0xfe,%xmm3,%xmm6
movdqa %xmm9,%xmm7
psrld  %xmm6,%xmm7
punpcklqdq %xmm4,%xmm5
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm9,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm7,%xmm4
shufps $0xcc,%xmm4,%xmm5
movaps 0xd2e(%rip),%xmm14
andps  %xmm14,%xmm5
andps  %xmm14,%xmm2
packuswb %xmm2,%xmm5
andps  %xmm14,%xmm1
andps  %xmm14,%xmm0
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm5
movdqu %xmm5,0x2(%rbp,%rsi,1)
movdqa %xmm12,%xmm1
movdqa %xmm11,0x20(%rsp)
psubd  %xmm11,%xmm1
pslld  $0x3,%xmm1
movdqa %xmm12,%xmm2
movdqa %xmm13,0x10(%rsp)
psubd  %xmm13,%xmm2
movdqa 0x30(%rsp),%xmm13
pslld  $0x3,%xmm2
movdqa %xmm12,%xmm6
psubd  %xmm13,%xmm6
pslld  $0x3,%xmm6
movdqa %xmm12,%xmm7
movdqa %xmm10,%xmm11
psubd  %xmm10,%xmm7
pslld  $0x3,%xmm7
movdqa 0xc9e(%rip),%xmm4
paddd  %xmm4,%xmm7
paddd  %xmm4,%xmm6
paddd  %xmm4,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm9,%xmm3
psrld  %xmm0,%xmm3
paddd  %xmm4,%xmm2
pshuflw $0x54,%xmm1,%xmm4
movdqa %xmm9,%xmm0
psrld  %xmm4,%xmm0
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm4
movdqa %xmm9,%xmm5
psrld  %xmm4,%xmm5
punpcklqdq %xmm3,%xmm0
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm9,%xmm3
psrld  %xmm1,%xmm3
punpckhqdq %xmm5,%xmm3
pshuflw $0xfe,%xmm2,%xmm1
movdqa %xmm9,%xmm4
psrld  %xmm1,%xmm4
shufps $0xcc,%xmm3,%xmm0
pshuflw $0x54,%xmm2,%xmm3
movdqa %xmm9,%xmm1
psrld  %xmm3,%xmm1
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
punpcklqdq %xmm4,%xmm1
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm9,%xmm3
psrld  %xmm2,%xmm3
punpckhqdq %xmm5,%xmm3
pshuflw $0xfe,%xmm6,%xmm2
movdqa %xmm9,%xmm4
psrld  %xmm2,%xmm4
shufps $0xcc,%xmm3,%xmm1
pshuflw $0x54,%xmm6,%xmm3
movdqa %xmm9,%xmm2
psrld  %xmm3,%xmm2
pshufd $0xee,%xmm6,%xmm3
pshuflw $0xfe,%xmm3,%xmm5
movdqa %xmm9,%xmm6
psrld  %xmm5,%xmm6
punpcklqdq %xmm4,%xmm2
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm9,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm6,%xmm4
pshuflw $0xfe,%xmm7,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
shufps $0xcc,%xmm4,%xmm2
pshuflw $0x54,%xmm7,%xmm3
movdqa %xmm9,%xmm4
psrld  %xmm3,%xmm4
pshufd $0xee,%xmm7,%xmm3
pshuflw $0xfe,%xmm3,%xmm6
movdqa %xmm9,%xmm7
psrld  %xmm6,%xmm7
punpcklqdq %xmm5,%xmm4
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm9,%xmm5
psrld  %xmm3,%xmm5
punpckhqdq %xmm7,%xmm5
shufps $0xcc,%xmm5,%xmm4
andps  %xmm14,%xmm4
andps  %xmm14,%xmm2
packuswb %xmm2,%xmm4
movdqa 0x40(%rsp),%xmm2
andps  %xmm14,%xmm1
andps  %xmm14,%xmm0
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm4
movdqu %xmm4,0x12(%rbp,%rsi,1)
add    $0x20,%rsi
movdqa 0xb56(%rip),%xmm0
paddd  %xmm0,%xmm10
paddd  %xmm0,%xmm8
paddd  %xmm0,%xmm2
movdqa (%rsp),%xmm1
paddd  %xmm0,%xmm1
movdqa %xmm1,(%rsp)
movdqa (%rsp),%xmm3
add    $0xfffffffffffffffe,%rdi
jne    11c0 <option_put+0xb0>
movdqa 0xb33(%rip),%xmm1
movdqa %xmm1,%xmm2
psubd  %xmm11,%xmm2
movdqa %xmm1,%xmm3
psubd  %xmm13,%xmm3
movdqa %xmm1,%xmm5
psubd  0x10(%rsp),%xmm5
psubd  0x20(%rsp),%xmm1
test   $0x1,%dl
je     171c <option_put+0x60c>
paddd  %xmm12,%xmm1
paddd  %xmm12,%xmm5
paddd  %xmm12,%xmm3
paddd  %xmm12,%xmm2
pslld  $0x3,%xmm2
pslld  $0x3,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm9,%xmm4
psrld  %xmm0,%xmm4
pslld  $0x3,%xmm3
pshuflw $0x54,%xmm1,%xmm6
movdqa %xmm9,%xmm0
psrld  %xmm6,%xmm0
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm6
movdqa %xmm9,%xmm7
psrld  %xmm6,%xmm7
pslld  $0x3,%xmm5
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm9,%xmm6
psrld  %xmm1,%xmm6
punpcklqdq %xmm4,%xmm0
pshuflw $0xfe,%xmm5,%xmm1
movdqa %xmm9,%xmm4
psrld  %xmm1,%xmm4
punpckhqdq %xmm7,%xmm6
pshuflw $0x54,%xmm5,%xmm7
movdqa %xmm9,%xmm1
psrld  %xmm7,%xmm1
pshufd $0xee,%xmm5,%xmm5
pshuflw $0xfe,%xmm5,%xmm8
movdqa %xmm9,%xmm7
psrld  %xmm8,%xmm7
shufps $0xcc,%xmm6,%xmm0
pshuflw $0x54,%xmm5,%xmm5
movdqa %xmm9,%xmm6
psrld  %xmm5,%xmm6
punpcklqdq %xmm4,%xmm1
pshuflw $0xfe,%xmm3,%xmm5
movdqa %xmm9,%xmm4
psrld  %xmm5,%xmm4
punpckhqdq %xmm7,%xmm6
pshuflw $0x54,%xmm3,%xmm7
movdqa %xmm9,%xmm5
psrld  %xmm7,%xmm5
pshufd $0xee,%xmm3,%xmm3
pshuflw $0xfe,%xmm3,%xmm8
movdqa %xmm9,%xmm7
psrld  %xmm8,%xmm7
shufps $0xcc,%xmm6,%xmm1
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm9,%xmm6
psrld  %xmm3,%xmm6
punpcklqdq %xmm4,%xmm5
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm9,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm7,%xmm6
pshuflw $0x54,%xmm2,%xmm3
movdqa %xmm9,%xmm7
psrld  %xmm3,%xmm7
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm8
movdqa %xmm9,%xmm3
psrld  %xmm8,%xmm3
shufps $0xcc,%xmm6,%xmm5
pshuflw $0x54,%xmm2,%xmm2
psrld  %xmm2,%xmm9
punpcklqdq %xmm4,%xmm7
punpckhqdq %xmm3,%xmm9
shufps $0xcc,%xmm9,%xmm7
movaps 0x991(%rip),%xmm2
andps  %xmm2,%xmm7
andps  %xmm2,%xmm5
packuswb %xmm5,%xmm7
andps  %xmm2,%xmm1
andps  %xmm2,%xmm0
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm7
movdqu %xmm7,(%rax,%rsi,1)
add    %rcx,%rax
mov    %rax,%rbp
cmp    %rcx,%r8
je     1759 <option_put+0x649>
sub    %ecx,%ebx
lea    -0x8(,%rbx,8),%ecx
mov    %rax,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r14d,%eax
shr    %cl,%eax
mov    %al,0x0(%rbp)
add    $0x1,%rbp
add    $0xfffffff8,%ecx
add    $0xffffffff,%ebx
jne    1740 <option_put+0x630>
jmp    1759 <option_put+0x649>
mov    %rax,%rbp
mov    %rbp,%rax
add    $0x58,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
movdqa 0x891(%rip),%xmm1
movdqa 0x899(%rip),%xmm5
movdqa 0x8a1(%rip),%xmm3
movdqa 0x8a9(%rip),%xmm2
xor    %esi,%esi
test   $0x1,%dl
jne    15a8 <option_put+0x498>
jmp    171c <option_put+0x60c>

LLVM IR (-O0):
define i8* @option_put(i8* %0, i8* %1, i32 %2, i32 %3, i32 %4) {
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store i8* %0, i8** %6
store i8* %1, i8** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i32 %4, i32* %10
%12 = load i8*, i8** %6
%13 = load i8*, i8** %7
%14 = load i32, i32* %9
%15 = load i32, i32* %8
%16 = call i64 @check_space(i8* %12, i8* %13, i32 %14, i32 %15)
%17 = icmp ne i64 %16, 0
br i1 %17, label %18, label %46
18: ; preds = %5
%19 = load i32, i32* %8
%20 = trunc i32 %19 to i8
%21 = load i8*, i8** %6
%22 = getelementptr inbounds i8, i8* %21, i32 1
store i8* %22, i8** %6
store i8 %20, i8* %21
%23 = load i32, i32* %9
%24 = trunc i32 %23 to i8
%25 = load i8*, i8** %6
%26 = getelementptr inbounds i8, i8* %25, i32 1
store i8* %26, i8** %6
store i8 %24, i8* %25
store i32 0, i32* %11
br label %27
27: ; preds = %42, %18
%28 = load i32, i32* %11
%29 = load i32, i32* %9
%30 = icmp slt i32 %28, %29
br i1 %30, label %31, label %45
31: ; preds = %27
%32 = load i32, i32* %10
%33 = load i32, i32* %9
%34 = load i32, i32* %11
%35 = add nsw i32 %34, 1
%36 = sub nsw i32 %33, %35
%37 = mul nsw i32 8, %36
%38 = lshr i32 %32, %37
%39 = trunc i32 %38 to i8
%40 = load i8*, i8** %6
%41 = getelementptr inbounds i8, i8* %40, i32 1
store i8* %41, i8** %6
store i8 %39, i8* %40
br label %42
42: ; preds = %31
%43 = load i32, i32* %11
%44 = add nsw i32 %43, 1
store i32 %44, i32* %11
br label %27
45: ; preds = %27
br label %46
46: ; preds = %45, %5
%47 = load i8*, i8** %6
ret i8* %47
}

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