void ROE_solver(double *F, double gamma, double P_L, double RHO_L, double U_L,
                double P_R, double RHO_R, double U_R, double *lambda_max,
                double delta) {
  double C_L, C_R;
  C_L = sqrt(gamma * P_L / RHO_L);
  C_R = sqrt(gamma * P_R / RHO_R);
  double z = 0.5 * (gamma - 1.0) / gamma;
  double P_star, U_star_L, U_star_R, C_star_L, C_star_R, lambda_L_1, lambda_R_1,
      lambda_L_3, lambda_R_3;
  P_star = pow((C_L + C_R - (gamma - 1.0) / 2.0 * (U_R - U_L)) /
                   (C_L / pow(P_L, z) + C_R / pow(P_R, z)),
               1.0 / z);
  C_star_L = C_L * pow(P_star / P_L, z);
  U_star_L = U_L + 2.0 / (gamma - 1.0) * (C_L - C_star_L);
  C_star_R = C_R * pow(P_star / P_R, z);
  U_star_R = U_R + 2.0 / (gamma - 1.0) * (C_star_R - C_R);
  lambda_L_1 = U_L - C_L;
  lambda_R_1 = U_star_L - C_star_L;
  lambda_L_3 = U_star_R + C_star_R;
  lambda_R_3 = U_R + C_R;
  double H_L, H_R;
  H_L = gamma / (gamma - 1.0) * P_L / RHO_L + 0.5 * (U_L * U_L);
  H_R = gamma / (gamma - 1.0) * P_R / RHO_R + 0.5 * (U_R * U_R);
  F[0] = 0.5 * (RHO_L * U_L + RHO_R * U_R);
  F[1] = 0.5 * (RHO_L * U_L * U_L + P_L + RHO_R * U_R * U_R + P_R);
  F[2] = 0.5 * (RHO_L * U_L * H_L + RHO_R * U_R * H_R);
  double RHO_S, U_S, H_S, C_S;
  RHO_S = sqrt(RHO_L * RHO_R);
  U_S = (U_L * sqrt(RHO_L) + U_R * sqrt(RHO_R)) / (sqrt(RHO_L) + sqrt(RHO_R));
  H_S = (H_L * sqrt(RHO_L) + H_R * sqrt(RHO_R)) / (sqrt(RHO_L) + sqrt(RHO_R));
  C_S = sqrt((gamma - 1.0) * (H_S - 0.5 * U_S * U_S));
  double R[3][3];
  double lambda[3], W[3];
  R[0][0] = 1.0;
  R[0][1] = 1.0;
  R[0][2] = 1.0;
  R[1][0] = U_S - C_S;
  R[1][1] = U_S;
  R[1][2] = U_S + C_S;
  R[2][0] = H_S - U_S * C_S;
  R[2][1] = 0.5 * (U_S * U_S);
  R[2][2] = H_S + U_S * C_S;
  int i, j;
  W[0] = 0.5 * ((P_R - P_L) - RHO_S * C_S * (U_R - U_L)) / (C_S * C_S);
  W[1] = (RHO_R - RHO_L) - (P_R - P_L) / (C_S * C_S);
  W[2] = 0.5 * ((P_R - P_L) + RHO_S * C_S * (U_R - U_L)) / (C_S * C_S);
  lambda[0] = fabs(U_S - C_S);
  lambda[1] = fabs(U_S);
  lambda[2] = fabs(U_S + C_S);
  *lambda_max = fabs(U_S) + C_S;
  if (lambda_L_1 < 0 && lambda_R_1 > 0) {
    F[0] = RHO_L * U_L;
    F[1] = RHO_L * U_L * U_L + P_L;
    F[2] = RHO_L * U_L * H_L;
    lambda[0] =
        lambda_L_1 * (lambda_R_1 - (U_S - C_S)) / (lambda_R_1 - lambda_L_1);
    for (i = 0; i < 3; i++) {
      F[i] += lambda[0] * W[0] * R[i][0];
    }
  } else if (lambda_L_3 < 0 && lambda_R_3 > 0) {
    F[0] = RHO_R * U_R;
    F[1] = RHO_R * U_R * U_R + P_R;
    F[2] = RHO_R * U_R * H_R;
    lambda[2] =
        lambda_R_3 * ((U_S + C_S) - lambda_L_3) / (lambda_R_3 - lambda_L_3);
    for (i = 0; i < 3; i++) {
      F[i] += -lambda[2] * W[2] * R[i][2];
    }
  } else {
    for (i = 0; i < 3; i++) {
      for (j = 0; j < 3; j++) {
        F[i] += -0.5 * lambda[j] * W[j] * R[i][j];
      }
    }
  }
}


