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

/* Forward declarations */

/* Type definitions */
typedef int uint64_t;
typedef int /*<<< orphan*/ a;

/* Variables and functions */
int /*<<< orphan*/ test(int *, int);
void testmergesort(void) {
  {
    uint64_t a[] = {0};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {0, 1};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {1, 0};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {0, 1, 2};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {0, 2, 1};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {1, 0, 2};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {1, 2, 0};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {2, 1, 0};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    uint64_t a[] = {2, 0, 1};
    test(a, sizeof(a) / sizeof(a[0]));
  }
  {
    int i, j, k, l, n = 4;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
        if (j != i)
          for (k = 0; k < n; k++)
            if (k != i && k != j)
              for (l = 0; l < n; l++)
                if (l != i && l != j && l != k) {
                  uint64_t a[] = {i, j, k, l};
                  test(a, sizeof(a) / sizeof(a[0]));
                }
  }
  {
    int i, j, k, l, o, n = 5;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
        if (j != i)
          for (k = 0; k < n; k++)
            if (k != i && k != j)
              for (l = 0; l < n; l++)
                if (l != i && l != j && l != k)
                  for (o = 0; o < n; o++)
                    if (o != i && o != j && o != k && o != l) {
                      uint64_t a[] = {i, j, k, l, o};
                      test(a, sizeof(a) / sizeof(a[0]));
                    }
  }
  {
    int i, j, k, l, o, p, n = 6;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
        if (j != i)
          for (k = 0; k < n; k++)
            if (k != i && k != j)
              for (l = 0; l < n; l++)
                if (l != i && l != j && l != k)
                  for (o = 0; o < n; o++)
                    if (o != i && o != j && o != k && o != l)
                      for (p = 0; p < n; p++)
                        if (p != i && p != j && p != k && p != l && p != o) {
                          uint64_t a[] = {i, j, k, l, o, p};
                          test(a, sizeof(a) / sizeof(a[0]));
                        }
  }
  {
    int i, j, k, l, o, p, q, n = 7;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
        if (j != i)
          for (k = 0; k < n; k++)
            if (k != i && k != j)
              for (l = 0; l < n; l++)
                if (l != i && l != j && l != k)
                  for (o = 0; o < n; o++)
                    if (o != i && o != j && o != k && o != l)
                      for (p = 0; p < n; p++)
                        if (p != i && p != j && p != k && p != l && p != o)
                          for (q = 0; q < n; q++)
                            if (q != i && q != j && q != k && q != l &&
                                q != o && q != p) {
                              uint64_t a[] = {i, j, k, l, o, p, q};
                              test(a, sizeof(a) / sizeof(a[0]));
                            }
  }
}


