void append(char *o, char *p) {
  int i, j, k;
  for (i = 0; i < 32; i++)
    if (o[i] == '\0')
      break;
  for (j = 0; j < 32; j++)
    if (p[j] == '\0')
      break;
  if (i + j <= 32) {
    for (k = 0; k < j; k++)
      o[i + k] = p[k];
    o[i + k] = '\0';
  }
}


x86 assembly (clang, -O0):
<append>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x20,-0x14(%rbp)
jge    114a <append+0x4a>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1137 <append+0x37>
jmp    114a <append+0x4a>
jmp    113c <append+0x3c>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1113 <append+0x13>
movl   $0x0,-0x18(%rbp)
cmpl   $0x20,-0x18(%rbp)
jge    1188 <append+0x88>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1175 <append+0x75>
jmp    1188 <append+0x88>
jmp    117a <append+0x7a>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1151 <append+0x51>
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
cmp    $0x20,%eax
jg     11e4 <append+0xe4>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11d3 <append+0xd3>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    119e <append+0x9e>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
pop    %rbp
ret

x86 assembly (clang, -O2):
<append>:
push   %r15
push   %r14
push   %r12
push   %rbx
xor    %r11d,%r11d
cmpb   $0x0,(%rdi)
mov    $0x0,%r10d
je     136d <append+0x26d>
cmpb   $0x0,0x1(%rdi)
je     1258 <append+0x158>
cmpb   $0x0,0x2(%rdi)
je     1263 <append+0x163>
cmpb   $0x0,0x3(%rdi)
je     126e <append+0x16e>
cmpb   $0x0,0x4(%rdi)
je     1279 <append+0x179>
cmpb   $0x0,0x5(%rdi)
je     1284 <append+0x184>
cmpb   $0x0,0x6(%rdi)
je     128f <append+0x18f>
cmpb   $0x0,0x7(%rdi)
je     129a <append+0x19a>
cmpb   $0x0,0x8(%rdi)
je     12a5 <append+0x1a5>
cmpb   $0x0,0x9(%rdi)
je     12b0 <append+0x1b0>
cmpb   $0x0,0xa(%rdi)
je     12bb <append+0x1bb>
cmpb   $0x0,0xb(%rdi)
je     12c6 <append+0x1c6>
cmpb   $0x0,0xc(%rdi)
je     12d1 <append+0x1d1>
cmpb   $0x0,0xd(%rdi)
je     12dc <append+0x1dc>
cmpb   $0x0,0xe(%rdi)
je     12e7 <append+0x1e7>
cmpb   $0x0,0xf(%rdi)
je     12ef <append+0x1ef>
cmpb   $0x0,0x10(%rdi)
je     12f7 <append+0x1f7>
cmpb   $0x0,0x11(%rdi)
je     12ff <append+0x1ff>
cmpb   $0x0,0x12(%rdi)
je     1307 <append+0x207>
cmpb   $0x0,0x13(%rdi)
je     130f <append+0x20f>
cmpb   $0x0,0x14(%rdi)
je     1317 <append+0x217>
cmpb   $0x0,0x15(%rdi)
je     131f <append+0x21f>
cmpb   $0x0,0x16(%rdi)
je     1327 <append+0x227>
cmpb   $0x0,0x17(%rdi)
je     132f <append+0x22f>
cmpb   $0x0,0x18(%rdi)
je     1337 <append+0x237>
cmpb   $0x0,0x19(%rdi)
je     133f <append+0x23f>
cmpb   $0x0,0x1a(%rdi)
je     1347 <append+0x247>
cmpb   $0x0,0x1b(%rdi)
je     134f <append+0x24f>
cmpb   $0x0,0x1c(%rdi)
je     1357 <append+0x257>
cmpb   $0x0,0x1d(%rdi)
je     135f <append+0x25f>
cmpb   $0x0,0x1e(%rdi)
je     1367 <append+0x267>
cmpb   $0x1,0x1f(%rdi)
mov    $0x20,%r10d
sbb    $0x0,%r10d
jmp    136d <append+0x26d>
mov    $0x1,%r10d
jmp    136d <append+0x26d>
mov    $0x2,%r10d
jmp    136d <append+0x26d>
mov    $0x3,%r10d
jmp    136d <append+0x26d>
mov    $0x4,%r10d
jmp    136d <append+0x26d>
mov    $0x5,%r10d
jmp    136d <append+0x26d>
mov    $0x6,%r10d
jmp    136d <append+0x26d>
mov    $0x7,%r10d
jmp    136d <append+0x26d>
mov    $0x8,%r10d
jmp    136d <append+0x26d>
mov    $0x9,%r10d
jmp    136d <append+0x26d>
mov    $0xa,%r10d
jmp    136d <append+0x26d>
mov    $0xb,%r10d
jmp    136d <append+0x26d>
mov    $0xc,%r10d
jmp    136d <append+0x26d>
mov    $0xd,%r10d
jmp    136d <append+0x26d>
mov    $0xe,%r10d
jmp    136d <append+0x26d>
mov    $0xf,%r10d
jmp    136d <append+0x26d>
mov    $0x10,%r10d
jmp    136d <append+0x26d>
mov    $0x11,%r10d
jmp    136d <append+0x26d>
mov    $0x12,%r10d
jmp    136d <append+0x26d>
mov    $0x13,%r10d
jmp    136d <append+0x26d>
mov    $0x14,%r10d
jmp    136d <append+0x26d>
mov    $0x15,%r10d
jmp    136d <append+0x26d>
mov    $0x16,%r10d
jmp    136d <append+0x26d>
mov    $0x17,%r10d
jmp    136d <append+0x26d>
mov    $0x18,%r10d
jmp    136d <append+0x26d>
mov    $0x19,%r10d
jmp    136d <append+0x26d>
mov    $0x1a,%r10d
jmp    136d <append+0x26d>
mov    $0x1b,%r10d
jmp    136d <append+0x26d>
mov    $0x1c,%r10d
jmp    136d <append+0x26d>
mov    $0x1d,%r10d
jmp    136d <append+0x26d>
mov    $0x1e,%r10d
mov    (%rsi),%dl
test   %dl,%dl
je     175b <append+0x65b>
cmpb   $0x0,0x1(%rsi)
je     14b6 <append+0x3b6>
cmpb   $0x0,0x2(%rsi)
je     14c1 <append+0x3c1>
cmpb   $0x0,0x3(%rsi)
je     14cc <append+0x3cc>
cmpb   $0x0,0x4(%rsi)
je     14d7 <append+0x3d7>
cmpb   $0x0,0x5(%rsi)
je     14e2 <append+0x3e2>
cmpb   $0x0,0x6(%rsi)
je     14ed <append+0x3ed>
cmpb   $0x0,0x7(%rsi)
je     14f8 <append+0x3f8>
cmpb   $0x0,0x8(%rsi)
je     1503 <append+0x403>
cmpb   $0x0,0x9(%rsi)
je     150e <append+0x40e>
cmpb   $0x0,0xa(%rsi)
je     1519 <append+0x419>
cmpb   $0x0,0xb(%rsi)
je     1524 <append+0x424>
cmpb   $0x0,0xc(%rsi)
je     152f <append+0x42f>
cmpb   $0x0,0xd(%rsi)
je     153a <append+0x43a>
cmpb   $0x0,0xe(%rsi)
je     1545 <append+0x445>
cmpb   $0x0,0xf(%rsi)
je     154d <append+0x44d>
cmpb   $0x0,0x10(%rsi)
je     1555 <append+0x455>
cmpb   $0x0,0x11(%rsi)
je     155d <append+0x45d>
cmpb   $0x0,0x12(%rsi)
je     1565 <append+0x465>
cmpb   $0x0,0x13(%rsi)
je     156d <append+0x46d>
cmpb   $0x0,0x14(%rsi)
je     1575 <append+0x475>
cmpb   $0x0,0x15(%rsi)
je     157d <append+0x47d>
cmpb   $0x0,0x16(%rsi)
je     1585 <append+0x485>
cmpb   $0x0,0x17(%rsi)
je     158d <append+0x48d>
cmpb   $0x0,0x18(%rsi)
je     1595 <append+0x495>
cmpb   $0x0,0x19(%rsi)
je     159d <append+0x49d>
cmpb   $0x0,0x1a(%rsi)
je     15a5 <append+0x4a5>
cmpb   $0x0,0x1b(%rsi)
je     15ad <append+0x4ad>
cmpb   $0x0,0x1c(%rsi)
je     15b5 <append+0x4b5>
cmpb   $0x0,0x1d(%rsi)
je     15bd <append+0x4bd>
cmpb   $0x0,0x1e(%rsi)
je     15c5 <append+0x4c5>
cmpb   $0x1,0x1f(%rsi)
mov    $0x20,%r11d
sbb    $0x0,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1,%r11d
jmp    15cb <append+0x4cb>
mov    $0x2,%r11d
jmp    15cb <append+0x4cb>
mov    $0x3,%r11d
jmp    15cb <append+0x4cb>
mov    $0x4,%r11d
jmp    15cb <append+0x4cb>
mov    $0x5,%r11d
jmp    15cb <append+0x4cb>
mov    $0x6,%r11d
jmp    15cb <append+0x4cb>
mov    $0x7,%r11d
jmp    15cb <append+0x4cb>
mov    $0x8,%r11d
jmp    15cb <append+0x4cb>
mov    $0x9,%r11d
jmp    15cb <append+0x4cb>
mov    $0xa,%r11d
jmp    15cb <append+0x4cb>
mov    $0xb,%r11d
jmp    15cb <append+0x4cb>
mov    $0xc,%r11d
jmp    15cb <append+0x4cb>
mov    $0xd,%r11d
jmp    15cb <append+0x4cb>
mov    $0xe,%r11d
jmp    15cb <append+0x4cb>
mov    $0xf,%r11d
jmp    15cb <append+0x4cb>
mov    $0x10,%r11d
jmp    15cb <append+0x4cb>
mov    $0x11,%r11d
jmp    15cb <append+0x4cb>
mov    $0x12,%r11d
jmp    15cb <append+0x4cb>
mov    $0x13,%r11d
jmp    15cb <append+0x4cb>
mov    $0x14,%r11d
jmp    15cb <append+0x4cb>
mov    $0x15,%r11d
jmp    15cb <append+0x4cb>
mov    $0x16,%r11d
jmp    15cb <append+0x4cb>
mov    $0x17,%r11d
jmp    15cb <append+0x4cb>
mov    $0x18,%r11d
jmp    15cb <append+0x4cb>
mov    $0x19,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1a,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1b,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1c,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1d,%r11d
jmp    15cb <append+0x4cb>
mov    $0x1e,%r11d
lea    (%r11,%r10,1),%eax
cmp    $0x20,%eax
ja     1768 <append+0x668>
mov    %r10d,%r8d
mov    %dl,(%rdi,%r8,1)
cmp    $0x1,%r11d
je     175b <append+0x65b>
mov    %r11d,%r15d
lea    -0x1(%r15),%r9
mov    $0x1,%ecx
cmp    $0x8,%r9
jb     16f0 <append+0x5f0>
lea    (%r8,%rdi,1),%r12
add    $0x1,%r12
lea    (%rsi,%r15,1),%rax
cmp    %rax,%r12
jae    1624 <append+0x524>
lea    (%r8,%r15,1),%rax
add    %rdi,%rax
lea    0x1(%rsi),%rdx
cmp    %rax,%rdx
jb     16f0 <append+0x5f0>
cmp    $0x20,%r9
jae    1631 <append+0x531>
xor    %ebx,%ebx
jmp    16c1 <append+0x5c1>
mov    %r9,%rbx
and    $0xffffffffffffffe0,%rbx
lea    -0x20(%rbx),%rax
mov    %rax,%r14
shr    $0x5,%r14
add    $0x1,%r14
test   %rax,%rax
je     1692 <append+0x592>
mov    %r14,%rdx
and    $0xfffffffffffffffe,%rdx
lea    (%rdi,%r8,1),%rax
mov    $0x1,%ecx
nopl   0x0(%rax)
movups (%rsi,%rcx,1),%xmm0
movups 0x10(%rsi,%rcx,1),%xmm1
movups %xmm0,(%rax,%rcx,1)
movups %xmm1,0x10(%rax,%rcx,1)
movups 0x20(%rsi,%rcx,1),%xmm0
movups 0x30(%rsi,%rcx,1),%xmm1
movups %xmm0,0x20(%rax,%rcx,1)
movups %xmm1,0x30(%rax,%rcx,1)
add    $0x40,%rcx
add    $0xfffffffffffffffe,%rdx
jne    1660 <append+0x560>
jmp    1697 <append+0x597>
mov    $0x1,%ecx
test   $0x1,%r14b
je     16b2 <append+0x5b2>
movups (%rsi,%rcx,1),%xmm0
movups 0x10(%rsi,%rcx,1),%xmm1
add    %r8,%rcx
movups %xmm0,(%rdi,%rcx,1)
movups %xmm1,0x10(%rdi,%rcx,1)
cmp    %rbx,%r9
je     175b <append+0x65b>
test   $0x18,%r9b
je     16e9 <append+0x5e9>
mov    %r9,%rax
and    $0xfffffffffffffff8,%rax
lea    0x1(%rax),%rcx
nopl   0x0(%rax)
mov    0x1(%rsi,%rbx,1),%rdx
mov    %rdx,(%r12,%rbx,1)
add    $0x8,%rbx
cmp    %rbx,%rax
jne    16d0 <append+0x5d0>
cmp    %rax,%r9
jne    16f0 <append+0x5f0>
jmp    175b <append+0x65b>
or     $0x1,%rbx
mov    %rbx,%rcx
mov    %r15d,%edx
sub    %ecx,%edx
mov    %rcx,%r9
not    %r9
add    %r15,%r9
and    $0x3,%rdx
je     1721 <append+0x621>
lea    (%rdi,%r8,1),%rbx
nopl   0x0(%rax,%rax,1)
movzbl (%rsi,%rcx,1),%eax
mov    %al,(%rbx,%rcx,1)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdx
jne    1710 <append+0x610>
cmp    $0x3,%r9
jb     175b <append+0x65b>
lea    (%r8,%rdi,1),%rax
add    $0x3,%rax
nop
movzbl (%rsi,%rcx,1),%edx
mov    %dl,-0x3(%rax,%rcx,1)
movzbl 0x1(%rsi,%rcx,1),%edx
mov    %dl,-0x2(%rax,%rcx,1)
movzbl 0x2(%rsi,%rcx,1),%edx
mov    %dl,-0x1(%rax,%rcx,1)
movzbl 0x3(%rsi,%rcx,1),%edx
mov    %dl,(%rax,%rcx,1)
add    $0x4,%rcx
cmp    %rcx,%r15
jne    1730 <append+0x630>
mov    %r11d,%eax
mov    %r10d,%ecx
add    %rax,%rcx
movb   $0x0,(%rdi,%rcx,1)
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @append(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %3
store i8* %1, i8** %4
store i32 0, i32* %5
br label %8
8: ; preds = %21, %2
%9 = load i32, i32* %5
%10 = icmp slt i32 %9, 32
br i1 %10, label %11, label %24
11: ; preds = %8
%12 = load i8*, i8** %3
%13 = load i32, i32* %5
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds i8, i8* %12, i64 %14
%16 = load i8, i8* %15
%17 = sext i8 %16 to i32
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %20
19: ; preds = %11
br label %24
20: ; preds = %11
br label %21
21: ; preds = %20
%22 = load i32, i32* %5
%23 = add nsw i32 %22, 1
store i32 %23, i32* %5
br label %8
24: ; preds = %19, %8
store i32 0, i32* %6
br label %25
25: ; preds = %38, %24
%26 = load i32, i32* %6
%27 = icmp slt i32 %26, 32
br i1 %27, label %28, label %41
28: ; preds = %25
%29 = load i8*, i8** %4
%30 = load i32, i32* %6
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %29, i64 %31
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %37
36: ; preds = %28
br label %41
37: ; preds = %28
br label %38
38: ; preds = %37
%39 = load i32, i32* %6
%40 = add nsw i32 %39, 1
store i32 %40, i32* %6
br label %25
41: ; preds = %36, %25
%42 = load i32, i32* %5
%43 = load i32, i32* %6
%44 = add nsw i32 %42, %43
%45 = icmp sle i32 %44, 32
br i1 %45, label %46, label %73
46: ; preds = %41
store i32 0, i32* %7
br label %47
47: ; preds = %63, %46
%48 = load i32, i32* %7
%49 = load i32, i32* %6
%50 = icmp slt i32 %48, %49
br i1 %50, label %51, label %66
51: ; preds = %47
%52 = load i8*, i8** %4
%53 = load i32, i32* %7
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %52, i64 %54
%56 = load i8, i8* %55
%57 = load i8*, i8** %3
%58 = load i32, i32* %5
%59 = load i32, i32* %7
%60 = add nsw i32 %58, %59
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %57, i64 %61
store i8 %56, i8* %62
br label %63
63: ; preds = %51
%64 = load i32, i32* %7
%65 = add nsw i32 %64, 1
store i32 %65, i32* %7
br label %47
66: ; preds = %47
%67 = load i8*, i8** %3
%68 = load i32, i32* %5
%69 = load i32, i32* %7
%70 = add nsw i32 %68, %69
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %67, i64 %71
store i8 0, i8* %72
br label %73
73: ; preds = %66, %41
ret void
}

