int main(int argc, char *argv[]) {
  double int_lim, int_lim1, int_lim2, mem_lim, mem_lim1, mem_lim2;
  int nmax, nprocs, nodes, ndata_all, ndata, npara_all, npara, n, m, n_1m,
      m_120;
  double month, cpx_1m_120, cpx, cpx_d2n, cpx_inv, cpx_i, cput_i, cput,
      cput_1m_120, wallt;
  if (argc != 4) {
    printf("usage: L2precheck nmax month_data nprocs\n");
    exit(0);
  } else {
    sscanf(argv[1], "%d", &nmax);
    sscanf(argv[2], "%lf", &month);
    sscanf(argv[3], "%d", &nprocs);
  }
  printf("nmax = %d month = %.2f nodes = %d\n", nmax, month, nprocs);
  printf("\n!!!!!!!!!!!!!! Design Matrix Accumulation !!!!!!!!!!!!!!\n");
  ndata_all = (int)(17280 * 31 * month);
  ndata = (int)(ndata_all / nprocs) + 1;
  npara_all = (nmax + 1) * (nmax + 1);
  npara = (int)(npara_all / nprocs) + 1;
  int_lim = (double)npara_all * (double)ndata / 1024.0 / 1024.0 / 1024.0;
  mem_lim =
      ((double)npara_all * (double)(ndata + npara) + (double)ndata_all * 10) /
      1024.0 / 1024.0 / 1024.0 * 8;
  if (int_lim > 2)
    printf("int_lim ~= %9.3fG > INT_LIM (2G) : warning!!!\n", int_lim);
  else
    printf("int_lim ~= %9.3fG < INT_LIM (2G) : safe~~~\n", int_lim);
  if (mem_lim > 4)
    printf("mem_lim ~= %9.3fG > MEM_LIM (4G) : warning!!!\n", mem_lim);
  else
    printf("mem_lim ~= %9.3fG < MEM_LIM (4G) : safe~~~\n", mem_lim);
  n = ndata_all;
  m = npara_all;
  cpx_d2n = (2.0 * n - 1.0) * (m + 1.0) * m / 2.0;
  cpx_inv = (double)m * (double)m * (double)m / 3.0;
  cpx = cpx_d2n + cpx_inv;
  n_1m = 17280 * 31;
  m_120 = 121 * 121;
  cpx_1m_120 = (2.0 * n_1m - 1.0) * (m_120 + 1.0) * m_120 / 2.0 +
               m_120 * m_120 * m_120 / 3.0;
  cput_1m_120 = 7.0 * 3600.0;
  cpx_i = cpx_1m_120;
  cput_i = cput_1m_120;
  cput = cpx / cpx_i * cput_i;
  wallt = cput / nprocs;
  printf("wallt ~= %f min cput ~= %f hour cpx_d2n : cpx_inv ~= %f\n",
         wallt / 60.0, cput / 3600.0, cpx_d2n / cpx_inv);
  printf("\n!!!!!!!!!!!!!! Normal Matrix Accumulation !!!!!!!!!!!!!!\n");
  ndata_all = (int)(17280 * 31 * month);
  ndata = (int)(ndata_all / nprocs) + 1;
  npara_all = (nmax + 1) * (nmax + 1);
  npara = (int)(npara_all / nprocs) + 1;
  int_lim1 = (double)npara_all * (double)ndata / 1024.0 / 1024.0 / 1024.0;
  int_lim2 = (double)npara_all * (double)npara_all / 1024.0 / 1024.0 / 1024.0;
  mem_lim1 = (double)npara_all * (double)ndata / 1024.0 / 1024.0 / 1024.0 * 8;
  mem_lim2 =
      (double)npara_all * (double)npara_all / 1024.0 / 1024.0 / 1024.0 * 8;
  mem_lim = mem_lim1 + mem_lim2;
  if (int_lim1 > 2)
    printf("int_data ~= %9.3fG > INT_LIM (2G) : warning!!!\n", int_lim1);
  else
    printf("int_data ~= %9.3fG < INT_LIM (2G) : safe~~~\n", int_lim1);
  if (int_lim2 > 2)
    printf("int_para ~= %9.3fG > INT_LIM (2G) : warning!!!\n", int_lim2);
  else
    printf("int_para ~= %9.3fG < INT_LIM (2G) : safe~~~\n", int_lim2);
  if (mem_lim1 > 4)
    printf("mem_data ~= %9.3fG > MEM_LIM (4G) : warning!!!\n", mem_lim1);
  else
    printf("mem_data ~= %9.3fG < MEM_LIM (4G) : safe~~~\n", mem_lim1);
  if (mem_lim2 > 4)
    printf("mem_para ~= %9.3fG > MEM_LIM (4G) : warning!!!\n", mem_lim2);
  else
    printf("mem_para ~= %9.3fG < MEM_LIM (4G) : safe~~~\n", mem_lim2);
  if (mem_lim > 4)
    printf("mem_all  ~= %9.3fG > MEM_LIM (4G) : warning!!!\n", mem_lim);
  else
    printf("mem_all  ~= %9.3fG < MEM_LIM (4G) : safe~~~\n", mem_lim);
  n = ndata_all;
  m = npara_all;
  cpx_d2n = (2.0 * n - 1.0) * (m + 1.0) * m / 2.0;
  cpx_inv = (double)m * (double)m * (double)m / 3.0;
  cpx = cpx_d2n + cpx_inv;
  n_1m = 17280 * 31;
  m_120 = 121 * 121;
  cpx_1m_120 = (2.0 * n_1m - 1.0) * (m_120 + 1.0) * m_120 / 2.0 +
               m_120 * m_120 * m_120 / 3.0;
  cput_1m_120 = 7.0 * 3600.0;
  cpx_i = cpx_1m_120;
  cput_i = cput_1m_120;
  cput = cpx / cpx_i * cput_i;
  wallt = cput / nprocs;
  printf("wallt ~= %f min cput ~= %f hour cpx_d2n : cpx_inv ~= %f\n",
         wallt / 60.0, cput / 3600.0, cpx_d2n / cpx_inv);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpl   $0x4,-0x8(%rbp)
je     1168 <main+0x38>
lea    0xf06(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %edi,%edi
call   1050 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xf13(%rip),%rsi
lea    -0x44(%rbp),%rdx
mov    $0x0,%al
call   1040 <sscanf@plt>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xefc(%rip),%rsi
lea    -0x78(%rbp),%rdx
mov    $0x0,%al
call   1040 <sscanf@plt>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rdi
lea    0xedf(%rip),%rsi
lea    -0x48(%rbp),%rdx
mov    $0x0,%al
call   1040 <sscanf@plt>
mov    -0x44(%rbp),%esi
movsd  -0x78(%rbp),%xmm0
mov    -0x48(%rbp),%edx
lea    0xec9(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xede(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  0xe3b(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cltd
idivl  -0x48(%rbp)
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cltd
idivl  -0x48(%rbp)
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xddd(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdd1(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdc5(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
mov    -0x54(%rbp),%eax
add    -0x5c(%rbp),%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdl -0x50(%rbp),%xmm1
movsd  0xda8(%rip),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xd8c(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd80(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd74(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd60(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xd42(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12e0 <main+0x1b0>
movsd  -0x18(%rbp),%xmm0
lea    0xe1b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    12f3 <main+0x1c3>
movsd  -0x18(%rbp),%xmm0
lea    0xe32(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x30(%rbp),%xmm0
movsd  0xd28(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1322 <main+0x1f2>
movsd  -0x30(%rbp),%xmm0
lea    0xe34(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    1335 <main+0x205>
movsd  -0x30(%rbp),%xmm0
lea    0xe4b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x50(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x64(%rbp)
cvtsi2sdl -0x60(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  0xd06(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
movsd  0xced(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc84(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvtsi2sdl -0x64(%rbp),%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca1(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x82c80,-0x68(%rbp)
movl   $0x3931,-0x6c(%rbp)
cvtsi2sdl -0x68(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  0xc6e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm1
movsd  0xc55(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbec(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x6c(%rbp),%eax
imul   -0x6c(%rbp),%eax
imul   -0x6c(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  0xc19(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xbfc(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
divsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sdl -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  0xb86(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0xb6a(%rip),%xmm2
divsd  %xmm2,%xmm1
movsd  -0x90(%rbp),%xmm2
ff
divsd  -0x98(%rbp),%xmm2
ff
lea    0xcc4(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
lea    0xcef(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  0xb22(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cltd
idivl  -0x48(%rbp)
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cltd
idivl  -0x48(%rbp)
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xac4(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xab8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xaac(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
cvtsi2sdl -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa8d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa81(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa75(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
cvtsi2sdl -0x54(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa56(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa4a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa3e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa2a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
cvtsi2sdl -0x58(%rbp),%xmm0
cvtsi2sdl -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa13(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa07(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x9fb(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x9e7(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0x9ba(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1668 <main+0x538>
movsd  -0x20(%rbp),%xmm0
lea    0xbbd(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    167b <main+0x54b>
movsd  -0x20(%rbp),%xmm0
lea    0xbd5(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x28(%rbp),%xmm0
movsd  0x978(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16aa <main+0x57a>
movsd  -0x28(%rbp),%xmm0
lea    0xbd8(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    16bd <main+0x58d>
movsd  -0x28(%rbp),%xmm0
lea    0xbf0(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x38(%rbp),%xmm0
movsd  0x95e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16ec <main+0x5bc>
movsd  -0x38(%rbp),%xmm0
lea    0xbf3(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    16ff <main+0x5cf>
movsd  -0x38(%rbp),%xmm0
lea    0xc0b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x40(%rbp),%xmm0
movsd  0x91c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    172e <main+0x5fe>
movsd  -0x40(%rbp),%xmm0
lea    0xc0e(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    1741 <main+0x611>
movsd  -0x40(%rbp),%xmm0
lea    0xc26(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x30(%rbp),%xmm0
movsd  0x8da(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1770 <main+0x640>
movsd  -0x30(%rbp),%xmm0
lea    0xc29(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
jmp    1783 <main+0x653>
movsd  -0x30(%rbp),%xmm0
lea    0xc41(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x50(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x64(%rbp)
cvtsi2sdl -0x60(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  0x8b8(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
movsd  0x89f(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x836(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvtsi2sdl -0x64(%rbp),%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x853(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x82c80,-0x68(%rbp)
movl   $0x3931,-0x6c(%rbp)
cvtsi2sdl -0x68(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  0x820(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm1
movsd  0x807(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x79e(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x6c(%rbp),%eax
imul   -0x6c(%rbp),%eax
imul   -0x6c(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  0x7cb(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x7ae(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
divsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sdl -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  0x738(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0x71c(%rip),%xmm2
divsd  %xmm2,%xmm1
movsd  -0x90(%rbp),%xmm2
ff
divsd  -0x98(%rbp),%xmm2
ff
lea    0x876(%rip),%rdi
mov    $0x3,%al
call   1030 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x68,%rsp
cmp    $0x4,%edi
jne    1553 <main+0x413>
mov    %rsi,%rbx
mov    0x8(%rsi),%rdi
lea    0xf12(%rip),%r14
lea    0xc(%rsp),%rdx
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <sscanf@plt>
mov    0x10(%rbx),%rdi
lea    0xefb(%rip),%rsi
lea    0x18(%rsp),%rdx
xor    %eax,%eax
call   1050 <sscanf@plt>
mov    0x18(%rbx),%rdi
lea    0x8(%rsp),%rdx
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <sscanf@plt>
mov    0xc(%rsp),%esi
movsd  0x18(%rsp),%xmm0
mov    0x8(%rsp),%edx
lea    0xecb(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x11a0(%rip),%rdi
call   1030 <puts@plt>
movsd  0xe39(%rip),%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  %xmm0,%xmm1
cvttsd2si %xmm1,%eax
mov    0x8(%rsp),%edi
cltd
idiv   %edi
mov    %eax,%ecx
lea    0x1(%rcx),%ebx
mov    0xc(%rsp),%esi
add    $0x1,%esi
imul   %esi,%esi
mov    %esi,%eax
cltd
cvtsi2sd %esi,%xmm2
idiv   %edi
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm2,%xmm3
movsd  %xmm2,0x30(%rsp)
movsd  0xdf7(%rip),%xmm2
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
lea    0x2(%rcx,%rax,1),%eax
cvtsi2sd %eax,%xmm5
cvttpd2dq %xmm1,%xmm1
mulsd  %xmm2,%xmm0
cvtdq2pd %xmm1,%xmm4
movapd %xmm4,0x20(%rsp)
movsd  0xdd5(%rip),%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm3,%xmm5
addsd  %xmm1,%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm2,%xmm5
mulsd  0xdbd(%rip),%xmm5
movsd  %xmm5,0x10(%rsp)
ucomisd 0xdb7(%rip),%xmm0
lea    0xe2a(%rip),%rax
lea    0xe52(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x10(%rsp),%xmm0
ucomisd 0xd98(%rip),%xmm0
lea    0xe5e(%rip),%rax
lea    0xe86(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movapd 0x20(%rsp),%xmm0
addsd  %xmm0,%xmm0
addsd  0xd75(%rip),%xmm0
movapd %xmm0,%xmm1
movsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm2
addsd  0xd67(%rip),%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
mulsd  0xd5f(%rip),%xmm2
movapd %xmm0,%xmm3
mulsd  %xmm0,%xmm3
mulsd  %xmm0,%xmm3
divsd  0xd53(%rip),%xmm3
movapd %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  0xd4b(%rip),%xmm1
mulsd  0xd4b(%rip),%xmm1
xorps  %xmm4,%xmm4
cvtsi2sdl 0x8(%rsp),%xmm4
movapd %xmm1,%xmm0
divsd  %xmm4,%xmm0
divsd  0xd3a(%rip),%xmm0
divsd  0xd3a(%rip),%xmm1
divsd  %xmm3,%xmm2
lea    0xe17(%rip),%rbx
mov    %rbx,%rdi
mov    $0x3,%al
call   1040 <printf@plt>
lea    0x104a(%rip),%rdi
call   1030 <puts@plt>
movsd  0xca9(%rip),%xmm0
mulsd  0x18(%rsp),%xmm0
movapd %xmm0,0x30(%rsp)
cvttsd2si %xmm0,%eax
cltd
idivl  0x8(%rsp)
add    $0x1,%eax
mov    0xc(%rsp),%ecx
add    $0x1,%ecx
imul   %ecx,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
movsd  %xmm2,0x10(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm2,%xmm0
movsd  0xc6f(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm2,%xmm3
mulsd  %xmm2,%xmm3
movsd  %xmm3,0x20(%rsp)
movapd %xmm3,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x48(%rsp)
movapd %xmm0,%xmm3
movsd  0xc43(%rip),%xmm1
mulsd  %xmm1,%xmm3
movsd  %xmm3,0x50(%rsp)
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x58(%rsp)
movapd %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x60(%rsp)
ucomisd 0xc21(%rip),%xmm0
lea    0xd83(%rip),%rax
lea    0xdac(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x48(%rsp),%xmm0
ucomisd 0xbfa(%rip),%xmm0
lea    0xdb9(%rip),%rax
lea    0xde2(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x50(%rsp),%xmm0
ucomisd 0xbdb(%rip),%xmm0
lea    0xdef(%rip),%rax
lea    0xe18(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x58(%rsp),%xmm0
ucomisd 0xbb4(%rip),%xmm0
lea    0xe25(%rip),%rax
lea    0xe4e(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x60(%rsp),%xmm0
ucomisd 0xb8d(%rip),%xmm0
lea    0xe5b(%rip),%rax
lea    0xe84(%rip),%rdi
cmova  %rax,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
cvttpd2dq 0x30(%rsp),%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  %xmm0,%xmm0
addsd  0xb66(%rip),%xmm0
movsd  0xb66(%rip),%xmm2
movsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
mulsd  0xb54(%rip),%xmm2
movsd  0x20(%rsp),%xmm0
mulsd  %xmm1,%xmm0
divsd  0xb4a(%rip),%xmm0
movapd %xmm0,%xmm1
movapd %xmm0,%xmm4
addsd  %xmm2,%xmm1
divsd  0xb3e(%rip),%xmm1
mulsd  0xb3e(%rip),%xmm1
xorps  %xmm3,%xmm3
cvtsi2sdl 0x8(%rsp),%xmm3
movapd %xmm1,%xmm0
divsd  %xmm3,%xmm0
divsd  0xb2d(%rip),%xmm0
divsd  0xb2d(%rip),%xmm1
divsd  %xmm4,%xmm2
mov    %rbx,%rdi
mov    $0x3,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r14
ret
lea    0xe74(%rip),%rdi
call   1030 <puts@plt>
xor    %edi,%edi
call   1060 <exit@plt>

LLVM IR (-O0):
@.str = [42 x i8] c"usage: L2precheck nmax month_data nprocs\0A\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [4 x i8] c"%lf\00"
@.str.3 = [35 x i8] c"nmax = %d month = %.2f nodes = %d\0A\00"
@.str.4 = [59 x i8] c"\0A!!!!!!!!!!!!!! Design Matrix Accumulation !!!!!!!!!!!!!!\0A\00"
@.str.5 = [47 x i8] c"int_lim ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.6 = [44 x i8] c"int_lim ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.7 = [47 x i8] c"mem_lim ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.8 = [44 x i8] c"mem_lim ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.9 = [57 x i8] c"wallt ~= %f min cput ~= %f hour cpx_d2n : cpx_inv ~= %f\0A\00"
@.str.10 = [59 x i8] c"\0A!!!!!!!!!!!!!! Normal Matrix Accumulation !!!!!!!!!!!!!!\0A\00"
@.str.11 = [48 x i8] c"int_data ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.12 = [45 x i8] c"int_data ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.13 = [48 x i8] c"int_para ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.14 = [45 x i8] c"int_para ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.15 = [48 x i8] c"mem_data ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.16 = [45 x i8] c"mem_data ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.17 = [48 x i8] c"mem_para ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.18 = [45 x i8] c"mem_para ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.19 = [48 x i8] c"mem_all ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.20 = [45 x i8] c"mem_all ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%33 = load i32, i32* %4
%34 = icmp ne i32 %33, 4
br i1 %34, label %35, label %37
35: ; preds = %2
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str, i64 0, i64 0))
unreachable
37: ; preds = %2
%38 = load i8**, i8*** %5
%39 = getelementptr inbounds i8*, i8** %38, i64 1
%40 = load i8*, i8** %39
%41 = call i32 (i8*, i8*, ...) @sscanf(i8* %40, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %12)
%42 = load i8**, i8*** %5
%43 = getelementptr inbounds i8*, i8** %42, i64 2
%44 = load i8*, i8** %43
%45 = call i32 (i8*, i8*, ...) @sscanf(i8* %44, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), double* %23)
%46 = load i8**, i8*** %5
%47 = getelementptr inbounds i8*, i8** %46, i64 3
%48 = load i8*, i8** %47
%49 = call i32 (i8*, i8*, ...) @sscanf(i8* %48, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %13)
br label %50
50: ; preds = %37
%51 = load i32, i32* %12
%52 = load double, double* %23
%53 = load i32, i32* %13
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i32 %51, double %52, i32 %53)
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.4, i64 0, i64 0))
%56 = load double, double* %23
%57 = fmul double 5.356800e+05, %56
%58 = fptosi double %57 to i32
store i32 %58, i32* %15
%59 = load i32, i32* %15
%60 = load i32, i32* %13
%61 = sdiv i32 %59, %60
%62 = add nsw i32 %61, 1
store i32 %62, i32* %16
%63 = load i32, i32* %12
%64 = add nsw i32 %63, 1
%65 = load i32, i32* %12
%66 = add nsw i32 %65, 1
%67 = mul nsw i32 %64, %66
store i32 %67, i32* %17
%68 = load i32, i32* %17
%69 = load i32, i32* %13
%70 = sdiv i32 %68, %69
%71 = add nsw i32 %70, 1
store i32 %71, i32* %18
%72 = load i32, i32* %17
%73 = sitofp i32 %72 to double
%74 = load i32, i32* %16
%75 = sitofp i32 %74 to double
%76 = fmul double %73, %75
%77 = fdiv double %76, 1.024000e+03
%78 = fdiv double %77, 1.024000e+03
%79 = fdiv double %78, 1.024000e+03
store double %79, double* %6
%80 = load i32, i32* %17
%81 = sitofp i32 %80 to double
%82 = load i32, i32* %16
%83 = load i32, i32* %18
%84 = add nsw i32 %82, %83
%85 = sitofp i32 %84 to double
%86 = load i32, i32* %15
%87 = sitofp i32 %86 to double
%88 = fmul double %87, 1.000000e+01
%89 = call double @llvm.fmuladd.f64(double %81, double %85, double %88)
%90 = fdiv double %89, 1.024000e+03
%91 = fdiv double %90, 1.024000e+03
%92 = fdiv double %91, 1.024000e+03
%93 = fmul double %92, 8.000000e+00
store double %93, double* %9
%94 = load double, double* %6
%95 = fcmp ogt double %94, 2.000000e+00
br i1 %95, label %96, label %99
96: ; preds = %50
%97 = load double, double* %6
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.5, i64 0, i64 0), double %97)
br label %102
99: ; preds = %50
%100 = load double, double* %6
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.6, i64 0, i64 0), double %100)
br label %102
102: ; preds = %99, %96
%103 = load double, double* %9
%104 = fcmp ogt double %103, 4.000000e+00
br i1 %104, label %105, label %108
105: ; preds = %102
%106 = load double, double* %9
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.7, i64 0, i64 0), double %106)
br label %111
108: ; preds = %102
%109 = load double, double* %9
%110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.8, i64 0, i64 0), double %109)
br label %111
111: ; preds = %108, %105
%112 = load i32, i32* %15
store i32 %112, i32* %19
%113 = load i32, i32* %17
store i32 %113, i32* %20
%114 = load i32, i32* %19
%115 = sitofp i32 %114 to double
%116 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %115, double -1.000000e+00)
%117 = load i32, i32* %20
%118 = sitofp i32 %117 to double
%119 = fadd double %118, 1.000000e+00
%120 = fmul double %116, %119
%121 = load i32, i32* %20
%122 = sitofp i32 %121 to double
%123 = fmul double %120, %122
%124 = fdiv double %123, 2.000000e+00
store double %124, double* %26
%125 = load i32, i32* %20
%126 = sitofp i32 %125 to double
%127 = load i32, i32* %20
%128 = sitofp i32 %127 to double
%129 = fmul double %126, %128
%130 = load i32, i32* %20
%131 = sitofp i32 %130 to double
%132 = fmul double %129, %131
%133 = fdiv double %132, 3.000000e+00
store double %133, double* %27
%134 = load double, double* %26
%135 = load double, double* %27
%136 = fadd double %134, %135
store double %136, double* %25
store i32 535680, i32* %21
store i32 14641, i32* %22
%137 = load i32, i32* %21
%138 = sitofp i32 %137 to double
%139 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %138, double -1.000000e+00)
%140 = load i32, i32* %22
%141 = sitofp i32 %140 to double
%142 = fadd double %141, 1.000000e+00
%143 = fmul double %139, %142
%144 = load i32, i32* %22
%145 = sitofp i32 %144 to double
%146 = fmul double %143, %145
%147 = fdiv double %146, 2.000000e+00
%148 = load i32, i32* %22
%149 = load i32, i32* %22
%150 = mul nsw i32 %148, %149
%151 = load i32, i32* %22
%152 = mul nsw i32 %150, %151
%153 = sitofp i32 %152 to double
%154 = fdiv double %153, 3.000000e+00
%155 = fadd double %147, %154
store double %155, double* %24
store double 2.520000e+04, double* %31
%156 = load double, double* %24
store double %156, double* %28
%157 = load double, double* %31
store double %157, double* %29
%158 = load double, double* %25
%159 = load double, double* %28
%160 = fdiv double %158, %159
%161 = load double, double* %29
%162 = fmul double %160, %161
store double %162, double* %30
%163 = load double, double* %30
%164 = load i32, i32* %13
%165 = sitofp i32 %164 to double
%166 = fdiv double %163, %165
store double %166, double* %32
%167 = load double, double* %32
%168 = fdiv double %167, 6.000000e+01
%169 = load double, double* %30
%170 = fdiv double %169, 3.600000e+03
%171 = load double, double* %26
%172 = load double, double* %27
%173 = fdiv double %171, %172
%174 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.9, i64 0, i64 0), double %168, double %170, double %173)
%175 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.10, i64 0, i64 0))
%176 = load double, double* %23
%177 = fmul double 5.356800e+05, %176
%178 = fptosi double %177 to i32
store i32 %178, i32* %15
%179 = load i32, i32* %15
%180 = load i32, i32* %13
%181 = sdiv i32 %179, %180
%182 = add nsw i32 %181, 1
store i32 %182, i32* %16
%183 = load i32, i32* %12
%184 = add nsw i32 %183, 1
%185 = load i32, i32* %12
%186 = add nsw i32 %185, 1
%187 = mul nsw i32 %184, %186
store i32 %187, i32* %17
%188 = load i32, i32* %17
%189 = load i32, i32* %13
%190 = sdiv i32 %188, %189
%191 = add nsw i32 %190, 1
store i32 %191, i32* %18
%192 = load i32, i32* %17
%193 = sitofp i32 %192 to double
%194 = load i32, i32* %16
%195 = sitofp i32 %194 to double
%196 = fmul double %193, %195
%197 = fdiv double %196, 1.024000e+03
%198 = fdiv double %197, 1.024000e+03
%199 = fdiv double %198, 1.024000e+03
store double %199, double* %7
%200 = load i32, i32* %17
%201 = sitofp i32 %200 to double
%202 = load i32, i32* %17
%203 = sitofp i32 %202 to double
%204 = fmul double %201, %203
%205 = fdiv double %204, 1.024000e+03
%206 = fdiv double %205, 1.024000e+03
%207 = fdiv double %206, 1.024000e+03
store double %207, double* %8
%208 = load i32, i32* %17
%209 = sitofp i32 %208 to double
%210 = load i32, i32* %16
%211 = sitofp i32 %210 to double
%212 = fmul double %209, %211
%213 = fdiv double %212, 1.024000e+03
%214 = fdiv double %213, 1.024000e+03
%215 = fdiv double %214, 1.024000e+03
%216 = fmul double %215, 8.000000e+00
store double %216, double* %10
%217 = load i32, i32* %17
%218 = sitofp i32 %217 to double
%219 = load i32, i32* %17
%220 = sitofp i32 %219 to double
%221 = fmul double %218, %220
%222 = fdiv double %221, 1.024000e+03
%223 = fdiv double %222, 1.024000e+03
%224 = fdiv double %223, 1.024000e+03
%225 = fmul double %224, 8.000000e+00
store double %225, double* %11
%226 = load double, double* %10
%227 = load double, double* %11
%228 = fadd double %226, %227
store double %228, double* %9
%229 = load double, double* %7
%230 = fcmp ogt double %229, 2.000000e+00
br i1 %230, label %231, label %234
231: ; preds = %111
%232 = load double, double* %7
%233 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.11, i64 0, i64 0), double %232)
br label %237
234: ; preds = %111
%235 = load double, double* %7
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.12, i64 0, i64 0), double %235)
br label %237
237: ; preds = %234, %231
%238 = load double, double* %8
%239 = fcmp ogt double %238, 2.000000e+00
br i1 %239, label %240, label %243
240: ; preds = %237
%241 = load double, double* %8
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.13, i64 0, i64 0), double %241)
br label %246
243: ; preds = %237
%244 = load double, double* %8
%245 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.14, i64 0, i64 0), double %244)
br label %246
246: ; preds = %243, %240
%247 = load double, double* %10
%248 = fcmp ogt double %247, 4.000000e+00
br i1 %248, label %249, label %252
249: ; preds = %246
%250 = load double, double* %10
%251 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.15, i64 0, i64 0), double %250)
br label %255
252: ; preds = %246
%253 = load double, double* %10
%254 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.16, i64 0, i64 0), double %253)
br label %255
255: ; preds = %252, %249
%256 = load double, double* %11
%257 = fcmp ogt double %256, 4.000000e+00
br i1 %257, label %258, label %261
258: ; preds = %255
%259 = load double, double* %11
%260 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.17, i64 0, i64 0), double %259)
br label %264
261: ; preds = %255
%262 = load double, double* %11
%263 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.18, i64 0, i64 0), double %262)
br label %264
264: ; preds = %261, %258
%265 = load double, double* %9
%266 = fcmp ogt double %265, 4.000000e+00
br i1 %266, label %267, label %270
267: ; preds = %264
%268 = load double, double* %9
%269 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.19, i64 0, i64 0), double %268)
br label %273
270: ; preds = %264
%271 = load double, double* %9
%272 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.20, i64 0, i64 0), double %271)
br label %273
273: ; preds = %270, %267
%274 = load i32, i32* %15
store i32 %274, i32* %19
%275 = load i32, i32* %17
store i32 %275, i32* %20
%276 = load i32, i32* %19
%277 = sitofp i32 %276 to double
%278 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %277, double -1.000000e+00)
%279 = load i32, i32* %20
%280 = sitofp i32 %279 to double
%281 = fadd double %280, 1.000000e+00
%282 = fmul double %278, %281
%283 = load i32, i32* %20
%284 = sitofp i32 %283 to double
%285 = fmul double %282, %284
%286 = fdiv double %285, 2.000000e+00
store double %286, double* %26
%287 = load i32, i32* %20
%288 = sitofp i32 %287 to double
%289 = load i32, i32* %20
%290 = sitofp i32 %289 to double
%291 = fmul double %288, %290
%292 = load i32, i32* %20
%293 = sitofp i32 %292 to double
%294 = fmul double %291, %293
%295 = fdiv double %294, 3.000000e+00
store double %295, double* %27
%296 = load double, double* %26
%297 = load double, double* %27
%298 = fadd double %296, %297
store double %298, double* %25
store i32 535680, i32* %21
store i32 14641, i32* %22
%299 = load i32, i32* %21
%300 = sitofp i32 %299 to double
%301 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %300, double -1.000000e+00)
%302 = load i32, i32* %22
%303 = sitofp i32 %302 to double
%304 = fadd double %303, 1.000000e+00
%305 = fmul double %301, %304
%306 = load i32, i32* %22
%307 = sitofp i32 %306 to double
%308 = fmul double %305, %307
%309 = fdiv double %308, 2.000000e+00
%310 = load i32, i32* %22
%311 = load i32, i32* %22
%312 = mul nsw i32 %310, %311
%313 = load i32, i32* %22
%314 = mul nsw i32 %312, %313
%315 = sitofp i32 %314 to double
%316 = fdiv double %315, 3.000000e+00
%317 = fadd double %309, %316
store double %317, double* %24
store double 2.520000e+04, double* %31
%318 = load double, double* %24
store double %318, double* %28
%319 = load double, double* %31
store double %319, double* %29
%320 = load double, double* %25
%321 = load double, double* %28
%322 = fdiv double %320, %321
%323 = load double, double* %29
%324 = fmul double %322, %323
store double %324, double* %30
%325 = load double, double* %30
%326 = load i32, i32* %13
%327 = sitofp i32 %326 to double
%328 = fdiv double %325, %327
store double %328, double* %32
%329 = load double, double* %32
%330 = fdiv double %329, 6.000000e+01
%331 = load double, double* %30
%332 = fdiv double %331, 3.600000e+03
%333 = load double, double* %26
%334 = load double, double* %27
%335 = fdiv double %333, %334
%336 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.9, i64 0, i64 0), double %330, double %332, double %335)
%337 = load i32, i32* %3
ret i32 %337
}

LLVM IR (-O2):
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [4 x i8] c"%lf\00"
@.str.3 = [35 x i8] c"nmax = %d month = %.2f nodes = %d\0A\00"
@.str.5 = [47 x i8] c"int_lim ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.6 = [44 x i8] c"int_lim ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.7 = [47 x i8] c"mem_lim ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.8 = [44 x i8] c"mem_lim ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.9 = [57 x i8] c"wallt ~= %f min cput ~= %f hour cpx_d2n : cpx_inv ~= %f\0A\00"
@.str.11 = [48 x i8] c"int_data ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.12 = [45 x i8] c"int_data ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.13 = [48 x i8] c"int_para ~= %9.3fG > INT_LIM (2G) : warning!!!\0A\00"
@.str.14 = [45 x i8] c"int_para ~= %9.3fG < INT_LIM (2G) : safe~~~\0A\00"
@.str.15 = [48 x i8] c"mem_data ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.16 = [45 x i8] c"mem_data ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.17 = [48 x i8] c"mem_para ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.18 = [45 x i8] c"mem_para ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@.str.19 = [48 x i8] c"mem_all ~= %9.3fG > MEM_LIM (4G) : warning!!!\0A\00"
@.str.20 = [45 x i8] c"mem_all ~= %9.3fG < MEM_LIM (4G) : safe~~~\0A\00"
@str = [58 x i8] c"\0A!!!!!!!!!!!!!! Design Matrix Accumulation !!!!!!!!!!!!!!\00"
@str.21 = [58 x i8] c"\0A!!!!!!!!!!!!!! Normal Matrix Accumulation !!!!!!!!!!!!!!\00"
@str.22 = [41 x i8] c"usage: L2precheck nmax month_data nprocs\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca double
%6 = bitcast i32* %3 to i8*
%7 = bitcast i32* %4 to i8*
%8 = bitcast double* %5 to i8*
%9 = icmp eq i32 %0, 4
br i1 %9, label %12, label %10
10: ; preds = %2
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.22, i64 0, i64 0))
tail call void @exit(i32 0)
unreachable
12: ; preds = %2
%13 = getelementptr inbounds i8*, i8** %1, i64 1
%14 = load i8*, i8** %13
%15 = call i32 (i8*, i8*, ...) @sscanf(i8* %14, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %3)
%16 = getelementptr inbounds i8*, i8** %1, i64 2
%17 = load i8*, i8** %16
%18 = call i32 (i8*, i8*, ...) @sscanf(i8* %17, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), double* %5)
%19 = getelementptr inbounds i8*, i8** %1, i64 3
%20 = load i8*, i8** %19
%21 = call i32 (i8*, i8*, ...) @sscanf(i8* %20, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %4)
%22 = load i32, i32* %3
%23 = load double, double* %5
%24 = load i32, i32* %4
%25 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i32 %22, double %23, i32 %24)
%26 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str, i64 0, i64 0))
%27 = load double, double* %5
%28 = fmul double %27, 5.356800e+05
%29 = fptosi double %28 to i32
%30 = load i32, i32* %4
%31 = sdiv i32 %29, %30
%32 = add nsw i32 %31, 1
%33 = load i32, i32* %3
%34 = add nsw i32 %33, 1
%35 = mul nsw i32 %34, %34
%36 = sdiv i32 %35, %30
%37 = sitofp i32 %35 to double
%38 = sitofp i32 %32 to double
%39 = fmul double %38, %37
%40 = fmul double %39, 0x3F50000000000000
%41 = fmul double %40, 0x3F50000000000000
%42 = fmul double %41, 0x3F50000000000000
%43 = add i32 %31, 2
%44 = add i32 %43, %36
%45 = sitofp i32 %44 to double
%46 = sitofp i32 %29 to double
%47 = fmul double %46, 1.000000e+01
%48 = call double @llvm.fmuladd.f64(double %37, double %45, double %47)
%49 = fmul double %48, 0x3F50000000000000
%50 = fmul double %49, 0x3F50000000000000
%51 = fmul double %50, 0x3F50000000000000
%52 = fmul double %51, 8.000000e+00
%53 = fcmp ogt double %42, 2.000000e+00
%54 = select i1 %53, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.6, i64 0, i64 0)
%55 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %54, double %42)
%56 = fcmp ogt double %52, 4.000000e+00
%57 = select i1 %56, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.8, i64 0, i64 0)
%58 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %57, double %52)
%59 = call double @llvm.fmuladd.f64(double %46, double 2.000000e+00, double -1.000000e+00)
%60 = fadd double %37, 1.000000e+00
%61 = fmul double %59, %60
%62 = fmul double %61, %37
%63 = fmul double %62, 5.000000e-01
%64 = fmul double %37, %37
%65 = fmul double %64, %37
%66 = fdiv double %65, 3.000000e+00
%67 = fadd double %66, %63
%68 = fdiv double %67, 0x42DA1C4863578F2B
%69 = fmul double %68, 2.520000e+04
%70 = load i32, i32* %4
%71 = sitofp i32 %70 to double
%72 = fdiv double %69, %71
%73 = fdiv double %72, 6.000000e+01
%74 = fdiv double %69, 3.600000e+03
%75 = fdiv double %63, %66
%76 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @.str.9, i64 0, i64 0), double %73, double %74, double %75)
%77 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.21, i64 0, i64 0))
%78 = load double, double* %5
%79 = fmul double %78, 5.356800e+05
%80 = fptosi double %79 to i32
%81 = load i32, i32* %4
%82 = sdiv i32 %80, %81
%83 = add nsw i32 %82, 1
%84 = load i32, i32* %3
%85 = add nsw i32 %84, 1
%86 = mul nsw i32 %85, %85
%87 = sitofp i32 %86 to double
%88 = sitofp i32 %83 to double
%89 = fmul double %88, %87
%90 = fmul double %89, 0x3F50000000000000
%91 = fmul double %90, 0x3F50000000000000
%92 = fmul double %91, 0x3F50000000000000
%93 = fmul double %87, %87
%94 = fmul double %93, 0x3F50000000000000
%95 = fmul double %94, 0x3F50000000000000
%96 = fmul double %95, 0x3F50000000000000
%97 = fmul double %92, 8.000000e+00
%98 = fmul double %96, 8.000000e+00
%99 = fadd double %97, %98
%100 = fcmp ogt double %92, 2.000000e+00
%101 = select i1 %100, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.12, i64 0, i64 0)
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %101, double %92)
%103 = fcmp ogt double %96, 2.000000e+00
%104 = select i1 %103, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.14, i64 0, i64 0)
%105 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %104, double %96)
%106 = fcmp ogt double %97, 4.000000e+00
%107 = select i1 %106, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.15, i64 0, i64 0), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.16, i64 0, i64 0)
%108 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %107, double %97)
%109 = fcmp ogt double %98, 4.000000e+00
%110 = select i1 %109, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.17, i64 0, i64 0), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.18, i64 0, i64 0)
%111 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %110, double %98)
%112 = fcmp ogt double %99, 4.000000e+00
%113 = select i1 %112, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.20, i64 0, i64 0)
%114 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) %113, double %99)
%115 = sitofp i32 %80 to double
%116 = call double @llvm.fmuladd.f64(double %115, double 2.000000e+00, double -1.000000e+00)
%117 = fadd double %87, 1.000000e+00
%118 = fmul double %116, %117
%119 = fmul double %118, %87
%120 = fmul double %119, 5.000000e-01
%121 = fmul double %93, %87
%122 = fdiv double %121, 3.000000e+00
%123 = fadd double %122, %120
%124 = fdiv double %123, 0x42DA1C4863578F2B
%125 = fmul double %124, 2.520000e+04
%126 = load i32, i32* %4
%127 = sitofp i32 %126 to double
%128 = fdiv double %125, %127
%129 = fdiv double %128, 6.000000e+01
%130 = fdiv double %125, 3.600000e+03
%131 = fdiv double %120, %122
%132 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @.str.9, i64 0, i64 0), double %129, double %130, double %131)
ret i32 0
}