#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 */
struct dhcp_packet {
  int dummy;
};

/* Variables and functions */
unsigned char *free_space(struct dhcp_packet *, unsigned char *, int, int);
void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len,
                unsigned int val) {
  int i;
  unsigned char *p = free_space(mess, end, opt, len);
  if (p)
    for (i = 0; i < len; i++)
      *(p++) = val >> (8 * (len - (i + 1)));
}


x86 assembly (clang, -O0):
<option_put>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%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    -0x14(%rbp),%edx
mov    -0x18(%rbp),%ecx
call   1030 <free_space@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     1198 <option_put+0x88>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1193 <option_put+0x83>
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    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1153 <option_put+0x43>
jmp    1198 <option_put+0x88>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<option_put>:
push   %rbp
push   %rbx
sub    $0x58,%rsp
mov    %r8d,%ebp
mov    %ecx,%ebx
call   1030 <free_space@plt>
test   %rax,%rax
je     1733 <option_put+0x623>
test   %ebx,%ebx
jle    1733 <option_put+0x623>
lea    -0x1(%rbx),%r8d
xor    %ecx,%ecx
cmp    $0xf,%r8d
jb     1713 <option_put+0x603>
add    $0x1,%r8
mov    %r8,%rcx
and    $0xfffffffffffffff0,%rcx
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm12
movd   %ebp,%xmm0
pshufd $0x0,%xmm0,%xmm9
lea    -0x10(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x4,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     173a <option_put+0x62a>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xeb9(%rip),%xmm3
movdqa 0xec1(%rip),%xmm2
movdqa 0xec8(%rip),%xmm8
movdqa 0xecf(%rip),%xmm10
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
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 0xd3e(%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,(%rax,%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 0xcaf(%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,0x10(%rax,%rsi,1)
add    $0x20,%rsi
movdqa 0xb67(%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    11b0 <option_put+0xa0>
movdqa 0xb44(%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     170b <option_put+0x5fb>
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 0x9a2(%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)
cmp    %rcx,%r8
je     1733 <option_put+0x623>
add    %rcx,%rax
sub    %ecx,%ebx
lea    -0x8(,%rbx,8),%ecx
xor    %edx,%edx
xchg   %ax,%ax
mov    %ebp,%esi
shr    %cl,%esi
mov    %sil,(%rax,%rdx,1)
add    $0x1,%rdx
add    $0xfffffff8,%ecx
cmp    %edx,%ebx
jne    1720 <option_put+0x610>
add    $0x58,%rsp
pop    %rbx
pop    %rbp
ret
movdqa 0x8be(%rip),%xmm1
movdqa 0x8c6(%rip),%xmm5
movdqa 0x8ce(%rip),%xmm3
movdqa 0x8d6(%rip),%xmm2
xor    %esi,%esi
test   $0x1,%dl
jne    1597 <option_put+0x487>
jmp    170b <option_put+0x5fb>

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

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