void merge(int *A, int *B, int *X, int *Y, int low, int mid, int up, int N) {
  int i = low, j = mid + 1, k = low, q = 0;
  for (q = low; q <= up; q++) {
    X[q] = A[q];
    Y[q] = B[q];
  }
  while ((i <= mid) && (j <= up)) {
    if (X[i] < X[j]) {
      A[k] = X[i];
      B[k++] = Y[i++];
    } else if (X[i] == X[j]) {
      if (Y[i] <= Y[j]) {
        A[k] = X[i];
        B[k++] = Y[i++];
      } else {
        A[k] = X[j];
        B[k++] = Y[j++];
      }
    } else {
      A[k] = X[j];
      B[k++] = Y[j++];
    }
  }
  if (i > mid)
    for (q = j; q <= up; q++) {
      A[k] = X[q];
      B[k++] = Y[q];
    }
  else
    for (q = i; q <= mid; q++) {
      A[k] = X[q];
      B[k++] = Y[q];
    }
}


x86 assembly (clang, -O0):
<merge>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x10(%rbp),%eax
jg     118a <merge+0x8a>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1144 <merge+0x44>
jmp    118f <merge+0x8f>
mov    -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x28(%rbp),%ecx
mov    %al,-0x39(%rbp)
jg     11ac <merge+0xac>
mov    -0x30(%rbp),%eax
cmp    0x10(%rbp),%eax
setle  %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    11bc <merge+0xbc>
jmp    1329 <merge+0x229>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x30(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jge    121d <merge+0x11d>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x2c(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1324 <merge+0x224>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x30(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    12df <merge+0x1df>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
movslq -0x30(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jg     129a <merge+0x19a>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x2c(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    12da <merge+0x1da>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x30(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    131f <merge+0x21f>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x30(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1324 <merge+0x224>
jmp    118f <merge+0x8f>
mov    -0x2c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    1390 <merge+0x290>
mov    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x10(%rbp),%eax
jg     138b <merge+0x28b>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    133b <merge+0x23b>
jmp    13eb <merge+0x2eb>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     13e6 <merge+0x2e6>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x34(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1396 <merge+0x296>
jmp    13eb <merge+0x2eb>
pop    %rbp
ret

x86 assembly (clang, -O2):
<merge>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x38(%rsp),%r11d
sub    %r8d,%r11d
jl     1344 <merge+0x244>
movslq %r8d,%r10
cmp    $0x7,%r11d
jae    1146 <merge+0x46>
mov    0x38(%rsp),%ebx
lea    0x1(%rbx),%ebp
mov    %ebp,%eax
sub    %r10d,%eax
test   $0x1,%al
jne    12ff <merge+0x1ff>
mov    %r10,%rax
cmp    %ebx,%r10d
jne    131b <merge+0x21b>
jmp    1344 <merge+0x244>
lea    (%rdx,%r10,4),%rbx
lea    (%r11,%r10,1),%rax
lea    (%rdx,%rax,4),%rbp
add    $0x4,%rbp
lea    (%rcx,%r10,4),%r14
lea    0x4(%rcx,%rax,4),%r13
lea    (%rdi,%r10,4),%r15
lea    (%rdi,%rax,4),%r12
add    $0x4,%r12
lea    (%rsi,%rax,4),%rax
add    $0x4,%rax
cmp    %r13,%rbx
setb   -0x18(%rsp)
cmp    %rbp,%r14
setb   -0x8(%rsp)
cmp    %r12,%rbx
setb   -0x10(%rsp)
cmp    %rbp,%r15
setb   -0x1a(%rsp)
cmp    %rax,%rbx
lea    (%rsi,%r10,4),%rbx
setb   -0x1b(%rsp)
cmp    %rbp,%rbx
setb   -0x19(%rsp)
cmp    %r12,%r14
setb   %bpl
cmp    %r13,%r15
setb   %r12b
cmp    %rax,%r14
setb   %r15b
cmp    %r13,%rbx
setb   %r14b
mov    -0x8(%rsp),%al
test   %al,-0x18(%rsp)
jne    1121 <merge+0x21>
mov    -0x1a(%rsp),%al
and    %al,-0x10(%rsp)
mov    0x38(%rsp),%ebx
jne    1125 <merge+0x25>
mov    -0x19(%rsp),%al
and    %al,-0x1b(%rsp)
jne    1125 <merge+0x25>
and    %r12b,%bpl
jne    1125 <merge+0x25>
and    %r14b,%r15b
jne    1125 <merge+0x25>
add    $0x1,%r11
mov    %r11,%r14
and    $0xfffffffffffffff8,%r14
lea    -0x8(%r14),%rax
mov    %rax,%rbx
shr    $0x3,%rbx
add    $0x1,%rbx
test   %rax,%rax
mov    %rbx,-0x18(%rsp)
je     188a <merge+0x78a>
and    $0xfffffffffffffffe,%rbx
lea    (%rcx,%r10,4),%r13
add    $0x30,%r13
lea    (%rsi,%r10,4),%rbp
add    $0x30,%rbp
lea    (%rdx,%r10,4),%r15
add    $0x30,%r15
lea    (%rdi,%r10,4),%r12
add    $0x30,%r12
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups -0x30(%r12,%rax,4),%xmm0
movups -0x20(%r12,%rax,4),%xmm1
movups %xmm0,-0x30(%r15,%rax,4)
movups %xmm1,-0x20(%r15,%rax,4)
movups -0x30(%rbp,%rax,4),%xmm0
movups -0x20(%rbp,%rax,4),%xmm1
movups %xmm0,-0x30(%r13,%rax,4)
movups %xmm1,-0x20(%r13,%rax,4)
movups -0x10(%r12,%rax,4),%xmm0
movups (%r12,%rax,4),%xmm1
movups %xmm0,-0x10(%r15,%rax,4)
movups %xmm1,(%r15,%rax,4)
movups -0x10(%rbp,%rax,4),%xmm0
movups 0x0(%rbp,%rax,4),%xmm1
movups %xmm0,-0x10(%r13,%rax,4)
movups %xmm1,0x0(%r13,%rax,4)
add    $0x10,%rax
add    $0xfffffffffffffffe,%rbx
jne    1260 <merge+0x160>
testb  $0x1,-0x18(%rsp)
je     12f2 <merge+0x1f2>
add    %r10,%rax
movups (%rdi,%rax,4),%xmm0
movups 0x10(%rdi,%rax,4),%xmm1
movups %xmm0,(%rdx,%rax,4)
movups %xmm1,0x10(%rdx,%rax,4)
movups (%rsi,%rax,4),%xmm0
movups 0x10(%rsi,%rax,4),%xmm1
movups %xmm0,(%rcx,%rax,4)
movups %xmm1,0x10(%rcx,%rax,4)
cmp    %r14,%r11
je     1344 <merge+0x244>
add    %r14,%r10
jmp    1121 <merge+0x21>
mov    (%rdi,%r10,4),%eax
mov    %eax,(%rdx,%r10,4)
mov    (%rsi,%r10,4),%eax
mov    %eax,(%rcx,%r10,4)
mov    %r10,%rax
add    $0x1,%rax
cmp    %ebx,%r10d
je     1344 <merge+0x244>
mov    %ebp,%ebp
nopl   (%rax)
mov    (%rdi,%rax,4),%ebx
mov    %ebx,(%rdx,%rax,4)
mov    (%rsi,%rax,4),%ebx
mov    %ebx,(%rcx,%rax,4)
mov    0x4(%rdi,%rax,4),%ebx
mov    %ebx,0x4(%rdx,%rax,4)
mov    0x4(%rsi,%rax,4),%ebx
mov    %ebx,0x4(%rcx,%rax,4)
add    $0x2,%rax
cmp    %eax,%ebp
jne    1320 <merge+0x220>
lea    0x1(%r9),%r11d
cmp    %r9d,%r8d
jg     162d <merge+0x52d>
mov    0x38(%rsp),%ebx
cmp    %ebx,%r9d
jge    15ed <merge+0x4ed>
movslq %r8d,%rax
lea    (%rsi,%rax,4),%r10
lea    (%rdi,%rax,4),%r15
xor    %eax,%eax
mov    %r8d,-0x18(%rsp)
mov    %r8d,%r12d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq %r12d,%r8
mov    (%rdx,%r8,4),%ebp
movslq %r11d,%r14
mov    (%rdx,%r14,4),%r13d
cmp    %r13d,%ebp
jge    13b0 <merge+0x2b0>
mov    %ebp,(%r15,%rax,4)
lea    0x1(%r8),%r12d
lea    (%rcx,%r8,4),%r13
jmp    13ed <merge+0x2ed>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
jne    13d0 <merge+0x2d0>
mov    (%rcx,%r8,4),%ebx
cmp    (%rcx,%r14,4),%ebx
mov    %ebp,(%r15,%rax,4)
jle    13de <merge+0x2de>
lea    (%rcx,%r14,4),%r13
add    $0x1,%r14d
mov    %r14d,%r11d
jmp    13e9 <merge+0x2e9>
nopl   (%rax)
mov    %r13d,(%r15,%rax,4)
lea    0x1(%r14),%r11d
lea    (%rcx,%r14,4),%r13
jmp    13ed <merge+0x2ed>
lea    (%rcx,%r8,4),%r13
add    $0x1,%r8d
mov    %r8d,%r12d
mov    0x38(%rsp),%ebx
mov    0x0(%r13),%ebp
mov    %ebp,(%r10,%rax,4)
add    $0x1,%rax
cmp    %r9d,%r12d
jg     1407 <merge+0x307>
cmp    %ebx,%r11d
jle    1380 <merge+0x280>
mov    -0x18(%rsp),%r8d
add    %eax,%r8d
cmp    %r9d,%r12d
jle    15f9 <merge+0x4f9>
cmp    %ebx,%r11d
jg     1954 <merge+0x854>
movslq %r11d,%r9
movslq %r8d,%r8
mov    %ebx,%r10d
sub    %r11d,%r10d
cmp    $0x7,%r10d
jb     18cd <merge+0x7cd>
lea    (%rdi,%r8,4),%rbp
lea    (%r8,%r10,1),%rax
lea    (%rdi,%rax,4),%rbx
add    $0x4,%rbx
mov    %r8,-0x18(%rsp)
lea    (%rsi,%r8,4),%r13
lea    0x4(%rsi,%rax,4),%r12
lea    (%rdx,%r9,4),%r15
lea    (%r9,%r10,1),%rax
lea    (%rdx,%rax,4),%r11
add    $0x4,%r11
lea    (%rcx,%rax,4),%r14
add    $0x4,%r14
cmp    %r12,%rbp
setb   -0x8(%rsp)
cmp    %rbx,%r13
setb   -0x10(%rsp)
cmp    %r11,%rbp
setb   %al
cmp    %rbx,%r15
setb   -0x1a(%rsp)
cmp    %r14,%rbp
lea    (%rcx,%r9,4),%rbp
setb   %r8b
cmp    %rbx,%rbp
setb   -0x1b(%rsp)
cmp    %r11,%r13
setb   %r11b
cmp    %r12,%r15
setb   %r15b
cmp    %r14,%r13
setb   %r14b
cmp    %r12,%rbp
setb   %bpl
mov    -0x10(%rsp),%bl
test   %bl,-0x8(%rsp)
jne    18c4 <merge+0x7c4>
and    -0x1a(%rsp),%al
jne    18c4 <merge+0x7c4>
and    -0x1b(%rsp),%r8b
jne    18c4 <merge+0x7c4>
and    %r15b,%r11b
mov    -0x18(%rsp),%r8
jne    189c <merge+0x79c>
and    %bpl,%r14b
jne    189c <merge+0x79c>
add    $0x1,%r10
mov    %r10,%r14
and    $0xfffffffffffffff8,%r14
lea    -0x8(%r14),%rax
mov    %rax,%r15
shr    $0x3,%r15
add    $0x1,%r15
test   %rax,%rax
je     18b3 <merge+0x7b3>
mov    %r15,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%rsi,%r8,4),%r12
add    $0x30,%r12
lea    (%rdi,%r8,4),%r13
add    $0x30,%r13
lea    (%rcx,%r9,4),%rbp
add    $0x30,%rbp
lea    (%rdx,%r9,4),%r11
add    $0x30,%r11
xor    %eax,%eax
movups -0x30(%r11,%rax,4),%xmm0
movups -0x20(%r11,%rax,4),%xmm1
movups %xmm0,-0x30(%r13,%rax,4)
movups %xmm1,-0x20(%r13,%rax,4)
movups -0x30(%rbp,%rax,4),%xmm0
movups -0x20(%rbp,%rax,4),%xmm1
movups %xmm0,-0x30(%r12,%rax,4)
movups %xmm1,-0x20(%r12,%rax,4)
movups -0x10(%r11,%rax,4),%xmm0
movups (%r11,%rax,4),%xmm1
movups %xmm0,-0x10(%r13,%rax,4)
movups %xmm1,0x0(%r13,%rax,4)
movups -0x10(%rbp,%rax,4),%xmm0
movups 0x0(%rbp,%rax,4),%xmm1
movups %xmm0,-0x10(%r12,%rax,4)
movups %xmm1,(%r12,%rax,4)
add    $0x10,%rax
add    $0xfffffffffffffffe,%rbx
jne    1540 <merge+0x440>
test   $0x1,%r15b
je     15d5 <merge+0x4d5>
lea    (%rax,%r8,1),%rbp
add    %r9,%rax
movups (%rdx,%rax,4),%xmm0
movups 0x10(%rdx,%rax,4),%xmm1
movups %xmm0,(%rdi,%rbp,4)
movups %xmm1,0x10(%rdi,%rbp,4)
movups (%rcx,%rax,4),%xmm0
movups 0x10(%rcx,%rax,4),%xmm1
movups %xmm0,(%rsi,%rbp,4)
movups %xmm1,0x10(%rsi,%rbp,4)
cmp    %r14,%r10
mov    0x38(%rsp),%ebx
je     1954 <merge+0x854>
add    %r14,%r8
add    %r14,%r9
jmp    18cd <merge+0x7cd>
mov    %r8d,%r12d
cmp    %r9d,%r12d
jg     1418 <merge+0x318>
movslq %r12d,%r10
movslq %r8d,%r8
mov    %r9d,%r15d
sub    %r12d,%r15d
cmp    $0x7,%r15d
jae    163f <merge+0x53f>
mov    %r9d,%eax
sub    %r10d,%eax
add    $0x1,%eax
test   $0x1,%al
jne    180e <merge+0x70e>
mov    %r10,%rbp
cmp    %r9d,%r10d
jne    1832 <merge+0x732>
jmp    1954 <merge+0x854>
mov    %r8d,%r12d
mov    0x38(%rsp),%ebx
cmp    %r9d,%r12d
jg     1418 <merge+0x318>
jmp    15f9 <merge+0x4f9>
lea    (%rdi,%r8,4),%rbp
lea    (%r8,%r15,1),%rax
lea    (%rdi,%rax,4),%rbx
add    $0x4,%rbx
mov    %r8,-0x18(%rsp)
lea    (%rsi,%r8,4),%r12
lea    0x4(%rsi,%rax,4),%r14
lea    (%rdx,%r10,4),%r8
lea    (%r10,%r15,1),%rax
lea    (%rdx,%rax,4),%r11
add    $0x4,%r11
mov    %r10,%r13
lea    (%rcx,%rax,4),%r10
add    $0x4,%r10
cmp    %r14,%rbp
setb   -0x10(%rsp)
cmp    %rbx,%r12
setb   -0x1a(%rsp)
cmp    %r11,%rbp
setb   %al
cmp    %rbx,%r8
setb   -0x1b(%rsp)
cmp    %r10,%rbp
mov    %r13,-0x8(%rsp)
lea    (%rcx,%r13,4),%rbp
setb   %r13b
cmp    %rbx,%rbp
setb   -0x19(%rsp)
cmp    %r11,%r12
setb   %r11b
cmp    %r14,%r8
setb   %r8b
cmp    %r10,%r12
setb   %r12b
cmp    %r14,%rbp
setb   %bpl
mov    -0x1a(%rsp),%bl
test   %bl,-0x10(%rsp)
jne    195f <merge+0x85f>
mov    %r8d,%ebx
and    -0x1b(%rsp),%al
mov    -0x18(%rsp),%r8
mov    -0x8(%rsp),%r10
jne    160b <merge+0x50b>
and    -0x19(%rsp),%r13b
jne    160b <merge+0x50b>
and    %bl,%r11b
jne    160b <merge+0x50b>
and    %bpl,%r12b
jne    160b <merge+0x50b>
add    $0x1,%r15
mov    %r15,%rax
and    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rsp)
add    $0xfffffffffffffff8,%rax
mov    %rax,%r14
shr    $0x3,%r14
add    $0x1,%r14
test   %rax,%rax
je     18a2 <merge+0x7a2>
mov    %r14,%rax
and    $0xfffffffffffffffe,%rax
lea    (%rsi,%r8,4),%r12
add    $0x30,%r12
lea    (%rdi,%r8,4),%r13
add    $0x30,%r13
lea    (%rcx,%r10,4),%rbp
add    $0x30,%rbp
lea    (%rdx,%r10,4),%r11
add    $0x30,%r11
xor    %ebx,%ebx
nopl   (%rax)
movups -0x30(%r11,%rbx,4),%xmm0
movups -0x20(%r11,%rbx,4),%xmm1
movups %xmm0,-0x30(%r13,%rbx,4)
movups %xmm1,-0x20(%r13,%rbx,4)
movups -0x30(%rbp,%rbx,4),%xmm0
movups -0x20(%rbp,%rbx,4),%xmm1
movups %xmm0,-0x30(%r12,%rbx,4)
movups %xmm1,-0x20(%r12,%rbx,4)
movups -0x10(%r11,%rbx,4),%xmm0
movups (%r11,%rbx,4),%xmm1
movups %xmm0,-0x10(%r13,%rbx,4)
movups %xmm1,0x0(%r13,%rbx,4)
movups -0x10(%rbp,%rbx,4),%xmm0
movups 0x0(%rbp,%rbx,4),%xmm1
movups %xmm0,-0x10(%r12,%rbx,4)
movups %xmm1,(%r12,%rbx,4)
add    $0x10,%rbx
add    $0xfffffffffffffffe,%rax
jne    1760 <merge+0x660>
test   $0x1,%r14b
je     17f5 <merge+0x6f5>
lea    (%rbx,%r8,1),%rax
add    %r10,%rbx
movups (%rdx,%rbx,4),%xmm0
movups 0x10(%rdx,%rbx,4),%xmm1
movups %xmm0,(%rdi,%rax,4)
movups %xmm1,0x10(%rdi,%rax,4)
movups (%rcx,%rbx,4),%xmm0
movups 0x10(%rcx,%rbx,4),%xmm1
movups %xmm0,(%rsi,%rax,4)
movups %xmm1,0x10(%rsi,%rax,4)
mov    -0x10(%rsp),%rax
cmp    %rax,%r15
je     1954 <merge+0x854>
add    %rax,%r8
add    %rax,%r10
jmp    160b <merge+0x50b>
mov    (%rdx,%r10,4),%eax
mov    %eax,(%rdi,%r8,4)
mov    (%rcx,%r10,4),%eax
mov    %eax,(%rsi,%r8,4)
add    $0x1,%r8
mov    %r10,%rbp
add    $0x1,%rbp
cmp    %r9d,%r10d
je     1954 <merge+0x854>
lea    (%rdi,%r8,4),%rax
add    $0x4,%rax
lea    (%rsi,%r8,4),%rsi
add    $0x4,%rsi
sub    %ebp,%r9d
add    $0x1,%r9d
lea    (%rdx,%rbp,4),%rdx
add    $0x4,%rdx
lea    (%rcx,%rbp,4),%rcx
add    $0x4,%rcx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
mov    -0x4(%rdx,%rdi,4),%ebp
mov    %ebp,-0x4(%rax,%rdi,4)
mov    -0x4(%rcx,%rdi,4),%ebp
mov    %ebp,-0x4(%rsi,%rdi,4)
mov    (%rdx,%rdi,4),%ebp
mov    %ebp,(%rax,%rdi,4)
mov    (%rcx,%rdi,4),%ebp
mov    %ebp,(%rsi,%rdi,4)
add    $0x2,%rdi
cmp    %edi,%r9d
jne    1860 <merge+0x760>
jmp    1954 <merge+0x854>
xor    %eax,%eax
testb  $0x1,-0x18(%rsp)
jne    12cb <merge+0x1cb>
jmp    12f2 <merge+0x1f2>
mov    0x38(%rsp),%ebx
jmp    18cd <merge+0x7cd>
xor    %ebx,%ebx
test   $0x1,%r14b
jne    17ca <merge+0x6ca>
jmp    17f5 <merge+0x6f5>
xor    %eax,%eax
test   $0x1,%r15b
jne    15aa <merge+0x4aa>
jmp    15d5 <merge+0x4d5>
mov    0x38(%rsp),%ebx
mov    -0x18(%rsp),%r8
mov    %ebx,%eax
sub    %r9d,%eax
add    $0x1,%eax
test   $0x1,%al
jne    18e3 <merge+0x7e3>
mov    %r9,%rbp
cmp    %ebx,%r9d
jne    1903 <merge+0x803>
jmp    1954 <merge+0x854>
mov    (%rdx,%r9,4),%eax
mov    %eax,(%rdi,%r8,4)
mov    (%rcx,%r9,4),%eax
mov    %eax,(%rsi,%r8,4)
add    $0x1,%r8
mov    %r9,%rbp
add    $0x1,%rbp
cmp    %ebx,%r9d
je     1954 <merge+0x854>
lea    (%rdi,%r8,4),%rax
add    $0x4,%rax
lea    (%rsi,%r8,4),%rsi
add    $0x4,%rsi
sub    %ebp,%ebx
add    $0x1,%ebx
lea    (%rdx,%rbp,4),%rdx
add    $0x4,%rdx
lea    (%rcx,%rbp,4),%rcx
add    $0x4,%rcx
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
mov    -0x4(%rdx,%rdi,4),%ebp
mov    %ebp,-0x4(%rax,%rdi,4)
mov    -0x4(%rcx,%rdi,4),%ebp
mov    %ebp,-0x4(%rsi,%rdi,4)
mov    (%rdx,%rdi,4),%ebp
mov    %ebp,(%rax,%rdi,4)
mov    (%rcx,%rdi,4),%ebp
mov    %ebp,(%rsi,%rdi,4)
add    $0x2,%rdi
cmp    %edi,%ebx
jne    1930 <merge+0x830>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    -0x18(%rsp),%r8
mov    -0x8(%rsp),%r10
jmp    160b <merge+0x50b>

LLVM IR (-O0):
define void @merge(i32* %0, i32* %1, i32* %2, i32* %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
store i32* %0, i32** %9
store i32* %1, i32** %10
store i32* %2, i32** %11
store i32* %3, i32** %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32 %7, i32* %16
%21 = load i32, i32* %13
store i32 %21, i32* %17
%22 = load i32, i32* %14
%23 = add nsw i32 %22, 1
store i32 %23, i32* %18
%24 = load i32, i32* %13
store i32 %24, i32* %19
store i32 0, i32* %20
%25 = load i32, i32* %13
store i32 %25, i32* %20
br label %26
26: ; preds = %49, %8
%27 = load i32, i32* %20
%28 = load i32, i32* %15
%29 = icmp sle i32 %27, %28
br i1 %29, label %30, label %52
30: ; preds = %26
%31 = load i32*, i32** %9
%32 = load i32, i32* %20
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i32, i32* %31, i64 %33
%35 = load i32, i32* %34
%36 = load i32*, i32** %11
%37 = load i32, i32* %20
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
store i32 %35, i32* %39
%40 = load i32*, i32** %10
%41 = load i32, i32* %20
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i32, i32* %40, i64 %42
%44 = load i32, i32* %43
%45 = load i32*, i32** %12
%46 = load i32, i32* %20
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i32, i32* %45, i64 %47
store i32 %44, i32* %48
br label %49
49: ; preds = %30
%50 = load i32, i32* %20
%51 = add nsw i32 %50, 1
store i32 %51, i32* %20
br label %26
52: ; preds = %26
br label %53
53: ; preds = %185, %52
%54 = load i32, i32* %17
%55 = load i32, i32* %14
%56 = icmp sle i32 %54, %55
br i1 %56, label %57, label %61
57: ; preds = %53
%58 = load i32, i32* %18
%59 = load i32, i32* %15
%60 = icmp sle i32 %58, %59
br label %61
61: ; preds = %57, %53
%62 = phi i1 [ false, %53 ], [ %60, %57 ]
br i1 %62, label %63, label %186
63: ; preds = %61
%64 = load i32*, i32** %11
%65 = load i32, i32* %17
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %64, i64 %66
%68 = load i32, i32* %67
%69 = load i32*, i32** %11
%70 = load i32, i32* %18
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i32, i32* %69, i64 %71
%73 = load i32, i32* %72
%74 = icmp slt i32 %68, %73
br i1 %74, label %75, label %96
75: ; preds = %63
%76 = load i32*, i32** %11
%77 = load i32, i32* %17
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i32, i32* %76, i64 %78
%80 = load i32, i32* %79
%81 = load i32*, i32** %9
%82 = load i32, i32* %19
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i32, i32* %81, i64 %83
store i32 %80, i32* %84
%85 = load i32*, i32** %12
%86 = load i32, i32* %17
%87 = add nsw i32 %86, 1
store i32 %87, i32* %17
%88 = sext i32 %86 to i64
%89 = getelementptr inbounds i32, i32* %85, i64 %88
%90 = load i32, i32* %89
%91 = load i32*, i32** %10
%92 = load i32, i32* %19
%93 = add nsw i32 %92, 1
store i32 %93, i32* %19
%94 = sext i32 %92 to i64
%95 = getelementptr inbounds i32, i32* %91, i64 %94
store i32 %90, i32* %95
br label %185
96: ; preds = %63
%97 = load i32*, i32** %11
%98 = load i32, i32* %17
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i32, i32* %97, i64 %99
%101 = load i32, i32* %100
%102 = load i32*, i32** %11
%103 = load i32, i32* %18
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %102, i64 %104
%106 = load i32, i32* %105
%107 = icmp eq i32 %101, %106
br i1 %107, label %108, label %163
108: ; preds = %96
%109 = load i32*, i32** %12
%110 = load i32, i32* %17
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i32, i32* %109, i64 %111
%113 = load i32, i32* %112
%114 = load i32*, i32** %12
%115 = load i32, i32* %18
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i32, i32* %114, i64 %116
%118 = load i32, i32* %117
%119 = icmp sle i32 %113, %118
br i1 %119, label %120, label %141
120: ; preds = %108
%121 = load i32*, i32** %11
%122 = load i32, i32* %17
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds i32, i32* %121, i64 %123
%125 = load i32, i32* %124
%126 = load i32*, i32** %9
%127 = load i32, i32* %19
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i32, i32* %126, i64 %128
store i32 %125, i32* %129
%130 = load i32*, i32** %12
%131 = load i32, i32* %17
%132 = add nsw i32 %131, 1
store i32 %132, i32* %17
%133 = sext i32 %131 to i64
%134 = getelementptr inbounds i32, i32* %130, i64 %133
%135 = load i32, i32* %134
%136 = load i32*, i32** %10
%137 = load i32, i32* %19
%138 = add nsw i32 %137, 1
store i32 %138, i32* %19
%139 = sext i32 %137 to i64
%140 = getelementptr inbounds i32, i32* %136, i64 %139
store i32 %135, i32* %140
br label %162
141: ; preds = %108
%142 = load i32*, i32** %11
%143 = load i32, i32* %18
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds i32, i32* %142, i64 %144
%146 = load i32, i32* %145
%147 = load i32*, i32** %9
%148 = load i32, i32* %19
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i32, i32* %147, i64 %149
store i32 %146, i32* %150
%151 = load i32*, i32** %12
%152 = load i32, i32* %18
%153 = add nsw i32 %152, 1
store i32 %153, i32* %18
%154 = sext i32 %152 to i64
%155 = getelementptr inbounds i32, i32* %151, i64 %154
%156 = load i32, i32* %155
%157 = load i32*, i32** %10
%158 = load i32, i32* %19
%159 = add nsw i32 %158, 1
store i32 %159, i32* %19
%160 = sext i32 %158 to i64
%161 = getelementptr inbounds i32, i32* %157, i64 %160
store i32 %156, i32* %161
br label %162
162: ; preds = %141, %120
br label %184
163: ; preds = %96
%164 = load i32*, i32** %11
%165 = load i32, i32* %18
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds i32, i32* %164, i64 %166
%168 = load i32, i32* %167
%169 = load i32*, i32** %9
%170 = load i32, i32* %19
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds i32, i32* %169, i64 %171
store i32 %168, i32* %172
%173 = load i32*, i32** %12
%174 = load i32, i32* %18
%175 = add nsw i32 %174, 1
store i32 %175, i32* %18
%176 = sext i32 %174 to i64
%177 = getelementptr inbounds i32, i32* %173, i64 %176
%178 = load i32, i32* %177
%179 = load i32*, i32** %10
%180 = load i32, i32* %19
%181 = add nsw i32 %180, 1
store i32 %181, i32* %19
%182 = sext i32 %180 to i64
%183 = getelementptr inbounds i32, i32* %179, i64 %182
store i32 %178, i32* %183
br label %184
184: ; preds = %163, %162
br label %185
185: ; preds = %184, %75
br label %53
186: ; preds = %61
%187 = load i32, i32* %17
%188 = load i32, i32* %14
%189 = icmp sgt i32 %187, %188
br i1 %189, label %190, label %220
190: ; preds = %186
%191 = load i32, i32* %18
store i32 %191, i32* %20
br label %192
192: ; preds = %216, %190
%193 = load i32, i32* %20
%194 = load i32, i32* %15
%195 = icmp sle i32 %193, %194
br i1 %195, label %196, label %219
196: ; preds = %192
%197 = load i32*, i32** %11
%198 = load i32, i32* %20
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i32, i32* %197, i64 %199
%201 = load i32, i32* %200
%202 = load i32*, i32** %9
%203 = load i32, i32* %19
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds i32, i32* %202, i64 %204
store i32 %201, i32* %205
%206 = load i32*, i32** %12
%207 = load i32, i32* %20
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds i32, i32* %206, i64 %208
%210 = load i32, i32* %209
%211 = load i32*, i32** %10
%212 = load i32, i32* %19
%213 = add nsw i32 %212, 1
store i32 %213, i32* %19
%214 = sext i32 %212 to i64
%215 = getelementptr inbounds i32, i32* %211, i64 %214
store i32 %210, i32* %215
br label %216
216: ; preds = %196
%217 = load i32, i32* %20
%218 = add nsw i32 %217, 1
store i32 %218, i32* %20
br label %192
219: ; preds = %192
br label %250
220: ; preds = %186
%221 = load i32, i32* %17
store i32 %221, i32* %20
br label %222
222: ; preds = %246, %220
%223 = load i32, i32* %20
%224 = load i32, i32* %14
%225 = icmp sle i32 %223, %224
br i1 %225, label %226, label %249
226: ; preds = %222
%227 = load i32*, i32** %11
%228 = load i32, i32* %20
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds i32, i32* %227, i64 %229
%231 = load i32, i32* %230
%232 = load i32*, i32** %9
%233 = load i32, i32* %19
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i32, i32* %232, i64 %234
store i32 %231, i32* %235
%236 = load i32*, i32** %12
%237 = load i32, i32* %20
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds i32, i32* %236, i64 %238
%240 = load i32, i32* %239
%241 = load i32*, i32** %10
%242 = load i32, i32* %19
%243 = add nsw i32 %242, 1
store i32 %243, i32* %19
%244 = sext i32 %242 to i64
%245 = getelementptr inbounds i32, i32* %241, i64 %244
store i32 %240, i32* %245
br label %246
246: ; preds = %226
%247 = load i32, i32* %20
%248 = add nsw i32 %247, 1
store i32 %248, i32* %20
br label %222
249: ; preds = %222
br label %250
250: ; preds = %249, %219
ret void
}

LLVM IR (-O2):
define void @merge(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = add i32 %5, 1
%10 = icmp slt i32 %6, %4
br i1 %10, label %154, label %11
11: ; preds = %8
%12 = sext i32 %4 to i64
%13 = add i32 %6, 1
%14 = sub i32 %6, %4
%15 = zext i32 %14 to i64
%16 = add nuw nsw i64 %15, 1
%17 = icmp ult i32 %14, 7
br i1 %17, label %136, label %18
18: ; preds = %11
%19 = getelementptr i32, i32* %2, i64 %12
%20 = sub i32 %6, %4
%21 = zext i32 %20 to i64
%22 = add nsw i64 %12, %21
%23 = add nsw i64 %22, 1
%24 = getelementptr i32, i32* %2, i64 %23
%25 = getelementptr i32, i32* %3, i64 %12
%26 = getelementptr i32, i32* %3, i64 %23
%27 = getelementptr i32, i32* %0, i64 %12
%28 = getelementptr i32, i32* %0, i64 %23
%29 = getelementptr i32, i32* %1, i64 %12
%30 = getelementptr i32, i32* %1, i64 %23
%31 = icmp ult i32* %19, %26
%32 = icmp ult i32* %25, %24
%33 = and i1 %31, %32
%34 = icmp ult i32* %19, %28
%35 = icmp ult i32* %27, %24
%36 = and i1 %34, %35
%37 = or i1 %33, %36
%38 = icmp ult i32* %19, %30
%39 = icmp ult i32* %29, %24
%40 = and i1 %38, %39
%41 = or i1 %37, %40
%42 = icmp ult i32* %25, %28
%43 = icmp ult i32* %27, %26
%44 = and i1 %42, %43
%45 = or i1 %41, %44
%46 = icmp ult i32* %25, %30
%47 = icmp ult i32* %29, %26
%48 = and i1 %46, %47
%49 = or i1 %45, %48
br i1 %49, label %136, label %50
50: ; preds = %18
%51 = and i64 %16, 8589934584
%52 = add nsw i64 %51, %12
%53 = add nsw i64 %51, -8
%54 = lshr exact i64 %53, 3
%55 = add nuw nsw i64 %54, 1
%56 = and i64 %55, 1
%57 = icmp eq i64 %53, 0
br i1 %57, label %109, label %58
58: ; preds = %50
%59 = and i64 %55, 4611686018427387902
br label %60
60: ; preds = %60, %58
%61 = phi i64 [ 0, %58 ], [ %106, %60 ]
%62 = phi i64 [ 0, %58 ], [ %107, %60 ]
%63 = add i64 %61, %12
%64 = getelementptr inbounds i32, i32* %0, i64 %63
%65 = bitcast i32* %64 to <4 x i32>*
%66 = load <4 x i32>, <4 x i32>* %65
%67 = getelementptr inbounds i32, i32* %64, i64 4
%68 = bitcast i32* %67 to <4 x i32>*
%69 = load <4 x i32>, <4 x i32>* %68
%70 = getelementptr inbounds i32, i32* %2, i64 %63
%71 = bitcast i32* %70 to <4 x i32>*
store <4 x i32> %66, <4 x i32>* %71
%72 = getelementptr inbounds i32, i32* %70, i64 4
%73 = bitcast i32* %72 to <4 x i32>*
store <4 x i32> %69, <4 x i32>* %73
%74 = getelementptr inbounds i32, i32* %1, i64 %63
%75 = bitcast i32* %74 to <4 x i32>*
%76 = load <4 x i32>, <4 x i32>* %75
%77 = getelementptr inbounds i32, i32* %74, i64 4
%78 = bitcast i32* %77 to <4 x i32>*
%79 = load <4 x i32>, <4 x i32>* %78
%80 = getelementptr inbounds i32, i32* %3, i64 %63
%81 = bitcast i32* %80 to <4 x i32>*
store <4 x i32> %76, <4 x i32>* %81
%82 = getelementptr inbounds i32, i32* %80, i64 4
%83 = bitcast i32* %82 to <4 x i32>*
store <4 x i32> %79, <4 x i32>* %83
%84 = or i64 %61, 8
%85 = add i64 %84, %12
%86 = getelementptr inbounds i32, i32* %0, i64 %85
%87 = bitcast i32* %86 to <4 x i32>*
%88 = load <4 x i32>, <4 x i32>* %87
%89 = getelementptr inbounds i32, i32* %86, i64 4
%90 = bitcast i32* %89 to <4 x i32>*
%91 = load <4 x i32>, <4 x i32>* %90
%92 = getelementptr inbounds i32, i32* %2, i64 %85
%93 = bitcast i32* %92 to <4 x i32>*
store <4 x i32> %88, <4 x i32>* %93
%94 = getelementptr inbounds i32, i32* %92, i64 4
%95 = bitcast i32* %94 to <4 x i32>*
store <4 x i32> %91, <4 x i32>* %95
%96 = getelementptr inbounds i32, i32* %1, i64 %85
%97 = bitcast i32* %96 to <4 x i32>*
%98 = load <4 x i32>, <4 x i32>* %97
%99 = getelementptr inbounds i32, i32* %96, i64 4
%100 = bitcast i32* %99 to <4 x i32>*
%101 = load <4 x i32>, <4 x i32>* %100
%102 = getelementptr inbounds i32, i32* %3, i64 %85
%103 = bitcast i32* %102 to <4 x i32>*
store <4 x i32> %98, <4 x i32>* %103
%104 = getelementptr inbounds i32, i32* %102, i64 4
%105 = bitcast i32* %104 to <4 x i32>*
store <4 x i32> %101, <4 x i32>* %105
%106 = add nuw i64 %61, 16
%107 = add i64 %62, 2
%108 = icmp eq i64 %107, %59
br i1 %108, label %109, label %60
109: ; preds = %60, %50
%110 = phi i64 [ 0, %50 ], [ %106, %60 ]
%111 = icmp eq i64 %56, 0
br i1 %111, label %134, label %112
112: ; preds = %109
%113 = add i64 %110, %12
%114 = getelementptr inbounds i32, i32* %0, i64 %113
%115 = bitcast i32* %114 to <4 x i32>*
%116 = load <4 x i32>, <4 x i32>* %115
%117 = getelementptr inbounds i32, i32* %114, i64 4
%118 = bitcast i32* %117 to <4 x i32>*
%119 = load <4 x i32>, <4 x i32>* %118
%120 = getelementptr inbounds i32, i32* %2, i64 %113
%121 = bitcast i32* %120 to <4 x i32>*
store <4 x i32> %116, <4 x i32>* %121
%122 = getelementptr inbounds i32, i32* %120, i64 4
%123 = bitcast i32* %122 to <4 x i32>*
store <4 x i32> %119, <4 x i32>* %123
%124 = getelementptr inbounds i32, i32* %1, i64 %113
%125 = bitcast i32* %124 to <4 x i32>*
%126 = load <4 x i32>, <4 x i32>* %125
%127 = getelementptr inbounds i32, i32* %124, i64 4
%128 = bitcast i32* %127 to <4 x i32>*
%129 = load <4 x i32>, <4 x i32>* %128
%130 = getelementptr inbounds i32, i32* %3, i64 %113
%131 = bitcast i32* %130 to <4 x i32>*
store <4 x i32> %126, <4 x i32>* %131
%132 = getelementptr inbounds i32, i32* %130, i64 4
%133 = bitcast i32* %132 to <4 x i32>*
store <4 x i32> %129, <4 x i32>* %133
br label %134
134: ; preds = %109, %112
%135 = icmp eq i64 %16, %51
br i1 %135, label %154, label %136
136: ; preds = %18, %11, %134
%137 = phi i64 [ %12, %18 ], [ %12, %11 ], [ %52, %134 ]
%138 = add i32 %6, 1
%139 = trunc i64 %137 to i32
%140 = sub i32 %138, %139
%141 = and i32 %140, 1
%142 = icmp eq i32 %141, 0
br i1 %142, label %151, label %143
143: ; preds = %136
%144 = getelementptr inbounds i32, i32* %0, i64 %137
%145 = load i32, i32* %144
%146 = getelementptr inbounds i32, i32* %2, i64 %137
store i32 %145, i32* %146
%147 = getelementptr inbounds i32, i32* %1, i64 %137
%148 = load i32, i32* %147
%149 = getelementptr inbounds i32, i32* %3, i64 %137
store i32 %148, i32* %149
%150 = add nsw i64 %137, 1
br label %151
151: ; preds = %143, %136
%152 = phi i64 [ %137, %136 ], [ %150, %143 ]
%153 = icmp eq i32 %139, %6
br i1 %153, label %154, label %160
154: ; preds = %151, %160, %134, %8
%155 = icmp sle i32 %4, %5
%156 = icmp slt i32 %5, %6
%157 = and i1 %155, %156
br i1 %157, label %158, label %222
158: ; preds = %154
%159 = sext i32 %4 to i64
br label %178
160: ; preds = %151, %160
%161 = phi i64 [ %175, %160 ], [ %152, %151 ]
%162 = getelementptr inbounds i32, i32* %0, i64 %161
%163 = load i32, i32* %162
%164 = getelementptr inbounds i32, i32* %2, i64 %161
store i32 %163, i32* %164
%165 = getelementptr inbounds i32, i32* %1, i64 %161
%166 = load i32, i32* %165
%167 = getelementptr inbounds i32, i32* %3, i64 %161
store i32 %166, i32* %167
%168 = add nsw i64 %161, 1
%169 = getelementptr inbounds i32, i32* %0, i64 %168
%170 = load i32, i32* %169
%171 = getelementptr inbounds i32, i32* %2, i64 %168
store i32 %170, i32* %171
%172 = getelementptr inbounds i32, i32* %1, i64 %168
%173 = load i32, i32* %172
%174 = getelementptr inbounds i32, i32* %3, i64 %168
store i32 %173, i32* %174
%175 = add nsw i64 %161, 2
%176 = trunc i64 %175 to i32
%177 = icmp eq i32 %13, %176
br i1 %177, label %154, label %160
178: ; preds = %158, %210
%179 = phi i64 [ %159, %158 ], [ %216, %210 ]
%180 = phi i32 [ %9, %158 ], [ %213, %210 ]
%181 = phi i32 [ %4, %158 ], [ %212, %210 ]
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %2, i64 %182
%184 = load i32, i32* %183
%185 = sext i32 %180 to i64
%186 = getelementptr inbounds i32, i32* %2, i64 %185
%187 = load i32, i32* %186
%188 = icmp slt i32 %184, %187
br i1 %188, label %189, label %193
189: ; preds = %178
%190 = getelementptr inbounds i32, i32* %0, i64 %179
store i32 %184, i32* %190
%191 = add nsw i32 %181, 1
%192 = getelementptr inbounds i32, i32* %3, i64 %182
br label %210
193: ; preds = %178
%194 = icmp eq i32 %184, %187
br i1 %194, label %195, label %206
195: ; preds = %193
%196 = getelementptr inbounds i32, i32* %3, i64 %182
%197 = load i32, i32* %196
%198 = getelementptr inbounds i32, i32* %3, i64 %185
%199 = load i32, i32* %198
%200 = icmp sgt i32 %197, %199
%201 = getelementptr inbounds i32, i32* %0, i64 %179
store i32 %184, i32* %201
br i1 %200, label %204, label %202
202: ; preds = %195
%203 = add nsw i32 %181, 1
br label %210
204: ; preds = %195
%205 = add nsw i32 %180, 1
br label %210
206: ; preds = %193
%207 = getelementptr inbounds i32, i32* %0, i64 %179
store i32 %187, i32* %207
%208 = add nsw i32 %180, 1
%209 = getelementptr inbounds i32, i32* %3, i64 %185
br label %210
210: ; preds = %206, %204, %202, %189
%211 = phi i32* [ %209, %206 ], [ %198, %204 ], [ %196, %202 ], [ %192, %189 ]
%212 = phi i32 [ %181, %206 ], [ %181, %204 ], [ %203, %202 ], [ %191, %189 ]
%213 = phi i32 [ %208, %206 ], [ %205, %204 ], [ %180, %202 ], [ %180, %189 ]
%214 = load i32, i32* %211
%215 = getelementptr inbounds i32, i32* %1, i64 %179
store i32 %214, i32* %215
%216 = add i64 %179, 1
%217 = icmp sle i32 %212, %5
%218 = icmp sle i32 %213, %6
%219 = select i1 %217, i1 %218, i1 false
br i1 %219, label %178, label %220
220: ; preds = %210
%221 = trunc i64 %216 to i32
br label %222
222: ; preds = %220, %154
%223 = phi i32 [ %4, %154 ], [ %212, %220 ]
%224 = phi i32 [ %9, %154 ], [ %213, %220 ]
%225 = phi i32 [ %4, %154 ], [ %221, %220 ]
%226 = icmp sgt i32 %223, %5
br i1 %226, label %379, label %227
227: ; preds = %222
%228 = sext i32 %223 to i64
%229 = sext i32 %225 to i64
%230 = sub i32 %5, %223
%231 = zext i32 %230 to i64
%232 = add nuw nsw i64 %231, 1
%233 = icmp ult i32 %230, 7
br i1 %233, label %358, label %234
234: ; preds = %227
%235 = getelementptr i32, i32* %0, i64 %229
%236 = sub i32 %5, %223
%237 = zext i32 %236 to i64
%238 = add nsw i64 %229, %237
%239 = add nsw i64 %238, 1
%240 = getelementptr i32, i32* %0, i64 %239
%241 = getelementptr i32, i32* %1, i64 %229
%242 = getelementptr i32, i32* %1, i64 %239
%243 = getelementptr i32, i32* %2, i64 %228
%244 = add nsw i64 %228, %237
%245 = add nsw i64 %244, 1
%246 = getelementptr i32, i32* %2, i64 %245
%247 = getelementptr i32, i32* %3, i64 %228
%248 = getelementptr i32, i32* %3, i64 %245
%249 = icmp ult i32* %235, %242
%250 = icmp ult i32* %241, %240
%251 = and i1 %249, %250
%252 = icmp ult i32* %235, %246
%253 = icmp ult i32* %243, %240
%254 = and i1 %252, %253
%255 = or i1 %251, %254
%256 = icmp ult i32* %235, %248
%257 = icmp ult i32* %247, %240
%258 = and i1 %256, %257
%259 = or i1 %255, %258
%260 = icmp ult i32* %241, %246
%261 = icmp ult i32* %243, %242
%262 = and i1 %260, %261
%263 = or i1 %259, %262
%264 = icmp ult i32* %241, %248
%265 = icmp ult i32* %247, %242
%266 = and i1 %264, %265
%267 = or i1 %263, %266
br i1 %267, label %358, label %268
268: ; preds = %234
%269 = and i64 %232, 8589934584
%270 = add nsw i64 %269, %229
%271 = add nsw i64 %269, %228
%272 = add nsw i64 %269, -8
%273 = lshr exact i64 %272, 3
%274 = add nuw nsw i64 %273, 1
%275 = and i64 %274, 1
%276 = icmp eq i64 %272, 0
br i1 %276, label %330, label %277
277: ; preds = %268
%278 = and i64 %274, 4611686018427387902
br label %279
279: ; preds = %279, %277
%280 = phi i64 [ 0, %277 ], [ %327, %279 ]
%281 = phi i64 [ 0, %277 ], [ %328, %279 ]
%282 = add i64 %280, %229
%283 = add i64 %280, %228
%284 = getelementptr inbounds i32, i32* %2, i64 %283
%285 = bitcast i32* %284 to <4 x i32>*
%286 = load <4 x i32>, <4 x i32>* %285
%287 = getelementptr inbounds i32, i32* %284, i64 4
%288 = bitcast i32* %287 to <4 x i32>*
%289 = load <4 x i32>, <4 x i32>* %288
%290 = getelementptr inbounds i32, i32* %0, i64 %282
%291 = bitcast i32* %290 to <4 x i32>*
store <4 x i32> %286, <4 x i32>* %291
%292 = getelementptr inbounds i32, i32* %290, i64 4
%293 = bitcast i32* %292 to <4 x i32>*
store <4 x i32> %289, <4 x i32>* %293
%294 = getelementptr inbounds i32, i32* %3, i64 %283
%295 = bitcast i32* %294 to <4 x i32>*
%296 = load <4 x i32>, <4 x i32>* %295
%297 = getelementptr inbounds i32, i32* %294, i64 4
%298 = bitcast i32* %297 to <4 x i32>*
%299 = load <4 x i32>, <4 x i32>* %298
%300 = getelementptr inbounds i32, i32* %1, i64 %282
%301 = bitcast i32* %300 to <4 x i32>*
store <4 x i32> %296, <4 x i32>* %301
%302 = getelementptr inbounds i32, i32* %300, i64 4
%303 = bitcast i32* %302 to <4 x i32>*
store <4 x i32> %299, <4 x i32>* %303
%304 = or i64 %280, 8
%305 = add i64 %304, %229
%306 = add i64 %304, %228
%307 = getelementptr inbounds i32, i32* %2, i64 %306
%308 = bitcast i32* %307 to <4 x i32>*
%309 = load <4 x i32>, <4 x i32>* %308
%310 = getelementptr inbounds i32, i32* %307, i64 4
%311 = bitcast i32* %310 to <4 x i32>*
%312 = load <4 x i32>, <4 x i32>* %311
%313 = getelementptr inbounds i32, i32* %0, i64 %305
%314 = bitcast i32* %313 to <4 x i32>*
store <4 x i32> %309, <4 x i32>* %314
%315 = getelementptr inbounds i32, i32* %313, i64 4
%316 = bitcast i32* %315 to <4 x i32>*
store <4 x i32> %312, <4 x i32>* %316
%317 = getelementptr inbounds i32, i32* %3, i64 %306
%318 = bitcast i32* %317 to <4 x i32>*
%319 = load <4 x i32>, <4 x i32>* %318
%320 = getelementptr inbounds i32, i32* %317, i64 4
%321 = bitcast i32* %320 to <4 x i32>*
%322 = load <4 x i32>, <4 x i32>* %321
%323 = getelementptr inbounds i32, i32* %1, i64 %305
%324 = bitcast i32* %323 to <4 x i32>*
store <4 x i32> %319, <4 x i32>* %324
%325 = getelementptr inbounds i32, i32* %323, i64 4
%326 = bitcast i32* %325 to <4 x i32>*
store <4 x i32> %322, <4 x i32>* %326
%327 = add nuw i64 %280, 16
%328 = add i64 %281, 2
%329 = icmp eq i64 %328, %278
br i1 %329, label %330, label %279
330: ; preds = %279, %268
%331 = phi i64 [ 0, %268 ], [ %327, %279 ]
%332 = icmp eq i64 %275, 0
br i1 %332, label %356, label %333
333: ; preds = %330
%334 = add i64 %331, %229
%335 = add i64 %331, %228
%336 = getelementptr inbounds i32, i32* %2, i64 %335
%337 = bitcast i32* %336 to <4 x i32>*
%338 = load <4 x i32>, <4 x i32>* %337
%339 = getelementptr inbounds i32, i32* %336, i64 4
%340 = bitcast i32* %339 to <4 x i32>*
%341 = load <4 x i32>, <4 x i32>* %340
%342 = getelementptr inbounds i32, i32* %0, i64 %334
%343 = bitcast i32* %342 to <4 x i32>*
store <4 x i32> %338, <4 x i32>* %343
%344 = getelementptr inbounds i32, i32* %342, i64 4
%345 = bitcast i32* %344 to <4 x i32>*
store <4 x i32> %341, <4 x i32>* %345
%346 = getelementptr inbounds i32, i32* %3, i64 %335
%347 = bitcast i32* %346 to <4 x i32>*
%348 = load <4 x i32>, <4 x i32>* %347
%349 = getelementptr inbounds i32, i32* %346, i64 4
%350 = bitcast i32* %349 to <4 x i32>*
%351 = load <4 x i32>, <4 x i32>* %350
%352 = getelementptr inbounds i32, i32* %1, i64 %334
%353 = bitcast i32* %352 to <4 x i32>*
store <4 x i32> %348, <4 x i32>* %353
%354 = getelementptr inbounds i32, i32* %352, i64 4
%355 = bitcast i32* %354 to <4 x i32>*
store <4 x i32> %351, <4 x i32>* %355
br label %356
356: ; preds = %330, %333
%357 = icmp eq i64 %232, %269
br i1 %357, label %576, label %358
358: ; preds = %234, %227, %356
%359 = phi i64 [ %229, %234 ], [ %229, %227 ], [ %270, %356 ]
%360 = phi i64 [ %228, %234 ], [ %228, %227 ], [ %271, %356 ]
%361 = add i32 %5, 1
%362 = trunc i64 %360 to i32
%363 = sub i32 %361, %362
%364 = and i32 %363, 1
%365 = icmp eq i32 %364, 0
br i1 %365, label %375, label %366
366: ; preds = %358
%367 = getelementptr inbounds i32, i32* %2, i64 %360
%368 = load i32, i32* %367
%369 = getelementptr inbounds i32, i32* %0, i64 %359
store i32 %368, i32* %369
%370 = getelementptr inbounds i32, i32* %3, i64 %360
%371 = load i32, i32* %370
%372 = add nsw i64 %359, 1
%373 = getelementptr inbounds i32, i32* %1, i64 %359
store i32 %371, i32* %373
%374 = add nsw i64 %360, 1
br label %375
375: ; preds = %366, %358
%376 = phi i64 [ %359, %358 ], [ %372, %366 ]
%377 = phi i64 [ %360, %358 ], [ %374, %366 ]
%378 = icmp eq i32 %362, %5
br i1 %378, label %576, label %555
379: ; preds = %222
%380 = icmp sgt i32 %224, %6
br i1 %380, label %576, label %381
381: ; preds = %379
%382 = sext i32 %224 to i64
%383 = sext i32 %225 to i64
%384 = add i32 %6, 1
%385 = sub i32 %6, %224
%386 = zext i32 %385 to i64
%387 = add nuw nsw i64 %386, 1
%388 = icmp ult i32 %385, 7
br i1 %388, label %513, label %389
389: ; preds = %381
%390 = getelementptr i32, i32* %0, i64 %383
%391 = sub i32 %6, %224
%392 = zext i32 %391 to i64
%393 = add nsw i64 %383, %392
%394 = add nsw i64 %393, 1
%395 = getelementptr i32, i32* %0, i64 %394
%396 = getelementptr i32, i32* %1, i64 %383
%397 = getelementptr i32, i32* %1, i64 %394
%398 = getelementptr i32, i32* %2, i64 %382
%399 = add nsw i64 %382, %392
%400 = add nsw i64 %399, 1
%401 = getelementptr i32, i32* %2, i64 %400
%402 = getelementptr i32, i32* %3, i64 %382
%403 = getelementptr i32, i32* %3, i64 %400
%404 = icmp ult i32* %390, %397
%405 = icmp ult i32* %396, %395
%406 = and i1 %404, %405
%407 = icmp ult i32* %390, %401
%408 = icmp ult i32* %398, %395
%409 = and i1 %407, %408
%410 = or i1 %406, %409
%411 = icmp ult i32* %390, %403
%412 = icmp ult i32* %402, %395
%413 = and i1 %411, %412
%414 = or i1 %410, %413
%415 = icmp ult i32* %396, %401
%416 = icmp ult i32* %398, %397
%417 = and i1 %415, %416
%418 = or i1 %414, %417
%419 = icmp ult i32* %396, %403
%420 = icmp ult i32* %402, %397
%421 = and i1 %419, %420
%422 = or i1 %418, %421
br i1 %422, label %513, label %423
423: ; preds = %389
%424 = and i64 %387, 8589934584
%425 = add nsw i64 %424, %383
%426 = add nsw i64 %424, %382
%427 = add nsw i64 %424, -8
%428 = lshr exact i64 %427, 3
%429 = add nuw nsw i64 %428, 1
%430 = and i64 %429, 1
%431 = icmp eq i64 %427, 0
br i1 %431, label %485, label %432
432: ; preds = %423
%433 = and i64 %429, 4611686018427387902
br label %434
434: ; preds = %434, %432
%435 = phi i64 [ 0, %432 ], [ %482, %434 ]
%436 = phi i64 [ 0, %432 ], [ %483, %434 ]
%437 = add i64 %435, %383
%438 = add i64 %435, %382
%439 = getelementptr inbounds i32, i32* %2, i64 %438
%440 = bitcast i32* %439 to <4 x i32>*
%441 = load <4 x i32>, <4 x i32>* %440
%442 = getelementptr inbounds i32, i32* %439, i64 4
%443 = bitcast i32* %442 to <4 x i32>*
%444 = load <4 x i32>, <4 x i32>* %443
%445 = getelementptr inbounds i32, i32* %0, i64 %437
%446 = bitcast i32* %445 to <4 x i32>*
store <4 x i32> %441, <4 x i32>* %446
%447 = getelementptr inbounds i32, i32* %445, i64 4
%448 = bitcast i32* %447 to <4 x i32>*
store <4 x i32> %444, <4 x i32>* %448
%449 = getelementptr inbounds i32, i32* %3, i64 %438
%450 = bitcast i32* %449 to <4 x i32>*
%451 = load <4 x i32>, <4 x i32>* %450
%452 = getelementptr inbounds i32, i32* %449, i64 4
%453 = bitcast i32* %452 to <4 x i32>*
%454 = load <4 x i32>, <4 x i32>* %453
%455 = getelementptr inbounds i32, i32* %1, i64 %437
%456 = bitcast i32* %455 to <4 x i32>*
store <4 x i32> %451, <4 x i32>* %456
%457 = getelementptr inbounds i32, i32* %455, i64 4
%458 = bitcast i32* %457 to <4 x i32>*
store <4 x i32> %454, <4 x i32>* %458
%459 = or i64 %435, 8
%460 = add i64 %459, %383
%461 = add i64 %459, %382
%462 = getelementptr inbounds i32, i32* %2, i64 %461
%463 = bitcast i32* %462 to <4 x i32>*
%464 = load <4 x i32>, <4 x i32>* %463
%465 = getelementptr inbounds i32, i32* %462, i64 4
%466 = bitcast i32* %465 to <4 x i32>*
%467 = load <4 x i32>, <4 x i32>* %466
%468 = getelementptr inbounds i32, i32* %0, i64 %460
%469 = bitcast i32* %468 to <4 x i32>*
store <4 x i32> %464, <4 x i32>* %469
%470 = getelementptr inbounds i32, i32* %468, i64 4
%471 = bitcast i32* %470 to <4 x i32>*
store <4 x i32> %467, <4 x i32>* %471
%472 = getelementptr inbounds i32, i32* %3, i64 %461
%473 = bitcast i32* %472 to <4 x i32>*
%474 = load <4 x i32>, <4 x i32>* %473
%475 = getelementptr inbounds i32, i32* %472, i64 4
%476 = bitcast i32* %475 to <4 x i32>*
%477 = load <4 x i32>, <4 x i32>* %476
%478 = getelementptr inbounds i32, i32* %1, i64 %460
%479 = bitcast i32* %478 to <4 x i32>*
store <4 x i32> %474, <4 x i32>* %479
%480 = getelementptr inbounds i32, i32* %478, i64 4
%481 = bitcast i32* %480 to <4 x i32>*
store <4 x i32> %477, <4 x i32>* %481
%482 = add nuw i64 %435, 16
%483 = add i64 %436, 2
%484 = icmp eq i64 %483, %433
br i1 %484, label %485, label %434
485: ; preds = %434, %423
%486 = phi i64 [ 0, %423 ], [ %482, %434 ]
%487 = icmp eq i64 %430, 0
br i1 %487, label %511, label %488
488: ; preds = %485
%489 = add i64 %486, %383
%490 = add i64 %486, %382
%491 = getelementptr inbounds i32, i32* %2, i64 %490
%492 = bitcast i32* %491 to <4 x i32>*
%493 = load <4 x i32>, <4 x i32>* %492
%494 = getelementptr inbounds i32, i32* %491, i64 4
%495 = bitcast i32* %494 to <4 x i32>*
%496 = load <4 x i32>, <4 x i32>* %495
%497 = getelementptr inbounds i32, i32* %0, i64 %489
%498 = bitcast i32* %497 to <4 x i32>*
store <4 x i32> %493, <4 x i32>* %498
%499 = getelementptr inbounds i32, i32* %497, i64 4
%500 = bitcast i32* %499 to <4 x i32>*
store <4 x i32> %496, <4 x i32>* %500
%501 = getelementptr inbounds i32, i32* %3, i64 %490
%502 = bitcast i32* %501 to <4 x i32>*
%503 = load <4 x i32>, <4 x i32>* %502
%504 = getelementptr inbounds i32, i32* %501, i64 4
%505 = bitcast i32* %504 to <4 x i32>*
%506 = load <4 x i32>, <4 x i32>* %505
%507 = getelementptr inbounds i32, i32* %1, i64 %489
%508 = bitcast i32* %507 to <4 x i32>*
store <4 x i32> %503, <4 x i32>* %508
%509 = getelementptr inbounds i32, i32* %507, i64 4
%510 = bitcast i32* %509 to <4 x i32>*
store <4 x i32> %506, <4 x i32>* %510
br label %511
511: ; preds = %485, %488
%512 = icmp eq i64 %387, %424
br i1 %512, label %576, label %513
513: ; preds = %389, %381, %511
%514 = phi i64 [ %383, %389 ], [ %383, %381 ], [ %425, %511 ]
%515 = phi i64 [ %382, %389 ], [ %382, %381 ], [ %426, %511 ]
%516 = add i32 %6, 1
%517 = trunc i64 %515 to i32
%518 = sub i32 %516, %517
%519 = and i32 %518, 1
%520 = icmp eq i32 %519, 0
br i1 %520, label %530, label %521
521: ; preds = %513
%522 = getelementptr inbounds i32, i32* %2, i64 %515
%523 = load i32, i32* %522
%524 = getelementptr inbounds i32, i32* %0, i64 %514
store i32 %523, i32* %524
%525 = getelementptr inbounds i32, i32* %3, i64 %515
%526 = load i32, i32* %525
%527 = add nsw i64 %514, 1
%528 = getelementptr inbounds i32, i32* %1, i64 %514
store i32 %526, i32* %528
%529 = add nsw i64 %515, 1
br label %530
530: ; preds = %521, %513
%531 = phi i64 [ %514, %513 ], [ %527, %521 ]
%532 = phi i64 [ %515, %513 ], [ %529, %521 ]
%533 = icmp eq i32 %517, %6
br i1 %533, label %576, label %534
534: ; preds = %530, %534
%535 = phi i64 [ %550, %534 ], [ %531, %530 ]
%536 = phi i64 [ %552, %534 ], [ %532, %530 ]
%537 = getelementptr inbounds i32, i32* %2, i64 %536
%538 = load i32, i32* %537
%539 = getelementptr inbounds i32, i32* %0, i64 %535
store i32 %538, i32* %539
%540 = getelementptr inbounds i32, i32* %3, i64 %536
%541 = load i32, i32* %540
%542 = add nsw i64 %535, 1
%543 = getelementptr inbounds i32, i32* %1, i64 %535
store i32 %541, i32* %543
%544 = add nsw i64 %536, 1
%545 = getelementptr inbounds i32, i32* %2, i64 %544
%546 = load i32, i32* %545
%547 = getelementptr inbounds i32, i32* %0, i64 %542
store i32 %546, i32* %547
%548 = getelementptr inbounds i32, i32* %3, i64 %544
%549 = load i32, i32* %548
%550 = add nsw i64 %535, 2
%551 = getelementptr inbounds i32, i32* %1, i64 %542
store i32 %549, i32* %551
%552 = add nsw i64 %536, 2
%553 = trunc i64 %552 to i32
%554 = icmp eq i32 %384, %553
br i1 %554, label %576, label %534
555: ; preds = %375, %555
%556 = phi i64 [ %571, %555 ], [ %376, %375 ]
%557 = phi i64 [ %573, %555 ], [ %377, %375 ]
%558 = getelementptr inbounds i32, i32* %2, i64 %557
%559 = load i32, i32* %558
%560 = getelementptr inbounds i32, i32* %0, i64 %556
store i32 %559, i32* %560
%561 = getelementptr inbounds i32, i32* %3, i64 %557
%562 = load i32, i32* %561
%563 = add nsw i64 %556, 1
%564 = getelementptr inbounds i32, i32* %1, i64 %556
store i32 %562, i32* %564
%565 = add nsw i64 %557, 1
%566 = getelementptr inbounds i32, i32* %2, i64 %565
%567 = load i32, i32* %566
%568 = getelementptr inbounds i32, i32* %0, i64 %563
store i32 %567, i32* %568
%569 = getelementptr inbounds i32, i32* %3, i64 %565
%570 = load i32, i32* %569
%571 = add nsw i64 %556, 2
%572 = getelementptr inbounds i32, i32* %1, i64 %563
store i32 %570, i32* %572
%573 = add nsw i64 %557, 2
%574 = trunc i64 %573 to i32
%575 = icmp eq i32 %9, %574
br i1 %575, label %576, label %555
576: ; preds = %375, %555, %530, %534, %356, %511, %379
ret void
}