#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 */
struct timeval {
  int dummy;
};
typedef int /*<<< orphan*/ resReal32;
typedef int /*<<< orphan*/ resReal;
typedef int /*<<< orphan*/ resInt32;
typedef int /*<<< orphan*/ resInt;
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, double);
int /*<<< orphan*/ gettimeofday(struct timeval *, int /*<<< orphan*/ *);
int /*<<< orphan*/ printf(char *, ...);
double tv_elapsed(struct timeval *, struct timeval *);
void primitive_types(int opcnt, size_t arrsize, FILE *devnull) {
  double asg, add, sub, mul, div;
  struct timeval tv_start, tv_end;
  int i;
  int resInt32;
  long int resInt;
  float resReal32;
  double resReal;
  printf("Evaluation of Primitive Types\n");
  printf("# of ops: %d, time unit: usec\n", opcnt);
  printf("op\t%17s%17s%17s%17s\n", "add", "sub", "mul", "div");
  asg = add = sub = mul = div = 0;
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt32 += i;
  gettimeofday(&tv_end, NULL);
  add = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt32 -= i;
  gettimeofday(&tv_end, NULL);
  sub = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt32 *= i;
  gettimeofday(&tv_end, NULL);
  mul = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt32 /= i;
  gettimeofday(&tv_end, NULL);
  div = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt32);
  printf("int%d\t%17.0f%17.0f%17.0f%17.0f\n", sizeof(resInt32) * 8, add, sub,
         mul, div);
  asg = add = sub = mul = div = 0;
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt += i;
  gettimeofday(&tv_end, NULL);
  add = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt -= i;
  gettimeofday(&tv_end, NULL);
  sub = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt *= i;
  gettimeofday(&tv_end, NULL);
  mul = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resInt /= i;
  gettimeofday(&tv_end, NULL);
  div = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%i", resInt);
  printf("int%d\t%17.0f%17.0f%17.0f%17.0f\n", sizeof(resInt) * 8, add, sub, mul,
         div);
  asg = add = sub = mul = div = 0;
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal32 += i;
  gettimeofday(&tv_end, NULL);
  add = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal32 -= i;
  gettimeofday(&tv_end, NULL);
  sub = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal32 *= i;
  gettimeofday(&tv_end, NULL);
  mul = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal32);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal32 /= i;
  gettimeofday(&tv_end, NULL);
  div = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal32);
  printf("real%d\t%17.0f%17.0f%17.0f%17.0f\n", sizeof(resReal32) * 8, add, sub,
         mul, div);
  asg = add = sub = mul = div = 0;
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal += i;
  gettimeofday(&tv_end, NULL);
  add = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal -= i;
  gettimeofday(&tv_end, NULL);
  sub = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal *= i;
  gettimeofday(&tv_end, NULL);
  mul = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal);
  gettimeofday(&tv_start, NULL);
  for (i = 1; i <= opcnt; i++)
    resReal /= i;
  gettimeofday(&tv_end, NULL);
  div = tv_elapsed(&tv_end, &tv_start);
  fprintf(devnull, "%f", resReal);
  printf("real%d\t%17.0f%17.0f%17.0f%17.0f\n", sizeof(resReal) * 8, add, sub,
         mul, div);
}


