void kEpsilon_k_2D_Evaluate_sd(int nPoints, int nSpace, double sigma_k,
                               double c_mu, double nu, double *velocity,
                               double *gradu, double *gradv, double *k,
                               double *epsilon, double *m_k, double *dm_k,
                               double *phi_k, double *dphi_k, double *f_k,
                               double *df_k, double *a_k, double *da_k_dk,
                               double *r_k, double *dr_k_dk) {
  int i, I;
  double nu_t, dnu_t_dk, PiD4, eval, kval, disp, ddisp_dk, ddisp_de;
  const double div_eps = 1.0e-3;
  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);
    if (nu_t < 0.0) {
      nu_t = 0.0;
      dnu_t_dk = 0.0;
    }
    m_k[i] = k[i];
    dm_k[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];
    }
    phi_k[i] = k[i];
    dphi_k[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;
    }
    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;
  }
}


x86 assembly (clang, -O0):
<kEpsilon_k_2D_Evaluate_sd>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
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)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
mov    %r8,-0x38(%rbp)
mov    %r9,-0x40(%rbp)
movsd  0xe9f(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1541 <kEpsilon_k_2D_Evaluate_sd+0x441>
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     11b0 <kEpsilon_k_2D_Evaluate_sd+0xb0>
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    11c0 <kEpsilon_k_2D_Evaluate_sd+0xc0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    11c0 <kEpsilon_k_2D_Evaluate_sd+0xc0>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1201 <kEpsilon_k_2D_Evaluate_sd+0x101>
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1211 <kEpsilon_k_2D_Evaluate_sd+0x111>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1211 <kEpsilon_k_2D_Evaluate_sd+0x111>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x18(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  0xdb3(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xda5(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  0xd7b(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    12b1 <kEpsilon_k_2D_Evaluate_sd+0x1b1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x20(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  0xd35(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1366 <kEpsilon_k_2D_Evaluate_sd+0x266>
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x40(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12e7 <kEpsilon_k_2D_Evaluate_sd+0x1e7>
mov    -0x40(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  0xc80(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13f9 <kEpsilon_k_2D_Evaluate_sd+0x2f9>
movsd  -0x50(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
mov    0x48(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    0x50(%rbp),%rax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    139c <kEpsilon_k_2D_Evaluate_sd+0x29c>
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x38(%rbp),%rax
mov    -0x44(%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,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x60(%rbp),%xmm2
mov    0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x58(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x60(%rbp),%xmm0
mov    0x60(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1170 <kEpsilon_k_2D_Evaluate_sd+0x70>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kEpsilon_k_2D_Evaluate_sd>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x60,%rsp
mov    %r8,0x58(%rsp)
mov    %rcx,0x50(%rsp)
mov    %rdx,-0x50(%rsp)
mov    %esi,-0x74(%rsp)
test   %edi,%edi
jle    1897 <kEpsilon_k_2D_Evaluate_sd+0x797>
mov    0xd8(%rsp),%rcx
mov    0xd0(%rsp),%r11
movapd %xmm1,%xmm11
addsd  %xmm1,%xmm11
movslq -0x74(%rsp),%rax
mov    %edi,%edi
mov    %rdi,0x40(%rsp)
mov    %eax,%ebp
mov    %ebp,%edi
and    $0xfffffffc,%edi
mov    %rdi,-0x38(%rsp)
add    $0xfffffffffffffffc,%rdi
mov    %rdi,0x8(%rsp)
shr    $0x2,%rdi
add    $0x1,%rdi
mov    %rbp,%rbx
neg    %rbx
mov    %rbx,0x20(%rsp)
mov    %edi,%ebx
and    $0x3,%ebx
and    $0xfffffffffffffffc,%rdi
mov    %rdi,-0x8(%rsp)
mov    %ebp,%edi
and    $0x3,%edi
mov    %rdi,0x18(%rsp)
mov    %rbp,-0x70(%rsp)
lea    0x0(,%rbp,8),%rdi
and    $0xffffffffffffffe0,%rdi
mov    %rdi,0x10(%rsp)
mov    %rbx,(%rsp)
shl    $0x5,%rbx
mov    %rbx,-0x40(%rsp)
movsd  0xe45(%rip),%xmm8
xorpd  %xmm9,%xmm9
movapd 0xe47(%rip),%xmm10
mov    0xc8(%rsp),%rbp
mov    0xc0(%rsp),%rdx
mov    0x98(%rsp),%rbx
lea    0x10(%rbp),%r12
mov    %rax,0x48(%rsp)
lea    0x0(,%rax,8),%rax
mov    %rax,0x38(%rsp)
lea    0x10(%rdx),%rax
mov    %rax,-0x20(%rsp)
mov    -0x50(%rsp),%rax
lea    0x10(%rax),%r14
lea    0x8(%rax),%rdi
lea    0x8(%rdx),%r10
mov    %rbx,%rdx
lea    0x8(%rbp),%rbx
lea    0x70(%rcx),%r15
lea    0x70(%r11),%r13
lea    0x10(%rcx),%r8
lea    0x10(%r11),%rax
xor    %ebp,%ebp
movabs $0x3ff0000000000000,%rsi
mov    %r9,-0x30(%rsp)
jmp    1320 <kEpsilon_k_2D_Evaluate_sd+0x220>
xchg   %ax,%ax
movsd  (%r9,%rbp,8),%xmm4
mov    0xb0(%rsp),%rax
movsd  %xmm4,(%rax,%rbp,8)
mov    0xb8(%rsp),%rax
mov    %rsi,(%rax,%rbp,8)
mov    0x58(%rsp),%rax
mov    -0x48(%rsp),%rdx
movsd  0x8(%rax,%rdx,8),%xmm4
mov    0x50(%rsp),%rcx
movsd  0x8(%rcx,%rdx,8),%xmm5
addsd  (%rax,%rdx,8),%xmm5
movsd  (%rcx,%rdx,8),%xmm6
mulsd  %xmm4,%xmm4
mulsd  %xmm6,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm5,%xmm5
addsd  %xmm6,%xmm6
addsd  %xmm5,%xmm6
mov    0x98(%rsp),%rdx
movsd  (%rdx,%rbp,8),%xmm4
mulsd  %xmm6,%xmm12
subsd  %xmm12,%xmm4
mov    0xe0(%rsp),%rax
movsd  %xmm4,(%rax,%rbp,8)
xorpd  %xmm10,%xmm3
mulsd  %xmm6,%xmm3
mov    0xe8(%rsp),%rax
movsd  %xmm3,(%rax,%rbp,8)
add    $0x1,%rbp
mov    0x38(%rsp),%rax
add    %rax,%r12
add    %rax,-0x20(%rsp)
add    %rax,%r14
add    %rax,%rdi
add    %rax,%r10
add    %rax,%rbx
add    $0x10,%r15
add    $0x10,%r13
add    $0x10,%r8
mov    -0x18(%rsp),%rax
add    $0x10,%rax
mov    -0x10(%rsp),%rcx
add    $0x10,%rcx
add    $0x10,%r11
cmp    0x40(%rsp),%rbp
je     1897 <kEpsilon_k_2D_Evaluate_sd+0x797>
mov    %rax,-0x18(%rsp)
mov    %rcx,-0x10(%rsp)
mov    %rbp,%rcx
mov    0x48(%rsp),%rax
imul   %rax,%rcx
mov    %rcx,-0x48(%rsp)
movsd  (%r9,%rbp,8),%xmm4
movapd %xmm4,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm4,%xmm3
movsd  (%rdx,%rbp,8),%xmm5
addsd  %xmm8,%xmm5
divsd  %xmm5,%xmm3
movapd %xmm11,%xmm6
mulsd  %xmm4,%xmm6
divsd  %xmm5,%xmm6
xorpd  %xmm12,%xmm12
maxsd  %xmm3,%xmm12
cmpltsd %xmm9,%xmm3
andnpd %xmm6,%xmm3
mov    0xa0(%rsp),%rcx
movsd  %xmm4,(%rcx,%rbp,8)
mov    0xa8(%rsp),%rcx
mov    %rsi,(%rcx,%rbp,8)
test   %eax,%eax
jle    1240 <kEpsilon_k_2D_Evaluate_sd+0x140>
mov    %r12,-0x60(%rsp)
cmpl   $0x4,-0x74(%rsp)
mov    -0x70(%rsp),%rax
jae    1470 <kEpsilon_k_2D_Evaluate_sd+0x370>
xor    %r12d,%r12d
mov    %r12,%rcx
test   $0x1,%al
je     1409 <kEpsilon_k_2D_Evaluate_sd+0x309>
movsd  (%r9,%rbp,8),%xmm4
mov    -0x48(%rsp),%rax
add    %r12,%rax
mov    -0x50(%rsp),%rcx
mulsd  (%rcx,%rax,8),%xmm4
mov    0xc0(%rsp),%rdx
movsd  %xmm4,(%rdx,%rax,8)
movabs $0x3ff0000000000000,%rsi
movsd  (%rcx,%rax,8),%xmm4
mov    0xc8(%rsp),%rcx
movsd  %xmm4,(%rcx,%rax,8)
mov    -0x70(%rsp),%rax
mov    %r12,%rcx
or     $0x1,%rcx
not    %r12
cmp    0x20(%rsp),%r12
je     1620 <kEpsilon_k_2D_Evaluate_sd+0x520>
nopw   0x0(%rax,%rax,1)
movsd  (%r9,%rbp,8),%xmm4
mulsd  -0x8(%rdi,%rcx,8),%xmm4
movsd  %xmm4,-0x8(%r10,%rcx,8)
movsd  -0x8(%rdi,%rcx,8),%xmm4
movsd  %xmm4,-0x8(%rbx,%rcx,8)
movsd  (%r9,%rbp,8),%xmm4
mulsd  (%rdi,%rcx,8),%xmm4
movsd  %xmm4,(%r10,%rcx,8)
movsd  (%rdi,%rcx,8),%xmm4
movsd  %xmm4,(%rbx,%rcx,8)
add    $0x2,%rcx
cmp    %rcx,%rax
jne    1420 <kEpsilon_k_2D_Evaluate_sd+0x320>
jmp    1620 <kEpsilon_k_2D_Evaluate_sd+0x520>
nopl   0x0(%rax,%rax,1)
mov    %r15,-0x28(%rsp)
mov    -0x48(%rsp),%r12
add    %r12,%rax
mov    0xc0(%rsp),%rcx
lea    (%rcx,%r12,8),%r15
lea    (%rcx,%rax,8),%rcx
mov    %rcx,-0x58(%rsp)
mov    0xc8(%rsp),%rcx
lea    (%rcx,%r12,8),%rsi
lea    (%rcx,%rax,8),%rdx
mov    %rdx,0x30(%rsp)
lea    (%r9,%rbp,8),%rcx
mov    %rcx,-0x68(%rsp)
lea    0x8(%r9,%rbp,8),%rcx
mov    %rcx,0x28(%rsp)
mov    -0x50(%rsp),%r9
lea    (%r9,%rax,8),%rax
cmp    %rdx,%r15
setb   -0x79(%rsp)
mov    -0x58(%rsp),%rdx
cmp    %rdx,%rsi
setb   -0x75(%rsp)
cmp    %rcx,%r15
setb   -0x76(%rsp)
cmp    %rdx,-0x68(%rsp)
mov    %rdx,%rcx
setb   -0x77(%rsp)
cmp    %rax,%r15
lea    (%r9,%r12,8),%rdx
setb   -0x78(%rsp)
cmp    %rcx,%rdx
setb   -0x58(%rsp)
mov    %rsi,%rcx
cmp    0x28(%rsp),%rsi
setb   %r12b
mov    0x30(%rsp),%rsi
cmp    %rsi,-0x68(%rsp)
setb   -0x68(%rsp)
cmp    %rax,%rcx
setb   %cl
cmp    %rsi,%rdx
setb   %sil
mov    -0x75(%rsp),%al
test   %al,-0x79(%rsp)
jne    1876 <kEpsilon_k_2D_Evaluate_sd+0x776>
mov    -0x77(%rsp),%al
and    %al,-0x76(%rsp)
mov    -0x70(%rsp),%rax
mov    -0x30(%rsp),%r9
mov    -0x28(%rsp),%r15
jne    1864 <kEpsilon_k_2D_Evaluate_sd+0x764>
mov    -0x58(%rsp),%dl
and    %dl,-0x78(%rsp)
jne    1864 <kEpsilon_k_2D_Evaluate_sd+0x764>
mov    %sil,-0x79(%rsp)
and    -0x68(%rsp),%r12b
movabs $0x3ff0000000000000,%rsi
jne    13b2 <kEpsilon_k_2D_Evaluate_sd+0x2b2>
mov    $0x0,%r12d
and    -0x79(%rsp),%cl
jne    13b5 <kEpsilon_k_2D_Evaluate_sd+0x2b5>
movsd  (%r9,%rbp,8),%xmm4
unpcklpd %xmm4,%xmm4
xor    %eax,%eax
mov    0x10(%rsp),%rcx
mov    -0x60(%rsp),%rdx
mov    -0x20(%rsp),%rsi
nopw   0x0(%rax,%rax,1)
movupd -0x10(%r14,%rax,1),%xmm5
movupd (%r14,%rax,1),%xmm6
mulpd  %xmm4,%xmm5
mulpd  %xmm4,%xmm6
movupd %xmm5,-0x10(%rsi,%rax,1)
movupd %xmm6,(%rsi,%rax,1)
movupd -0x10(%r14,%rax,1),%xmm5
movupd (%r14,%rax,1),%xmm6
movupd %xmm5,-0x10(%rdx,%rax,1)
movupd %xmm6,(%rdx,%rax,1)
add    $0x20,%rax
cmp    %rax,%rcx
jne    15b0 <kEpsilon_k_2D_Evaluate_sd+0x4b0>
mov    -0x38(%rsp),%rcx
mov    %rcx,%r12
mov    -0x70(%rsp),%rax
cmp    %rax,%rcx
movabs $0x3ff0000000000000,%rsi
jne    13b5 <kEpsilon_k_2D_Evaluate_sd+0x2b5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%r9,%rbp,8),%xmm4
mov    0xb0(%rsp),%rcx
movsd  %xmm4,(%rcx,%rbp,8)
mov    0xb8(%rsp),%rcx
mov    %rsi,(%rcx,%rbp,8)
cmpl   $0x0,-0x74(%rsp)
mov    -0x60(%rsp),%r12
jle    125f <kEpsilon_k_2D_Evaluate_sd+0x15f>
movapd %xmm12,%xmm5
divsd  %xmm0,%xmm5
addsd  %xmm2,%xmm5
movapd %xmm3,%xmm6
divsd  %xmm0,%xmm6
cmpl   $0x4,-0x74(%rsp)
jae    1672 <kEpsilon_k_2D_Evaluate_sd+0x572>
xor    %ecx,%ecx
jmp    17d0 <kEpsilon_k_2D_Evaluate_sd+0x6d0>
mov    %rax,%rdx
mov    %rbp,%rax
shl    $0x4,%rax
mov    0xd0(%rsp),%rcx
lea    (%rcx,%rax,1),%r12
lea    (%rdx,%rbp,2),%rcx
mov    0xd8(%rsp),%rsi
lea    (%rsi,%rcx,8),%rdx
cmp    %rdx,%r12
mov    0xd0(%rsp),%rdx
jae    16c7 <kEpsilon_k_2D_Evaluate_sd+0x5c7>
add    %rsi,%rax
lea    (%rdx,%rcx,8),%rcx
cmp    %rcx,%rax
jae    16c7 <kEpsilon_k_2D_Evaluate_sd+0x5c7>
xor    %ecx,%ecx
mov    -0x70(%rsp),%rax
movabs $0x3ff0000000000000,%rsi
jmp    17d0 <kEpsilon_k_2D_Evaluate_sd+0x6d0>
movapd %xmm5,%xmm4
unpcklpd %xmm5,%xmm4
movapd %xmm6,%xmm7
unpcklpd %xmm6,%xmm7
cmpq   $0xc,0x8(%rsp)
mov    -0x60(%rsp),%r12
jae    16f0 <kEpsilon_k_2D_Evaluate_sd+0x5f0>
xor    %ecx,%ecx
mov    -0x40(%rsp),%rsi
jmp    1779 <kEpsilon_k_2D_Evaluate_sd+0x679>
mov    -0x8(%rsp),%rax
xor    %ecx,%ecx
mov    -0x40(%rsp),%rsi
nopl   0x0(%rax)
movupd %xmm4,-0x70(%r13,%rcx,8)
movupd %xmm4,-0x60(%r13,%rcx,8)
movupd %xmm7,-0x70(%r15,%rcx,8)
movupd %xmm7,-0x60(%r15,%rcx,8)
movupd %xmm4,-0x50(%r13,%rcx,8)
movupd %xmm4,-0x40(%r13,%rcx,8)
movupd %xmm7,-0x50(%r15,%rcx,8)
movupd %xmm7,-0x40(%r15,%rcx,8)
movupd %xmm4,-0x30(%r13,%rcx,8)
movupd %xmm4,-0x20(%r13,%rcx,8)
movupd %xmm7,-0x30(%r15,%rcx,8)
movupd %xmm7,-0x20(%r15,%rcx,8)
movupd %xmm4,-0x10(%r13,%rcx,8)
movupd %xmm4,0x0(%r13,%rcx,8)
movupd %xmm7,-0x10(%r15,%rcx,8)
movupd %xmm7,(%r15,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rax
jne    1700 <kEpsilon_k_2D_Evaluate_sd+0x600>
cmpq   $0x0,(%rsp)
je     17af <kEpsilon_k_2D_Evaluate_sd+0x6af>
lea    (%r8,%rcx,8),%rax
mov    -0x18(%rsp),%rdx
lea    (%rdx,%rcx,8),%rcx
xor    %edx,%edx
nop
movupd %xmm4,-0x10(%rcx,%rdx,1)
movupd %xmm4,(%rcx,%rdx,1)
movupd %xmm7,-0x10(%rax,%rdx,1)
movupd %xmm7,(%rax,%rdx,1)
add    $0x20,%rdx
cmp    %rdx,%rsi
jne    1790 <kEpsilon_k_2D_Evaluate_sd+0x690>
mov    -0x38(%rsp),%rdx
mov    %rdx,%rcx
mov    -0x70(%rsp),%rax
cmp    %rax,%rdx
movabs $0x3ff0000000000000,%rsi
je     125f <kEpsilon_k_2D_Evaluate_sd+0x15f>
nop
mov    %rcx,%r12
not    %r12
add    %rax,%r12
mov    0x18(%rsp),%rax
test   %rax,%rax
je     1805 <kEpsilon_k_2D_Evaluate_sd+0x705>
mov    -0x10(%rsp),%rdx
nopl   0x0(%rax,%rax,1)
movsd  %xmm5,(%r11,%rcx,8)
movsd  %xmm6,(%rdx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rax
jne    17f0 <kEpsilon_k_2D_Evaluate_sd+0x6f0>
cmp    $0x3,%r12
mov    -0x70(%rsp),%rax
mov    -0x60(%rsp),%r12
jb     125f <kEpsilon_k_2D_Evaluate_sd+0x15f>
nopl   0x0(%rax)
movsd  %xmm5,(%r11,%rcx,8)
movsd  %xmm6,-0x10(%r8,%rcx,8)
movsd  %xmm5,0x8(%r11,%rcx,8)
movsd  %xmm6,-0x8(%r8,%rcx,8)
movsd  %xmm5,0x10(%r11,%rcx,8)
movsd  %xmm6,(%r8,%rcx,8)
movsd  %xmm5,0x18(%r11,%rcx,8)
movsd  %xmm6,0x8(%r8,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1820 <kEpsilon_k_2D_Evaluate_sd+0x720>
jmp    125f <kEpsilon_k_2D_Evaluate_sd+0x15f>
xor    %r12d,%r12d
movabs $0x3ff0000000000000,%rsi
jmp    13b5 <kEpsilon_k_2D_Evaluate_sd+0x2b5>
xor    %r12d,%r12d
mov    -0x70(%rsp),%rax
movabs $0x3ff0000000000000,%rsi
mov    -0x30(%rsp),%r9
mov    -0x28(%rsp),%r15
jmp    13b5 <kEpsilon_k_2D_Evaluate_sd+0x2b5>
add    $0x60,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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