LLVM IR (-O2):
define void @append(i8* nocapture %0, i8* nocapture %1) {
%3 = load i8, i8* %0
%4 = icmp eq i8 %3, 0
br i1 %4, label %130, label %5
5: ; preds = %2
%6 = getelementptr inbounds i8, i8* %0, i64 1
%7 = load i8, i8* %6
%8 = icmp eq i8 %7, 0
br i1 %8, label %130, label %9
9: ; preds = %5
%10 = getelementptr inbounds i8, i8* %0, i64 2
%11 = load i8, i8* %10
%12 = icmp eq i8 %11, 0
br i1 %12, label %130, label %13
13: ; preds = %9
%14 = getelementptr inbounds i8, i8* %0, i64 3
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 0
br i1 %16, label %130, label %17
17: ; preds = %13
%18 = getelementptr inbounds i8, i8* %0, i64 4
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, 0
br i1 %20, label %130, label %21
21: ; preds = %17
%22 = getelementptr inbounds i8, i8* %0, i64 5
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, 0
br i1 %24, label %130, label %25
25: ; preds = %21
%26 = getelementptr inbounds i8, i8* %0, i64 6
%27 = load i8, i8* %26
%28 = icmp eq i8 %27, 0
br i1 %28, label %130, label %29
29: ; preds = %25
%30 = getelementptr inbounds i8, i8* %0, i64 7
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, 0
br i1 %32, label %130, label %33
33: ; preds = %29
%34 = getelementptr inbounds i8, i8* %0, i64 8
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, 0
br i1 %36, label %130, label %37
37: ; preds = %33
%38 = getelementptr inbounds i8, i8* %0, i64 9
%39 = load i8, i8* %38
%40 = icmp eq i8 %39, 0
br i1 %40, label %130, label %41
41: ; preds = %37
%42 = getelementptr inbounds i8, i8* %0, i64 10
%43 = load i8, i8* %42
%44 = icmp eq i8 %43, 0
br i1 %44, label %130, label %45
45: ; preds = %41
%46 = getelementptr inbounds i8, i8* %0, i64 11
%47 = load i8, i8* %46
%48 = icmp eq i8 %47, 0
br i1 %48, label %130, label %49
49: ; preds = %45
%50 = getelementptr inbounds i8, i8* %0, i64 12
%51 = load i8, i8* %50
%52 = icmp eq i8 %51, 0
br i1 %52, label %130, label %53
53: ; preds = %49
%54 = getelementptr inbounds i8, i8* %0, i64 13
%55 = load i8, i8* %54
%56 = icmp eq i8 %55, 0
br i1 %56, label %130, label %57
57: ; preds = %53
%58 = getelementptr inbounds i8, i8* %0, i64 14
%59 = load i8, i8* %58
%60 = icmp eq i8 %59, 0
br i1 %60, label %130, label %61
61: ; preds = %57
%62 = getelementptr inbounds i8, i8* %0, i64 15
%63 = load i8, i8* %62
%64 = icmp eq i8 %63, 0
br i1 %64, label %130, label %65
65: ; preds = %61
%66 = getelementptr inbounds i8, i8* %0, i64 16
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, 0
br i1 %68, label %130, label %69
69: ; preds = %65
%70 = getelementptr inbounds i8, i8* %0, i64 17
%71 = load i8, i8* %70
%72 = icmp eq i8 %71, 0
br i1 %72, label %130, label %73
73: ; preds = %69
%74 = getelementptr inbounds i8, i8* %0, i64 18
%75 = load i8, i8* %74
%76 = icmp eq i8 %75, 0
br i1 %76, label %130, label %77
77: ; preds = %73
%78 = getelementptr inbounds i8, i8* %0, i64 19
%79 = load i8, i8* %78
%80 = icmp eq i8 %79, 0
br i1 %80, label %130, label %81
81: ; preds = %77
%82 = getelementptr inbounds i8, i8* %0, i64 20
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 0
br i1 %84, label %130, label %85
85: ; preds = %81
%86 = getelementptr inbounds i8, i8* %0, i64 21
%87 = load i8, i8* %86
%88 = icmp eq i8 %87, 0
br i1 %88, label %130, label %89
89: ; preds = %85
%90 = getelementptr inbounds i8, i8* %0, i64 22
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 0
br i1 %92, label %130, label %93
93: ; preds = %89
%94 = getelementptr inbounds i8, i8* %0, i64 23
%95 = load i8, i8* %94
%96 = icmp eq i8 %95, 0
br i1 %96, label %130, label %97
97: ; preds = %93
%98 = getelementptr inbounds i8, i8* %0, i64 24
%99 = load i8, i8* %98
%100 = icmp eq i8 %99, 0
br i1 %100, label %130, label %101
101: ; preds = %97
%102 = getelementptr inbounds i8, i8* %0, i64 25
%103 = load i8, i8* %102
%104 = icmp eq i8 %103, 0
br i1 %104, label %130, label %105
105: ; preds = %101
%106 = getelementptr inbounds i8, i8* %0, i64 26
%107 = load i8, i8* %106
%108 = icmp eq i8 %107, 0
br i1 %108, label %130, label %109
109: ; preds = %105
%110 = getelementptr inbounds i8, i8* %0, i64 27
%111 = load i8, i8* %110
%112 = icmp eq i8 %111, 0
br i1 %112, label %130, label %113
113: ; preds = %109
%114 = getelementptr inbounds i8, i8* %0, i64 28
%115 = load i8, i8* %114
%116 = icmp eq i8 %115, 0
br i1 %116, label %130, label %117
117: ; preds = %113
%118 = getelementptr inbounds i8, i8* %0, i64 29
%119 = load i8, i8* %118
%120 = icmp eq i8 %119, 0
br i1 %120, label %130, label %121
121: ; preds = %117
%122 = getelementptr inbounds i8, i8* %0, i64 30
%123 = load i8, i8* %122
%124 = icmp eq i8 %123, 0
br i1 %124, label %130, label %125
125: ; preds = %121
%126 = getelementptr inbounds i8, i8* %0, i64 31
%127 = load i8, i8* %126
%128 = icmp eq i8 %127, 0
%129 = select i1 %128, i32 31, i32 32
br label %130
130: ; preds = %125, %121, %117, %113, %109, %105, %101, %97, %93, %89, %85, %81, %77, %73, %69, %65, %61, %57, %53, %49, %45, %41, %37, %33, %29, %25, %21, %17, %13, %9, %5, %2
%131 = phi i32 [ 0, %2 ], [ 1, %5 ], [ 2, %9 ], [ 3, %13 ], [ 4, %17 ], [ 5, %21 ], [ 6, %25 ], [ 7, %29 ], [ 8, %33 ], [ 9, %37 ], [ 10, %41 ], [ 11, %45 ], [ 12, %49 ], [ 13, %53 ], [ 14, %57 ], [ 15, %61 ], [ 16, %65 ], [ 17, %69 ], [ 18, %73 ], [ 19, %77 ], [ 20, %81 ], [ 21, %85 ], [ 22, %89 ], [ 23, %93 ], [ 24, %97 ], [ 25, %101 ], [ 26, %105 ], [ 27, %109 ], [ 28, %113 ], [ 29, %117 ], [ 30, %121 ], [ %129, %125 ]
%132 = load i8, i8* %1
%133 = icmp eq i8 %132, 0
br i1 %133, label %406, label %134
134: ; preds = %130
%135 = getelementptr inbounds i8, i8* %1, i64 1
%136 = load i8, i8* %135
%137 = icmp eq i8 %136, 0
br i1 %137, label %259, label %138
138: ; preds = %134
%139 = getelementptr inbounds i8, i8* %1, i64 2
%140 = load i8, i8* %139
%141 = icmp eq i8 %140, 0
br i1 %141, label %259, label %142
142: ; preds = %138
%143 = getelementptr inbounds i8, i8* %1, i64 3
%144 = load i8, i8* %143
%145 = icmp eq i8 %144, 0
br i1 %145, label %259, label %146
146: ; preds = %142
%147 = getelementptr inbounds i8, i8* %1, i64 4
%148 = load i8, i8* %147
%149 = icmp eq i8 %148, 0
br i1 %149, label %259, label %150
150: ; preds = %146
%151 = getelementptr inbounds i8, i8* %1, i64 5
%152 = load i8, i8* %151
%153 = icmp eq i8 %152, 0
br i1 %153, label %259, label %154
154: ; preds = %150
%155 = getelementptr inbounds i8, i8* %1, i64 6
%156 = load i8, i8* %155
%157 = icmp eq i8 %156, 0
br i1 %157, label %259, label %158
158: ; preds = %154
%159 = getelementptr inbounds i8, i8* %1, i64 7
%160 = load i8, i8* %159
%161 = icmp eq i8 %160, 0
br i1 %161, label %259, label %162
162: ; preds = %158
%163 = getelementptr inbounds i8, i8* %1, i64 8
%164 = load i8, i8* %163
%165 = icmp eq i8 %164, 0
br i1 %165, label %259, label %166
166: ; preds = %162
%167 = getelementptr inbounds i8, i8* %1, i64 9
%168 = load i8, i8* %167
%169 = icmp eq i8 %168, 0
br i1 %169, label %259, label %170
170: ; preds = %166
%171 = getelementptr inbounds i8, i8* %1, i64 10
%172 = load i8, i8* %171
%173 = icmp eq i8 %172, 0
br i1 %173, label %259, label %174
174: ; preds = %170
%175 = getelementptr inbounds i8, i8* %1, i64 11
%176 = load i8, i8* %175
%177 = icmp eq i8 %176, 0
br i1 %177, label %259, label %178
178: ; preds = %174
%179 = getelementptr inbounds i8, i8* %1, i64 12
%180 = load i8, i8* %179
%181 = icmp eq i8 %180, 0
br i1 %181, label %259, label %182
182: ; preds = %178
%183 = getelementptr inbounds i8, i8* %1, i64 13
%184 = load i8, i8* %183
%185 = icmp eq i8 %184, 0
br i1 %185, label %259, label %186
186: ; preds = %182
%187 = getelementptr inbounds i8, i8* %1, i64 14
%188 = load i8, i8* %187
%189 = icmp eq i8 %188, 0
br i1 %189, label %259, label %190
190: ; preds = %186
%191 = getelementptr inbounds i8, i8* %1, i64 15
%192 = load i8, i8* %191
%193 = icmp eq i8 %192, 0
br i1 %193, label %259, label %194
194: ; preds = %190
%195 = getelementptr inbounds i8, i8* %1, i64 16
%196 = load i8, i8* %195
%197 = icmp eq i8 %196, 0
br i1 %197, label %259, label %198
198: ; preds = %194
%199 = getelementptr inbounds i8, i8* %1, i64 17
%200 = load i8, i8* %199
%201 = icmp eq i8 %200, 0
br i1 %201, label %259, label %202
202: ; preds = %198
%203 = getelementptr inbounds i8, i8* %1, i64 18
%204 = load i8, i8* %203
%205 = icmp eq i8 %204, 0
br i1 %205, label %259, label %206
206: ; preds = %202
%207 = getelementptr inbounds i8, i8* %1, i64 19
%208 = load i8, i8* %207
%209 = icmp eq i8 %208, 0
br i1 %209, label %259, label %210
210: ; preds = %206
%211 = getelementptr inbounds i8, i8* %1, i64 20
%212 = load i8, i8* %211
%213 = icmp eq i8 %212, 0
br i1 %213, label %259, label %214
214: ; preds = %210
%215 = getelementptr inbounds i8, i8* %1, i64 21
%216 = load i8, i8* %215
%217 = icmp eq i8 %216, 0
br i1 %217, label %259, label %218
218: ; preds = %214
%219 = getelementptr inbounds i8, i8* %1, i64 22
%220 = load i8, i8* %219
%221 = icmp eq i8 %220, 0
br i1 %221, label %259, label %222
222: ; preds = %218
%223 = getelementptr inbounds i8, i8* %1, i64 23
%224 = load i8, i8* %223
%225 = icmp eq i8 %224, 0
br i1 %225, label %259, label %226
226: ; preds = %222
%227 = getelementptr inbounds i8, i8* %1, i64 24
%228 = load i8, i8* %227
%229 = icmp eq i8 %228, 0
br i1 %229, label %259, label %230
230: ; preds = %226
%231 = getelementptr inbounds i8, i8* %1, i64 25
%232 = load i8, i8* %231
%233 = icmp eq i8 %232, 0
br i1 %233, label %259, label %234
234: ; preds = %230
%235 = getelementptr inbounds i8, i8* %1, i64 26
%236 = load i8, i8* %235
%237 = icmp eq i8 %236, 0
br i1 %237, label %259, label %238
238: ; preds = %234
%239 = getelementptr inbounds i8, i8* %1, i64 27
%240 = load i8, i8* %239
%241 = icmp eq i8 %240, 0
br i1 %241, label %259, label %242
242: ; preds = %238
%243 = getelementptr inbounds i8, i8* %1, i64 28
%244 = load i8, i8* %243
%245 = icmp eq i8 %244, 0
br i1 %245, label %259, label %246
246: ; preds = %242
%247 = getelementptr inbounds i8, i8* %1, i64 29
%248 = load i8, i8* %247
%249 = icmp eq i8 %248, 0
br i1 %249, label %259, label %250
250: ; preds = %246
%251 = getelementptr inbounds i8, i8* %1, i64 30
%252 = load i8, i8* %251
%253 = icmp eq i8 %252, 0
br i1 %253, label %259, label %254
254: ; preds = %250
%255 = getelementptr inbounds i8, i8* %1, i64 31
%256 = load i8, i8* %255
%257 = icmp eq i8 %256, 0
%258 = select i1 %257, i32 31, i32 32
br label %259
259: ; preds = %254, %250, %246, %242, %238, %234, %230, %226, %222, %218, %214, %210, %206, %202, %198, %194, %190, %186, %182, %178, %174, %170, %166, %162, %158, %154, %150, %146, %142, %138, %134
%260 = phi i32 [ 30, %250 ], [ 29, %246 ], [ 28, %242 ], [ 27, %238 ], [ 26, %234 ], [ 25, %230 ], [ 24, %226 ], [ 23, %222 ], [ 22, %218 ], [ 21, %214 ], [ 20, %210 ], [ 19, %206 ], [ 18, %202 ], [ 17, %198 ], [ 16, %194 ], [ 15, %190 ], [ 14, %186 ], [ 13, %182 ], [ 12, %178 ], [ 11, %174 ], [ 10, %170 ], [ 9, %166 ], [ 8, %162 ], [ 7, %158 ], [ 6, %154 ], [ 5, %150 ], [ 4, %146 ], [ 3, %142 ], [ 2, %138 ], [ 1, %134 ], [ %258, %254 ]
%261 = add nuw nsw i32 %260, %131
%262 = icmp ult i32 %261, 33
br i1 %262, label %263, label %411
263: ; preds = %259
%264 = zext i32 %131 to i64
%265 = zext i32 %260 to i64
%266 = getelementptr inbounds i8, i8* %0, i64 %264
store i8 %132, i8* %266
%267 = icmp eq i32 %260, 1
br i1 %267, label %406, label %268
268: ; preds = %263
%269 = add nsw i64 %265, -1
%270 = icmp ult i64 %269, 8
br i1 %270, label %363, label %271
271: ; preds = %268
%272 = add nuw nsw i64 %264, 1
%273 = getelementptr i8, i8* %0, i64 %272
%274 = add nuw nsw i64 %264, %265
%275 = getelementptr i8, i8* %0, i64 %274
%276 = getelementptr i8, i8* %1, i64 1
%277 = getelementptr i8, i8* %1, i64 %265
%278 = icmp ult i8* %273, %277
%279 = icmp ult i8* %276, %275
%280 = and i1 %278, %279
br i1 %280, label %363, label %281
281: ; preds = %271
%282 = icmp ult i64 %269, 32
br i1 %282, label %345, label %283
283: ; preds = %281
%284 = and i64 %269, -32
%285 = add nsw i64 %284, -32
%286 = lshr exact i64 %285, 5
%287 = add nuw nsw i64 %286, 1
%288 = and i64 %287, 1
%289 = icmp eq i64 %285, 0
br i1 %289, label %324, label %290
290: ; preds = %283
%291 = and i64 %287, 1152921504606846974
br label %292
292: ; preds = %292, %290
%293 = phi i64 [ 0, %290 ], [ %319, %292 ]
%294 = phi i64 [ 0, %290 ], [ %320, %292 ]
%295 = or i64 %293, 1
%296 = getelementptr inbounds i8, i8* %1, i64 %295
%297 = bitcast i8* %296 to <16 x i8>*
%298 = load <16 x i8>, <16 x i8>* %297
%299 = getelementptr inbounds i8, i8* %296, i64 16
%300 = bitcast i8* %299 to <16 x i8>*
%301 = load <16 x i8>, <16 x i8>* %300
%302 = add nuw nsw i64 %295, %264
%303 = getelementptr inbounds i8, i8* %0, i64 %302
%304 = bitcast i8* %303 to <16 x i8>*
store <16 x i8> %298, <16 x i8>* %304
%305 = getelementptr inbounds i8, i8* %303, i64 16
%306 = bitcast i8* %305 to <16 x i8>*
store <16 x i8> %301, <16 x i8>* %306
%307 = or i64 %293, 33
%308 = getelementptr inbounds i8, i8* %1, i64 %307
%309 = bitcast i8* %308 to <16 x i8>*
%310 = load <16 x i8>, <16 x i8>* %309
%311 = getelementptr inbounds i8, i8* %308, i64 16
%312 = bitcast i8* %311 to <16 x i8>*
%313 = load <16 x i8>, <16 x i8>* %312
%314 = add nuw nsw i64 %307, %264
%315 = getelementptr inbounds i8, i8* %0, i64 %314
%316 = bitcast i8* %315 to <16 x i8>*
store <16 x i8> %310, <16 x i8>* %316
%317 = getelementptr inbounds i8, i8* %315, i64 16
%318 = bitcast i8* %317 to <16 x i8>*
store <16 x i8> %313, <16 x i8>* %318
%319 = add nuw i64 %293, 64
%320 = add i64 %294, 2
%321 = icmp eq i64 %320, %291
br i1 %321, label %322, label %292
322: ; preds = %292
%323 = or i64 %319, 1
br label %324
324: ; preds = %322, %283
%325 = phi i64 [ 1, %283 ], [ %323, %322 ]
%326 = icmp eq i64 %288, 0
br i1 %326, label %339, label %327
327: ; preds = %324
%328 = getelementptr inbounds i8, i8* %1, i64 %325
%329 = bitcast i8* %328 to <16 x i8>*
%330 = load <16 x i8>, <16 x i8>* %329
%331 = getelementptr inbounds i8, i8* %328, i64 16
%332 = bitcast i8* %331 to <16 x i8>*
%333 = load <16 x i8>, <16 x i8>* %332
%334 = add nuw nsw i64 %325, %264
%335 = getelementptr inbounds i8, i8* %0, i64 %334
%336 = bitcast i8* %335 to <16 x i8>*
store <16 x i8> %330, <16 x i8>* %336
%337 = getelementptr inbounds i8, i8* %335, i64 16
%338 = bitcast i8* %337 to <16 x i8>*
store <16 x i8> %333, <16 x i8>* %338
br label %339
339: ; preds = %324, %327
%340 = icmp eq i64 %269, %284
br i1 %340, label %406, label %341
341: ; preds = %339
%342 = or i64 %284, 1
%343 = and i64 %269, 24
%344 = icmp eq i64 %343, 0
br i1 %344, label %363, label %345
345: ; preds = %281, %341
%346 = phi i64 [ %284, %341 ], [ 0, %281 ]
%347 = add nsw i64 %265, -1
%348 = and i64 %347, -8
%349 = or i64 %348, 1
br label %350
350: ; preds = %350, %345
%351 = phi i64 [ %346, %345 ], [ %359, %350 ]
%352 = or i64 %351, 1
%353 = getelementptr inbounds i8, i8* %1, i64 %352
%354 = bitcast i8* %353 to <8 x i8>*
%355 = load <8 x i8>, <8 x i8>* %354
%356 = add nuw nsw i64 %352, %264
%357 = getelementptr inbounds i8, i8* %0, i64 %356
%358 = bitcast i8* %357 to <8 x i8>*
store <8 x i8> %355, <8 x i8>* %358
%359 = add nuw i64 %351, 8
%360 = icmp eq i64 %359, %348
br i1 %360, label %361, label %350
361: ; preds = %350
%362 = icmp eq i64 %347, %348
br i1 %362, label %406, label %363
363: ; preds = %271, %268, %341, %361
%364 = phi i64 [ 1, %268 ], [ 1, %271 ], [ %342, %341 ], [ %349, %361 ]
%365 = sub nsw i64 %265, %364
%366 = xor i64 %364, -1
%367 = add nsw i64 %366, %265
%368 = and i64 %365, 3
%369 = icmp eq i64 %368, 0
br i1 %369, label %380, label %370
370: ; preds = %363, %370
%371 = phi i64 [ %377, %370 ], [ %364, %363 ]
%372 = phi i64 [ %378, %370 ], [ 0, %363 ]
%373 = getelementptr inbounds i8, i8* %1, i64 %371
%374 = load i8, i8* %373
%375 = add nuw nsw i64 %371, %264
%376 = getelementptr inbounds i8, i8* %0, i64 %375
store i8 %374, i8* %376
%377 = add nuw nsw i64 %371, 1
%378 = add i64 %372, 1
%379 = icmp eq i64 %378, %368
br i1 %379, label %380, label %370
380: ; preds = %370, %363
%381 = phi i64 [ %364, %363 ], [ %377, %370 ]
%382 = icmp ult i64 %367, 3
br i1 %382, label %406, label %383
383: ; preds = %380, %383
%384 = phi i64 [ %404, %383 ], [ %381, %380 ]
%385 = getelementptr inbounds i8, i8* %1, i64 %384
%386 = load i8, i8* %385
%387 = add nuw nsw i64 %384, %264
%388 = getelementptr inbounds i8, i8* %0, i64 %387
store i8 %386, i8* %388
%389 = add nuw nsw i64 %384, 1
%390 = getelementptr inbounds i8, i8* %1, i64 %389
%391 = load i8, i8* %390
%392 = add nuw nsw i64 %389, %264
%393 = getelementptr inbounds i8, i8* %0, i64 %392
store i8 %391, i8* %393
%394 = add nuw nsw i64 %384, 2
%395 = getelementptr inbounds i8, i8* %1, i64 %394
%396 = load i8, i8* %395
%397 = add nuw nsw i64 %394, %264
%398 = getelementptr inbounds i8, i8* %0, i64 %397
store i8 %396, i8* %398
%399 = add nuw nsw i64 %384, 3
%400 = getelementptr inbounds i8, i8* %1, i64 %399
%401 = load i8, i8* %400
%402 = add nuw nsw i64 %399, %264
%403 = getelementptr inbounds i8, i8* %0, i64 %402
store i8 %401, i8* %403
%404 = add nuw nsw i64 %384, 4
%405 = icmp eq i64 %404, %265
br i1 %405, label %406, label %383
406: ; preds = %380, %383, %263, %361, %339, %130
%407 = phi i32 [ 0, %130 ], [ %260, %339 ], [ %260, %361 ], [ %260, %263 ], [ %260, %383 ], [ %260, %380 ]
%408 = add nuw nsw i32 %407, %131
%409 = zext i32 %408 to i64
%410 = getelementptr inbounds i8, i8* %0, i64 %409
store i8 0, i8* %410
br label %411
411: ; preds = %406, %259
ret void
}