x86 assembly (clang, -O0):
<primitive_types>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
lea    0xea6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x4(%rbp),%esi
lea    0xeb4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xec5(%rip),%rdi
lea    0xed3(%rip),%rsi
lea    0xed0(%rip),%rdx
lea    0xecd(%rip),%rcx
lea    0xeca(%rip),%r8
mov    $0x0,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     11fb <primitive_types+0xbb>
mov    -0x54(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    11d8 <primitive_types+0x98>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdl -0x58(%rbp),%xmm0
lea    0xe39(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1268 <primitive_types+0x128>
mov    -0x54(%rbp),%ecx
mov    -0x58(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1243 <primitive_types+0x103>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdl -0x58(%rbp),%xmm0
lea    0xdcc(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     12d4 <primitive_types+0x194>
mov    -0x54(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12b0 <primitive_types+0x170>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdl -0x58(%rbp),%xmm0
lea    0xd60(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1342 <primitive_types+0x202>
mov    -0x54(%rbp),%ecx
mov    -0x58(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x58(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    131c <primitive_types+0x1dc>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdl -0x58(%rbp),%xmm0
lea    0xcf2(%rip),%rsi
call   1050 <fprintf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
lea    0xcd5(%rip),%rdi
mov    $0x20,%esi
mov    $0x4,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     13ff <primitive_types+0x2bf>
movslq -0x54(%rbp),%rax
add    -0x60(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13d9 <primitive_types+0x299>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdq -0x60(%rbp),%xmm0
lea    0xc34(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1471 <primitive_types+0x331>
movslq -0x54(%rbp),%rcx
mov    -0x60(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1448 <primitive_types+0x308>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdq -0x60(%rbp),%xmm0
lea    0xbc2(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     14e1 <primitive_types+0x3a1>
movslq -0x54(%rbp),%rax
imul   -0x60(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    14ba <primitive_types+0x37a>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdq -0x60(%rbp),%xmm0
lea    0xb52(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1555 <primitive_types+0x415>
movslq -0x54(%rbp),%rcx
mov    -0x60(%rbp),%rax
cqto
idiv   %rcx
mov    %rax,-0x60(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    152a <primitive_types+0x3ea>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
cvtsi2sdq -0x60(%rbp),%xmm0
lea    0xade(%rip),%rsi
call   1050 <fprintf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
lea    0xac1(%rip),%rdi
mov    $0x40,%esi
mov    $0x4,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1616 <primitive_types+0x4d6>
cvtsi2ssl -0x54(%rbp),%xmm0
addss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    15ed <primitive_types+0x4ad>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rdi
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xa3d(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     168f <primitive_types+0x54f>
cvtsi2ssl -0x54(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1662 <primitive_types+0x522>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0x9c4(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1704 <primitive_types+0x5c4>
cvtsi2ssl -0x54(%rbp),%xmm0
mulss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    16db <primitive_types+0x59b>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rdi
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0x94f(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     177d <primitive_types+0x63d>
cvtsi2ssl -0x54(%rbp),%xmm1
movss  -0x64(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1750 <primitive_types+0x610>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0x8d6(%rip),%rsi
call   1050 <fprintf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
lea    0x8b9(%rip),%rdi
mov    $0x20,%esi
mov    $0x4,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1841 <primitive_types+0x701>
cvtsi2sdl -0x54(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1818 <primitive_types+0x6d8>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rdi
movsd  -0x70(%rbp),%xmm0
lea    0x816(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     18b6 <primitive_types+0x776>
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1889 <primitive_types+0x749>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rdi
movsd  -0x70(%rbp),%xmm0
lea    0x7a1(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     1927 <primitive_types+0x7e7>
cvtsi2sdl -0x54(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    18fe <primitive_types+0x7be>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rdi
movsd  -0x70(%rbp),%xmm0
lea    0x730(%rip),%rsi
call   1050 <fprintf@plt>
lea    -0x48(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     199c <primitive_types+0x85c>
cvtsi2sdl -0x54(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    196f <primitive_types+0x82f>
lea    -0x50(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
call   1040 <gettimeofday@plt>
lea    -0x50(%rbp),%rdi
lea    -0x48(%rbp),%rsi
call   1060 <tv_elapsed@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
movsd  -0x70(%rbp),%xmm0
lea    0x6bb(%rip),%rsi
call   1050 <fprintf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
lea    0x69e(%rip),%rdi
mov    $0x40,%esi
mov    $0x4,%al
call   1030 <printf@plt>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<primitive_types>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rdx,%rbp
mov    %edi,%r15d
lea    0x1fd0(%rip),%rdi
call   1030 <puts@plt>
lea    0x1f39(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x1f47(%rip),%rdi
lea    0x1f55(%rip),%rsi
lea    0x1f52(%rip),%rdx
lea    0x1f4f(%rip),%rcx
lea    0x1f4c(%rip),%r8
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x10(%rsp),%r12
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movq   %xmm0,0x18(%rsp)
lea    0x1f13(%rip),%r13
pxor   %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r13,%rsi
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movq   %xmm0,0x30(%rsp)
pxor   %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r13,%rsi
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1243 <primitive_types+0xf3>
cmp    $0x8,%r15d
jae    1248 <primitive_types+0xf8>
mov    $0x1,%eax
jmp    1465 <primitive_types+0x315>
jmp    147a <primitive_types+0x32a>
mov    %r15d,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%esi
mov    %esi,%edx
shr    $0x3,%edx
add    $0x1,%edx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0x18,%esi
jae    1280 <primitive_types+0x130>
movdqa 0x1d95(%rip),%xmm0
movdqa 0x1d9d(%rip),%xmm2
movdqa 0x1da5(%rip),%xmm1
jmp    13c1 <primitive_types+0x271>
and    $0xfffffffc,%edx
movdqa 0x1d75(%rip),%xmm0
movdqa 0x1d7d(%rip),%xmm2
movdqa 0x1d85(%rip),%xmm1
movdqa 0x1d9c(%rip),%xmm9
movdqa 0x1da3(%rip),%xmm10
movdqa 0x1daa(%rip),%xmm11
movdqa 0x1db1(%rip),%xmm12
movdqa 0x1db8(%rip),%xmm13
movdqa 0x1dbf(%rip),%xmm14
movdqa 0x1dc6(%rip),%xmm15
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm6
paddd  0x1d44(%rip),%xmm6
pshufd $0xf5,%xmm0,%xmm7
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm7,%xmm3
pmuludq %xmm0,%xmm1
pshufd $0xf5,%xmm2,%xmm7
pshufd $0xf5,%xmm6,%xmm4
pmuludq %xmm7,%xmm4
pmuludq %xmm2,%xmm6
movdqa %xmm0,%xmm2
paddd  %xmm9,%xmm2
movdqa %xmm0,%xmm7
paddd  %xmm10,%xmm7
pmuludq %xmm2,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm3,%xmm2
pmuludq %xmm7,%xmm6
pshufd $0xf5,%xmm7,%xmm3
pmuludq %xmm4,%xmm3
movdqa %xmm0,%xmm4
paddd  %xmm11,%xmm4
movdqa %xmm0,%xmm7
paddd  %xmm12,%xmm7
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm2,%xmm5
pmuludq %xmm1,%xmm4
pshufd $0xf5,%xmm7,%xmm8
pmuludq %xmm3,%xmm8
pmuludq %xmm6,%xmm7
movdqa %xmm0,%xmm2
paddd  %xmm13,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm14,%xmm3
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
pmuludq %xmm3,%xmm7
pshufd $0xe8,%xmm7,%xmm2
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm8,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm15,%xmm0
add    $0xfffffffc,%edx
jne    12e0 <primitive_types+0x190>
test   %ecx,%ecx
je     1431 <primitive_types+0x2e1>
movdqa 0x1c63(%rip),%xmm3
movdqa 0x1c6b(%rip),%xmm4
cs nopw 0x0(%rax,%rax,1)
nop
movdqa %xmm0,%xmm5
paddd  %xmm3,%xmm5
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm7
pmuludq %xmm6,%xmm7
pshufd $0xe8,%xmm7,%xmm6
punpckldq %xmm6,%xmm1
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm5,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm6,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm2
paddd  %xmm4,%xmm0
add    $0xffffffff,%ecx
jne    13e0 <primitive_types+0x290>
pshufd $0xf5,%xmm1,%xmm0
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm3
pmuludq %xmm1,%xmm2
pshufd $0xee,%xmm2,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xaa,%xmm3,%xmm1
pmuludq %xmm3,%xmm1
pmuludq %xmm0,%xmm1
movd   %xmm1,%ebx
cmp    %r15d,%eax
je     147a <primitive_types+0x32a>
or     $0x1,%eax
lea    0x1(%r15),%ecx
nopl   0x0(%rax)
imul   %eax,%ebx
add    $0x1,%eax
cmp    %eax,%ecx
jne    1470 <primitive_types+0x320>
lea    0x8(%rsp),%r12
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r13
mov    %r12,%rdi
mov    %r13,%rsi
call   1070 <tv_elapsed@plt>
movq   %xmm0,0x28(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
lea    0x1c47(%rip),%rsi
mov    %rbp,%rdi
movsd  %xmm0,(%rsp)
call   1060 <fprintf@plt>
mov    %r13,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    154b <primitive_types+0x3fb>
lea    -0x1(%r15),%eax
mov    %r15d,%ecx
and    $0x3,%ecx
cmp    $0x3,%eax
jae    14e7 <primitive_types+0x397>
mov    $0x1,%esi
test   %ecx,%ecx
jne    1530 <primitive_types+0x3e0>
jmp    153f <primitive_types+0x3ef>
mov    %rbp,%r8
mov    %r15d,%edi
and    $0xfffffffc,%edi
mov    $0x1,%esi
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebx,%eax
cltd
idiv   %esi
lea    0x1(%rsi),%ebp
cltd
idiv   %ebp
lea    0x2(%rsi),%ebp
cltd
idiv   %ebp
lea    0x3(%rsi),%ebp
cltd
idiv   %ebp
add    $0x4,%esi
mov    %eax,%ebx
cmp    %edi,%ebp
jne    1500 <primitive_types+0x3b0>
mov    %r8,%rbp
test   %ecx,%ecx
je     153f <primitive_types+0x3ef>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
cltd
idiv   %esi
add    $0x1,%esi
mov    %eax,%ebx
add    $0xffffffff,%ecx
jne    1530 <primitive_types+0x3e0>
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  %xmm0,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x20(%rsp)
lea    0x1b7d(%rip),%r13
mov    %rbp,%rdi
mov    %r13,%rsi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0x1b69(%rip),%rdi
mov    $0x20,%esi
movsd  0x18(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
movsd  0x28(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,(%rsp)
xorps  %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r13,%rsi
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x18(%rsp)
xorps  %xmm0,%xmm0
mov    %rbp,%rdi
mov    %r13,%rsi
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
mov    %r15d,%r14d
test   %r15d,%r15d
jle    1648 <primitive_types+0x4f8>
lea    -0x1(%r14),%rcx
mov    %r14d,%eax
and    $0x7,%eax
cmp    $0x7,%rcx
jae    164d <primitive_types+0x4fd>
mov    $0x1,%ecx
test   %rax,%rax
jne    16c0 <primitive_types+0x570>
jmp    16ce <primitive_types+0x57e>
jmp    16ce <primitive_types+0x57e>
mov    %rbp,%r8
mov    %r14d,%edx
and    $0xfffffff8,%edx
neg    %rdx
mov    $0x8,%ecx
xchg   %ax,%ax
lea    -0x7(%rcx),%rsi
imul   %rbx,%rsi
lea    -0x6(%rcx),%rdi
lea    -0x5(%rcx),%rbx
imul   %rbx,%rdi
imul   %rsi,%rdi
lea    -0x4(%rcx),%rsi
lea    -0x3(%rcx),%rbx
imul   %rbx,%rsi
lea    -0x2(%rcx),%rbp
imul   %rsi,%rbp
imul   %rdi,%rbp
lea    -0x1(%rcx),%rbx
imul   %rcx,%rbx
imul   %rbp,%rbx
lea    (%rdx,%rcx,1),%rsi
add    $0x8,%rsi
add    $0x8,%rcx
cmp    $0x8,%rsi
jne    1660 <primitive_types+0x510>
add    $0xfffffffffffffff9,%rcx
mov    %r8,%rbp
test   %rax,%rax
je     16ce <primitive_types+0x57e>
nopw   0x0(%rax,%rax,1)
imul   %rcx,%rbx
add    $0x1,%rcx
add    $0xffffffffffffffff,%rax
jne    16c0 <primitive_types+0x570>
lea    0x8(%rsp),%r12
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r13
mov    %r12,%rdi
mov    %r13,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x30(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %rbx,%xmm0
lea    0x19f2(%rip),%rsi
mov    %rbp,%rdi
movsd  %xmm0,0x28(%rsp)
call   1060 <fprintf@plt>
mov    %r13,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1746 <primitive_types+0x5f6>
lea    -0x1(%r14),%rax
mov    %r14d,%ecx
and    $0x3,%ecx
cmp    $0x3,%rax
jae    17b9 <primitive_types+0x669>
mov    $0x1,%esi
test   %rcx,%rcx
jne    1929 <primitive_types+0x7d9>
jmp    1870 <primitive_types+0x720>
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x20(%rsp)
lea    0x1982(%rip),%rsi
mov    %rbp,%rdi
movsd  0x28(%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0x1970(%rip),%rdi
mov    $0x40,%esi
movsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
movsd  0x30(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
jmp    19e3 <primitive_types+0x893>
and    $0xfffffffc,%r14d
mov    $0x1,%eax
jmp    17e5 <primitive_types+0x695>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cqto
idiv   %rdi
mov    %rax,%rbx
lea    0x1(%rdi),%rax
cmp    %r14,%rdi
je     1863 <primitive_types+0x713>
mov    %rax,%rsi
mov    %rbx,%rax
or     %rsi,%rax
shr    $0x20,%rax
je     1800 <primitive_types+0x6b0>
mov    %rbx,%rax
cqto
idiv   %rsi
jmp    1806 <primitive_types+0x6b6>
xchg   %ax,%ax
mov    %ebx,%eax
xor    %edx,%edx
div    %esi
lea    0x1(%rsi),%rdi
mov    %rax,%rdx
or     %rdi,%rdx
shr    $0x20,%rdx
je     1820 <primitive_types+0x6d0>
cqto
idiv   %rdi
jmp    1824 <primitive_types+0x6d4>
nopl   (%rax)
xor    %edx,%edx
div    %edi
add    $0x1,%rdi
mov    %rax,%rdx
or     %rdi,%rdx
shr    $0x20,%rdx
je     1840 <primitive_types+0x6f0>
cqto
idiv   %rdi
jmp    1844 <primitive_types+0x6f4>
nopl   0x0(%rax,%rax,1)
xor    %edx,%edx
div    %edi
add    $0x1,%rdi
mov    %rax,%rdx
or     %rdi,%rdx
shr    $0x20,%rdx
jne    17d0 <primitive_types+0x680>
xor    %edx,%edx
div    %edi
mov    %eax,%ebx
jmp    17d8 <primitive_types+0x688>
add    $0x4,%rsi
test   %rcx,%rcx
jne    1929 <primitive_types+0x7d9>
xorps  %xmm0,%xmm0
cvtsi2sd %rbx,%xmm0
movsd  %xmm0,0x28(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x20(%rsp)
lea    0x184a(%rip),%rsi
mov    %rbp,%rdi
movsd  0x28(%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0x1838(%rip),%rdi
mov    $0x40,%esi
movsd  (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
movsd  0x30(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    193f <primitive_types+0x7ef>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
jae    1944 <primitive_types+0x7f4>
mov    $0x1,%ecx
jmp    19c4 <primitive_types+0x874>
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rax
cqto
idiv   %rsi
mov    %rax,%rbx
add    $0x1,%rsi
add    $0xffffffffffffffff,%rcx
je     1870 <primitive_types+0x720>
mov    %rbx,%rax
or     %rsi,%rax
shr    $0x20,%rax
jne    1910 <primitive_types+0x7c0>
mov    %ebx,%eax
xor    %edx,%edx
div    %esi
mov    %eax,%ebx
jmp    191b <primitive_types+0x7cb>
jmp    19e3 <primitive_types+0x893>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
nop
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
addss  %xmm2,%xmm0
lea    0x1(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
addss  %xmm0,%xmm1
lea    0x2(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
lea    0x3(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
lea    0x4(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2ss %esi,%xmm3
addss  %xmm1,%xmm0
addss  %xmm0,%xmm2
addss  %xmm2,%xmm3
lea    0x5(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
addss  %xmm3,%xmm0
lea    0x6(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
lea    0x7(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
addss  %xmm0,%xmm1
addss  %xmm1,%xmm2
add    $0x8,%ecx
cmp    %edx,%esi
jne    1950 <primitive_types+0x800>
test   %eax,%eax
je     19e3 <primitive_types+0x893>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
addss  %xmm0,%xmm2
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    19d0 <primitive_types+0x880>
movss  %xmm2,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x30(%rsp)
movss  (%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0x16fa(%rip),%rsi
mov    %rbp,%rdi
movsd  %xmm0,0x18(%rsp)
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1b15 <primitive_types+0x9c5>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
jae    1a5c <primitive_types+0x90c>
mov    $0x1,%ecx
movss  (%rsp),%xmm3
jmp    1ae4 <primitive_types+0x994>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
movss  (%rsp),%xmm3
nopl   0x0(%rax)
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
subss  %xmm0,%xmm3
lea    0x1(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
subss  %xmm0,%xmm3
lea    0x2(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
lea    0x3(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
lea    0x4(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
subss  %xmm0,%xmm3
subss  %xmm1,%xmm3
subss  %xmm2,%xmm3
lea    0x5(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
subss  %xmm0,%xmm3
lea    0x6(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
lea    0x7(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
subss  %xmm0,%xmm3
subss  %xmm1,%xmm3
add    $0x8,%ecx
cmp    %edx,%esi
jne    1a70 <primitive_types+0x920>
test   %eax,%eax
je     1b03 <primitive_types+0x9b3>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
subss  %xmm0,%xmm3
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    1af0 <primitive_types+0x9a0>
movss  %xmm3,(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
movsd  %xmm0,0x18(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x28(%rsp)
lea    0x15d6(%rip),%rsi
mov    %rbp,%rdi
movsd  0x18(%rsp),%xmm0
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1c35 <primitive_types+0xae5>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
jae    1b80 <primitive_types+0xa30>
mov    $0x1,%ecx
movss  (%rsp),%xmm2
jmp    1c04 <primitive_types+0xab4>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
movss  (%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
mulss  %xmm2,%xmm0
lea    0x1(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
mulss  %xmm0,%xmm1
lea    0x2(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
lea    0x3(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
lea    0x4(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2ss %esi,%xmm3
mulss  %xmm1,%xmm0
mulss  %xmm0,%xmm2
mulss  %xmm2,%xmm3
lea    0x5(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
mulss  %xmm3,%xmm0
lea    0x6(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
lea    0x7(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
mulss  %xmm0,%xmm1
mulss  %xmm1,%xmm2
add    $0x8,%ecx
cmp    %edx,%esi
jne    1b90 <primitive_types+0xa40>
test   %eax,%eax
je     1c23 <primitive_types+0xad3>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
mulss  %xmm0,%xmm2
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    1c10 <primitive_types+0xac0>
movss  %xmm2,(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
movsd  %xmm0,0x18(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x20(%rsp)
lea    0x14b6(%rip),%rsi
mov    %rbp,%rdi
movsd  0x18(%rsp),%xmm0
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1ca3 <primitive_types+0xb53>
mov    %rbp,%r14
lea    -0x1(%r15),%ebp
mov    %r15d,%eax
and    $0x3,%eax
cmp    $0x3,%ebp
jae    1d15 <primitive_types+0xbc5>
mov    $0x1,%ecx
movss  (%rsp),%xmm2
jmp    1d6c <primitive_types+0xc1c>
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,(%rsp)
lea    0x1449(%rip),%rsi
mov    %rbp,%rdi
movsd  0x18(%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0x1437(%rip),%rdi
mov    $0x20,%esi
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x20(%rsp),%xmm2
movsd  (%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
jmp    1ec3 <primitive_types+0xd73>
mov    %r15d,%edx
and    $0xfffffffc,%edx
mov    $0x1,%ecx
movss  (%rsp),%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
divss  %xmm0,%xmm2
lea    0x1(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
divss  %xmm0,%xmm2
lea    0x2(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
lea    0x3(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
divss  %xmm0,%xmm2
divss  %xmm1,%xmm2
add    $0x4,%ecx
cmp    %edx,%esi
jne    1d30 <primitive_types+0xbe0>
test   %eax,%eax
je     1d83 <primitive_types+0xc33>
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
divss  %xmm0,%xmm2
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    1d70 <primitive_types+0xc20>
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
movsd  %xmm0,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x18(%rsp)
lea    0x135c(%rip),%rsi
mov    %r14,%rdi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0x134b(%rip),%rdi
mov    $0x20,%esi
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x20(%rsp),%xmm2
movsd  0x18(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1e17 <primitive_types+0xcc7>
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ebp
jae    1e1f <primitive_types+0xccf>
mov    $0x1,%ecx
jmp    1ea4 <primitive_types+0xd54>
mov    %r14,%rbp
jmp    1ec3 <primitive_types+0xd73>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
nopw   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
lea    0x1(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
addsd  %xmm3,%xmm0
lea    0x2(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
addsd  %xmm0,%xmm1
lea    0x3(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
addsd  %xmm1,%xmm2
lea    0x4(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
addsd  %xmm2,%xmm0
lea    0x5(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
addsd  %xmm0,%xmm1
lea    0x6(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
addsd  %xmm1,%xmm2
lea    0x7(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
addsd  %xmm2,%xmm0
addsd  %xmm0,%xmm3
add    $0x8,%ecx
cmp    %edx,%esi
jne    1e30 <primitive_types+0xce0>
mov    %r14,%rbp
test   %eax,%eax
je     1ec3 <primitive_types+0xd73>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
addsd  %xmm0,%xmm3
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    1eb0 <primitive_types+0xd60>
movsd  %xmm3,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x18(%rsp)
lea    0x1223(%rip),%rsi
mov    %rbp,%rdi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    1f2e <primitive_types+0xdde>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
movsd  (%rsp),%xmm2
jae    1f38 <primitive_types+0xde8>
mov    $0x1,%ecx
jmp    1fc4 <primitive_types+0xe74>
movsd  (%rsp),%xmm2
jmp    1fe3 <primitive_types+0xe93>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
lea    0x1(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
subsd  %xmm0,%xmm2
lea    0x2(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
subsd  %xmm1,%xmm2
lea    0x3(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
subsd  %xmm0,%xmm2
lea    0x4(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
subsd  %xmm1,%xmm2
lea    0x5(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
subsd  %xmm0,%xmm2
lea    0x6(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
subsd  %xmm1,%xmm2
lea    0x7(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
subsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
add    $0x8,%ecx
cmp    %edx,%esi
jne    1f50 <primitive_types+0xe00>
test   %eax,%eax
je     1fe3 <primitive_types+0xe93>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
subsd  %xmm0,%xmm2
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    1fd0 <primitive_types+0xe80>
movsd  %xmm2,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x30(%rsp)
lea    0x1103(%rip),%rsi
mov    %rbp,%rdi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    204e <primitive_types+0xefe>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
movsd  (%rsp),%xmm3
jae    2058 <primitive_types+0xf08>
mov    $0x1,%ecx
jmp    20e4 <primitive_types+0xf94>
movsd  (%rsp),%xmm3
jmp    2103 <primitive_types+0xfb3>
mov    %r15d,%edx
and    $0xfffffff8,%edx
mov    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
lea    0x1(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
mulsd  %xmm3,%xmm0
lea    0x2(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
mulsd  %xmm0,%xmm1
lea    0x3(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
mulsd  %xmm1,%xmm2
lea    0x4(%rcx),%esi
xorps  %xmm1,%xmm1
cvtsi2sd %esi,%xmm1
mulsd  %xmm2,%xmm0
lea    0x5(%rcx),%esi
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
mulsd  %xmm0,%xmm1
lea    0x6(%rcx),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
mulsd  %xmm1,%xmm2
lea    0x7(%rcx),%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
mulsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm3
add    $0x8,%ecx
cmp    %edx,%esi
jne    2070 <primitive_types+0xf20>
test   %eax,%eax
je     2103 <primitive_types+0xfb3>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  %xmm0,%xmm3
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    20f0 <primitive_types+0xfa0>
movsd  %xmm3,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%r12
mov    %rbx,%rdi
mov    %r12,%rsi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x28(%rsp)
lea    0xfe3(%rip),%rsi
mov    %rbp,%rdi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
mov    %r12,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
test   %r15d,%r15d
jle    216b <primitive_types+0x101b>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x3,%eax
cmp    $0x3,%ecx
movsd  (%rsp),%xmm2
jae    2172 <primitive_types+0x1022>
mov    $0x1,%ecx
jmp    21bd <primitive_types+0x106d>
movsd  (%rsp),%xmm2
jmp    21e3 <primitive_types+0x1093>
and    $0xfffffffc,%r15d
mov    $0x1,%ecx
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
lea    0x1(%rcx),%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
divsd  %xmm0,%xmm2
lea    0x2(%rcx),%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
divsd  %xmm1,%xmm2
lea    0x3(%rcx),%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
divsd  %xmm0,%xmm2
divsd  %xmm1,%xmm2
add    $0x4,%ecx
cmp    %r15d,%edx
jne    2180 <primitive_types+0x1030>
test   %eax,%eax
je     21e3 <primitive_types+0x1093>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
divsd  %xmm0,%xmm2
add    $0x1,%ecx
add    $0xffffffff,%eax
jne    21d0 <primitive_types+0x1080>
movsd  %xmm2,(%rsp)
lea    0x8(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
call   1050 <gettimeofday@plt>
lea    0x10(%rsp),%rsi
mov    %rbx,%rdi
call   1070 <tv_elapsed@plt>
movsd  %xmm0,0x20(%rsp)
lea    0xf06(%rip),%rsi
mov    %rbp,%rdi
movsd  (%rsp),%xmm0
call   1060 <fprintf@plt>
lea    0xef5(%rip),%rdi
mov    $0x40,%esi
movsd  0x18(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
movsd  0x28(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.timeval = type { i32 }
@.str = [31 x i8] c"Evaluation of Primitive Types\0A\00"
@.str.1 = [31 x i8] c"# of ops: %d, time unit: usec\0A\00"
@.str.2 = [21 x i8] c"op\09%17s%17s%17s%17s\0A\00"
@.str.3 = [4 x i8] c"add\00"
@.str.4 = [4 x i8] c"sub\00"
@.str.5 = [4 x i8] c"mul\00"
@.str.6 = [4 x i8] c"div\00"
@.str.7 = [3 x i8] c"%i\00"
@.str.8 = [32 x i8] c"int%d\09%17.0f%17.0f%17.0f%17.0f\0A\00"
@.str.9 = [3 x i8] c"%f\00"
@.str.10 = [33 x i8] c"real%d\09%17.0f%17.0f%17.0f%17.0f\0A\00"
define void @primitive_types(i32 %0, i64 %1, i32* %2) {
%4 = alloca i32
%5 = alloca i64
%6 = alloca i32*
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca %struct.timeval
%13 = alloca %struct.timeval
%14 = alloca i32
%15 = alloca i32
%16 = alloca i64
%17 = alloca float
%18 = alloca double
store i32 %0, i32* %4
store i64 %1, i64* %5
store i32* %2, i32** %6
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0))
%20 = load i32, i32* %4
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i64 0, i64 0), i32 %20)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %7
%23 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %24
24: ; preds = %32, %3
%25 = load i32, i32* %14
%26 = load i32, i32* %4
%27 = icmp sle i32 %25, %26
br i1 %27, label %28, label %35
28: ; preds = %24
%29 = load i32, i32* %14
%30 = load i32, i32* %15
%31 = add nsw i32 %30, %29
store i32 %31, i32* %15
br label %32
32: ; preds = %28
%33 = load i32, i32* %14
%34 = add nsw i32 %33, 1
store i32 %34, i32* %14
br label %24
35: ; preds = %24
%36 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%37 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %37, double* %8
%38 = load i32*, i32** %6
%39 = load i32, i32* %15
%40 = sitofp i32 %39 to double
%41 = call i32 @fprintf(i32* %38, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %40)
%42 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %43
43: ; preds = %51, %35
%44 = load i32, i32* %14
%45 = load i32, i32* %4
%46 = icmp sle i32 %44, %45
br i1 %46, label %47, label %54
47: ; preds = %43
%48 = load i32, i32* %14
%49 = load i32, i32* %15
%50 = sub nsw i32 %49, %48
store i32 %50, i32* %15
br label %51
51: ; preds = %47
%52 = load i32, i32* %14
%53 = add nsw i32 %52, 1
store i32 %53, i32* %14
br label %43
54: ; preds = %43
%55 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%56 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %56, double* %9
%57 = load i32*, i32** %6
%58 = load i32, i32* %15
%59 = sitofp i32 %58 to double
%60 = call i32 @fprintf(i32* %57, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %59)
%61 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %62
62: ; preds = %70, %54
%63 = load i32, i32* %14
%64 = load i32, i32* %4
%65 = icmp sle i32 %63, %64
br i1 %65, label %66, label %73
66: ; preds = %62
%67 = load i32, i32* %14
%68 = load i32, i32* %15
%69 = mul nsw i32 %68, %67
store i32 %69, i32* %15
br label %70
70: ; preds = %66
%71 = load i32, i32* %14
%72 = add nsw i32 %71, 1
store i32 %72, i32* %14
br label %62
73: ; preds = %62
%74 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%75 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %75, double* %10
%76 = load i32*, i32** %6
%77 = load i32, i32* %15
%78 = sitofp i32 %77 to double
%79 = call i32 @fprintf(i32* %76, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %78)
%80 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %81
81: ; preds = %89, %73
%82 = load i32, i32* %14
%83 = load i32, i32* %4
%84 = icmp sle i32 %82, %83
br i1 %84, label %85, label %92
85: ; preds = %81
%86 = load i32, i32* %14
%87 = load i32, i32* %15
%88 = sdiv i32 %87, %86
store i32 %88, i32* %15
br label %89
89: ; preds = %85
%90 = load i32, i32* %14
%91 = add nsw i32 %90, 1
store i32 %91, i32* %14
br label %81
92: ; preds = %81
%93 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%94 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %94, double* %11
%95 = load i32*, i32** %6
%96 = load i32, i32* %15
%97 = sitofp i32 %96 to double
%98 = call i32 @fprintf(i32* %95, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %97)
%99 = load double, double* %8
%100 = load double, double* %9
%101 = load double, double* %10
%102 = load double, double* %11
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i64 32, double %99, double %100, double %101, double %102)
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %7
%104 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %105
105: ; preds = %114, %92
%106 = load i32, i32* %14
%107 = load i32, i32* %4
%108 = icmp sle i32 %106, %107
br i1 %108, label %109, label %117
109: ; preds = %105
%110 = load i32, i32* %14
%111 = sext i32 %110 to i64
%112 = load i64, i64* %16
%113 = add nsw i64 %112, %111
store i64 %113, i64* %16
br label %114
114: ; preds = %109
%115 = load i32, i32* %14
%116 = add nsw i32 %115, 1
store i32 %116, i32* %14
br label %105
117: ; preds = %105
%118 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%119 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %119, double* %8
%120 = load i32*, i32** %6
%121 = load i64, i64* %16
%122 = sitofp i64 %121 to double
%123 = call i32 @fprintf(i32* %120, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %122)
%124 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %125
125: ; preds = %134, %117
%126 = load i32, i32* %14
%127 = load i32, i32* %4
%128 = icmp sle i32 %126, %127
br i1 %128, label %129, label %137
129: ; preds = %125
%130 = load i32, i32* %14
%131 = sext i32 %130 to i64
%132 = load i64, i64* %16
%133 = sub nsw i64 %132, %131
store i64 %133, i64* %16
br label %134
134: ; preds = %129
%135 = load i32, i32* %14
%136 = add nsw i32 %135, 1
store i32 %136, i32* %14
br label %125
137: ; preds = %125
%138 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%139 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %139, double* %9
%140 = load i32*, i32** %6
%141 = load i64, i64* %16
%142 = sitofp i64 %141 to double
%143 = call i32 @fprintf(i32* %140, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %142)
%144 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %145
145: ; preds = %154, %137
%146 = load i32, i32* %14
%147 = load i32, i32* %4
%148 = icmp sle i32 %146, %147
br i1 %148, label %149, label %157
149: ; preds = %145
%150 = load i32, i32* %14
%151 = sext i32 %150 to i64
%152 = load i64, i64* %16
%153 = mul nsw i64 %152, %151
store i64 %153, i64* %16
br label %154
154: ; preds = %149
%155 = load i32, i32* %14
%156 = add nsw i32 %155, 1
store i32 %156, i32* %14
br label %145
157: ; preds = %145
%158 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%159 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %159, double* %10
%160 = load i32*, i32** %6
%161 = load i64, i64* %16
%162 = sitofp i64 %161 to double
%163 = call i32 @fprintf(i32* %160, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %162)
%164 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %165
165: ; preds = %174, %157
%166 = load i32, i32* %14
%167 = load i32, i32* %4
%168 = icmp sle i32 %166, %167
br i1 %168, label %169, label %177
169: ; preds = %165
%170 = load i32, i32* %14
%171 = sext i32 %170 to i64
%172 = load i64, i64* %16
%173 = sdiv i64 %172, %171
store i64 %173, i64* %16
br label %174
174: ; preds = %169
%175 = load i32, i32* %14
%176 = add nsw i32 %175, 1
store i32 %176, i32* %14
br label %165
177: ; preds = %165
%178 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%179 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %179, double* %11
%180 = load i32*, i32** %6
%181 = load i64, i64* %16
%182 = sitofp i64 %181 to double
%183 = call i32 @fprintf(i32* %180, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %182)
%184 = load double, double* %8
%185 = load double, double* %9
%186 = load double, double* %10
%187 = load double, double* %11
%188 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i64 64, double %184, double %185, double %186, double %187)
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %7
%189 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %190
190: ; preds = %199, %177
%191 = load i32, i32* %14
%192 = load i32, i32* %4
%193 = icmp sle i32 %191, %192
br i1 %193, label %194, label %202
194: ; preds = %190
%195 = load i32, i32* %14
%196 = sitofp i32 %195 to float
%197 = load float, float* %17
%198 = fadd float %197, %196
store float %198, float* %17
br label %199
199: ; preds = %194
%200 = load i32, i32* %14
%201 = add nsw i32 %200, 1
store i32 %201, i32* %14
br label %190
202: ; preds = %190
%203 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%204 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %204, double* %8
%205 = load i32*, i32** %6
%206 = load float, float* %17
%207 = fpext float %206 to double
%208 = call i32 @fprintf(i32* %205, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %207)
%209 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %210
210: ; preds = %219, %202
%211 = load i32, i32* %14
%212 = load i32, i32* %4
%213 = icmp sle i32 %211, %212
br i1 %213, label %214, label %222
214: ; preds = %210
%215 = load i32, i32* %14
%216 = sitofp i32 %215 to float
%217 = load float, float* %17
%218 = fsub float %217, %216
store float %218, float* %17
br label %219
219: ; preds = %214
%220 = load i32, i32* %14
%221 = add nsw i32 %220, 1
store i32 %221, i32* %14
br label %210
222: ; preds = %210
%223 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%224 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %224, double* %9
%225 = load i32*, i32** %6
%226 = load float, float* %17
%227 = fpext float %226 to double
%228 = call i32 @fprintf(i32* %225, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %227)
%229 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %230
230: ; preds = %239, %222
%231 = load i32, i32* %14
%232 = load i32, i32* %4
%233 = icmp sle i32 %231, %232
br i1 %233, label %234, label %242
234: ; preds = %230
%235 = load i32, i32* %14
%236 = sitofp i32 %235 to float
%237 = load float, float* %17
%238 = fmul float %237, %236
store float %238, float* %17
br label %239
239: ; preds = %234
%240 = load i32, i32* %14
%241 = add nsw i32 %240, 1
store i32 %241, i32* %14
br label %230
242: ; preds = %230
%243 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%244 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %244, double* %10
%245 = load i32*, i32** %6
%246 = load float, float* %17
%247 = fpext float %246 to double
%248 = call i32 @fprintf(i32* %245, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %247)
%249 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %250
250: ; preds = %259, %242
%251 = load i32, i32* %14
%252 = load i32, i32* %4
%253 = icmp sle i32 %251, %252
br i1 %253, label %254, label %262
254: ; preds = %250
%255 = load i32, i32* %14
%256 = sitofp i32 %255 to float
%257 = load float, float* %17
%258 = fdiv float %257, %256
store float %258, float* %17
br label %259
259: ; preds = %254
%260 = load i32, i32* %14
%261 = add nsw i32 %260, 1
store i32 %261, i32* %14
br label %250
262: ; preds = %250
%263 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%264 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %264, double* %11
%265 = load i32*, i32** %6
%266 = load float, float* %17
%267 = fpext float %266 to double
%268 = call i32 @fprintf(i32* %265, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %267)
%269 = load double, double* %8
%270 = load double, double* %9
%271 = load double, double* %10
%272 = load double, double* %11
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i64 32, double %269, double %270, double %271, double %272)
store double 0.000000e+00, double* %11
store double 0.000000e+00, double* %10
store double 0.000000e+00, double* %9
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %7
%274 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %275
275: ; preds = %284, %262
%276 = load i32, i32* %14
%277 = load i32, i32* %4
%278 = icmp sle i32 %276, %277
br i1 %278, label %279, label %287
279: ; preds = %275
%280 = load i32, i32* %14
%281 = sitofp i32 %280 to double
%282 = load double, double* %18
%283 = fadd double %282, %281
store double %283, double* %18
br label %284
284: ; preds = %279
%285 = load i32, i32* %14
%286 = add nsw i32 %285, 1
store i32 %286, i32* %14
br label %275
287: ; preds = %275
%288 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%289 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %289, double* %8
%290 = load i32*, i32** %6
%291 = load double, double* %18
%292 = call i32 @fprintf(i32* %290, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %291)
%293 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %294
294: ; preds = %303, %287
%295 = load i32, i32* %14
%296 = load i32, i32* %4
%297 = icmp sle i32 %295, %296
br i1 %297, label %298, label %306
298: ; preds = %294
%299 = load i32, i32* %14
%300 = sitofp i32 %299 to double
%301 = load double, double* %18
%302 = fsub double %301, %300
store double %302, double* %18
br label %303
303: ; preds = %298
%304 = load i32, i32* %14
%305 = add nsw i32 %304, 1
store i32 %305, i32* %14
br label %294
306: ; preds = %294
%307 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%308 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %308, double* %9
%309 = load i32*, i32** %6
%310 = load double, double* %18
%311 = call i32 @fprintf(i32* %309, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %310)
%312 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %313
313: ; preds = %322, %306
%314 = load i32, i32* %14
%315 = load i32, i32* %4
%316 = icmp sle i32 %314, %315
br i1 %316, label %317, label %325
317: ; preds = %313
%318 = load i32, i32* %14
%319 = sitofp i32 %318 to double
%320 = load double, double* %18
%321 = fmul double %320, %319
store double %321, double* %18
br label %322
322: ; preds = %317
%323 = load i32, i32* %14
%324 = add nsw i32 %323, 1
store i32 %324, i32* %14
br label %313
325: ; preds = %313
%326 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%327 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %327, double* %10
%328 = load i32*, i32** %6
%329 = load double, double* %18
%330 = call i32 @fprintf(i32* %328, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %329)
%331 = call i32 @gettimeofday(%struct.timeval* %12, i32* null)
store i32 1, i32* %14
br label %332
332: ; preds = %341, %325
%333 = load i32, i32* %14
%334 = load i32, i32* %4
%335 = icmp sle i32 %333, %334
br i1 %335, label %336, label %344
336: ; preds = %332
%337 = load i32, i32* %14
%338 = sitofp i32 %337 to double
%339 = load double, double* %18
%340 = fdiv double %339, %338
store double %340, double* %18
br label %341
341: ; preds = %336
%342 = load i32, i32* %14
%343 = add nsw i32 %342, 1
store i32 %343, i32* %14
br label %332
344: ; preds = %332
%345 = call i32 @gettimeofday(%struct.timeval* %13, i32* null)
%346 = call double @tv_elapsed(%struct.timeval* %13, %struct.timeval* %12)
store double %346, double* %11
%347 = load i32*, i32** %6
%348 = load double, double* %18
%349 = call i32 @fprintf(i32* %347, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %348)
%350 = load double, double* %8
%351 = load double, double* %9
%352 = load double, double* %10
%353 = load double, double* %11
%354 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i64 64, double %350, double %351, double %352, double %353)
ret void
}

LLVM IR (-O2):
%struct.timeval = type { i32 }
@.str.1 = [31 x i8] c"# of ops: %d, time unit: usec\0A\00"
@.str.2 = [21 x i8] c"op\09%17s%17s%17s%17s\0A\00"
@.str.3 = [4 x i8] c"add\00"
@.str.4 = [4 x i8] c"sub\00"
@.str.5 = [4 x i8] c"mul\00"
@.str.6 = [4 x i8] c"div\00"
@.str.7 = [3 x i8] c"%i\00"
@.str.8 = [32 x i8] c"int%d\09%17.0f%17.0f%17.0f%17.0f\0A\00"
@.str.9 = [3 x i8] c"%f\00"
@.str.10 = [33 x i8] c"real%d\09%17.0f%17.0f%17.0f%17.0f\0A\00"
@str = [30 x i8] c"Evaluation of Primitive Types\00"
define void @primitive_types(i32 %0, i64 %1, i32* nocapture %2) {
%4 = alloca %struct.timeval
%5 = alloca %struct.timeval
%6 = bitcast %struct.timeval* %4 to i8*
%7 = bitcast %struct.timeval* %5 to i8*
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str, i64 0, i64 0))
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i64 0, i64 0), i32 %0)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%11 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
%12 = icmp slt i32 %0, 1
%13 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%14 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%15 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double 0.000000e+00)
%16 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
%17 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%18 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%19 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double 0.000000e+00)
%20 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %89, label %21
21: ; preds = %3
%22 = icmp ult i32 %0, 8
br i1 %22, label %80, label %23
23: ; preds = %21
%24 = and i32 %0, -8
%25 = or i32 %24, 1
%26 = add i32 %24, -8
%27 = lshr exact i32 %26, 3
%28 = add nuw nsw i32 %27, 1
%29 = and i32 %28, 3
%30 = icmp ult i32 %26, 24
br i1 %30, label %56, label %31
31: ; preds = %23
%32 = and i32 %28, 1073741820
br label %33
33: ; preds = %33, %31
%34 = phi <4 x i32> [ <i32 undef, i32 1, i32 1, i32 1>, %31 ], [ %51, %33 ]
%35 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %31 ], [ %52, %33 ]
%36 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %31 ], [ %53, %33 ]
%37 = phi i32 [ 0, %31 ], [ %54, %33 ]
%38 = add <4 x i32> %36, <i32 4, i32 4, i32 4, i32 4>
%39 = mul <4 x i32> %34, %36
%40 = mul <4 x i32> %35, %38
%41 = add <4 x i32> %36, <i32 8, i32 8, i32 8, i32 8>
%42 = add <4 x i32> %36, <i32 12, i32 12, i32 12, i32 12>
%43 = mul <4 x i32> %39, %41
%44 = mul <4 x i32> %40, %42
%45 = add <4 x i32> %36, <i32 16, i32 16, i32 16, i32 16>
%46 = add <4 x i32> %36, <i32 20, i32 20, i32 20, i32 20>
%47 = mul <4 x i32> %43, %45
%48 = mul <4 x i32> %44, %46
%49 = add <4 x i32> %36, <i32 24, i32 24, i32 24, i32 24>
%50 = add <4 x i32> %36, <i32 28, i32 28, i32 28, i32 28>
%51 = mul <4 x i32> %47, %49
%52 = mul <4 x i32> %48, %50
%53 = add <4 x i32> %36, <i32 32, i32 32, i32 32, i32 32>
%54 = add i32 %37, 4
%55 = icmp eq i32 %54, %32
br i1 %55, label %56, label %33
56: ; preds = %33, %23
%57 = phi <4 x i32> [ undef, %23 ], [ %51, %33 ]
%58 = phi <4 x i32> [ undef, %23 ], [ %52, %33 ]
%59 = phi <4 x i32> [ <i32 undef, i32 1, i32 1, i32 1>, %23 ], [ %51, %33 ]
%60 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %23 ], [ %52, %33 ]
%61 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %23 ], [ %53, %33 ]
%62 = icmp eq i32 %29, 0
br i1 %62, label %74, label %63
63: ; preds = %56, %63
%64 = phi <4 x i32> [ %69, %63 ], [ %59, %56 ]
%65 = phi <4 x i32> [ %70, %63 ], [ %60, %56 ]
%66 = phi <4 x i32> [ %71, %63 ], [ %61, %56 ]
%67 = phi i32 [ %72, %63 ], [ 0, %56 ]
%68 = add <4 x i32> %66, <i32 4, i32 4, i32 4, i32 4>
%69 = mul <4 x i32> %64, %66
%70 = mul <4 x i32> %65, %68
%71 = add <4 x i32> %66, <i32 8, i32 8, i32 8, i32 8>
%72 = add i32 %67, 1
%73 = icmp eq i32 %72, %29
br i1 %73, label %74, label %63
74: ; preds = %63, %56
%75 = phi <4 x i32> [ %57, %56 ], [ %69, %63 ]
%76 = phi <4 x i32> [ %58, %56 ], [ %70, %63 ]
%77 = mul <4 x i32> %76, %75
%78 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %77)
%79 = icmp eq i32 %24, %0
br i1 %79, label %89, label %80
80: ; preds = %21, %74
%81 = phi i32 [ undef, %21 ], [ %78, %74 ]
%82 = phi i32 [ 1, %21 ], [ %25, %74 ]
br label %83
83: ; preds = %80, %83
%84 = phi i32 [ %86, %83 ], [ %81, %80 ]
%85 = phi i32 [ %87, %83 ], [ %82, %80 ]
%86 = mul nsw i32 %84, %85
%87 = add nuw i32 %85, 1
%88 = icmp eq i32 %85, %0
br i1 %88, label %89, label %83
89: ; preds = %83, %74, %3
%90 = phi i32 [ undef, %3 ], [ %78, %74 ], [ %86, %83 ]
%91 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%92 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%93 = sitofp i32 %90 to double
%94 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %93)
%95 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %132, label %96
96: ; preds = %89
%97 = add i32 %0, -1
%98 = and i32 %0, 3
%99 = icmp ult i32 %97, 3
br i1 %99, label %116, label %100
100: ; preds = %96
%101 = and i32 %0, -4
br label %102
102: ; preds = %102, %100
%103 = phi i32 [ %90, %100 ], [ %112, %102 ]
%104 = phi i32 [ 1, %100 ], [ %113, %102 ]
%105 = phi i32 [ 0, %100 ], [ %114, %102 ]
%106 = sdiv i32 %103, %104
%107 = add nuw nsw i32 %104, 1
%108 = sdiv i32 %106, %107
%109 = add nuw nsw i32 %104, 2
%110 = sdiv i32 %108, %109
%111 = add nuw i32 %104, 3
%112 = sdiv i32 %110, %111
%113 = add nuw i32 %104, 4
%114 = add i32 %105, 4
%115 = icmp eq i32 %114, %101
br i1 %115, label %116, label %102
116: ; preds = %102, %96
%117 = phi i32 [ undef, %96 ], [ %112, %102 ]
%118 = phi i32 [ %90, %96 ], [ %112, %102 ]
%119 = phi i32 [ 1, %96 ], [ %113, %102 ]
%120 = icmp eq i32 %98, 0
br i1 %120, label %129, label %121
121: ; preds = %116, %121
%122 = phi i32 [ %125, %121 ], [ %118, %116 ]
%123 = phi i32 [ %126, %121 ], [ %119, %116 ]
%124 = phi i32 [ %127, %121 ], [ 0, %116 ]
%125 = sdiv i32 %122, %123
%126 = add nuw i32 %123, 1
%127 = add i32 %124, 1
%128 = icmp eq i32 %127, %98
br i1 %128, label %129, label %121
129: ; preds = %121, %116
%130 = phi i32 [ %117, %116 ], [ %125, %121 ]
%131 = sitofp i32 %130 to double
br label %132
132: ; preds = %129, %89
%133 = phi double [ %131, %129 ], [ %93, %89 ]
%134 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%135 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%136 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %133)
%137 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i64 32, double %14, double %18, double %92, double %135)
%138 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
%139 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%140 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%141 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double 0.000000e+00)
%142 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
%143 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%144 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%145 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double 0.000000e+00)
%146 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %190, label %147
147: ; preds = %132
%148 = add nuw i32 %0, 1
%149 = zext i32 %148 to i64
%150 = add nsw i64 %149, -1
%151 = add nsw i64 %149, -2
%152 = and i64 %150, 7
%153 = icmp ult i64 %151, 7
br i1 %153, label %178, label %154
154: ; preds = %147
%155 = and i64 %150, -8
br label %156
156: ; preds = %156, %154
%157 = phi i64 [ 1, %154 ], [ %175, %156 ]
%158 = phi i64 [ undef, %154 ], [ %174, %156 ]
%159 = phi i64 [ 0, %154 ], [ %176, %156 ]
%160 = mul nsw i64 %158, %157
%161 = add nuw nsw i64 %157, 1
%162 = mul nsw i64 %160, %161
%163 = add nuw nsw i64 %157, 2
%164 = mul nsw i64 %162, %163
%165 = add nuw nsw i64 %157, 3
%166 = mul nsw i64 %164, %165
%167 = add nuw nsw i64 %157, 4
%168 = mul nsw i64 %166, %167
%169 = add nuw nsw i64 %157, 5
%170 = mul nsw i64 %168, %169
%171 = add nuw nsw i64 %157, 6
%172 = mul nsw i64 %170, %171
%173 = add nuw nsw i64 %157, 7
%174 = mul nsw i64 %172, %173
%175 = add nuw nsw i64 %157, 8
%176 = add i64 %159, 8
%177 = icmp eq i64 %176, %155
br i1 %177, label %178, label %156
178: ; preds = %156, %147
%179 = phi i64 [ 1, %147 ], [ %175, %156 ]
%180 = phi i64 [ undef, %147 ], [ %174, %156 ]
%181 = icmp eq i64 %152, 0
br i1 %181, label %190, label %182
182: ; preds = %178, %182
%183 = phi i64 [ %187, %182 ], [ %179, %178 ]
%184 = phi i64 [ %186, %182 ], [ %180, %178 ]
%185 = phi i64 [ %188, %182 ], [ 0, %178 ]
%186 = mul nsw i64 %184, %183
%187 = add nuw nsw i64 %183, 1
%188 = add i64 %185, 1
%189 = icmp eq i64 %188, %152
br i1 %189, label %190, label %182
190: ; preds = %178, %182, %132
%191 = phi i64 [ undef, %132 ], [ %180, %178 ], [ %186, %182 ]
%192 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%193 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%194 = sitofp i64 %191 to double
%195 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %194)
%196 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %277, label %197
197: ; preds = %190
%198 = add nuw i32 %0, 1
%199 = zext i32 %198 to i64
%200 = add nsw i64 %199, -1
%201 = add nsw i64 %199, -2
%202 = and i64 %200, 3
%203 = icmp ult i64 %201, 3
br i1 %203, label %220, label %204
204: ; preds = %197
%205 = and i64 %200, -4
br label %206
206: ; preds = %206, %204
%207 = phi i64 [ 1, %204 ], [ %217, %206 ]
%208 = phi i64 [ %191, %204 ], [ %216, %206 ]
%209 = phi i64 [ 0, %204 ], [ %218, %206 ]
%210 = sdiv i64 %208, %207
%211 = add nuw nsw i64 %207, 1
%212 = sdiv i64 %210, %211
%213 = add nuw nsw i64 %207, 2
%214 = sdiv i64 %212, %213
%215 = add nuw nsw i64 %207, 3
%216 = sdiv i64 %214, %215
%217 = add nuw nsw i64 %207, 4
%218 = add i64 %209, 4
%219 = icmp eq i64 %218, %205
br i1 %219, label %220, label %206
220: ; preds = %206, %197
%221 = phi i64 [ undef, %197 ], [ %216, %206 ]
%222 = phi i64 [ 1, %197 ], [ %217, %206 ]
%223 = phi i64 [ %191, %197 ], [ %216, %206 ]
%224 = icmp eq i64 %202, 0
br i1 %224, label %233, label %225
225: ; preds = %220, %225
%226 = phi i64 [ %230, %225 ], [ %222, %220 ]
%227 = phi i64 [ %229, %225 ], [ %223, %220 ]
%228 = phi i64 [ %231, %225 ], [ 0, %220 ]
%229 = sdiv i64 %227, %226
%230 = add nuw nsw i64 %226, 1
%231 = add i64 %228, 1
%232 = icmp eq i64 %231, %202
br i1 %232, label %233, label %225
233: ; preds = %225, %220
%234 = phi i64 [ %221, %220 ], [ %229, %225 ]
%235 = sitofp i64 %234 to double
%236 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%237 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%238 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %235)
%239 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i64 64, double %140, double %144, double %193, double %237)
%240 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %296, label %241
241: ; preds = %233
%242 = add i32 %0, -1
%243 = and i32 %0, 7
%244 = icmp ult i32 %242, 7
br i1 %244, label %283, label %245
245: ; preds = %241
%246 = and i32 %0, -8
br label %247
247: ; preds = %247, %245
%248 = phi float [ undef, %245 ], [ %273, %247 ]
%249 = phi i32 [ 1, %245 ], [ %274, %247 ]
%250 = phi i32 [ 0, %245 ], [ %275, %247 ]
%251 = sitofp i32 %249 to float
%252 = fadd float %248, %251
%253 = add nuw nsw i32 %249, 1
%254 = sitofp i32 %253 to float
%255 = fadd float %252, %254
%256 = add nuw nsw i32 %249, 2
%257 = sitofp i32 %256 to float
%258 = fadd float %255, %257
%259 = add nuw nsw i32 %249, 3
%260 = sitofp i32 %259 to float
%261 = fadd float %258, %260
%262 = add nuw nsw i32 %249, 4
%263 = sitofp i32 %262 to float
%264 = fadd float %261, %263
%265 = add nuw nsw i32 %249, 5
%266 = sitofp i32 %265 to float
%267 = fadd float %264, %266
%268 = add nuw nsw i32 %249, 6
%269 = sitofp i32 %268 to float
%270 = fadd float %267, %269
%271 = add nuw i32 %249, 7
%272 = sitofp i32 %271 to float
%273 = fadd float %270, %272
%274 = add nuw i32 %249, 8
%275 = add i32 %250, 8
%276 = icmp eq i32 %275, %246
br i1 %276, label %283, label %247
277: ; preds = %190
%278 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%279 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%280 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), double %194)
%281 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str.8, i64 0, i64 0), i64 64, double %140, double %144, double %193, double %279)
%282 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br label %296
283: ; preds = %247, %241
%284 = phi float [ undef, %241 ], [ %273, %247 ]
%285 = phi i32 [ 1, %241 ], [ %274, %247 ]
%286 = icmp eq i32 %243, 0
br i1 %286, label %296, label %287
287: ; preds = %283, %287
%288 = phi float [ %292, %287 ], [ %284, %283 ]
%289 = phi i32 [ %293, %287 ], [ %285, %283 ]
%290 = phi i32 [ %294, %287 ], [ 0, %283 ]
%291 = sitofp i32 %289 to float
%292 = fadd float %288, %291
%293 = add nuw i32 %289, 1
%294 = add i32 %290, 1
%295 = icmp eq i32 %294, %243
br i1 %295, label %296, label %287
296: ; preds = %283, %287, %277, %233
%297 = phi float [ undef, %233 ], [ undef, %277 ], [ %284, %283 ], [ %292, %287 ]
%298 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%299 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%300 = fpext float %297 to double
%301 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %300)
%302 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %356, label %303
303: ; preds = %296
%304 = add i32 %0, -1
%305 = and i32 %0, 7
%306 = icmp ult i32 %304, 7
br i1 %306, label %339, label %307
307: ; preds = %303
%308 = and i32 %0, -8
br label %309
309: ; preds = %309, %307
%310 = phi float [ %297, %307 ], [ %335, %309 ]
%311 = phi i32 [ 1, %307 ], [ %336, %309 ]
%312 = phi i32 [ 0, %307 ], [ %337, %309 ]
%313 = sitofp i32 %311 to float
%314 = fsub float %310, %313
%315 = add nuw nsw i32 %311, 1
%316 = sitofp i32 %315 to float
%317 = fsub float %314, %316
%318 = add nuw nsw i32 %311, 2
%319 = sitofp i32 %318 to float
%320 = fsub float %317, %319
%321 = add nuw nsw i32 %311, 3
%322 = sitofp i32 %321 to float
%323 = fsub float %320, %322
%324 = add nuw nsw i32 %311, 4
%325 = sitofp i32 %324 to float
%326 = fsub float %323, %325
%327 = add nuw nsw i32 %311, 5
%328 = sitofp i32 %327 to float
%329 = fsub float %326, %328
%330 = add nuw nsw i32 %311, 6
%331 = sitofp i32 %330 to float
%332 = fsub float %329, %331
%333 = add nuw i32 %311, 7
%334 = sitofp i32 %333 to float
%335 = fsub float %332, %334
%336 = add nuw i32 %311, 8
%337 = add i32 %312, 8
%338 = icmp eq i32 %337, %308
br i1 %338, label %339, label %309
339: ; preds = %309, %303
%340 = phi float [ undef, %303 ], [ %335, %309 ]
%341 = phi float [ %297, %303 ], [ %335, %309 ]
%342 = phi i32 [ 1, %303 ], [ %336, %309 ]
%343 = icmp eq i32 %305, 0
br i1 %343, label %353, label %344
344: ; preds = %339, %344
%345 = phi float [ %349, %344 ], [ %341, %339 ]
%346 = phi i32 [ %350, %344 ], [ %342, %339 ]
%347 = phi i32 [ %351, %344 ], [ 0, %339 ]
%348 = sitofp i32 %346 to float
%349 = fsub float %345, %348
%350 = add nuw i32 %346, 1
%351 = add i32 %347, 1
%352 = icmp eq i32 %351, %305
br i1 %352, label %353, label %344
353: ; preds = %344, %339
%354 = phi float [ %340, %339 ], [ %349, %344 ]
%355 = fpext float %354 to double
br label %356
356: ; preds = %353, %296
%357 = phi double [ %355, %353 ], [ %300, %296 ]
%358 = phi float [ %354, %353 ], [ %297, %296 ]
%359 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%360 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%361 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %357)
%362 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %416, label %363
363: ; preds = %356
%364 = add i32 %0, -1
%365 = and i32 %0, 7
%366 = icmp ult i32 %364, 7
br i1 %366, label %399, label %367
367: ; preds = %363
%368 = and i32 %0, -8
br label %369
369: ; preds = %369, %367
%370 = phi float [ %358, %367 ], [ %395, %369 ]
%371 = phi i32 [ 1, %367 ], [ %396, %369 ]
%372 = phi i32 [ 0, %367 ], [ %397, %369 ]
%373 = sitofp i32 %371 to float
%374 = fmul float %370, %373
%375 = add nuw nsw i32 %371, 1
%376 = sitofp i32 %375 to float
%377 = fmul float %374, %376
%378 = add nuw nsw i32 %371, 2
%379 = sitofp i32 %378 to float
%380 = fmul float %377, %379
%381 = add nuw nsw i32 %371, 3
%382 = sitofp i32 %381 to float
%383 = fmul float %380, %382
%384 = add nuw nsw i32 %371, 4
%385 = sitofp i32 %384 to float
%386 = fmul float %383, %385
%387 = add nuw nsw i32 %371, 5
%388 = sitofp i32 %387 to float
%389 = fmul float %386, %388
%390 = add nuw nsw i32 %371, 6
%391 = sitofp i32 %390 to float
%392 = fmul float %389, %391
%393 = add nuw i32 %371, 7
%394 = sitofp i32 %393 to float
%395 = fmul float %392, %394
%396 = add nuw i32 %371, 8
%397 = add i32 %372, 8
%398 = icmp eq i32 %397, %368
br i1 %398, label %399, label %369
399: ; preds = %369, %363
%400 = phi float [ undef, %363 ], [ %395, %369 ]
%401 = phi float [ %358, %363 ], [ %395, %369 ]
%402 = phi i32 [ 1, %363 ], [ %396, %369 ]
%403 = icmp eq i32 %365, 0
br i1 %403, label %413, label %404
404: ; preds = %399, %404
%405 = phi float [ %409, %404 ], [ %401, %399 ]
%406 = phi i32 [ %410, %404 ], [ %402, %399 ]
%407 = phi i32 [ %411, %404 ], [ 0, %399 ]
%408 = sitofp i32 %406 to float
%409 = fmul float %405, %408
%410 = add nuw i32 %406, 1
%411 = add i32 %407, 1
%412 = icmp eq i32 %411, %365
br i1 %412, label %413, label %404
413: ; preds = %404, %399
%414 = phi float [ %400, %399 ], [ %409, %404 ]
%415 = fpext float %414 to double
br label %416
416: ; preds = %413, %356
%417 = phi double [ %415, %413 ], [ %357, %356 ]
%418 = phi float [ %414, %413 ], [ %358, %356 ]
%419 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%420 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%421 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %417)
%422 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %504, label %423
423: ; preds = %416
%424 = add i32 %0, -1
%425 = and i32 %0, 3
%426 = icmp ult i32 %424, 3
br i1 %426, label %447, label %427
427: ; preds = %423
%428 = and i32 %0, -4
br label %429
429: ; preds = %429, %427
%430 = phi float [ %418, %427 ], [ %443, %429 ]
%431 = phi i32 [ 1, %427 ], [ %444, %429 ]
%432 = phi i32 [ 0, %427 ], [ %445, %429 ]
%433 = sitofp i32 %431 to float
%434 = fdiv float %430, %433
%435 = add nuw nsw i32 %431, 1
%436 = sitofp i32 %435 to float
%437 = fdiv float %434, %436
%438 = add nuw nsw i32 %431, 2
%439 = sitofp i32 %438 to float
%440 = fdiv float %437, %439
%441 = add nuw i32 %431, 3
%442 = sitofp i32 %441 to float
%443 = fdiv float %440, %442
%444 = add nuw i32 %431, 4
%445 = add i32 %432, 4
%446 = icmp eq i32 %445, %428
br i1 %446, label %447, label %429
447: ; preds = %429, %423
%448 = phi float [ undef, %423 ], [ %443, %429 ]
%449 = phi float [ %418, %423 ], [ %443, %429 ]
%450 = phi i32 [ 1, %423 ], [ %444, %429 ]
%451 = icmp eq i32 %425, 0
br i1 %451, label %461, label %452
452: ; preds = %447, %452
%453 = phi float [ %457, %452 ], [ %449, %447 ]
%454 = phi i32 [ %458, %452 ], [ %450, %447 ]
%455 = phi i32 [ %459, %452 ], [ 0, %447 ]
%456 = sitofp i32 %454 to float
%457 = fdiv float %453, %456
%458 = add nuw i32 %454, 1
%459 = add i32 %455, 1
%460 = icmp eq i32 %459, %425
br i1 %460, label %461, label %452
461: ; preds = %452, %447
%462 = phi float [ %448, %447 ], [ %457, %452 ]
%463 = fpext float %462 to double
%464 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%465 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%466 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %463)
%467 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i64 32, double %299, double %360, double %420, double %465)
%468 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %523, label %469
469: ; preds = %461
%470 = and i32 %0, 7
%471 = icmp ult i32 %424, 7
br i1 %471, label %510, label %472
472: ; preds = %469
%473 = and i32 %0, -8
br label %474
474: ; preds = %474, %472
%475 = phi double [ undef, %472 ], [ %500, %474 ]
%476 = phi i32 [ 1, %472 ], [ %501, %474 ]
%477 = phi i32 [ 0, %472 ], [ %502, %474 ]
%478 = sitofp i32 %476 to double
%479 = fadd double %475, %478
%480 = add nuw nsw i32 %476, 1
%481 = sitofp i32 %480 to double
%482 = fadd double %479, %481
%483 = add nuw nsw i32 %476, 2
%484 = sitofp i32 %483 to double
%485 = fadd double %482, %484
%486 = add nuw nsw i32 %476, 3
%487 = sitofp i32 %486 to double
%488 = fadd double %485, %487
%489 = add nuw nsw i32 %476, 4
%490 = sitofp i32 %489 to double
%491 = fadd double %488, %490
%492 = add nuw nsw i32 %476, 5
%493 = sitofp i32 %492 to double
%494 = fadd double %491, %493
%495 = add nuw nsw i32 %476, 6
%496 = sitofp i32 %495 to double
%497 = fadd double %494, %496
%498 = add nuw i32 %476, 7
%499 = sitofp i32 %498 to double
%500 = fadd double %497, %499
%501 = add nuw i32 %476, 8
%502 = add i32 %477, 8
%503 = icmp eq i32 %502, %473
br i1 %503, label %510, label %474
504: ; preds = %416
%505 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%506 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%507 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %417)
%508 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i64 32, double %299, double %360, double %420, double %506)
%509 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br label %523
510: ; preds = %474, %469
%511 = phi double [ undef, %469 ], [ %500, %474 ]
%512 = phi i32 [ 1, %469 ], [ %501, %474 ]
%513 = icmp eq i32 %470, 0
br i1 %513, label %523, label %514
514: ; preds = %510, %514
%515 = phi double [ %519, %514 ], [ %511, %510 ]
%516 = phi i32 [ %520, %514 ], [ %512, %510 ]
%517 = phi i32 [ %521, %514 ], [ 0, %510 ]
%518 = sitofp i32 %516 to double
%519 = fadd double %515, %518
%520 = add nuw i32 %516, 1
%521 = add i32 %517, 1
%522 = icmp eq i32 %521, %470
br i1 %522, label %523, label %514
523: ; preds = %510, %514, %504, %461
%524 = phi double [ undef, %461 ], [ undef, %504 ], [ %511, %510 ], [ %519, %514 ]
%525 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%526 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%527 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %524)
%528 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %579, label %529
529: ; preds = %523
%530 = add i32 %0, -1
%531 = and i32 %0, 7
%532 = icmp ult i32 %530, 7
br i1 %532, label %565, label %533
533: ; preds = %529
%534 = and i32 %0, -8
br label %535
535: ; preds = %535, %533
%536 = phi double [ %524, %533 ], [ %561, %535 ]
%537 = phi i32 [ 1, %533 ], [ %562, %535 ]
%538 = phi i32 [ 0, %533 ], [ %563, %535 ]
%539 = sitofp i32 %537 to double
%540 = fsub double %536, %539
%541 = add nuw nsw i32 %537, 1
%542 = sitofp i32 %541 to double
%543 = fsub double %540, %542
%544 = add nuw nsw i32 %537, 2
%545 = sitofp i32 %544 to double
%546 = fsub double %543, %545
%547 = add nuw nsw i32 %537, 3
%548 = sitofp i32 %547 to double
%549 = fsub double %546, %548
%550 = add nuw nsw i32 %537, 4
%551 = sitofp i32 %550 to double
%552 = fsub double %549, %551
%553 = add nuw nsw i32 %537, 5
%554 = sitofp i32 %553 to double
%555 = fsub double %552, %554
%556 = add nuw nsw i32 %537, 6
%557 = sitofp i32 %556 to double
%558 = fsub double %555, %557
%559 = add nuw i32 %537, 7
%560 = sitofp i32 %559 to double
%561 = fsub double %558, %560
%562 = add nuw i32 %537, 8
%563 = add i32 %538, 8
%564 = icmp eq i32 %563, %534
br i1 %564, label %565, label %535
565: ; preds = %535, %529
%566 = phi double [ undef, %529 ], [ %561, %535 ]
%567 = phi double [ %524, %529 ], [ %561, %535 ]
%568 = phi i32 [ 1, %529 ], [ %562, %535 ]
%569 = icmp eq i32 %531, 0
br i1 %569, label %579, label %570
570: ; preds = %565, %570
%571 = phi double [ %575, %570 ], [ %567, %565 ]
%572 = phi i32 [ %576, %570 ], [ %568, %565 ]
%573 = phi i32 [ %577, %570 ], [ 0, %565 ]
%574 = sitofp i32 %572 to double
%575 = fsub double %571, %574
%576 = add nuw i32 %572, 1
%577 = add i32 %573, 1
%578 = icmp eq i32 %577, %531
br i1 %578, label %579, label %570
579: ; preds = %565, %570, %523
%580 = phi double [ %524, %523 ], [ %566, %565 ], [ %575, %570 ]
%581 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%582 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%583 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %580)
%584 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %635, label %585
585: ; preds = %579
%586 = add i32 %0, -1
%587 = and i32 %0, 7
%588 = icmp ult i32 %586, 7
br i1 %588, label %621, label %589
589: ; preds = %585
%590 = and i32 %0, -8
br label %591
591: ; preds = %591, %589
%592 = phi double [ %580, %589 ], [ %617, %591 ]
%593 = phi i32 [ 1, %589 ], [ %618, %591 ]
%594 = phi i32 [ 0, %589 ], [ %619, %591 ]
%595 = sitofp i32 %593 to double
%596 = fmul double %592, %595
%597 = add nuw nsw i32 %593, 1
%598 = sitofp i32 %597 to double
%599 = fmul double %596, %598
%600 = add nuw nsw i32 %593, 2
%601 = sitofp i32 %600 to double
%602 = fmul double %599, %601
%603 = add nuw nsw i32 %593, 3
%604 = sitofp i32 %603 to double
%605 = fmul double %602, %604
%606 = add nuw nsw i32 %593, 4
%607 = sitofp i32 %606 to double
%608 = fmul double %605, %607
%609 = add nuw nsw i32 %593, 5
%610 = sitofp i32 %609 to double
%611 = fmul double %608, %610
%612 = add nuw nsw i32 %593, 6
%613 = sitofp i32 %612 to double
%614 = fmul double %611, %613
%615 = add nuw i32 %593, 7
%616 = sitofp i32 %615 to double
%617 = fmul double %614, %616
%618 = add nuw i32 %593, 8
%619 = add i32 %594, 8
%620 = icmp eq i32 %619, %590
br i1 %620, label %621, label %591
621: ; preds = %591, %585
%622 = phi double [ undef, %585 ], [ %617, %591 ]
%623 = phi double [ %580, %585 ], [ %617, %591 ]
%624 = phi i32 [ 1, %585 ], [ %618, %591 ]
%625 = icmp eq i32 %587, 0
br i1 %625, label %635, label %626
626: ; preds = %621, %626
%627 = phi double [ %631, %626 ], [ %623, %621 ]
%628 = phi i32 [ %632, %626 ], [ %624, %621 ]
%629 = phi i32 [ %633, %626 ], [ 0, %621 ]
%630 = sitofp i32 %628 to double
%631 = fmul double %627, %630
%632 = add nuw i32 %628, 1
%633 = add i32 %629, 1
%634 = icmp eq i32 %633, %587
br i1 %634, label %635, label %626
635: ; preds = %621, %626, %579
%636 = phi double [ %580, %579 ], [ %622, %621 ], [ %631, %626 ]
%637 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%638 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%639 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %636)
%640 = call i32 @gettimeofday(%struct.timeval* %4, i32* null)
br i1 %12, label %679, label %641
641: ; preds = %635
%642 = add i32 %0, -1
%643 = and i32 %0, 3
%644 = icmp ult i32 %642, 3
br i1 %644, label %665, label %645
645: ; preds = %641
%646 = and i32 %0, -4
br label %647
647: ; preds = %647, %645
%648 = phi double [ %636, %645 ], [ %661, %647 ]
%649 = phi i32 [ 1, %645 ], [ %662, %647 ]
%650 = phi i32 [ 0, %645 ], [ %663, %647 ]
%651 = sitofp i32 %649 to double
%652 = fdiv double %648, %651
%653 = add nuw nsw i32 %649, 1
%654 = sitofp i32 %653 to double
%655 = fdiv double %652, %654
%656 = add nuw nsw i32 %649, 2
%657 = sitofp i32 %656 to double
%658 = fdiv double %655, %657
%659 = add nuw i32 %649, 3
%660 = sitofp i32 %659 to double
%661 = fdiv double %658, %660
%662 = add nuw i32 %649, 4
%663 = add i32 %650, 4
%664 = icmp eq i32 %663, %646
br i1 %664, label %665, label %647
665: ; preds = %647, %641
%666 = phi double [ undef, %641 ], [ %661, %647 ]
%667 = phi double [ %636, %641 ], [ %661, %647 ]
%668 = phi i32 [ 1, %641 ], [ %662, %647 ]
%669 = icmp eq i32 %643, 0
br i1 %669, label %679, label %670
670: ; preds = %665, %670
%671 = phi double [ %675, %670 ], [ %667, %665 ]
%672 = phi i32 [ %676, %670 ], [ %668, %665 ]
%673 = phi i32 [ %677, %670 ], [ 0, %665 ]
%674 = sitofp i32 %672 to double
%675 = fdiv double %671, %674
%676 = add nuw i32 %672, 1
%677 = add i32 %673, 1
%678 = icmp eq i32 %677, %643
br i1 %678, label %679, label %670
679: ; preds = %665, %670, %635
%680 = phi double [ %636, %635 ], [ %666, %665 ], [ %675, %670 ]
%681 = call i32 @gettimeofday(%struct.timeval* %5, i32* null)
%682 = call double @tv_elapsed(%struct.timeval* %5, %struct.timeval* %4)
%683 = call i32 @fprintf(i32* %2, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.9, i64 0, i64 0), double %680)
%684 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.10, i64 0, i64 0), i64 64, double %526, double %582, double %638, double %682)
ret void
}