void getchararray(char *s, unsigned char *a) {
  int i, w, len;
  len = strlen(s);
  for (i = 0; i < len; i += 2) {
    w = ((((s[i]) >= '0') && ((s[i]) <= '9'))
             ? ((s[i]) - '0')
             : ((((s[i]) >= 'A') && ((s[i]) <= 'F')) ? ((s[i]) - 'A' + 10)
                                                     : ((s[i]) - 'a' + 10)));
    w <<= 4;
    w += ((((s[i + 1]) >= '0') && ((s[i + 1]) <= '9'))
              ? ((s[i + 1]) - '0')
              : ((((s[i + 1]) >= 'A') && ((s[i + 1]) <= 'F'))
                     ? ((s[i + 1]) - 'A' + 10)
                     : ((s[i + 1]) - 'a' + 10)));
    a[i >> 1] = w;
  }
}


x86 assembly (clang, -O0):
<getchararray>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    12dd <getchararray+0x1cd>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     1180 <getchararray+0x70>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     1180 <getchararray+0x70>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x20(%rbp)
jmp    11df <getchararray+0xcf>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     11c4 <getchararray+0xb4>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     11c4 <getchararray+0xb4>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x24(%rbp)
jmp    11d9 <getchararray+0xc9>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jl     123e <getchararray+0x12e>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jg     123e <getchararray+0x12e>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x28(%rbp)
jmp    12b1 <getchararray+0x1a1>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1291 <getchararray+0x181>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x46,%eax
jg     1291 <getchararray+0x181>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x2c(%rbp)
jmp    12ab <getchararray+0x19b>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sar    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1133 <getchararray+0x23>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getchararray>:
push   %rbp
push   %r14
push   %rbx
mov    %rsi,%rbx
mov    %rdi,%r14
call   1030 <strlen@plt>
test   %eax,%eax
jle    1776 <getchararray+0x666>
movslq %eax,%r11
lea    -0x1(%r11),%rcx
cmp    $0xe,%rcx
jb     115b <getchararray+0x4b>
mov    %rcx,%r8
shr    %r8
lea    0x1(%r11),%rdx
and    $0xfffffffffffffffe,%rdx
add    %r14,%rdx
cmp    %rbx,%rdx
jbe    11d3 <getchararray+0xc3>
lea    (%r8,%rbx,1),%rdx
add    $0x1,%rdx
cmp    %r14,%rdx
jbe    11d3 <getchararray+0xc3>
xor    %edi,%edi
mov    %rdi,%rax
shr    %rax
add    %rax,%rbx
jmp    118c <getchararray+0x7c>
nopl   0x0(%rax,%rax,1)
add    $0xa9,%dl
mov    %edx,%esi
add    %cl,%sil
mov    %sil,(%rbx)
add    $0x2,%rdi
add    $0x1,%rbx
cmp    %r11,%rdi
jge    1776 <getchararray+0x666>
movzbl (%r14,%rdi,1),%edx
lea    -0x30(%rdx),%ecx
cmp    $0xa,%cl
jb     11b5 <getchararray+0xa5>
lea    -0x41(%rdx),%eax
cmp    $0x5,%al
ja     11b0 <getchararray+0xa0>
add    $0xc9,%dl
jmp    11b3 <getchararray+0xa3>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0xa9,%dl
mov    %edx,%ecx
shl    $0x4,%cl
movzbl 0x1(%r14,%rdi,1),%edx
lea    -0x30(%rdx),%esi
cmp    $0xa,%sil
jb     1175 <getchararray+0x65>
lea    -0x41(%rdx),%eax
cmp    $0x5,%al
ja     1170 <getchararray+0x60>
add    $0xc9,%dl
jmp    1173 <getchararray+0x63>
add    $0x1,%r8
movabs $0x7ffffffffffffff0,%r9
ff ff 7f
cmp    $0x1e,%rcx
jae    11ee <getchararray+0xde>
xor    %esi,%esi
jmp    1512 <getchararray+0x402>
mov    %r8,%rsi
and    $0xfffffffffffffff0,%rsi
lea    0x1f(%r14),%rdi
xor    %ecx,%ecx
movdqa 0xdfc(%rip),%xmm10
movdqa 0xe04(%rip),%xmm1
movdqa 0xe4b(%rip),%xmm12
movdqa 0xe52(%rip),%xmm13
movdqa 0xe59(%rip),%xmm14
movdqa 0xe60(%rip),%xmm11
movdqa 0xe67(%rip),%xmm15
movdqa 0xe6e(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x1(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0x3(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
punpcklbw %xmm2,%xmm4
movzbl -0x5(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0x7(%rdi,%rcx,2),%edx
movd   %edx,%xmm6
punpcklbw %xmm2,%xmm6
punpcklwd %xmm4,%xmm6
movzbl -0x9(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0xb(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
punpcklbw %xmm2,%xmm4
movzbl -0xd(%rdi,%rcx,2),%edx
movd   %edx,%xmm7
movzbl -0xf(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
punpcklbw %xmm7,%xmm2
punpcklwd %xmm4,%xmm2
punpckldq %xmm6,%xmm2
movzbl -0x11(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
movzbl -0x13(%rdi,%rcx,2),%edx
movd   %edx,%xmm6
punpcklbw %xmm4,%xmm6
movzbl -0x15(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
movzbl -0x17(%rdi,%rcx,2),%edx
movd   %edx,%xmm7
punpcklbw %xmm4,%xmm7
punpcklwd %xmm6,%xmm7
movzbl -0x19(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
movzbl -0x1b(%rdi,%rcx,2),%edx
movd   %edx,%xmm6
punpcklbw %xmm4,%xmm6
movzbl -0x1d(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
movzbl -0x1f(%rdi,%rcx,2),%edx
movd   %edx,%xmm8
punpcklbw %xmm4,%xmm8
punpcklwd %xmm6,%xmm8
punpckldq %xmm7,%xmm8
punpcklqdq %xmm2,%xmm8
movdqa %xmm8,%xmm2
paddb  %xmm10,%xmm2
movdqa %xmm2,%xmm6
pminub %xmm1,%xmm6
pcmpeqb %xmm2,%xmm6
movdqa %xmm8,%xmm4
paddb  0xcdc(%rip),%xmm4
movdqa %xmm4,%xmm7
pminub 0xce0(%rip),%xmm7
pcmpeqb %xmm4,%xmm7
por    %xmm6,%xmm7
paddb  %xmm1,%xmm8
pand   %xmm6,%xmm2
pandn  %xmm8,%xmm6
por    %xmm2,%xmm6
movzbl (%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0x2(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
punpcklbw %xmm2,%xmm4
movzbl -0x4(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0x6(%rdi,%rcx,2),%edx
movd   %edx,%xmm5
punpcklbw %xmm2,%xmm5
punpcklwd %xmm4,%xmm5
movzbl -0x8(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0xa(%rdi,%rcx,2),%edx
movd   %edx,%xmm0
punpcklbw %xmm2,%xmm0
movzbl -0xc(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
movzbl -0xe(%rdi,%rcx,2),%edx
movd   %edx,%xmm4
punpcklbw %xmm2,%xmm4
punpcklwd %xmm0,%xmm4
punpckldq %xmm5,%xmm4
movzbl -0x10(%rdi,%rcx,2),%edx
movd   %edx,%xmm0
movzbl -0x12(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
punpcklbw %xmm0,%xmm2
movzbl -0x14(%rdi,%rcx,2),%edx
movd   %edx,%xmm0
movzbl -0x16(%rdi,%rcx,2),%edx
movd   %edx,%xmm5
punpcklbw %xmm0,%xmm5
punpcklwd %xmm2,%xmm5
movzbl -0x18(%rdi,%rcx,2),%edx
movd   %edx,%xmm0
movzbl -0x1a(%rdi,%rcx,2),%edx
movd   %edx,%xmm3
punpcklbw %xmm0,%xmm3
movzbl -0x1c(%rdi,%rcx,2),%edx
movd   %edx,%xmm0
movzbl -0x1e(%rdi,%rcx,2),%edx
movd   %edx,%xmm2
punpcklbw %xmm0,%xmm2
punpcklwd %xmm3,%xmm2
punpckldq %xmm5,%xmm2
punpcklqdq %xmm4,%xmm2
movdqa %xmm2,%xmm4
paddb  %xmm10,%xmm4
movdqa %xmm2,%xmm0
paddb  %xmm13,%xmm0
movdqa %xmm0,%xmm3
pminub %xmm14,%xmm3
pcmpeqb %xmm0,%xmm3
movdqa %xmm4,%xmm0
pmaxub %xmm12,%xmm0
pcmpeqb %xmm4,%xmm0
pand   %xmm0,%xmm3
movdqa %xmm7,%xmm0
pxor   0xbcf(%rip),%xmm0
por    %xmm7,%xmm0
pand   %xmm0,%xmm3
psllw  $0x7,%xmm3
pand   %xmm11,%xmm3
pxor   %xmm5,%xmm5
pcmpgtb %xmm3,%xmm5
movdqa %xmm4,%xmm3
pminub %xmm1,%xmm3
pcmpeqb %xmm4,%xmm3
pand   %xmm3,%xmm0
psllw  $0x7,%xmm0
pand   %xmm11,%xmm0
pxor   %xmm3,%xmm3
pcmpgtb %xmm0,%xmm3
movdqa %xmm5,%xmm0
pandn  %xmm15,%xmm0
pand   %xmm9,%xmm5
por    %xmm0,%xmm5
paddb  %xmm2,%xmm5
pand   %xmm3,%xmm4
pandn  %xmm5,%xmm3
por    %xmm4,%xmm3
psllw  $0x4,%xmm6
pand   0xb74(%rip),%xmm6
paddb  %xmm6,%xmm3
mov    %rcx,%rdx
and    %r9,%rdx
movdqu %xmm3,(%rbx,%rdx,1)
add    $0x10,%rcx
cmp    %rcx,%rsi
jne    1250 <getchararray+0x140>
cmp    %rsi,%r8
je     1776 <getchararray+0x666>
test   $0x8,%r8b
jne    1512 <getchararray+0x402>
add    %rsi,%rsi
mov    %rsi,%rdi
jmp    115d <getchararray+0x4d>
mov    %r8,%r10
and    $0xfffffffffffffff8,%r10
lea    (%r10,%r10,1),%rdi
movdqa 0xb9a(%rip),%xmm11
movdqa 0xba1(%rip),%xmm12
pcmpeqd %xmm2,%xmm2
movdqa 0xbf4(%rip),%xmm14
movdqa 0xbfb(%rip),%xmm13
movdqa 0xb43(%rip),%xmm6
movdqa 0xbfa(%rip),%xmm15
movdqa 0xc01(%rip),%xmm10
add    $0x8,%r9
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%r14,%rsi,2),%edx
movzbl 0x4(%r14,%rsi,2),%ecx
movzbl 0x8(%r14,%rsi,2),%eax
movzbl 0x6(%r14,%rsi,2),%ebp
shl    $0x8,%ebp
or     %ecx,%ebp
movzbl 0x2(%r14,%rsi,2),%ecx
shl    $0x8,%ecx
or     %edx,%ecx
movd   %ecx,%xmm3
pinsrw $0x1,%ebp,%xmm3
movzbl 0xc(%r14,%rsi,2),%ecx
movzbl 0xa(%r14,%rsi,2),%edx
shl    $0x8,%edx
or     %eax,%edx
pinsrw $0x2,%edx,%xmm3
movzbl 0xe(%r14,%rsi,2),%eax
shl    $0x8,%eax
or     %ecx,%eax
pinsrw $0x3,%eax,%xmm3
movdqa %xmm3,%xmm0
paddb  %xmm11,%xmm0
movdqa %xmm0,%xmm4
pmaxub %xmm12,%xmm4
pcmpeqb %xmm0,%xmm4
movdqa %xmm4,%xmm7
pxor   %xmm2,%xmm7
punpcklbw %xmm7,%xmm1
movdqa %xmm3,%xmm5
paddb  0xaec(%rip),%xmm5
movdqa %xmm5,%xmm7
pmaxub 0xaf0(%rip),%xmm7
pcmpeqb %xmm5,%xmm7
pxor   %xmm2,%xmm7
punpcklbw %xmm7,%xmm7
por    %xmm1,%xmm7
psraw  $0x8,%xmm7
paddb  0xaf3(%rip),%xmm3
pand   %xmm4,%xmm3
pandn  %xmm0,%xmm4
por    %xmm3,%xmm4
movzbl 0x1(%r14,%rsi,2),%eax
movzbl 0x5(%r14,%rsi,2),%ecx
movzbl 0x9(%r14,%rsi,2),%edx
movzbl 0x7(%r14,%rsi,2),%ebp
shl    $0x8,%ebp
or     %ecx,%ebp
movzbl 0x3(%r14,%rsi,2),%ecx
shl    $0x8,%ecx
or     %eax,%ecx
movd   %ecx,%xmm8
pinsrw $0x1,%ebp,%xmm8
movzbl 0xb(%r14,%rsi,2),%eax
shl    $0x8,%eax
or     %edx,%eax
pinsrw $0x2,%eax,%xmm8
movzbl 0xd(%r14,%rsi,2),%eax
movzbl 0xf(%r14,%rsi,2),%ecx
shl    $0x8,%ecx
or     %eax,%ecx
pinsrw $0x3,%ecx,%xmm8
movdqa %xmm8,%xmm9
paddb  %xmm11,%xmm9
movdqa %xmm9,%xmm0
pmaxub %xmm12,%xmm0
pcmpeqb %xmm9,%xmm0
movdqa %xmm8,%xmm1
paddb  0xa76(%rip),%xmm1
movdqa %xmm1,%xmm3
pmaxub %xmm14,%xmm3
pcmpeqb %xmm1,%xmm3
movdqa %xmm0,%xmm1
punpcklbw %xmm0,%xmm0
pxor   %xmm2,%xmm3
punpcklbw %xmm3,%xmm3
pand   %xmm0,%xmm3
movdqa %xmm7,%xmm0
pxor   0xa29(%rip),%xmm0
por    %xmm7,%xmm0
pand   %xmm13,%xmm3
pand   %xmm0,%xmm3
packuswb %xmm3,%xmm3
psllw  $0x7,%xmm3
pand   %xmm6,%xmm3
pxor   %xmm5,%xmm5
pcmpgtb %xmm3,%xmm5
pxor   %xmm2,%xmm1
punpcklbw %xmm1,%xmm1
pand   %xmm13,%xmm1
pand   %xmm0,%xmm1
packuswb %xmm1,%xmm1
psllw  $0x7,%xmm1
pand   %xmm6,%xmm1
pxor   %xmm0,%xmm0
pcmpgtb %xmm1,%xmm0
movdqa %xmm5,%xmm1
pandn  %xmm15,%xmm1
pand   %xmm10,%xmm5
por    %xmm1,%xmm5
paddb  %xmm8,%xmm5
pand   %xmm0,%xmm9
pandn  %xmm5,%xmm0
por    %xmm9,%xmm0
psllw  $0x4,%xmm4
pand   0x8ff(%rip),%xmm4
paddb  %xmm4,%xmm0
mov    %rsi,%rax
and    %r9,%rax
movq   %xmm0,(%rbx,%rax,1)
add    $0x8,%rsi
cmp    %rsi,%r10
jne    1570 <getchararray+0x460>
cmp    %r10,%r8
jne    115d <getchararray+0x4d>
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @getchararray(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %3
store i8* %1, i8** %4
%8 = load i8*, i8** %3
%9 = call i64 @strlen(i8* %8)
%10 = trunc i64 %9 to i32
store i32 %10, i32* %7
store i32 0, i32* %5
br label %11
11: ; preds = %156, %2
%12 = load i32, i32* %5
%13 = load i32, i32* %7
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %159
15: ; preds = %11
%16 = load i8*, i8** %3
%17 = load i32, i32* %5
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds i8, i8* %16, i64 %18
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp sge i32 %21, 48
br i1 %22, label %23, label %39
23: ; preds = %15
%24 = load i8*, i8** %3
%25 = load i32, i32* %5
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %24, i64 %26
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp sle i32 %29, 57
br i1 %30, label %31, label %39
31: ; preds = %23
%32 = load i8*, i8** %3
%33 = load i32, i32* %5
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i8, i8* %32, i64 %34
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = sub nsw i32 %37, 48
br label %75
39: ; preds = %23, %15
%40 = load i8*, i8** %3
%41 = load i32, i32* %5
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i8, i8* %40, i64 %42
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = icmp sge i32 %45, 65
br i1 %46, label %47, label %64
47: ; preds = %39
%48 = load i8*, i8** %3
%49 = load i32, i32* %5
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %48, i64 %50
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = icmp sle i32 %53, 70
br i1 %54, label %55, label %64
55: ; preds = %47
%56 = load i8*, i8** %3
%57 = load i32, i32* %5
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = sub nsw i32 %61, 65
%63 = add nsw i32 %62, 10
br label %73
64: ; preds = %47, %39
%65 = load i8*, i8** %3
%66 = load i32, i32* %5
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %65, i64 %67
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = sub nsw i32 %70, 97
%72 = add nsw i32 %71, 10
br label %73
73: ; preds = %64, %55
%74 = phi i32 [ %63, %55 ], [ %72, %64 ]
br label %75
75: ; preds = %73, %31
%76 = phi i32 [ %38, %31 ], [ %74, %73 ]
store i32 %76, i32* %6
%77 = load i32, i32* %6
%78 = shl i32 %77, 4
store i32 %78, i32* %6
%79 = load i8*, i8** %3
%80 = load i32, i32* %5
%81 = add nsw i32 %80, 1
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8, i8* %79, i64 %82
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = icmp sge i32 %85, 48
br i1 %86, label %87, label %105
87: ; preds = %75
%88 = load i8*, i8** %3
%89 = load i32, i32* %5
%90 = add nsw i32 %89, 1
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i8, i8* %88, i64 %91
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp sle i32 %94, 57
br i1 %95, label %96, label %105
96: ; preds = %87
%97 = load i8*, i8** %3
%98 = load i32, i32* %5
%99 = add nsw i32 %98, 1
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds i8, i8* %97, i64 %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = sub nsw i32 %103, 48
br label %145
105: ; preds = %87, %75
%106 = load i8*, i8** %3
%107 = load i32, i32* %5
%108 = add nsw i32 %107, 1
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds i8, i8* %106, i64 %109
%111 = load i8, i8* %110
%112 = sext i8 %111 to i32
%113 = icmp sge i32 %112, 65
br i1 %113, label %114, label %133
114: ; preds = %105
%115 = load i8*, i8** %3
%116 = load i32, i32* %5
%117 = add nsw i32 %116, 1
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8, i8* %115, i64 %118
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = icmp sle i32 %121, 70
br i1 %122, label %123, label %133
123: ; preds = %114
%124 = load i8*, i8** %3
%125 = load i32, i32* %5
%126 = add nsw i32 %125, 1
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds i8, i8* %124, i64 %127
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = sub nsw i32 %130, 65
%132 = add nsw i32 %131, 10
br label %143
133: ; preds = %114, %105
%134 = load i8*, i8** %3
%135 = load i32, i32* %5
%136 = add nsw i32 %135, 1
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %134, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = sub nsw i32 %140, 97
%142 = add nsw i32 %141, 10
br label %143
143: ; preds = %133, %123
%144 = phi i32 [ %132, %123 ], [ %142, %133 ]
br label %145
145: ; preds = %143, %96
%146 = phi i32 [ %104, %96 ], [ %144, %143 ]
%147 = load i32, i32* %6
%148 = add nsw i32 %147, %146
store i32 %148, i32* %6
%149 = load i32, i32* %6
%150 = trunc i32 %149 to i8
%151 = load i8*, i8** %4
%152 = load i32, i32* %5
%153 = ashr i32 %152, 1
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds i8, i8* %151, i64 %154
store i8 %150, i8* %155
br label %156
156: ; preds = %145
%157 = load i32, i32* %5
%158 = add nsw i32 %157, 2
store i32 %158, i32* %5
br label %11
159: ; preds = %11
ret void
}

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