x86 assembly (clang, -O0):
<ROE_solver>:
push   %rbp
mov    %rsp,%rbp
sub    $0x200,%rsp
mov    %rdi,-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    %rsi,-0x48(%rbp)
movsd  %xmm7,-0x50(%rbp)
movsd  -0x10(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  0xe7e(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe6a(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  0xe4d(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  0xe49(%rip),%xmm2
divsd  %xmm2,%xmm0
movsd  -0x40(%rbp),%xmm2
subsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1f8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  -0x1f0(%rbp),%xmm2
ff
movsd  -0x1e8(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x1e0(%rbp),%xmm0
ff
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  0xd8e(%rip),%xmm1
divsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1d8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movsd  0xd35(%rip),%xmm0
subsd  %xmm0,%xmm2
movsd  0xd31(%rip),%xmm0
divsd  %xmm2,%xmm0
movsd  -0x58(%rbp),%xmm2
subsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
call   1030 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x1d0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movsd  0xcc1(%rip),%xmm0
subsd  %xmm0,%xmm2
movsd  0xcbd(%rip),%xmm0
divsd  %xmm2,%xmm0
movsd  -0x90(%rbp),%xmm2
ff
subsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x10(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  0xc37(%rip),%xmm2
subsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  0xc0b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x10(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  0xbf1(%rip),%xmm2
subsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
mulsd  -0x30(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0xbc5(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xb91(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x38(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
addsd  -0x30(%rbp),%xmm1
movsd  0xb45(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x20(%rbp),%xmm1
mulsd  -0x28(%rbp),%xmm1
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xb04(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  -0x1c8(%rbp),%xmm1
ff
movsd  -0x1c0(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x1b8(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  -0x1b0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x1a8(%rbp),%xmm0
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  -0x1a0(%rbp),%xmm1
ff
movsd  -0x198(%rbp),%xmm2
ff
movaps %xmm0,%xmm3
movsd  -0x190(%rbp),%xmm0
ff
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  -0x188(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x180(%rbp),%xmm0
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  0x98d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  -0xd8(%rbp),%xmm2
ff
movsd  0x971(%rip),%xmm1
mulsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm3
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0x931(%rip),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0x921(%rip),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  0x911(%rip),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
movsd  0x86a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xd8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
subsd  -0x28(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x7eb(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0xe0(%rbp),%xmm2
ff
mulsd  -0xe0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movsd  -0x40(%rbp),%xmm2
subsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x763(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
movaps 0x71c(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movaps 0x701(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movaps 0x6de(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movaps 0x6c3(%rip),%xmm1
pand   %xmm1,%xmm0
addsd  -0xe0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
ucomisd -0x98(%rbp),%xmm0
ff
jbe    1a83 <ROE_solver+0x963>
movsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1a83 <ROE_solver+0x963>
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm2
ff
subsd  -0xe0(%rbp),%xmm2
ff
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0xa0(%rbp),%xmm1
ff
subsd  -0x98(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movl   $0x0,-0x174(%rbp)
cmpl   $0x3,-0x174(%rbp)
jge    1a7e <ROE_solver+0x95e>
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x170(%rbp),%xmm0
ff
movslq -0x174(%rbp),%rcx
lea    -0x130(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x174(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
jmp    1a17 <ROE_solver+0x8f7>
jmp    1c94 <ROE_solver+0xb74>
xorps  %xmm0,%xmm0
ucomisd -0xa8(%rbp),%xmm0
ff
jbe    1bc9 <ROE_solver+0xaa9>
movsd  -0xb0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1bc9 <ROE_solver+0xaa9>
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
addsd  -0xe0(%rbp),%xmm1
ff
subsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  -0xb0(%rbp),%xmm1
ff
subsd  -0xa8(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movl   $0x0,-0x174(%rbp)
cmpl   $0x3,-0x174(%rbp)
jge    1bc4 <ROE_solver+0xaa4>
movsd  -0x140(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x160(%rbp),%xmm0
ff
movslq -0x174(%rbp),%rcx
lea    -0x130(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x174(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
jmp    1b45 <ROE_solver+0xa25>
jmp    1c8f <ROE_solver+0xb6f>
movl   $0x0,-0x174(%rbp)
cmpl   $0x3,-0x174(%rbp)
jge    1c8a <ROE_solver+0xb6a>
movl   $0x0,-0x178(%rbp)
cmpl   $0x3,-0x178(%rbp)
jge    1c71 <ROE_solver+0xb51>
movslq -0x178(%rbp),%rax
movsd  0x422(%rip),%xmm0
mulsd  -0x150(%rbp,%rax,8),%xmm0
ff ff
movslq -0x178(%rbp),%rax
mulsd  -0x170(%rbp,%rax,8),%xmm0
ff ff
movslq -0x174(%rbp),%rcx
lea    -0x130(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x178(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x174(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x178(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x178(%rbp)
jmp    1bea <ROE_solver+0xaca>
jmp    1c76 <ROE_solver+0xb56>
mov    -0x174(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x174(%rbp)
jmp    1bd3 <ROE_solver+0xab3>
jmp    1c8f <ROE_solver+0xb6f>
jmp    1c94 <ROE_solver+0xb74>
add    $0x200,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ROE_solver>:
push   %r14
push   %rbx
sub    $0xf8,%rsp
mov    %rsi,%r14
movsd  %xmm6,0x30(%rsp)
movsd  %xmm4,0x38(%rsp)
movsd  %xmm3,0x40(%rsp)
movsd  %xmm2,0x18(%rsp)
movapd %xmm0,%xmm4
mov    %rdi,%rbx
movsd  %xmm1,0x58(%rsp)
mulsd  %xmm1,%xmm0
divsd  %xmm2,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm5,0x10(%rsp)
movsd  %xmm4,(%rsp)
jb     1178 <ROE_solver+0x58>
xorps  %xmm3,%xmm3
sqrtsd %xmm0,%xmm3
jmp    1190 <ROE_solver+0x70>
call   1040 <sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm4
movsd  0x10(%rsp),%xmm5
movapd %xmm0,%xmm3
movapd %xmm4,%xmm0
mulsd  0x38(%rsp),%xmm0
divsd  %xmm5,%xmm0
ucomisd %xmm1,%xmm0
movapd %xmm3,0x70(%rsp)
jb     11b0 <ROE_solver+0x90>
sqrtsd %xmm0,%xmm0
jmp    11c0 <ROE_solver+0xa0>
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm4
movapd 0x70(%rsp),%xmm3
movsd  0x30(%rsp),%xmm1
movapd %xmm0,0xa0(%rsp)
movsd  0xe29(%rip),%xmm2
addsd  %xmm4,%xmm2
movapd %xmm2,%xmm5
movsd  %xmm2,0x50(%rsp)
mulsd  0xe1b(%rip),%xmm5
divsd  %xmm4,%xmm5
movsd  %xmm5,0x20(%rsp)
addsd  %xmm0,%xmm3
movapd %xmm1,%xmm4
subsd  0x40(%rsp),%xmm4
movsd  0xe03(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  %xmm4,0x90(%rsp)
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x58(%rsp),%xmm0
movapd %xmm5,%xmm1
call   1030 <pow@plt>
movaps %xmm0,0x60(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
call   1030 <pow@plt>
movapd 0x70(%rsp),%xmm1
unpcklpd 0xa0(%rsp),%xmm1
movapd 0x60(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%rsp),%xmm0
divsd  %xmm2,%xmm0
movsd  0xd90(%rip),%xmm1
divsd  0x20(%rsp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,0x8(%rsp)
divsd  0x58(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,0xf0(%rsp)
movsd  0x8(%rsp),%xmm0
divsd  0x38(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
call   1030 <pow@plt>
movapd %xmm0,%xmm8
movsd  (%rsp),%xmm2
divsd  0x50(%rsp),%xmm2
movapd %xmm2,%xmm0
movsd  0x58(%rsp),%xmm11
mulsd  %xmm11,%xmm0
movsd  0x18(%rsp),%xmm10
divsd  %xmm10,%xmm0
movsd  0x40(%rsp),%xmm3
movapd %xmm3,%xmm7
mulsd  %xmm3,%xmm7
movsd  0xcfc(%rip),%xmm1
mulsd  %xmm1,%xmm7
addsd  %xmm0,%xmm7
movsd  0x38(%rsp),%xmm13
mulsd  %xmm13,%xmm2
movsd  0x10(%rsp),%xmm9
divsd  %xmm9,%xmm2
movsd  0x30(%rsp),%xmm0
movapd %xmm0,%xmm5
mulsd  %xmm0,%xmm5
mulsd  %xmm1,%xmm5
movapd %xmm1,%xmm12
addsd  %xmm2,%xmm5
movapd %xmm9,%xmm4
mulsd  %xmm0,%xmm4
movapd %xmm0,%xmm1
movapd %xmm10,%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm2,%xmm0
addsd  %xmm4,%xmm0
movapd %xmm2,%xmm6
mulsd  %xmm3,%xmm6
addsd  %xmm11,%xmm6
movapd %xmm4,%xmm11
mulsd  %xmm1,%xmm11
movapd %xmm11,%xmm1
addsd  %xmm6,%xmm1
addsd  %xmm13,%xmm1
unpcklpd %xmm1,%xmm0
mulpd  0xc9a(%rip),%xmm0
movupd %xmm0,(%rbx)
movapd %xmm4,%xmm1
mulsd  %xmm5,%xmm1
movapd %xmm2,%xmm3
mulsd  %xmm7,%xmm3
movapd %xmm3,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm12,%xmm0
movsd  %xmm0,0x10(%rbx)
movapd %xmm10,%xmm0
mulsd  %xmm9,%xmm0
xorpd  %xmm9,%xmm9
ucomisd %xmm9,%xmm0
movsd  %xmm4,0xc8(%rsp)
movsd  %xmm11,0xc0(%rsp)
movsd  %xmm1,0xb8(%rsp)
movsd  %xmm8,0xe8(%rsp)
movsd  %xmm7,(%rsp)
movsd  %xmm6,0xe0(%rsp)
movsd  %xmm2,0xd8(%rsp)
movsd  %xmm3,0xd0(%rsp)
movsd  %xmm5,0x8(%rsp)
jb     1424 <ROE_solver+0x304>
sqrtsd %xmm0,%xmm0
jmp    1435 <ROE_solver+0x315>
call   1040 <sqrt@plt>
xorpd  %xmm9,%xmm9
movsd  0x18(%rsp),%xmm10
ucomisd %xmm9,%xmm10
movsd  %xmm0,0x98(%rsp)
jb     144f <ROE_solver+0x32f>
xorps  %xmm1,%xmm1
sqrtsd %xmm10,%xmm1
jmp    145d <ROE_solver+0x33d>
movapd %xmm10,%xmm0
call   1040 <sqrt@plt>
movapd %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm1,0x20(%rsp)
jb     147c <ROE_solver+0x35c>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    1489 <ROE_solver+0x369>
call   1040 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm0
movsd  %xmm1,0x48(%rsp)
jb     14a4 <ROE_solver+0x384>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    14ad <ROE_solver+0x38d>
call   1040 <sqrt@plt>
movapd %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movsd  %xmm1,0x60(%rsp)
jb     14cc <ROE_solver+0x3ac>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    14d9 <ROE_solver+0x3b9>
call   1040 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm0
movsd  %xmm1,0x88(%rsp)
jb     14f5 <ROE_solver+0x3d5>
sqrtsd %xmm0,%xmm8
jmp    14ff <ROE_solver+0x3df>
call   1040 <sqrt@plt>
movapd %xmm0,%xmm8
movsd  0x10(%rsp),%xmm0
movsd  0x30(%rsp),%xmm1
movapd 0x20(%rsp),%xmm3
movsd  0x48(%rsp),%xmm5
mulsd  %xmm1,%xmm5
mulsd  0x40(%rsp),%xmm3
xorpd  %xmm6,%xmm6
ucomisd %xmm6,%xmm0
jb     1531 <ROE_solver+0x411>
sqrtsd %xmm0,%xmm0
jmp    1566 <ROE_solver+0x446>
movapd %xmm3,0x20(%rsp)
movsd  %xmm5,0x48(%rsp)
movsd  %xmm8,0xb0(%rsp)
call   1040 <sqrt@plt>
xorpd  %xmm6,%xmm6
movsd  0xb0(%rsp),%xmm8
movsd  0x48(%rsp),%xmm5
movapd 0x20(%rsp),%xmm3
movsd  0x18(%rsp),%xmm1
movsd  (%rsp),%xmm7
movsd  0x8(%rsp),%xmm2
movsd  0x60(%rsp),%xmm4
movsd  0x88(%rsp),%xmm9
addsd  %xmm5,%xmm3
addsd  %xmm9,%xmm4
mulsd  %xmm0,%xmm2
mulsd  %xmm8,%xmm7
ucomisd %xmm6,%xmm1
jb     15a8 <ROE_solver+0x488>
xorps  %xmm5,%xmm5
sqrtsd %xmm1,%xmm5
jmp    15e3 <ROE_solver+0x4c3>
movapd %xmm1,%xmm0
movsd  %xmm7,(%rsp)
movapd %xmm3,0x20(%rsp)
movsd  %xmm2,0x8(%rsp)
movsd  %xmm4,0x60(%rsp)
call   1040 <sqrt@plt>
movsd  0x60(%rsp),%xmm4
movsd  0x8(%rsp),%xmm2
movapd 0x20(%rsp),%xmm3
movsd  (%rsp),%xmm7
movapd %xmm0,%xmm5
movsd  0x10(%rsp),%xmm0
divsd  %xmm4,%xmm3
addsd  %xmm2,%xmm7
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movapd %xmm3,0x20(%rsp)
jb     1607 <ROE_solver+0x4e7>
sqrtsd %xmm0,%xmm0
jmp    162c <ROE_solver+0x50c>
movsd  %xmm7,(%rsp)
movsd  %xmm5,0x8(%rsp)
call   1040 <sqrt@plt>
movsd  0x8(%rsp),%xmm5
xorpd  %xmm1,%xmm1
movapd 0x20(%rsp),%xmm3
movsd  (%rsp),%xmm7
movapd 0x70(%rsp),%xmm2
movsd  0x50(%rsp),%xmm4
addsd  %xmm0,%xmm5
divsd  %xmm5,%xmm7
movsd  0x9d7(%rip),%xmm9
movsd  0x40(%rsp),%xmm0
subsd  %xmm2,%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x9af(%rip),%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm7,%xmm0
mulsd  %xmm4,%xmm0
ucomisd %xmm1,%xmm0
jb     167d <ROE_solver+0x55d>
sqrtsd %xmm0,%xmm0
jmp    16a7 <ROE_solver+0x587>
movsd  %xmm7,(%rsp)
call   1040 <sqrt@plt>
movsd  0x990(%rip),%xmm9
movapd 0x20(%rsp),%xmm3
movsd  (%rsp),%xmm7
movsd  0x50(%rsp),%xmm4
movapd 0x70(%rsp),%xmm2
movapd 0xa0(%rsp),%xmm11
movsd  0x98(%rsp),%xmm1
movsd  0x90(%rsp),%xmm5
divsd  %xmm4,%xmm9
movapd %xmm3,%xmm12
subsd  %xmm0,%xmm12
movapd %xmm3,%xmm10
mulsd  %xmm0,%xmm10
movapd %xmm7,%xmm4
subsd  %xmm10,%xmm4
movsd  %xmm4,(%rsp)
movsd  0x38(%rsp),%xmm14
subsd  0x58(%rsp),%xmm14
mulsd  %xmm0,%xmm1
mulsd  %xmm5,%xmm1
movapd %xmm14,%xmm6
subsd  %xmm1,%xmm6
mulsd  0x8f7(%rip),%xmm6
movapd %xmm0,%xmm15
mulsd  %xmm0,%xmm15
divsd  %xmm15,%xmm6
movapd 0x918(%rip),%xmm4
movapd %xmm3,%xmm13
andpd  %xmm4,%xmm13
movapd %xmm13,%xmm5
addsd  %xmm0,%xmm5
movsd  %xmm5,(%r14)
xorpd  %xmm8,%xmm8
ucomisd 0x8(%rsp),%xmm8
jbe    17cd <ROE_solver+0x6ad>
movsd  0xf0(%rsp),%xmm5
mulsd  %xmm2,%xmm5
subsd  %xmm5,%xmm2
mulsd  %xmm9,%xmm2
addsd  0x40(%rsp),%xmm2
subsd  %xmm5,%xmm2
ucomisd %xmm8,%xmm2
jbe    17cd <ROE_solver+0x6ad>
movapd %xmm2,%xmm4
subsd  %xmm12,%xmm4
movsd  0x8(%rsp),%xmm0
mulsd  %xmm0,%xmm4
subsd  %xmm0,%xmm2
divsd  %xmm2,%xmm4
mulsd  %xmm6,%xmm4
movsd  0xd8(%rsp),%xmm0
addsd  %xmm4,%xmm0
movsd  %xmm0,(%rbx)
mulsd  %xmm4,%xmm12
addsd  0xe0(%rsp),%xmm12
movsd  %xmm12,0x8(%rbx)
mulsd  (%rsp),%xmm4
addsd  0xd0(%rsp),%xmm4
jmp    1947 <ROE_solver+0x827>
movsd  0xe8(%rsp),%xmm2
mulsd  %xmm11,%xmm2
movapd %xmm2,%xmm5
subsd  %xmm11,%xmm5
mulsd  %xmm5,%xmm9
movsd  0x30(%rsp),%xmm5
addsd  %xmm5,%xmm9
addsd  %xmm2,%xmm9
addsd  %xmm3,%xmm0
addsd  %xmm7,%xmm10
addsd  %xmm14,%xmm1
mulsd  0x7f9(%rip),%xmm1
divsd  %xmm15,%xmm1
ucomisd %xmm9,%xmm8
jbe    189a <ROE_solver+0x77a>
addsd  %xmm5,%xmm11
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm11
jbe    189a <ROE_solver+0x77a>
movsd  0xc0(%rsp),%xmm4
addsd  0x38(%rsp),%xmm4
movapd %xmm0,%xmm3
subsd  %xmm9,%xmm3
movapd %xmm11,%xmm2
subsd  %xmm9,%xmm2
xorpd  0x7fa(%rip),%xmm11
mulsd  %xmm3,%xmm11
divsd  %xmm2,%xmm11
mulsd  %xmm11,%xmm1
movsd  0xc8(%rsp),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx)
mulsd  %xmm1,%xmm0
addsd  %xmm4,%xmm0
movsd  %xmm0,0x8(%rbx)
mulsd  %xmm10,%xmm1
addsd  0xb8(%rsp),%xmm1
movapd %xmm1,%xmm4
jmp    1947 <ROE_solver+0x827>
movapd %xmm3,%xmm9
mulsd  %xmm3,%xmm9
mulsd  0x75b(%rip),%xmm9
movsd  0x10(%rsp),%xmm5
subsd  0x18(%rsp),%xmm5
divsd  %xmm15,%xmm14
subsd  %xmm14,%xmm5
movapd %xmm12,%xmm2
andpd  %xmm4,%xmm2
andpd  %xmm0,%xmm4
movsd  0x738(%rip),%xmm7
mulsd  %xmm7,%xmm2
mulsd  %xmm6,%xmm2
movsd  (%rbx),%xmm6
addsd  %xmm2,%xmm6
mulsd  %xmm7,%xmm13
mulsd  %xmm5,%xmm13
addsd  %xmm13,%xmm6
mulsd  %xmm7,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm4,%xmm6
movsd  %xmm6,(%rbx)
mulsd  %xmm2,%xmm12
addsd  0x8(%rbx),%xmm12
mulsd  %xmm13,%xmm3
addsd  %xmm12,%xmm3
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,0x8(%rbx)
mulsd  (%rsp),%xmm2
addsd  0x10(%rbx),%xmm2
mulsd  %xmm9,%xmm13
addsd  %xmm2,%xmm13
mulsd  %xmm10,%xmm4
addsd  %xmm13,%xmm4
movsd  %xmm4,0x10(%rbx)
add    $0xf8,%rsp
pop    %rbx
pop    %r14
ret

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

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