void *ft_memjoin(void const *s1, void const *s2, int dlen, int slen) {
  int i;
  char *ret;
  if ((ret = ft_strnew(slen + dlen))) {
    i = -1;
    while (++i < dlen)
      ret[i] = ((char *)s1)[i];
    i = -1;
    while (++i < slen)
      ret[dlen + i] = ((char *)s2)[i];
    return (ret);
  }
  return (0);
}


x86 assembly (clang, -O0):
<ft_memjoin>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    -0x20(%rbp),%edi
add    -0x1c(%rbp),%edi
mov    $0x0,%al
call   1030 <ft_strnew@plt>
cltq
mov    %rax,-0x30(%rbp)
cmp    $0x0,%rax
je     11bd <ft_memjoin+0xad>
movl   $0xffffffff,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmp    -0x1c(%rbp),%eax
jge    1177 <ft_memjoin+0x67>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x30(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    114a <ft_memjoin+0x3a>
movl   $0xffffffff,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmp    -0x20(%rbp),%eax
jge    11b0 <ft_memjoin+0xa0>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x30(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    117e <ft_memjoin+0x6e>
mov    -0x30(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    11c5 <ft_memjoin+0xb5>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ft_memjoin>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %ecx,%r15d
mov    %edx,%r12d
mov    %rsi,%r14
mov    %rdi,%rbx
lea    (%r15,%r12,1),%edi
xor    %r13d,%r13d
xor    %eax,%eax
call   1030 <ft_strnew@plt>
test   %eax,%eax
je     126f <ft_memjoin+0x15f>
movslq %eax,%r13
test   %r12d,%r12d
jle    11d0 <ft_memjoin+0xc0>
mov    %r12d,%r9d
cmp    $0x8,%r12d
jb     116a <ft_memjoin+0x5a>
lea    (%rbx,%r9,1),%rcx
cmp    %r13,%rcx
jbe    127c <ft_memjoin+0x16c>
lea    (%r9,%r13,1),%rcx
cmp    %rbx,%rcx
jbe    127c <ft_memjoin+0x16c>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %r9,%rdx
mov    %r9,%rsi
and    $0x3,%rsi
je     1193 <ft_memjoin+0x83>
xchg   %ax,%ax
movzbl (%rbx,%rcx,1),%eax
mov    %al,0x0(%r13,%rcx,1)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1180 <ft_memjoin+0x70>
cmp    $0x3,%rdx
jb     11d0 <ft_memjoin+0xc0>
nopl   0x0(%rax)
movzbl (%rbx,%rcx,1),%eax
mov    %al,0x0(%r13,%rcx,1)
movzbl 0x1(%rbx,%rcx,1),%eax
mov    %al,0x1(%r13,%rcx,1)
movzbl 0x2(%rbx,%rcx,1),%eax
mov    %al,0x2(%r13,%rcx,1)
movzbl 0x3(%rbx,%rcx,1),%eax
mov    %al,0x3(%r13,%rcx,1)
add    $0x4,%rcx
cmp    %rcx,%r9
jne    11a0 <ft_memjoin+0x90>
test   %r15d,%r15d
jle    126f <ft_memjoin+0x15f>
movslq %r12d,%r8
mov    %r15d,%eax
cmp    $0x8,%r15d
jb     1206 <ft_memjoin+0xf6>
lea    (%r8,%r13,1),%rsi
lea    (%r14,%rax,1),%rcx
cmp    %rcx,%rsi
jae    1289 <ft_memjoin+0x179>
lea    (%r8,%rax,1),%rcx
add    %r13,%rcx
cmp    %r14,%rcx
jbe    1289 <ft_memjoin+0x179>
xor    %edx,%edx
mov    %rdx,%rcx
not    %rcx
add    %rax,%rcx
mov    %rax,%rsi
and    $0x3,%rsi
je     1232 <ft_memjoin+0x122>
lea    (%r8,%r13,1),%rdi
xchg   %ax,%ax
movzbl (%r14,%rdx,1),%ebx
mov    %bl,(%rdi,%rdx,1)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rsi
jne    1220 <ft_memjoin+0x110>
cmp    $0x3,%rcx
jb     126f <ft_memjoin+0x15f>
lea    (%r8,%r13,1),%rcx
add    $0x3,%rcx
movzbl (%r14,%rdx,1),%ebx
mov    %bl,-0x3(%rcx,%rdx,1)
movzbl 0x1(%r14,%rdx,1),%ebx
mov    %bl,-0x2(%rcx,%rdx,1)
movzbl 0x2(%r14,%rdx,1),%ebx
mov    %bl,-0x1(%rcx,%rdx,1)
movzbl 0x3(%r14,%rdx,1),%ebx
mov    %bl,(%rcx,%rdx,1)
add    $0x4,%rdx
cmp    %rdx,%rax
jne    1240 <ft_memjoin+0x130>
mov    %r13,%rax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret
cmp    $0x20,%r12d
jae    1296 <ft_memjoin+0x186>
xor    %ecx,%ecx
jmp    13ae <ft_memjoin+0x29e>
cmp    $0x20,%r15d
jae    12bf <ft_memjoin+0x1af>
xor    %edx,%edx
jmp    149c <ft_memjoin+0x38c>
mov    %r9d,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%rdx
mov    %rdx,%rsi
shr    $0x5,%rsi
add    $0x1,%rsi
mov    %esi,%r8d
and    $0x3,%r8d
cmp    $0x60,%rdx
jae    12eb <ft_memjoin+0x1db>
xor    %edi,%edi
jmp    1361 <ft_memjoin+0x251>
mov    %eax,%edx
and    $0xffffffe0,%edx
lea    -0x20(%rdx),%rcx
mov    %rcx,%rdi
shr    $0x5,%rdi
add    $0x1,%rdi
mov    %edi,%r9d
and    $0x3,%r9d
cmp    $0x60,%rcx
jae    13e0 <ft_memjoin+0x2d0>
xor    %ecx,%ecx
jmp    1450 <ft_memjoin+0x340>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups (%rbx,%rdi,1),%xmm0
movups 0x10(%rbx,%rdi,1),%xmm1
movups %xmm0,0x0(%r13,%rdi,1)
movups %xmm1,0x10(%r13,%rdi,1)
movups 0x20(%rbx,%rdi,1),%xmm0
movups 0x30(%rbx,%rdi,1),%xmm1
movups %xmm0,0x20(%r13,%rdi,1)
movups %xmm1,0x30(%r13,%rdi,1)
movups 0x40(%rbx,%rdi,1),%xmm0
movups 0x50(%rbx,%rdi,1),%xmm1
movups %xmm0,0x40(%r13,%rdi,1)
movups %xmm1,0x50(%r13,%rdi,1)
movups 0x60(%rbx,%rdi,1),%xmm0
movups 0x70(%rbx,%rdi,1),%xmm1
movups %xmm0,0x60(%r13,%rdi,1)
movups %xmm1,0x70(%r13,%rdi,1)
sub    $0xffffffffffffff80,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1300 <ft_memjoin+0x1f0>
test   %r8,%r8
je     139b <ft_memjoin+0x28b>
lea    (%rdi,%r13,1),%rsi
add    $0x10,%rsi
add    %rbx,%rdi
add    $0x10,%rdi
shl    $0x5,%r8
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movups -0x10(%rdi,%rdx,1),%xmm0
movups (%rdi,%rdx,1),%xmm1
movups %xmm0,-0x10(%rsi,%rdx,1)
movups %xmm1,(%rsi,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%r8
jne    1380 <ft_memjoin+0x270>
cmp    %r9,%rcx
je     11d0 <ft_memjoin+0xc0>
test   $0x18,%r9b
je     116c <ft_memjoin+0x5c>
mov    %rcx,%rdx
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
nopw   0x0(%rax,%rax,1)
mov    (%rbx,%rdx,1),%rsi
mov    %rsi,0x0(%r13,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    13c0 <ft_memjoin+0x2b0>
cmp    %r9,%rcx
je     11d0 <ft_memjoin+0xc0>
jmp    116c <ft_memjoin+0x5c>
and    $0xfffffffffffffffc,%rdi
lea    (%r8,%r13,1),%rbx
add    $0x70,%rbx
xor    %ecx,%ecx
xchg   %ax,%ax
movups (%r14,%rcx,1),%xmm0
movups 0x10(%r14,%rcx,1),%xmm1
movups %xmm0,-0x70(%rbx,%rcx,1)
movups %xmm1,-0x60(%rbx,%rcx,1)
movups 0x20(%r14,%rcx,1),%xmm0
movups 0x30(%r14,%rcx,1),%xmm1
movups %xmm0,-0x50(%rbx,%rcx,1)
movups %xmm1,-0x40(%rbx,%rcx,1)
movups 0x40(%r14,%rcx,1),%xmm0
movups 0x50(%r14,%rcx,1),%xmm1
movups %xmm0,-0x30(%rbx,%rcx,1)
movups %xmm1,-0x20(%rbx,%rcx,1)
movups 0x60(%r14,%rcx,1),%xmm0
movups 0x70(%r14,%rcx,1),%xmm1
movups %xmm0,-0x10(%rbx,%rcx,1)
movups %xmm1,(%rbx,%rcx,1)
sub    $0xffffffffffffff80,%rcx
add    $0xfffffffffffffffc,%rdi
jne    13f0 <ft_memjoin+0x2e0>
test   %r9,%r9
je     148b <ft_memjoin+0x37b>
lea    (%rcx,%r8,1),%rdi
add    %r13,%rdi
add    $0x10,%rdi
add    %r14,%rcx
add    $0x10,%rcx
shl    $0x5,%r9
xor    %ebx,%ebx
nopl   (%rax)
movups -0x10(%rcx,%rbx,1),%xmm0
movups (%rcx,%rbx,1),%xmm1
movups %xmm0,-0x10(%rdi,%rbx,1)
movups %xmm1,(%rdi,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r9
jne    1470 <ft_memjoin+0x360>
cmp    %rax,%rdx
je     126f <ft_memjoin+0x15f>
test   $0x18,%al
je     1208 <ft_memjoin+0xf8>
mov    %rdx,%rcx
mov    %eax,%edx
and    $0xfffffff8,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%r14,%rcx,1),%rdi
mov    %rdi,(%rsi,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rdx
jne    14b0 <ft_memjoin+0x3a0>
cmp    %rax,%rdx
je     126f <ft_memjoin+0x15f>
jmp    1208 <ft_memjoin+0xf8>

LLVM IR (-O0):
define i8* @ft_memjoin(i8* %0, i8* %1, i32 %2, i32 %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i8*
store i8* %0, i8** %6
store i8* %1, i8** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
%12 = load i32, i32* %9
%13 = load i32, i32* %8
%14 = add nsw i32 %12, %13
%15 = call i32 (i32, ...) bitcast (i32 (...)* @ft_strnew to i32 (i32, ...)*)(i32 %14)
%16 = sext i32 %15 to i64
%17 = inttoptr i64 %16 to i8*
store i8* %17, i8** %11
%18 = icmp ne i8* %17, null
br i1 %18, label %19, label %55
19: ; preds = %4
store i32 -1, i32* %10
br label %20
20: ; preds = %25, %19
%21 = load i32, i32* %10
%22 = add nsw i32 %21, 1
store i32 %22, i32* %10
%23 = load i32, i32* %8
%24 = icmp slt i32 %22, %23
br i1 %24, label %25, label %35
25: ; preds = %20
%26 = load i8*, i8** %6
%27 = load i32, i32* %10
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
%30 = load i8, i8* %29
%31 = load i8*, i8** %11
%32 = load i32, i32* %10
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
store i8 %30, i8* %34
br label %20
35: ; preds = %20
store i32 -1, i32* %10
br label %36
36: ; preds = %41, %35
%37 = load i32, i32* %10
%38 = add nsw i32 %37, 1
store i32 %38, i32* %10
%39 = load i32, i32* %9
%40 = icmp slt i32 %38, %39
br i1 %40, label %41, label %53
41: ; preds = %36
%42 = load i8*, i8** %7
%43 = load i32, i32* %10
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i8, i8* %42, i64 %44
%46 = load i8, i8* %45
%47 = load i8*, i8** %11
%48 = load i32, i32* %8
%49 = load i32, i32* %10
%50 = add nsw i32 %48, %49
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %47, i64 %51
store i8 %46, i8* %52
br label %36
53: ; preds = %36
%54 = load i8*, i8** %11
store i8* %54, i8** %5
br label %56
55: ; preds = %4
store i8* null, i8** %5
br label %56
56: ; preds = %55, %53
%57 = load i8*, i8** %5
ret i8* %57
}

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