x86 assembly (clang, -O0):
<testmergesort>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
lea    -0x4(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1030 <memset@plt>
lea    -0x4(%rbp),%rdi
mov    $0x1,%esi
call   1040 <test@plt>
mov    0xeb0(%rip),%rax
mov    %rax,-0xc(%rbp)
lea    -0xc(%rbp),%rdi
mov    $0x2,%esi
call   1040 <test@plt>
mov    0xeaf(%rip),%rax
mov    %rax,-0x14(%rbp)
lea    -0x14(%rbp),%rdi
mov    $0x2,%esi
call   1040 <test@plt>
mov    0xe9e(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xe9c(%rip),%eax
mov    %eax,-0x18(%rbp)
lea    -0x20(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
mov    0xe88(%rip),%rax
mov    %rax,-0x2c(%rbp)
mov    0xe86(%rip),%eax
mov    %eax,-0x24(%rbp)
lea    -0x2c(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
mov    0xe72(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    0xe70(%rip),%eax
mov    %eax,-0x30(%rbp)
lea    -0x38(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
mov    0xe20(%rip),%rax
mov    %rax,-0x44(%rbp)
mov    0xe1e(%rip),%eax
mov    %eax,-0x3c(%rbp)
lea    -0x44(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
mov    0xe0a(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xe08(%rip),%eax
mov    %eax,-0x48(%rbp)
lea    -0x50(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
mov    0xe18(%rip),%rax
mov    %rax,-0x5c(%rbp)
mov    0xe16(%rip),%eax
mov    %eax,-0x54(%rbp)
lea    -0x5c(%rbp),%rdi
mov    $0x3,%esi
call   1040 <test@plt>
movl   $0x4,-0x70(%rbp)
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x70(%rbp),%eax
jge    135e <testmergesort+0x23e>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x70(%rbp),%eax
jge    134b <testmergesort+0x22b>
mov    -0x64(%rbp),%eax
cmp    -0x60(%rbp),%eax
je     1338 <testmergesort+0x218>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x70(%rbp),%eax
jge    1333 <testmergesort+0x213>
mov    -0x68(%rbp),%eax
cmp    -0x60(%rbp),%eax
je     1320 <testmergesort+0x200>
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
je     1320 <testmergesort+0x200>
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x70(%rbp),%eax
jge    131b <testmergesort+0x1fb>
mov    -0x6c(%rbp),%eax
cmp    -0x60(%rbp),%eax
je     1308 <testmergesort+0x1e8>
mov    -0x6c(%rbp),%eax
cmp    -0x64(%rbp),%eax
je     1308 <testmergesort+0x1e8>
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
je     1308 <testmergesort+0x1e8>
mov    -0x60(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x74(%rbp)
lea    -0x80(%rbp),%rdi
mov    $0x4,%esi
call   1040 <test@plt>
jmp    130d <testmergesort+0x1ed>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    12b2 <testmergesort+0x192>
jmp    1320 <testmergesort+0x200>
jmp    1325 <testmergesort+0x205>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1287 <testmergesort+0x167>
jmp    1338 <testmergesort+0x218>
jmp    133d <testmergesort+0x21d>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1268 <testmergesort+0x148>
jmp    1350 <testmergesort+0x230>
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1255 <testmergesort+0x135>
movl   $0x5,-0x98(%rbp)
movl   $0x0,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    -0x98(%rbp),%eax
jge    1581 <testmergesort+0x461>
movl   $0x0,-0x88(%rbp)
mov    -0x88(%rbp),%eax
cmp    -0x98(%rbp),%eax
jge    1568 <testmergesort+0x448>
mov    -0x88(%rbp),%eax
cmp    -0x84(%rbp),%eax
je     154f <testmergesort+0x42f>
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x98(%rbp),%eax
jge    154a <testmergesort+0x42a>
mov    -0x8c(%rbp),%eax
cmp    -0x84(%rbp),%eax
je     1531 <testmergesort+0x411>
mov    -0x8c(%rbp),%eax
cmp    -0x88(%rbp),%eax
je     1531 <testmergesort+0x411>
movl   $0x0,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x98(%rbp),%eax
jge    152c <testmergesort+0x40c>
mov    -0x90(%rbp),%eax
cmp    -0x84(%rbp),%eax
je     1513 <testmergesort+0x3f3>
mov    -0x90(%rbp),%eax
cmp    -0x88(%rbp),%eax
je     1513 <testmergesort+0x3f3>
mov    -0x90(%rbp),%eax
cmp    -0x8c(%rbp),%eax
je     1513 <testmergesort+0x3f3>
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0x98(%rbp),%eax
jge    150e <testmergesort+0x3ee>
mov    -0x94(%rbp),%eax
cmp    -0x84(%rbp),%eax
je     14f5 <testmergesort+0x3d5>
mov    -0x94(%rbp),%eax
cmp    -0x88(%rbp),%eax
je     14f5 <testmergesort+0x3d5>
mov    -0x94(%rbp),%eax
cmp    -0x8c(%rbp),%eax
je     14f5 <testmergesort+0x3d5>
mov    -0x94(%rbp),%eax
cmp    -0x90(%rbp),%eax
je     14f5 <testmergesort+0x3d5>
mov    -0x84(%rbp),%eax
mov    %eax,-0xb0(%rbp)
mov    -0x88(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0xa8(%rbp)
mov    -0x90(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,-0xa0(%rbp)
lea    -0xb0(%rbp),%rdi
mov    $0x5,%esi
call   1040 <test@plt>
jmp    14fa <testmergesort+0x3da>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    144e <testmergesort+0x32e>
jmp    1513 <testmergesort+0x3f3>
jmp    1518 <testmergesort+0x3f8>
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    13fc <testmergesort+0x2dc>
jmp    1531 <testmergesort+0x411>
jmp    1536 <testmergesort+0x416>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    13bc <testmergesort+0x29c>
jmp    154f <testmergesort+0x42f>
jmp    1554 <testmergesort+0x434>
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    138e <testmergesort+0x26e>
jmp    156d <testmergesort+0x44d>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    1372 <testmergesort+0x252>
movl   $0x6,-0xcc(%rbp)
movl   $0x0,-0xb4(%rbp)
mov    -0xb4(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    1844 <testmergesort+0x724>
movl   $0x0,-0xb8(%rbp)
mov    -0xb8(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    182b <testmergesort+0x70b>
mov    -0xb8(%rbp),%eax
cmp    -0xb4(%rbp),%eax
je     1812 <testmergesort+0x6f2>
movl   $0x0,-0xbc(%rbp)
mov    -0xbc(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    180d <testmergesort+0x6ed>
mov    -0xbc(%rbp),%eax
cmp    -0xb4(%rbp),%eax
je     17f4 <testmergesort+0x6d4>
mov    -0xbc(%rbp),%eax
cmp    -0xb8(%rbp),%eax
je     17f4 <testmergesort+0x6d4>
movl   $0x0,-0xc0(%rbp)
mov    -0xc0(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    17ef <testmergesort+0x6cf>
mov    -0xc0(%rbp),%eax
cmp    -0xb4(%rbp),%eax
je     17d6 <testmergesort+0x6b6>
mov    -0xc0(%rbp),%eax
cmp    -0xb8(%rbp),%eax
je     17d6 <testmergesort+0x6b6>
mov    -0xc0(%rbp),%eax
cmp    -0xbc(%rbp),%eax
je     17d6 <testmergesort+0x6b6>
movl   $0x0,-0xc4(%rbp)
mov    -0xc4(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    17d1 <testmergesort+0x6b1>
mov    -0xc4(%rbp),%eax
cmp    -0xb4(%rbp),%eax
je     17b8 <testmergesort+0x698>
mov    -0xc4(%rbp),%eax
cmp    -0xb8(%rbp),%eax
je     17b8 <testmergesort+0x698>
mov    -0xc4(%rbp),%eax
cmp    -0xbc(%rbp),%eax
je     17b8 <testmergesort+0x698>
mov    -0xc4(%rbp),%eax
cmp    -0xc0(%rbp),%eax
je     17b8 <testmergesort+0x698>
movl   $0x0,-0xc8(%rbp)
mov    -0xc8(%rbp),%eax
cmp    -0xcc(%rbp),%eax
jge    17b3 <testmergesort+0x693>
mov    -0xc8(%rbp),%eax
cmp    -0xb4(%rbp),%eax
je     179a <testmergesort+0x67a>
mov    -0xc8(%rbp),%eax
cmp    -0xb8(%rbp),%eax
je     179a <testmergesort+0x67a>
mov    -0xc8(%rbp),%eax
cmp    -0xbc(%rbp),%eax
je     179a <testmergesort+0x67a>
mov    -0xc8(%rbp),%eax
cmp    -0xc0(%rbp),%eax
je     179a <testmergesort+0x67a>
mov    -0xc8(%rbp),%eax
cmp    -0xc4(%rbp),%eax
je     179a <testmergesort+0x67a>
mov    -0xb4(%rbp),%eax
mov    %eax,-0xf0(%rbp)
mov    -0xb8(%rbp),%eax
mov    %eax,-0xec(%rbp)
mov    -0xbc(%rbp),%eax
mov    %eax,-0xe8(%rbp)
mov    -0xc0(%rbp),%eax
mov    %eax,-0xe4(%rbp)
mov    -0xc4(%rbp),%eax
mov    %eax,-0xe0(%rbp)
mov    -0xc8(%rbp),%eax
mov    %eax,-0xdc(%rbp)
lea    -0xf0(%rbp),%rdi
mov    $0x6,%esi
call   1040 <test@plt>
jmp    179f <testmergesort+0x67f>
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    16d5 <testmergesort+0x5b5>
jmp    17b8 <testmergesort+0x698>
jmp    17bd <testmergesort+0x69d>
mov    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    1671 <testmergesort+0x551>
jmp    17d6 <testmergesort+0x6b6>
jmp    17db <testmergesort+0x6bb>
mov    -0xc0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc0(%rbp)
jmp    161f <testmergesort+0x4ff>
jmp    17f4 <testmergesort+0x6d4>
jmp    17f9 <testmergesort+0x6d9>
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    15df <testmergesort+0x4bf>
jmp    1812 <testmergesort+0x6f2>
jmp    1817 <testmergesort+0x6f7>
mov    -0xb8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb8(%rbp)
jmp    15b1 <testmergesort+0x491>
jmp    1830 <testmergesort+0x710>
mov    -0xb4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xb4(%rbp)
jmp    1595 <testmergesort+0x475>
movl   $0x7,-0x110(%rbp)
movl   $0x0,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1bb9 <testmergesort+0xa99>
movl   $0x0,-0xf8(%rbp)
mov    -0xf8(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1ba0 <testmergesort+0xa80>
mov    -0xf8(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1b87 <testmergesort+0xa67>
movl   $0x0,-0xfc(%rbp)
mov    -0xfc(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1b82 <testmergesort+0xa62>
mov    -0xfc(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1b69 <testmergesort+0xa49>
mov    -0xfc(%rbp),%eax
cmp    -0xf8(%rbp),%eax
je     1b69 <testmergesort+0xa49>
movl   $0x0,-0x100(%rbp)
mov    -0x100(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1b64 <testmergesort+0xa44>
mov    -0x100(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1b4b <testmergesort+0xa2b>
mov    -0x100(%rbp),%eax
cmp    -0xf8(%rbp),%eax
je     1b4b <testmergesort+0xa2b>
mov    -0x100(%rbp),%eax
cmp    -0xfc(%rbp),%eax
je     1b4b <testmergesort+0xa2b>
movl   $0x0,-0x104(%rbp)
mov    -0x104(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1b46 <testmergesort+0xa26>
mov    -0x104(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1b2d <testmergesort+0xa0d>
mov    -0x104(%rbp),%eax
cmp    -0xf8(%rbp),%eax
je     1b2d <testmergesort+0xa0d>
mov    -0x104(%rbp),%eax
cmp    -0xfc(%rbp),%eax
je     1b2d <testmergesort+0xa0d>
mov    -0x104(%rbp),%eax
cmp    -0x100(%rbp),%eax
je     1b2d <testmergesort+0xa0d>
movl   $0x0,-0x108(%rbp)
mov    -0x108(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1b28 <testmergesort+0xa08>
mov    -0x108(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1b0f <testmergesort+0x9ef>
mov    -0x108(%rbp),%eax
cmp    -0xf8(%rbp),%eax
je     1b0f <testmergesort+0x9ef>
mov    -0x108(%rbp),%eax
cmp    -0xfc(%rbp),%eax
je     1b0f <testmergesort+0x9ef>
mov    -0x108(%rbp),%eax
cmp    -0x100(%rbp),%eax
je     1b0f <testmergesort+0x9ef>
mov    -0x108(%rbp),%eax
cmp    -0x104(%rbp),%eax
je     1b0f <testmergesort+0x9ef>
movl   $0x0,-0x10c(%rbp)
mov    -0x10c(%rbp),%eax
cmp    -0x110(%rbp),%eax
jge    1b0a <testmergesort+0x9ea>
mov    -0x10c(%rbp),%eax
cmp    -0xf4(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0x10c(%rbp),%eax
cmp    -0xf8(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0x10c(%rbp),%eax
cmp    -0xfc(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0x10c(%rbp),%eax
cmp    -0x100(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0x10c(%rbp),%eax
cmp    -0x104(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0x10c(%rbp),%eax
cmp    -0x108(%rbp),%eax
je     1af1 <testmergesort+0x9d1>
mov    -0xf4(%rbp),%eax
mov    %eax,-0x130(%rbp)
mov    -0xf8(%rbp),%eax
mov    %eax,-0x12c(%rbp)
mov    -0xfc(%rbp),%eax
mov    %eax,-0x128(%rbp)
mov    -0x100(%rbp),%eax
mov    %eax,-0x124(%rbp)
mov    -0x104(%rbp),%eax
mov    %eax,-0x120(%rbp)
mov    -0x108(%rbp),%eax
mov    %eax,-0x11c(%rbp)
mov    -0x10c(%rbp),%eax
mov    %eax,-0x118(%rbp)
lea    -0x130(%rbp),%rdi
mov    $0x7,%esi
call   1040 <test@plt>
jmp    1af6 <testmergesort+0x9d6>
mov    -0x10c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10c(%rbp)
jmp    1a0e <testmergesort+0x8ee>
jmp    1b0f <testmergesort+0x9ef>
jmp    1b14 <testmergesort+0x9f4>
mov    -0x108(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x108(%rbp)
jmp    1998 <testmergesort+0x878>
jmp    1b2d <testmergesort+0xa0d>
jmp    1b32 <testmergesort+0xa12>
mov    -0x104(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x104(%rbp)
jmp    1934 <testmergesort+0x814>
jmp    1b4b <testmergesort+0xa2b>
jmp    1b50 <testmergesort+0xa30>
mov    -0x100(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x100(%rbp)
jmp    18e2 <testmergesort+0x7c2>
jmp    1b69 <testmergesort+0xa49>
jmp    1b6e <testmergesort+0xa4e>
mov    -0xfc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xfc(%rbp)
jmp    18a2 <testmergesort+0x782>
jmp    1b87 <testmergesort+0xa67>
jmp    1b8c <testmergesort+0xa6c>
mov    -0xf8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xf8(%rbp)
jmp    1874 <testmergesort+0x754>
jmp    1ba5 <testmergesort+0xa85>
mov    -0xf4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xf4(%rbp)
jmp    1858 <testmergesort+0x738>
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<testmergesort>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
movl   $0x0,(%rsp)
mov    %rsp,%rdi
mov    $0x1,%esi
call   1030 <test@plt>
movabs $0x100000000,%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x2,%esi
call   1030 <test@plt>
movq   $0x1,(%rsp)
mov    %rsp,%rdi
mov    $0x2,%esi
call   1030 <test@plt>
mov    0xea0(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe8d(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
mov    0xe8a(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe77(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
mov    0xe74(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe61(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
mov    0xe6a(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe57(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
mov    0xe54(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe41(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
mov    0xe1a(%rip),%eax
mov    %eax,0x8(%rsp)
mov    0xe07(%rip),%rax
mov    %rax,(%rsp)
mov    %rsp,%rdi
mov    $0x3,%esi
call   1030 <test@plt>
xor    %ebp,%ebp
jmp    124c <testmergesort+0x13c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%ebp
cmp    $0x4,%ebp
je     1381 <testmergesort+0x271>
xor    %ebx,%ebx
jmp    1258 <testmergesort+0x148>
add    $0x1,%ebx
cmp    $0x4,%ebx
je     1240 <testmergesort+0x130>
cmp    %ebp,%ebx
je     1250 <testmergesort+0x140>
cmp    $0x3,%ebp
sete   %sil
cmp    $0x2,%ebp
sete   %dil
cmp    $0x1,%ebp
sete   %dl
test   %ebp,%ebp
sete   %al
test   %ebx,%ebx
sete   %cl
or     %al,%cl
mov    %cl,0x28(%rsp)
cmp    $0x1,%ebx
sete   %r12b
or     %dl,%r12b
cmp    $0x2,%ebx
sete   %r13b
or     %dil,%r13b
cmp    $0x3,%ebx
sete   %r14b
or     %sil,%r14b
xor    %r15d,%r15d
jmp    12ba <testmergesort+0x1aa>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r15d
cmp    $0x4,%r15d
je     1250 <testmergesort+0x140>
cmp    %r15d,%ebp
je     12b0 <testmergesort+0x1a0>
cmp    %r15d,%ebx
je     12b0 <testmergesort+0x1a0>
test   %r15d,%r15d
sete   %al
or     0x28(%rsp),%al
jne    12f1 <testmergesort+0x1e1>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
movl   $0x0,0xc(%rsp)
mov    %rsp,%rdi
mov    $0x4,%esi
call   1030 <test@plt>
cmp    $0x1,%r15d
sete   %al
or     %r12b,%al
jne    131e <testmergesort+0x20e>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
movl   $0x1,0xc(%rsp)
mov    %rsp,%rdi
mov    $0x4,%esi
call   1030 <test@plt>
cmp    $0x2,%r15d
sete   %al
or     %r13b,%al
jne    134b <testmergesort+0x23b>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
movl   $0x2,0xc(%rsp)
mov    %rsp,%rdi
mov    $0x4,%esi
call   1030 <test@plt>
cmp    $0x3,%r15d
sete   %al
or     %r14b,%al
jne    12b0 <testmergesort+0x1a0>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
movl   $0x3,0xc(%rsp)
mov    %rsp,%rdi
mov    $0x4,%esi
call   1030 <test@plt>
jmp    12b0 <testmergesort+0x1a0>
xor    %ebp,%ebp
jmp    139c <testmergesort+0x28c>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%ebp
cmp    $0x5,%ebp
je     158e <testmergesort+0x47e>
xor    %ebx,%ebx
jmp    13a8 <testmergesort+0x298>
add    $0x1,%ebx
cmp    $0x5,%ebx
je     1390 <testmergesort+0x280>
cmp    %ebp,%ebx
je     13a0 <testmergesort+0x290>
cmp    $0x4,%ebp
sete   %sil
cmp    $0x3,%ebp
sete   %dil
cmp    $0x2,%ebp
sete   %r8b
cmp    $0x1,%ebp
sete   %al
test   %ebp,%ebp
sete   %cl
test   %ebx,%ebx
sete   %dl
or     %cl,%dl
mov    %dl,0x25(%rsp)
cmp    $0x1,%ebx
sete   %cl
or     %al,%cl
mov    %cl,0x24(%rsp)
cmp    $0x2,%ebx
sete   %al
or     %r8b,%al
mov    %al,0x23(%rsp)
cmp    $0x3,%ebx
sete   %al
or     %dil,%al
mov    %al,0x22(%rsp)
cmp    $0x4,%ebx
sete   %al
or     %sil,%al
mov    %al,0x21(%rsp)
xor    %r13d,%r13d
jmp    141a <testmergesort+0x30a>
nop
add    $0x1,%r13d
cmp    $0x5,%r13d
je     13a0 <testmergesort+0x290>
cmp    %ebp,%r13d
je     1410 <testmergesort+0x300>
cmp    %ebx,%r13d
je     1410 <testmergesort+0x300>
test   %r13d,%r13d
sete   %al
or     0x25(%rsp),%al
mov    %al,0x28(%rsp)
cmp    $0x1,%r13d
sete   %al
or     0x24(%rsp),%al
mov    %al,0x27(%rsp)
cmp    $0x2,%r13d
sete   %al
or     0x23(%rsp),%al
mov    %al,0x26(%rsp)
cmp    $0x3,%r13d
sete   %r15b
or     0x22(%rsp),%r15b
cmp    $0x4,%r13d
sete   %r12b
or     0x21(%rsp),%r12b
xor    %r14d,%r14d
jmp    147a <testmergesort+0x36a>
nop
add    $0x1,%r14d
cmp    $0x5,%r14d
je     1410 <testmergesort+0x300>
cmp    %r14d,%ebp
je     1470 <testmergesort+0x360>
cmp    %r14d,%ebx
je     1470 <testmergesort+0x360>
cmp    %r14d,%r13d
je     1470 <testmergesort+0x360>
test   %r14d,%r14d
sete   %al
or     0x28(%rsp),%al
jne    14bb <testmergesort+0x3ab>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r13d,0x8(%rsp)
mov    %r14d,0xc(%rsp)
movl   $0x0,0x10(%rsp)
mov    %rsp,%rdi
mov    $0x5,%esi
call   1030 <test@plt>
cmp    $0x1,%r14d
sete   %al
or     0x27(%rsp),%al
jne    14ee <testmergesort+0x3de>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r13d,0x8(%rsp)
mov    %r14d,0xc(%rsp)
movl   $0x1,0x10(%rsp)
mov    %rsp,%rdi
mov    $0x5,%esi
call   1030 <test@plt>
cmp    $0x2,%r14d
sete   %al
or     0x26(%rsp),%al
jne    1521 <testmergesort+0x411>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r13d,0x8(%rsp)
mov    %r14d,0xc(%rsp)
movl   $0x2,0x10(%rsp)
mov    %rsp,%rdi
mov    $0x5,%esi
call   1030 <test@plt>
cmp    $0x3,%r14d
sete   %al
or     %r15b,%al
jne    1553 <testmergesort+0x443>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r13d,0x8(%rsp)
mov    %r14d,0xc(%rsp)
movl   $0x3,0x10(%rsp)
mov    %rsp,%rdi
mov    $0x5,%esi
call   1030 <test@plt>
cmp    $0x4,%r14d
sete   %al
or     %r12b,%al
jne    1470 <testmergesort+0x360>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r13d,0x8(%rsp)
mov    %r14d,0xc(%rsp)
movl   $0x4,0x10(%rsp)
mov    %rsp,%rdi
mov    $0x5,%esi
call   1030 <test@plt>
jmp    1470 <testmergesort+0x360>
xor    %ebp,%ebp
jmp    15ac <testmergesort+0x49c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%ebp
cmp    $0x6,%ebp
je     18b9 <testmergesort+0x7a9>
xor    %ebx,%ebx
jmp    15b8 <testmergesort+0x4a8>
add    $0x1,%ebx
cmp    $0x6,%ebx
je     15a0 <testmergesort+0x490>
cmp    %ebp,%ebx
je     15b0 <testmergesort+0x4a0>
cmp    $0x5,%ebp
sete   %sil
cmp    $0x4,%ebp
sete   %dil
cmp    $0x3,%ebp
sete   %r8b
cmp    $0x2,%ebp
sete   %r9b
cmp    $0x1,%ebp
sete   %cl
test   %ebp,%ebp
sete   %dl
test   %ebx,%ebx
sete   %al
or     %dl,%al
mov    %al,0x34(%rsp)
cmp    $0x1,%ebx
sete   %al
or     %cl,%al
mov    %al,0x33(%rsp)
cmp    $0x2,%ebx
sete   %al
or     %r9b,%al
mov    %al,0x32(%rsp)
cmp    $0x3,%ebx
sete   %al
or     %r8b,%al
mov    %al,0x31(%rsp)
cmp    $0x4,%ebx
sete   %al
or     %dil,%al
mov    %al,0x30(%rsp)
cmp    $0x5,%ebx
sete   %al
or     %sil,%al
mov    %al,0x2f(%rsp)
xor    %r15d,%r15d
jmp    164e <testmergesort+0x53e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r15d
cmp    $0x6,%r15d
je     15b0 <testmergesort+0x4a0>
cmp    %ebp,%r15d
je     1640 <testmergesort+0x530>
cmp    %ebx,%r15d
je     1640 <testmergesort+0x530>
test   %r15d,%r15d
sete   %al
or     0x34(%rsp),%al
mov    %al,0x23(%rsp)
cmp    $0x1,%r15d
sete   %al
or     0x33(%rsp),%al
mov    %al,0x22(%rsp)
cmp    $0x2,%r15d
sete   %al
or     0x32(%rsp),%al
mov    %al,0x21(%rsp)
cmp    $0x3,%r15d
sete   %al
or     0x31(%rsp),%al
mov    %al,0x37(%rsp)
cmp    $0x4,%r15d
sete   %al
or     0x30(%rsp),%al
mov    %al,0x36(%rsp)
cmp    $0x5,%r15d
sete   %al
or     0x2f(%rsp),%al
mov    %al,0x35(%rsp)
xor    %r12d,%r12d
jmp    16ce <testmergesort+0x5be>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r12d
cmp    $0x6,%r12d
je     1640 <testmergesort+0x530>
cmp    %ebp,%r12d
je     16c0 <testmergesort+0x5b0>
cmp    %ebx,%r12d
je     16c0 <testmergesort+0x5b0>
cmp    %r15d,%r12d
je     16c0 <testmergesort+0x5b0>
test   %r12d,%r12d
sete   %al
or     0x23(%rsp),%al
mov    %al,0x28(%rsp)
cmp    $0x1,%r12d
sete   %al
or     0x22(%rsp),%al
mov    %al,0x27(%rsp)
cmp    $0x2,%r12d
sete   %al
or     0x21(%rsp),%al
mov    %al,0x26(%rsp)
cmp    $0x3,%r12d
sete   %al
or     0x37(%rsp),%al
mov    %al,0x25(%rsp)
cmp    $0x4,%r12d
sete   %al
or     0x36(%rsp),%al
mov    %al,0x24(%rsp)
cmp    $0x5,%r12d
sete   %r14b
or     0x35(%rsp),%r14b
xor    %r13d,%r13d
jmp    174e <testmergesort+0x63e>
nopl   0x0(%rax)
add    $0x1,%r13d
cmp    $0x6,%r13d
je     16c0 <testmergesort+0x5b0>
cmp    %r13d,%ebp
je     1740 <testmergesort+0x630>
cmp    %r13d,%ebx
je     1740 <testmergesort+0x630>
cmp    %r13d,%r15d
je     1740 <testmergesort+0x630>
cmp    %r13d,%r12d
je     1740 <testmergesort+0x630>
test   %r13d,%r13d
sete   %al
or     0x28(%rsp),%al
jne    1799 <testmergesort+0x689>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x0,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
cmp    $0x1,%r13d
sete   %al
or     0x27(%rsp),%al
jne    17d1 <testmergesort+0x6c1>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x1,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
cmp    $0x2,%r13d
sete   %al
or     0x26(%rsp),%al
jne    1809 <testmergesort+0x6f9>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x2,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
cmp    $0x3,%r13d
sete   %al
or     0x25(%rsp),%al
jne    1841 <testmergesort+0x731>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x3,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
cmp    $0x4,%r13d
sete   %al
or     0x24(%rsp),%al
jne    1879 <testmergesort+0x769>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x4,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
cmp    $0x5,%r13d
sete   %al
or     %r14b,%al
jne    1740 <testmergesort+0x630>
mov    %ebp,(%rsp)
mov    %ebx,0x4(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r12d,0xc(%rsp)
mov    %r13d,0x10(%rsp)
movl   $0x5,0x14(%rsp)
mov    %rsp,%rdi
mov    $0x6,%esi
call   1030 <test@plt>
jmp    1740 <testmergesort+0x630>
xor    %r12d,%r12d
jmp    18ce <testmergesort+0x7be>
xchg   %ax,%ax
add    $0x1,%r12d
cmp    $0x7,%r12d
je     19fa <testmergesort+0x8ea>
xor    %r13d,%r13d
jmp    18ea <testmergesort+0x7da>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r13d
cmp    $0x7,%r13d
je     18c0 <testmergesort+0x7b0>
cmp    %r12d,%r13d
je     18e0 <testmergesort+0x7d0>
xor    %ebx,%ebx
jmp    1908 <testmergesort+0x7f8>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%ebx
cmp    $0x7,%ebx
je     18e0 <testmergesort+0x7d0>
cmp    %r12d,%ebx
je     1900 <testmergesort+0x7f0>
cmp    %r13d,%ebx
je     1900 <testmergesort+0x7f0>
xor    %ebp,%ebp
jmp    1928 <testmergesort+0x818>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%ebp
cmp    $0x7,%ebp
je     1900 <testmergesort+0x7f0>
cmp    %r12d,%ebp
je     1920 <testmergesort+0x810>
cmp    %r13d,%ebp
je     1920 <testmergesort+0x810>
cmp    %ebx,%ebp
je     1920 <testmergesort+0x810>
xor    %edi,%edi
jmp    1948 <testmergesort+0x838>
nopw   0x0(%rax,%rax,1)
add    $0x1,%edi
cmp    $0x7,%edi
je     1920 <testmergesort+0x810>
cmp    %r12d,%edi
je     1940 <testmergesort+0x830>
cmp    %r13d,%edi
je     1940 <testmergesort+0x830>
cmp    %ebx,%edi
je     1940 <testmergesort+0x830>
cmp    %ebp,%edi
je     1940 <testmergesort+0x830>
xor    %r14d,%r14d
mov    %edi,0x28(%rsp)
jmp    197a <testmergesort+0x86a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r14d
cmp    $0x7,%r14d
je     1940 <testmergesort+0x830>
cmp    %r12d,%r14d
je     1970 <testmergesort+0x860>
cmp    %r13d,%r14d
je     1970 <testmergesort+0x860>
cmp    %ebx,%r14d
je     1970 <testmergesort+0x860>
cmp    %ebp,%r14d
je     1970 <testmergesort+0x860>
cmp    %edi,%r14d
je     1970 <testmergesort+0x860>
xor    %r15d,%r15d
jmp    19aa <testmergesort+0x89a>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15d
cmp    $0x7,%r15d
je     1970 <testmergesort+0x860>
cmp    %r15d,%r12d
je     19a0 <testmergesort+0x890>
cmp    %r15d,%r13d
je     19a0 <testmergesort+0x890>
cmp    %r15d,%ebx
je     19a0 <testmergesort+0x890>
cmp    %r15d,%ebp
je     19a0 <testmergesort+0x890>
cmp    %r15d,%edi
je     19a0 <testmergesort+0x890>
cmp    %r15d,%r14d
je     19a0 <testmergesort+0x890>
mov    %r12d,(%rsp)
mov    %r13d,0x4(%rsp)
mov    %ebx,0x8(%rsp)
mov    %ebp,0xc(%rsp)
mov    %edi,0x10(%rsp)
mov    %r14d,0x14(%rsp)
mov    %r15d,0x18(%rsp)
mov    %rsp,%rdi
mov    $0x7,%esi
call   1030 <test@plt>
mov    0x28(%rsp),%edi
jmp    19a0 <testmergesort+0x890>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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