#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double sqrt(double const);
void Roe(double *UR, double *UL, double *F) {
  int i;
  const double gamma = 1.4;
  double rho_r, u_r, p_r, h_r;
  rho_r = UR[0];
  u_r = UR[1] / rho_r;
  p_r = (UR[2] - rho_r * u_r * u_r / 2) * (gamma - 1);
  h_r = (UR[2] + p_r) / rho_r;
  double rho_l, u_l, p_l, h_l;
  rho_l = UL[0];
  u_l = UL[1] / rho_l;
  p_l = (UL[2] - rho_l * u_l * u_l / 2) * (gamma - 1);
  h_l = (UL[2] + p_l) / rho_l;
  double rho_rl, u_rl, p_rl, h_rl, a_rl;
  rho_rl = sqrt(rho_r * rho_l);
  u_rl = (sqrt(rho_r) * u_r + sqrt(rho_l) * u_l) / (sqrt(rho_r) + sqrt(rho_l));
  h_rl = (sqrt(rho_r) * h_r + sqrt(rho_l) * h_l) / (sqrt(rho_r) + sqrt(rho_l));
  a_rl = sqrt((gamma - 1.0) * (h_rl - 0.5 * u_rl * u_rl));
  double l1, l2, l3;
  l1 = u_rl;
  l2 = u_rl + a_rl;
  l3 = u_rl - a_rl;
  double d_rho, d_p, d_u;
  double dv1, dv2, dv3;
  d_rho = rho_r - rho_l;
  d_p = p_r - p_l;
  d_u = u_r - u_l;
  dv1 = d_rho - d_p / (a_rl * a_rl);
  dv2 = d_u + d_p / (rho_rl * a_rl);
  dv3 = d_u - d_p / (rho_rl * a_rl);
  double r1_1, r1_2, r1_3;
  double r2_1, r2_2, r2_3;
  double r3_1, r3_2, r3_3;
  r1_1 = 1;
  r1_2 = u_rl;
  r1_3 = u_rl * u_rl * 0.5;
  r2_1 = (rho_rl / (2.0 * a_rl));
  r2_2 = (rho_rl / (2.0 * a_rl)) * (u_rl + a_rl);
  r2_3 = (rho_rl / (2.0 * a_rl)) * (h_rl + a_rl * u_rl);
  r3_1 = -(rho_rl / (2.0 * a_rl));
  r3_2 = -(rho_rl / (2.0 * a_rl)) * (u_rl - a_rl);
  r3_3 = -(rho_rl / (2.0 * a_rl)) * (h_rl - a_rl * u_rl);
  double f1, f2, f3;
  double minl1, minl2, minl3;
  minl1 = 0.0 < l1 ? 0.0 : l1;
  minl2 = 0.0 < l2 ? 0.0 : l2;
  minl3 = 0.0 < l3 ? 0.0 : l3;
  f1 = rho_l * u_l +
       (r1_1 * minl1 * dv1 + r2_1 * minl2 * dv2 + r3_1 * minl3 * dv3);
  f2 = rho_l * u_l * u_l + p_l +
       (r1_2 * minl1 * dv1 + r2_2 * minl2 * dv2 + r3_2 * minl3 * dv3);
  f3 = rho_l * h_l * u_l +
       (r1_3 * minl1 * dv1 + r2_3 * minl2 * dv2 + r3_3 * minl3 * dv3);
  F[0] = f1;
  F[1] = f2;
  F[2] = f3;
}


