#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 *memmove(void *s1, const void *s2, size_t n) {
  uintptr_t from = (uintptr_t)s2;
  uintptr_t to = (uintptr_t)s1;
  if (to <= from) {
    if (((from ^ to) & (sizeof(uintptr_t) - 1)) == 0) {
      while (n != 0 && ((from & (sizeof(uintptr_t) - 1)) != 0)) {
        *(char *)to = *(const char *)from;
        from++;
        to++;
        n--;
      }
      while (n >= sizeof(uintptr_t)) {
        *(uintptr_t *)to = *(const uintptr_t *)from;
        from += sizeof(uintptr_t);
        to += sizeof(uintptr_t);
        n -= sizeof(uintptr_t);
      }
    }
    while (n != 0) {
      *(char *)to = *(const char *)from;
      from++;
      to++;
      n--;
    }
  } else {
    from += n;
    to += n;
    if (((from ^ to) & (sizeof(uintptr_t) - 1)) == 0) {
      while (n != 0 && ((from & (sizeof(uintptr_t) - 1)) != 0)) {
        from--;
        to--;
        *(char *)to = *(const char *)from;
        n--;
      }
      while (n >= sizeof(uintptr_t)) {
        from -= sizeof(uintptr_t);
        to -= sizeof(uintptr_t);
        *(uintptr_t *)to = *(const uintptr_t *)from;
        n -= sizeof(uintptr_t);
      }
    }
    while (n != 0) {
      from--;
      to--;
      *(char *)to = *(const char *)from;
      n--;
    }
  }
  return s1;
}


