void list_hex(unsigned int number, unsigned int length, char *destination) {
  int i, digit;
  for (i = 0; i < length; i++) {
    digit = (number >> (4 * (length - i - 1))) & 0xF;
    if (digit < 10)
      destination[i] = '0' + digit;
    else
      destination[i] = 'A' + digit - 10;
  }
  return;
}


x86 assembly (clang, -O0):
<list_hex>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
jae    1183 <list_hex+0x83>
mov    -0x4(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    -0x14(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
shr    %cl,%eax
and    $0xf,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0xa,-0x18(%rbp)
jge    115a <list_hex+0x5a>
mov    -0x18(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1170 <list_hex+0x70>
mov    -0x18(%rbp),%eax
add    $0x41,%eax
sub    $0xa,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1175 <list_hex+0x75>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1115 <list_hex+0x15>
pop    %rbp
ret

x86 assembly (clang, -O2):
<list_hex>:
push   %rax
test   %esi,%esi
je     182b <list_hex+0x72b>
mov    %esi,%r8d
cmp    $0x10,%esi
jae    1119 <list_hex+0x19>
xor    %r11d,%r11d
jmp    17e9 <list_hex+0x6e9>
mov    %r8d,%r11d
and    $0xfffffff0,%r11d
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm12
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm13
lea    -0x10(%r11),%rcx
mov    %rcx,%r9
shr    $0x4,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     182d <list_hex+0x72d>
mov    %r9,%rcx
and    $0xfffffffffffffffe,%rcx
movdqa 0xee4(%rip),%xmm8
movdqa 0xeeb(%rip),%xmm9
movdqa 0xef2(%rip),%xmm14
movdqa 0xef9(%rip),%xmm10
xor    %r10d,%r10d
nopw   0x0(%rax,%rax,1)
movdqa %xmm10,-0x40(%rsp)
movdqa %xmm14,-0x30(%rsp)
movdqa %xmm9,-0x20(%rsp)
movdqa %xmm8,-0x10(%rsp)
movdqa %xmm8,%xmm15
pcmpeqd %xmm0,%xmm0
pxor   %xmm0,%xmm15
movdqa %xmm9,%xmm1
pxor   %xmm0,%xmm1
movdqa %xmm14,%xmm2
pxor   %xmm0,%xmm2
movdqa %xmm10,%xmm4
pxor   %xmm0,%xmm4
paddd  %xmm12,%xmm4
paddd  %xmm12,%xmm2
paddd  %xmm12,%xmm1
paddd  %xmm12,%xmm15
pslld  $0x2,%xmm15
pslld  $0x2,%xmm1
pslld  $0x2,%xmm4
pshuflw $0xfe,%xmm4,%xmm0
movdqa %xmm13,%xmm7
psrld  %xmm0,%xmm7
pslld  $0x2,%xmm2
pshuflw $0x54,%xmm4,%xmm11
movdqa %xmm13,%xmm0
psrld  %xmm11,%xmm0
pshufd $0xee,%xmm4,%xmm4
pshuflw $0xfe,%xmm4,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
punpcklqdq %xmm7,%xmm0
pshuflw $0x54,%xmm4,%xmm3
movdqa %xmm13,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm5,%xmm4
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
shufps $0xcc,%xmm4,%xmm0
pshuflw $0x54,%xmm2,%xmm3
movdqa %xmm13,%xmm7
psrld  %xmm3,%xmm7
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm13,%xmm4
psrld  %xmm3,%xmm4
punpcklqdq %xmm5,%xmm7
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm13,%xmm3
psrld  %xmm2,%xmm3
punpckhqdq %xmm4,%xmm3
pshuflw $0xfe,%xmm1,%xmm2
movdqa %xmm13,%xmm4
psrld  %xmm2,%xmm4
shufps $0xcc,%xmm3,%xmm7
pshuflw $0x54,%xmm1,%xmm3
movdqa %xmm13,%xmm2
psrld  %xmm3,%xmm2
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
punpcklqdq %xmm4,%xmm2
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm13,%xmm3
psrld  %xmm1,%xmm3
punpckhqdq %xmm5,%xmm3
pshuflw $0xfe,%xmm15,%xmm1
movdqa %xmm13,%xmm4
psrld  %xmm1,%xmm4
shufps $0xcc,%xmm3,%xmm2
pshuflw $0x54,%xmm15,%xmm3
movdqa %xmm13,%xmm1
psrld  %xmm3,%xmm1
pshufd $0xee,%xmm15,%xmm3
pshuflw $0xfe,%xmm3,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
punpcklqdq %xmm4,%xmm1
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm13,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm6,%xmm4
shufps $0xcc,%xmm4,%xmm1
movaps 0xd71(%rip),%xmm11
andps  %xmm11,%xmm1
andps  %xmm11,%xmm2
andps  %xmm11,%xmm7
andps  %xmm11,%xmm0
movdqa 0xd68(%rip),%xmm15
movdqa %xmm15,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm15,%xmm4
pcmpgtd %xmm7,%xmm4
packssdw %xmm4,%xmm3
movdqa %xmm15,%xmm4
pcmpgtd %xmm2,%xmm4
movdqa %xmm15,%xmm5
pcmpgtd %xmm1,%xmm5
packssdw %xmm5,%xmm4
packsswb %xmm4,%xmm3
packuswb %xmm7,%xmm0
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm0
movdqa %xmm0,%xmm1
movdqa 0xd30(%rip),%xmm2
por    %xmm2,%xmm1
movdqa 0xd34(%rip),%xmm2
paddb  %xmm2,%xmm0
pand   %xmm3,%xmm1
pandn  %xmm0,%xmm3
por    %xmm1,%xmm3
movdqu %xmm3,(%rdx,%r10,1)
movdqa %xmm12,%xmm1
movdqa %xmm10,-0x80(%rsp)
psubd  %xmm10,%xmm1
pslld  $0x2,%xmm1
movdqa %xmm12,%xmm4
movdqa %xmm14,-0x70(%rsp)
psubd  %xmm14,%xmm4
pslld  $0x2,%xmm4
movdqa %xmm12,%xmm2
movdqa %xmm9,-0x60(%rsp)
psubd  %xmm9,%xmm2
pslld  $0x2,%xmm2
movdqa %xmm12,%xmm7
movdqa %xmm8,-0x50(%rsp)
psubd  %xmm8,%xmm7
pslld  $0x2,%xmm7
movdqa 0xc7e(%rip),%xmm5
paddd  %xmm5,%xmm7
paddd  %xmm5,%xmm2
paddd  %xmm5,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm13,%xmm3
psrld  %xmm0,%xmm3
paddd  %xmm5,%xmm4
pshuflw $0x54,%xmm1,%xmm5
movdqa %xmm13,%xmm0
psrld  %xmm5,%xmm0
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
punpcklqdq %xmm3,%xmm0
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm13,%xmm3
psrld  %xmm1,%xmm3
punpckhqdq %xmm6,%xmm3
pshuflw $0xfe,%xmm4,%xmm1
movdqa %xmm13,%xmm5
psrld  %xmm1,%xmm5
shufps $0xcc,%xmm3,%xmm0
pshuflw $0x54,%xmm4,%xmm3
movdqa %xmm13,%xmm1
psrld  %xmm3,%xmm1
pshufd $0xee,%xmm4,%xmm3
pshuflw $0xfe,%xmm3,%xmm4
movdqa %xmm13,%xmm6
psrld  %xmm4,%xmm6
punpcklqdq %xmm5,%xmm1
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm13,%xmm4
psrld  %xmm3,%xmm4
punpckhqdq %xmm6,%xmm4
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
shufps $0xcc,%xmm4,%xmm1
pshuflw $0x54,%xmm2,%xmm3
movdqa %xmm13,%xmm4
psrld  %xmm3,%xmm4
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm13,%xmm6
psrld  %xmm3,%xmm6
punpcklqdq %xmm5,%xmm4
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm13,%xmm3
psrld  %xmm2,%xmm3
punpckhqdq %xmm6,%xmm3
pshuflw $0xfe,%xmm7,%xmm2
movdqa %xmm13,%xmm5
psrld  %xmm2,%xmm5
shufps $0xcc,%xmm3,%xmm4
pshuflw $0x54,%xmm7,%xmm3
movdqa %xmm13,%xmm2
psrld  %xmm3,%xmm2
pshufd $0xee,%xmm7,%xmm3
pshuflw $0xfe,%xmm3,%xmm6
movdqa %xmm13,%xmm7
psrld  %xmm6,%xmm7
punpcklqdq %xmm5,%xmm2
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
punpckhqdq %xmm7,%xmm5
shufps $0xcc,%xmm5,%xmm2
andps  %xmm11,%xmm2
andps  %xmm11,%xmm4
andps  %xmm11,%xmm1
andps  %xmm11,%xmm0
movdqa %xmm15,%xmm3
pcmpgtd %xmm0,%xmm3
movdqa %xmm15,%xmm5
pcmpgtd %xmm1,%xmm5
packssdw %xmm5,%xmm3
movdqa %xmm15,%xmm5
pcmpgtd %xmm4,%xmm5
movdqa %xmm15,%xmm6
pcmpgtd %xmm2,%xmm6
packssdw %xmm6,%xmm5
packsswb %xmm5,%xmm3
packuswb %xmm1,%xmm0
packuswb %xmm2,%xmm4
packuswb %xmm4,%xmm0
movdqa %xmm0,%xmm1
por    0xb22(%rip),%xmm1
paddb  0xb2a(%rip),%xmm0
pand   %xmm3,%xmm1
pandn  %xmm0,%xmm3
movdqa -0x10(%rsp),%xmm8
por    %xmm1,%xmm3
movdqa -0x40(%rsp),%xmm10
movdqa -0x30(%rsp),%xmm14
movdqa -0x20(%rsp),%xmm9
movdqu %xmm3,0x10(%rdx,%r10,1)
add    $0x20,%r10
movdqa 0xaff(%rip),%xmm0
paddd  %xmm0,%xmm10
paddd  %xmm0,%xmm14
paddd  %xmm0,%xmm9
paddd  %xmm0,%xmm8
add    $0xfffffffffffffffe,%rcx
jne    1180 <list_hex+0x80>
movdqa 0xae9(%rip),%xmm2
movdqa %xmm2,%xmm1
psubd  -0x80(%rsp),%xmm1
movdqa %xmm2,%xmm4
psubd  -0x70(%rsp),%xmm4
movdqa %xmm2,%xmm3
psubd  -0x60(%rsp),%xmm3
psubd  -0x50(%rsp),%xmm2
test   $0x1,%r9b
je     17e4 <list_hex+0x6e4>
paddd  %xmm12,%xmm1
paddd  %xmm12,%xmm4
paddd  %xmm12,%xmm3
paddd  %xmm12,%xmm2
pslld  $0x2,%xmm2
pslld  $0x2,%xmm3
pslld  $0x2,%xmm4
pslld  $0x2,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm13,%xmm5
psrld  %xmm0,%xmm5
pshuflw $0x54,%xmm1,%xmm6
movdqa %xmm13,%xmm0
psrld  %xmm6,%xmm0
punpcklqdq %xmm5,%xmm0
pshufd $0xee,%xmm1,%xmm1
pshuflw $0xfe,%xmm1,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm13,%xmm5
psrld  %xmm1,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm0
pshuflw $0xfe,%xmm4,%xmm1
movdqa %xmm13,%xmm5
psrld  %xmm1,%xmm5
pshuflw $0x54,%xmm4,%xmm6
movdqa %xmm13,%xmm1
psrld  %xmm6,%xmm1
punpcklqdq %xmm5,%xmm1
pshufd $0xee,%xmm4,%xmm4
pshuflw $0xfe,%xmm4,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm4,%xmm4
movdqa %xmm13,%xmm5
psrld  %xmm4,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm1
pshuflw $0xfe,%xmm3,%xmm4
movdqa %xmm13,%xmm5
psrld  %xmm4,%xmm5
pshuflw $0x54,%xmm3,%xmm6
movdqa %xmm13,%xmm4
psrld  %xmm6,%xmm4
punpcklqdq %xmm5,%xmm4
pshufd $0xee,%xmm3,%xmm3
pshuflw $0xfe,%xmm3,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm3,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
punpckhqdq %xmm6,%xmm5
shufps $0xcc,%xmm5,%xmm4
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm13,%xmm5
psrld  %xmm3,%xmm5
pshuflw $0x54,%xmm2,%xmm6
movdqa %xmm13,%xmm3
psrld  %xmm6,%xmm3
punpcklqdq %xmm5,%xmm3
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm5
movdqa %xmm13,%xmm6
psrld  %xmm5,%xmm6
pshuflw $0x54,%xmm2,%xmm2
psrld  %xmm2,%xmm13
punpckhqdq %xmm6,%xmm13
shufps $0xcc,%xmm13,%xmm3
movaps 0x91a(%rip),%xmm2
andps  %xmm2,%xmm3
andps  %xmm2,%xmm4
andps  %xmm2,%xmm1
andps  %xmm2,%xmm0
movdqa 0x916(%rip),%xmm2
movdqa %xmm2,%xmm5
pcmpgtd %xmm0,%xmm5
movdqa %xmm2,%xmm6
pcmpgtd %xmm1,%xmm6
packssdw %xmm6,%xmm5
movdqa %xmm2,%xmm6
pcmpgtd %xmm4,%xmm6
pcmpgtd %xmm3,%xmm2
packssdw %xmm2,%xmm6
packsswb %xmm6,%xmm5
packuswb %xmm1,%xmm0
packuswb %xmm3,%xmm4
packuswb %xmm4,%xmm0
movdqa 0x8ea(%rip),%xmm1
por    %xmm0,%xmm1
paddb  0x8ee(%rip),%xmm0
pand   %xmm5,%xmm1
pandn  %xmm0,%xmm5
por    %xmm1,%xmm5
movdqu %xmm5,(%rdx,%r10,1)
cmp    %r8,%r11
je     182b <list_hex+0x72b>
sub    %r11d,%esi
lea    -0x4(,%rsi,4),%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %edi,%esi
shr    %cl,%esi
and    $0xf,%esi
lea    0x30(%rsi),%r9d
lea    0x37(%rsi),%eax
cmp    $0xa,%esi
movzbl %r9b,%esi
movzbl %al,%eax
cmovb  %esi,%eax
mov    %al,(%rdx,%r11,1)
add    $0x1,%r11
add    $0xfffffffc,%ecx
cmp    %r11,%r8
jne    1800 <list_hex+0x700>
pop    %rax
ret
movdqa 0x7cb(%rip),%xmm2
movdqa 0x7d3(%rip),%xmm3
movdqa 0x7db(%rip),%xmm4
movdqa 0x7e3(%rip),%xmm1
xor    %r10d,%r10d
test   $0x1,%r9b
jne    1625 <list_hex+0x525>
jmp    17e4 <list_hex+0x6e4>

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

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