void kEpsilon_2D_Evaluate_sd(
    int nPoints, int nSpace, double sigma_k, double sigma_e, double c_1,
    double c_2, double c_mu, double c_e, double nu, double *velocity,
    double *gradu, double *gradv, double *k, double *epsilon, double *m_k,
    double *dm_k, double *m_e, double *dm_e, double *phi_k, double *dphi_k,
    double *phi_e, double *dphi_e, double *f_k, double *df_k, double *f_e,
    double *df_e, double *a_k, double *da_k_dk, double *da_k_de, double *a_e,
    double *da_e_dk, double *da_e_de, double *r_k, double *dr_k_dk,
    double *dr_k_de, double *r_e, double *dr_e_dk, double *dr_e_de) {
  int i, I;
  double nu_t, dnu_t_dk, dnu_t_de, PiD4, eval, kval, disp, ddisp_dk, ddisp_de;
  const double div_eps = 1.0e-6;
  for (i = 0; i < nPoints; i++) {
    eval = epsilon[i] >= 0.0 ? epsilon[i] : 0.0;
    kval = k[i] >= 0.0 ? k[i] : 0.0;
    nu_t = c_mu * k[i] * k[i] / (epsilon[i] + div_eps);
    dnu_t_dk = 2.0 * c_mu * k[i] / (epsilon[i] + div_eps);
    dnu_t_de = -c_mu * k[i] * k[i] / (epsilon[i] * epsilon[i] + div_eps);
    if (nu_t < 0.0) {
      nu_t = 0.0;
      dnu_t_dk = 0.0;
      dnu_t_de = 0.0;
    }
    m_k[i] = k[i];
    dm_k[i] = 1.0;
    m_e[i] = epsilon[i];
    dm_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      f_k[i * nSpace + I] = k[i] * velocity[i * nSpace + I];
      df_k[i * nSpace + I] = velocity[i * nSpace + I];
      f_e[i * nSpace + I] = epsilon[i] * velocity[i * nSpace + I];
      df_e[i * nSpace + I] = velocity[i * nSpace + I];
    }
    phi_k[i] = k[i];
    dphi_k[i] = 1.0;
    phi_e[i] = epsilon[i];
    dphi_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      a_k[i * 2 + I] = nu_t / sigma_k + nu;
      da_k_dk[i * 2 + I] = dnu_t_dk / sigma_k;
      da_k_de[i * 2 + I] = dnu_t_de / sigma_k;
      a_e[i * 2 + I] = nu_t / sigma_e + nu;
      da_e_dk[i * 2 + I] = dnu_t_dk / sigma_e;
      da_e_de[i * 2 + I] = dnu_t_de / sigma_e;
    }
    PiD4 = 2.0 * (gradu[i * nSpace + 0] * gradu[i * nSpace + 0] +
                  gradv[i * nSpace + 1] * gradv[i * nSpace + 1]) +
           (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]) *
               (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]);
    r_k[i] = -nu_t * PiD4 + epsilon[i];
    dr_k_dk[i] = -dnu_t_dk * PiD4;
    dr_k_de[i] = -dnu_t_de * PiD4 + 1.0;
    disp = c_2 * epsilon[i] * epsilon[i] / (k[i] + div_eps);
    ddisp_dk = -c_2 * epsilon[i] * epsilon[i] / (k[i] * k[i] + div_eps);
    ddisp_de = 2.0 * c_2 * epsilon[i] / (k[i] + div_eps);
    if (disp < 0.0) {
      disp = 0.0;
      ddisp_dk = 0.0;
      ddisp_de = 0.0;
    }
    r_e[i] = -c_1 * k[i] * PiD4 + disp;
    dr_e_dk[i] = -c_1 * PiD4 + ddisp_dk;
    dr_e_de[i] = ddisp_de;
  }
}


