void u1db__bin_to_hex(unsigned char *bin_in, int bin_count, char *hex_out) {
  int i;
  for (i = 0; i < bin_count; ++i) {
    hex_out[i * 2] = (bin_in[i] >> 4);
    hex_out[i * 2 + 1] = (bin_in[i] & 0x0F);
  }
  for (i = 0; i < bin_count * 2; ++i) {
    if (hex_out[i] < 10) {
      hex_out[i] += '0';
    } else {
      hex_out[i] += 'a' - 10;
    }
  }
}


x86 assembly (clang, -O0):
<u1db__bin_to_hex>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1175 <u1db__bin_to_hex+0x75>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
sar    $0x4,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
and    $0xf,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1116 <u1db__bin_to_hex+0x16>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jge    11de <u1db__bin_to_hex+0xde>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jge    11b9 <u1db__bin_to_hex+0xb9>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
add    $0x30,%edx
mov    %dl,(%rax,%rcx,1)
jmp    11cb <u1db__bin_to_hex+0xcb>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%edx
add    $0x57,%edx
mov    %dl,(%rax,%rcx,1)
jmp    11d0 <u1db__bin_to_hex+0xd0>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    117c <u1db__bin_to_hex+0x7c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<u1db__bin_to_hex>:
test   %esi,%esi
jle    146e <u1db__bin_to_hex+0x36e>
mov    %esi,%r8d
cmp    $0x8,%esi
jb     1122 <u1db__bin_to_hex+0x22>
lea    (%rdi,%r8,1),%rax
cmp    %rdx,%rax
jbe    1189 <u1db__bin_to_hex+0x89>
lea    (%rdx,%r8,2),%rax
cmp    %rdi,%rax
jbe    1189 <u1db__bin_to_hex+0x89>
xor    %ecx,%ecx
mov    %rcx,%r9
not    %r9
test   $0x1,%r8b
je     1146 <u1db__bin_to_hex+0x46>
mov    (%rdi,%rcx,1),%al
shr    $0x4,%al
mov    %al,(%rdx,%rcx,2)
mov    (%rdi,%rcx,1),%al
and    $0xf,%al
mov    %al,0x1(%rdx,%rcx,2)
or     $0x1,%rcx
add    %r8,%r9
je     1240 <u1db__bin_to_hex+0x140>
nop
movzbl (%rdi,%rcx,1),%eax
shr    $0x4,%al
mov    %al,(%rdx,%rcx,2)
movzbl (%rdi,%rcx,1),%eax
and    $0xf,%al
mov    %al,0x1(%rdx,%rcx,2)
movzbl 0x1(%rdi,%rcx,1),%eax
shr    $0x4,%al
mov    %al,0x2(%rdx,%rcx,2)
movzbl 0x1(%rdi,%rcx,1),%eax
and    $0xf,%al
mov    %al,0x3(%rdx,%rcx,2)
add    $0x2,%rcx
cmp    %rcx,%r8
jne    1150 <u1db__bin_to_hex+0x50>
jmp    1240 <u1db__bin_to_hex+0x140>
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rax
mov    %rax,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rax,%rax
je     146f <u1db__bin_to_hex+0x36f>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
xor    %eax,%eax
movdqa 0xe48(%rip),%xmm0
movdqa 0xe50(%rip),%xmm1
movq   (%rdi,%rax,1),%xmm2
movdqa %xmm2,%xmm3
psrlw  $0x4,%xmm3
pand   %xmm0,%xmm3
pand   %xmm1,%xmm2
punpcklbw %xmm2,%xmm3
movdqu %xmm3,(%rdx,%rax,2)
movq   0x8(%rdi,%rax,1),%xmm2
movdqa %xmm2,%xmm3
psrlw  $0x4,%xmm3
pand   %xmm0,%xmm3
pand   %xmm1,%xmm2
punpcklbw %xmm2,%xmm3
movdqu %xmm3,0x10(%rdx,%rax,2)
add    $0x10,%rax
add    $0xfffffffffffffffe,%r10
jne    11c0 <u1db__bin_to_hex+0xc0>
test   $0x1,%r9b
je     1237 <u1db__bin_to_hex+0x137>
movq   (%rdi,%rax,1),%xmm0
movdqa %xmm0,%xmm1
psrlw  $0x4,%xmm1
pand   0xdda(%rip),%xmm1
pand   0xde2(%rip),%xmm0
punpcklbw %xmm0,%xmm1
movdqu %xmm1,(%rdx,%rax,2)
cmp    %r8,%rcx
jne    1124 <u1db__bin_to_hex+0x24>
test   %esi,%esi
jle    146e <u1db__bin_to_hex+0x36e>
add    %esi,%esi
cmp    $0x2,%esi
mov    $0x1,%r9d
cmovge %esi,%r9d
cmp    $0x8,%r9d
jae    1264 <u1db__bin_to_hex+0x164>
xor    %ecx,%ecx
jmp    1444 <u1db__bin_to_hex+0x344>
cmp    $0x20,%r9d
jae    1271 <u1db__bin_to_hex+0x171>
xor    %ecx,%ecx
jmp    13eb <u1db__bin_to_hex+0x2eb>
mov    %r9d,%ecx
and    $0x7fffffe0,%ecx
lea    -0x20(%rcx),%rsi
mov    %rsi,%r8
shr    $0x5,%r8
add    $0x1,%r8
test   %rsi,%rsi
je     1480 <u1db__bin_to_hex+0x380>
mov    %r8,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %esi,%esi
movdqa 0xd7c(%rip),%xmm8
movdqa 0xd83(%rip),%xmm9
movdqa 0xd8b(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
movdqu (%rdx,%rsi,1),%xmm5
movdqu 0x10(%rdx,%rsi,1),%xmm6
movdqu 0x20(%rdx,%rsi,1),%xmm4
movdqu 0x30(%rdx,%rsi,1),%xmm3
movdqa %xmm8,%xmm7
pcmpgtb %xmm5,%xmm7
movdqa %xmm8,%xmm0
pcmpgtb %xmm6,%xmm0
movdqa %xmm7,%xmm1
pandn  %xmm9,%xmm1
pand   %xmm2,%xmm7
por    %xmm1,%xmm7
movdqa %xmm0,%xmm1
pandn  %xmm9,%xmm1
pand   %xmm2,%xmm0
por    %xmm1,%xmm0
paddb  %xmm5,%xmm7
paddb  %xmm6,%xmm0
movdqu %xmm7,(%rdx,%rsi,1)
movdqu %xmm0,0x10(%rdx,%rsi,1)
movdqa %xmm8,%xmm0
pcmpgtb %xmm4,%xmm0
movdqa %xmm8,%xmm1
pcmpgtb %xmm3,%xmm1
movdqa %xmm0,%xmm5
pandn  %xmm9,%xmm5
pand   %xmm2,%xmm0
por    %xmm5,%xmm0
movdqa %xmm1,%xmm5
pandn  %xmm9,%xmm5
pand   %xmm2,%xmm1
por    %xmm5,%xmm1
paddb  %xmm4,%xmm0
paddb  %xmm3,%xmm1
movdqu %xmm0,0x20(%rdx,%rsi,1)
movdqu %xmm1,0x30(%rdx,%rsi,1)
add    $0x40,%rsi
add    $0xfffffffffffffffe,%rdi
jne    12c0 <u1db__bin_to_hex+0x1c0>
test   $0x1,%r8b
je     13dc <u1db__bin_to_hex+0x2dc>
movdqu (%rdx,%rsi,1),%xmm0
movdqu 0x10(%rdx,%rsi,1),%xmm1
movdqa 0xc93(%rip),%xmm2
movdqa %xmm2,%xmm3
pcmpgtb %xmm0,%xmm3
pcmpgtb %xmm1,%xmm2
movdqa 0xc8f(%rip),%xmm4
movdqa %xmm3,%xmm5
pandn  %xmm4,%xmm5
movdqa 0xc8f(%rip),%xmm6
pand   %xmm6,%xmm3
por    %xmm5,%xmm3
movdqa %xmm2,%xmm5
pandn  %xmm4,%xmm5
pand   %xmm6,%xmm2
por    %xmm5,%xmm2
paddb  %xmm0,%xmm3
paddb  %xmm1,%xmm2
movdqu %xmm3,(%rdx,%rsi,1)
movdqu %xmm2,0x10(%rdx,%rsi,1)
cmp    %r9,%rcx
je     146e <u1db__bin_to_hex+0x36e>
test   $0x18,%r9b
je     1444 <u1db__bin_to_hex+0x344>
mov    %rcx,%rsi
mov    %r9d,%ecx
and    $0x7ffffff8,%ecx
movdqa 0xc51(%rip),%xmm0
movdqa 0xc59(%rip),%xmm1
movdqa 0xc61(%rip),%xmm2
nop
movq   (%rdx,%rsi,1),%xmm3
movdqa %xmm0,%xmm4
pcmpgtb %xmm3,%xmm4
movdqa %xmm4,%xmm5
pandn  %xmm1,%xmm5
pand   %xmm2,%xmm4
por    %xmm5,%xmm4
paddb  %xmm3,%xmm4
movq   %xmm4,(%rdx,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%rcx
jne    1410 <u1db__bin_to_hex+0x310>
cmp    %r9,%rcx
je     146e <u1db__bin_to_hex+0x36e>
mov    $0x30,%esi
nopl   0x0(%rax)
movzbl (%rdx,%rcx,1),%eax
cmp    $0xa,%al
mov    $0x57,%edi
cmovl  %esi,%edi
add    %al,%dil
mov    %dil,(%rdx,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r9
jne    1450 <u1db__bin_to_hex+0x350>
ret
xor    %eax,%eax
test   $0x1,%r9b
jne    1210 <u1db__bin_to_hex+0x110>
jmp    1237 <u1db__bin_to_hex+0x137>
xor    %esi,%esi
test   $0x1,%r8b
jne    137a <u1db__bin_to_hex+0x27a>
jmp    13dc <u1db__bin_to_hex+0x2dc>

LLVM IR (-O0):
define void @u1db__bin_to_hex(i8* %0, i32 %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32
store i8* %0, i8** %4
store i32 %1, i32* %5
store i8* %2, i8** %6
store i32 0, i32* %7
br label %8
8: ; preds = %40, %3
%9 = load i32, i32* %7
%10 = load i32, i32* %5
%11 = icmp slt i32 %9, %10
br i1 %11, label %12, label %43
12: ; preds = %8
%13 = load i8*, i8** %4
%14 = load i32, i32* %7
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i8, i8* %13, i64 %15
%17 = load i8, i8* %16
%18 = zext i8 %17 to i32
%19 = ashr i32 %18, 4
%20 = trunc i32 %19 to i8
%21 = load i8*, i8** %6
%22 = load i32, i32* %7
%23 = mul nsw i32 %22, 2
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i8, i8* %21, i64 %24
store i8 %20, i8* %25
%26 = load i8*, i8** %4
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
%30 = load i8, i8* %29
%31 = zext i8 %30 to i32
%32 = and i32 %31, 15
%33 = trunc i32 %32 to i8
%34 = load i8*, i8** %6
%35 = load i32, i32* %7
%36 = mul nsw i32 %35, 2
%37 = add nsw i32 %36, 1
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %34, i64 %38
store i8 %33, i8* %39
br label %40
40: ; preds = %12
%41 = load i32, i32* %7
%42 = add nsw i32 %41, 1
store i32 %42, i32* %7
br label %8
43: ; preds = %8
store i32 0, i32* %7
br label %44
44: ; preds = %76, %43
%45 = load i32, i32* %7
%46 = load i32, i32* %5
%47 = mul nsw i32 %46, 2
%48 = icmp slt i32 %45, %47
br i1 %48, label %49, label %79
49: ; preds = %44
%50 = load i8*, i8** %6
%51 = load i32, i32* %7
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
%56 = icmp slt i32 %55, 10
br i1 %56, label %57, label %66
57: ; preds = %49
%58 = load i8*, i8** %6
%59 = load i32, i32* %7
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i8, i8* %58, i64 %60
%62 = load i8, i8* %61
%63 = sext i8 %62 to i32
%64 = add nsw i32 %63, 48
%65 = trunc i32 %64 to i8
store i8 %65, i8* %61
br label %75
66: ; preds = %49
%67 = load i8*, i8** %6
%68 = load i32, i32* %7
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %67, i64 %69
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = add nsw i32 %72, 87
%74 = trunc i32 %73 to i8
store i8 %74, i8* %70
br label %75
75: ; preds = %66, %57
br label %76
76: ; preds = %75
%77 = load i32, i32* %7
%78 = add nsw i32 %77, 1
store i32 %78, i32* %7
br label %44
79: ; preds = %44
ret void
}

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