#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
void _wordcopy_fwd_aligned(long int dstp, long int srcp, size_t len) {
  unsigned long int a0, a1;
  switch (len % 8) {
  case 2:
    a0 = ((unsigned long int *)srcp)[0];
    srcp -= 6 * (sizeof(unsigned long int));
    dstp -= 7 * (sizeof(unsigned long int));
    len += 6;
    goto do1;
  case 3:
    a1 = ((unsigned long int *)srcp)[0];
    srcp -= 5 * (sizeof(unsigned long int));
    dstp -= 6 * (sizeof(unsigned long int));
    len += 5;
    goto do2;
  case 4:
    a0 = ((unsigned long int *)srcp)[0];
    srcp -= 4 * (sizeof(unsigned long int));
    dstp -= 5 * (sizeof(unsigned long int));
    len += 4;
    goto do3;
  case 5:
    a1 = ((unsigned long int *)srcp)[0];
    srcp -= 3 * (sizeof(unsigned long int));
    dstp -= 4 * (sizeof(unsigned long int));
    len += 3;
    goto do4;
  case 6:
    a0 = ((unsigned long int *)srcp)[0];
    srcp -= 2 * (sizeof(unsigned long int));
    dstp -= 3 * (sizeof(unsigned long int));
    len += 2;
    goto do5;
  case 7:
    a1 = ((unsigned long int *)srcp)[0];
    srcp -= 1 * (sizeof(unsigned long int));
    dstp -= 2 * (sizeof(unsigned long int));
    len += 1;
    goto do6;
  case 0:
    if (16 <= 3 * (sizeof(unsigned long int)) && len == 0)
      return;
    a0 = ((unsigned long int *)srcp)[0];
    srcp -= 0 * (sizeof(unsigned long int));
    dstp -= 1 * (sizeof(unsigned long int));
    goto do7;
  case 1:
    a1 = ((unsigned long int *)srcp)[0];
    srcp -= -1 * (sizeof(unsigned long int));
    dstp -= 0 * (sizeof(unsigned long int));
    len -= 1;
    if (16 <= 3 * (sizeof(unsigned long int)) && len == 0)
      goto do0;
    goto do8;
  }
  do {
  do8:
    a0 = ((unsigned long int *)srcp)[0];
    ((unsigned long int *)dstp)[0] = a1;
  do7:
    a1 = ((unsigned long int *)srcp)[1];
    ((unsigned long int *)dstp)[1] = a0;
  do6:
    a0 = ((unsigned long int *)srcp)[2];
    ((unsigned long int *)dstp)[2] = a1;
  do5:
    a1 = ((unsigned long int *)srcp)[3];
    ((unsigned long int *)dstp)[3] = a0;
  do4:
    a0 = ((unsigned long int *)srcp)[4];
    ((unsigned long int *)dstp)[4] = a1;
  do3:
    a1 = ((unsigned long int *)srcp)[5];
    ((unsigned long int *)dstp)[5] = a0;
  do2:
    a0 = ((unsigned long int *)srcp)[6];
    ((unsigned long int *)dstp)[6] = a1;
  do1:
    a1 = ((unsigned long int *)srcp)[7];
    ((unsigned long int *)dstp)[7] = a0;
    srcp += 8 * (sizeof(unsigned long int));
    dstp += 8 * (sizeof(unsigned long int));
    len -= 8;
  } while (len != 0);
do0:
  ((unsigned long int *)dstp)[0] = a1;
}