x86 assembly (clang, -O0):
<Roe>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movsd  0xef1(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x30(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
movsd  0xe8c(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  0xe94(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x40(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x50(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  0xe1b(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  0xe23(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x60(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  -0x190(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x188(%rbp),%xmm0
ff
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  -0x180(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x178(%rbp),%xmm0
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  -0x170(%rbp),%xmm2
ff
movaps %xmm0,%xmm1
movsd  -0x168(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  -0x160(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x158(%rbp),%xmm0
ff
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xcb1(%rip),%xmm1
mulsd  -0x78(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xc90(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0x90(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
mulsd  -0x90(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm2
mulsd  -0x90(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xb78(%rip),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  0xb49(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xb28(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xb07(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x78(%rbp),%xmm1
addsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xad5(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x78(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xa93(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xa5b(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x78(%rbp),%xmm1
subsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  0xa12(%rip),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
divsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x78(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1676 <Roe+0x566>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
jmp    1686 <Roe+0x576>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x198(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    16bb <Roe+0x5ab>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
jmp    16cb <Roe+0x5bb>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1700 <Roe+0x5f0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
jmp    1710 <Roe+0x600>
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm3
ff
mulsd  -0x140(%rbp),%xmm3
ff
movsd  -0xc8(%rbp),%xmm4
ff
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  -0x148(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  -0x110(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe8(%rbp),%xmm2
ff
mulsd  -0x140(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm3
ff
movsd  -0x100(%rbp),%xmm1
ff
mulsd  -0x148(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x118(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm3
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm3
ff
mulsd  -0x140(%rbp),%xmm3
ff
movsd  -0xc8(%rbp),%xmm4
ff
movsd  -0x108(%rbp),%xmm1
ff
mulsd  -0x148(%rbp),%xmm1
ff
mulsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  -0x120(%rbp),%xmm1
ff
mulsd  -0x150(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm4
ff
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x130(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x138(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
add    $0x1b0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Roe>:
push   %rbx
sub    $0x80,%rsp
mov    %rdx,%rbx
movsd  (%rdi),%xmm2
movsd  0x8(%rdi),%xmm0
divsd  %xmm2,%xmm0
movsd  0x10(%rdi),%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm2,%xmm4
movsd  %xmm0,0x58(%rsp)
mulsd  %xmm0,%xmm4
movsd  (%rsi),%xmm3
movsd  0x8(%rsi),%xmm1
divsd  %xmm3,%xmm1
movsd  0x10(%rsi),%xmm0
movsd  %xmm0,0x28(%rsp)
movapd %xmm3,%xmm0
movsd  %xmm1,0x50(%rsp)
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x78(%rsp)
movapd %xmm2,%xmm0
movsd  %xmm3,0x18(%rsp)
mulsd  %xmm3,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm2,0x20(%rsp)
jb     1191 <Roe+0x81>
sqrtsd %xmm0,%xmm0
jmp    11aa <Roe+0x9a>
movsd  %xmm4,(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm4
movsd  0x20(%rsp),%xmm2
movsd  %xmm0,0x68(%rsp)
mulsd  0x58(%rsp),%xmm4
movsd  0xe42(%rip),%xmm5
movsd  0x50(%rsp),%xmm0
mulsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x70(%rsp)
ucomisd %xmm1,%xmm2
jb     11df <Roe+0xcf>
xorps  %xmm1,%xmm1
sqrtsd %xmm2,%xmm1
jmp    11fe <Roe+0xee>
movapd %xmm2,%xmm0
movsd  %xmm4,(%rsp)
call   1030 <sqrt@plt>
movsd  0xe0b(%rip),%xmm5
movsd  (%rsp),%xmm4
movapd %xmm0,%xmm1
mulsd  %xmm5,%xmm4
mulsd  0x70(%rsp),%xmm5
xorpd  %xmm6,%xmm6
movsd  0x18(%rsp),%xmm0
ucomisd %xmm6,%xmm0
movsd  %xmm1,0x10(%rsp)
jb     1227 <Roe+0x117>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    124a <Roe+0x13a>
movsd  %xmm4,(%rsp)
movsd  %xmm5,0x30(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm6,%xmm6
movsd  0x30(%rsp),%xmm5
movsd  (%rsp),%xmm4
movapd %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
movsd  0x8(%rsp),%xmm3
subsd  %xmm4,%xmm3
movsd  0xda6(%rip),%xmm4
movsd  0x28(%rsp),%xmm2
subsd  %xmm5,%xmm2
ucomisd %xmm6,%xmm0
movsd  %xmm1,0x38(%rsp)
jb     127e <Roe+0x16e>
sqrtsd %xmm0,%xmm0
jmp    12a3 <Roe+0x193>
movsd  %xmm2,0x30(%rsp)
movsd  %xmm3,0x48(%rsp)
call   1030 <sqrt@plt>
movsd  0xd71(%rip),%xmm4
movsd  0x48(%rsp),%xmm3
movsd  0x30(%rsp),%xmm2
movsd  %xmm0,0x40(%rsp)
movsd  0x18(%rsp),%xmm0
mulsd  %xmm4,%xmm3
mulsd  %xmm4,%xmm2
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm0
movsd  %xmm2,0x30(%rsp)
movsd  %xmm3,0x48(%rsp)
jb     12d3 <Roe+0x1c3>
sqrtsd %xmm0,%xmm0
jmp    12e8 <Roe+0x1d8>
call   1030 <sqrt@plt>
xorpd  %xmm4,%xmm4
movsd  0x48(%rsp),%xmm3
movsd  0x30(%rsp),%xmm2
movsd  %xmm0,0x60(%rsp)
movsd  0x20(%rsp),%xmm1
movsd  0x8(%rsp),%xmm5
addsd  %xmm3,%xmm5
movsd  0x28(%rsp),%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
ucomisd %xmm4,%xmm1
jb     131d <Roe+0x20d>
xorps  %xmm4,%xmm4
sqrtsd %xmm1,%xmm4
jmp    133c <Roe+0x22c>
movapd %xmm1,%xmm0
movsd  %xmm5,0x8(%rsp)
call   1030 <sqrt@plt>
movsd  0x8(%rsp),%xmm5
movsd  0x20(%rsp),%xmm1
movapd %xmm0,%xmm4
movsd  0x18(%rsp),%xmm2
movsd  0x10(%rsp),%xmm3
movsd  0x38(%rsp),%xmm6
mulsd  0x50(%rsp),%xmm6
mulsd  0x58(%rsp),%xmm3
divsd  %xmm1,%xmm5
movsd  0x28(%rsp),%xmm0
divsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
jb     137e <Roe+0x26e>
sqrtsd %xmm2,%xmm7
jmp    13c3 <Roe+0x2b3>
movapd %xmm2,%xmm0
movsd  %xmm3,0x10(%rsp)
movsd  %xmm4,(%rsp)
movsd  %xmm5,0x8(%rsp)
movsd  %xmm6,0x38(%rsp)
call   1030 <sqrt@plt>
movsd  0x38(%rsp),%xmm6
movsd  0x8(%rsp),%xmm5
movsd  (%rsp),%xmm4
movsd  0x10(%rsp),%xmm3
movsd  0x20(%rsp),%xmm1
movapd %xmm0,%xmm7
xorpd  %xmm0,%xmm0
addsd  %xmm6,%xmm3
movsd  0x40(%rsp),%xmm2
addsd  0x60(%rsp),%xmm2
mulsd  0x28(%rsp),%xmm7
mulsd  %xmm5,%xmm4
ucomisd %xmm0,%xmm1
jb     13e9 <Roe+0x2d9>
sqrtsd %xmm1,%xmm1
jmp    1424 <Roe+0x314>
movapd %xmm1,%xmm0
movsd  %xmm3,0x10(%rsp)
movsd  %xmm4,(%rsp)
movsd  %xmm2,0x40(%rsp)
movsd  %xmm7,0x8(%rsp)
call   1030 <sqrt@plt>
movsd  0x8(%rsp),%xmm7
movsd  0x40(%rsp),%xmm2
movsd  (%rsp),%xmm4
movsd  0x10(%rsp),%xmm3
movapd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
divsd  %xmm2,%xmm3
addsd  %xmm7,%xmm4
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movsd  %xmm3,0x10(%rsp)
jb     1448 <Roe+0x338>
sqrtsd %xmm0,%xmm0
jmp    146d <Roe+0x35d>
movsd  %xmm4,(%rsp)
movsd  %xmm1,0x8(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm2,%xmm2
movsd  0x8(%rsp),%xmm1
movsd  (%rsp),%xmm4
movsd  0x10(%rsp),%xmm3
addsd  %xmm0,%xmm1
divsd  %xmm1,%xmm4
movsd  0xb93(%rip),%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm3,%xmm0
movsd  %xmm4,(%rsp)
addsd  %xmm4,%xmm0
mulsd  0xb72(%rip),%xmm0
ucomisd %xmm2,%xmm0
jb     14a2 <Roe+0x392>
sqrtsd %xmm0,%xmm0
jmp    14ad <Roe+0x39d>
call   1030 <sqrt@plt>
movsd  0x10(%rsp),%xmm3
movapd %xmm3,%xmm13
addsd  %xmm0,%xmm13
movsd  0x30(%rsp),%xmm12
movsd  0x48(%rsp),%xmm5
subsd  %xmm12,%xmm5
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm5,%xmm4
divsd  %xmm2,%xmm4
movapd %xmm3,%xmm15
subsd  %xmm0,%xmm15
movsd  0x20(%rsp),%xmm11
subsd  0x18(%rsp),%xmm11
movsd  0x58(%rsp),%xmm9
subsd  0x50(%rsp),%xmm9
subsd  %xmm4,%xmm11
movsd  0x68(%rsp),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
divsd  %xmm2,%xmm5
movapd %xmm9,%xmm10
addsd  %xmm5,%xmm10
subsd  %xmm5,%xmm9
movapd %xmm0,%xmm4
addsd  %xmm0,%xmm4
divsd  %xmm4,%xmm1
mulsd  %xmm3,%xmm0
movapd %xmm0,%xmm8
movsd  (%rsp),%xmm4
addsd  %xmm4,%xmm8
mulsd  %xmm1,%xmm8
subsd  %xmm0,%xmm4
mulsd  %xmm1,%xmm4
xorpd  %xmm2,%xmm2
minsd  %xmm3,%xmm2
xorpd  %xmm6,%xmm6
minsd  %xmm13,%xmm6
mulsd  %xmm1,%xmm13
xorpd  %xmm5,%xmm5
minsd  %xmm15,%xmm5
mulsd  %xmm1,%xmm15
movapd %xmm5,%xmm7
mulsd  %xmm1,%xmm7
mulsd  %xmm6,%xmm1
mulsd  %xmm10,%xmm1
movapd %xmm2,%xmm0
mulsd  %xmm11,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm9,%xmm7
subsd  %xmm7,%xmm0
movsd  0x78(%rsp),%xmm14
addsd  %xmm0,%xmm14
movsd  0x70(%rsp),%xmm7
addsd  %xmm12,%xmm7
movapd %xmm3,%xmm0
mulsd  %xmm2,%xmm3
mulsd  %xmm6,%xmm13
mulsd  %xmm10,%xmm13
mulsd  %xmm11,%xmm3
addsd  %xmm13,%xmm3
mulsd  %xmm5,%xmm15
mulsd  %xmm9,%xmm15
subsd  %xmm15,%xmm3
addsd  %xmm7,%xmm3
movsd  0x28(%rsp),%xmm1
mulsd  0x18(%rsp),%xmm1
mulsd  %xmm0,%xmm0
mulsd  0xa06(%rip),%xmm0
mulsd  %xmm0,%xmm2
mulsd  %xmm8,%xmm6
mulsd  %xmm10,%xmm6
mulsd  %xmm11,%xmm2
addsd  %xmm6,%xmm2
mulsd  %xmm4,%xmm5
mulsd  %xmm9,%xmm5
subsd  %xmm5,%xmm2
mulsd  0x50(%rsp),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm14,(%rbx)
movsd  %xmm3,0x8(%rbx)
movsd  %xmm1,0x10(%rbx)
add    $0x80,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
define void @Roe(double* nocapture %0, double* nocapture %1, double* nocapture writeonly %2) {
%4 = load double, double* %0
%5 = getelementptr inbounds double, double* %0, i64 1
%6 = load double, double* %5
%7 = fdiv double %6, %4
%8 = getelementptr inbounds double, double* %0, i64 2
%9 = load double, double* %8
%10 = fmul double %4, %7
%11 = fmul double %7, %10
%12 = fmul double %11, 5.000000e-01
%13 = fsub double %9, %12
%14 = fmul double %13, 0x3FD9999999999998
%15 = fadd double %9, %14
%16 = fdiv double %15, %4
%17 = load double, double* %1
%18 = getelementptr inbounds double, double* %1, i64 1
%19 = load double, double* %18
%20 = fdiv double %19, %17
%21 = getelementptr inbounds double, double* %1, i64 2
%22 = load double, double* %21
%23 = fmul double %17, %20
%24 = fmul double %20, %23
%25 = fmul double %24, 5.000000e-01
%26 = fsub double %22, %25
%27 = fmul double %26, 0x3FD9999999999998
%28 = fadd double %22, %27
%29 = fdiv double %28, %17
%30 = fmul double %4, %17
%31 = tail call double @sqrt(double %30)
%32 = tail call double @sqrt(double %4)
%33 = tail call double @sqrt(double %17)
%34 = fmul double %20, %33
%35 = tail call double @llvm.fmuladd.f64(double %32, double %7, double %34)
%36 = tail call double @sqrt(double %4)
%37 = tail call double @sqrt(double %17)
%38 = fadd double %36, %37
%39 = fdiv double %35, %38
%40 = tail call double @sqrt(double %4)
%41 = tail call double @sqrt(double %17)
%42 = fmul double %41, %29
%43 = tail call double @llvm.fmuladd.f64(double %40, double %16, double %42)
%44 = tail call double @sqrt(double %4)
%45 = tail call double @sqrt(double %17)
%46 = fadd double %44, %45
%47 = fdiv double %43, %46
%48 = fmul double %39, -5.000000e-01
%49 = tail call double @llvm.fmuladd.f64(double %48, double %39, double %47)
%50 = fmul double %49, 0x3FD9999999999998
%51 = tail call double @sqrt(double %50)
%52 = fadd double %39, %51
%53 = fsub double %39, %51
%54 = fsub double %4, %17
%55 = fsub double %14, %27
%56 = fsub double %7, %20
%57 = fmul double %51, %51
%58 = fdiv double %55, %57
%59 = fsub double %54, %58
%60 = fmul double %31, %51
%61 = fdiv double %55, %60
%62 = fadd double %56, %61
%63 = fsub double %56, %61
%64 = fmul double %39, %39
%65 = fmul double %64, 5.000000e-01
%66 = fmul double %51, 2.000000e+00
%67 = fdiv double %31, %66
%68 = fmul double %52, %67
%69 = tail call double @llvm.fmuladd.f64(double %51, double %39, double %47)
%70 = fmul double %67, %69
%71 = fneg double %67
%72 = fmul double %53, %71
%73 = fneg double %51
%74 = tail call double @llvm.fmuladd.f64(double %73, double %39, double %47)
%75 = fmul double %74, %71
%76 = fcmp ogt double %39, 0.000000e+00
%77 = select i1 %76, double 0.000000e+00, double %39
%78 = fcmp ogt double %52, 0.000000e+00
%79 = select i1 %78, double 0.000000e+00, double %52
%80 = fcmp ogt double %53, 0.000000e+00
%81 = select i1 %80, double 0.000000e+00, double %53
%82 = fmul double %67, %79
%83 = fmul double %62, %82
%84 = tail call double @llvm.fmuladd.f64(double %77, double %59, double %83)
%85 = fmul double %81, %71
%86 = tail call double @llvm.fmuladd.f64(double %85, double %63, double %84)
%87 = tail call double @llvm.fmuladd.f64(double %17, double %20, double %86)
%88 = tail call double @llvm.fmuladd.f64(double %23, double %20, double %27)
%89 = fmul double %39, %77
%90 = fmul double %68, %79
%91 = fmul double %62, %90
%92 = tail call double @llvm.fmuladd.f64(double %89, double %59, double %91)
%93 = fmul double %72, %81
%94 = tail call double @llvm.fmuladd.f64(double %93, double %63, double %92)
%95 = fadd double %88, %94
%96 = fmul double %17, %29
%97 = fmul double %65, %77
%98 = fmul double %70, %79
%99 = fmul double %62, %98
%100 = tail call double @llvm.fmuladd.f64(double %97, double %59, double %99)
%101 = fmul double %75, %81
%102 = tail call double @llvm.fmuladd.f64(double %101, double %63, double %100)
%103 = tail call double @llvm.fmuladd.f64(double %96, double %20, double %102)
store double %87, double* %2
%104 = getelementptr inbounds double, double* %2, i64 1
store double %95, double* %104
%105 = getelementptr inbounds double, double* %2, i64 2
store double %103, double* %105
ret void
}