#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 */
unsigned short htons(unsigned short);
int create_rawpkt(unsigned char *dstmac, unsigned char *srcmac,
                  unsigned short type, int datasize, unsigned char *data,
                  unsigned char *result) {
  int i = 0;
  for (i = 0; i < 6; i++)
    result[i] = dstmac[i];
  for (i = 0; i < 6; i++)
    result[i + 6] = srcmac[i];
  *((unsigned short *)(result + 12)) = htons(type);
  for (i = 0; i < datasize; i++)
    result[14 + i] = data[i];
  for (i = 0; i < 60 - 14 - datasize; i++)
    result[14 + i + datasize] = 0;
  return ((60) > (datasize + 14) ? (60) : (datasize + 14));
}


x86 assembly (clang, -O0):
<create_rawpkt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %dx,%ax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %ax,-0x12(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x6,-0x2c(%rbp)
jge    116e <create_rawpkt+0x5e>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1140 <create_rawpkt+0x30>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x6,-0x2c(%rbp)
jge    11a8 <create_rawpkt+0x98>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1175 <create_rawpkt+0x65>
movzwl -0x12(%rbp),%edi
call   1030 <htons@plt>
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0xc(%rax)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11f8 <create_rawpkt+0xe8>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0xe,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11c3 <create_rawpkt+0xb3>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    $0x2e,%ecx
sub    -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    1234 <create_rawpkt+0x124>
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0xe,%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11ff <create_rawpkt+0xef>
mov    -0x18(%rbp),%ecx
add    $0xe,%ecx
mov    $0x3c,%eax
cmp    %ecx,%eax
jle    1254 <create_rawpkt+0x144>
mov    $0x3c,%eax
mov    %eax,-0x30(%rbp)
jmp    125d <create_rawpkt+0x14d>
mov    -0x18(%rbp),%eax
add    $0xe,%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_rawpkt>:
push   %r15
push   %r14
push   %rbx
mov    %r9,%r15
mov    %r8,%rbx
mov    %ecx,%r14d
mov    (%rdi),%al
mov    %al,(%r9)
mov    0x1(%rdi),%al
mov    %al,0x1(%r9)
mov    0x2(%rdi),%al
mov    %al,0x2(%r9)
mov    0x3(%rdi),%al
mov    %al,0x3(%r9)
mov    0x4(%rdi),%al
mov    %al,0x4(%r9)
mov    0x5(%rdi),%al
mov    %al,0x5(%r9)
mov    (%rsi),%al
mov    %al,0x6(%r9)
mov    0x1(%rsi),%al
mov    %al,0x7(%r9)
mov    0x2(%rsi),%al
mov    %al,0x8(%r9)
mov    0x3(%rsi),%al
mov    %al,0x9(%r9)
mov    0x4(%rsi),%al
mov    %al,0xa(%r9)
mov    0x5(%rsi),%al
mov    %al,0xb(%r9)
mov    %edx,%edi
call   1030 <htons@plt>
mov    %ax,0xc(%r15)
test   %r14d,%r14d
jle    1226 <create_rawpkt+0x116>
mov    %r14d,%r8d
cmp    $0x8,%r14d
jb     11af <create_rawpkt+0x9f>
lea    0xe(%r15),%rcx
lea    (%rbx,%r8,1),%rdx
cmp    %rdx,%rcx
jae    12df <create_rawpkt+0x1cf>
lea    (%r8,%r15,1),%rcx
add    $0xe,%rcx
cmp    %rbx,%rcx
jbe    12df <create_rawpkt+0x1cf>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %r8,%rdx
mov    %r8,%rsi
and    $0x3,%rsi
je     11e3 <create_rawpkt+0xd3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rbx,%rcx,1),%eax
mov    %al,0xe(%r15,%rcx,1)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    11d0 <create_rawpkt+0xc0>
cmp    $0x3,%rdx
jb     1220 <create_rawpkt+0x110>
nopl   0x0(%rax)
movzbl (%rbx,%rcx,1),%eax
mov    %al,0xe(%r15,%rcx,1)
movzbl 0x1(%rbx,%rcx,1),%eax
mov    %al,0xf(%r15,%rcx,1)
movzbl 0x2(%rbx,%rcx,1),%eax
mov    %al,0x10(%r15,%rcx,1)
movzbl 0x3(%rbx,%rcx,1),%eax
mov    %al,0x11(%r15,%rcx,1)
add    $0x4,%rcx
cmp    %rcx,%r8
jne    11f0 <create_rawpkt+0xe0>
cmp    $0x2d,%r14d
jg     1299 <create_rawpkt+0x189>
mov    $0x2e,%ecx
sub    %r14d,%ecx
cmp    $0x2,%ecx
mov    $0x1,%r8d
cmovge %ecx,%r8d
cmp    $0x8,%r8d
jae    12af <create_rawpkt+0x19f>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %r8,%rdx
mov    %r8,%rsi
and    $0x3,%rsi
je     1274 <create_rawpkt+0x164>
lea    0xe(%r14),%edi
nopl   0x0(%rax)
lea    (%rdi,%rcx,1),%eax
cltq
movb   $0x0,(%r15,%rax,1)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1260 <create_rawpkt+0x150>
cmp    $0x3,%rdx
jb     1299 <create_rawpkt+0x189>
mov    %r14d,%edx
nopl   (%rax)
lea    (%rdx,%rcx,1),%eax
add    $0xe,%eax
cltq
movl   $0x0,(%r15,%rax,1)
add    $0x4,%rcx
cmp    %rcx,%r8
jne    1280 <create_rawpkt+0x170>
cmp    $0x2f,%r14d
mov    $0x2e,%eax
cmovge %r14d,%eax
add    $0xe,%eax
pop    %rbx
pop    %r14
pop    %r15
ret
lea    -0x1(%r8),%rdx
lea    0xe(%r14),%esi
lea    (%r14,%rdx,1),%edi
add    $0xe,%edi
xor    %ecx,%ecx
cmp    %esi,%edi
jl     1243 <create_rawpkt+0x133>
shr    $0x20,%rdx
jne    1243 <create_rawpkt+0x133>
cmp    $0x20,%r8d
jae    12ec <create_rawpkt+0x1dc>
xor    %ecx,%ecx
jmp    13da <create_rawpkt+0x2ca>
cmp    $0x20,%r14d
jae    1316 <create_rawpkt+0x206>
xor    %ecx,%ecx
jmp    14c8 <create_rawpkt+0x3b8>
mov    %r8d,%ecx
and    $0x7fffffe0,%ecx
lea    -0x20(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0x60,%rdi
jae    1341 <create_rawpkt+0x231>
xor    %edi,%edi
jmp    139b <create_rawpkt+0x28b>
mov    %r8d,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%rsi
mov    %rsi,%rdi
shr    $0x5,%rdi
add    $0x1,%rdi
mov    %edi,%edx
and    $0x3,%edx
cmp    $0x60,%rsi
jae    1412 <create_rawpkt+0x302>
xor    %esi,%esi
jmp    1481 <create_rawpkt+0x371>
and    $0xfffffffffffffffc,%rsi
lea    0x4e(%r14),%ebx
xor    %edi,%edi
xorps  %xmm0,%xmm0
xchg   %ax,%ax
lea    -0x40(%rbx),%eax
cltq
movups %xmm0,(%r15,%rax,1)
movups %xmm0,0x10(%r15,%rax,1)
lea    -0x20(%rbx),%eax
cltq
movups %xmm0,(%r15,%rax,1)
movups %xmm0,0x10(%r15,%rax,1)
movslq %ebx,%rbx
movups %xmm0,(%r15,%rbx,1)
movups %xmm0,0x10(%r15,%rbx,1)
lea    0x20(%rbx),%eax
cltq
movups %xmm0,(%r15,%rax,1)
movups %xmm0,0x10(%r15,%rax,1)
sub    $0xffffffffffffff80,%rdi
sub    $0xffffff80,%ebx
add    $0xfffffffffffffffc,%rsi
jne    1350 <create_rawpkt+0x240>
test   %rdx,%rdx
je     13c7 <create_rawpkt+0x2b7>
lea    (%r14,%rdi,1),%esi
add    $0xe,%esi
xorps  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movslq %esi,%rsi
movups %xmm0,(%r15,%rsi,1)
movups %xmm0,0x10(%r15,%rsi,1)
add    $0x20,%esi
add    $0xffffffffffffffff,%rdx
jne    13b0 <create_rawpkt+0x2a0>
cmp    %r8,%rcx
je     1299 <create_rawpkt+0x189>
test   $0x18,%r8b
je     1243 <create_rawpkt+0x133>
mov    %rcx,%rsi
lea    (%r14,%rcx,1),%edx
add    $0xe,%edx
mov    %r8d,%ecx
and    $0x7ffffff8,%ecx
sub    %rcx,%rsi
movslq %edx,%rdx
movq   $0x0,(%r15,%rdx,1)
add    $0x8,%edx
add    $0x8,%rsi
jne    13f0 <create_rawpkt+0x2e0>
cmp    %r8,%rcx
jne    1243 <create_rawpkt+0x133>
jmp    1299 <create_rawpkt+0x189>
and    $0xfffffffffffffffc,%rdi
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movups (%rbx,%rsi,1),%xmm0
movups 0x10(%rbx,%rsi,1),%xmm1
movups %xmm0,0xe(%r15,%rsi,1)
movups %xmm1,0x1e(%r15,%rsi,1)
movups 0x20(%rbx,%rsi,1),%xmm0
movups 0x30(%rbx,%rsi,1),%xmm1
movups %xmm0,0x2e(%r15,%rsi,1)
movups %xmm1,0x3e(%r15,%rsi,1)
movups 0x40(%rbx,%rsi,1),%xmm0
movups 0x50(%rbx,%rsi,1),%xmm1
movups %xmm0,0x4e(%r15,%rsi,1)
movups %xmm1,0x5e(%r15,%rsi,1)
movups 0x60(%rbx,%rsi,1),%xmm0
movups 0x70(%rbx,%rsi,1),%xmm1
movups %xmm0,0x6e(%r15,%rsi,1)
movups %xmm1,0x7e(%r15,%rsi,1)
sub    $0xffffffffffffff80,%rsi
add    $0xfffffffffffffffc,%rdi
jne    1420 <create_rawpkt+0x310>
test   %rdx,%rdx
je     14b5 <create_rawpkt+0x3a5>
cs nopw 0x0(%rax,%rax,1)
movups (%rbx,%rsi,1),%xmm0
movups 0x10(%rbx,%rsi,1),%xmm1
mov    %rsi,%rdi
or     $0xe,%rdi
movups %xmm0,(%r15,%rdi,1)
movups %xmm1,0x10(%r15,%rdi,1)
add    $0x20,%rsi
add    $0xffffffffffffffff,%rdx
jne    1490 <create_rawpkt+0x380>
cmp    %r8,%rcx
je     1220 <create_rawpkt+0x110>
test   $0x18,%r8b
je     11b1 <create_rawpkt+0xa1>
mov    %rcx,%rdx
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rbx,%rdx,1),%rsi
mov    %rsi,0xe(%r15,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    14e0 <create_rawpkt+0x3d0>
cmp    %r8,%rcx
je     1220 <create_rawpkt+0x110>
jmp    11b1 <create_rawpkt+0xa1>

LLVM IR (-O0):
define i32 @create_rawpkt(i8* %0, i8* %1, i16 zeroext %2, i32 %3, i8* %4, i8* %5) {
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i16
%10 = alloca i32
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i32
store i8* %0, i8** %7
store i8* %1, i8** %8
store i16 %2, i16* %9
store i32 %3, i32* %10
store i8* %4, i8** %11
store i8* %5, i8** %12
store i32 0, i32* %13
store i32 0, i32* %13
br label %14
14: ; preds = %27, %6
%15 = load i32, i32* %13
%16 = icmp slt i32 %15, 6
br i1 %16, label %17, label %30
17: ; preds = %14
%18 = load i8*, i8** %7
%19 = load i32, i32* %13
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds i8, i8* %18, i64 %20
%22 = load i8, i8* %21
%23 = load i8*, i8** %12
%24 = load i32, i32* %13
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
store i8 %22, i8* %26
br label %27
27: ; preds = %17
%28 = load i32, i32* %13
%29 = add nsw i32 %28, 1
store i32 %29, i32* %13
br label %14
30: ; preds = %14
store i32 0, i32* %13
br label %31
31: ; preds = %45, %30
%32 = load i32, i32* %13
%33 = icmp slt i32 %32, 6
br i1 %33, label %34, label %48
34: ; preds = %31
%35 = load i8*, i8** %8
%36 = load i32, i32* %13
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %35, i64 %37
%39 = load i8, i8* %38
%40 = load i8*, i8** %12
%41 = load i32, i32* %13
%42 = add nsw i32 %41, 6
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8, i8* %40, i64 %43
store i8 %39, i8* %44
br label %45
45: ; preds = %34
%46 = load i32, i32* %13
%47 = add nsw i32 %46, 1
store i32 %47, i32* %13
br label %31
48: ; preds = %31
%49 = load i16, i16* %9
%50 = call zeroext i16 @htons(i16 zeroext %49)
%51 = load i8*, i8** %12
%52 = getelementptr inbounds i8, i8* %51, i64 12
%53 = bitcast i8* %52 to i16*
store i16 %50, i16* %53
store i32 0, i32* %13
br label %54
54: ; preds = %69, %48
%55 = load i32, i32* %13
%56 = load i32, i32* %10
%57 = icmp slt i32 %55, %56
br i1 %57, label %58, label %72
58: ; preds = %54
%59 = load i8*, i8** %11
%60 = load i32, i32* %13
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %59, i64 %61
%63 = load i8, i8* %62
%64 = load i8*, i8** %12
%65 = load i32, i32* %13
%66 = add nsw i32 14, %65
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %64, i64 %67
store i8 %63, i8* %68
br label %69
69: ; preds = %58
%70 = load i32, i32* %13
%71 = add nsw i32 %70, 1
store i32 %71, i32* %13
br label %54
72: ; preds = %54
store i32 0, i32* %13
br label %73
73: ; preds = %86, %72
%74 = load i32, i32* %13
%75 = load i32, i32* %10
%76 = sub nsw i32 46, %75
%77 = icmp slt i32 %74, %76
br i1 %77, label %78, label %89
78: ; preds = %73
%79 = load i8*, i8** %12
%80 = load i32, i32* %13
%81 = add nsw i32 14, %80
%82 = load i32, i32* %10
%83 = add nsw i32 %81, %82
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %79, i64 %84
store i8 0, i8* %85
br label %86
86: ; preds = %78
%87 = load i32, i32* %13
%88 = add nsw i32 %87, 1
store i32 %88, i32* %13
br label %73
89: ; preds = %73
%90 = load i32, i32* %10
%91 = add nsw i32 %90, 14
%92 = icmp sgt i32 60, %91
br i1 %92, label %93, label %94
93: ; preds = %89
br label %97
94: ; preds = %89
%95 = load i32, i32* %10
%96 = add nsw i32 %95, 14
br label %97
97: ; preds = %94, %93
%98 = phi i32 [ 60, %93 ], [ %96, %94 ]
ret i32 %98
}

LLVM IR (-O2):
define i32 @create_rawpkt(i8* nocapture %0, i8* nocapture %1, i16 zeroext %2, i32 %3, i8* nocapture %4, i8* nocapture writeonly %5) {
%7 = load i8, i8* %0
store i8 %7, i8* %5
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = load i8, i8* %8
%10 = getelementptr inbounds i8, i8* %5, i64 1
store i8 %9, i8* %10
%11 = getelementptr inbounds i8, i8* %0, i64 2
%12 = load i8, i8* %11
%13 = getelementptr inbounds i8, i8* %5, i64 2
store i8 %12, i8* %13
%14 = getelementptr inbounds i8, i8* %0, i64 3
%15 = load i8, i8* %14
%16 = getelementptr inbounds i8, i8* %5, i64 3
store i8 %15, i8* %16
%17 = getelementptr inbounds i8, i8* %0, i64 4
%18 = load i8, i8* %17
%19 = getelementptr inbounds i8, i8* %5, i64 4
store i8 %18, i8* %19
%20 = getelementptr inbounds i8, i8* %0, i64 5
%21 = load i8, i8* %20
%22 = getelementptr inbounds i8, i8* %5, i64 5
store i8 %21, i8* %22
%23 = load i8, i8* %1
%24 = getelementptr inbounds i8, i8* %5, i64 6
store i8 %23, i8* %24
%25 = getelementptr inbounds i8, i8* %1, i64 1
%26 = load i8, i8* %25
%27 = getelementptr inbounds i8, i8* %5, i64 7
store i8 %26, i8* %27
%28 = getelementptr inbounds i8, i8* %1, i64 2
%29 = load i8, i8* %28
%30 = getelementptr inbounds i8, i8* %5, i64 8
store i8 %29, i8* %30
%31 = getelementptr inbounds i8, i8* %1, i64 3
%32 = load i8, i8* %31
%33 = getelementptr inbounds i8, i8* %5, i64 9
store i8 %32, i8* %33
%34 = getelementptr inbounds i8, i8* %1, i64 4
%35 = load i8, i8* %34
%36 = getelementptr inbounds i8, i8* %5, i64 10
store i8 %35, i8* %36
%37 = getelementptr inbounds i8, i8* %1, i64 5
%38 = load i8, i8* %37
%39 = getelementptr inbounds i8, i8* %5, i64 11
store i8 %38, i8* %39
%40 = tail call zeroext i16 @htons(i16 zeroext %2)
%41 = getelementptr inbounds i8, i8* %5, i64 12
%42 = bitcast i8* %41 to i16*
store i16 %40, i16* %42
%43 = icmp sgt i32 %3, 0
br i1 %43, label %44, label %180
44: ; preds = %6
%45 = zext i32 %3 to i64
%46 = icmp ult i32 %3, 8
br i1 %46, label %159, label %47
47: ; preds = %44
%48 = getelementptr i8, i8* %5, i64 14
%49 = add nuw nsw i64 %45, 14
%50 = getelementptr i8, i8* %5, i64 %49
%51 = getelementptr i8, i8* %4, i64 %45
%52 = icmp ult i8* %48, %51
%53 = icmp ugt i8* %50, %4
%54 = and i1 %52, %53
br i1 %54, label %159, label %55
55: ; preds = %47
%56 = icmp ult i32 %3, 32
br i1 %56, label %144, label %57
57: ; preds = %55
%58 = and i64 %45, 4294967264
%59 = add nsw i64 %58, -32
%60 = lshr exact i64 %59, 5
%61 = add nuw nsw i64 %60, 1
%62 = and i64 %61, 3
%63 = icmp ult i64 %59, 96
br i1 %63, label %119, label %64
64: ; preds = %57
%65 = and i64 %61, 1152921504606846972
br label %66
66: ; preds = %66, %64
%67 = phi i64 [ 0, %64 ], [ %116, %66 ]
%68 = phi i64 [ 0, %64 ], [ %117, %66 ]
%69 = getelementptr inbounds i8, i8* %4, i64 %67
%70 = bitcast i8* %69 to <16 x i8>*
%71 = load <16 x i8>, <16 x i8>* %70
%72 = getelementptr inbounds i8, i8* %69, i64 16
%73 = bitcast i8* %72 to <16 x i8>*
%74 = load <16 x i8>, <16 x i8>* %73
%75 = or i64 %67, 14
%76 = getelementptr inbounds i8, i8* %5, i64 %75
%77 = bitcast i8* %76 to <16 x i8>*
store <16 x i8> %71, <16 x i8>* %77
%78 = getelementptr inbounds i8, i8* %76, i64 16
%79 = bitcast i8* %78 to <16 x i8>*
store <16 x i8> %74, <16 x i8>* %79
%80 = or i64 %67, 32
%81 = getelementptr inbounds i8, i8* %4, i64 %80
%82 = bitcast i8* %81 to <16 x i8>*
%83 = load <16 x i8>, <16 x i8>* %82
%84 = getelementptr inbounds i8, i8* %81, i64 16
%85 = bitcast i8* %84 to <16 x i8>*
%86 = load <16 x i8>, <16 x i8>* %85
%87 = or i64 %67, 46
%88 = getelementptr inbounds i8, i8* %5, i64 %87
%89 = bitcast i8* %88 to <16 x i8>*
store <16 x i8> %83, <16 x i8>* %89
%90 = getelementptr inbounds i8, i8* %88, i64 16
%91 = bitcast i8* %90 to <16 x i8>*
store <16 x i8> %86, <16 x i8>* %91
%92 = or i64 %67, 64
%93 = getelementptr inbounds i8, i8* %4, i64 %92
%94 = bitcast i8* %93 to <16 x i8>*
%95 = load <16 x i8>, <16 x i8>* %94
%96 = getelementptr inbounds i8, i8* %93, i64 16
%97 = bitcast i8* %96 to <16 x i8>*
%98 = load <16 x i8>, <16 x i8>* %97
%99 = or i64 %67, 78
%100 = getelementptr inbounds i8, i8* %5, i64 %99
%101 = bitcast i8* %100 to <16 x i8>*
store <16 x i8> %95, <16 x i8>* %101
%102 = getelementptr inbounds i8, i8* %100, i64 16
%103 = bitcast i8* %102 to <16 x i8>*
store <16 x i8> %98, <16 x i8>* %103
%104 = or i64 %67, 96
%105 = getelementptr inbounds i8, i8* %4, i64 %104
%106 = bitcast i8* %105 to <16 x i8>*
%107 = load <16 x i8>, <16 x i8>* %106
%108 = getelementptr inbounds i8, i8* %105, i64 16
%109 = bitcast i8* %108 to <16 x i8>*
%110 = load <16 x i8>, <16 x i8>* %109
%111 = or i64 %67, 110
%112 = getelementptr inbounds i8, i8* %5, i64 %111
%113 = bitcast i8* %112 to <16 x i8>*
store <16 x i8> %107, <16 x i8>* %113
%114 = getelementptr inbounds i8, i8* %112, i64 16
%115 = bitcast i8* %114 to <16 x i8>*
store <16 x i8> %110, <16 x i8>* %115
%116 = add nuw i64 %67, 128
%117 = add i64 %68, 4
%118 = icmp eq i64 %117, %65
br i1 %118, label %119, label %66
119: ; preds = %66, %57
%120 = phi i64 [ 0, %57 ], [ %116, %66 ]
%121 = icmp eq i64 %62, 0
br i1 %121, label %139, label %122
122: ; preds = %119, %122
%123 = phi i64 [ %136, %122 ], [ %120, %119 ]
%124 = phi i64 [ %137, %122 ], [ 0, %119 ]
%125 = getelementptr inbounds i8, i8* %4, i64 %123
%126 = bitcast i8* %125 to <16 x i8>*
%127 = load <16 x i8>, <16 x i8>* %126
%128 = getelementptr inbounds i8, i8* %125, i64 16
%129 = bitcast i8* %128 to <16 x i8>*
%130 = load <16 x i8>, <16 x i8>* %129
%131 = or i64 %123, 14
%132 = getelementptr inbounds i8, i8* %5, i64 %131
%133 = bitcast i8* %132 to <16 x i8>*
store <16 x i8> %127, <16 x i8>* %133
%134 = getelementptr inbounds i8, i8* %132, i64 16
%135 = bitcast i8* %134 to <16 x i8>*
store <16 x i8> %130, <16 x i8>* %135
%136 = add nuw i64 %123, 32
%137 = add i64 %124, 1
%138 = icmp eq i64 %137, %62
br i1 %138, label %139, label %122
139: ; preds = %122, %119
%140 = icmp eq i64 %58, %45
br i1 %140, label %178, label %141
141: ; preds = %139
%142 = and i64 %45, 24
%143 = icmp eq i64 %142, 0
br i1 %143, label %159, label %144
144: ; preds = %55, %141
%145 = phi i64 [ %58, %141 ], [ 0, %55 ]
%146 = and i64 %45, 4294967288
br label %147
147: ; preds = %147, %144
%148 = phi i64 [ %145, %144 ], [ %155, %147 ]
%149 = getelementptr inbounds i8, i8* %4, i64 %148
%150 = bitcast i8* %149 to <8 x i8>*
%151 = load <8 x i8>, <8 x i8>* %150
%152 = add nuw nsw i64 %148, 14
%153 = getelementptr inbounds i8, i8* %5, i64 %152
%154 = bitcast i8* %153 to <8 x i8>*
store <8 x i8> %151, <8 x i8>* %154
%155 = add nuw i64 %148, 8
%156 = icmp eq i64 %155, %146
br i1 %156, label %157, label %147
157: ; preds = %147
%158 = icmp eq i64 %146, %45
br i1 %158, label %178, label %159
159: ; preds = %47, %44, %141, %157
%160 = phi i64 [ 0, %44 ], [ 0, %47 ], [ %58, %141 ], [ %146, %157 ]
%161 = xor i64 %160, -1
%162 = add nsw i64 %161, %45
%163 = and i64 %45, 3
%164 = icmp eq i64 %163, 0
br i1 %164, label %175, label %165
165: ; preds = %159, %165
%166 = phi i64 [ %172, %165 ], [ %160, %159 ]
%167 = phi i64 [ %173, %165 ], [ 0, %159 ]
%168 = getelementptr inbounds i8, i8* %4, i64 %166
%169 = load i8, i8* %168
%170 = add nuw nsw i64 %166, 14
%171 = getelementptr inbounds i8, i8* %5, i64 %170
store i8 %169, i8* %171
%172 = add nuw nsw i64 %166, 1
%173 = add i64 %167, 1
%174 = icmp eq i64 %173, %163
br i1 %174, label %175, label %165
175: ; preds = %165, %159
%176 = phi i64 [ %160, %159 ], [ %172, %165 ]
%177 = icmp ult i64 %162, 3
br i1 %177, label %178, label %296
178: ; preds = %175, %296, %157, %139
%179 = icmp slt i32 %3, 46
br i1 %179, label %180, label %342
180: ; preds = %6, %178
%181 = sub i32 46, %3
%182 = add nsw i32 %3, 14
%183 = call i32 @llvm.smax.i32(i32 %181, i32 1)
%184 = zext i32 %183 to i64
%185 = icmp ult i32 %183, 8
br i1 %185, label %277, label %186
186: ; preds = %180
%187 = add nsw i64 %184, -1
%188 = add i32 %3, 14
%189 = trunc i64 %187 to i32
%190 = add i32 %188, %189
%191 = icmp slt i32 %190, %188
%192 = icmp ugt i64 %187, 4294967295
%193 = or i1 %191, %192
br i1 %193, label %277, label %194
194: ; preds = %186
%195 = icmp ult i32 %183, 32
br i1 %195, label %263, label %196
196: ; preds = %194
%197 = and i64 %184, 2147483616
%198 = add nsw i64 %197, -32
%199 = lshr exact i64 %198, 5
%200 = add nuw nsw i64 %199, 1
%201 = and i64 %200, 3
%202 = icmp ult i64 %198, 96
br i1 %202, label %242, label %203
203: ; preds = %196
%204 = and i64 %200, 1152921504606846972
br label %205
205: ; preds = %205, %203
%206 = phi i64 [ 0, %203 ], [ %239, %205 ]
%207 = phi i64 [ 0, %203 ], [ %240, %205 ]
%208 = trunc i64 %206 to i32
%209 = add i32 %182, %208
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %5, i64 %210
%212 = bitcast i8* %211 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %212
%213 = getelementptr inbounds i8, i8* %211, i64 16
%214 = bitcast i8* %213 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %214
%215 = trunc i64 %206 to i32
%216 = or i32 %215, 32
%217 = add i32 %182, %216
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds i8, i8* %5, i64 %218
%220 = bitcast i8* %219 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %220
%221 = getelementptr inbounds i8, i8* %219, i64 16
%222 = bitcast i8* %221 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %222
%223 = trunc i64 %206 to i32
%224 = or i32 %223, 64
%225 = add i32 %182, %224
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds i8, i8* %5, i64 %226
%228 = bitcast i8* %227 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %228
%229 = getelementptr inbounds i8, i8* %227, i64 16
%230 = bitcast i8* %229 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %230
%231 = trunc i64 %206 to i32
%232 = or i32 %231, 96
%233 = add i32 %182, %232
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i8, i8* %5, i64 %234
%236 = bitcast i8* %235 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %236
%237 = getelementptr inbounds i8, i8* %235, i64 16
%238 = bitcast i8* %237 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %238
%239 = add nuw i64 %206, 128
%240 = add i64 %207, 4
%241 = icmp eq i64 %240, %204
br i1 %241, label %242, label %205
242: ; preds = %205, %196
%243 = phi i64 [ 0, %196 ], [ %239, %205 ]
%244 = icmp eq i64 %201, 0
br i1 %244, label %258, label %245
245: ; preds = %242, %245
%246 = phi i64 [ %255, %245 ], [ %243, %242 ]
%247 = phi i64 [ %256, %245 ], [ 0, %242 ]
%248 = trunc i64 %246 to i32
%249 = add i32 %182, %248
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds i8, i8* %5, i64 %250
%252 = bitcast i8* %251 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %252
%253 = getelementptr inbounds i8, i8* %251, i64 16
%254 = bitcast i8* %253 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %254
%255 = add nuw i64 %246, 32
%256 = add i64 %247, 1
%257 = icmp eq i64 %256, %201
br i1 %257, label %258, label %245
258: ; preds = %245, %242
%259 = icmp eq i64 %197, %184
br i1 %259, label %342, label %260
260: ; preds = %258
%261 = and i64 %184, 24
%262 = icmp eq i64 %261, 0
br i1 %262, label %277, label %263
263: ; preds = %194, %260
%264 = phi i64 [ %197, %260 ], [ 0, %194 ]
%265 = and i64 %184, 2147483640
br label %266
266: ; preds = %266, %263
%267 = phi i64 [ %264, %263 ], [ %273, %266 ]
%268 = trunc i64 %267 to i32
%269 = add i32 %182, %268
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds i8, i8* %5, i64 %270
%272 = bitcast i8* %271 to <8 x i8>*
store <8 x i8> zeroinitializer, <8 x i8>* %272
%273 = add nuw i64 %267, 8
%274 = icmp eq i64 %273, %265
br i1 %274, label %275, label %266
275: ; preds = %266
%276 = icmp eq i64 %265, %184
br i1 %276, label %342, label %277
277: ; preds = %186, %180, %260, %275
%278 = phi i64 [ 0, %180 ], [ 0, %186 ], [ %197, %260 ], [ %265, %275 ]
%279 = xor i64 %278, -1
%280 = add nsw i64 %279, %184
%281 = and i64 %184, 3
%282 = icmp eq i64 %281, 0
br i1 %282, label %293, label %283
283: ; preds = %277, %283
%284 = phi i64 [ %290, %283 ], [ %278, %277 ]
%285 = phi i64 [ %291, %283 ], [ 0, %277 ]
%286 = trunc i64 %284 to i32
%287 = add i32 %182, %286
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds i8, i8* %5, i64 %288
store i8 0, i8* %289
%290 = add nuw nsw i64 %284, 1
%291 = add i64 %285, 1
%292 = icmp eq i64 %291, %281
br i1 %292, label %293, label %283
293: ; preds = %283, %277
%294 = phi i64 [ %278, %277 ], [ %290, %283 ]
%295 = icmp ult i64 %280, 3
br i1 %295, label %342, label %319
296: ; preds = %175, %296
%297 = phi i64 [ %317, %296 ], [ %176, %175 ]
%298 = getelementptr inbounds i8, i8* %4, i64 %297
%299 = load i8, i8* %298
%300 = add nuw nsw i64 %297, 14
%301 = getelementptr inbounds i8, i8* %5, i64 %300
store i8 %299, i8* %301
%302 = add nuw nsw i64 %297, 1
%303 = getelementptr inbounds i8, i8* %4, i64 %302
%304 = load i8, i8* %303
%305 = add nuw nsw i64 %297, 15
%306 = getelementptr inbounds i8, i8* %5, i64 %305
store i8 %304, i8* %306
%307 = add nuw nsw i64 %297, 2
%308 = getelementptr inbounds i8, i8* %4, i64 %307
%309 = load i8, i8* %308
%310 = add nuw nsw i64 %297, 16
%311 = getelementptr inbounds i8, i8* %5, i64 %310
store i8 %309, i8* %311
%312 = add nuw nsw i64 %297, 3
%313 = getelementptr inbounds i8, i8* %4, i64 %312
%314 = load i8, i8* %313
%315 = add nuw nsw i64 %297, 17
%316 = getelementptr inbounds i8, i8* %5, i64 %315
store i8 %314, i8* %316
%317 = add nuw nsw i64 %297, 4
%318 = icmp eq i64 %317, %45
br i1 %318, label %178, label %296
319: ; preds = %293, %319
%320 = phi i64 [ %340, %319 ], [ %294, %293 ]
%321 = trunc i64 %320 to i32
%322 = add i32 %182, %321
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds i8, i8* %5, i64 %323
store i8 0, i8* %324
%325 = trunc i64 %320 to i32
%326 = add i32 %325, 1
%327 = add i32 %182, %326
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds i8, i8* %5, i64 %328
store i8 0, i8* %329
%330 = trunc i64 %320 to i32
%331 = add i32 %330, 2
%332 = add i32 %182, %331
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds i8, i8* %5, i64 %333
store i8 0, i8* %334
%335 = trunc i64 %320 to i32
%336 = add i32 %335, 3
%337 = add i32 %182, %336
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds i8, i8* %5, i64 %338
store i8 0, i8* %339
%340 = add nuw nsw i64 %320, 4
%341 = icmp eq i64 %340, %184
br i1 %341, label %342, label %319
342: ; preds = %293, %319, %258, %275, %178
%343 = icmp sgt i32 %3, 46
%344 = select i1 %343, i32 %3, i32 46
%345 = add nuw nsw i32 %344, 14
ret i32 %345
}