#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 ntohs(unsigned short);
int strlen(char *);
char *dns_expand(char *comp, char *base, char *end, char *host, char *hend) {
  unsigned short x;
  if (comp > end || host > hend)
    return NULL;
  while (*comp) {
    if (comp < end) {
      x = ntohs(*((unsigned short *)comp));
      if ((x & 0xc000) == 0xc000) {
        x = (x & ~0xc000);
        if (base + x >= comp)
          return NULL;
        if (!dns_expand(base + x, base, end, host, hend))
          return NULL;
        host = host + strlen(host);
        return comp + 2;
      }
    }
    x = *((unsigned char *)comp++);
    if (comp + x > end)
      return NULL;
    if (host + x + 1 > hend)
      return NULL;
    while (x--)
      *(host++) = *(comp++);
    if (!*comp)
      *host = '\0';
    else
      *(host++) = '.';
  }
  return comp + 1;
}


x86 assembly (clang, -O0):
<dns_expand>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x10(%rbp),%rax
cmp    -0x20(%rbp),%rax
ja     1168 <dns_expand+0x38>
mov    -0x28(%rbp),%rax
cmp    -0x30(%rbp),%rax
jbe    1175 <dns_expand+0x45>
movq   $0x0,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
jmp    117a <dns_expand+0x4a>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1334 <dns_expand+0x204>
mov    -0x10(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    125b <dns_expand+0x12b>
mov    -0x10(%rbp),%rax
movzwl (%rax),%edi
call   1050 <ntohs@plt>
mov    %ax,-0x32(%rbp)
movzwl -0x32(%rbp),%eax
and    $0xc000,%eax
cmp    $0xc000,%eax
jne    1256 <dns_expand+0x126>
movzwl -0x32(%rbp),%eax
and    $0xffff3fff,%eax
mov    %ax,-0x32(%rbp)
mov    -0x18(%rbp),%rax
movzwl -0x32(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
cmp    -0x10(%rbp),%rax
jb     11eb <dns_expand+0xbb>
movq   $0x0,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
mov    -0x18(%rbp),%rdi
movzwl -0x32(%rbp),%eax
cltq
add    %rax,%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x30(%rbp),%r8
call   1030 <dns_expand@plt>
cmp    $0x0,%rax
jne    1224 <dns_expand+0xf4>
movq   $0x0,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
mov    -0x28(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
jmp    125b <dns_expand+0x12b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %ax,-0x32(%rbp)
mov    -0x10(%rbp),%rax
movzwl -0x32(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
cmp    -0x20(%rbp),%rax
jbe    1296 <dns_expand+0x166>
movq   $0x0,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
mov    -0x28(%rbp),%rax
movzwl -0x32(%rbp),%ecx
movslq %ecx,%rcx
add    %rcx,%rax
add    $0x1,%rax
cmp    -0x30(%rbp),%rax
jbe    12bf <dns_expand+0x18f>
movq   $0x0,-0x8(%rbp)
jmp    1340 <dns_expand+0x210>
jmp    12c4 <dns_expand+0x194>
mov    -0x32(%rbp),%ax
mov    %ax,%cx
add    $0xffff,%cx
mov    %cx,-0x32(%rbp)
cmp    $0x0,%ax
je     1304 <dns_expand+0x1d4>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %cl,(%rax)
jmp    12c4 <dns_expand+0x194>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    131d <dns_expand+0x1ed>
mov    -0x28(%rbp),%rax
movb   $0x0,(%rax)
jmp    132f <dns_expand+0x1ff>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movb   $0x2e,(%rax)
jmp    117a <dns_expand+0x4a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dns_expand>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %r12d,%r12d
cmp    %rdx,%rdi
ja     13d6 <dns_expand+0x2a6>
mov    %r8,%r14
mov    %rcx,%rbx
mov    %rsi,(%rsp)
cmp    %r8,%rcx
ja     13d6 <dns_expand+0x2a6>
mov    %rdi,%rbp
mov    (%rdi),%r15b
test   %r15b,%r15b
je     13cf <dns_expand+0x29f>
mov    %rdx,%r13
xor    %r12d,%r12d
jmp    11a4 <dns_expand+0x74>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %ebx,%ebx
cmpb   $0x0,0x0(%rbp)
setne  %bl
mov    $0x2e,%eax
cmove  %r12d,%eax
add    %rsi,%rbx
mov    %al,(%rsi)
mov    0x0(%rbp),%r15b
test   %r15b,%r15b
je     13cf <dns_expand+0x29f>
cmp    %r13,%rbp
jae    11c1 <dns_expand+0x91>
movzwl 0x0(%rbp),%edi
call   1050 <ntohs@plt>
movzwl %ax,%ecx
cmp    $0xc000,%ecx
jae    13e8 <dns_expand+0x2b8>
movzbl %r15b,%ecx
lea    (%rcx,%rbp,1),%rax
add    $0x1,%rax
cmp    %r13,%rax
ja     13d6 <dns_expand+0x2a6>
lea    (%rbx,%rcx,1),%rax
add    $0x1,%rax
cmp    %r14,%rax
ja     13d6 <dns_expand+0x2a6>
lea    0x1(%rbp),%rax
mov    %ecx,%edx
add    $0xffffffff,%edx
cmp    $0x1f,%dx
jb     1320 <dns_expand+0x1f0>
movzwl %cx,%r9d
lea    -0x1(%r9),%esi
movzwl %si,%esi
lea    (%rsi,%rbp,1),%rdi
add    $0x2,%rdi
cmp    %rdi,%rbx
jae    1222 <dns_expand+0xf2>
add    %rbx,%rsi
add    $0x1,%rsi
cmp    %rsi,%rax
jb     1320 <dns_expand+0x1f0>
movzwl %dx,%r8d
add    $0x1,%r8
mov    %r8d,%edi
and    $0xffffffe0,%edi
lea    -0x20(%rdi),%rdx
mov    %rdx,%rcx
shr    $0x5,%rcx
add    $0x1,%rcx
mov    %ecx,%esi
and    $0x3,%esi
cmp    $0x60,%rdx
jae    124e <dns_expand+0x11e>
xor    %edx,%edx
jmp    12b9 <dns_expand+0x189>
and    $0xfffffffffffffffc,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups 0x1(%rbp,%rdx,1),%xmm0
movups 0x11(%rbp,%rdx,1),%xmm1
movups %xmm0,(%rbx,%rdx,1)
movups %xmm1,0x10(%rbx,%rdx,1)
movups 0x21(%rbp,%rdx,1),%xmm0
movups 0x31(%rbp,%rdx,1),%xmm1
movups %xmm0,0x20(%rbx,%rdx,1)
movups %xmm1,0x30(%rbx,%rdx,1)
movups 0x41(%rbp,%rdx,1),%xmm0
movups 0x51(%rbp,%rdx,1),%xmm1
movups %xmm0,0x40(%rbx,%rdx,1)
movups %xmm1,0x50(%rbx,%rdx,1)
movups 0x61(%rbp,%rdx,1),%xmm0
movups 0x71(%rbp,%rdx,1),%xmm1
movups %xmm0,0x60(%rbx,%rdx,1)
movups %xmm1,0x70(%rbx,%rdx,1)
sub    $0xffffffffffffff80,%rdx
add    $0xfffffffffffffffc,%rcx
jne    1260 <dns_expand+0x130>
sub    %edi,%r9d
test   %rsi,%rsi
je     12fb <dns_expand+0x1cb>
lea    (%rdx,%rbp,1),%rcx
add    $0x11,%rcx
add    %rbx,%rdx
add    $0x10,%rdx
shl    $0x5,%rsi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
movups -0x10(%rcx,%rbp,1),%xmm0
movups (%rcx,%rbp,1),%xmm1
movups %xmm0,-0x10(%rdx,%rbp,1)
movups %xmm1,(%rdx,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rsi
jne    12e0 <dns_expand+0x1b0>
add    %rdi,%rbx
add    %rdi,%rax
mov    %r9d,%ecx
mov    %rax,%rbp
mov    %rbx,%rsi
cmp    %rdi,%r8
je     1180 <dns_expand+0x50>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    -0x1(%rcx),%r8d
test   $0x7,%cl
je     1370 <dns_expand+0x240>
movzwl %cx,%edi
and    $0x7,%edi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rax,%rsi,1),%edx
mov    %dl,(%rbx,%rsi,1)
add    $0x1,%rsi
cmp    %si,%di
jne    1340 <dns_expand+0x210>
sub    %esi,%ecx
add    %rsi,%rbx
add    %rsi,%rax
mov    %rax,%rbp
mov    %rbx,%rsi
cmp    $0x7,%r8w
jae    1380 <dns_expand+0x250>
jmp    1180 <dns_expand+0x50>
nopw   0x0(%rax,%rax,1)
cmp    $0x7,%r8w
jb     1180 <dns_expand+0x50>
nopl   0x0(%rax,%rax,1)
movzbl (%rax),%edx
mov    %dl,(%rbx)
movzbl 0x1(%rax),%edx
mov    %dl,0x1(%rbx)
movzbl 0x2(%rax),%edx
mov    %dl,0x2(%rbx)
movzbl 0x3(%rax),%edx
mov    %dl,0x3(%rbx)
movzbl 0x4(%rax),%edx
mov    %dl,0x4(%rbx)
movzbl 0x5(%rax),%edx
mov    %dl,0x5(%rbx)
movzbl 0x6(%rax),%edx
mov    %dl,0x6(%rbx)
movzbl 0x7(%rax),%edx
add    $0x8,%rax
mov    %dl,0x7(%rbx)
add    $0x8,%rbx
add    $0xfff8,%cx
jne    1380 <dns_expand+0x250>
mov    %rax,%rbp
mov    %rbx,%rsi
jmp    1180 <dns_expand+0x50>
add    $0x1,%rbp
mov    %rbp,%r12
mov    %r12,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
and    $0x3fff,%eax
mov    (%rsp),%rsi
add    %rsi,%rax
cmp    %rbp,%rax
jae    141d <dns_expand+0x2ed>
mov    %rax,%rdi
mov    %r13,%rdx
mov    %rbx,%rcx
mov    %r14,%r8
call   1030 <dns_expand@plt>
test   %rax,%rax
je     141d <dns_expand+0x2ed>
mov    %rbx,%rdi
call   1040 <strlen@plt>
add    $0x2,%rbp
jmp    13d3 <dns_expand+0x2a3>
xor    %r12d,%r12d
jmp    13d6 <dns_expand+0x2a6>

LLVM IR (-O0):
define i8* @dns_expand(i8* %0, i8* %1, i8* %2, i8* %3, i8* %4) {
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i16
store i8* %0, i8** %7
store i8* %1, i8** %8
store i8* %2, i8** %9
store i8* %3, i8** %10
store i8* %4, i8** %11
%13 = load i8*, i8** %7
%14 = load i8*, i8** %9
%15 = icmp ugt i8* %13, %14
br i1 %15, label %20, label %16
16: ; preds = %5
%17 = load i8*, i8** %10
%18 = load i8*, i8** %11
%19 = icmp ugt i8* %17, %18
br i1 %19, label %20, label %21
20: ; preds = %16, %5
store i8* null, i8** %6
br label %121
21: ; preds = %16
br label %22
22: ; preds = %117, %21
%23 = load i8*, i8** %7
%24 = load i8, i8* %23
%25 = icmp ne i8 %24, 0
br i1 %25, label %26, label %118
26: ; preds = %22
%27 = load i8*, i8** %7
%28 = load i8*, i8** %9
%29 = icmp ult i8* %27, %28
br i1 %29, label %30, label %74
30: ; preds = %26
%31 = load i8*, i8** %7
%32 = bitcast i8* %31 to i16*
%33 = load i16, i16* %32
%34 = call zeroext i16 @ntohs(i16 zeroext %33)
store i16 %34, i16* %12
%35 = load i16, i16* %12
%36 = zext i16 %35 to i32
%37 = and i32 %36, 49152
%38 = icmp eq i32 %37, 49152
br i1 %38, label %39, label %73
39: ; preds = %30
%40 = load i16, i16* %12
%41 = zext i16 %40 to i32
%42 = and i32 %41, -49153
%43 = trunc i32 %42 to i16
store i16 %43, i16* %12
%44 = load i8*, i8** %8
%45 = load i16, i16* %12
%46 = zext i16 %45 to i32
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %44, i64 %47
%49 = load i8*, i8** %7
%50 = icmp uge i8* %48, %49
br i1 %50, label %51, label %52
51: ; preds = %39
store i8* null, i8** %6
br label %121
52: ; preds = %39
%53 = load i8*, i8** %8
%54 = load i16, i16* %12
%55 = zext i16 %54 to i32
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i8, i8* %53, i64 %56
%58 = load i8*, i8** %8
%59 = load i8*, i8** %9
%60 = load i8*, i8** %10
%61 = load i8*, i8** %11
%62 = call i8* @dns_expand(i8* %57, i8* %58, i8* %59, i8* %60, i8* %61)
%63 = icmp ne i8* %62, null
br i1 %63, label %65, label %64
64: ; preds = %52
store i8* null, i8** %6
br label %121
65: ; preds = %52
%66 = load i8*, i8** %10
%67 = load i8*, i8** %10
%68 = call i32 @strlen(i8* %67)
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %66, i64 %69
store i8* %70, i8** %10
%71 = load i8*, i8** %7
%72 = getelementptr inbounds i8, i8* %71, i64 2
store i8* %72, i8** %6
br label %121
73: ; preds = %30
br label %74
74: ; preds = %73, %26
%75 = load i8*, i8** %7
%76 = getelementptr inbounds i8, i8* %75, i32 1
store i8* %76, i8** %7
%77 = load i8, i8* %75
%78 = zext i8 %77 to i16
store i16 %78, i16* %12
%79 = load i8*, i8** %7
%80 = load i16, i16* %12
%81 = zext i16 %80 to i32
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8, i8* %79, i64 %82
%84 = load i8*, i8** %9
%85 = icmp ugt i8* %83, %84
br i1 %85, label %86, label %87
86: ; preds = %74
store i8* null, i8** %6
br label %121
87: ; preds = %74
%88 = load i8*, i8** %10
%89 = load i16, i16* %12
%90 = zext i16 %89 to i32
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %88, i64 %91
%93 = getelementptr inbounds i8, i8* %92, i64 1
%94 = load i8*, i8** %11
%95 = icmp ugt i8* %93, %94
br i1 %95, label %96, label %97
96: ; preds = %87
store i8* null, i8** %6
br label %121
97: ; preds = %87
br label %98
98: ; preds = %102, %97
%99 = load i16, i16* %12
%100 = add i16 %99, -1
store i16 %100, i16* %12
%101 = icmp ne i16 %99, 0
br i1 %101, label %102, label %108
102: ; preds = %98
%103 = load i8*, i8** %7
%104 = getelementptr inbounds i8, i8* %103, i32 1
store i8* %104, i8** %7
%105 = load i8, i8* %103
%106 = load i8*, i8** %10
%107 = getelementptr inbounds i8, i8* %106, i32 1
store i8* %107, i8** %10
store i8 %105, i8* %106
br label %98
108: ; preds = %98
%109 = load i8*, i8** %7
%110 = load i8, i8* %109
%111 = icmp ne i8 %110, 0
br i1 %111, label %114, label %112
112: ; preds = %108
%113 = load i8*, i8** %10
store i8 0, i8* %113
br label %117
114: ; preds = %108
%115 = load i8*, i8** %10
%116 = getelementptr inbounds i8, i8* %115, i32 1
store i8* %116, i8** %10
store i8 46, i8* %115
br label %117
117: ; preds = %114, %112
br label %22
118: ; preds = %22
%119 = load i8*, i8** %7
%120 = getelementptr inbounds i8, i8* %119, i64 1
store i8* %120, i8** %6
br label %121
121: ; preds = %118, %96, %86, %65, %64, %51, %20
%122 = load i8*, i8** %6
ret i8* %122
}

LLVM IR (-O2):
define i8* @dns_expand(i8* %0, i8* %1, i8* %2, i8* %3, i8* %4) {
%6 = icmp ugt i8* %0, %2
%7 = icmp ugt i8* %3, %4
%8 = or i1 %6, %7
br i1 %8, label %210, label %9
9: ; preds = %5
%10 = load i8, i8* %0
%11 = icmp eq i8 %10, 0
br i1 %11, label %207, label %12
12: ; preds = %9, %196
%13 = phi i8 [ %205, %196 ], [ %10, %9 ]
%14 = phi i8* [ %204, %196 ], [ %3, %9 ]
%15 = phi i8* [ %197, %196 ], [ %0, %9 ]
%16 = icmp ult i8* %15, %2
br i1 %16, label %17, label %33
17: ; preds = %12
%18 = bitcast i8* %15 to i16*
%19 = load i16, i16* %18
%20 = tail call zeroext i16 @ntohs(i16 zeroext %19)
%21 = icmp ugt i16 %20, -16385
br i1 %21, label %22, label %33
22: ; preds = %17
%23 = and i16 %20, 16383
%24 = zext i16 %23 to i64
%25 = getelementptr inbounds i8, i8* %1, i64 %24
%26 = icmp ult i8* %25, %15
br i1 %26, label %27, label %210
27: ; preds = %22
%28 = tail call i8* @dns_expand(i8* %25, i8* %1, i8* %2, i8* %14, i8* %4)
%29 = icmp eq i8* %28, null
br i1 %29, label %210, label %30
30: ; preds = %27
%31 = tail call i32 @strlen(i8* %14)
%32 = getelementptr inbounds i8, i8* %15, i64 2
br label %210
33: ; preds = %17, %12
%34 = getelementptr i8, i8* %15, i64 1
%35 = zext i8 %13 to i64
%36 = getelementptr inbounds i8, i8* %34, i64 %35
%37 = icmp ugt i8* %36, %2
%38 = getelementptr inbounds i8, i8* %14, i64 1
%39 = getelementptr inbounds i8, i8* %38, i64 %35
%40 = icmp ugt i8* %39, %4
%41 = select i1 %37, i1 true, i1 %40
br i1 %41, label %210, label %42
42: ; preds = %33
%43 = zext i8 %13 to i16
%44 = add nsw i16 %43, -1
%45 = zext i16 %44 to i64
%46 = add nuw nsw i64 %45, 1
%47 = icmp ult i16 %44, 31
br i1 %47, label %141, label %48
48: ; preds = %42
%49 = getelementptr i8, i8* %14, i64 1
%50 = add nsw i16 %43, -1
%51 = zext i16 %50 to i64
%52 = getelementptr i8, i8* %49, i64 %51
%53 = getelementptr i8, i8* %15, i64 2
%54 = getelementptr i8, i8* %53, i64 %51
%55 = icmp ult i8* %14, %54
%56 = icmp ult i8* %34, %52
%57 = and i1 %55, %56
br i1 %57, label %141, label %58
58: ; preds = %48
%59 = and i64 %46, 131040
%60 = trunc i64 %59 to i16
%61 = sub i16 %43, %60
%62 = getelementptr i8, i8* %14, i64 %59
%63 = getelementptr i8, i8* %34, i64 %59
%64 = add nsw i64 %59, -32
%65 = lshr exact i64 %64, 5
%66 = add nuw nsw i64 %65, 1
%67 = and i64 %66, 3
%68 = icmp ult i64 %64, 96
br i1 %68, label %120, label %69
69: ; preds = %58
%70 = and i64 %66, 1152921504606846972
br label %71
71: ; preds = %71, %69
%72 = phi i64 [ 0, %69 ], [ %117, %71 ]
%73 = phi i64 [ 0, %69 ], [ %118, %71 ]
%74 = getelementptr i8, i8* %14, i64 %72
%75 = getelementptr i8, i8* %34, i64 %72
%76 = bitcast i8* %75 to <16 x i8>*
%77 = load <16 x i8>, <16 x i8>* %76
%78 = getelementptr i8, i8* %75, i64 16
%79 = bitcast i8* %78 to <16 x i8>*
%80 = load <16 x i8>, <16 x i8>* %79
%81 = bitcast i8* %74 to <16 x i8>*
store <16 x i8> %77, <16 x i8>* %81
%82 = getelementptr i8, i8* %74, i64 16
%83 = bitcast i8* %82 to <16 x i8>*
store <16 x i8> %80, <16 x i8>* %83
%84 = or i64 %72, 32
%85 = getelementptr i8, i8* %14, i64 %84
%86 = getelementptr i8, i8* %34, i64 %84
%87 = bitcast i8* %86 to <16 x i8>*
%88 = load <16 x i8>, <16 x i8>* %87
%89 = getelementptr i8, i8* %86, i64 16
%90 = bitcast i8* %89 to <16 x i8>*
%91 = load <16 x i8>, <16 x i8>* %90
%92 = bitcast i8* %85 to <16 x i8>*
store <16 x i8> %88, <16 x i8>* %92
%93 = getelementptr i8, i8* %85, i64 16
%94 = bitcast i8* %93 to <16 x i8>*
store <16 x i8> %91, <16 x i8>* %94
%95 = or i64 %72, 64
%96 = getelementptr i8, i8* %14, i64 %95
%97 = getelementptr i8, i8* %34, i64 %95
%98 = bitcast i8* %97 to <16 x i8>*
%99 = load <16 x i8>, <16 x i8>* %98
%100 = getelementptr i8, i8* %97, i64 16
%101 = bitcast i8* %100 to <16 x i8>*
%102 = load <16 x i8>, <16 x i8>* %101
%103 = bitcast i8* %96 to <16 x i8>*
store <16 x i8> %99, <16 x i8>* %103
%104 = getelementptr i8, i8* %96, i64 16
%105 = bitcast i8* %104 to <16 x i8>*
store <16 x i8> %102, <16 x i8>* %105
%106 = or i64 %72, 96
%107 = getelementptr i8, i8* %14, i64 %106
%108 = getelementptr i8, i8* %34, i64 %106
%109 = bitcast i8* %108 to <16 x i8>*
%110 = load <16 x i8>, <16 x i8>* %109
%111 = getelementptr i8, i8* %108, i64 16
%112 = bitcast i8* %111 to <16 x i8>*
%113 = load <16 x i8>, <16 x i8>* %112
%114 = bitcast i8* %107 to <16 x i8>*
store <16 x i8> %110, <16 x i8>* %114
%115 = getelementptr i8, i8* %107, i64 16
%116 = bitcast i8* %115 to <16 x i8>*
store <16 x i8> %113, <16 x i8>* %116
%117 = add nuw i64 %72, 128
%118 = add i64 %73, 4
%119 = icmp eq i64 %118, %70
br i1 %119, label %120, label %71
120: ; preds = %71, %58
%121 = phi i64 [ 0, %58 ], [ %117, %71 ]
%122 = icmp eq i64 %67, 0
br i1 %122, label %139, label %123
123: ; preds = %120, %123
%124 = phi i64 [ %136, %123 ], [ %121, %120 ]
%125 = phi i64 [ %137, %123 ], [ 0, %120 ]
%126 = getelementptr i8, i8* %14, i64 %124
%127 = getelementptr i8, i8* %34, i64 %124
%128 = bitcast i8* %127 to <16 x i8>*
%129 = load <16 x i8>, <16 x i8>* %128
%130 = getelementptr i8, i8* %127, i64 16
%131 = bitcast i8* %130 to <16 x i8>*
%132 = load <16 x i8>, <16 x i8>* %131
%133 = bitcast i8* %126 to <16 x i8>*
store <16 x i8> %129, <16 x i8>* %133
%134 = getelementptr i8, i8* %126, i64 16
%135 = bitcast i8* %134 to <16 x i8>*
store <16 x i8> %132, <16 x i8>* %135
%136 = add nuw i64 %124, 32
%137 = add i64 %125, 1
%138 = icmp eq i64 %137, %67
br i1 %138, label %139, label %123
139: ; preds = %123, %120
%140 = icmp eq i64 %46, %59
br i1 %140, label %196, label %141
141: ; preds = %48, %42, %139
%142 = phi i16 [ %43, %48 ], [ %43, %42 ], [ %61, %139 ]
%143 = phi i8* [ %14, %48 ], [ %14, %42 ], [ %62, %139 ]
%144 = phi i8* [ %34, %48 ], [ %34, %42 ], [ %63, %139 ]
%145 = add i16 %142, -1
%146 = and i16 %142, 7
%147 = icmp eq i16 %146, 0
br i1 %147, label %159, label %148
148: ; preds = %141, %148
%149 = phi i16 [ %153, %148 ], [ %142, %141 ]
%150 = phi i8* [ %156, %148 ], [ %143, %141 ]
%151 = phi i8* [ %154, %148 ], [ %144, %141 ]
%152 = phi i16 [ %157, %148 ], [ 0, %141 ]
%153 = add i16 %149, -1
%154 = getelementptr inbounds i8, i8* %151, i64 1
%155 = load i8, i8* %151
%156 = getelementptr inbounds i8, i8* %150, i64 1
store i8 %155, i8* %150
%157 = add i16 %152, 1
%158 = icmp eq i16 %157, %146
br i1 %158, label %159, label %148
159: ; preds = %148, %141
%160 = phi i8* [ undef, %141 ], [ %154, %148 ]
%161 = phi i8* [ undef, %141 ], [ %156, %148 ]
%162 = phi i16 [ %142, %141 ], [ %153, %148 ]
%163 = phi i8* [ %143, %141 ], [ %156, %148 ]
%164 = phi i8* [ %144, %141 ], [ %154, %148 ]
%165 = icmp ult i16 %145, 7
br i1 %165, label %196, label %166
166: ; preds = %159, %166
%167 = phi i16 [ %191, %166 ], [ %162, %159 ]
%168 = phi i8* [ %194, %166 ], [ %163, %159 ]
%169 = phi i8* [ %192, %166 ], [ %164, %159 ]
%170 = getelementptr inbounds i8, i8* %169, i64 1
%171 = load i8, i8* %169
%172 = getelementptr inbounds i8, i8* %168, i64 1
store i8 %171, i8* %168
%173 = getelementptr inbounds i8, i8* %169, i64 2
%174 = load i8, i8* %170
%175 = getelementptr inbounds i8, i8* %168, i64 2
store i8 %174, i8* %172
%176 = getelementptr inbounds i8, i8* %169, i64 3
%177 = load i8, i8* %173
%178 = getelementptr inbounds i8, i8* %168, i64 3
store i8 %177, i8* %175
%179 = getelementptr inbounds i8, i8* %169, i64 4
%180 = load i8, i8* %176
%181 = getelementptr inbounds i8, i8* %168, i64 4
store i8 %180, i8* %178
%182 = getelementptr inbounds i8, i8* %169, i64 5
%183 = load i8, i8* %179
%184 = getelementptr inbounds i8, i8* %168, i64 5
store i8 %183, i8* %181
%185 = getelementptr inbounds i8, i8* %169, i64 6
%186 = load i8, i8* %182
%187 = getelementptr inbounds i8, i8* %168, i64 6
store i8 %186, i8* %184
%188 = getelementptr inbounds i8, i8* %169, i64 7
%189 = load i8, i8* %185
%190 = getelementptr inbounds i8, i8* %168, i64 7
store i8 %189, i8* %187
%191 = add i16 %167, -8
%192 = getelementptr inbounds i8, i8* %169, i64 8
%193 = load i8, i8* %188
%194 = getelementptr inbounds i8, i8* %168, i64 8
store i8 %193, i8* %190
%195 = icmp eq i16 %191, 0
br i1 %195, label %196, label %166
196: ; preds = %159, %166, %139
%197 = phi i8* [ %63, %139 ], [ %160, %159 ], [ %192, %166 ]
%198 = phi i8* [ %62, %139 ], [ %161, %159 ], [ %194, %166 ]
%199 = load i8, i8* %197
%200 = icmp eq i8 %199, 0
%201 = select i1 %200, i8 0, i8 46
%202 = xor i1 %200, true
%203 = zext i1 %202 to i64
%204 = getelementptr i8, i8* %198, i64 %203
store i8 %201, i8* %198
%205 = load i8, i8* %197
%206 = icmp eq i8 %205, 0
br i1 %206, label %207, label %12
207: ; preds = %196, %9
%208 = phi i8* [ %0, %9 ], [ %197, %196 ]
%209 = getelementptr inbounds i8, i8* %208, i64 1
br label %210
210: ; preds = %33, %27, %22, %5, %207, %30
%211 = phi i8* [ %32, %30 ], [ %209, %207 ], [ null, %5 ], [ null, %22 ], [ null, %27 ], [ null, %33 ]
ret i8* %211
}