void get_face_2d_utopia_b(int iX, int iY, int nX, int nY, int X_nbr, int Y_nbr,
                          int nrm, int tid, double delta_t, double u_face,
                          double u_face_t, double *sc_face, double *sc_old) {
  double sc_face_tmp;
  double wind = 1.;
  double wind_t = 1.;
  double crnt;
  double crnt_t;
  double tmp_1;
  double tmp_2;
  int iwind = 1;
  int iwind_t = 1;
  int nbrid;
  crnt = u_face * delta_t * 1.;
  crnt_t = u_face_t * delta_t * 1.;
  if (crnt < 0.) {
    wind = -1.;
    iwind = -1;
  }
  if (crnt_t < 0.) {
    wind_t = -1.;
    iwind_t = -1;
  }
  tmp_1 = (1. - crnt * crnt) * 0.0833333333333333333;
  tmp_2 = 0.25 * crnt_t * (wind - crnt);
  sc_face_tmp = *(sc_old + tid) *
                (0.5 + 0.5 * crnt * nrm + tmp_1 * (1. + 3. * wind * (nrm)));
  nbrid = (iY + (Y_nbr)) * nX + iX + (X_nbr);
  sc_face_tmp += *(sc_old + nbrid) *
                 (0.5 - 0.5 * crnt * (nrm) + tmp_1 * (1. - 3. * wind * (nrm)));
  nbrid = (iY - (Y_nbr)) * nX + iX - (X_nbr);
  sc_face_tmp += *(sc_old + nbrid) * (tmp_1 * (-1. - (double)(wind * (nrm))));
  nbrid = (iY + 2 * (Y_nbr)) * nX + iX + 2 * (X_nbr);
  sc_face_tmp += *(sc_old + nbrid) * (tmp_1 * (-1. + (double)(wind * (nrm))));
  nbrid = (iY + (Y_nbr)-Y_nbr * (iwind * nrm + 1) / 2) * nX + iX +
          (X_nbr)-X_nbr * (iwind * nrm + 1) / 2;
  sc_face_tmp -= *(sc_old + nbrid) * 0.5 * u_face_t * delta_t * 1. * u_face_t *
                 delta_t * 1.;
  nbrid =
      (iY + (Y_nbr)-Y_nbr * (iwind * nrm + 1) / 2 + (1 - Y_nbr * nrm)) * nX +
      iX + (X_nbr)-X_nbr * (iwind * nrm + 1) / 2 + (1 - X_nbr * nrm);
  sc_face_tmp += *(sc_old + nbrid) * u_face_t * delta_t * 1. *
                 (-0.25 + 0.25 * u_face_t * delta_t * 1.);
  nbrid =
      (iY + (Y_nbr)-Y_nbr * (iwind * nrm + 1) / 2 - (1 - Y_nbr * nrm)) * nX +
      iX + (X_nbr)-X_nbr * (iwind * nrm + 1) / 2 - (1 - X_nbr * nrm);
  sc_face_tmp += *(sc_old + nbrid) * u_face_t * delta_t * 1. *
                 (0.25 + 0.25 * u_face_t * delta_t * 1.);
  sc_face_tmp += *(sc_old + tid) * wind_t * nrm * tmp_2;
  nbrid = (iY + (Y_nbr)) * nX + iX + (X_nbr);
  sc_face_tmp -= *(sc_old + nbrid) * wind_t * nrm * tmp_2;
  nbrid = (iY - iwind_t * (1 - Y_nbr * nrm)) * nX + iX -
          iwind_t * (1 - X_nbr * nrm);
  sc_face_tmp -= *(sc_old + nbrid) * wind_t * nrm * tmp_2;
  nbrid = (iY + (Y_nbr)-iwind_t * (1 - Y_nbr * nrm)) * nX + iX +
          (X_nbr)-iwind_t * (1 - X_nbr * nrm);
  sc_face_tmp += *(sc_old + nbrid) * wind_t * nrm * tmp_2;
  *sc_face = sc_face_tmp;
}


