#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 scalar_t__ clock_t;

/* Variables and functions */
int /*<<< orphan*/ BubbleSort(int *, int);
double CLOCKS_PER_SEC;
int /*<<< orphan*/ Check(int *, int *, int);
int /*<<< orphan*/ FillWithRandomInts(int *, int *, int);
int /*<<< orphan*/ InsertionSort(int *, int);
int /*<<< orphan*/ QuickSort(int *, int);
int /*<<< orphan*/ SelectionSort(int *, int);
int /*<<< orphan*/ _BubbleSort(int *, int);
int /*<<< orphan*/ _InsertionSort(int *, int);
int /*<<< orphan*/ _QuickSort(int *, int);
int /*<<< orphan*/ _SelectionSort(int *, int);
scalar_t__ clock();
int /*<<< orphan*/ printf(char *, ...);
int main() {
  int arr1[10000], arr2[10000], arr3[10000], arr4[10000], arr5[10000],
      arr6[10000], arr7[10000], arr8[10000];
  clock_t start = 0, end = 0;
  double times[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  FillWithRandomInts(arr1, arr5, 10000);
  FillWithRandomInts(arr2, arr6, 10000);
  FillWithRandomInts(arr3, arr7, 10000);
  FillWithRandomInts(arr4, arr8, 10000);
  start = clock();
  BubbleSort(arr1, 10000);
  end = clock();
  times[0] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  SelectionSort(arr2, 10000);
  end = clock();
  times[1] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  QuickSort(arr3, 10000);
  end = clock();
  times[2] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  InsertionSort(arr4, 10000);
  end = clock();
  times[3] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  _BubbleSort(arr5, 10000);
  end = clock();
  times[4] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  _SelectionSort(arr6, 10000);
  end = clock();
  times[5] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  _QuickSort(arr7, 10000);
  end = clock();
  times[6] = ((double)(end - start)) / CLOCKS_PER_SEC;
  start = clock();
  _InsertionSort(arr8, 10000);
  end = clock();
  times[7] = ((double)(end - start)) / CLOCKS_PER_SEC;
  if (!Check(arr1, arr5, 10000)) {
    printf("\nArrays were properly sorted and ");
    if (times[0] <= times[4])
      printf("I won the BubbleSort by %f seconds\n", (times[4] - times[0]));
    else
      printf("I lost the BubbleSort by %f seconds :o(\n",
             (times[0] - times[4]));
    printf("The times were %f seconds for my sort and %f seconds for the C "
           "sort\n\n",
           times[0], times[4]);
  } else
    printf("Something went horribly wrong oh no!\n");
  if (!Check(arr2, arr6, 10000)) {
    printf("\nArrays were properly sorted and ");
    if (times[1] <= times[5])
      printf("I won the SelectionSort by %f seconds\n", (times[5] - times[1]));
    else
      printf("I lost the SelectionSort by %f seconds :o(\n",
             (times[1] - times[5]));
    printf("The times were %f seconds for my sort and %f seconds for the C "
           "sort\n\n",
           times[1], times[5]);
  } else
    printf("Something went horribly wrong oh no!\n");
  if (!Check(arr3, arr7, 10000)) {
    printf("\nArrays were properly sorted and ");
    if (times[2] <= times[6])
      printf("I won the QuickSort by %f seconds\n", (times[6] - times[2]));
    else
      printf("I lost the QuickSort by %f seconds :o(\n", (times[2] - times[6]));
    printf("The times were %f seconds for my sort and %f seconds for the C "
           "sort\n\n",
           times[2], times[6]);
  } else
    printf("Something went horribly wrong oh no!\n");
  if (!Check(arr4, arr8, 10000)) {
    printf("\nArrays were properly sorted and ");
    if (times[3] <= times[7])
      printf("I won the InsertionSort by %f seconds\n", (times[7] - times[3]));
    else
      printf("I lost the InsertionSort by %f seconds :o(\n",
             (times[3] - times[7]));
    printf("The times were %f seconds for my sort and %f seconds for the C "
           "sort\n\n",
           times[3], times[7]);
  } else
    printf("Something went horribly wrong oh no!\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x4e260,%rsp
movl   $0x0,-0x4(%rbp)
movq   $0x0,-0x4e218(%rbp)
movq   $0x0,-0x4e220(%rbp)
lea    -0x4e260(%rbp),%rdi
xor    %esi,%esi
mov    $0x40,%edx
call   1070 <memset@plt>
lea    -0x9c50(%rbp),%rdi
lea    -0x30d50(%rbp),%rsi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    -0x13890(%rbp),%rdi
lea    -0x3a990(%rbp),%rsi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    -0x1d4d0(%rbp),%rdi
lea    -0x445d0(%rbp),%rsi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    -0x27110(%rbp),%rdi
lea    -0x4e210(%rbp),%rsi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x9c50(%rbp),%rdi
mov    $0x2710,%esi
call   10e0 <BubbleSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2d36(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e260(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x13890(%rbp),%rdi
mov    $0x2710,%esi
call   1040 <SelectionSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2ce3(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e258(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x1d4d0(%rbp),%rdi
mov    $0x2710,%esi
call   10c0 <QuickSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2c90(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e250(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x27110(%rbp),%rdi
mov    $0x2710,%esi
call   1080 <InsertionSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2c3d(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e248(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x30d50(%rbp),%rdi
mov    $0x2710,%esi
call   1050 <_BubbleSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2bea(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e240(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x3a990(%rbp),%rdi
mov    $0x2710,%esi
call   1090 <_SelectionSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2b97(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e238(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x445d0(%rbp),%rdi
mov    $0x2710,%esi
call   10d0 <_QuickSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2b44(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e230(%rbp)
ff
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e218(%rbp)
lea    -0x4e210(%rbp),%rdi
mov    $0x2710,%esi
call   10b0 <_InsertionSort@plt>
mov    $0x0,%al
call   1030 <clock@plt>
mov    %rax,-0x4e220(%rbp)
mov    -0x4e220(%rbp),%rax
sub    -0x4e218(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2af1(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x4e228(%rbp)
ff
lea    -0x9c50(%rbp),%rdi
lea    -0x30d50(%rbp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
cmp    $0x0,%eax
jne    15b0 <main+0x3e0>
lea    0xad5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  -0x4e260(%rbp),%xmm1
ff
movsd  -0x4e240(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     156f <main+0x39f>
movsd  -0x4e240(%rbp),%xmm0
ff
subsd  -0x4e260(%rbp),%xmm0
ff
lea    0xabf(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
jmp    158d <main+0x3bd>
movsd  -0x4e260(%rbp),%xmm0
ff
subsd  -0x4e240(%rbp),%xmm0
ff
lea    0xac0(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0x4e260(%rbp),%xmm0
ff
movsd  -0x4e240(%rbp),%xmm1
ff
lea    0xacb(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
jmp    15be <main+0x3ee>
lea    0xafe(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x13890(%rbp),%rdi
lea    -0x3a990(%rbp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
cmp    $0x0,%eax
jne    166b <main+0x49b>
lea    0xa1a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  -0x4e258(%rbp),%xmm1
ff
movsd  -0x4e238(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     162a <main+0x45a>
movsd  -0x4e238(%rbp),%xmm0
ff
subsd  -0x4e258(%rbp),%xmm0
ff
lea    0xabd(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
jmp    1648 <main+0x478>
movsd  -0x4e258(%rbp),%xmm0
ff
subsd  -0x4e238(%rbp),%xmm0
ff
lea    0xac1(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0x4e258(%rbp),%xmm0
ff
movsd  -0x4e238(%rbp),%xmm1
ff
lea    0xa10(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
jmp    1679 <main+0x4a9>
lea    0xa43(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x1d4d0(%rbp),%rdi
lea    -0x445d0(%rbp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
cmp    $0x0,%eax
jne    1726 <main+0x556>
lea    0x95f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  -0x4e250(%rbp),%xmm1
ff
movsd  -0x4e230(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     16e5 <main+0x515>
movsd  -0x4e230(%rbp),%xmm0
ff
subsd  -0x4e250(%rbp),%xmm0
ff
lea    0xa55(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
jmp    1703 <main+0x533>
movsd  -0x4e250(%rbp),%xmm0
ff
subsd  -0x4e230(%rbp),%xmm0
ff
lea    0xa55(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0x4e250(%rbp),%xmm0
ff
movsd  -0x4e230(%rbp),%xmm1
ff
lea    0x955(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
jmp    1734 <main+0x564>
lea    0x988(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0x27110(%rbp),%rdi
lea    -0x4e210(%rbp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
cmp    $0x0,%eax
jne    17e1 <main+0x611>
lea    0x8a4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movsd  -0x4e248(%rbp),%xmm1
ff
movsd  -0x4e228(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     17a0 <main+0x5d0>
movsd  -0x4e228(%rbp),%xmm0
ff
subsd  -0x4e248(%rbp),%xmm0
ff
lea    0x9e5(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
jmp    17be <main+0x5ee>
movsd  -0x4e248(%rbp),%xmm0
ff
subsd  -0x4e228(%rbp),%xmm0
ff
lea    0x9e9(%rip),%rdi
mov    $0x1,%al
call   1060 <printf@plt>
movsd  -0x4e248(%rbp),%xmm0
ff
movsd  -0x4e228(%rbp),%xmm1
ff
lea    0x89a(%rip),%rdi
mov    $0x2,%al
call   1060 <printf@plt>
jmp    17ef <main+0x61f>
lea    0x8cd(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
xor    %eax,%eax
add    $0x4e260,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x4e248,%rsp
lea    0x44600(%rsp),%rbx
lea    0x1d500(%rsp),%rsi
mov    %rbx,%rdi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    0x3a9c0(%rsp),%r12
lea    0x138c0(%rsp),%rsi
mov    %r12,%rdi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    0x30d80(%rsp),%r15
lea    0x9c80(%rsp),%rsi
mov    %r15,%rdi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
lea    0x27140(%rsp),%r13
lea    0x40(%rsp),%rsi
mov    %r13,%rdi
mov    $0x2710,%edx
call   10a0 <FillWithRandomInts@plt>
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%r14
mov    %rbx,%rdi
mov    $0x2710,%esi
call   10e0 <BubbleSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %r14,%rax
cvtsi2sd %rax,%xmm0
mov    0x2d69(%rip),%rbp
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x8(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
mov    %r12,%rdi
mov    $0x2710,%esi
call   1050 <SelectionSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x20(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
mov    %r15,%rdi
mov    $0x2710,%esi
call   10c0 <QuickSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x30(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
mov    %r13,%rdi
mov    $0x2710,%esi
call   1080 <InsertionSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x38(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
lea    0x1d500(%rsp),%r14
mov    %r14,%rdi
mov    $0x2710,%esi
call   1060 <_BubbleSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
lea    0x138c0(%rsp),%rdi
mov    $0x2710,%esi
call   1090 <_SelectionSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x10(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
lea    0x9c80(%rsp),%rdi
mov    $0x2710,%esi
call   10d0 <_QuickSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x18(%rsp)
xor    %eax,%eax
call   1040 <clock@plt>
mov    %rax,%rbx
lea    0x40(%rsp),%rdi
mov    $0x2710,%esi
call   10b0 <_InsertionSort@plt>
xor    %eax,%eax
call   1040 <clock@plt>
sub    %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
divsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x28(%rsp)
lea    0x44600(%rsp),%rdi
mov    %r14,%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
test   %eax,%eax
je     1430 <main+0x260>
lea    0xd7d(%rip),%rdi
call   1030 <puts@plt>
jmp    1491 <main+0x2c1>
lea    0xbc9(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0x8(%rsp),%xmm0
jae    145f <main+0x28f>
movsd  0x8(%rsp),%xmm0
subsd  (%rsp),%xmm0
lea    0xbe9(%rip),%rdi
jmp    1471 <main+0x2a1>
movsd  (%rsp),%xmm0
subsd  0x8(%rsp),%xmm0
lea    0xbb1(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0xbf0(%rip),%rdi
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    $0x2,%al
call   1070 <printf@plt>
lea    0x3a9c0(%rsp),%rdi
lea    0x138c0(%rsp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
test   %eax,%eax
je     14bd <main+0x2ed>
lea    0xcf0(%rip),%rdi
call   1030 <puts@plt>
jmp    151e <main+0x34e>
lea    0xb3c(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jae    14ee <main+0x31e>
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
lea    0xbf0(%rip),%rdi
jmp    14fd <main+0x32d>
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
lea    0xbb8(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0xb64(%rip),%rdi
movsd  0x20(%rsp),%xmm0
movsd  0x10(%rsp),%xmm1
mov    $0x2,%al
call   1070 <printf@plt>
lea    0x30d80(%rsp),%rdi
lea    0x9c80(%rsp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
test   %eax,%eax
je     154a <main+0x37a>
lea    0xc63(%rip),%rdi
call   1030 <puts@plt>
jmp    15ab <main+0x3db>
lea    0xaaf(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsd  0x30(%rsp),%xmm1
movsd  0x18(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jae    157b <main+0x3ab>
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
lea    0xbb2(%rip),%rdi
jmp    158a <main+0x3ba>
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
lea    0xb7e(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0xad7(%rip),%rdi
movsd  0x30(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
mov    $0x2,%al
call   1070 <printf@plt>
lea    0x27140(%rsp),%rdi
lea    0x40(%rsp),%rsi
mov    $0x2710,%edx
call   10f0 <Check@plt>
test   %eax,%eax
je     15d4 <main+0x404>
lea    0xbd9(%rip),%rdi
call   1030 <puts@plt>
jmp    1635 <main+0x465>
lea    0xa25(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movsd  0x38(%rsp),%xmm1
movsd  0x28(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jae    1605 <main+0x435>
movapd %xmm1,%xmm0
subsd  %xmm2,%xmm0
lea    0xb77(%rip),%rdi
jmp    1614 <main+0x444>
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
lea    0xb3f(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0xa4d(%rip),%rdi
movsd  0x38(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
mov    $0x2,%al
call   1070 <printf@plt>
xor    %eax,%eax
add    $0x4e248,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@CLOCKS_PER_SEC = global double 0.000000e+00
@.str = [34 x i8] c"\0AArrays were properly sorted and \00"
@.str.1 = [36 x i8] c"I won the BubbleSort by %f seconds\0A\00"
@.str.2 = [41 x i8] c"I lost the BubbleSort by %f seconds :o(\0A\00"
@.str.3 = [70 x i8] c"The times were %f seconds for my sort and %f seconds for the C sort\0A\0A\00"
@.str.4 = [38 x i8] c"Something went horribly wrong oh no!\0A\00"
@.str.5 = [39 x i8] c"I won the SelectionSort by %f seconds\0A\00"
@.str.6 = [44 x i8] c"I lost the SelectionSort by %f seconds :o(\0A\00"
@.str.7 = [35 x i8] c"I won the QuickSort by %f seconds\0A\00"
@.str.8 = [40 x i8] c"I lost the QuickSort by %f seconds :o(\0A\00"
@.str.9 = [39 x i8] c"I won the InsertionSort by %f seconds\0A\00"
@.str.10 = [44 x i8] c"I lost the InsertionSort by %f seconds :o(\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10000 x i32]
%3 = alloca [10000 x i32]
%4 = alloca [10000 x i32]
%5 = alloca [10000 x i32]
%6 = alloca [10000 x i32]
%7 = alloca [10000 x i32]
%8 = alloca [10000 x i32]
%9 = alloca [10000 x i32]
%10 = alloca i64
%11 = alloca i64
%12 = alloca [8 x double]
store i32 0, i32* %1
store i64 0, i64* %10
store i64 0, i64* %11
%13 = bitcast [8 x double]* %12 to i8*
%14 = getelementptr inbounds [10000 x i32], [10000 x i32]* %2, i64 0, i64 0
%15 = getelementptr inbounds [10000 x i32], [10000 x i32]* %6, i64 0, i64 0
%16 = call i32 @FillWithRandomInts(i32* %14, i32* %15, i32 10000)
%17 = getelementptr inbounds [10000 x i32], [10000 x i32]* %3, i64 0, i64 0
%18 = getelementptr inbounds [10000 x i32], [10000 x i32]* %7, i64 0, i64 0
%19 = call i32 @FillWithRandomInts(i32* %17, i32* %18, i32 10000)
%20 = getelementptr inbounds [10000 x i32], [10000 x i32]* %4, i64 0, i64 0
%21 = getelementptr inbounds [10000 x i32], [10000 x i32]* %8, i64 0, i64 0
%22 = call i32 @FillWithRandomInts(i32* %20, i32* %21, i32 10000)
%23 = getelementptr inbounds [10000 x i32], [10000 x i32]* %5, i64 0, i64 0
%24 = getelementptr inbounds [10000 x i32], [10000 x i32]* %9, i64 0, i64 0
%25 = call i32 @FillWithRandomInts(i32* %23, i32* %24, i32 10000)
%26 = call i64 (...) @clock()
store i64 %26, i64* %10
%27 = getelementptr inbounds [10000 x i32], [10000 x i32]* %2, i64 0, i64 0
%28 = call i32 @BubbleSort(i32* %27, i32 10000)
%29 = call i64 (...) @clock()
store i64 %29, i64* %11
%30 = load i64, i64* %11
%31 = load i64, i64* %10
%32 = sub nsw i64 %30, %31
%33 = sitofp i64 %32 to double
%34 = load double, double* @CLOCKS_PER_SEC
%35 = fdiv double %33, %34
%36 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 0
store double %35, double* %36
%37 = call i64 (...) @clock()
store i64 %37, i64* %10
%38 = getelementptr inbounds [10000 x i32], [10000 x i32]* %3, i64 0, i64 0
%39 = call i32 @SelectionSort(i32* %38, i32 10000)
%40 = call i64 (...) @clock()
store i64 %40, i64* %11
%41 = load i64, i64* %11
%42 = load i64, i64* %10
%43 = sub nsw i64 %41, %42
%44 = sitofp i64 %43 to double
%45 = load double, double* @CLOCKS_PER_SEC
%46 = fdiv double %44, %45
%47 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 1
store double %46, double* %47
%48 = call i64 (...) @clock()
store i64 %48, i64* %10
%49 = getelementptr inbounds [10000 x i32], [10000 x i32]* %4, i64 0, i64 0
%50 = call i32 @QuickSort(i32* %49, i32 10000)
%51 = call i64 (...) @clock()
store i64 %51, i64* %11
%52 = load i64, i64* %11
%53 = load i64, i64* %10
%54 = sub nsw i64 %52, %53
%55 = sitofp i64 %54 to double
%56 = load double, double* @CLOCKS_PER_SEC
%57 = fdiv double %55, %56
%58 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
store double %57, double* %58
%59 = call i64 (...) @clock()
store i64 %59, i64* %10
%60 = getelementptr inbounds [10000 x i32], [10000 x i32]* %5, i64 0, i64 0
%61 = call i32 @InsertionSort(i32* %60, i32 10000)
%62 = call i64 (...) @clock()
store i64 %62, i64* %11
%63 = load i64, i64* %11
%64 = load i64, i64* %10
%65 = sub nsw i64 %63, %64
%66 = sitofp i64 %65 to double
%67 = load double, double* @CLOCKS_PER_SEC
%68 = fdiv double %66, %67
%69 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 3
store double %68, double* %69
%70 = call i64 (...) @clock()
store i64 %70, i64* %10
%71 = getelementptr inbounds [10000 x i32], [10000 x i32]* %6, i64 0, i64 0
%72 = call i32 @_BubbleSort(i32* %71, i32 10000)
%73 = call i64 (...) @clock()
store i64 %73, i64* %11
%74 = load i64, i64* %11
%75 = load i64, i64* %10
%76 = sub nsw i64 %74, %75
%77 = sitofp i64 %76 to double
%78 = load double, double* @CLOCKS_PER_SEC
%79 = fdiv double %77, %78
%80 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
store double %79, double* %80
%81 = call i64 (...) @clock()
store i64 %81, i64* %10
%82 = getelementptr inbounds [10000 x i32], [10000 x i32]* %7, i64 0, i64 0
%83 = call i32 @_SelectionSort(i32* %82, i32 10000)
%84 = call i64 (...) @clock()
store i64 %84, i64* %11
%85 = load i64, i64* %11
%86 = load i64, i64* %10
%87 = sub nsw i64 %85, %86
%88 = sitofp i64 %87 to double
%89 = load double, double* @CLOCKS_PER_SEC
%90 = fdiv double %88, %89
%91 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 5
store double %90, double* %91
%92 = call i64 (...) @clock()
store i64 %92, i64* %10
%93 = getelementptr inbounds [10000 x i32], [10000 x i32]* %8, i64 0, i64 0
%94 = call i32 @_QuickSort(i32* %93, i32 10000)
%95 = call i64 (...) @clock()
store i64 %95, i64* %11
%96 = load i64, i64* %11
%97 = load i64, i64* %10
%98 = sub nsw i64 %96, %97
%99 = sitofp i64 %98 to double
%100 = load double, double* @CLOCKS_PER_SEC
%101 = fdiv double %99, %100
%102 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
store double %101, double* %102
%103 = call i64 (...) @clock()
store i64 %103, i64* %10
%104 = getelementptr inbounds [10000 x i32], [10000 x i32]* %9, i64 0, i64 0
%105 = call i32 @_InsertionSort(i32* %104, i32 10000)
%106 = call i64 (...) @clock()
store i64 %106, i64* %11
%107 = load i64, i64* %11
%108 = load i64, i64* %10
%109 = sub nsw i64 %107, %108
%110 = sitofp i64 %109 to double
%111 = load double, double* @CLOCKS_PER_SEC
%112 = fdiv double %110, %111
%113 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 7
store double %112, double* %113
%114 = getelementptr inbounds [10000 x i32], [10000 x i32]* %2, i64 0, i64 0
%115 = getelementptr inbounds [10000 x i32], [10000 x i32]* %6, i64 0, i64 0
%116 = call i32 @Check(i32* %114, i32* %115, i32 10000)
%117 = icmp ne i32 %116, 0
br i1 %117, label %145, label %118
118: ; preds = %0
%119 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%120 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 0
%121 = load double, double* %120
%122 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
%123 = load double, double* %122
%124 = fcmp ole double %121, %123
br i1 %124, label %125, label %132
125: ; preds = %118
%126 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
%127 = load double, double* %126
%128 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 0
%129 = load double, double* %128
%130 = fsub double %127, %129
%131 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.1, i64 0, i64 0), double %130)
br label %139
132: ; preds = %118
%133 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 0
%134 = load double, double* %133
%135 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
%136 = load double, double* %135
%137 = fsub double %134, %136
%138 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0), double %137)
br label %139
139: ; preds = %132, %125
%140 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 0
%141 = load double, double* %140
%142 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 4
%143 = load double, double* %142
%144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %141, double %143)
br label %147
145: ; preds = %0
%146 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0))
br label %147
147: ; preds = %145, %139
%148 = getelementptr inbounds [10000 x i32], [10000 x i32]* %3, i64 0, i64 0
%149 = getelementptr inbounds [10000 x i32], [10000 x i32]* %7, i64 0, i64 0
%150 = call i32 @Check(i32* %148, i32* %149, i32 10000)
%151 = icmp ne i32 %150, 0
br i1 %151, label %179, label %152
152: ; preds = %147
%153 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%154 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 1
%155 = load double, double* %154
%156 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 5
%157 = load double, double* %156
%158 = fcmp ole double %155, %157
br i1 %158, label %159, label %166
159: ; preds = %152
%160 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 5
%161 = load double, double* %160
%162 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 1
%163 = load double, double* %162
%164 = fsub double %161, %163
%165 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.5, i64 0, i64 0), double %164)
br label %173
166: ; preds = %152
%167 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 1
%168 = load double, double* %167
%169 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 5
%170 = load double, double* %169
%171 = fsub double %168, %170
%172 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.6, i64 0, i64 0), double %171)
br label %173
173: ; preds = %166, %159
%174 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 1
%175 = load double, double* %174
%176 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 5
%177 = load double, double* %176
%178 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %175, double %177)
br label %181
179: ; preds = %147
%180 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0))
br label %181
181: ; preds = %179, %173
%182 = getelementptr inbounds [10000 x i32], [10000 x i32]* %4, i64 0, i64 0
%183 = getelementptr inbounds [10000 x i32], [10000 x i32]* %8, i64 0, i64 0
%184 = call i32 @Check(i32* %182, i32* %183, i32 10000)
%185 = icmp ne i32 %184, 0
br i1 %185, label %213, label %186
186: ; preds = %181
%187 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%188 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
%189 = load double, double* %188
%190 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
%191 = load double, double* %190
%192 = fcmp ole double %189, %191
br i1 %192, label %193, label %200
193: ; preds = %186
%194 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
%195 = load double, double* %194
%196 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
%197 = load double, double* %196
%198 = fsub double %195, %197
%199 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.7, i64 0, i64 0), double %198)
br label %207
200: ; preds = %186
%201 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
%202 = load double, double* %201
%203 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
%204 = load double, double* %203
%205 = fsub double %202, %204
%206 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.8, i64 0, i64 0), double %205)
br label %207
207: ; preds = %200, %193
%208 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 2
%209 = load double, double* %208
%210 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 6
%211 = load double, double* %210
%212 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %209, double %211)
br label %215
213: ; preds = %181
%214 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0))
br label %215
215: ; preds = %213, %207
%216 = getelementptr inbounds [10000 x i32], [10000 x i32]* %5, i64 0, i64 0
%217 = getelementptr inbounds [10000 x i32], [10000 x i32]* %9, i64 0, i64 0
%218 = call i32 @Check(i32* %216, i32* %217, i32 10000)
%219 = icmp ne i32 %218, 0
br i1 %219, label %247, label %220
220: ; preds = %215
%221 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%222 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 3
%223 = load double, double* %222
%224 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 7
%225 = load double, double* %224
%226 = fcmp ole double %223, %225
br i1 %226, label %227, label %234
227: ; preds = %220
%228 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 7
%229 = load double, double* %228
%230 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 3
%231 = load double, double* %230
%232 = fsub double %229, %231
%233 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0), double %232)
br label %241
234: ; preds = %220
%235 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 3
%236 = load double, double* %235
%237 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 7
%238 = load double, double* %237
%239 = fsub double %236, %238
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.10, i64 0, i64 0), double %239)
br label %241
241: ; preds = %234, %227
%242 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 3
%243 = load double, double* %242
%244 = getelementptr inbounds [8 x double], [8 x double]* %12, i64 0, i64 7
%245 = load double, double* %244
%246 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %243, double %245)
br label %249
247: ; preds = %215
%248 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.4, i64 0, i64 0))
br label %249
249: ; preds = %247, %241
ret i32 0
}

LLVM IR (-O2):
@CLOCKS_PER_SEC = global double 0.000000e+00
@.str = [34 x i8] c"\0AArrays were properly sorted and \00"
@.str.1 = [36 x i8] c"I won the BubbleSort by %f seconds\0A\00"
@.str.2 = [41 x i8] c"I lost the BubbleSort by %f seconds :o(\0A\00"
@.str.3 = [70 x i8] c"The times were %f seconds for my sort and %f seconds for the C sort\0A\0A\00"
@.str.5 = [39 x i8] c"I won the SelectionSort by %f seconds\0A\00"
@.str.6 = [44 x i8] c"I lost the SelectionSort by %f seconds :o(\0A\00"
@.str.7 = [35 x i8] c"I won the QuickSort by %f seconds\0A\00"
@.str.8 = [40 x i8] c"I lost the QuickSort by %f seconds :o(\0A\00"
@.str.9 = [39 x i8] c"I won the InsertionSort by %f seconds\0A\00"
@.str.10 = [44 x i8] c"I lost the InsertionSort by %f seconds :o(\0A\00"
@str.13 = [37 x i8] c"Something went horribly wrong oh no!\00"
define i32 @main() {
%1 = alloca [10000 x i32]
%2 = alloca [10000 x i32]
%3 = alloca [10000 x i32]
%4 = alloca [10000 x i32]
%5 = alloca [10000 x i32]
%6 = alloca [10000 x i32]
%7 = alloca [10000 x i32]
%8 = alloca [10000 x i32]
%9 = bitcast [10000 x i32]* %1 to i8*
%10 = bitcast [10000 x i32]* %2 to i8*
%11 = bitcast [10000 x i32]* %3 to i8*
%12 = bitcast [10000 x i32]* %4 to i8*
%13 = bitcast [10000 x i32]* %5 to i8*
%14 = bitcast [10000 x i32]* %6 to i8*
%15 = bitcast [10000 x i32]* %7 to i8*
%16 = bitcast [10000 x i32]* %8 to i8*
%17 = getelementptr inbounds [10000 x i32], [10000 x i32]* %1, i64 0, i64 0
%18 = getelementptr inbounds [10000 x i32], [10000 x i32]* %5, i64 0, i64 0
%19 = call i32 @FillWithRandomInts(i32* %17, i32* %18, i32 10000)
%20 = getelementptr inbounds [10000 x i32], [10000 x i32]* %2, i64 0, i64 0
%21 = getelementptr inbounds [10000 x i32], [10000 x i32]* %6, i64 0, i64 0
%22 = call i32 @FillWithRandomInts(i32* %20, i32* %21, i32 10000)
%23 = getelementptr inbounds [10000 x i32], [10000 x i32]* %3, i64 0, i64 0
%24 = getelementptr inbounds [10000 x i32], [10000 x i32]* %7, i64 0, i64 0
%25 = call i32 @FillWithRandomInts(i32* %23, i32* %24, i32 10000)
%26 = getelementptr inbounds [10000 x i32], [10000 x i32]* %4, i64 0, i64 0
%27 = getelementptr inbounds [10000 x i32], [10000 x i32]* %8, i64 0, i64 0
%28 = call i32 @FillWithRandomInts(i32* %26, i32* %27, i32 10000)
%29 = call i64 (...) @clock()
%30 = call i32 @BubbleSort(i32* %17, i32 10000)
%31 = call i64 (...) @clock()
%32 = sub nsw i64 %31, %29
%33 = sitofp i64 %32 to double
%34 = load double, double* @CLOCKS_PER_SEC
%35 = fdiv double %33, %34
%36 = call i64 (...) @clock()
%37 = call i32 @SelectionSort(i32* %20, i32 10000)
%38 = call i64 (...) @clock()
%39 = sub nsw i64 %38, %36
%40 = sitofp i64 %39 to double
%41 = load double, double* @CLOCKS_PER_SEC
%42 = fdiv double %40, %41
%43 = call i64 (...) @clock()
%44 = call i32 @QuickSort(i32* %23, i32 10000)
%45 = call i64 (...) @clock()
%46 = sub nsw i64 %45, %43
%47 = sitofp i64 %46 to double
%48 = load double, double* @CLOCKS_PER_SEC
%49 = fdiv double %47, %48
%50 = call i64 (...) @clock()
%51 = call i32 @InsertionSort(i32* %26, i32 10000)
%52 = call i64 (...) @clock()
%53 = sub nsw i64 %52, %50
%54 = sitofp i64 %53 to double
%55 = load double, double* @CLOCKS_PER_SEC
%56 = fdiv double %54, %55
%57 = call i64 (...) @clock()
%58 = call i32 @_BubbleSort(i32* %18, i32 10000)
%59 = call i64 (...) @clock()
%60 = sub nsw i64 %59, %57
%61 = sitofp i64 %60 to double
%62 = load double, double* @CLOCKS_PER_SEC
%63 = fdiv double %61, %62
%64 = call i64 (...) @clock()
%65 = call i32 @_SelectionSort(i32* %21, i32 10000)
%66 = call i64 (...) @clock()
%67 = sub nsw i64 %66, %64
%68 = sitofp i64 %67 to double
%69 = load double, double* @CLOCKS_PER_SEC
%70 = fdiv double %68, %69
%71 = call i64 (...) @clock()
%72 = call i32 @_QuickSort(i32* %24, i32 10000)
%73 = call i64 (...) @clock()
%74 = sub nsw i64 %73, %71
%75 = sitofp i64 %74 to double
%76 = load double, double* @CLOCKS_PER_SEC
%77 = fdiv double %75, %76
%78 = call i64 (...) @clock()
%79 = call i32 @_InsertionSort(i32* %27, i32 10000)
%80 = call i64 (...) @clock()
%81 = sub nsw i64 %80, %78
%82 = sitofp i64 %81 to double
%83 = load double, double* @CLOCKS_PER_SEC
%84 = fdiv double %82, %83
%85 = call i32 @Check(i32* %17, i32* %18, i32 10000)
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %98
87: ; preds = %0
%88 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%89 = fcmp ugt double %35, %63
br i1 %89, label %93, label %90
90: ; preds = %87
%91 = fsub double %63, %35
%92 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.1, i64 0, i64 0), double %91)
br label %96
93: ; preds = %87
%94 = fsub double %35, %63
%95 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @.str.2, i64 0, i64 0), double %94)
br label %96
96: ; preds = %93, %90
%97 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %35, double %63)
br label %100
98: ; preds = %0
%99 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.13, i64 0, i64 0))
br label %100
100: ; preds = %98, %96
%101 = call i32 @Check(i32* %20, i32* %21, i32 10000)
%102 = icmp eq i32 %101, 0
br i1 %102, label %103, label %114
103: ; preds = %100
%104 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%105 = fcmp ugt double %42, %70
br i1 %105, label %109, label %106
106: ; preds = %103
%107 = fsub double %70, %42
%108 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.5, i64 0, i64 0), double %107)
br label %112
109: ; preds = %103
%110 = fsub double %42, %70
%111 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.6, i64 0, i64 0), double %110)
br label %112
112: ; preds = %109, %106
%113 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %42, double %70)
br label %116
114: ; preds = %100
%115 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.13, i64 0, i64 0))
br label %116
116: ; preds = %114, %112
%117 = call i32 @Check(i32* %23, i32* %24, i32 10000)
%118 = icmp eq i32 %117, 0
br i1 %118, label %119, label %130
119: ; preds = %116
%120 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%121 = fcmp ugt double %49, %77
br i1 %121, label %125, label %122
122: ; preds = %119
%123 = fsub double %77, %49
%124 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.7, i64 0, i64 0), double %123)
br label %128
125: ; preds = %119
%126 = fsub double %49, %77
%127 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @.str.8, i64 0, i64 0), double %126)
br label %128
128: ; preds = %125, %122
%129 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %49, double %77)
br label %132
130: ; preds = %116
%131 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.13, i64 0, i64 0))
br label %132
132: ; preds = %130, %128
%133 = call i32 @Check(i32* %26, i32* %27, i32 10000)
%134 = icmp eq i32 %133, 0
br i1 %134, label %135, label %146
135: ; preds = %132
%136 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%137 = fcmp ugt double %56, %84
br i1 %137, label %141, label %138
138: ; preds = %135
%139 = fsub double %84, %56
%140 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0), double %139)
br label %144
141: ; preds = %135
%142 = fsub double %56, %84
%143 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.10, i64 0, i64 0), double %142)
br label %144
144: ; preds = %141, %138
%145 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @.str.3, i64 0, i64 0), double %56, double %84)
br label %148
146: ; preds = %132
%147 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.13, i64 0, i64 0))
br label %148
148: ; preds = %146, %144
ret i32 0
}