x86 assembly (clang, -O0):
<memmove>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x20(%rbp),%rax
ja     1246 <memmove+0x146>
mov    -0x20(%rbp),%rax
xor    -0x28(%rbp),%rax
and    $0x7,%rax
cmp    $0x0,%rax
jne    11fc <memmove+0xfc>
jmp    1149 <memmove+0x49>
xor    %eax,%eax
cmpq   $0x0,-0x18(%rbp)
mov    %al,-0x29(%rbp)
je     116b <memmove+0x6b>
mov    -0x20(%rbp),%rax
and    $0x7,%rax
cmp    $0x0,%rax
setne  %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
test   $0x1,%al
jne    117b <memmove+0x7b>
jmp    11b0 <memmove+0xb0>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    1149 <memmove+0x49>
jmp    11b5 <memmove+0xb5>
cmpq   $0x8,-0x18(%rbp)
jb     11f7 <memmove+0xf7>
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x18(%rbp)
jmp    11b5 <memmove+0xb5>
jmp    11fc <memmove+0xfc>
jmp    1201 <memmove+0x101>
cmpq   $0x0,-0x18(%rbp)
je     1241 <memmove+0x141>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    1201 <memmove+0x101>
jmp    1376 <memmove+0x276>
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
xor    -0x28(%rbp),%rax
and    $0x7,%rax
cmp    $0x0,%rax
jne    132c <memmove+0x22c>
jmp    1279 <memmove+0x179>
xor    %eax,%eax
cmpq   $0x0,-0x18(%rbp)
mov    %al,-0x2a(%rbp)
je     129b <memmove+0x19b>
mov    -0x20(%rbp),%rax
and    $0x7,%rax
cmp    $0x0,%rax
setne  %al
mov    %al,-0x2a(%rbp)
mov    -0x2a(%rbp),%al
test   $0x1,%al
jne    12ab <memmove+0x1ab>
jmp    12e0 <memmove+0x1e0>
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    1279 <memmove+0x179>
jmp    12e5 <memmove+0x1e5>
cmpq   $0x8,-0x18(%rbp)
jb     1327 <memmove+0x227>
mov    -0x20(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%rcx
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x18(%rbp)
jmp    12e5 <memmove+0x1e5>
jmp    132c <memmove+0x22c>
jmp    1331 <memmove+0x231>
cmpq   $0x0,-0x18(%rbp)
je     1371 <memmove+0x271>
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    1331 <memmove+0x231>
jmp    1376 <memmove+0x276>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<memmove>:
push   %rbx
mov    %rdi,%rax
cmp    %rsi,%rdi
jbe    12b4 <memmove+0x1b4>
add    %rdx,%rsi
lea    (%rax,%rdx,1),%rdi
mov    %esi,%ecx
xor    %edi,%ecx
test   $0x7,%cl
jne    14cc <memmove+0x3cc>
test   %rdx,%rdx
je     1258 <memmove+0x158>
mov    %esi,%ecx
and    $0x7,%ecx
test   %rcx,%rcx
je     1258 <memmove+0x158>
lea    -0x1(%rsi),%r8
lea    -0x1(%rdi),%rcx
mov    -0x1(%rsi),%bl
mov    %bl,-0x1(%rdi)
mov    %rdx,%r9
add    $0xffffffffffffffff,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x2(%rsi),%r8
lea    -0x2(%rdi),%rcx
mov    -0x2(%rsi),%bl
mov    %bl,-0x2(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffffe,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x3(%rsi),%r8
lea    -0x3(%rdi),%rcx
mov    -0x3(%rsi),%bl
mov    %bl,-0x3(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffffd,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x4(%rsi),%r8
lea    -0x4(%rdi),%rcx
mov    -0x4(%rsi),%bl
mov    %bl,-0x4(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffffc,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x5(%rsi),%r8
lea    -0x5(%rdi),%rcx
mov    -0x5(%rsi),%bl
mov    %bl,-0x5(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffffb,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x6(%rsi),%r8
lea    -0x6(%rdi),%rcx
mov    -0x6(%rsi),%bl
mov    %bl,-0x6(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffffa,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
lea    -0x7(%rsi),%r8
lea    -0x7(%rdi),%rcx
mov    -0x7(%rsi),%bl
mov    %bl,-0x7(%rdi)
mov    %rdx,%r9
add    $0xfffffffffffffff9,%r9
je     1261 <memmove+0x161>
mov    %r8d,%ebx
and    $0x7,%ebx
test   %rbx,%rbx
je     1261 <memmove+0x161>
mov    -0x8(%rsi),%cl
add    $0xfffffffffffffff8,%rsi
mov    %cl,-0x8(%rdi)
add    $0xfffffffffffffff8,%rdi
add    $0xfffffffffffffff8,%rdx
mov    %rdx,%r9
mov    %rsi,%r8
mov    %rdi,%rcx
cmp    $0x8,%r9
jb     14c3 <memmove+0x3c3>
lea    -0x8(%r9),%r10
mov    %r10d,%edx
shr    $0x3,%edx
add    $0x1,%edx
and    $0x3,%rdx
je     146f <memmove+0x36f>
shl    $0x3,%rdx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
mov    -0x8(%r8),%rdi
add    $0xfffffffffffffff8,%r8
mov    %rdi,-0x8(%rcx)
add    $0xfffffffffffffff8,%rcx
add    $0x8,%rsi
cmp    %rsi,%rdx
jne    1290 <memmove+0x190>
sub    %rsi,%r9
mov    %r9,%rdx
jmp    146f <memmove+0x36f>
mov    %esi,%ecx
xor    %eax,%ecx
test   $0x7,%cl
je     12c5 <memmove+0x1c5>
mov    %rax,%rbx
jmp    1596 <memmove+0x496>
test   %rdx,%rdx
je     1402 <memmove+0x302>
mov    %esi,%ecx
and    $0x7,%ecx
test   %rcx,%rcx
je     1402 <memmove+0x302>
mov    (%rsi),%cl
mov    %cl,(%rax)
lea    0x1(%rsi),%r11
lea    0x1(%rax),%rbx
mov    %rdx,%r8
add    $0xffffffffffffffff,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x1(%rsi),%cl
mov    %cl,0x1(%rax)
lea    0x2(%rsi),%r11
lea    0x2(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffffe,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x2(%rsi),%cl
mov    %cl,0x2(%rax)
lea    0x3(%rsi),%r11
lea    0x3(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffffd,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x3(%rsi),%cl
mov    %cl,0x3(%rax)
lea    0x4(%rsi),%r11
lea    0x4(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffffc,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x4(%rsi),%cl
mov    %cl,0x4(%rax)
lea    0x5(%rsi),%r11
lea    0x5(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffffb,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x5(%rsi),%cl
mov    %cl,0x5(%rax)
lea    0x6(%rsi),%r11
lea    0x6(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffffa,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x6(%rsi),%cl
mov    %cl,0x6(%rax)
lea    0x7(%rsi),%r11
lea    0x7(%rax),%rbx
mov    %rdx,%r8
add    $0xfffffffffffffff9,%r8
je     140b <memmove+0x30b>
mov    %r11d,%edi
and    $0x7,%edi
test   %rdi,%rdi
je     140b <memmove+0x30b>
mov    0x7(%rsi),%cl
mov    %cl,0x7(%rax)
add    $0x8,%rsi
lea    0x8(%rax),%rbx
add    $0xfffffffffffffff8,%rdx
mov    %rdx,%r8
mov    %rsi,%r11
jmp    140b <memmove+0x30b>
mov    %rdx,%r8
mov    %rsi,%r11
mov    %rax,%rbx
cmp    $0x8,%r8
jb     1590 <memmove+0x490>
lea    -0x8(%r8),%r9
mov    %r9d,%r10d
shr    $0x3,%r10d
add    $0x1,%r10d
and    $0x3,%r10
je     1552 <memmove+0x452>
shl    $0x3,%r10
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%r11,%rsi,1),%rdx
mov    %rdx,(%rbx,%rsi,1)
add    $0x8,%rsi
cmp    %rsi,%r10
jne    1440 <memmove+0x340>
add    %rsi,%rbx
add    %rsi,%r11
sub    %rsi,%r8
mov    %r11,%rsi
mov    %r8,%rdx
cmp    $0x18,%r9
jae    1560 <memmove+0x460>
jmp    1596 <memmove+0x496>
mov    %r8,%rsi
mov    %rcx,%rdi
cmp    $0x18,%r10
jb     14cc <memmove+0x3cc>
xor    %edx,%edx
nopl   (%rax)
mov    -0x8(%r8,%rdx,1),%rsi
mov    %rsi,-0x8(%rcx,%rdx,1)
mov    -0x10(%r8,%rdx,1),%rsi
mov    %rsi,-0x10(%rcx,%rdx,1)
mov    -0x18(%r8,%rdx,1),%rsi
mov    %rsi,-0x18(%rcx,%rdx,1)
mov    -0x20(%r8,%rdx,1),%rsi
mov    %rsi,-0x20(%rcx,%rdx,1)
lea    (%r9,%rdx,1),%rsi
add    $0xffffffffffffffe0,%rsi
add    $0xffffffffffffffe0,%rdx
cmp    $0x7,%rsi
ja     1480 <memmove+0x380>
add    %rdx,%rcx
add    %rdx,%r8
add    %rdx,%r9
mov    %r9,%rdx
mov    %r8,%rsi
mov    %rcx,%rdi
test   %rdx,%rdx
je     15f8 <memmove+0x4f8>
lea    -0x1(%rdx),%r8
mov    %rdx,%r9
and    $0x3,%r9
je     150b <memmove+0x40b>
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x1(%rsi),%ebx
add    $0xffffffffffffffff,%rsi
mov    %bl,-0x1(%rdi)
add    $0xffffffffffffffff,%rdi
add    $0x1,%rcx
cmp    %rcx,%r9
jne    14f0 <memmove+0x3f0>
sub    %rcx,%rdx
cmp    $0x3,%r8
jb     15f8 <memmove+0x4f8>
neg    %rdx
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movzbl -0x1(%rsi,%rcx,1),%ebx
mov    %bl,-0x1(%rdi,%rcx,1)
movzbl -0x2(%rsi,%rcx,1),%ebx
mov    %bl,-0x2(%rdi,%rcx,1)
movzbl -0x3(%rsi,%rcx,1),%ebx
mov    %bl,-0x3(%rdi,%rcx,1)
movzbl -0x4(%rsi,%rcx,1),%ebx
mov    %bl,-0x4(%rdi,%rcx,1)
add    $0xfffffffffffffffc,%rcx
cmp    %rcx,%rdx
jne    1520 <memmove+0x420>
jmp    15f8 <memmove+0x4f8>
cmp    $0x18,%r9
jb     1596 <memmove+0x496>
nopl   0x0(%rax,%rax,1)
mov    (%r11),%rdx
mov    %rdx,(%rbx)
mov    0x8(%r11),%rdx
mov    %rdx,0x8(%rbx)
mov    0x10(%r11),%rdx
mov    %rdx,0x10(%rbx)
mov    0x18(%r11),%rdx
mov    %rdx,0x18(%rbx)
add    $0x20,%r11
add    $0x20,%rbx
add    $0xffffffffffffffe0,%r8
cmp    $0x7,%r8
ja     1560 <memmove+0x460>
mov    %r8,%rdx
mov    %r11,%rsi
test   %rdx,%rdx
je     15f8 <memmove+0x4f8>
lea    -0x1(%rdx),%r8
mov    %rdx,%r9
and    $0x3,%r9
je     15c9 <memmove+0x4c9>
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
movzbl (%rsi,%rdi,1),%ecx
mov    %cl,(%rbx,%rdi,1)
add    $0x1,%rdi
cmp    %rdi,%r9
jne    15b0 <memmove+0x4b0>
add    %rdi,%rbx
add    %rdi,%rsi
sub    %rdi,%rdx
cmp    $0x3,%r8
jb     15f8 <memmove+0x4f8>
nop
movzbl (%rsi),%ecx
mov    %cl,(%rbx)
movzbl 0x1(%rsi),%ecx
mov    %cl,0x1(%rbx)
movzbl 0x2(%rsi),%ecx
mov    %cl,0x2(%rbx)
movzbl 0x3(%rsi),%ecx
mov    %cl,0x3(%rbx)
add    $0x4,%rsi
add    $0x4,%rbx
add    $0xfffffffffffffffc,%rdx
jne    15d0 <memmove+0x4d0>
pop    %rbx
ret

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

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