void hexstring2array(char *hexs, int slen, unsigned char *tab) {
  int i, j = 0;
  unsigned char val;
  for (i = 0; i < slen; i++) {
    val = hexs[j] > '9' ? hexs[j] - 0x37 : hexs[j] - 0x30;
    tab[i] = val << 4;
    val = hexs[j + 1] > '9' ? hexs[j + 1] - 0x37 : hexs[j + 1] - 0x30;
    tab[i] |= val & 0x0F;
    j += 2;
  }
}


x86 assembly (clang, -O0):
<hexstring2array>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1203 <hexstring2array+0x103>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    1155 <hexstring2array+0x55>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
mov    %eax,-0x28(%rbp)
jmp    1167 <hexstring2array+0x67>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %al,-0x21(%rbp)
movzbl -0x21(%rbp),%eax
shl    $0x4,%eax
mov    %al,%dl
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    11b7 <hexstring2array+0xb7>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
mov    %eax,-0x2c(%rbp)
jmp    11ce <hexstring2array+0xce>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %al,-0x21(%rbp)
movzbl -0x21(%rbp),%esi
and    $0xf,%esi
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movzbl (%rax,%rcx,1),%edx
or     %esi,%edx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    111d <hexstring2array+0x1d>
pop    %rbp
ret

x86 assembly (clang, -O2):
<hexstring2array>:
push   %rbp
push   %r14
push   %rbx
test   %esi,%esi
jle    1181 <hexstring2array+0x81>
mov    %esi,%r9d
xor    %ecx,%ecx
cmp    $0x8,%esi
jb     1124 <hexstring2array+0x24>
lea    (%rdi,%r9,2),%rax
cmp    %rdx,%rax
jbe    1186 <hexstring2array+0x86>
lea    (%rdx,%r9,1),%rax
cmp    %rdi,%rax
jbe    1186 <hexstring2array+0x86>
xor    %r8d,%r8d
xor    %r10d,%r10d
add    %r8,%rdx
sub    %r8,%r9
lea    (%r10,%rdi,1),%rax
add    $0x1,%rax
mov    $0x39,%esi
nopl   (%rax)
movzbl -0x1(%rax,%rcx,2),%ebx
cmp    $0x3a,%bl
mov    $0x0,%edi
cmovge %esi,%edi
add    %bl,%dil
shl    $0x4,%dil
mov    %dil,(%rdx,%rcx,1)
movzbl (%rax,%rcx,2),%ebx
cmp    $0x3a,%bl
mov    $0x0,%ebp
cmovge %esi,%ebp
add    %bl,%bpl
and    $0xf,%bpl
or     %dil,%bpl
mov    %bpl,(%rdx,%rcx,1)
add    $0x1,%rcx
cmp    %rcx,%r9
jne    1140 <hexstring2array+0x40>
pop    %rbx
pop    %r14
pop    %rbp
ret
cmp    $0x10,%esi
jae    1193 <hexstring2array+0x93>
xor    %r8d,%r8d
jmp    13d8 <hexstring2array+0x2d8>
mov    %r9d,%r8d
and    $0xfffffff0,%r8d
lea    0x1f(%rdi),%r10
xor    %eax,%eax
movdqa 0xe58(%rip),%xmm0
movdqa 0xe5f(%rip),%xmm8
movdqa 0xe67(%rip),%xmm2
nopl   0x0(%rax)
movzbl -0x1(%r10,%rax,2),%esi
movd   %esi,%xmm3
movzbl -0x3(%r10,%rax,2),%esi
movd   %esi,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0x5(%r10,%rax,2),%esi
movd   %esi,%xmm3
movzbl -0x7(%r10,%rax,2),%esi
movd   %esi,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm4,%xmm5
movzbl -0x9(%r10,%rax,2),%esi
movd   %esi,%xmm3
movzbl -0xb(%r10,%rax,2),%esi
movd   %esi,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0xd(%r10,%rax,2),%esi
movd   %esi,%xmm6
movzbl -0xf(%r10,%rax,2),%esi
movd   %esi,%xmm3
punpcklbw %xmm6,%xmm3
punpcklwd %xmm4,%xmm3
punpckldq %xmm5,%xmm3
movzbl -0x11(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x13(%r10,%rax,2),%esi
movd   %esi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0x15(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x17(%r10,%rax,2),%esi
movd   %esi,%xmm6
punpcklbw %xmm4,%xmm6
punpcklwd %xmm5,%xmm6
movzbl -0x19(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x1b(%r10,%rax,2),%esi
movd   %esi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0x1d(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x1f(%r10,%rax,2),%esi
movd   %esi,%xmm7
punpcklbw %xmm4,%xmm7
punpcklwd %xmm5,%xmm7
punpckldq %xmm6,%xmm7
punpcklqdq %xmm3,%xmm7
movdqa %xmm7,%xmm3
pcmpgtb %xmm0,%xmm3
pand   %xmm0,%xmm3
paddb  %xmm7,%xmm3
psllw  $0x4,%xmm3
pand   %xmm8,%xmm3
movdqu %xmm3,(%rdx,%rax,1)
movzbl (%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x2(%r10,%rax,2),%esi
movd   %esi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0x4(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0x6(%r10,%rax,2),%esi
movd   %esi,%xmm6
punpcklbw %xmm4,%xmm6
punpcklwd %xmm5,%xmm6
movzbl -0x8(%r10,%rax,2),%esi
movd   %esi,%xmm4
movzbl -0xa(%r10,%rax,2),%esi
movd   %esi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0xc(%r10,%rax,2),%esi
movd   %esi,%xmm7
movzbl -0xe(%r10,%rax,2),%esi
movd   %esi,%xmm4
punpcklbw %xmm7,%xmm4
punpcklwd %xmm5,%xmm4
punpckldq %xmm6,%xmm4
movzbl -0x10(%r10,%rax,2),%esi
movd   %esi,%xmm5
movzbl -0x12(%r10,%rax,2),%esi
movd   %esi,%xmm6
punpcklbw %xmm5,%xmm6
movzbl -0x14(%r10,%rax,2),%esi
movd   %esi,%xmm5
movzbl -0x16(%r10,%rax,2),%esi
movd   %esi,%xmm7
punpcklbw %xmm5,%xmm7
punpcklwd %xmm6,%xmm7
movzbl -0x18(%r10,%rax,2),%esi
movd   %esi,%xmm5
movzbl -0x1a(%r10,%rax,2),%esi
movd   %esi,%xmm6
punpcklbw %xmm5,%xmm6
movzbl -0x1c(%r10,%rax,2),%esi
movd   %esi,%xmm5
movzbl -0x1e(%r10,%rax,2),%esi
movd   %esi,%xmm1
punpcklbw %xmm5,%xmm1
punpcklwd %xmm6,%xmm1
punpckldq %xmm7,%xmm1
punpcklqdq %xmm4,%xmm1
movdqa %xmm1,%xmm4
pcmpgtb %xmm0,%xmm4
pand   %xmm0,%xmm4
paddb  %xmm1,%xmm4
pand   %xmm2,%xmm4
por    %xmm3,%xmm4
movdqu %xmm4,(%rdx,%rax,1)
add    $0x10,%rax
cmp    %rax,%r8
jne    11c0 <hexstring2array+0xc0>
cmp    %r9,%r8
je     1181 <hexstring2array+0x81>
test   $0x8,%r9b
jne    13d8 <hexstring2array+0x2d8>
lea    (%r8,%r8,1),%r10
jmp    112a <hexstring2array+0x2a>
mov    %r8,%rsi
mov    %r9d,%r8d
and    $0xfffffff8,%r8d
lea    (%r8,%r8,1),%r10
movdqa 0xc42(%rip),%xmm0
movdqa 0xc1a(%rip),%xmm1
movdqa 0xc42(%rip),%xmm2
xchg   %ax,%ax
movzbl (%rdi,%rsi,2),%r11d
movzbl 0x4(%rdi,%rsi,2),%eax
movzbl 0x8(%rdi,%rsi,2),%ebx
movzbl 0x6(%rdi,%rsi,2),%ebp
shl    $0x8,%ebp
or     %eax,%ebp
movzbl 0x2(%rdi,%rsi,2),%eax
shl    $0x8,%eax
or     %r11d,%eax
movd   %eax,%xmm4
pinsrw $0x1,%ebp,%xmm4
movzbl 0xc(%rdi,%rsi,2),%eax
movzbl 0xa(%rdi,%rsi,2),%ebp
shl    $0x8,%ebp
or     %ebx,%ebp
pinsrw $0x2,%ebp,%xmm4
movzbl 0xe(%rdi,%rsi,2),%ebp
shl    $0x8,%ebp
or     %eax,%ebp
pinsrw $0x3,%ebp,%xmm4
movdqa %xmm4,%xmm3
pcmpgtb %xmm0,%xmm3
pand   %xmm0,%xmm3
paddb  %xmm4,%xmm3
psllw  $0x4,%xmm3
pand   %xmm1,%xmm3
movq   %xmm3,(%rdx,%rsi,1)
movzbl 0x1(%rdi,%rsi,2),%eax
movzbl 0x5(%rdi,%rsi,2),%ebp
movzbl 0x9(%rdi,%rsi,2),%r14d
movzbl 0xd(%rdi,%rsi,2),%r11d
movzbl 0x7(%rdi,%rsi,2),%ebx
shl    $0x8,%ebx
or     %ebp,%ebx
movzbl 0x3(%rdi,%rsi,2),%ebp
shl    $0x8,%ebp
or     %eax,%ebp
movd   %ebp,%xmm4
pinsrw $0x1,%ebx,%xmm4
movzbl 0xb(%rdi,%rsi,2),%eax
shl    $0x8,%eax
or     %r14d,%eax
pinsrw $0x2,%eax,%xmm4
movzbl 0xf(%rdi,%rsi,2),%eax
shl    $0x8,%eax
or     %r11d,%eax
pinsrw $0x3,%eax,%xmm4
movdqa %xmm4,%xmm5
pcmpgtb %xmm0,%xmm5
pand   %xmm0,%xmm5
paddb  %xmm4,%xmm5
pand   %xmm2,%xmm5
por    %xmm3,%xmm5
movq   %xmm5,(%rdx,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%r8
jne    1400 <hexstring2array+0x300>
cmp    %r9,%r8
jne    112a <hexstring2array+0x2a>
jmp    1181 <hexstring2array+0x81>

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

LLVM IR (-O2):
define void @hexstring2array(i8* nocapture %0, i32 %1, i8* nocapture %2) {
%4 = icmp sgt i32 %1, 0
br i1 %4, label %5, label %279
5: ; preds = %3
%6 = zext i32 %1 to i64
%7 = icmp ult i32 %1, 8
br i1 %7, label %255, label %8
8: ; preds = %5
%9 = getelementptr i8, i8* %2, i64 %6
%10 = shl nuw nsw i64 %6, 1
%11 = getelementptr i8, i8* %0, i64 %10
%12 = icmp ugt i8* %11, %2
%13 = icmp ugt i8* %9, %0
%14 = and i1 %12, %13
br i1 %14, label %255, label %15
15: ; preds = %8
%16 = icmp ult i32 %1, 16
br i1 %16, label %169, label %17
17: ; preds = %15
%18 = and i64 %6, 4294967280
br label %19
19: ; preds = %19, %17
%20 = phi i64 [ 0, %17 ], [ %161, %19 ]
%21 = shl i64 %20, 1
%22 = or i64 %21, 2
%23 = or i64 %21, 4
%24 = or i64 %21, 6
%25 = or i64 %21, 8
%26 = or i64 %21, 10
%27 = or i64 %21, 12
%28 = or i64 %21, 14
%29 = or i64 %21, 16
%30 = or i64 %21, 18
%31 = or i64 %21, 20
%32 = or i64 %21, 22
%33 = or i64 %21, 24
%34 = or i64 %21, 26
%35 = or i64 %21, 28
%36 = or i64 %21, 30
%37 = getelementptr inbounds i8, i8* %0, i64 %21
%38 = getelementptr inbounds i8, i8* %0, i64 %22
%39 = getelementptr inbounds i8, i8* %0, i64 %23
%40 = getelementptr inbounds i8, i8* %0, i64 %24
%41 = getelementptr inbounds i8, i8* %0, i64 %25
%42 = getelementptr inbounds i8, i8* %0, i64 %26
%43 = getelementptr inbounds i8, i8* %0, i64 %27
%44 = getelementptr inbounds i8, i8* %0, i64 %28
%45 = getelementptr inbounds i8, i8* %0, i64 %29
%46 = getelementptr inbounds i8, i8* %0, i64 %30
%47 = getelementptr inbounds i8, i8* %0, i64 %31
%48 = getelementptr inbounds i8, i8* %0, i64 %32
%49 = getelementptr inbounds i8, i8* %0, i64 %33
%50 = getelementptr inbounds i8, i8* %0, i64 %34
%51 = getelementptr inbounds i8, i8* %0, i64 %35
%52 = getelementptr inbounds i8, i8* %0, i64 %36
%53 = load i8, i8* %37
%54 = load i8, i8* %38
%55 = load i8, i8* %39
%56 = load i8, i8* %40
%57 = load i8, i8* %41
%58 = load i8, i8* %42
%59 = load i8, i8* %43
%60 = load i8, i8* %44
%61 = load i8, i8* %45
%62 = load i8, i8* %46
%63 = load i8, i8* %47
%64 = load i8, i8* %48
%65 = load i8, i8* %49
%66 = load i8, i8* %50
%67 = load i8, i8* %51
%68 = load i8, i8* %52
%69 = insertelement <16 x i8> poison, i8 %53, i64 0
%70 = insertelement <16 x i8> %69, i8 %54, i64 1
%71 = insertelement <16 x i8> %70, i8 %55, i64 2
%72 = insertelement <16 x i8> %71, i8 %56, i64 3
%73 = insertelement <16 x i8> %72, i8 %57, i64 4
%74 = insertelement <16 x i8> %73, i8 %58, i64 5
%75 = insertelement <16 x i8> %74, i8 %59, i64 6
%76 = insertelement <16 x i8> %75, i8 %60, i64 7
%77 = insertelement <16 x i8> %76, i8 %61, i64 8
%78 = insertelement <16 x i8> %77, i8 %62, i64 9
%79 = insertelement <16 x i8> %78, i8 %63, i64 10
%80 = insertelement <16 x i8> %79, i8 %64, i64 11
%81 = insertelement <16 x i8> %80, i8 %65, i64 12
%82 = insertelement <16 x i8> %81, i8 %66, i64 13
%83 = insertelement <16 x i8> %82, i8 %67, i64 14
%84 = insertelement <16 x i8> %83, i8 %68, i64 15
%85 = icmp sgt <16 x i8> %84, <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>
%86 = select <16 x i1> %85, <16 x i8> <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>, <16 x i8> zeroinitializer
%87 = add <16 x i8> %86, %84
%88 = shl <16 x i8> %87, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
%89 = getelementptr inbounds i8, i8* %2, i64 %20
%90 = bitcast i8* %89 to <16 x i8>*
store <16 x i8> %88, <16 x i8>* %90
%91 = or i64 %21, 1
%92 = or i64 %21, 3
%93 = or i64 %21, 5
%94 = or i64 %21, 7
%95 = or i64 %21, 9
%96 = or i64 %21, 11
%97 = or i64 %21, 13
%98 = or i64 %21, 15
%99 = or i64 %21, 17
%100 = or i64 %21, 19
%101 = or i64 %21, 21
%102 = or i64 %21, 23
%103 = or i64 %21, 25
%104 = or i64 %21, 27
%105 = or i64 %21, 29
%106 = or i64 %21, 31
%107 = getelementptr inbounds i8, i8* %0, i64 %91
%108 = getelementptr inbounds i8, i8* %0, i64 %92
%109 = getelementptr inbounds i8, i8* %0, i64 %93
%110 = getelementptr inbounds i8, i8* %0, i64 %94
%111 = getelementptr inbounds i8, i8* %0, i64 %95
%112 = getelementptr inbounds i8, i8* %0, i64 %96
%113 = getelementptr inbounds i8, i8* %0, i64 %97
%114 = getelementptr inbounds i8, i8* %0, i64 %98
%115 = getelementptr inbounds i8, i8* %0, i64 %99
%116 = getelementptr inbounds i8, i8* %0, i64 %100
%117 = getelementptr inbounds i8, i8* %0, i64 %101
%118 = getelementptr inbounds i8, i8* %0, i64 %102
%119 = getelementptr inbounds i8, i8* %0, i64 %103
%120 = getelementptr inbounds i8, i8* %0, i64 %104
%121 = getelementptr inbounds i8, i8* %0, i64 %105
%122 = getelementptr inbounds i8, i8* %0, i64 %106
%123 = load i8, i8* %107
%124 = load i8, i8* %108
%125 = load i8, i8* %109
%126 = load i8, i8* %110
%127 = load i8, i8* %111
%128 = load i8, i8* %112
%129 = load i8, i8* %113
%130 = load i8, i8* %114
%131 = load i8, i8* %115
%132 = load i8, i8* %116
%133 = load i8, i8* %117
%134 = load i8, i8* %118
%135 = load i8, i8* %119
%136 = load i8, i8* %120
%137 = load i8, i8* %121
%138 = load i8, i8* %122
%139 = insertelement <16 x i8> poison, i8 %123, i64 0
%140 = insertelement <16 x i8> %139, i8 %124, i64 1
%141 = insertelement <16 x i8> %140, i8 %125, i64 2
%142 = insertelement <16 x i8> %141, i8 %126, i64 3
%143 = insertelement <16 x i8> %142, i8 %127, i64 4
%144 = insertelement <16 x i8> %143, i8 %128, i64 5
%145 = insertelement <16 x i8> %144, i8 %129, i64 6
%146 = insertelement <16 x i8> %145, i8 %130, i64 7
%147 = insertelement <16 x i8> %146, i8 %131, i64 8
%148 = insertelement <16 x i8> %147, i8 %132, i64 9
%149 = insertelement <16 x i8> %148, i8 %133, i64 10
%150 = insertelement <16 x i8> %149, i8 %134, i64 11
%151 = insertelement <16 x i8> %150, i8 %135, i64 12
%152 = insertelement <16 x i8> %151, i8 %136, i64 13
%153 = insertelement <16 x i8> %152, i8 %137, i64 14
%154 = insertelement <16 x i8> %153, i8 %138, i64 15
%155 = icmp sgt <16 x i8> %154, <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>
%156 = select <16 x i1> %155, <16 x i8> <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>, <16 x i8> zeroinitializer
%157 = add <16 x i8> %156, %154
%158 = and <16 x i8> %157, <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>
%159 = or <16 x i8> %158, %88
%160 = bitcast i8* %89 to <16 x i8>*
store <16 x i8> %159, <16 x i8>* %160
%161 = add nuw i64 %20, 16
%162 = icmp eq i64 %161, %18
br i1 %162, label %163, label %19
163: ; preds = %19
%164 = icmp eq i64 %18, %6
br i1 %164, label %279, label %165
165: ; preds = %163
%166 = shl nuw nsw i64 %18, 1
%167 = and i64 %6, 8
%168 = icmp eq i64 %167, 0
br i1 %168, label %255, label %169
169: ; preds = %15, %165
%170 = phi i64 [ %18, %165 ], [ 0, %15 ]
%171 = and i64 %6, 4294967288
%172 = shl nuw nsw i64 %171, 1
br label %173
173: ; preds = %173, %169
%174 = phi i64 [ %170, %169 ], [ %251, %173 ]
%175 = shl i64 %174, 1
%176 = or i64 %175, 2
%177 = or i64 %175, 4
%178 = or i64 %175, 6
%179 = or i64 %175, 8
%180 = or i64 %175, 10
%181 = or i64 %175, 12
%182 = or i64 %175, 14
%183 = getelementptr inbounds i8, i8* %0, i64 %175
%184 = getelementptr inbounds i8, i8* %0, i64 %176
%185 = getelementptr inbounds i8, i8* %0, i64 %177
%186 = getelementptr inbounds i8, i8* %0, i64 %178
%187 = getelementptr inbounds i8, i8* %0, i64 %179
%188 = getelementptr inbounds i8, i8* %0, i64 %180
%189 = getelementptr inbounds i8, i8* %0, i64 %181
%190 = getelementptr inbounds i8, i8* %0, i64 %182
%191 = load i8, i8* %183
%192 = load i8, i8* %184
%193 = load i8, i8* %185
%194 = load i8, i8* %186
%195 = load i8, i8* %187
%196 = load i8, i8* %188
%197 = load i8, i8* %189
%198 = load i8, i8* %190
%199 = insertelement <8 x i8> poison, i8 %191, i64 0
%200 = insertelement <8 x i8> %199, i8 %192, i64 1
%201 = insertelement <8 x i8> %200, i8 %193, i64 2
%202 = insertelement <8 x i8> %201, i8 %194, i64 3
%203 = insertelement <8 x i8> %202, i8 %195, i64 4
%204 = insertelement <8 x i8> %203, i8 %196, i64 5
%205 = insertelement <8 x i8> %204, i8 %197, i64 6
%206 = insertelement <8 x i8> %205, i8 %198, i64 7
%207 = icmp sgt <8 x i8> %206, <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>
%208 = select <8 x i1> %207, <8 x i8> <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>, <8 x i8> zeroinitializer
%209 = add <8 x i8> %208, %206
%210 = shl <8 x i8> %209, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
%211 = getelementptr inbounds i8, i8* %2, i64 %174
%212 = bitcast i8* %211 to <8 x i8>*
store <8 x i8> %210, <8 x i8>* %212
%213 = or i64 %175, 1
%214 = or i64 %175, 3
%215 = or i64 %175, 5
%216 = or i64 %175, 7
%217 = or i64 %175, 9
%218 = or i64 %175, 11
%219 = or i64 %175, 13
%220 = or i64 %175, 15
%221 = getelementptr inbounds i8, i8* %0, i64 %213
%222 = getelementptr inbounds i8, i8* %0, i64 %214
%223 = getelementptr inbounds i8, i8* %0, i64 %215
%224 = getelementptr inbounds i8, i8* %0, i64 %216
%225 = getelementptr inbounds i8, i8* %0, i64 %217
%226 = getelementptr inbounds i8, i8* %0, i64 %218
%227 = getelementptr inbounds i8, i8* %0, i64 %219
%228 = getelementptr inbounds i8, i8* %0, i64 %220
%229 = load i8, i8* %221
%230 = load i8, i8* %222
%231 = load i8, i8* %223
%232 = load i8, i8* %224
%233 = load i8, i8* %225
%234 = load i8, i8* %226
%235 = load i8, i8* %227
%236 = load i8, i8* %228
%237 = insertelement <8 x i8> poison, i8 %229, i64 0
%238 = insertelement <8 x i8> %237, i8 %230, i64 1
%239 = insertelement <8 x i8> %238, i8 %231, i64 2
%240 = insertelement <8 x i8> %239, i8 %232, i64 3
%241 = insertelement <8 x i8> %240, i8 %233, i64 4
%242 = insertelement <8 x i8> %241, i8 %234, i64 5
%243 = insertelement <8 x i8> %242, i8 %235, i64 6
%244 = insertelement <8 x i8> %243, i8 %236, i64 7
%245 = icmp sgt <8 x i8> %244, <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>
%246 = select <8 x i1> %245, <8 x i8> <i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57, i8 57>, <8 x i8> zeroinitializer
%247 = add <8 x i8> %246, %244
%248 = and <8 x i8> %247, <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>
%249 = or <8 x i8> %248, %210
%250 = bitcast i8* %211 to <8 x i8>*
store <8 x i8> %249, <8 x i8>* %250
%251 = add nuw i64 %174, 8
%252 = icmp eq i64 %251, %171
br i1 %252, label %253, label %173
253: ; preds = %173
%254 = icmp eq i64 %171, %6
br i1 %254, label %279, label %255
255: ; preds = %8, %5, %165, %253
%256 = phi i64 [ 0, %5 ], [ 0, %8 ], [ %18, %165 ], [ %171, %253 ]
%257 = phi i64 [ 0, %5 ], [ 0, %8 ], [ %166, %165 ], [ %172, %253 ]
br label %258
258: ; preds = %255, %258
%259 = phi i64 [ %277, %258 ], [ %256, %255 ]
%260 = phi i64 [ %276, %258 ], [ %257, %255 ]
%261 = getelementptr inbounds i8, i8* %0, i64 %260
%262 = load i8, i8* %261
%263 = icmp sgt i8 %262, 57
%264 = select i1 %263, i8 57, i8 0
%265 = add i8 %264, %262
%266 = shl i8 %265, 4
%267 = getelementptr inbounds i8, i8* %2, i64 %259
store i8 %266, i8* %267
%268 = or i64 %260, 1
%269 = getelementptr inbounds i8, i8* %0, i64 %268
%270 = load i8, i8* %269
%271 = icmp sgt i8 %270, 57
%272 = select i1 %271, i8 57, i8 0
%273 = add i8 %272, %270
%274 = and i8 %273, 15
%275 = or i8 %274, %266
store i8 %275, i8* %267
%276 = add nuw nsw i64 %260, 2
%277 = add nuw nsw i64 %259, 1
%278 = icmp eq i64 %277, %6
br i1 %278, label %279, label %258
279: ; preds = %258, %163, %253, %3
ret void
}