unsigned char inverseStrToBCD(unsigned char *s, unsigned short sLen,
                              unsigned char *t, unsigned short tLen) {
  unsigned short i = 0, j = 0;
  if (sLen % 2)
    return 0x01;
  for (i = 0; i < sLen / 2; i++, s += 2) {
    t[i] =
        (((s[0] >= '0' && s[0] <= '9')
              ? (s[0] - '0')
              : ((s[0] >= 'A' && s[0] <= 'F')
                     ? (s[0] - 'A' + 10)
                     : ((s[0] >= 'a' && s[0] <= 'f') ? (s[0] - 'a' + 10) : 0)))
             << 4 |
         ((s[1] >= '0' && s[1] <= '9')
              ? (s[1] - '0')
              : ((s[1] >= 'A' && s[1] <= 'F')
                     ? (s[1] - 'A' + 10)
                     : ((s[1] >= 'a' && s[1] <= 'f') ? (s[1] - 'a' + 10)
                                                     : 0))));
  }
  for (j = 0; j < i / 2; j++) {
    t[j] = t[j] ^ t[i - j - 1];
    t[i - j - 1] = t[j] ^ t[i - j - 1];
    t[j] = t[j] ^ t[i - j - 1];
  }
  return 0x00;
}


x86 assembly (clang, -O0):
<inverseStrToBCD>:
push   %rbp
mov    %rsp,%rbp
mov    %cx,%ax
mov    %si,%cx
mov    %rdi,-0x10(%rbp)
mov    %cx,-0x12(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ax,-0x22(%rbp)
movw   $0x0,-0x24(%rbp)
movw   $0x0,-0x26(%rbp)
movzwl -0x12(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1144 <inverseStrToBCD+0x44>
movb   $0x1,-0x1(%rbp)
jmp    13f2 <inverseStrToBCD+0x2f2>
movw   $0x0,-0x24(%rbp)
movzwl -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movzwl -0x12(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x2c(%rbp),%eax
cmp    %ecx,%eax
jge    1312 <inverseStrToBCD+0x212>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     119c <inverseStrToBCD+0x9c>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jg     119c <inverseStrToBCD+0x9c>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x30(%rbp)
jmp    121c <inverseStrToBCD+0x11c>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     11d1 <inverseStrToBCD+0xd1>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x46,%eax
jg     11d1 <inverseStrToBCD+0xd1>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x34(%rbp)
jmp    1216 <inverseStrToBCD+0x116>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     1206 <inverseStrToBCD+0x106>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x66,%eax
jg     1206 <inverseStrToBCD+0x106>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x38(%rbp)
jmp    1210 <inverseStrToBCD+0x110>
xor    %eax,%eax
mov    %eax,-0x38(%rbp)
jmp    1210 <inverseStrToBCD+0x110>
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x30,%eax
jl     125a <inverseStrToBCD+0x15a>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x39,%eax
jg     125a <inverseStrToBCD+0x15a>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x40(%rbp)
jmp    12e0 <inverseStrToBCD+0x1e0>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x41,%eax
jl     1292 <inverseStrToBCD+0x192>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x46,%eax
jg     1292 <inverseStrToBCD+0x192>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x44(%rbp)
jmp    12da <inverseStrToBCD+0x1da>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x61,%eax
jl     12ca <inverseStrToBCD+0x1ca>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x66,%eax
jg     12ca <inverseStrToBCD+0x1ca>
mov    -0x10(%rbp),%rax
movzbl 0x1(%rax),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x48(%rbp)
jmp    12d4 <inverseStrToBCD+0x1d4>
xor    %eax,%eax
mov    %eax,-0x48(%rbp)
jmp    12d4 <inverseStrToBCD+0x1d4>
mov    -0x48(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
or     %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzwl -0x24(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
jmp    114a <inverseStrToBCD+0x4a>
movw   $0x0,-0x26(%rbp)
movzwl -0x26(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movzwl -0x24(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x4c(%rbp),%eax
cmp    %ecx,%eax
jge    13ee <inverseStrToBCD+0x2ee>
mov    -0x20(%rbp),%rax
movzwl -0x26(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movzwl -0x24(%rbp),%edx
movzwl -0x26(%rbp),%esi
sub    %esi,%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
xor    %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzwl -0x26(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
movzwl -0x26(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movzwl -0x24(%rbp),%edx
movzwl -0x26(%rbp),%esi
sub    %esi,%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
xor    %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzwl -0x24(%rbp),%ecx
movzwl -0x26(%rbp),%esi
sub    %esi,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
movzwl -0x26(%rbp),%ecx
movzbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movzwl -0x24(%rbp),%edx
movzwl -0x26(%rbp),%esi
sub    %esi,%edx
sub    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
xor    %ecx,%eax
mov    %al,%dl
mov    -0x20(%rbp),%rax
movzwl -0x26(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x26(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x26(%rbp)
jmp    1318 <inverseStrToBCD+0x218>
movb   $0x0,-0x1(%rbp)
movzbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<inverseStrToBCD>:
push   %rbx
mov    $0x1,%al
test   $0x1,%sil
jne    163f <inverseStrToBCD+0x53f>
cmp    $0x2,%si
jb     163d <inverseStrToBCD+0x53d>
shr    %esi
cmp    $0x2,%esi
mov    $0x1,%r9d
cmovae %esi,%r9d
xor    %r8d,%r8d
cmp    $0x8,%r9d
jb     1149 <inverseStrToBCD+0x49>
lea    (%rdi,%r9,2),%rax
cmp    %rdx,%rax
jbe    11e3 <inverseStrToBCD+0xe3>
lea    (%rdx,%r9,1),%rax
cmp    %rdi,%rax
jbe    11e3 <inverseStrToBCD+0xe3>
xor    %eax,%eax
mov    %rdi,%r10
lea    (%rdx,%rax,1),%r11
mov    %r9,%rdi
sub    %rax,%rdi
xor    %eax,%eax
jmp    1185 <inverseStrToBCD+0x85>
nopl   0x0(%rax)
lea    -0x61(%rsi),%ebx
add    $0xa9,%sil
cmp    $0x6,%bl
movzbl %sil,%ebx
cmovae %r8d,%ebx
or     %cl,%bl
mov    %bl,(%r11,%rax,1)
add    $0x1,%rax
cmp    %rax,%rdi
je     1603 <inverseStrToBCD+0x503>
movzbl (%r10,%rax,2),%esi
lea    -0x30(%rsi),%ecx
cmp    $0xa,%cl
jb     11c2 <inverseStrToBCD+0xc2>
lea    -0x41(%rsi),%ecx
cmp    $0x5,%cl
ja     11b0 <inverseStrToBCD+0xb0>
add    $0xc9,%sil
mov    %esi,%ecx
jmp    11c2 <inverseStrToBCD+0xc2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x61(%rsi),%ecx
add    $0xa9,%sil
cmp    $0x6,%cl
movzbl %sil,%ecx
cmovae %r8d,%ecx
shl    $0x4,%cl
movzbl 0x1(%r10,%rax,2),%esi
lea    -0x30(%rsi),%ebx
cmp    $0xa,%bl
jb     1172 <inverseStrToBCD+0x72>
lea    -0x41(%rsi),%ebx
cmp    $0x5,%bl
ja     1160 <inverseStrToBCD+0x60>
add    $0xc9,%sil
mov    %esi,%ebx
jmp    1172 <inverseStrToBCD+0x72>
cmp    $0x10,%r9d
jae    11f0 <inverseStrToBCD+0xf0>
xor    %eax,%eax
jmp    13e3 <inverseStrToBCD+0x2e3>
mov    %r9d,%eax
and    $0xfffffff0,%eax
xor    %ecx,%ecx
movdqa 0xe10(%rip),%xmm5
movdqa 0xe27(%rip),%xmm13
movdqa 0xe4f(%rip),%xmm6
movdqa 0xe56(%rip),%xmm14
movdqa 0xe5d(%rip),%xmm15
movdqa 0xe64(%rip),%xmm12
nopl   0x0(%rax)
movdqu (%rdi,%rcx,2),%xmm10
movdqu 0x10(%rdi,%rcx,2),%xmm1
movdqa %xmm1,%xmm2
movdqa 0xdb8(%rip),%xmm0
pand   %xmm0,%xmm2
movdqa %xmm10,%xmm7
pand   %xmm0,%xmm7
packuswb %xmm2,%xmm7
psrlw  $0x8,%xmm1
psrlw  $0x8,%xmm10
packuswb %xmm1,%xmm10
movdqa %xmm7,%xmm2
paddb  %xmm5,%xmm2
movdqa %xmm2,%xmm8
movdqa 0xda1(%rip),%xmm11
pmaxub %xmm11,%xmm8
pcmpeqb %xmm2,%xmm8
movdqa %xmm2,%xmm1
pminub %xmm13,%xmm1
pcmpeqb %xmm2,%xmm1
movdqa %xmm7,%xmm3
paddb  0xd9e(%rip),%xmm3
movdqa %xmm3,%xmm9
pmaxub 0xda0(%rip),%xmm9
pcmpeqb %xmm3,%xmm9
movdqa %xmm3,%xmm0
pminub %xmm6,%xmm0
pcmpeqb %xmm3,%xmm0
movdqa %xmm7,%xmm4
paddb  %xmm14,%xmm4
movdqa %xmm4,%xmm3
pminub %xmm6,%xmm3
pcmpeqb %xmm4,%xmm3
movdqa %xmm7,%xmm4
paddb  %xmm15,%xmm4
pand   %xmm3,%xmm4
paddb  %xmm12,%xmm7
por    %xmm1,%xmm0
pand   %xmm0,%xmm7
pandn  %xmm4,%xmm0
por    %xmm7,%xmm0
movdqa %xmm1,%xmm3
pandn  %xmm0,%xmm3
pand   %xmm1,%xmm2
por    %xmm3,%xmm2
movdqa %xmm10,%xmm0
paddb  %xmm5,%xmm0
movdqa %xmm0,%xmm3
pmaxub %xmm11,%xmm3
pcmpeqb %xmm0,%xmm3
movdqa %xmm10,%xmm4
paddb  0xd85(%rip),%xmm4
movdqa %xmm4,%xmm11
pminub 0xd87(%rip),%xmm11
pcmpeqb %xmm4,%xmm11
pand   %xmm3,%xmm11
movdqa %xmm10,%xmm3
paddb  %xmm14,%xmm3
movdqa %xmm3,%xmm4
pminub %xmm6,%xmm4
pcmpeqb %xmm3,%xmm4
movdqa %xmm10,%xmm3
paddb  %xmm15,%xmm3
pand   %xmm4,%xmm3
por    %xmm8,%xmm1
por    %xmm9,%xmm1
movdqa %xmm0,%xmm4
pminub %xmm13,%xmm4
pcmpeqb %xmm0,%xmm4
pand   %xmm1,%xmm11
pand   %xmm4,%xmm1
paddb  %xmm12,%xmm10
pand   %xmm11,%xmm3
pandn  %xmm10,%xmm11
por    %xmm3,%xmm11
pand   %xmm1,%xmm0
pandn  %xmm11,%xmm1
por    %xmm0,%xmm1
psllw  $0x4,%xmm2
pand   0xceb(%rip),%xmm2
por    %xmm2,%xmm1
movdqu %xmm1,(%rdx,%rcx,1)
add    $0x10,%rcx
cmp    %rcx,%rax
jne    1230 <inverseStrToBCD+0x130>
cmp    %r9,%rax
je     1603 <inverseStrToBCD+0x503>
test   $0x8,%r9b
jne    13e3 <inverseStrToBCD+0x2e3>
lea    (%rdi,%rax,2),%r10
jmp    114e <inverseStrToBCD+0x4e>
mov    %rax,%rsi
mov    %r9d,%eax
and    $0xfffffff8,%eax
lea    (%rdi,%rax,2),%r10
movdqa 0xce7(%rip),%xmm15
movdqa 0xcfe(%rip),%xmm14
movdqa 0xd05(%rip),%xmm10
movdqa 0xd0c(%rip),%xmm11
movdqa 0xd13(%rip),%xmm12
nopl   (%rax)
movdqu (%rdi,%rsi,2),%xmm2
movdqa %xmm2,%xmm4
movdqa 0xbce(%rip),%xmm13
pand   %xmm13,%xmm4
packuswb %xmm4,%xmm4
movdqa %xmm4,%xmm8
movdqa 0xc87(%rip),%xmm9
paddb  %xmm9,%xmm8
movdqa %xmm8,%xmm6
pmaxub %xmm15,%xmm6
pcmpeqb %xmm8,%xmm6
punpcklbw %xmm6,%xmm0
movdqa %xmm6,%xmm5
pcmpeqd %xmm13,%xmm13
pxor   %xmm13,%xmm5
punpcklbw %xmm5,%xmm3
por    %xmm0,%xmm3
movdqa %xmm4,%xmm7
paddb  0xc6d(%rip),%xmm7
movdqa %xmm7,%xmm0
pmaxub %xmm14,%xmm0
pcmpeqb %xmm7,%xmm0
punpcklbw %xmm0,%xmm7
por    %xmm3,%xmm7
movdqa %xmm4,%xmm1
paddb  %xmm10,%xmm1
movdqa %xmm1,%xmm3
pmaxub %xmm14,%xmm3
pcmpeqb %xmm1,%xmm3
movdqa %xmm4,%xmm1
paddb  %xmm11,%xmm1
pandn  %xmm1,%xmm3
psrlw  $0x8,%xmm2
packuswb %xmm2,%xmm2
pxor   %xmm13,%xmm0
paddb  %xmm12,%xmm4
por    %xmm5,%xmm0
pand   %xmm0,%xmm4
pandn  %xmm3,%xmm0
por    %xmm4,%xmm0
pand   %xmm6,%xmm0
pandn  %xmm8,%xmm6
por    %xmm0,%xmm6
movdqa %xmm2,%xmm8
paddb  %xmm9,%xmm8
movdqa %xmm8,%xmm0
pmaxub %xmm15,%xmm0
pcmpeqb %xmm8,%xmm0
movdqa %xmm0,%xmm9
punpcklbw %xmm0,%xmm0
movdqa %xmm2,%xmm1
paddb  0xc27(%rip),%xmm1
movdqa %xmm1,%xmm4
pmaxub 0xc2b(%rip),%xmm4
pcmpeqb %xmm1,%xmm4
pxor   %xmm13,%xmm4
punpcklbw %xmm4,%xmm4
pand   %xmm0,%xmm4
movdqa %xmm2,%xmm0
paddb  %xmm10,%xmm0
movdqa %xmm0,%xmm1
pmaxub %xmm14,%xmm1
pcmpeqb %xmm0,%xmm1
movdqa %xmm2,%xmm0
paddb  %xmm11,%xmm0
pandn  %xmm0,%xmm1
psraw  $0x8,%xmm7
pand   %xmm7,%xmm4
movdqa 0xa96(%rip),%xmm5
pand   %xmm5,%xmm4
packuswb %xmm4,%xmm4
psllw  $0x7,%xmm4
movdqa 0xbe1(%rip),%xmm3
pand   %xmm3,%xmm4
pxor   %xmm0,%xmm0
pcmpgtb %xmm4,%xmm0
pxor   %xmm13,%xmm9
punpcklbw %xmm9,%xmm9
pand   %xmm5,%xmm9
pand   %xmm7,%xmm9
packuswb %xmm9,%xmm9
psllw  $0x7,%xmm9
pand   %xmm3,%xmm9
pxor   %xmm3,%xmm3
pcmpgtb %xmm9,%xmm3
paddb  %xmm12,%xmm2
pand   %xmm0,%xmm1
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
pand   %xmm3,%xmm8
pandn  %xmm0,%xmm3
por    %xmm8,%xmm3
psllw  $0x4,%xmm6
pand   0xabc(%rip),%xmm6
por    %xmm6,%xmm3
movq   %xmm3,(%rdx,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%rax
jne    1420 <inverseStrToBCD+0x320>
cmp    %r9,%rax
jne    114e <inverseStrToBCD+0x4e>
cmp    $0x2,%r9d
jb     163d <inverseStrToBCD+0x53d>
mov    %r9d,%eax
shr    %eax
lea    (%r9,%rdx,1),%rcx
add    $0xffffffffffffffff,%rcx
neg    %rax
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movzbl (%rcx,%rsi,1),%ebx
xor    (%rdx),%bl
mov    %bl,(%rdx)
xor    (%rcx,%rsi,1),%bl
mov    %bl,(%rcx,%rsi,1)
xor    %bl,(%rdx)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rsi
cmp    %rsi,%rax
jne    1620 <inverseStrToBCD+0x520>
xor    %eax,%eax
pop    %rbx
ret

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

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