x86 assembly (clang, -O0):
<kEpsilon_2D_Evaluate_sd>:
push   %rbp
mov    %rsp,%rbp
sub    $0x48,%rsp
mov    0xd0(%rbp),%rax
mov    0xc8(%rbp),%rax
mov    0xc0(%rbp),%rax
mov    0xb8(%rbp),%rax
mov    0xb0(%rbp),%rax
mov    0xa8(%rbp),%rax
mov    0xa0(%rbp),%rax
mov    0x98(%rbp),%rax
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
mov    %rdx,-0x48(%rbp)
mov    %rcx,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
mov    %r9,-0x60(%rbp)
movsd  0xe32(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1991 <kEpsilon_2D_Evaluate_sd+0x891>
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     121d <kEpsilon_2D_Evaluate_sd+0x11d>
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    122d <kEpsilon_2D_Evaluate_sd+0x12d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    122d <kEpsilon_2D_Evaluate_sd+0x12d>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1271 <kEpsilon_2D_Evaluate_sd+0x171>
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    1281 <kEpsilon_2D_Evaluate_sd+0x181>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    1281 <kEpsilon_2D_Evaluate_sd+0x181>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xd40(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xd32(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xd08(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc9e(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    1395 <kEpsilon_2D_Evaluate_sd+0x295>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x20(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xc51(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x30(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xc22(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    14de <kEpsilon_2D_Evaluate_sd+0x3de>
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x60(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x68(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x70(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%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    13fa <kEpsilon_2D_Evaluate_sd+0x2fa>
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xb08(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x48(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x50(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0xad9(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1630 <kEpsilon_2D_Evaluate_sd+0x530>
movsd  -0x70(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    0x78(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    0x80(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    0x88(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
mov    0x90(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
mov    0x98(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
mov    0xa0(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x1,%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    1543 <kEpsilon_2D_Evaluate_sd+0x443>
mov    -0x50(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x50(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x58(%rbp),%rax
mov    -0x64(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xa8(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    0xb0(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  0x867(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    0xb8(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x28(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0x814(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
movsd  0x7a7(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x797(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  0x76d(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xa0(%rbp),%xmm0
ff
jbe    18d6 <kEpsilon_2D_Evaluate_sd+0x7d6>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x60(%rbp),%rax
movslq -0x64(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xc0(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xc8(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0xd0(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    11dd <kEpsilon_2D_Evaluate_sd+0xdd>
add    $0x48,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kEpsilon_2D_Evaluate_sd>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r8,-0x28(%rsp)
mov    %rcx,-0x30(%rsp)
movsd  %xmm6,-0x60(%rsp)
movapd %xmm4,(%rsp)
movapd %xmm3,-0x10(%rsp)
mov    %esi,-0x74(%rsp)
test   %edi,%edi
jle    1622 <kEpsilon_2D_Evaluate_sd+0x522>
mov    %r9,%rsi
mov    0x100(%rsp),%rax
mov    0xf8(%rsp),%rbx
mov    0xf0(%rsp),%rbp
mov    0xe8(%rsp),%r10
mov    0xe0(%rsp),%r11
mov    0xd8(%rsp),%r14
mov    0xd0(%rsp),%r9
mov    0xc8(%rsp),%r12
movapd (%rsp),%xmm4
movapd %xmm4,%xmm3
addsd  %xmm4,%xmm3
movapd 0xe73(%rip),%xmm5
xorpd  %xmm5,%xmm4
movapd %xmm4,0x20(%rsp)
movapd -0x10(%rsp),%xmm4
movapd %xmm4,%xmm13
xorpd  %xmm5,%xmm13
addsd  %xmm4,%xmm4
movapd %xmm4,0x10(%rsp)
xorpd  %xmm5,%xmm2
mov    %edi,%ecx
mov    %rcx,-0x38(%rsp)
movsd  0xe4b(%rip),%xmm14
mov    0xc0(%rsp),%r13
mov    0xb8(%rsp),%r15
movslq -0x74(%rsp),%r8
mov    %r8d,%edi
mov    %r8,-0x40(%rsp)
lea    0x0(,%r8,8),%rcx
mov    %rcx,-0x48(%rsp)
lea    0x0(,%rdi,8),%rcx
xor    %r8d,%r8d
mov    %rsi,-0x50(%rsp)
mov    %rcx,-0x58(%rsp)
jmp    12c8 <kEpsilon_2D_Evaluate_sd+0x1c8>
nopl   0x0(%rax)
movapd %xmm8,%xmm4
mulsd  %xmm13,%xmm4
mulsd  %xmm8,%xmm4
movapd %xmm7,%xmm6
mulsd  %xmm7,%xmm6
addsd  %xmm14,%xmm6
divsd  %xmm6,%xmm4
xorpd  %xmm6,%xmm6
maxsd  %xmm5,%xmm6
cmpltsd %xmm15,%xmm5
andnpd %xmm4,%xmm5
mulsd  %xmm2,%xmm7
mulsd  %xmm11,%xmm7
addsd  %xmm6,%xmm7
mov    0x120(%rsp),%rax
movsd  %xmm7,(%rax,%r8,8)
mulsd  %xmm2,%xmm11
addsd  %xmm5,%xmm11
mov    0x128(%rsp),%rax
movsd  %xmm11,(%rax,%r8,8)
mov    0x130(%rsp),%rax
movsd  %xmm12,(%rax,%r8,8)
add    $0x1,%r8
mov    -0x48(%rsp),%rax
add    %rax,%rdx
add    %rax,%r15
add    %rax,%r13
add    %rax,%r12
add    %rax,%r9
mov    -0x18(%rsp),%rax
add    $0x10,%rax
mov    -0x20(%rsp),%rbx
add    $0x10,%rbx
add    $0x10,%rbp
add    $0x10,%r10
add    $0x10,%r11
add    $0x10,%r14
cmp    -0x38(%rsp),%r8
je     1622 <kEpsilon_2D_Evaluate_sd+0x522>
mov    %r9,-0x70(%rsp)
mov    %rbp,-0x68(%rsp)
mov    0x70(%rsp),%rbp
movsd  0x0(%rbp,%r8,8),%xmm8
movsd  (%rsi,%r8,8),%xmm11
movapd %xmm11,%xmm5
mulsd  (%rsp),%xmm5
mulsd  %xmm11,%xmm5
movapd %xmm8,%xmm7
addsd  %xmm14,%xmm7
divsd  %xmm7,%xmm5
xorpd  %xmm9,%xmm9
ucomisd %xmm5,%xmm9
xorpd  %xmm6,%xmm6
ja     1330 <kEpsilon_2D_Evaluate_sd+0x230>
movapd %xmm11,%xmm6
mulsd  0x20(%rsp),%xmm6
mulsd  %xmm11,%xmm6
mulsd  %xmm8,%xmm8
addsd  %xmm14,%xmm8
divsd  %xmm8,%xmm6
movapd %xmm3,%xmm4
mulsd  %xmm11,%xmm4
divsd  %xmm7,%xmm4
movapd %xmm5,%xmm10
cmpltsd %xmm9,%xmm10
andnpd %xmm4,%xmm10
maxsd  %xmm5,%xmm9
mov    0x78(%rsp),%rcx
movsd  %xmm11,(%rcx,%r8,8)
mov    0x80(%rsp),%rcx
movabs $0x3ff0000000000000,%r9
mov    %r9,(%rcx,%r8,8)
movsd  0x0(%rbp,%r8,8),%xmm4
mov    0x88(%rsp),%rcx
movsd  %xmm4,(%rcx,%r8,8)
mov    0x90(%rsp),%rcx
mov    %r9,(%rcx,%r8,8)
cmpl   $0x0,-0x74(%rsp)
jle    14d0 <kEpsilon_2D_Evaluate_sd+0x3d0>
xor    %ecx,%ecx
mov    -0x70(%rsp),%r9
cs nopw 0x0(%rax,%rax,1)
movsd  (%rsi,%r8,8),%xmm4
mulsd  (%rdx,%rcx,8),%xmm4
movsd  %xmm4,(%r15,%rcx,8)
movsd  (%rdx,%rcx,8),%xmm4
movsd  %xmm4,0x0(%r13,%rcx,8)
movsd  0x0(%rbp,%r8,8),%xmm4
mulsd  (%rdx,%rcx,8),%xmm4
movsd  %xmm4,(%r12,%rcx,8)
movsd  (%rdx,%rcx,8),%xmm4
movsd  %xmm4,(%r9,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rdi
jne    13b0 <kEpsilon_2D_Evaluate_sd+0x2b0>
movsd  (%rsi,%r8,8),%xmm4
mov    0x98(%rsp),%rcx
movsd  %xmm4,(%rcx,%r8,8)
mov    0xa0(%rsp),%rcx
movabs $0x3ff0000000000000,%rsi
mov    %rsi,(%rcx,%r8,8)
movsd  0x0(%rbp,%r8,8),%xmm4
mov    0xa8(%rsp),%rcx
movsd  %xmm4,(%rcx,%r8,8)
mov    0xb0(%rsp),%rcx
mov    %rsi,(%rcx,%r8,8)
cmpl   $0x0,-0x74(%rsp)
mov    -0x68(%rsp),%rbp
mov    -0x58(%rsp),%rsi
jle    151b <kEpsilon_2D_Evaluate_sd+0x41b>
movapd %xmm9,%xmm11
divsd  %xmm0,%xmm11
movsd  -0x60(%rsp),%xmm4
addsd  %xmm4,%xmm11
movapd %xmm10,%xmm7
divsd  %xmm0,%xmm7
movapd %xmm6,%xmm5
divsd  %xmm0,%xmm5
movapd %xmm9,%xmm12
divsd  %xmm1,%xmm12
addsd  %xmm4,%xmm12
movapd %xmm10,%xmm8
divsd  %xmm1,%xmm8
movapd %xmm6,%xmm15
divsd  %xmm1,%xmm15
xor    %ecx,%ecx
xchg   %ax,%ax
movsd  %xmm11,(%r14,%rcx,1)
movsd  %xmm7,(%r11,%rcx,1)
movsd  %xmm5,(%r10,%rcx,1)
movsd  %xmm12,0x0(%rbp,%rcx,1)
movsd  %xmm8,(%rbx,%rcx,1)
movsd  %xmm15,(%rax,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rsi
jne    14a0 <kEpsilon_2D_Evaluate_sd+0x3a0>
jmp    151b <kEpsilon_2D_Evaluate_sd+0x41b>
movsd  (%rsi,%r8,8),%xmm4
mov    0x98(%rsp),%rcx
movsd  %xmm4,(%rcx,%r8,8)
mov    0xa0(%rsp),%rcx
mov    %r9,(%rcx,%r8,8)
movsd  0x0(%rbp,%r8,8),%xmm4
mov    0xa8(%rsp),%rcx
movsd  %xmm4,(%rcx,%r8,8)
mov    0xb0(%rsp),%rcx
mov    %r9,(%rcx,%r8,8)
mov    -0x68(%rsp),%rbp
mov    -0x70(%rsp),%r9
mov    %rbx,-0x20(%rsp)
mov    %rax,-0x18(%rsp)
mov    %r8,%rcx
imul   -0x40(%rsp),%rcx
mov    -0x28(%rsp),%rax
movsd  0x8(%rax,%rcx,8),%xmm4
mulsd  %xmm4,%xmm4
mov    -0x30(%rsp),%rbx
movsd  (%rbx,%rcx,8),%xmm11
movsd  0x8(%rbx,%rcx,8),%xmm5
mulsd  %xmm11,%xmm11
addsd  (%rax,%rcx,8),%xmm5
addsd  %xmm4,%xmm11
mulsd  %xmm5,%xmm5
addsd  %xmm11,%xmm11
addsd  %xmm5,%xmm11
mov    0x70(%rsp),%rcx
movsd  (%rcx,%r8,8),%xmm4
mulsd  %xmm11,%xmm9
subsd  %xmm9,%xmm4
mov    0x108(%rsp),%rax
movsd  %xmm4,(%rax,%r8,8)
xorpd  0xa69(%rip),%xmm10
mulsd  %xmm11,%xmm10
mov    0x110(%rsp),%rax
movsd  %xmm10,(%rax,%r8,8)
mulsd  %xmm11,%xmm6
movsd  0xa61(%rip),%xmm4
subsd  %xmm6,%xmm4
mov    0x118(%rsp),%rax
movsd  %xmm4,(%rax,%r8,8)
movsd  (%rcx,%r8,8),%xmm8
movapd %xmm8,%xmm5
mulsd  -0x10(%rsp),%xmm5
mulsd  %xmm8,%xmm5
mov    -0x50(%rsp),%rsi
movsd  (%rsi,%r8,8),%xmm7
movapd %xmm7,%xmm6
addsd  %xmm14,%xmm6
divsd  %xmm6,%xmm5
xorpd  %xmm15,%xmm15
ucomisd %xmm5,%xmm15
xorpd  %xmm12,%xmm12
ja     1210 <kEpsilon_2D_Evaluate_sd+0x110>
movapd 0x10(%rsp),%xmm12
mulsd  %xmm8,%xmm12
divsd  %xmm6,%xmm12
jmp    1210 <kEpsilon_2D_Evaluate_sd+0x110>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @kEpsilon_2D_Evaluate_sd(i32 %0, i32 %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double* nocapture %9, double* nocapture %10, double* nocapture %11, double* nocapture %12, double* nocapture %13, double* nocapture writeonly %14, double* nocapture writeonly %15, double* nocapture writeonly %16, double* nocapture writeonly %17, double* nocapture writeonly %18, double* nocapture writeonly %19, double* nocapture writeonly %20, double* nocapture writeonly %21, double* nocapture writeonly %22, double* nocapture writeonly %23, double* nocapture writeonly %24, double* nocapture writeonly %25, double* nocapture writeonly %26, double* nocapture writeonly %27, double* nocapture writeonly %28, double* nocapture writeonly %29, double* nocapture writeonly %30, double* nocapture writeonly %31, double* nocapture writeonly %32, double* nocapture writeonly %33, double* nocapture writeonly %34, double* nocapture writeonly %35, double* nocapture writeonly %36, double* nocapture writeonly %37) {
%39 = icmp sgt i32 %0, 0
br i1 %39, label %40, label %181
40: ; preds = %38
%41 = fmul double %6, 2.000000e+00
%42 = fneg double %6
%43 = icmp sgt i32 %1, 0
%44 = fneg double %5
%45 = fmul double %5, 2.000000e+00
%46 = fneg double %4
%47 = sext i32 %1 to i64
%48 = zext i32 %0 to i64
%49 = zext i32 %1 to i64
%50 = zext i32 %1 to i64
br label %51
51: ; preds = %40, %131
%52 = phi i64 [ 0, %40 ], [ %179, %131 ]
%53 = getelementptr inbounds double, double* %13, i64 %52
%54 = load double, double* %53
%55 = getelementptr inbounds double, double* %12, i64 %52
%56 = load double, double* %55
%57 = fmul double %56, %6
%58 = fmul double %56, %57
%59 = fadd double %54, 0x3EB0C6F7A0B5ED8D
%60 = fdiv double %58, %59
%61 = fmul double %41, %56
%62 = fdiv double %61, %59
%63 = fmul double %56, %42
%64 = fmul double %56, %63
%65 = tail call double @llvm.fmuladd.f64(double %54, double %54, double 0x3EB0C6F7A0B5ED8D)
%66 = fdiv double %64, %65
%67 = fcmp olt double %60, 0.000000e+00
%68 = select i1 %67, double 0.000000e+00, double %66
%69 = select i1 %67, double 0.000000e+00, double %62
%70 = select i1 %67, double 0.000000e+00, double %60
%71 = getelementptr inbounds double, double* %14, i64 %52
store double %56, double* %71
%72 = getelementptr inbounds double, double* %15, i64 %52
store double 1.000000e+00, double* %72
%73 = load double, double* %53
%74 = getelementptr inbounds double, double* %16, i64 %52
store double %73, double* %74
%75 = getelementptr inbounds double, double* %17, i64 %52
store double 1.000000e+00, double* %75
br i1 %43, label %83, label %76
76: ; preds = %51
%77 = load double, double* %55
%78 = getelementptr inbounds double, double* %18, i64 %52
store double %77, double* %78
%79 = getelementptr inbounds double, double* %19, i64 %52
store double 1.000000e+00, double* %79
%80 = load double, double* %53
%81 = getelementptr inbounds double, double* %20, i64 %52
store double %80, double* %81
%82 = getelementptr inbounds double, double* %21, i64 %52
store double 1.000000e+00, double* %82
br label %131
83: ; preds = %51
%84 = mul nsw i64 %52, %47
br label %85
85: ; preds = %83, %85
%86 = phi i64 [ 0, %83 ], [ %101, %85 ]
%87 = load double, double* %55
%88 = add nsw i64 %86, %84
%89 = getelementptr inbounds double, double* %9, i64 %88
%90 = load double, double* %89
%91 = fmul double %87, %90
%92 = getelementptr inbounds double, double* %22, i64 %88
store double %91, double* %92
%93 = load double, double* %89
%94 = getelementptr inbounds double, double* %23, i64 %88
store double %93, double* %94
%95 = load double, double* %53
%96 = load double, double* %89
%97 = fmul double %95, %96
%98 = getelementptr inbounds double, double* %24, i64 %88
store double %97, double* %98
%99 = load double, double* %89
%100 = getelementptr inbounds double, double* %25, i64 %88
store double %99, double* %100
%101 = add nuw nsw i64 %86, 1
%102 = icmp eq i64 %101, %49
br i1 %102, label %103, label %85
103: ; preds = %85
%104 = load double, double* %55
%105 = getelementptr inbounds double, double* %18, i64 %52
store double %104, double* %105
%106 = getelementptr inbounds double, double* %19, i64 %52
store double 1.000000e+00, double* %106
%107 = load double, double* %53
%108 = getelementptr inbounds double, double* %20, i64 %52
store double %107, double* %108
%109 = getelementptr inbounds double, double* %21, i64 %52
store double 1.000000e+00, double* %109
br i1 %43, label %110, label %131
110: ; preds = %103
%111 = fdiv double %70, %2
%112 = fadd double %111, %8
%113 = shl nuw nsw i64 %52, 1
%114 = fdiv double %69, %2
%115 = fdiv double %68, %2
%116 = fdiv double %70, %3
%117 = fadd double %116, %8
%118 = fdiv double %69, %3
%119 = fdiv double %68, %3
br label %120
120: ; preds = %110, %120
%121 = phi i64 [ 0, %110 ], [ %129, %120 ]
%122 = add nuw nsw i64 %121, %113
%123 = getelementptr inbounds double, double* %26, i64 %122
store double %112, double* %123
%124 = getelementptr inbounds double, double* %27, i64 %122
store double %114, double* %124
%125 = getelementptr inbounds double, double* %28, i64 %122
store double %115, double* %125
%126 = getelementptr inbounds double, double* %29, i64 %122
store double %117, double* %126
%127 = getelementptr inbounds double, double* %30, i64 %122
store double %118, double* %127
%128 = getelementptr inbounds double, double* %31, i64 %122
store double %119, double* %128
%129 = add nuw nsw i64 %121, 1
%130 = icmp eq i64 %129, %50
br i1 %130, label %131, label %120
131: ; preds = %120, %76, %103
%132 = mul nsw i64 %52, %47
%133 = getelementptr inbounds double, double* %10, i64 %132
%134 = load double, double* %133
%135 = add nsw i64 %132, 1
%136 = getelementptr inbounds double, double* %11, i64 %135
%137 = load double, double* %136
%138 = fmul double %137, %137
%139 = tail call double @llvm.fmuladd.f64(double %134, double %134, double %138)
%140 = getelementptr inbounds double, double* %10, i64 %135
%141 = load double, double* %140
%142 = getelementptr inbounds double, double* %11, i64 %132
%143 = load double, double* %142
%144 = fadd double %141, %143
%145 = fmul double %144, %144
%146 = tail call double @llvm.fmuladd.f64(double %139, double 2.000000e+00, double %145)
%147 = fneg double %70
%148 = load double, double* %53
%149 = tail call double @llvm.fmuladd.f64(double %147, double %146, double %148)
%150 = getelementptr inbounds double, double* %32, i64 %52
store double %149, double* %150
%151 = fneg double %69
%152 = fmul double %146, %151
%153 = getelementptr inbounds double, double* %33, i64 %52
store double %152, double* %153
%154 = fneg double %68
%155 = tail call double @llvm.fmuladd.f64(double %154, double %146, double 1.000000e+00)
%156 = getelementptr inbounds double, double* %34, i64 %52
store double %155, double* %156
%157 = load double, double* %53
%158 = fmul double %157, %5
%159 = fmul double %157, %158
%160 = load double, double* %55
%161 = fadd double %160, 0x3EB0C6F7A0B5ED8D
%162 = fdiv double %159, %161
%163 = fmul double %157, %44
%164 = fmul double %157, %163
%165 = tail call double @llvm.fmuladd.f64(double %160, double %160, double 0x3EB0C6F7A0B5ED8D)
%166 = fdiv double %164, %165
%167 = fmul double %45, %157
%168 = fdiv double %167, %161
%169 = fcmp olt double %162, 0.000000e+00
%170 = select i1 %169, double 0.000000e+00, double %162
%171 = select i1 %169, double 0.000000e+00, double %166
%172 = select i1 %169, double 0.000000e+00, double %168
%173 = fmul double %160, %46
%174 = tail call double @llvm.fmuladd.f64(double %173, double %146, double %170)
%175 = getelementptr inbounds double, double* %35, i64 %52
store double %174, double* %175
%176 = tail call double @llvm.fmuladd.f64(double %46, double %146, double %171)
%177 = getelementptr inbounds double, double* %36, i64 %52
store double %176, double* %177
%178 = getelementptr inbounds double, double* %37, i64 %52
store double %172, double* %178
%179 = add nuw nsw i64 %52, 1
%180 = icmp eq i64 %179, %48
br i1 %180, label %181, label %51
181: ; preds = %131, %38
ret void
}