#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 int ssize_t;

/* Variables and functions */
void swab(const void *__restrict from, void *__restrict to, ssize_t len) {
  unsigned long temp;
  int n;
  char *fp, *tp;
  n = len >> 1;
  fp = (char *)from;
  tp = (char *)to;
  for (; n & 0x7; --n)
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
  for (n >>= 3; n > 0; --n) {
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
    temp = *fp++, *tp++ = *fp++, *tp++ = temp;
  }
}


x86 assembly (clang, -O0):
<swab>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x24(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
je     1195 <swab+0x95>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1128 <swab+0x28>
mov    -0x24(%rbp),%eax
sar    $0x3,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    1436 <swab+0x336>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbq (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    119e <swab+0x9e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<swab>:
mov    %edx,%ecx
sar    %ecx
test   $0xe,%dl
je     11af <swab+0xaf>
movzwl (%rdi),%eax
rol    $0x8,%ax
mov    %ax,(%rsi)
lea    -0x1(%rcx),%eax
test   $0x7,%al
je     11b3 <swab+0xb3>
movzwl 0x2(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0x2(%rsi)
lea    -0x2(%rcx),%eax
test   $0x7,%al
je     11bd <swab+0xbd>
movzwl 0x4(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0x4(%rsi)
lea    -0x3(%rcx),%eax
test   $0x7,%al
je     11c7 <swab+0xc7>
movzwl 0x6(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0x6(%rsi)
lea    -0x4(%rcx),%eax
test   $0x7,%al
je     11d1 <swab+0xd1>
movzwl 0x8(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0x8(%rsi)
lea    -0x5(%rcx),%eax
test   $0x7,%al
je     11db <swab+0xdb>
movzwl 0xa(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0xa(%rsi)
lea    -0x6(%rcx),%eax
test   $0x7,%al
je     11e5 <swab+0xe5>
movzwl 0xc(%rdi),%eax
rol    $0x8,%ax
mov    %ax,0xc(%rsi)
lea    -0x7(%rcx),%eax
test   $0x7,%al
je     11ef <swab+0xef>
movzwl 0xe(%rdi),%eax
rol    $0x8,%ax
add    $0x10,%rdi
mov    %ax,0xe(%rsi)
add    $0x10,%rsi
add    $0xfffffff8,%ecx
mov    %ecx,%eax
jmp    11f7 <swab+0xf7>
add    $0x2,%rdi
add    $0x2,%rsi
jmp    11f7 <swab+0xf7>
add    $0x4,%rdi
add    $0x4,%rsi
jmp    11f7 <swab+0xf7>
add    $0x6,%rdi
add    $0x6,%rsi
jmp    11f7 <swab+0xf7>
add    $0x8,%rdi
add    $0x8,%rsi
jmp    11f7 <swab+0xf7>
add    $0xa,%rdi
add    $0xa,%rsi
jmp    11f7 <swab+0xf7>
add    $0xc,%rdi
add    $0xc,%rsi
jmp    11f7 <swab+0xf7>
add    $0xe,%rdi
add    $0xe,%rsi
cmp    $0x8,%eax
jl     1238 <swab+0x138>
shr    $0x3,%eax
add    $0x1,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqu (%rdi,%rcx,1),%xmm0
movdqa %xmm0,%xmm1
psrlw  $0x8,%xmm1
psllw  $0x8,%xmm0
por    %xmm1,%xmm0
movdqu %xmm0,(%rsi,%rcx,1)
add    $0x10,%rcx
add    $0xffffffff,%eax
cmp    $0x1,%eax
ja     1210 <swab+0x110>
ret

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

LLVM IR (-O2):
define void @swab(i8* noalias nocapture %0, i8* noalias nocapture writeonly %1, i32 %2) {
%4 = ashr i32 %2, 1
%5 = and i32 %2, 14
%6 = icmp eq i32 %5, 0
br i1 %6, label %85, label %7
7: ; preds = %3
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = load i8, i8* %0
%10 = getelementptr inbounds i8, i8* %0, i64 2
%11 = load i8, i8* %8
%12 = getelementptr inbounds i8, i8* %1, i64 1
store i8 %11, i8* %1
%13 = getelementptr inbounds i8, i8* %1, i64 2
store i8 %9, i8* %12
%14 = add nsw i32 %4, -1
%15 = and i32 %14, 7
%16 = icmp eq i32 %15, 0
br i1 %16, label %85, label %17
17: ; preds = %7
%18 = getelementptr inbounds i8, i8* %0, i64 3
%19 = load i8, i8* %10
%20 = getelementptr inbounds i8, i8* %0, i64 4
%21 = load i8, i8* %18
%22 = getelementptr inbounds i8, i8* %1, i64 3
store i8 %21, i8* %13
%23 = getelementptr inbounds i8, i8* %1, i64 4
store i8 %19, i8* %22
%24 = add nsw i32 %4, -2
%25 = and i32 %24, 7
%26 = icmp eq i32 %25, 0
br i1 %26, label %85, label %27
27: ; preds = %17
%28 = getelementptr inbounds i8, i8* %0, i64 5
%29 = load i8, i8* %20
%30 = getelementptr inbounds i8, i8* %0, i64 6
%31 = load i8, i8* %28
%32 = getelementptr inbounds i8, i8* %1, i64 5
store i8 %31, i8* %23
%33 = getelementptr inbounds i8, i8* %1, i64 6
store i8 %29, i8* %32
%34 = add nsw i32 %4, -3
%35 = and i32 %34, 7
%36 = icmp eq i32 %35, 0
br i1 %36, label %85, label %37
37: ; preds = %27
%38 = getelementptr inbounds i8, i8* %0, i64 7
%39 = load i8, i8* %30
%40 = getelementptr inbounds i8, i8* %0, i64 8
%41 = load i8, i8* %38
%42 = getelementptr inbounds i8, i8* %1, i64 7
store i8 %41, i8* %33
%43 = getelementptr inbounds i8, i8* %1, i64 8
store i8 %39, i8* %42
%44 = add nsw i32 %4, -4
%45 = and i32 %44, 7
%46 = icmp eq i32 %45, 0
br i1 %46, label %85, label %47
47: ; preds = %37
%48 = getelementptr inbounds i8, i8* %0, i64 9
%49 = load i8, i8* %40
%50 = getelementptr inbounds i8, i8* %0, i64 10
%51 = load i8, i8* %48
%52 = getelementptr inbounds i8, i8* %1, i64 9
store i8 %51, i8* %43
%53 = getelementptr inbounds i8, i8* %1, i64 10
store i8 %49, i8* %52
%54 = add nsw i32 %4, -5
%55 = and i32 %54, 7
%56 = icmp eq i32 %55, 0
br i1 %56, label %85, label %57
57: ; preds = %47
%58 = getelementptr inbounds i8, i8* %0, i64 11
%59 = load i8, i8* %50
%60 = getelementptr inbounds i8, i8* %0, i64 12
%61 = load i8, i8* %58
%62 = getelementptr inbounds i8, i8* %1, i64 11
store i8 %61, i8* %53
%63 = getelementptr inbounds i8, i8* %1, i64 12
store i8 %59, i8* %62
%64 = add nsw i32 %4, -6
%65 = and i32 %64, 7
%66 = icmp eq i32 %65, 0
br i1 %66, label %85, label %67
67: ; preds = %57
%68 = getelementptr inbounds i8, i8* %0, i64 13
%69 = load i8, i8* %60
%70 = getelementptr inbounds i8, i8* %0, i64 14
%71 = load i8, i8* %68
%72 = getelementptr inbounds i8, i8* %1, i64 13
store i8 %71, i8* %63
%73 = getelementptr inbounds i8, i8* %1, i64 14
store i8 %69, i8* %72
%74 = add nsw i32 %4, -7
%75 = and i32 %74, 7
%76 = icmp eq i32 %75, 0
br i1 %76, label %85, label %77
77: ; preds = %67
%78 = getelementptr inbounds i8, i8* %0, i64 15
%79 = load i8, i8* %70
%80 = getelementptr inbounds i8, i8* %0, i64 16
%81 = load i8, i8* %78
%82 = getelementptr inbounds i8, i8* %1, i64 15
store i8 %81, i8* %73
%83 = getelementptr inbounds i8, i8* %1, i64 16
store i8 %79, i8* %82
%84 = add nsw i32 %4, -8
br label %85
85: ; preds = %7, %17, %27, %37, %47, %57, %67, %77, %3
%86 = phi i32 [ %4, %3 ], [ %14, %7 ], [ %24, %17 ], [ %34, %27 ], [ %44, %37 ], [ %54, %47 ], [ %64, %57 ], [ %74, %67 ], [ %84, %77 ]
%87 = phi i8* [ %0, %3 ], [ %10, %7 ], [ %20, %17 ], [ %30, %27 ], [ %40, %37 ], [ %50, %47 ], [ %60, %57 ], [ %70, %67 ], [ %80, %77 ]
%88 = phi i8* [ %1, %3 ], [ %13, %7 ], [ %23, %17 ], [ %33, %27 ], [ %43, %37 ], [ %53, %47 ], [ %63, %57 ], [ %73, %67 ], [ %83, %77 ]
%89 = icmp sgt i32 %86, 7
br i1 %89, label %90, label %104
90: ; preds = %85
%91 = lshr i32 %86, 3
br label %92
92: ; preds = %90, %92
%93 = phi i8* [ %99, %92 ], [ %88, %90 ]
%94 = phi i8* [ %96, %92 ], [ %87, %90 ]
%95 = phi i32 [ %102, %92 ], [ %91, %90 ]
%96 = getelementptr inbounds i8, i8* %94, i64 16
%97 = bitcast i8* %94 to <16 x i8>*
%98 = load <16 x i8>, <16 x i8>* %97
%99 = getelementptr inbounds i8, i8* %93, i64 16
%100 = shufflevector <16 x i8> %98, <16 x i8> poison, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
%101 = bitcast i8* %93 to <16 x i8>*
store <16 x i8> %100, <16 x i8>* %101
%102 = add nsw i32 %95, -1
%103 = icmp ugt i32 %95, 1
br i1 %103, label %92, label %104
104: ; preds = %92, %85
ret void
}