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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ m5_dump_stats(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ m5_reset_stats(int /*<<< orphan*/, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, double, double, double, double, double,
                          double);
scalar_t__ spm_malloc(int, int);
int main(int argc, char **argv) {
  int ni = 1024;
  int nj = 1024;
  int nk = 1024;
  int nl = 1024;
  double alpha;
  double beta;
  double *vaddr1 = (double *)spm_malloc(1024 * 1024 * 256, 1);
  double *tmp = vaddr1;
  double *A = vaddr1 + 1024 * 1024 * sizeof(double);
  double *B = A + 1024 * 1024 * sizeof(double);
  double *C = B + 1024 * 1024 * sizeof(double);
  double *D = C + 1024 * 1024 * sizeof(double);
  int i, j, k;
  alpha = 32412;
  beta = 2123;
  for (i = 0; i < ni; i++)
    for (j = 0; j < nk; j++)
      A[i * nk + j] = ((double)i * j) / ni;
  for (i = 0; i < nk; i++)
    for (j = 0; j < nj; j++)
      B[i * nj + j] = ((double)i * (j + 1)) / nj;
  for (i = 0; i < nl; i++)
    for (j = 0; j < nj; j++)
      C[i * nj + j] = ((double)i * (j + 3)) / nl;
  for (i = 0; i < ni; i++)
    for (j = 0; j < nl; j++)
      D[i * nl + j] = ((double)i * (j + 2)) / nk;
  m5_reset_stats(0, 0);
#pragma scop
  for (i = 0; i < 1024; i++)
    for (j = 0; j < 1024; j++) {
      tmp[i * 1024 + j] = 0;
      for (k = 0; k < 1024; ++k)
        tmp[i * 1024 + j] += alpha * A[i * 1024 + k] * B[k * 1024 + j];
    }
  for (i = 0; i < 1024; i++)
    for (j = 0; j < 1024; j++) {
      D[i * 1024 + j] *= beta;
      for (k = 0; k < 1024; ++k)
        D[i * 1024 + j] += tmp[i * 1024 + k] * C[k * 1024 + j];
    }
#pragma endscop
  m5_dump_stats(0, 0);
  printf("%f %f %f %f %f %f\n", A[11], B[11], C[11], D[11], alpha, beta);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x400,-0x14(%rbp)
movl   $0x400,-0x18(%rbp)
movl   $0x400,-0x1c(%rbp)
movl   $0x400,-0x20(%rbp)
mov    $0x10000000,%edi
mov    $0x1,%esi
call   1060 <spm_malloc@plt>
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
add    $0x4000000,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
add    $0x4000000,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
add    $0x4000000,%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
add    $0x4000000,%rax
mov    %rax,-0x60(%rbp)
movsd  0xe3b(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe26(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1253 <main+0x113>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1240 <main+0x100>
cvtsi2sdl -0x64(%rbp),%xmm0
cvtsi2sdl -0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x1c(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    11f9 <main+0xb9>
jmp    1245 <main+0x105>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    11e6 <main+0xa6>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    12cc <main+0x18c>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    12b9 <main+0x179>
cvtsi2sdl -0x64(%rbp),%xmm0
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x18(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    126d <main+0x12d>
jmp    12be <main+0x17e>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    125a <main+0x11a>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1345 <main+0x205>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1332 <main+0x1f2>
cvtsi2sdl -0x64(%rbp),%xmm0
mov    -0x68(%rbp),%eax
add    $0x3,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x18(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    12e6 <main+0x1a6>
jmp    1337 <main+0x1f7>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    12d3 <main+0x193>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    13be <main+0x27e>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    13ab <main+0x26b>
cvtsi2sdl -0x64(%rbp),%xmm0
mov    -0x68(%rbp),%eax
add    $0x2,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x60(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    135f <main+0x21f>
jmp    13b0 <main+0x270>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    134c <main+0x20c>
xor    %esi,%esi
mov    %esi,%edi
call   1050 <m5_reset_stats@plt>
movl   $0x0,-0x64(%rbp)
cmpl   $0x400,-0x64(%rbp)
jge    14a0 <main+0x360>
movl   $0x0,-0x68(%rbp)
cmpl   $0x400,-0x68(%rbp)
jge    148d <main+0x34d>
mov    -0x40(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x6c(%rbp)
cmpl   $0x400,-0x6c(%rbp)
jge    147a <main+0x33a>
movsd  -0x28(%rbp),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x6c(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x40(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    140e <main+0x2ce>
jmp    147f <main+0x33f>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    13e2 <main+0x2a2>
jmp    1492 <main+0x352>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13ce <main+0x28e>
movl   $0x0,-0x64(%rbp)
cmpl   $0x400,-0x64(%rbp)
jge    157b <main+0x43b>
movl   $0x0,-0x68(%rbp)
cmpl   $0x400,-0x68(%rbp)
jge    1568 <main+0x428>
movsd  -0x30(%rbp),%xmm0
mov    -0x60(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x6c(%rbp)
cmpl   $0x400,-0x6c(%rbp)
jge    1555 <main+0x415>
mov    -0x40(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x6c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x60(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0xa,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    14ee <main+0x3ae>
jmp    155a <main+0x41a>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    14bb <main+0x37b>
jmp    156d <main+0x42d>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    14a7 <main+0x367>
xor    %esi,%esi
mov    %esi,%edi
call   1030 <m5_dump_stats@plt>
mov    -0x48(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x50(%rbp),%rax
movsd  0x58(%rax),%xmm1
mov    -0x58(%rbp),%rax
movsd  0x58(%rax),%xmm2
mov    -0x60(%rbp),%rax
movsd  0x58(%rax),%xmm3
movsd  -0x28(%rbp),%xmm4
movsd  -0x30(%rbp),%xmm5
lea    0xa57(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
mov    $0x10000000,%edi
mov    $0x1,%esi
call   1060 <spm_malloc@plt>
mov    %rax,%r14
mov    %rax,%rbx
add    $0x4000030,%rax
xor    %ecx,%ecx
movdqa 0xe96(%rip),%xmm5
movdqa 0xe9d(%rip),%xmm9
movapd 0xea5(%rip),%xmm1
movdqa 0xeac(%rip),%xmm10
movdqa 0xeb3(%rip),%xmm11
movdqa 0xeba(%rip),%xmm12
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
unpcklpd %xmm0,%xmm0
xor    %edx,%edx
movdqa %xmm5,%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqa %xmm2,%xmm3
cvtdq2pd %xmm2,%xmm6
paddd  %xmm9,%xmm3
cvtdq2pd %xmm3,%xmm3
mulpd  %xmm0,%xmm6
mulpd  %xmm0,%xmm3
mulpd  %xmm1,%xmm6
mulpd  %xmm1,%xmm3
movupd %xmm6,-0x30(%rax,%rdx,8)
movupd %xmm3,-0x20(%rax,%rdx,8)
movdqa %xmm2,%xmm3
paddd  %xmm10,%xmm3
movdqa %xmm2,%xmm6
cvtdq2pd %xmm3,%xmm3
paddd  %xmm11,%xmm6
cvtdq2pd %xmm6,%xmm6
mulpd  %xmm0,%xmm3
mulpd  %xmm0,%xmm6
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm6
movupd %xmm3,-0x10(%rax,%rdx,8)
movupd %xmm6,(%rax,%rdx,8)
add    $0x8,%rdx
paddd  %xmm12,%xmm2
cmp    $0x400,%rdx
jne    11c0 <main+0x80>
add    $0x1,%rcx
add    $0x2000,%rax
cmp    $0x400,%rcx
jne    11a0 <main+0x60>
lea    0x8000010(%r14),%rax
xor    %ecx,%ecx
movdqa 0xe03(%rip),%xmm8
pcmpeqd %xmm6,%xmm6
movdqa 0xe07(%rip),%xmm5
movdqa 0xe0f(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
unpcklpd %xmm2,%xmm2
xor    %edx,%edx
movdqa %xmm8,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
pshufd $0xe8,%xmm3,%xmm4
movdqa %xmm4,%xmm0
psubd  %xmm6,%xmm0
cvtdq2pd %xmm0,%xmm0
paddd  %xmm5,%xmm4
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm0
mulpd  %xmm2,%xmm4
mulpd  %xmm1,%xmm0
mulpd  %xmm1,%xmm4
movupd %xmm0,-0x10(%rax,%rdx,8)
movupd %xmm4,(%rax,%rdx,8)
add    $0x4,%rdx
paddq  %xmm7,%xmm3
cmp    $0x400,%rdx
jne    12a0 <main+0x160>
add    $0x1,%rcx
add    $0x2000,%rax
cmp    $0x400,%rcx
jne    1280 <main+0x140>
lea    0xc000030(%r14),%rax
xor    %ecx,%ecx
movdqa 0xcf6(%rip),%xmm8
movdqa 0xd7d(%rip),%xmm13
movdqa 0xd85(%rip),%xmm6
movdqa 0xd8d(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
unpcklpd %xmm2,%xmm2
xor    %edx,%edx
movdqa %xmm8,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm3,%xmm4
paddd  %xmm5,%xmm4
movdqa %xmm3,%xmm7
cvtdq2pd %xmm4,%xmm4
paddd  %xmm13,%xmm7
cvtdq2pd %xmm7,%xmm7
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm7
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm7
movupd %xmm4,-0x30(%rax,%rdx,8)
movupd %xmm7,-0x20(%rax,%rdx,8)
movdqa %xmm3,%xmm4
paddd  %xmm6,%xmm4
movdqa %xmm3,%xmm7
cvtdq2pd %xmm4,%xmm4
paddd  %xmm0,%xmm7
cvtdq2pd %xmm7,%xmm7
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm7
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm7
movupd %xmm4,-0x10(%rax,%rdx,8)
movupd %xmm7,(%rax,%rdx,8)
add    $0x8,%rdx
paddd  %xmm12,%xmm3
cmp    $0x400,%rdx
jne    1350 <main+0x210>
add    $0x1,%rcx
add    $0x2000,%rax
cmp    $0x400,%rcx
jne    1330 <main+0x1f0>
lea    0x10000030(%r14),%rax
xor    %ecx,%ecx
movdqa 0xc0e(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
unpcklpd %xmm2,%xmm2
xor    %edx,%edx
movdqa %xmm0,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm4
paddd  %xmm9,%xmm4
movdqa %xmm3,%xmm5
paddd  %xmm10,%xmm5
cvtdq2pd %xmm4,%xmm4
cvtdq2pd %xmm5,%xmm5
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm5
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm5
movupd %xmm4,-0x30(%rax,%rdx,8)
movupd %xmm5,-0x20(%rax,%rdx,8)
movdqa %xmm3,%xmm4
paddd  %xmm11,%xmm4
paddd  %xmm12,%xmm3
cvtdq2pd %xmm4,%xmm4
cvtdq2pd %xmm3,%xmm5
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm5
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm5
movupd %xmm4,-0x10(%rax,%rdx,8)
movupd %xmm5,(%rax,%rdx,8)
add    $0x8,%rdx
cmp    $0x400,%rdx
jne    1420 <main+0x2e0>
add    $0x1,%rcx
add    $0x2000,%rax
cmp    $0x400,%rcx
jne    1400 <main+0x2c0>
xor    %r15d,%r15d
xor    %edi,%edi
xor    %esi,%esi
call   1050 <m5_reset_stats@plt>
lea    0x4000008(%r14),%rax
lea    0x8002000(%r14),%r8
movsd  0xbf3(%rip),%xmm0
nopl   (%rax)
mov    %r15,%r9
shl    $0xa,%r9
mov    %r8,%r10
xor    %edi,%edi
nopl   0x0(%rax)
lea    (%rdi,%r9,1),%rcx
movq   $0x0,(%rbx,%rcx,8)
xorpd  %xmm1,%xmm1
mov    %r10,%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x8(%rax,%rdx,8),%xmm2
mulsd  %xmm0,%xmm2
mulsd  -0x2000(%rsi),%xmm2
ff
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx,%rcx,8)
movsd  (%rax,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
mulsd  (%rsi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
add    $0x2,%rdx
add    $0x4000,%rsi
cmp    $0x400,%rdx
jne    1500 <main+0x3c0>
add    $0x1,%rdi
add    $0x8,%r10
cmp    $0x400,%rdi
jne    14e0 <main+0x3a0>
add    $0x1,%r15
add    $0x2000,%rax
cmp    $0x400,%r15
jne    14d0 <main+0x390>
lea    0x8(%r14),%rax
add    $0xc002000,%r14
xor    %r8d,%r8d
movsd  0xb45(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r8,%r9
shl    $0xa,%r9
mov    %r14,%r10
xor    %edi,%edi
nopl   0x0(%rax)
lea    (%rdi,%r9,1),%rcx
movsd  0x10000000(%rbx,%rcx,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x10000000(%rbx,%rcx,8)
mov    %r10,%rsi
xor    %edx,%edx
nop
movsd  -0x8(%rax,%rdx,8),%xmm2
mulsd  -0x2000(%rsi),%xmm2
ff
addsd  %xmm1,%xmm2
movsd  %xmm2,0x10000000(%rbx,%rcx,8)
movsd  (%rax,%rdx,8),%xmm1
mulsd  (%rsi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x10000000(%rbx,%rcx,8)
add    $0x2,%rdx
add    $0x4000,%rsi
cmp    $0x400,%rdx
jne    15c0 <main+0x480>
add    $0x1,%rdi
add    $0x8,%r10
cmp    $0x400,%rdi
jne    15a0 <main+0x460>
add    $0x1,%r8
add    $0x2000,%rax
cmp    $0x400,%r8
jne    1590 <main+0x450>
xor    %edi,%edi
xor    %esi,%esi
call   1030 <m5_dump_stats@plt>
movsd  0x4000058(%rbx),%xmm0
04
movsd  0x8000058(%rbx),%xmm1
08
movsd  0xc000058(%rbx),%xmm2
0c
movsd  0x10000058(%rbx),%xmm3
10
lea    0xa73(%rip),%rdi
movsd  0xa5b(%rip),%xmm4
movsd  0xa5b(%rip),%xmm5
call   1040 <printf@plt>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [19 x i8] c"%f %f %f %f %f %f\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca double
%11 = alloca double
%12 = alloca double*
%13 = alloca double*
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca double*
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 1024, i32* %6
store i32 1024, i32* %7
store i32 1024, i32* %8
store i32 1024, i32* %9
%21 = call i64 @spm_malloc(i32 268435456, i32 1)
%22 = inttoptr i64 %21 to double*
store double* %22, double** %12
%23 = load double*, double** %12
store double* %23, double** %13
%24 = load double*, double** %12
%25 = getelementptr inbounds double, double* %24, i64 8388608
store double* %25, double** %14
%26 = load double*, double** %14
%27 = getelementptr inbounds double, double* %26, i64 8388608
store double* %27, double** %15
%28 = load double*, double** %15
%29 = getelementptr inbounds double, double* %28, i64 8388608
store double* %29, double** %16
%30 = load double*, double** %16
%31 = getelementptr inbounds double, double* %30, i64 8388608
store double* %31, double** %17
store double 3.241200e+04, double* %10
store double 2.123000e+03, double* %11
store i32 0, i32* %18
br label %32
32: ; preds = %62, %2
%33 = load i32, i32* %18
%34 = load i32, i32* %6
%35 = icmp slt i32 %33, %34
br i1 %35, label %36, label %65
36: ; preds = %32
store i32 0, i32* %19
br label %37
37: ; preds = %58, %36
%38 = load i32, i32* %19
%39 = load i32, i32* %8
%40 = icmp slt i32 %38, %39
br i1 %40, label %41, label %61
41: ; preds = %37
%42 = load i32, i32* %18
%43 = sitofp i32 %42 to double
%44 = load i32, i32* %19
%45 = sitofp i32 %44 to double
%46 = fmul double %43, %45
%47 = load i32, i32* %6
%48 = sitofp i32 %47 to double
%49 = fdiv double %46, %48
%50 = load double*, double** %14
%51 = load i32, i32* %18
%52 = load i32, i32* %8
%53 = mul nsw i32 %51, %52
%54 = load i32, i32* %19
%55 = add nsw i32 %53, %54
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %50, i64 %56
store double %49, double* %57
br label %58
58: ; preds = %41
%59 = load i32, i32* %19
%60 = add nsw i32 %59, 1
store i32 %60, i32* %19
br label %37
61: ; preds = %37
br label %62
62: ; preds = %61
%63 = load i32, i32* %18
%64 = add nsw i32 %63, 1
store i32 %64, i32* %18
br label %32
65: ; preds = %32
store i32 0, i32* %18
br label %66
66: ; preds = %97, %65
%67 = load i32, i32* %18
%68 = load i32, i32* %8
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %100
70: ; preds = %66
store i32 0, i32* %19
br label %71
71: ; preds = %93, %70
%72 = load i32, i32* %19
%73 = load i32, i32* %7
%74 = icmp slt i32 %72, %73
br i1 %74, label %75, label %96
75: ; preds = %71
%76 = load i32, i32* %18
%77 = sitofp i32 %76 to double
%78 = load i32, i32* %19
%79 = add nsw i32 %78, 1
%80 = sitofp i32 %79 to double
%81 = fmul double %77, %80
%82 = load i32, i32* %7
%83 = sitofp i32 %82 to double
%84 = fdiv double %81, %83
%85 = load double*, double** %15
%86 = load i32, i32* %18
%87 = load i32, i32* %7
%88 = mul nsw i32 %86, %87
%89 = load i32, i32* %19
%90 = add nsw i32 %88, %89
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds double, double* %85, i64 %91
store double %84, double* %92
br label %93
93: ; preds = %75
%94 = load i32, i32* %19
%95 = add nsw i32 %94, 1
store i32 %95, i32* %19
br label %71
96: ; preds = %71
br label %97
97: ; preds = %96
%98 = load i32, i32* %18
%99 = add nsw i32 %98, 1
store i32 %99, i32* %18
br label %66
100: ; preds = %66
store i32 0, i32* %18
br label %101
101: ; preds = %132, %100
%102 = load i32, i32* %18
%103 = load i32, i32* %9
%104 = icmp slt i32 %102, %103
br i1 %104, label %105, label %135
105: ; preds = %101
store i32 0, i32* %19
br label %106
106: ; preds = %128, %105
%107 = load i32, i32* %19
%108 = load i32, i32* %7
%109 = icmp slt i32 %107, %108
br i1 %109, label %110, label %131
110: ; preds = %106
%111 = load i32, i32* %18
%112 = sitofp i32 %111 to double
%113 = load i32, i32* %19
%114 = add nsw i32 %113, 3
%115 = sitofp i32 %114 to double
%116 = fmul double %112, %115
%117 = load i32, i32* %9
%118 = sitofp i32 %117 to double
%119 = fdiv double %116, %118
%120 = load double*, double** %16
%121 = load i32, i32* %18
%122 = load i32, i32* %7
%123 = mul nsw i32 %121, %122
%124 = load i32, i32* %19
%125 = add nsw i32 %123, %124
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds double, double* %120, i64 %126
store double %119, double* %127
br label %128
128: ; preds = %110
%129 = load i32, i32* %19
%130 = add nsw i32 %129, 1
store i32 %130, i32* %19
br label %106
131: ; preds = %106
br label %132
132: ; preds = %131
%133 = load i32, i32* %18
%134 = add nsw i32 %133, 1
store i32 %134, i32* %18
br label %101
135: ; preds = %101
store i32 0, i32* %18
br label %136
136: ; preds = %167, %135
%137 = load i32, i32* %18
%138 = load i32, i32* %6
%139 = icmp slt i32 %137, %138
br i1 %139, label %140, label %170
140: ; preds = %136
store i32 0, i32* %19
br label %141
141: ; preds = %163, %140
%142 = load i32, i32* %19
%143 = load i32, i32* %9
%144 = icmp slt i32 %142, %143
br i1 %144, label %145, label %166
145: ; preds = %141
%146 = load i32, i32* %18
%147 = sitofp i32 %146 to double
%148 = load i32, i32* %19
%149 = add nsw i32 %148, 2
%150 = sitofp i32 %149 to double
%151 = fmul double %147, %150
%152 = load i32, i32* %8
%153 = sitofp i32 %152 to double
%154 = fdiv double %151, %153
%155 = load double*, double** %17
%156 = load i32, i32* %18
%157 = load i32, i32* %9
%158 = mul nsw i32 %156, %157
%159 = load i32, i32* %19
%160 = add nsw i32 %158, %159
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds double, double* %155, i64 %161
store double %154, double* %162
br label %163
163: ; preds = %145
%164 = load i32, i32* %19
%165 = add nsw i32 %164, 1
store i32 %165, i32* %19
br label %141
166: ; preds = %141
br label %167
167: ; preds = %166
%168 = load i32, i32* %18
%169 = add nsw i32 %168, 1
store i32 %169, i32* %18
br label %136
170: ; preds = %136
%171 = call i32 @m5_reset_stats(i32 0, i32 0)
store i32 0, i32* %18
br label %172
172: ; preds = %226, %170
%173 = load i32, i32* %18
%174 = icmp slt i32 %173, 1024
br i1 %174, label %175, label %229
175: ; preds = %172
store i32 0, i32* %19
br label %176
176: ; preds = %222, %175
%177 = load i32, i32* %19
%178 = icmp slt i32 %177, 1024
br i1 %178, label %179, label %225
179: ; preds = %176
%180 = load double*, double** %13
%181 = load i32, i32* %18
%182 = mul nsw i32 %181, 1024
%183 = load i32, i32* %19
%184 = add nsw i32 %182, %183
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double, double* %180, i64 %185
store double 0.000000e+00, double* %186
store i32 0, i32* %20
br label %187
187: ; preds = %218, %179
%188 = load i32, i32* %20
%189 = icmp slt i32 %188, 1024
br i1 %189, label %190, label %221
190: ; preds = %187
%191 = load double, double* %10
%192 = load double*, double** %14
%193 = load i32, i32* %18
%194 = mul nsw i32 %193, 1024
%195 = load i32, i32* %20
%196 = add nsw i32 %194, %195
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds double, double* %192, i64 %197
%199 = load double, double* %198
%200 = fmul double %191, %199
%201 = load double*, double** %15
%202 = load i32, i32* %20
%203 = mul nsw i32 %202, 1024
%204 = load i32, i32* %19
%205 = add nsw i32 %203, %204
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds double, double* %201, i64 %206
%208 = load double, double* %207
%209 = load double*, double** %13
%210 = load i32, i32* %18
%211 = mul nsw i32 %210, 1024
%212 = load i32, i32* %19
%213 = add nsw i32 %211, %212
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds double, double* %209, i64 %214
%216 = load double, double* %215
%217 = call double @llvm.fmuladd.f64(double %200, double %208, double %216)
store double %217, double* %215
br label %218
218: ; preds = %190
%219 = load i32, i32* %20
%220 = add nsw i32 %219, 1
store i32 %220, i32* %20
br label %187
221: ; preds = %187
br label %222
222: ; preds = %221
%223 = load i32, i32* %19
%224 = add nsw i32 %223, 1
store i32 %224, i32* %19
br label %176
225: ; preds = %176
br label %226
226: ; preds = %225
%227 = load i32, i32* %18
%228 = add nsw i32 %227, 1
store i32 %228, i32* %18
br label %172
229: ; preds = %172
store i32 0, i32* %18
br label %230
230: ; preds = %285, %229
%231 = load i32, i32* %18
%232 = icmp slt i32 %231, 1024
br i1 %232, label %233, label %288
233: ; preds = %230
store i32 0, i32* %19
br label %234
234: ; preds = %281, %233
%235 = load i32, i32* %19
%236 = icmp slt i32 %235, 1024
br i1 %236, label %237, label %284
237: ; preds = %234
%238 = load double, double* %11
%239 = load double*, double** %17
%240 = load i32, i32* %18
%241 = mul nsw i32 %240, 1024
%242 = load i32, i32* %19
%243 = add nsw i32 %241, %242
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds double, double* %239, i64 %244
%246 = load double, double* %245
%247 = fmul double %246, %238
store double %247, double* %245
store i32 0, i32* %20
br label %248
248: ; preds = %277, %237
%249 = load i32, i32* %20
%250 = icmp slt i32 %249, 1024
br i1 %250, label %251, label %280
251: ; preds = %248
%252 = load double*, double** %13
%253 = load i32, i32* %18
%254 = mul nsw i32 %253, 1024
%255 = load i32, i32* %20
%256 = add nsw i32 %254, %255
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds double, double* %252, i64 %257
%259 = load double, double* %258
%260 = load double*, double** %16
%261 = load i32, i32* %20
%262 = mul nsw i32 %261, 1024
%263 = load i32, i32* %19
%264 = add nsw i32 %262, %263
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds double, double* %260, i64 %265
%267 = load double, double* %266
%268 = load double*, double** %17
%269 = load i32, i32* %18
%270 = mul nsw i32 %269, 1024
%271 = load i32, i32* %19
%272 = add nsw i32 %270, %271
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds double, double* %268, i64 %273
%275 = load double, double* %274
%276 = call double @llvm.fmuladd.f64(double %259, double %267, double %275)
store double %276, double* %274
br label %277
277: ; preds = %251
%278 = load i32, i32* %20
%279 = add nsw i32 %278, 1
store i32 %279, i32* %20
br label %248
280: ; preds = %248
br label %281
281: ; preds = %280
%282 = load i32, i32* %19
%283 = add nsw i32 %282, 1
store i32 %283, i32* %19
br label %234
284: ; preds = %234
br label %285
285: ; preds = %284
%286 = load i32, i32* %18
%287 = add nsw i32 %286, 1
store i32 %287, i32* %18
br label %230
288: ; preds = %230
%289 = call i32 @m5_dump_stats(i32 0, i32 0)
%290 = load double*, double** %14
%291 = getelementptr inbounds double, double* %290, i64 11
%292 = load double, double* %291
%293 = load double*, double** %15
%294 = getelementptr inbounds double, double* %293, i64 11
%295 = load double, double* %294
%296 = load double*, double** %16
%297 = getelementptr inbounds double, double* %296, i64 11
%298 = load double, double* %297
%299 = load double*, double** %17
%300 = getelementptr inbounds double, double* %299, i64 11
%301 = load double, double* %300
%302 = load double, double* %10
%303 = load double, double* %11
%304 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), double %292, double %295, double %298, double %301, double %302, double %303)
ret i32 0
}

LLVM IR (-O2):
@.str = [19 x i8] c"%f %f %f %f %f %f\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = tail call i64 @spm_malloc(i32 268435456, i32 1)
%4 = inttoptr i64 %3 to double*
%5 = getelementptr inbounds double, double* %4, i64 8388608
%6 = getelementptr inbounds double, double* %4, i64 25165824
br label %7
7: ; preds = %2, %48
%8 = phi i64 [ 0, %2 ], [ %49, %48 ]
%9 = trunc i64 %8 to i32
%10 = sitofp i32 %9 to double
%11 = shl nsw i64 %8, 10
%12 = insertelement <2 x double> poison, double %10, i64 0
%13 = shufflevector <2 x double> %12, <2 x double> poison, <2 x i32> zeroinitializer
%14 = insertelement <2 x double> poison, double %10, i64 0
%15 = shufflevector <2 x double> %14, <2 x double> poison, <2 x i32> zeroinitializer
br label %16
16: ; preds = %16, %7
%17 = phi i64 [ 0, %7 ], [ %45, %16 ]
%18 = phi <2 x i32> [ <i32 0, i32 1>, %7 ], [ %46, %16 ]
%19 = add <2 x i32> %18, <i32 2, i32 2>
%20 = sitofp <2 x i32> %18 to <2 x double>
%21 = sitofp <2 x i32> %19 to <2 x double>
%22 = fmul <2 x double> %13, %20
%23 = fmul <2 x double> %15, %21
%24 = fmul <2 x double> %22, <double 0x3F50000000000000, double 0x3F50000000000000>
%25 = fmul <2 x double> %23, <double 0x3F50000000000000, double 0x3F50000000000000>
%26 = add nuw nsw i64 %17, %11
%27 = getelementptr inbounds double, double* %5, i64 %26
%28 = bitcast double* %27 to <2 x double>*
store <2 x double> %24, <2 x double>* %28
%29 = getelementptr inbounds double, double* %27, i64 2
%30 = bitcast double* %29 to <2 x double>*
store <2 x double> %25, <2 x double>* %30
%31 = or i64 %17, 4
%32 = add <2 x i32> %18, <i32 4, i32 4>
%33 = add <2 x i32> %18, <i32 6, i32 6>
%34 = sitofp <2 x i32> %32 to <2 x double>
%35 = sitofp <2 x i32> %33 to <2 x double>
%36 = fmul <2 x double> %13, %34
%37 = fmul <2 x double> %15, %35
%38 = fmul <2 x double> %36, <double 0x3F50000000000000, double 0x3F50000000000000>
%39 = fmul <2 x double> %37, <double 0x3F50000000000000, double 0x3F50000000000000>
%40 = add nuw nsw i64 %31, %11
%41 = getelementptr inbounds double, double* %5, i64 %40
%42 = bitcast double* %41 to <2 x double>*
store <2 x double> %38, <2 x double>* %42
%43 = getelementptr inbounds double, double* %41, i64 2
%44 = bitcast double* %43 to <2 x double>*
store <2 x double> %39, <2 x double>* %44
%45 = add nuw nsw i64 %17, 8
%46 = add <2 x i32> %18, <i32 8, i32 8>
%47 = icmp eq i64 %45, 1024
br i1 %47, label %48, label %16
48: ; preds = %16
%49 = add nuw nsw i64 %8, 1
%50 = icmp eq i64 %49, 1024
br i1 %50, label %51, label %7
51: ; preds = %48
%52 = getelementptr inbounds double, double* %4, i64 16777216
br label %53
53: ; preds = %51, %83
%54 = phi i64 [ 0, %51 ], [ %84, %83 ]
%55 = trunc i64 %54 to i32
%56 = sitofp i32 %55 to double
%57 = shl nsw i64 %54, 10
%58 = insertelement <2 x double> poison, double %56, i64 0
%59 = shufflevector <2 x double> %58, <2 x double> poison, <2 x i32> zeroinitializer
%60 = insertelement <2 x double> poison, double %56, i64 0
%61 = shufflevector <2 x double> %60, <2 x double> poison, <2 x i32> zeroinitializer
br label %62
62: ; preds = %62, %53
%63 = phi i64 [ 0, %53 ], [ %80, %62 ]
%64 = phi <2 x i64> [ <i64 0, i64 1>, %53 ], [ %81, %62 ]
%65 = trunc <2 x i64> %64 to <2 x i32>
%66 = add <2 x i32> %65, <i32 1, i32 1>
%67 = trunc <2 x i64> %64 to <2 x i32>
%68 = add <2 x i32> %67, <i32 3, i32 3>
%69 = sitofp <2 x i32> %66 to <2 x double>
%70 = sitofp <2 x i32> %68 to <2 x double>
%71 = fmul <2 x double> %59, %69
%72 = fmul <2 x double> %61, %70
%73 = fmul <2 x double> %71, <double 0x3F50000000000000, double 0x3F50000000000000>
%74 = fmul <2 x double> %72, <double 0x3F50000000000000, double 0x3F50000000000000>
%75 = add nuw nsw i64 %63, %57
%76 = getelementptr inbounds double, double* %52, i64 %75
%77 = bitcast double* %76 to <2 x double>*
store <2 x double> %73, <2 x double>* %77
%78 = getelementptr inbounds double, double* %76, i64 2
%79 = bitcast double* %78 to <2 x double>*
store <2 x double> %74, <2 x double>* %79
%80 = add nuw i64 %63, 4
%81 = add <2 x i64> %64, <i64 4, i64 4>
%82 = icmp eq i64 %80, 1024
br i1 %82, label %83, label %62
83: ; preds = %62
%84 = add nuw nsw i64 %54, 1
%85 = icmp eq i64 %84, 1024
br i1 %85, label %86, label %53
86: ; preds = %83, %128
%87 = phi i64 [ %129, %128 ], [ 0, %83 ]
%88 = trunc i64 %87 to i32
%89 = sitofp i32 %88 to double
%90 = shl nsw i64 %87, 10
%91 = insertelement <2 x double> poison, double %89, i64 0
%92 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> zeroinitializer
%93 = insertelement <2 x double> poison, double %89, i64 0
%94 = shufflevector <2 x double> %93, <2 x double> poison, <2 x i32> zeroinitializer
br label %95
95: ; preds = %95, %86
%96 = phi i64 [ 0, %86 ], [ %125, %95 ]
%97 = phi <2 x i32> [ <i32 0, i32 1>, %86 ], [ %126, %95 ]
%98 = add <2 x i32> %97, <i32 3, i32 3>
%99 = add <2 x i32> %97, <i32 5, i32 5>
%100 = sitofp <2 x i32> %98 to <2 x double>
%101 = sitofp <2 x i32> %99 to <2 x double>
%102 = fmul <2 x double> %92, %100
%103 = fmul <2 x double> %94, %101
%104 = fmul <2 x double> %102, <double 0x3F50000000000000, double 0x3F50000000000000>
%105 = fmul <2 x double> %103, <double 0x3F50000000000000, double 0x3F50000000000000>
%106 = add nuw nsw i64 %96, %90
%107 = getelementptr inbounds double, double* %6, i64 %106
%108 = bitcast double* %107 to <2 x double>*
store <2 x double> %104, <2 x double>* %108
%109 = getelementptr inbounds double, double* %107, i64 2
%110 = bitcast double* %109 to <2 x double>*
store <2 x double> %105, <2 x double>* %110
%111 = or i64 %96, 4
%112 = add <2 x i32> %97, <i32 7, i32 7>
%113 = add <2 x i32> %97, <i32 9, i32 9>
%114 = sitofp <2 x i32> %112 to <2 x double>
%115 = sitofp <2 x i32> %113 to <2 x double>
%116 = fmul <2 x double> %92, %114
%117 = fmul <2 x double> %94, %115
%118 = fmul <2 x double> %116, <double 0x3F50000000000000, double 0x3F50000000000000>
%119 = fmul <2 x double> %117, <double 0x3F50000000000000, double 0x3F50000000000000>
%120 = add nuw nsw i64 %111, %90
%121 = getelementptr inbounds double, double* %6, i64 %120
%122 = bitcast double* %121 to <2 x double>*
store <2 x double> %118, <2 x double>* %122
%123 = getelementptr inbounds double, double* %121, i64 2
%124 = bitcast double* %123 to <2 x double>*
store <2 x double> %119, <2 x double>* %124
%125 = add nuw nsw i64 %96, 8
%126 = add <2 x i32> %97, <i32 8, i32 8>
%127 = icmp eq i64 %125, 1024
br i1 %127, label %128, label %95
128: ; preds = %95
%129 = add nuw nsw i64 %87, 1
%130 = icmp eq i64 %129, 1024
br i1 %130, label %131, label %86
131: ; preds = %128
%132 = getelementptr inbounds double, double* %4, i64 33554432
br label %133
133: ; preds = %131, %175
%134 = phi i64 [ 0, %131 ], [ %176, %175 ]
%135 = trunc i64 %134 to i32
%136 = sitofp i32 %135 to double
%137 = shl nsw i64 %134, 10
%138 = insertelement <2 x double> poison, double %136, i64 0
%139 = shufflevector <2 x double> %138, <2 x double> poison, <2 x i32> zeroinitializer
%140 = insertelement <2 x double> poison, double %136, i64 0
%141 = shufflevector <2 x double> %140, <2 x double> poison, <2 x i32> zeroinitializer
br label %142
142: ; preds = %142, %133
%143 = phi i64 [ 0, %133 ], [ %172, %142 ]
%144 = phi <2 x i32> [ <i32 0, i32 1>, %133 ], [ %173, %142 ]
%145 = add <2 x i32> %144, <i32 2, i32 2>
%146 = add <2 x i32> %144, <i32 4, i32 4>
%147 = sitofp <2 x i32> %145 to <2 x double>
%148 = sitofp <2 x i32> %146 to <2 x double>
%149 = fmul <2 x double> %139, %147
%150 = fmul <2 x double> %141, %148
%151 = fmul <2 x double> %149, <double 0x3F50000000000000, double 0x3F50000000000000>
%152 = fmul <2 x double> %150, <double 0x3F50000000000000, double 0x3F50000000000000>
%153 = add nuw nsw i64 %143, %137
%154 = getelementptr inbounds double, double* %132, i64 %153
%155 = bitcast double* %154 to <2 x double>*
store <2 x double> %151, <2 x double>* %155
%156 = getelementptr inbounds double, double* %154, i64 2
%157 = bitcast double* %156 to <2 x double>*
store <2 x double> %152, <2 x double>* %157
%158 = or i64 %143, 4
%159 = add <2 x i32> %144, <i32 6, i32 6>
%160 = add <2 x i32> %144, <i32 8, i32 8>
%161 = sitofp <2 x i32> %159 to <2 x double>
%162 = sitofp <2 x i32> %160 to <2 x double>
%163 = fmul <2 x double> %139, %161
%164 = fmul <2 x double> %141, %162
%165 = fmul <2 x double> %163, <double 0x3F50000000000000, double 0x3F50000000000000>
%166 = fmul <2 x double> %164, <double 0x3F50000000000000, double 0x3F50000000000000>
%167 = add nuw nsw i64 %158, %137
%168 = getelementptr inbounds double, double* %132, i64 %167
%169 = bitcast double* %168 to <2 x double>*
store <2 x double> %165, <2 x double>* %169
%170 = getelementptr inbounds double, double* %168, i64 2
%171 = bitcast double* %170 to <2 x double>*
store <2 x double> %166, <2 x double>* %171
%172 = add nuw nsw i64 %143, 8
%173 = add <2 x i32> %144, <i32 8, i32 8>
%174 = icmp eq i64 %172, 1024
br i1 %174, label %175, label %142
175: ; preds = %142
%176 = add nuw nsw i64 %134, 1
%177 = icmp eq i64 %176, 1024
br i1 %177, label %178, label %133
178: ; preds = %175
%179 = tail call i32 @m5_reset_stats(i32 0, i32 0)
br label %180
180: ; preds = %178, %214
%181 = phi i64 [ 0, %178 ], [ %215, %214 ]
%182 = shl nsw i64 %181, 10
br label %183
183: ; preds = %180, %211
%184 = phi i64 [ 0, %180 ], [ %212, %211 ]
%185 = add nuw nsw i64 %184, %182
%186 = getelementptr inbounds double, double* %4, i64 %185
store double 0.000000e+00, double* %186
br label %187
187: ; preds = %187, %183
%188 = phi double [ 0.000000e+00, %183 ], [ %208, %187 ]
%189 = phi i64 [ 0, %183 ], [ %209, %187 ]
%190 = add nuw nsw i64 %189, %182
%191 = getelementptr inbounds double, double* %5, i64 %190
%192 = load double, double* %191
%193 = fmul double %192, 3.241200e+04
%194 = shl nuw nsw i64 %189, 10
%195 = add nuw nsw i64 %194, %184
%196 = getelementptr inbounds double, double* %52, i64 %195
%197 = load double, double* %196
%198 = tail call double @llvm.fmuladd.f64(double %193, double %197, double %188)
store double %198, double* %186
%199 = or i64 %189, 1
%200 = add nuw nsw i64 %199, %182
%201 = getelementptr inbounds double, double* %5, i64 %200
%202 = load double, double* %201
%203 = fmul double %202, 3.241200e+04
%204 = shl nuw nsw i64 %199, 10
%205 = add nuw nsw i64 %204, %184
%206 = getelementptr inbounds double, double* %52, i64 %205
%207 = load double, double* %206
%208 = tail call double @llvm.fmuladd.f64(double %203, double %207, double %198)
store double %208, double* %186
%209 = add nuw nsw i64 %189, 2
%210 = icmp eq i64 %209, 1024
br i1 %210, label %211, label %187
211: ; preds = %187
%212 = add nuw nsw i64 %184, 1
%213 = icmp eq i64 %212, 1024
br i1 %213, label %214, label %183
214: ; preds = %211
%215 = add nuw nsw i64 %181, 1
%216 = icmp eq i64 %215, 1024
br i1 %216, label %217, label %180
217: ; preds = %214, %251
%218 = phi i64 [ %252, %251 ], [ 0, %214 ]
%219 = shl nsw i64 %218, 10
br label %220
220: ; preds = %217, %248
%221 = phi i64 [ 0, %217 ], [ %249, %248 ]
%222 = add nuw nsw i64 %221, %219
%223 = getelementptr inbounds double, double* %132, i64 %222
%224 = load double, double* %223
%225 = fmul double %224, 2.123000e+03
store double %225, double* %223
br label %226
226: ; preds = %226, %220
%227 = phi double [ %225, %220 ], [ %245, %226 ]
%228 = phi i64 [ 0, %220 ], [ %246, %226 ]
%229 = add nuw nsw i64 %228, %219
%230 = getelementptr inbounds double, double* %4, i64 %229
%231 = load double, double* %230
%232 = shl nuw nsw i64 %228, 10
%233 = add nuw nsw i64 %232, %221
%234 = getelementptr inbounds double, double* %6, i64 %233
%235 = load double, double* %234
%236 = tail call double @llvm.fmuladd.f64(double %231, double %235, double %227)
store double %236, double* %223
%237 = or i64 %228, 1
%238 = add nuw nsw i64 %237, %219
%239 = getelementptr inbounds double, double* %4, i64 %238
%240 = load double, double* %239
%241 = shl nuw nsw i64 %237, 10
%242 = add nuw nsw i64 %241, %221
%243 = getelementptr inbounds double, double* %6, i64 %242
%244 = load double, double* %243
%245 = tail call double @llvm.fmuladd.f64(double %240, double %244, double %236)
store double %245, double* %223
%246 = add nuw nsw i64 %228, 2
%247 = icmp eq i64 %246, 1024
br i1 %247, label %248, label %226
248: ; preds = %226
%249 = add nuw nsw i64 %221, 1
%250 = icmp eq i64 %249, 1024
br i1 %250, label %251, label %220
251: ; preds = %248
%252 = add nuw nsw i64 %218, 1
%253 = icmp eq i64 %252, 1024
br i1 %253, label %254, label %217
254: ; preds = %251
%255 = tail call i32 @m5_dump_stats(i32 0, i32 0)
%256 = getelementptr inbounds double, double* %4, i64 8388619
%257 = load double, double* %256
%258 = getelementptr inbounds double, double* %4, i64 16777227
%259 = load double, double* %258
%260 = getelementptr inbounds double, double* %4, i64 25165835
%261 = load double, double* %260
%262 = getelementptr inbounds double, double* %4, i64 33554443
%263 = load double, double* %262
%264 = tail call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), double %257, double %259, double %261, double %263, double 3.241200e+04, double 2.123000e+03)
ret i32 0
}