#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 */

/* Variables and functions */
int hextoa(char *const a, size_t alen, const char *const hex, size_t hexlen) {
  size_t j = alen - (hexlen / 2);
  for (size_t i = 0; i < hexlen; ++i) {
    char c;
    if (hex[i] >= 0x61) {
      c = (char)((hex[i] - 0x57) << 4);
    } else if (hex[i] >= 0x41) {
      c = (char)((hex[i] - 0x37) << 4);
    } else {
      c = (char)((hex[i] - 0x30) << 4);
    }
    ++i;
    if (hex[i] >= 0x61) {
      c += hex[i] - 0x57;
    } else if (hex[i] >= 0x41) {
      c += hex[i] - 0x37;
    } else {
      c += hex[i] - 0x30;
    }
    a[j] = c;
    ++j;
  }
  return 0;
}


x86 assembly (clang, -O0):
<hextoa>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
shr    $0x1,%rcx
sub    %rcx,%rax
mov    %rax,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    126d <hextoa+0x16d>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     116c <hextoa+0x6c>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x57,%eax
shl    $0x4,%eax
mov    %al,-0x31(%rbp)
jmp    11b5 <hextoa+0xb5>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     119b <hextoa+0x9b>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x37,%eax
shl    $0x4,%eax
mov    %al,-0x31(%rbp)
jmp    11b0 <hextoa+0xb0>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
shl    $0x4,%eax
mov    %al,-0x31(%rbp)
jmp    11b5 <hextoa+0xb5>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     11f3 <hextoa+0xf3>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
sub    $0x57,%ecx
movsbl -0x31(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x31(%rbp)
jmp    1242 <hextoa+0x142>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     1225 <hextoa+0x125>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
sub    $0x37,%ecx
movsbl -0x31(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x31(%rbp)
jmp    123d <hextoa+0x13d>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
sub    $0x30,%ecx
movsbl -0x31(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x31(%rbp)
jmp    1242 <hextoa+0x142>
mov    -0x31(%rbp),%dl
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    112f <hextoa+0x2f>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<hextoa>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
test   %rcx,%rcx
je     1612 <hextoa+0x512>
mov    %rcx,%rax
shr    %rax
mov    %rsi,%r9
sub    %rax,%r9
lea    -0x1(%rcx),%r11
cmp    $0xe,%r11
jb     1158 <hextoa+0x58>
mov    %r11,%r8
shr    %r8
lea    (%rdi,%r9,1),%r10
lea    0x1(%rcx),%rbx
and    $0xfffffffffffffffe,%rbx
add    %rdx,%rbx
cmp    %rbx,%r10
jae    11c6 <hextoa+0xc6>
add    %r8,%rsi
sub    %rax,%rsi
lea    (%rsi,%rdi,1),%rax
add    $0x1,%rax
cmp    %rdx,%rax
jbe    11c6 <hextoa+0xc6>
xor    %esi,%esi
add    %r9,%rdi
mov    $0xc9,%r8d
mov    $0xa9,%r9d
jmp    11b7 <hextoa+0xb7>
nopl   0x0(%rax,%rax,1)
mov    %eax,%ebp
shl    $0x4,%bpl
lea    -0x70(%rbp),%ebx
cmp    $0x41,%al
movzbl %bpl,%ebp
movzbl %bl,%eax
cmovl  %ebp,%eax
movzbl 0x1(%rdx,%rsi,1),%ebx
cmp    $0x41,%bl
mov    $0xd0,%ebp
cmovge %r8d,%ebp
cmp    $0x61,%bl
cmovge %r9d,%ebp
add    %bl,%bpl
add    %al,%bpl
mov    %bpl,(%rdi)
add    $0x2,%rsi
add    $0x1,%rdi
cmp    %rcx,%rsi
jae    1612 <hextoa+0x512>
movzbl (%rdx,%rsi,1),%eax
cmp    $0x61,%al
jl     1170 <hextoa+0x70>
shl    $0x4,%al
add    $0x90,%al
jmp    1185 <hextoa+0x85>
add    $0x1,%r8
cmp    $0x1e,%r11
jae    11d8 <hextoa+0xd8>
xor    %r11d,%r11d
jmp    146e <hextoa+0x36e>
mov    %r8,%r11
and    $0xfffffffffffffff0,%r11
lea    0x1f(%rdx),%rsi
xor    %eax,%eax
movdqa 0xe12(%rip),%xmm9
movdqa 0xe1a(%rip),%xmm1
movdqa 0xe21(%rip),%xmm8
movdqa 0xe28(%rip),%xmm10
movdqa 0xe2f(%rip),%xmm11
movdqa 0xe36(%rip),%xmm12
movdqa 0xe3d(%rip),%xmm13
movdqa 0xe45(%rip),%xmm7
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%rsi,%rax,2),%ebx
movd   %ebx,%xmm0
movzbl -0x3(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
punpcklbw %xmm0,%xmm2
movzbl -0x5(%rsi,%rax,2),%ebx
movd   %ebx,%xmm0
movzbl -0x7(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm2,%xmm3
movzbl -0x9(%rsi,%rax,2),%ebx
movd   %ebx,%xmm0
movzbl -0xb(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
punpcklbw %xmm0,%xmm2
movzbl -0xd(%rsi,%rax,2),%ebx
movd   %ebx,%xmm4
movzbl -0xf(%rsi,%rax,2),%ebx
movd   %ebx,%xmm0
punpcklbw %xmm4,%xmm0
punpcklwd %xmm2,%xmm0
punpckldq %xmm3,%xmm0
movzbl -0x11(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x13(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
punpcklbw %xmm2,%xmm3
movzbl -0x15(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x17(%rsi,%rax,2),%ebx
movd   %ebx,%xmm4
punpcklbw %xmm2,%xmm4
punpcklwd %xmm3,%xmm4
movzbl -0x19(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x1b(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
punpcklbw %xmm2,%xmm3
movzbl -0x1d(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x1f(%rsi,%rax,2),%ebx
movd   %ebx,%xmm5
punpcklbw %xmm2,%xmm5
punpcklwd %xmm3,%xmm5
punpckldq %xmm4,%xmm5
punpcklqdq %xmm0,%xmm5
movdqa %xmm9,%xmm0
pcmpgtb %xmm5,%xmm0
movdqa %xmm5,%xmm2
pcmpgtb %xmm1,%xmm2
psllw  $0x4,%xmm5
pand   %xmm8,%xmm5
movdqa %xmm2,%xmm3
pandn  %xmm5,%xmm3
paddb  %xmm10,%xmm5
pand   %xmm5,%xmm2
por    %xmm3,%xmm2
pand   %xmm0,%xmm2
pandn  %xmm5,%xmm0
por    %xmm2,%xmm0
movzbl (%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x2(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
punpcklbw %xmm2,%xmm3
movzbl -0x4(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0x6(%rsi,%rax,2),%ebx
movd   %ebx,%xmm4
punpcklbw %xmm2,%xmm4
punpcklwd %xmm3,%xmm4
movzbl -0x8(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
movzbl -0xa(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
punpcklbw %xmm2,%xmm3
movzbl -0xc(%rsi,%rax,2),%ebx
movd   %ebx,%xmm5
movzbl -0xe(%rsi,%rax,2),%ebx
movd   %ebx,%xmm2
punpcklbw %xmm5,%xmm2
punpcklwd %xmm3,%xmm2
punpckldq %xmm4,%xmm2
movzbl -0x10(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
movzbl -0x12(%rsi,%rax,2),%ebx
movd   %ebx,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0x14(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
movzbl -0x16(%rsi,%rax,2),%ebx
movd   %ebx,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm4,%xmm5
movzbl -0x18(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
movzbl -0x1a(%rsi,%rax,2),%ebx
movd   %ebx,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0x1c(%rsi,%rax,2),%ebx
movd   %ebx,%xmm3
movzbl -0x1e(%rsi,%rax,2),%ebx
movd   %ebx,%xmm6
punpcklbw %xmm3,%xmm6
punpcklwd %xmm4,%xmm6
punpckldq %xmm5,%xmm6
punpcklqdq %xmm2,%xmm6
movdqa %xmm6,%xmm2
pcmpgtb %xmm11,%xmm2
movdqa %xmm6,%xmm3
pcmpgtb %xmm1,%xmm3
movdqa %xmm3,%xmm4
pandn  %xmm12,%xmm4
pand   %xmm13,%xmm3
por    %xmm4,%xmm3
movdqa %xmm2,%xmm4
pandn  %xmm3,%xmm4
pand   %xmm7,%xmm2
por    %xmm4,%xmm2
paddb  %xmm6,%xmm2
paddb  %xmm0,%xmm2
movdqu %xmm2,(%r10,%rax,1)
add    $0x10,%rax
cmp    %rax,%r11
jne    1230 <hextoa+0x130>
cmp    %r11,%r8
je     1612 <hextoa+0x512>
test   $0x8,%r8b
jne    146e <hextoa+0x36e>
add    %r11,%r9
add    %r11,%r11
mov    %r11,%rsi
jmp    115a <hextoa+0x5a>
mov    %r8,%r14
and    $0xfffffffffffffff8,%r14
lea    (%r14,%r14,1),%rsi
add    %r14,%r9
movdqa 0xbfb(%rip),%xmm8
movdqa 0xc03(%rip),%xmm1
movdqa 0xb8a(%rip),%xmm9
movdqa 0xc01(%rip),%xmm10
movdqa 0xc08(%rip),%xmm11
movdqa 0xc0f(%rip),%xmm12
movdqa 0xc17(%rip),%xmm6
movdqa 0xc1f(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rdx,%r11,2),%ebx
movzbl 0x4(%rdx,%r11,2),%ebp
movzbl 0x8(%rdx,%r11,2),%r12d
movzbl 0xc(%rdx,%r11,2),%r15d
movzbl 0x6(%rdx,%r11,2),%eax
shl    $0x8,%eax
or     %ebp,%eax
movzbl 0x2(%rdx,%r11,2),%ebp
shl    $0x8,%ebp
or     %ebx,%ebp
movd   %ebp,%xmm2
pinsrw $0x1,%eax,%xmm2
movzbl 0xa(%rdx,%r11,2),%eax
shl    $0x8,%eax
or     %r12d,%eax
pinsrw $0x2,%eax,%xmm2
movzbl 0xe(%rdx,%r11,2),%eax
shl    $0x8,%eax
or     %r15d,%eax
pinsrw $0x3,%eax,%xmm2
movdqa %xmm8,%xmm0
pcmpgtb %xmm2,%xmm0
movdqa %xmm2,%xmm3
pcmpgtb %xmm1,%xmm3
psllw  $0x4,%xmm2
pand   %xmm9,%xmm2
movdqa %xmm3,%xmm4
pandn  %xmm2,%xmm4
paddb  %xmm10,%xmm2
pand   %xmm2,%xmm3
por    %xmm4,%xmm3
pand   %xmm0,%xmm3
pandn  %xmm2,%xmm0
por    %xmm3,%xmm0
movzbl 0x1(%rdx,%r11,2),%eax
movzbl 0x5(%rdx,%r11,2),%ebx
movzbl 0x9(%rdx,%r11,2),%r15d
movzbl 0x7(%rdx,%r11,2),%ebp
shl    $0x8,%ebp
or     %ebx,%ebp
movzbl 0x3(%rdx,%r11,2),%ebx
shl    $0x8,%ebx
or     %eax,%ebx
movd   %ebx,%xmm2
pinsrw $0x1,%ebp,%xmm2
movzbl 0xd(%rdx,%r11,2),%eax
movzbl 0xb(%rdx,%r11,2),%ebx
shl    $0x8,%ebx
or     %r15d,%ebx
pinsrw $0x2,%ebx,%xmm2
movzbl 0xf(%rdx,%r11,2),%ebx
shl    $0x8,%ebx
or     %eax,%ebx
pinsrw $0x3,%ebx,%xmm2
movdqa %xmm2,%xmm3
pcmpgtb %xmm11,%xmm3
movdqa %xmm2,%xmm4
pcmpgtb %xmm1,%xmm4
movdqa %xmm4,%xmm5
pandn  %xmm12,%xmm5
pand   %xmm6,%xmm4
por    %xmm5,%xmm4
movdqa %xmm3,%xmm5
pandn  %xmm4,%xmm5
pand   %xmm7,%xmm3
por    %xmm5,%xmm3
paddb  %xmm2,%xmm3
paddb  %xmm0,%xmm3
movq   %xmm3,(%r10,%r11,1)
add    $0x8,%r11
cmp    %r11,%r14
jne    14d0 <hextoa+0x3d0>
cmp    %r14,%r8
jne    115a <hextoa+0x5a>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @hextoa(i8* %0, i64 %1, i8* %2, i64 %3) {
%5 = alloca i8*
%6 = alloca i64
%7 = alloca i8*
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i8
store i8* %0, i8** %5
store i64 %1, i64* %6
store i8* %2, i8** %7
store i64 %3, i64* %8
%12 = load i64, i64* %6
%13 = load i64, i64* %8
%14 = udiv i64 %13, 2
%15 = sub i64 %12, %14
store i64 %15, i64* %9
store i64 0, i64* %10
br label %16
16: ; preds = %119, %4
%17 = load i64, i64* %10
%18 = load i64, i64* %8
%19 = icmp ult i64 %17, %18
br i1 %19, label %20, label %122
20: ; preds = %16
%21 = load i8*, i8** %7
%22 = load i64, i64* %10
%23 = getelementptr inbounds i8, i8* %21, i64 %22
%24 = load i8, i8* %23
%25 = sext i8 %24 to i32
%26 = icmp sge i32 %25, 97
br i1 %26, label %27, label %36
27: ; preds = %20
%28 = load i8*, i8** %7
%29 = load i64, i64* %10
%30 = getelementptr inbounds i8, i8* %28, i64 %29
%31 = load i8, i8* %30
%32 = sext i8 %31 to i32
%33 = sub nsw i32 %32, 87
%34 = shl i32 %33, 4
%35 = trunc i32 %34 to i8
store i8 %35, i8* %11
br label %62
36: ; preds = %20
%37 = load i8*, i8** %7
%38 = load i64, i64* %10
%39 = getelementptr inbounds i8, i8* %37, i64 %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp sge i32 %41, 65
br i1 %42, label %43, label %52
43: ; preds = %36
%44 = load i8*, i8** %7
%45 = load i64, i64* %10
%46 = getelementptr inbounds i8, i8* %44, i64 %45
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = sub nsw i32 %48, 55
%50 = shl i32 %49, 4
%51 = trunc i32 %50 to i8
store i8 %51, i8* %11
br label %61
52: ; preds = %36
%53 = load i8*, i8** %7
%54 = load i64, i64* %10
%55 = getelementptr inbounds i8, i8* %53, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = sub nsw i32 %57, 48
%59 = shl i32 %58, 4
%60 = trunc i32 %59 to i8
store i8 %60, i8* %11
br label %61
61: ; preds = %52, %43
br label %62
62: ; preds = %61, %27
%63 = load i64, i64* %10
%64 = add i64 %63, 1
store i64 %64, i64* %10
%65 = load i8*, i8** %7
%66 = load i64, i64* %10
%67 = getelementptr inbounds i8, i8* %65, i64 %66
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = icmp sge i32 %69, 97
br i1 %70, label %71, label %82
71: ; preds = %62
%72 = load i8*, i8** %7
%73 = load i64, i64* %10
%74 = getelementptr inbounds i8, i8* %72, i64 %73
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
%77 = sub nsw i32 %76, 87
%78 = load i8, i8* %11
%79 = sext i8 %78 to i32
%80 = add nsw i32 %79, %77
%81 = trunc i32 %80 to i8
store i8 %81, i8* %11
br label %112
82: ; preds = %62
%83 = load i8*, i8** %7
%84 = load i64, i64* %10
%85 = getelementptr inbounds i8, i8* %83, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = icmp sge i32 %87, 65
br i1 %88, label %89, label %100
89: ; preds = %82
%90 = load i8*, i8** %7
%91 = load i64, i64* %10
%92 = getelementptr inbounds i8, i8* %90, i64 %91
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = sub nsw i32 %94, 55
%96 = load i8, i8* %11
%97 = sext i8 %96 to i32
%98 = add nsw i32 %97, %95
%99 = trunc i32 %98 to i8
store i8 %99, i8* %11
br label %111
100: ; preds = %82
%101 = load i8*, i8** %7
%102 = load i64, i64* %10
%103 = getelementptr inbounds i8, i8* %101, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = sub nsw i32 %105, 48
%107 = load i8, i8* %11
%108 = sext i8 %107 to i32
%109 = add nsw i32 %108, %106
%110 = trunc i32 %109 to i8
store i8 %110, i8* %11
br label %111
111: ; preds = %100, %89
br label %112
112: ; preds = %111, %71
%113 = load i8, i8* %11
%114 = load i8*, i8** %5
%115 = load i64, i64* %9
%116 = getelementptr inbounds i8, i8* %114, i64 %115
store i8 %113, i8* %116
%117 = load i64, i64* %9
%118 = add i64 %117, 1
store i64 %118, i64* %9
br label %119
119: ; preds = %112
%120 = load i64, i64* %10
%121 = add i64 %120, 1
store i64 %121, i64* %10
br label %16
122: ; preds = %16
ret i32 0
}

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