x86 assembly (clang, -O0):
<get_face_2d_utopia_b>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xeb2(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x1,-0x6c(%rbp)
movl   $0x1,-0x70(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0xe8d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0xe72(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    11b9 <get_face_2d_utopia_b+0xb9>
movsd  0xe5b(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0xffffffff,-0x6c(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jbe    11db <get_face_2d_utopia_b+0xdb>
movsd  0xe39(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0xffffffff,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xdf8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xe1c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xdeb(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x28(%rbp),%rax
movslq 0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xdce(%rip),%xmm2
mulsd  -0x50(%rbp),%xmm2
cvtsi2sdl 0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm2
movsd  0xdb8(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x60(%rbp),%xmm1
movsd  0xdaf(%rip),%xmm3
mulsd  -0x40(%rbp),%xmm3
cvtsi2sdl 0x10(%rbp),%xmm4
mulsd  %xmm4,%xmm3
movsd  0xd71(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd54(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
cvtsi2sdl 0x10(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xd27(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  0xd1e(%rip),%xmm3
mulsd  -0x40(%rbp),%xmm3
cvtsi2sdl 0x10(%rbp),%xmm4
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm3
movsd  0xcc9(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x18(%rbp),%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
cvtsi2sdl 0x10(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xc61(%rip),%xmm3
addsd  %xmm3,%xmm1
mulsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
cvtsi2sdl 0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0xc02(%rip),%xmm3
addsd  %xmm3,%xmm1
mulsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
sub    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x88(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  0xb8d(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0xb56(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x84(%rbp),%eax
sub    %ecx,%eax
mov    -0x18(%rbp),%edx
imul   0x10(%rbp),%edx
mov    $0x1,%ecx
sub    %edx,%ecx
add    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x80(%rbp),%eax
sub    %ecx,%eax
mov    -0x14(%rbp),%edx
imul   0x10(%rbp),%edx
mov    $0x1,%ecx
sub    %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0xa87(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa8b(%rip),%xmm2
mulsd  -0x30(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
movsd  0xa81(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x7c(%rbp),%eax
sub    %ecx,%eax
mov    -0x18(%rbp),%edx
imul   0x10(%rbp),%edx
mov    $0x1,%ecx
sub    %edx,%ecx
sub    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x6c(%rbp),%ecx
imul   0x10(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x78(%rbp),%eax
sub    %ecx,%eax
mov    -0x14(%rbp),%edx
imul   0x10(%rbp),%edx
mov    $0x1,%ecx
sub    %edx,%ecx
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x30(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  0x9bd(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9c1(%rip),%xmm2
mulsd  -0x30(%rbp),%xmm2
mulsd  -0x20(%rbp),%xmm2
movsd  0x9af(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x28(%rbp),%rax
movslq 0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
mov    -0x70(%rbp),%ecx
mov    -0x18(%rbp),%esi
imul   0x10(%rbp),%esi
mov    $0x1,%edx
sub    %esi,%edx
imul   %edx,%ecx
sub    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
mov    -0x70(%rbp),%ecx
mov    -0x14(%rbp),%esi
imul   0x10(%rbp),%esi
mov    $0x1,%edx
sub    %esi,%edx
imul   %edx,%ecx
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
add    -0x18(%rbp),%eax
mov    -0x70(%rbp),%ecx
mov    -0x18(%rbp),%esi
imul   0x10(%rbp),%esi
mov    $0x1,%edx
sub    %esi,%edx
imul   %edx,%ecx
sub    %ecx,%eax
imul   -0xc(%rbp),%eax
add    -0x4(%rbp),%eax
add    -0x14(%rbp),%eax
mov    -0x70(%rbp),%ecx
mov    -0x14(%rbp),%esi
imul   0x10(%rbp),%esi
mov    $0x1,%edx
sub    %esi,%edx
imul   %edx,%ecx
sub    %ecx,%eax
mov    %eax,-0x74(%rbp)
mov    0x28(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x48(%rbp),%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_face_2d_utopia_b>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movslq 0x40(%rsp),%r11
mov    0x50(%rsp),%r13
mov    0x38(%rsp),%r12d
movapd %xmm0,%xmm4
mulsd  %xmm2,%xmm4
xorpd  %xmm6,%xmm6
xor    %r14d,%r14d
ucomisd %xmm4,%xmm6
setbe  %r14b
mulsd  %xmm0,%xmm1
lea    (%r9,%rsi,1),%r15d
mov    %r15d,%ebp
imul   %edx,%ebp
lea    (%r8,%rdi,1),%r10d
add    %r10d,%ebp
mov    %esi,%ecx
sub    %r9d,%ecx
imul   %edx,%ecx
mov    %edi,%eax
sub    %r8d,%eax
add    %ecx,%eax
lea    (%rsi,%r9,2),%ebx
imul   %edx,%ebx
lea    (%rdi,%r8,2),%ecx
add    %ebx,%ecx
mov    %r12d,%ebx
neg    %ebx
ucomisd %xmm1,%xmm6
movapd %xmm1,%xmm3
cmpltsd %xmm6,%xmm3
movsd  0xe84(%rip),%xmm15
movapd %xmm3,%xmm7
andpd  %xmm15,%xmm7
movsd  0xe7b(%rip),%xmm5
andnpd %xmm5,%xmm3
orpd   %xmm7,%xmm3
movapd %xmm4,%xmm13
cmpltsd %xmm6,%xmm13
movapd %xmm13,%xmm6
andpd  %xmm15,%xmm6
andnpd %xmm5,%xmm13
orpd   %xmm6,%xmm13
movapd %xmm1,%xmm6
mulsd  %xmm1,%xmm6
movapd %xmm5,%xmm11
subsd  %xmm6,%xmm11
mulsd  0xe41(%rip),%xmm11
movsd  0xe40(%rip),%xmm8
mulsd  %xmm8,%xmm4
movapd %xmm3,%xmm10
subsd  %xmm1,%xmm10
mulsd  %xmm4,%xmm10
movsd  0x0(%r13,%r11,8),%xmm7
movsd  0xe25(%rip),%xmm6
mulsd  %xmm6,%xmm1
cvtsi2sd %r12d,%xmm9
mulsd  %xmm9,%xmm1
movapd %xmm6,%xmm12
subsd  %xmm1,%xmm12
addsd  %xmm6,%xmm1
movsd  0xe08(%rip),%xmm14
mulsd  %xmm3,%xmm14
mulsd  %xmm9,%xmm14
movapd %xmm14,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm11,%xmm4
addsd  %xmm1,%xmm4
movslq %ebp,%rbp
cltq
mulsd  %xmm9,%xmm3
movapd %xmm15,%xmm1
subsd  %xmm3,%xmm1
mulsd  %xmm11,%xmm1
mulsd  0x0(%r13,%rax,8),%xmm1
movslq %ecx,%rax
addsd  %xmm15,%xmm3
mulsd  %xmm11,%xmm3
mulsd  0x0(%r13,%rax,8),%xmm3
movsd  0x0(%r13,%rbp,8),%xmm15
mov    %r13,%r11
cmovbe %r12d,%ebx
add    $0x1,%ebx
mov    %ebx,%ecx
imul   %r9d,%ecx
mov    %ecx,%eax
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
mov    %r15d,%r13d
sub    %eax,%r13d
mov    %r13d,%ebp
imul   %edx,%ebp
imul   %r8d,%ebx
mov    %ebx,%ecx
shr    $0x1f,%ecx
add    %ebx,%ecx
sar    %ecx
mov    %r10d,%ebx
sub    %ecx,%ebx
add    %ebp,%ebx
movslq %ebx,%rbp
mulsd  (%r11,%rbp,8),%xmm6
imul   %r12d,%r9d
add    %r9d,%eax
mov    $0x1,%ebx
sub    %r9d,%ebx
mov    %r15d,%ebp
sub    %eax,%ebp
mov    %r10d,%r11d
lea    (%r14,%r14,1),%r9d
add    $0xffffffff,%r9d
imul   %r8d,%r12d
lea    -0x1(%r12),%r8d
imul   %r9d,%r8d
add    %r8d,%edi
add    %r10d,%r8d
lea    (%r12,%r10,1),%eax
add    $0xffffffff,%eax
sub    %r12d,%r11d
add    $0x1,%ebp
imul   %edx,%ebp
sub    %ecx,%r11d
add    %r11d,%ebp
add    $0x1,%ebp
subsd  %xmm14,%xmm5
movslq %ebp,%rbp
mov    0x50(%rsp),%r10
movsd  (%r10,%rbp,8),%xmm14
sub    %ecx,%eax
sub    %ebx,%r13d
imul   %edx,%r13d
add    %r13d,%eax
mulsd  %xmm11,%xmm5
mulsd  %xmm2,%xmm6
mulsd  %xmm0,%xmm6
mulsd  %xmm2,%xmm6
mulsd  %xmm2,%xmm14
movapd %xmm2,%xmm11
cltq
mulsd  (%r10,%rax,8),%xmm2
imul   %r9d,%ebx
sub    %ebx,%esi
imul   %edx,%esi
add    %esi,%edi
addsd  %xmm12,%xmm5
movslq %edi,%rax
movsd  (%r10,%rax,8),%xmm12
sub    %ebx,%r15d
imul   %edx,%r15d
add    %r15d,%r8d
mulsd  %xmm7,%xmm4
mulsd  %xmm15,%xmm5
addsd  %xmm4,%xmm5
movslq %r8d,%rax
movsd  (%r10,%rax,8),%xmm4
mov    0x48(%rsp),%rax
addsd  %xmm5,%xmm1
addsd  %xmm1,%xmm3
mulsd  %xmm0,%xmm6
subsd  %xmm6,%xmm3
mulsd  %xmm0,%xmm14
mulsd  %xmm8,%xmm11
mulsd  %xmm0,%xmm11
movsd  0xc86(%rip),%xmm1
addsd  %xmm11,%xmm1
mulsd  %xmm14,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm0,%xmm2
addsd  %xmm8,%xmm11
mulsd  %xmm2,%xmm11
addsd  %xmm1,%xmm11
mulsd  %xmm13,%xmm7
mulsd  %xmm9,%xmm7
mulsd  %xmm10,%xmm7
addsd  %xmm11,%xmm7
mulsd  %xmm13,%xmm12
mulsd  %xmm13,%xmm4
mulsd  %xmm15,%xmm13
mulsd  %xmm9,%xmm13
mulsd  %xmm10,%xmm13
subsd  %xmm13,%xmm7
mulsd  %xmm9,%xmm12
mulsd  %xmm10,%xmm12
subsd  %xmm12,%xmm7
mulsd  %xmm9,%xmm4
mulsd  %xmm10,%xmm4
addsd  %xmm7,%xmm4
movsd  %xmm4,(%rax)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @get_face_2d_utopia_b(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, double %8, double %9, double %10, double* %11, double* %12) {
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca double
%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 i32
%35 = alloca i32
%36 = alloca i32
store i32 %0, i32* %14
store i32 %1, i32* %15
store i32 %2, i32* %16
store i32 %3, i32* %17
store i32 %4, i32* %18
store i32 %5, i32* %19
store i32 %6, i32* %20
store i32 %7, i32* %21
store double %8, double* %22
store double %9, double* %23
store double %10, double* %24
store double* %11, double** %25
store double* %12, double** %26
store double 1.000000e+00, double* %28
store double 1.000000e+00, double* %29
store i32 1, i32* %34
store i32 1, i32* %35
%37 = load double, double* %23
%38 = load double, double* %22
%39 = fmul double %37, %38
%40 = fmul double %39, 1.000000e+00
store double %40, double* %30
%41 = load double, double* %24
%42 = load double, double* %22
%43 = fmul double %41, %42
%44 = fmul double %43, 1.000000e+00
store double %44, double* %31
%45 = load double, double* %30
%46 = fcmp olt double %45, 0.000000e+00
br i1 %46, label %47, label %48
47: ; preds = %13
store double -1.000000e+00, double* %28
store i32 -1, i32* %34
br label %48
48: ; preds = %47, %13
%49 = load double, double* %31
%50 = fcmp olt double %49, 0.000000e+00
br i1 %50, label %51, label %52
51: ; preds = %48
store double -1.000000e+00, double* %29
store i32 -1, i32* %35
br label %52
52: ; preds = %51, %48
%53 = load double, double* %30
%54 = load double, double* %30
%55 = fneg double %53
%56 = call double @llvm.fmuladd.f64(double %55, double %54, double 1.000000e+00)
%57 = fmul double %56, 0x3FB5555555555555
store double %57, double* %32
%58 = load double, double* %31
%59 = fmul double 2.500000e-01, %58
%60 = load double, double* %28
%61 = load double, double* %30
%62 = fsub double %60, %61
%63 = fmul double %59, %62
store double %63, double* %33
%64 = load double*, double** %26
%65 = load i32, i32* %21
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds double, double* %64, i64 %66
%68 = load double, double* %67
%69 = load double, double* %30
%70 = fmul double 5.000000e-01, %69
%71 = load i32, i32* %20
%72 = sitofp i32 %71 to double
%73 = call double @llvm.fmuladd.f64(double %70, double %72, double 5.000000e-01)
%74 = load double, double* %32
%75 = load double, double* %28
%76 = fmul double 3.000000e+00, %75
%77 = load i32, i32* %20
%78 = sitofp i32 %77 to double
%79 = call double @llvm.fmuladd.f64(double %76, double %78, double 1.000000e+00)
%80 = call double @llvm.fmuladd.f64(double %74, double %79, double %73)
%81 = fmul double %68, %80
store double %81, double* %27
%82 = load i32, i32* %15
%83 = load i32, i32* %19
%84 = add nsw i32 %82, %83
%85 = load i32, i32* %16
%86 = mul nsw i32 %84, %85
%87 = load i32, i32* %14
%88 = add nsw i32 %86, %87
%89 = load i32, i32* %18
%90 = add nsw i32 %88, %89
store i32 %90, i32* %36
%91 = load double*, double** %26
%92 = load i32, i32* %36
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %91, i64 %93
%95 = load double, double* %94
%96 = load double, double* %30
%97 = fmul double 5.000000e-01, %96
%98 = load i32, i32* %20
%99 = sitofp i32 %98 to double
%100 = fneg double %97
%101 = call double @llvm.fmuladd.f64(double %100, double %99, double 5.000000e-01)
%102 = load double, double* %32
%103 = load double, double* %28
%104 = fmul double 3.000000e+00, %103
%105 = load i32, i32* %20
%106 = sitofp i32 %105 to double
%107 = fneg double %104
%108 = call double @llvm.fmuladd.f64(double %107, double %106, double 1.000000e+00)
%109 = call double @llvm.fmuladd.f64(double %102, double %108, double %101)
%110 = load double, double* %27
%111 = call double @llvm.fmuladd.f64(double %95, double %109, double %110)
store double %111, double* %27
%112 = load i32, i32* %15
%113 = load i32, i32* %19
%114 = sub nsw i32 %112, %113
%115 = load i32, i32* %16
%116 = mul nsw i32 %114, %115
%117 = load i32, i32* %14
%118 = add nsw i32 %116, %117
%119 = load i32, i32* %18
%120 = sub nsw i32 %118, %119
store i32 %120, i32* %36
%121 = load double*, double** %26
%122 = load i32, i32* %36
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %121, i64 %123
%125 = load double, double* %124
%126 = load double, double* %32
%127 = load double, double* %28
%128 = load i32, i32* %20
%129 = sitofp i32 %128 to double
%130 = fneg double %127
%131 = call double @llvm.fmuladd.f64(double %130, double %129, double -1.000000e+00)
%132 = fmul double %126, %131
%133 = load double, double* %27
%134 = call double @llvm.fmuladd.f64(double %125, double %132, double %133)
store double %134, double* %27
%135 = load i32, i32* %15
%136 = load i32, i32* %19
%137 = mul nsw i32 2, %136
%138 = add nsw i32 %135, %137
%139 = load i32, i32* %16
%140 = mul nsw i32 %138, %139
%141 = load i32, i32* %14
%142 = add nsw i32 %140, %141
%143 = load i32, i32* %18
%144 = mul nsw i32 2, %143
%145 = add nsw i32 %142, %144
store i32 %145, i32* %36
%146 = load double*, double** %26
%147 = load i32, i32* %36
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds double, double* %146, i64 %148
%150 = load double, double* %149
%151 = load double, double* %32
%152 = load double, double* %28
%153 = load i32, i32* %20
%154 = sitofp i32 %153 to double
%155 = call double @llvm.fmuladd.f64(double %152, double %154, double -1.000000e+00)
%156 = fmul double %151, %155
%157 = load double, double* %27
%158 = call double @llvm.fmuladd.f64(double %150, double %156, double %157)
store double %158, double* %27
%159 = load i32, i32* %15
%160 = load i32, i32* %19
%161 = add nsw i32 %159, %160
%162 = load i32, i32* %19
%163 = load i32, i32* %34
%164 = load i32, i32* %20
%165 = mul nsw i32 %163, %164
%166 = add nsw i32 %165, 1
%167 = mul nsw i32 %162, %166
%168 = sdiv i32 %167, 2
%169 = sub nsw i32 %161, %168
%170 = load i32, i32* %16
%171 = mul nsw i32 %169, %170
%172 = load i32, i32* %14
%173 = add nsw i32 %171, %172
%174 = load i32, i32* %18
%175 = add nsw i32 %173, %174
%176 = load i32, i32* %18
%177 = load i32, i32* %34
%178 = load i32, i32* %20
%179 = mul nsw i32 %177, %178
%180 = add nsw i32 %179, 1
%181 = mul nsw i32 %176, %180
%182 = sdiv i32 %181, 2
%183 = sub nsw i32 %175, %182
store i32 %183, i32* %36
%184 = load double*, double** %26
%185 = load i32, i32* %36
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds double, double* %184, i64 %186
%188 = load double, double* %187
%189 = fmul double %188, 5.000000e-01
%190 = load double, double* %24
%191 = fmul double %189, %190
%192 = load double, double* %22
%193 = fmul double %191, %192
%194 = fmul double %193, 1.000000e+00
%195 = load double, double* %24
%196 = fmul double %194, %195
%197 = load double, double* %22
%198 = fmul double %196, %197
%199 = load double, double* %27
%200 = fneg double %198
%201 = call double @llvm.fmuladd.f64(double %200, double 1.000000e+00, double %199)
store double %201, double* %27
%202 = load i32, i32* %15
%203 = load i32, i32* %19
%204 = add nsw i32 %202, %203
%205 = load i32, i32* %19
%206 = load i32, i32* %34
%207 = load i32, i32* %20
%208 = mul nsw i32 %206, %207
%209 = add nsw i32 %208, 1
%210 = mul nsw i32 %205, %209
%211 = sdiv i32 %210, 2
%212 = sub nsw i32 %204, %211
%213 = load i32, i32* %19
%214 = load i32, i32* %20
%215 = mul nsw i32 %213, %214
%216 = sub nsw i32 1, %215
%217 = add nsw i32 %212, %216
%218 = load i32, i32* %16
%219 = mul nsw i32 %217, %218
%220 = load i32, i32* %14
%221 = add nsw i32 %219, %220
%222 = load i32, i32* %18
%223 = add nsw i32 %221, %222
%224 = load i32, i32* %18
%225 = load i32, i32* %34
%226 = load i32, i32* %20
%227 = mul nsw i32 %225, %226
%228 = add nsw i32 %227, 1
%229 = mul nsw i32 %224, %228
%230 = sdiv i32 %229, 2
%231 = sub nsw i32 %223, %230
%232 = load i32, i32* %18
%233 = load i32, i32* %20
%234 = mul nsw i32 %232, %233
%235 = sub nsw i32 1, %234
%236 = add nsw i32 %231, %235
store i32 %236, i32* %36
%237 = load double*, double** %26
%238 = load i32, i32* %36
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds double, double* %237, i64 %239
%241 = load double, double* %240
%242 = load double, double* %24
%243 = fmul double %241, %242
%244 = load double, double* %22
%245 = fmul double %243, %244
%246 = fmul double %245, 1.000000e+00
%247 = load double, double* %24
%248 = fmul double 2.500000e-01, %247
%249 = load double, double* %22
%250 = fmul double %248, %249
%251 = call double @llvm.fmuladd.f64(double %250, double 1.000000e+00, double -2.500000e-01)
%252 = load double, double* %27
%253 = call double @llvm.fmuladd.f64(double %246, double %251, double %252)
store double %253, double* %27
%254 = load i32, i32* %15
%255 = load i32, i32* %19
%256 = add nsw i32 %254, %255
%257 = load i32, i32* %19
%258 = load i32, i32* %34
%259 = load i32, i32* %20
%260 = mul nsw i32 %258, %259
%261 = add nsw i32 %260, 1
%262 = mul nsw i32 %257, %261
%263 = sdiv i32 %262, 2
%264 = sub nsw i32 %256, %263
%265 = load i32, i32* %19
%266 = load i32, i32* %20
%267 = mul nsw i32 %265, %266
%268 = sub nsw i32 1, %267
%269 = sub nsw i32 %264, %268
%270 = load i32, i32* %16
%271 = mul nsw i32 %269, %270
%272 = load i32, i32* %14
%273 = add nsw i32 %271, %272
%274 = load i32, i32* %18
%275 = add nsw i32 %273, %274
%276 = load i32, i32* %18
%277 = load i32, i32* %34
%278 = load i32, i32* %20
%279 = mul nsw i32 %277, %278
%280 = add nsw i32 %279, 1
%281 = mul nsw i32 %276, %280
%282 = sdiv i32 %281, 2
%283 = sub nsw i32 %275, %282
%284 = load i32, i32* %18
%285 = load i32, i32* %20
%286 = mul nsw i32 %284, %285
%287 = sub nsw i32 1, %286
%288 = sub nsw i32 %283, %287
store i32 %288, i32* %36
%289 = load double*, double** %26
%290 = load i32, i32* %36
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds double, double* %289, i64 %291
%293 = load double, double* %292
%294 = load double, double* %24
%295 = fmul double %293, %294
%296 = load double, double* %22
%297 = fmul double %295, %296
%298 = fmul double %297, 1.000000e+00
%299 = load double, double* %24
%300 = fmul double 2.500000e-01, %299
%301 = load double, double* %22
%302 = fmul double %300, %301
%303 = call double @llvm.fmuladd.f64(double %302, double 1.000000e+00, double 2.500000e-01)
%304 = load double, double* %27
%305 = call double @llvm.fmuladd.f64(double %298, double %303, double %304)
store double %305, double* %27
%306 = load double*, double** %26
%307 = load i32, i32* %21
%308 = sext i32 %307 to i64
%309 = getelementptr inbounds double, double* %306, i64 %308
%310 = load double, double* %309
%311 = load double, double* %29
%312 = fmul double %310, %311
%313 = load i32, i32* %20
%314 = sitofp i32 %313 to double
%315 = fmul double %312, %314
%316 = load double, double* %33
%317 = load double, double* %27
%318 = call double @llvm.fmuladd.f64(double %315, double %316, double %317)
store double %318, double* %27
%319 = load i32, i32* %15
%320 = load i32, i32* %19
%321 = add nsw i32 %319, %320
%322 = load i32, i32* %16
%323 = mul nsw i32 %321, %322
%324 = load i32, i32* %14
%325 = add nsw i32 %323, %324
%326 = load i32, i32* %18
%327 = add nsw i32 %325, %326
store i32 %327, i32* %36
%328 = load double*, double** %26
%329 = load i32, i32* %36
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double, double* %328, i64 %330
%332 = load double, double* %331
%333 = load double, double* %29
%334 = fmul double %332, %333
%335 = load i32, i32* %20
%336 = sitofp i32 %335 to double
%337 = fmul double %334, %336
%338 = load double, double* %33
%339 = load double, double* %27
%340 = fneg double %337
%341 = call double @llvm.fmuladd.f64(double %340, double %338, double %339)
store double %341, double* %27
%342 = load i32, i32* %15
%343 = load i32, i32* %35
%344 = load i32, i32* %19
%345 = load i32, i32* %20
%346 = mul nsw i32 %344, %345
%347 = sub nsw i32 1, %346
%348 = mul nsw i32 %343, %347
%349 = sub nsw i32 %342, %348
%350 = load i32, i32* %16
%351 = mul nsw i32 %349, %350
%352 = load i32, i32* %14
%353 = add nsw i32 %351, %352
%354 = load i32, i32* %35
%355 = load i32, i32* %18
%356 = load i32, i32* %20
%357 = mul nsw i32 %355, %356
%358 = sub nsw i32 1, %357
%359 = mul nsw i32 %354, %358
%360 = sub nsw i32 %353, %359
store i32 %360, i32* %36
%361 = load double*, double** %26
%362 = load i32, i32* %36
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds double, double* %361, i64 %363
%365 = load double, double* %364
%366 = load double, double* %29
%367 = fmul double %365, %366
%368 = load i32, i32* %20
%369 = sitofp i32 %368 to double
%370 = fmul double %367, %369
%371 = load double, double* %33
%372 = load double, double* %27
%373 = fneg double %370
%374 = call double @llvm.fmuladd.f64(double %373, double %371, double %372)
store double %374, double* %27
%375 = load i32, i32* %15
%376 = load i32, i32* %19
%377 = add nsw i32 %375, %376
%378 = load i32, i32* %35
%379 = load i32, i32* %19
%380 = load i32, i32* %20
%381 = mul nsw i32 %379, %380
%382 = sub nsw i32 1, %381
%383 = mul nsw i32 %378, %382
%384 = sub nsw i32 %377, %383
%385 = load i32, i32* %16
%386 = mul nsw i32 %384, %385
%387 = load i32, i32* %14
%388 = add nsw i32 %386, %387
%389 = load i32, i32* %18
%390 = add nsw i32 %388, %389
%391 = load i32, i32* %35
%392 = load i32, i32* %18
%393 = load i32, i32* %20
%394 = mul nsw i32 %392, %393
%395 = sub nsw i32 1, %394
%396 = mul nsw i32 %391, %395
%397 = sub nsw i32 %390, %396
store i32 %397, i32* %36
%398 = load double*, double** %26
%399 = load i32, i32* %36
%400 = sext i32 %399 to i64
%401 = getelementptr inbounds double, double* %398, i64 %400
%402 = load double, double* %401
%403 = load double, double* %29
%404 = fmul double %402, %403
%405 = load i32, i32* %20
%406 = sitofp i32 %405 to double
%407 = fmul double %404, %406
%408 = load double, double* %33
%409 = load double, double* %27
%410 = call double @llvm.fmuladd.f64(double %407, double %408, double %409)
store double %410, double* %27
%411 = load double, double* %27
%412 = load double*, double** %25
store double %411, double* %412
ret void
}

LLVM IR (-O2):
define void @get_face_2d_utopia_b(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, double %8, double %9, double %10, double* nocapture writeonly %11, double* nocapture %12) {
%14 = fmul double %8, %9
%15 = fmul double %8, %10
%16 = fcmp olt double %14, 0.000000e+00
%17 = select i1 %16, double -1.000000e+00, double 1.000000e+00
%18 = fcmp olt double %15, 0.000000e+00
%19 = select i1 %18, double -1.000000e+00, double 1.000000e+00
%20 = select i1 %18, i32 -1, i32 1
%21 = fneg double %14
%22 = tail call double @llvm.fmuladd.f64(double %21, double %14, double 1.000000e+00)
%23 = fmul double %22, 0x3FB5555555555555
%24 = fmul double %15, 2.500000e-01
%25 = fsub double %17, %14
%26 = fmul double %24, %25
%27 = sext i32 %7 to i64
%28 = getelementptr inbounds double, double* %12, i64 %27
%29 = load double, double* %28
%30 = fmul double %14, 5.000000e-01
%31 = sitofp i32 %6 to double
%32 = tail call double @llvm.fmuladd.f64(double %30, double %31, double 5.000000e-01)
%33 = fmul double %17, 3.000000e+00
%34 = tail call double @llvm.fmuladd.f64(double %33, double %31, double 1.000000e+00)
%35 = tail call double @llvm.fmuladd.f64(double %23, double %34, double %32)
%36 = fmul double %35, %29
%37 = add nsw i32 %5, %1
%38 = mul nsw i32 %37, %2
%39 = add i32 %4, %0
%40 = add i32 %39, %38
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds double, double* %12, i64 %41
%43 = load double, double* %42
%44 = fneg double %30
%45 = tail call double @llvm.fmuladd.f64(double %44, double %31, double 5.000000e-01)
%46 = fneg double %33
%47 = tail call double @llvm.fmuladd.f64(double %46, double %31, double 1.000000e+00)
%48 = tail call double @llvm.fmuladd.f64(double %23, double %47, double %45)
%49 = tail call double @llvm.fmuladd.f64(double %43, double %48, double %36)
%50 = sub nsw i32 %1, %5
%51 = mul nsw i32 %50, %2
%52 = sub i32 %0, %4
%53 = add i32 %52, %51
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds double, double* %12, i64 %54
%56 = load double, double* %55
%57 = fneg double %17
%58 = tail call double @llvm.fmuladd.f64(double %57, double %31, double -1.000000e+00)
%59 = fmul double %23, %58
%60 = tail call double @llvm.fmuladd.f64(double %56, double %59, double %49)
%61 = shl nsw i32 %5, 1
%62 = add nsw i32 %61, %1
%63 = mul nsw i32 %62, %2
%64 = shl nsw i32 %4, 1
%65 = add i32 %64, %0
%66 = add i32 %65, %63
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double, double* %12, i64 %67
%69 = load double, double* %68
%70 = tail call double @llvm.fmuladd.f64(double %17, double %31, double -1.000000e+00)
%71 = fmul double %23, %70
%72 = tail call double @llvm.fmuladd.f64(double %69, double %71, double %60)
%73 = sub nsw i32 0, %6
%74 = select i1 %16, i32 %73, i32 %6
%75 = add nsw i32 %74, 1
%76 = mul nsw i32 %75, %5
%77 = sdiv i32 %76, -2
%78 = add i32 %77, %37
%79 = mul nsw i32 %78, %2
%80 = mul nsw i32 %75, %4
%81 = sdiv i32 %80, -2
%82 = add i32 %39, %81
%83 = add i32 %82, %79
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds double, double* %12, i64 %84
%86 = load double, double* %85
%87 = fmul double %86, 5.000000e-01
%88 = fmul double %87, %10
%89 = fmul double %88, %8
%90 = fmul double %89, %10
%91 = fmul double %90, %8
%92 = fsub double %72, %91
%93 = mul nsw i32 %6, %5
%94 = sub nsw i32 1, %93
%95 = add nsw i32 %78, %94
%96 = mul nsw i32 %95, %2
%97 = mul nsw i32 %6, %4
%98 = add i32 %97, -1
%99 = sub nsw i32 1, %97
%100 = add i32 %39, %99
%101 = add i32 %100, %81
%102 = add i32 %101, %96
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds double, double* %12, i64 %103
%105 = load double, double* %104
%106 = fmul double %105, %10
%107 = fmul double %106, %8
%108 = fmul double %10, 2.500000e-01
%109 = fmul double %108, %8
%110 = fadd double %109, -2.500000e-01
%111 = tail call double @llvm.fmuladd.f64(double %107, double %110, double %92)
%112 = sub nsw i32 %78, %94
%113 = mul nsw i32 %112, %2
%114 = add i32 %39, %98
%115 = add i32 %114, %81
%116 = add i32 %115, %113
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double, double* %12, i64 %117
%119 = load double, double* %118
%120 = fmul double %119, %10
%121 = fmul double %120, %8
%122 = fadd double %109, 2.500000e-01
%123 = tail call double @llvm.fmuladd.f64(double %121, double %122, double %111)
%124 = fmul double %19, %29
%125 = fmul double %124, %31
%126 = tail call double @llvm.fmuladd.f64(double %125, double %26, double %123)
%127 = fneg double %43
%128 = fmul double %19, %127
%129 = fmul double %128, %31
%130 = tail call double @llvm.fmuladd.f64(double %129, double %26, double %126)
%131 = mul nsw i32 %20, %94
%132 = sub nsw i32 %1, %131
%133 = mul nsw i32 %132, %2
%134 = mul i32 %98, %20
%135 = add i32 %134, %0
%136 = add i32 %135, %133
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds double, double* %12, i64 %137
%139 = load double, double* %138
%140 = fneg double %139
%141 = fmul double %19, %140
%142 = fmul double %141, %31
%143 = tail call double @llvm.fmuladd.f64(double %142, double %26, double %130)
%144 = sub nsw i32 %37, %131
%145 = mul nsw i32 %144, %2
%146 = add i32 %39, %134
%147 = add i32 %146, %145
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds double, double* %12, i64 %148
%150 = load double, double* %149
%151 = fmul double %19, %150
%152 = fmul double %151, %31
%153 = tail call double @llvm.fmuladd.f64(double %152, double %26, double %143)
store double %153, double* %11
ret void
}