#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 unsigned char t;

/* Variables and functions */
unsigned char asc2bin(unsigned char);
__attribute__((visibility("default"))) void
http_uri_decode2(unsigned char *uri) {
  int i, o;
  unsigned char t, p;
  o = 0;
  for (i = 0; uri[i + o] != '\0'; i++) {
    if (uri[i + o] != '%') {
      if (o > 0)
        uri[i] = uri[i + o];
      continue;
    }
    if (uri[i + o + 1] == '\0' || uri[i + o + 2] == '\0')
      break;
    if ((t = asc2bin(uri[i + o + 1])) == 0xFF)
      continue;
    p = (t << 4) & 0xF0;
    if ((t = asc2bin(uri[i + o + 2])) == 0xFF)
      continue;
    p |= (t)&0x0F;
    if (p == 0x2F) {
      int q;
      for (q = 0; q <= o; q++)
        uri[i + q] = uri[i + o + q];
      i += 2;
      continue;
    }
    uri[i] = p;
    o += 2;
  }
  uri[i] = '\0';
}


x86 assembly (clang, -O0):
<http_uri_decode2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     12c8 <http_uri_decode2+0x1b8>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x25,%eax
je     1188 <http_uri_decode2+0x78>
cmpl   $0x0,-0x10(%rbp)
jle    1183 <http_uri_decode2+0x73>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12ba <http_uri_decode2+0x1aa>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     11c2 <http_uri_decode2+0xb2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    11c7 <http_uri_decode2+0xb7>
jmp    12c8 <http_uri_decode2+0x1b8>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
call   1030 <asc2bin@plt>
mov    %al,-0x11(%rbp)
movzbl %al,%eax
cmp    $0xff,%eax
jne    11f6 <http_uri_decode2+0xe6>
jmp    12ba <http_uri_decode2+0x1aa>
movzbl -0x11(%rbp),%eax
shl    $0x4,%eax
and    $0xf0,%eax
mov    %al,-0x12(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%edi
call   1030 <asc2bin@plt>
mov    %al,-0x11(%rbp)
movzbl %al,%eax
cmp    $0xff,%eax
jne    1234 <http_uri_decode2+0x124>
jmp    12ba <http_uri_decode2+0x1aa>
movzbl -0x11(%rbp),%ecx
and    $0xf,%ecx
movzbl -0x12(%rbp),%eax
or     %ecx,%eax
mov    %al,-0x12(%rbp)
movzbl -0x12(%rbp),%eax
cmp    $0x2f,%eax
jne    12a3 <http_uri_decode2+0x193>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1295 <http_uri_decode2+0x185>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x18(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1258 <http_uri_decode2+0x148>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    12ba <http_uri_decode2+0x1aa>
mov    -0x12(%rbp),%dl
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    112a <http_uri_decode2+0x1a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<http_uri_decode2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdi,%r14
lea    0x30(%rdi),%rbp
lea    0x3(%rdi),%rax
mov    %rax,0x10(%rsp)
xor    %r12d,%r12d
xor    %r13d,%r13d
jmp    1154 <http_uri_decode2+0x44>
movslq %r12d,%rcx
mov    %al,(%r14,%rcx,1)
add    $0x2,%r13d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
lea    (%r12,%r13,1),%eax
movslq %eax,%r15
mov    (%r14,%r15,1),%al
cmp    $0x25,%al
je     1180 <http_uri_decode2+0x70>
test   %al,%al
je     1389 <http_uri_decode2+0x279>
test   %r13d,%r13d
jle    1150 <http_uri_decode2+0x40>
movslq %r12d,%rcx
mov    %al,(%r14,%rcx,1)
add    $0x1,%r12d
jmp    1154 <http_uri_decode2+0x44>
nopl   (%rax)
mov    0x1(%r15,%r14,1),%al
test   %al,%al
je     1389 <http_uri_decode2+0x279>
cmpb   $0x0,0x2(%r15,%r14,1)
je     1389 <http_uri_decode2+0x279>
movzbl %al,%edi
call   1030 <asc2bin@plt>
cmp    $0xff,%al
je     1150 <http_uri_decode2+0x40>
mov    %eax,%ebx
movzbl 0x2(%r14,%r15,1),%edi
call   1030 <asc2bin@plt>
cmp    $0xff,%al
je     1150 <http_uri_decode2+0x40>
shl    $0x4,%bl
and    $0xf,%al
or     %bl,%al
cmp    $0x2f,%al
jne    1136 <http_uri_decode2+0x26>
test   %r13d,%r13d
js     128c <http_uri_decode2+0x17c>
movslq %r12d,%rax
lea    0x1(%r13),%ebx
movslq %r13d,%r9
cmp    $0x7,%r13d
jb     120a <http_uri_decode2+0xfa>
lea    (%r14,%rax,1),%rdx
lea    (%rax,%r9,1),%r10
lea    (%r10,%rbx,1),%rcx
add    %r14,%rcx
cmp    %rcx,%rdx
jae    1299 <http_uri_decode2+0x189>
lea    (%r14,%r15,1),%rcx
lea    (%rax,%rbx,1),%rsi
add    %r14,%rsi
cmp    %rsi,%rcx
jae    1299 <http_uri_decode2+0x189>
xor    %edi,%edi
mov    %rdi,%r8
not    %r8
add    %rbx,%r8
mov    %rbx,%rcx
and    $0x3,%rcx
je     124b <http_uri_decode2+0x13b>
mov    %rdi,%rsi
neg    %rsi
add    %rax,%rdi
add    %r14,%rdi
nopw   0x0(%rax,%rax,1)
movzbl (%rdi,%r9,1),%edx
mov    %dl,(%rdi)
add    $0xffffffffffffffff,%rsi
add    $0x1,%rdi
add    $0xffffffffffffffff,%rcx
jne    1230 <http_uri_decode2+0x120>
neg    %rsi
mov    %rsi,%rdi
cmp    $0x3,%r8
jb     128c <http_uri_decode2+0x17c>
sub    %rdi,%rbx
add    %rdi,%rax
add    0x10(%rsp),%rax
nopl   0x0(%rax)
movzbl -0x3(%rax,%r9,1),%ecx
mov    %cl,-0x3(%rax)
movzbl -0x2(%rax,%r9,1),%ecx
mov    %cl,-0x2(%rax)
movzbl -0x1(%rax,%r9,1),%ecx
mov    %cl,-0x1(%rax)
movzbl (%rax,%r9,1),%ecx
mov    %cl,(%rax)
add    $0x4,%rax
add    $0xfffffffffffffffc,%rbx
jne    1260 <http_uri_decode2+0x150>
add    $0x2,%r12d
add    $0x1,%r12d
jmp    1154 <http_uri_decode2+0x44>
cmp    $0x1f,%r13d
jae    12a6 <http_uri_decode2+0x196>
xor    %edi,%edi
jmp    134e <http_uri_decode2+0x23e>
mov    %ebx,%edi
and    $0xffffffe0,%edi
lea    -0x20(%rdi),%rcx
mov    %rcx,%r8
shr    $0x5,%r8
add    $0x1,%r8
test   %rcx,%rcx
mov    %rbp,0x8(%rsp)
je     137f <http_uri_decode2+0x26f>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
lea    (%r15,%rbp,1),%r11
add    %rax,%rbp
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movups -0x30(%r11,%rsi,1),%xmm0
movups -0x20(%r11,%rsi,1),%xmm1
movups %xmm0,-0x30(%rbp,%rsi,1)
movups %xmm1,-0x20(%rbp,%rsi,1)
movups -0x10(%r11,%rsi,1),%xmm0
movups (%r11,%rsi,1),%xmm1
movups %xmm0,-0x10(%rbp,%rsi,1)
movups %xmm1,0x0(%rbp,%rsi,1)
add    $0x40,%rsi
add    $0xfffffffffffffffe,%rcx
jne    12e0 <http_uri_decode2+0x1d0>
test   $0x1,%r8b
je     1337 <http_uri_decode2+0x227>
add    %rsi,%r15
movups (%r14,%r15,1),%xmm0
movups 0x10(%r14,%r15,1),%xmm1
add    %rax,%rsi
movups %xmm0,(%r14,%rsi,1)
movups %xmm1,0x10(%r14,%rsi,1)
cmp    %rbx,%rdi
mov    0x8(%rsp),%rbp
je     128c <http_uri_decode2+0x17c>
test   $0x18,%bl
je     120c <http_uri_decode2+0xfc>
mov    %rdi,%rcx
mov    %ebx,%edi
and    $0xfffffff8,%edi
add    %r14,%r10
nopl   0x0(%rax)
mov    (%r10,%rcx,1),%rsi
mov    %rsi,(%rdx,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rdi
jne    1360 <http_uri_decode2+0x250>
cmp    %rbx,%rdi
je     128c <http_uri_decode2+0x17c>
jmp    120c <http_uri_decode2+0xfc>
xor    %esi,%esi
test   $0x1,%r8b
jne    131b <http_uri_decode2+0x20b>
jmp    1337 <http_uri_decode2+0x227>
movslq %r12d,%rax
movb   $0x0,(%r14,%rax,1)
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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