#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef char uint32_t;

/* Variables and functions */
uint32_t ReadBase16(char *c, int num_chars) {
  uint32_t val = 0;
  while (num_chars--) {
    val += (*c <= '9' ? *c - '0' : *c - 'A' + 10) << (num_chars * 4);
    c++;
  }
  return val;
}


x86 assembly (clang, -O0):
<ReadBase16>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movb   $0x0,-0xd(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0xc(%rbp)
cmp    $0x0,%eax
je     117c <ReadBase16+0x7c>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1145 <ReadBase16+0x45>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x14(%rbp)
jmp    1155 <ReadBase16+0x55>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x2,%ecx
shl    %cl,%eax
mov    %eax,%ecx
movsbl -0xd(%rbp),%eax
add    %ecx,%eax
mov    %al,-0xd(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    110f <ReadBase16+0xf>
movsbl -0xd(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ReadBase16>:
test   %esi,%esi
je     1115 <ReadBase16+0x15>
lea    -0x1(%rsi),%r9d
cmp    $0xf,%r9d
jae    1118 <ReadBase16+0x18>
xor    %eax,%eax
jmp    1838 <ReadBase16+0x738>
xor    %eax,%eax
ret
add    $0x1,%r9
mov    %r9,%r8
and    $0xfffffffffffffff0,%r8
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm12
movdqa 0xecb(%rip),%xmm6
paddd  %xmm12,%xmm6
movdqa 0xece(%rip),%xmm7
paddd  %xmm12,%xmm7
movdqa 0xed0(%rip),%xmm9
paddd  %xmm12,%xmm9
paddd  0xed2(%rip),%xmm12
lea    -0x10(%r8),%rax
mov    %rax,%rcx
shr    $0x4,%rcx
add    $0x1,%rcx
test   %rax,%rax
je     187d <ReadBase16+0x77d>
mov    %rcx,%rax
and    $0xfffffffffffffffe,%rax
xor    %edx,%edx
pxor   %xmm14,%xmm14
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqa %xmm9,-0x48(%rsp)
movdqa %xmm12,-0x38(%rsp)
movdqa %xmm7,-0x28(%rsp)
movdqa %xmm6,-0x18(%rsp)
movdqu (%rdi,%rdx,1),%xmm0
movdqa %xmm0,%xmm1
pxor   %xmm5,%xmm5
punpcklbw %xmm5,%xmm1
movdqa %xmm1,%xmm3
punpcklwd %xmm5,%xmm3
punpckhwd %xmm5,%xmm1
movdqa 0xe71(%rip),%xmm4
pcmpgtb %xmm0,%xmm4
punpckhbw %xmm5,%xmm0
movdqa %xmm0,%xmm2
punpcklwd %xmm5,%xmm2
punpckhwd %xmm5,%xmm0
punpckhbw %xmm4,%xmm5
punpckhwd %xmm5,%xmm13
psrad  $0x18,%xmm13
punpcklwd %xmm5,%xmm10
psrad  $0x18,%xmm10
punpcklbw %xmm4,%xmm4
punpckhwd %xmm4,%xmm11
psrad  $0x18,%xmm11
punpcklwd %xmm4,%xmm4
psrad  $0x18,%xmm4
movdqa %xmm4,%xmm5
movdqa 0xe2e(%rip),%xmm12
pandn  %xmm12,%xmm5
movdqa 0xe30(%rip),%xmm9
pand   %xmm9,%xmm4
por    %xmm5,%xmm4
paddd  %xmm3,%xmm4
movdqa %xmm11,%xmm3
pandn  %xmm12,%xmm3
pand   %xmm9,%xmm11
por    %xmm3,%xmm11
paddd  %xmm1,%xmm11
movdqa %xmm10,%xmm1
pandn  %xmm12,%xmm1
pand   %xmm9,%xmm10
por    %xmm1,%xmm10
paddd  %xmm2,%xmm10
movdqa %xmm13,%xmm1
pandn  %xmm12,%xmm1
pand   %xmm9,%xmm13
por    %xmm1,%xmm13
paddd  %xmm0,%xmm13
movdqa -0x38(%rsp),%xmm3
pslld  $0x2,%xmm3
movdqa -0x48(%rsp),%xmm2
pslld  $0x2,%xmm2
movdqa %xmm7,%xmm1
pslld  $0x2,%xmm1
movdqa %xmm6,%xmm0
pslld  $0x2,%xmm0
movdqa %xmm3,%xmm5
movdqa 0xdb3(%rip),%xmm15
paddd  %xmm15,%xmm5
pslld  $0x17,%xmm5
movdqa 0xdb1(%rip),%xmm6
paddd  %xmm6,%xmm5
movdqa %xmm6,%xmm8
cvttps2dq %xmm5,%xmm5
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm4
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqa %xmm2,%xmm6
paddd  %xmm15,%xmm6
pshufd $0xe8,%xmm4,%xmm7
pshufd $0xe8,%xmm5,%xmm4
punpckldq %xmm4,%xmm7
pslld  $0x17,%xmm6
paddd  %xmm8,%xmm6
cvttps2dq %xmm6,%xmm4
pshufd $0xf5,%xmm11,%xmm5
pmuludq %xmm4,%xmm11
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm5,%xmm6
movdqa %xmm1,%xmm5
paddd  %xmm15,%xmm5
pshufd $0xe8,%xmm11,%xmm11
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm11
pslld  $0x17,%xmm5
paddd  %xmm8,%xmm5
cvttps2dq %xmm5,%xmm5
pshufd $0xf5,%xmm10,%xmm6
pmuludq %xmm5,%xmm10
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm15,%xmm6
pshufd $0xe8,%xmm10,%xmm4
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pslld  $0x17,%xmm6
paddd  %xmm8,%xmm6
cvttps2dq %xmm6,%xmm5
pshufd $0xf5,%xmm13,%xmm6
pmuludq %xmm5,%xmm13
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
movdqu 0x10(%rdi,%rdx,1),%xmm10
pshufd $0xe8,%xmm13,%xmm6
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm6
movdqa 0xcd5(%rip),%xmm15
pand   %xmm15,%xmm6
pand   %xmm15,%xmm4
packuswb %xmm6,%xmm4
pand   %xmm15,%xmm11
pand   %xmm15,%xmm7
packuswb %xmm11,%xmm7
packuswb %xmm4,%xmm7
paddb  %xmm14,%xmm7
movdqa %xmm10,%xmm11
punpcklbw 0xcd1(%rip),%xmm11
movdqa 0xc48(%rip),%xmm14
pcmpgtb %xmm10,%xmm14
punpcklbw %xmm14,%xmm13
punpcklwd %xmm13,%xmm5
psrad  $0x18,%xmm5
movdqa %xmm5,%xmm6
pandn  %xmm12,%xmm6
pand   %xmm9,%xmm5
por    %xmm6,%xmm5
movdqa %xmm11,%xmm4
pxor   %xmm6,%xmm6
punpcklwd %xmm6,%xmm4
punpckhwd %xmm6,%xmm11
punpckhbw %xmm6,%xmm10
pxor   %xmm8,%xmm8
punpckhbw %xmm14,%xmm14
punpckhwd %xmm13,%xmm6
psrad  $0x18,%xmm6
paddd  %xmm4,%xmm5
movdqa %xmm6,%xmm4
pandn  %xmm12,%xmm4
pand   %xmm9,%xmm6
por    %xmm4,%xmm6
punpcklwd %xmm14,%xmm4
psrad  $0x18,%xmm4
paddd  %xmm11,%xmm6
movdqa %xmm4,%xmm11
pandn  %xmm12,%xmm11
pand   %xmm9,%xmm4
por    %xmm11,%xmm4
movdqa %xmm10,%xmm13
punpcklwd %xmm8,%xmm13
punpckhwd %xmm14,%xmm11
psrad  $0x18,%xmm11
paddd  %xmm13,%xmm4
movdqa %xmm11,%xmm13
pandn  %xmm12,%xmm13
pand   %xmm9,%xmm11
movdqa -0x48(%rsp),%xmm9
movdqa -0x38(%rsp),%xmm12
por    %xmm13,%xmm11
punpckhwd %xmm8,%xmm10
paddd  %xmm10,%xmm11
movdqa 0xbcf(%rip),%xmm8
paddd  %xmm8,%xmm3
pslld  $0x17,%xmm3
movdqa 0xb9c(%rip),%xmm13
paddd  %xmm13,%xmm3
cvttps2dq %xmm3,%xmm3
pshufd $0xf5,%xmm5,%xmm10
pmuludq %xmm3,%xmm5
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm10,%xmm3
paddd  %xmm8,%xmm2
pshufd $0xe8,%xmm5,%xmm14
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm14
pslld  $0x17,%xmm2
paddd  %xmm13,%xmm2
cvttps2dq %xmm2,%xmm2
pshufd $0xf5,%xmm6,%xmm3
pmuludq %xmm2,%xmm6
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm3,%xmm5
paddd  %xmm8,%xmm1
pshufd $0xe8,%xmm6,%xmm2
movdqa -0x18(%rsp),%xmm6
pshufd $0xe8,%xmm5,%xmm3
punpckldq %xmm3,%xmm2
pslld  $0x17,%xmm1
paddd  %xmm13,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm1,%xmm4
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm3,%xmm1
paddd  %xmm8,%xmm0
pshufd $0xe8,%xmm4,%xmm3
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm3
pslld  $0x17,%xmm0
paddd  %xmm13,%xmm0
cvttps2dq %xmm0,%xmm0
pshufd $0xf5,%xmm11,%xmm1
pmuludq %xmm0,%xmm11
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm1,%xmm0
pshufd $0xe8,%xmm11,%xmm1
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm1
pand   %xmm15,%xmm1
pand   %xmm15,%xmm3
packuswb %xmm1,%xmm3
pand   %xmm15,%xmm2
pand   %xmm15,%xmm14
packuswb %xmm2,%xmm14
packuswb %xmm3,%xmm14
paddb  %xmm7,%xmm14
movdqa -0x28(%rsp),%xmm7
add    $0x20,%rdx
movdqa 0xac4(%rip),%xmm0
paddd  %xmm0,%xmm12
paddd  %xmm0,%xmm9
paddd  %xmm0,%xmm7
paddd  %xmm0,%xmm6
add    $0xfffffffffffffffe,%rax
jne    1190 <ReadBase16+0x90>
test   $0x1,%cl
je     1816 <ReadBase16+0x716>
movdqu (%rdi,%rdx,1),%xmm0
pxor   %xmm1,%xmm1
movdqa %xmm0,%xmm4
movdqa 0xa1a(%rip),%xmm2
pcmpgtb %xmm0,%xmm2
movdqa %xmm6,%xmm15
movdqa %xmm0,%xmm6
punpcklbw %xmm1,%xmm6
movdqa %xmm7,%xmm8
movdqa %xmm6,%xmm7
punpcklwd %xmm1,%xmm7
punpckhwd %xmm1,%xmm6
punpckhbw %xmm1,%xmm4
movdqa %xmm4,%xmm11
punpcklwd %xmm1,%xmm11
punpckhwd %xmm1,%xmm4
punpckhbw %xmm2,%xmm1
punpckhwd %xmm1,%xmm0
psrad  $0x18,%xmm0
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
punpcklbw %xmm2,%xmm3
punpckhwd %xmm3,%xmm2
psrad  $0x18,%xmm2
punpcklwd %xmm3,%xmm3
psrad  $0x18,%xmm3
movdqa 0x9c1(%rip),%xmm10
movdqa %xmm3,%xmm5
pandn  %xmm10,%xmm5
movdqa 0x9bf(%rip),%xmm13
pand   %xmm13,%xmm3
por    %xmm5,%xmm3
paddd  %xmm7,%xmm3
movdqa %xmm2,%xmm5
pandn  %xmm10,%xmm5
pand   %xmm13,%xmm2
por    %xmm5,%xmm2
paddd  %xmm6,%xmm2
movdqa %xmm1,%xmm5
pandn  %xmm10,%xmm5
pand   %xmm13,%xmm1
por    %xmm5,%xmm1
paddd  %xmm11,%xmm1
movdqa %xmm0,%xmm5
pandn  %xmm10,%xmm5
pand   %xmm13,%xmm0
por    %xmm5,%xmm0
paddd  %xmm4,%xmm0
pslld  $0x2,%xmm12
pslld  $0x2,%xmm9
pslld  $0x2,%xmm8
pslld  $0x2,%xmm15
movdqa 0x95f(%rip),%xmm4
paddd  %xmm4,%xmm15
paddd  %xmm4,%xmm8
paddd  %xmm4,%xmm9
paddd  %xmm4,%xmm12
pslld  $0x17,%xmm12
movdqa 0x94d(%rip),%xmm4
paddd  %xmm4,%xmm12
cvttps2dq %xmm12,%xmm5
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm3
pslld  $0x17,%xmm9
paddd  %xmm4,%xmm9
cvttps2dq %xmm9,%xmm5
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm2
pslld  $0x17,%xmm8
paddd  %xmm4,%xmm8
cvttps2dq %xmm8,%xmm5
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm5,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm1
pslld  $0x17,%xmm15
paddd  %xmm4,%xmm15
cvttps2dq %xmm15,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm0
movdqa 0x89b(%rip),%xmm4
pand   %xmm4,%xmm0
pand   %xmm4,%xmm1
packuswb %xmm0,%xmm1
pand   %xmm4,%xmm2
pand   %xmm4,%xmm3
packuswb %xmm2,%xmm3
packuswb %xmm1,%xmm3
paddb  %xmm3,%xmm14
pshufd $0xee,%xmm14,%xmm0
paddb  %xmm14,%xmm0
pxor   %xmm1,%xmm1
psadbw %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %r8,%r9
je     187c <ReadBase16+0x77c>
sub    %r8d,%esi
add    %r8,%rdi
lea    -0x4(,%rsi,4),%ecx
mov    %esi,%r8d
xor    %r10d,%r10d
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rdi,%r10,1),%edx
lea    0xc9(%rdx),%r9d
mov    %edx,%esi
add    $0xd0,%esi
cmp    $0x3a,%dl
cmovge %r9d,%esi
shl    %cl,%esi
add    %sil,%al
add    $0xfffffffc,%ecx
add    $0x1,%r10
cmp    %r10d,%r8d
jne    1850 <ReadBase16+0x750>
ret
pxor   %xmm14,%xmm14
xor    %edx,%edx
test   $0x1,%cl
jne    1611 <ReadBase16+0x511>
jmp    1816 <ReadBase16+0x716>

LLVM IR (-O0):
define signext i8 @ReadBase16(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i8
store i8* %0, i8** %3
store i32 %1, i32* %4
store i8 0, i8* %5
br label %6
6: ; preds = %26, %2
%7 = load i32, i32* %4
%8 = add nsw i32 %7, -1
store i32 %8, i32* %4
%9 = icmp ne i32 %7, 0
br i1 %9, label %10, label %37
10: ; preds = %6
%11 = load i8*, i8** %3
%12 = load i8, i8* %11
%13 = sext i8 %12 to i32
%14 = icmp sle i32 %13, 57
br i1 %14, label %15, label %20
15: ; preds = %10
%16 = load i8*, i8** %3
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = sub nsw i32 %18, 48
br label %26
20: ; preds = %10
%21 = load i8*, i8** %3
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = sub nsw i32 %23, 65
%25 = add nsw i32 %24, 10
br label %26
26: ; preds = %20, %15
%27 = phi i32 [ %19, %15 ], [ %25, %20 ]
%28 = load i32, i32* %4
%29 = mul nsw i32 %28, 4
%30 = shl i32 %27, %29
%31 = load i8, i8* %5
%32 = sext i8 %31 to i32
%33 = add nsw i32 %32, %30
%34 = trunc i32 %33 to i8
store i8 %34, i8* %5
%35 = load i8*, i8** %3
%36 = getelementptr inbounds i8, i8* %35, i32 1
store i8* %36, i8** %3
br label %6
37: ; preds = %6
%38 = load i8, i8* %5
ret i8 %38
}

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