x86 assembly (clang, -O0):
<_wordcopy_fwd_aligned>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rax
and    $0x7,%eax
mov    %rax,-0x30(%rbp)
sub    $0x7,%rax
ja     12ed <_wordcopy_fwd_aligned+0x1ed>
mov    -0x30(%rbp),%rax
lea    0xed0(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x30,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x38,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x6,%rax
mov    %rax,-0x18(%rbp)
jmp    139d <_wordcopy_fwd_aligned+0x29d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x28,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x30,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x18(%rbp)
jmp    1385 <_wordcopy_fwd_aligned+0x285>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x28,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x18(%rbp)
jmp    136d <_wordcopy_fwd_aligned+0x26d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x18,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x20,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x18(%rbp)
jmp    1355 <_wordcopy_fwd_aligned+0x255>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x10,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x18,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x18(%rbp)
jmp    133d <_wordcopy_fwd_aligned+0x23d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x10,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1325 <_wordcopy_fwd_aligned+0x225>
cmpq   $0x0,-0x18(%rbp)
jne    1281 <_wordcopy_fwd_aligned+0x181>
jmp    13f4 <_wordcopy_fwd_aligned+0x2f4>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
sub    $0x0,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x8(%rbp)
jmp    130d <_wordcopy_fwd_aligned+0x20d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
sub    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
sub    $0x0,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
sub    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    12e8 <_wordcopy_fwd_aligned+0x1e8>
jmp    13e9 <_wordcopy_fwd_aligned+0x2e9>
jmp    12f7 <_wordcopy_fwd_aligned+0x1f7>
jmp    12f2 <_wordcopy_fwd_aligned+0x1f2>
jmp    12f7 <_wordcopy_fwd_aligned+0x1f7>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x28(%rax)
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,0x38(%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    12f2 <_wordcopy_fwd_aligned+0x1f2>
jmp    13e9 <_wordcopy_fwd_aligned+0x2e9>
mov    -0x28(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<_wordcopy_fwd_aligned>:
mov    %edx,%eax
and    $0x7,%eax
lea    0xef4(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
test   %rdx,%rdx
je     1136 <_wordcopy_fwd_aligned+0x36>
mov    (%rsi),%rcx
add    $0xfffffffffffffff8,%rdi
jmp    11a6 <_wordcopy_fwd_aligned+0xa6>
mov    (%rsi),%rax
add    $0x8,%rsi
add    $0xffffffffffffffff,%rdx
jne    11a0 <_wordcopy_fwd_aligned+0xa0>
mov    %rax,(%rdi)
ret
mov    (%rsi),%rcx
add    $0xffffffffffffffd0,%rsi
add    $0xffffffffffffffc8,%rdi
add    $0x6,%rdx
jmp    11d6 <_wordcopy_fwd_aligned+0xd6>
mov    (%rsi),%rax
add    $0xffffffffffffffd8,%rsi
add    $0xffffffffffffffd0,%rdi
add    $0x5,%rdx
jmp    11ce <_wordcopy_fwd_aligned+0xce>
mov    (%rsi),%rcx
add    $0xffffffffffffffe0,%rsi
add    $0xffffffffffffffd8,%rdi
add    $0x4,%rdx
jmp    11c6 <_wordcopy_fwd_aligned+0xc6>
mov    (%rsi),%rax
add    $0xffffffffffffffe8,%rsi
add    $0xffffffffffffffe0,%rdi
add    $0x3,%rdx
jmp    11be <_wordcopy_fwd_aligned+0xbe>
mov    (%rsi),%rcx
add    $0xfffffffffffffff0,%rsi
add    $0xffffffffffffffe8,%rdi
add    $0x2,%rdx
jmp    11b6 <_wordcopy_fwd_aligned+0xb6>
mov    (%rsi),%rax
add    $0xfffffffffffffff8,%rsi
add    $0xfffffffffffffff0,%rdi
add    $0x1,%rdx
jmp    11ae <_wordcopy_fwd_aligned+0xae>
mov    (%rsi),%rcx
mov    %rax,(%rdi)
mov    0x8(%rsi),%rax
mov    %rcx,0x8(%rdi)
mov    0x10(%rsi),%rcx
mov    %rax,0x10(%rdi)
mov    0x18(%rsi),%rax
mov    %rcx,0x18(%rdi)
mov    0x20(%rsi),%rcx
mov    %rax,0x20(%rdi)
mov    0x28(%rsi),%rax
mov    %rcx,0x28(%rdi)
mov    0x30(%rsi),%rcx
mov    %rax,0x30(%rdi)
mov    0x38(%rsi),%rax
mov    %rcx,0x38(%rdi)
add    $0x40,%rsi
add    $0x40,%rdi
add    $0xfffffffffffffff8,%rdx
jne    11a0 <_wordcopy_fwd_aligned+0xa0>
jmp    1133 <_wordcopy_fwd_aligned+0x33>

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

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