#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 acos(int);
double sqrt(double);
double areas_(double *v1, double *v2, double *v3) {
  double ret_val;
  static int i__;
  static double a1, a2, a3, s12, s31, s23, u12[3], u23[3], u31[3], ca1, ca2,
      ca3, dv1[3], dv2[3], dv3[3];
  --v3;
  --v2;
  --v1;
  for (i__ = 1; i__ <= 3; ++i__) {
    dv1[i__ - 1] = v1[i__];
    dv2[i__ - 1] = v2[i__];
    dv3[i__ - 1] = v3[i__];
  }
  u12[0] = dv1[1] * dv2[2] - dv1[2] * dv2[1];
  u12[1] = dv1[2] * dv2[0] - dv1[0] * dv2[2];
  u12[2] = dv1[0] * dv2[1] - dv1[1] * dv2[0];
  u23[0] = dv2[1] * dv3[2] - dv2[2] * dv3[1];
  u23[1] = dv2[2] * dv3[0] - dv2[0] * dv3[2];
  u23[2] = dv2[0] * dv3[1] - dv2[1] * dv3[0];
  u31[0] = dv3[1] * dv1[2] - dv3[2] * dv1[1];
  u31[1] = dv3[2] * dv1[0] - dv3[0] * dv1[2];
  u31[2] = dv3[0] * dv1[1] - dv3[1] * dv1[0];
  s12 = 0.;
  s23 = 0.;
  s31 = 0.;
  for (i__ = 1; i__ <= 3; ++i__) {
    s12 += u12[i__ - 1] * u12[i__ - 1];
    s23 += u23[i__ - 1] * u23[i__ - 1];
    s31 += u31[i__ - 1] * u31[i__ - 1];
  }
  if (s12 == 0. || s23 == 0. || s31 == 0.) {
    ret_val = 0.;
    return ret_val;
  }
  s12 = sqrt(s12);
  s23 = sqrt(s23);
  s31 = sqrt(s31);
  for (i__ = 1; i__ <= 3; ++i__) {
    u12[i__ - 1] /= s12;
    u23[i__ - 1] /= s23;
    u31[i__ - 1] /= s31;
  }
  ca1 = -u12[0] * u31[0] - u12[1] * u31[1] - u12[2] * u31[2];
  ca2 = -u23[0] * u12[0] - u23[1] * u12[1] - u23[2] * u12[2];
  ca3 = -u31[0] * u23[0] - u31[1] * u23[1] - u31[2] * u23[2];
  if (ca1 < -1.) {
    ca1 = -1.;
  }
  if (ca1 > 1.) {
    ca1 = 1.;
  }
  if (ca2 < -1.) {
    ca2 = -1.;
  }
  if (ca2 > 1.) {
    ca2 = 1.;
  }
  if (ca3 < -1.) {
    ca3 = -1.;
  }
  if (ca3 > 1.) {
    ca3 = 1.;
  }
  a1 = acos(ca1);
  a2 = acos(ca2);
  a3 = acos(ca3);
  ret_val = a1 + a2 + a3 - acos(-1.);
  if (ret_val < 0.) {
    ret_val = 0.;
  }
  return ret_val;
}


x86 assembly (clang, -O0):
<areas_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
movl   $0x1,0x2ede(%rip)
cmpl   $0x3,0x2ed7(%rip)
jg     11fb <areas_+0xdb>
mov    -0x10(%rbp),%rax
movslq 0x2ec6(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2ebb(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2f5e(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq 0x2e9e(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2e93(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2f56(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq 0x2e76(%rip),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2e6b(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2f4e(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    0x2e53(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2e4a(%rip)
jmp    1162 <areas_+0x42>
movsd  0x2ef5(%rip),%xmm0
movsd  0x2f15(%rip),%xmm2
movsd  0x2eed(%rip),%xmm1
mulsd  0x2efd(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2e3e(%rip)
movsd  0x2eb6(%rip),%xmm0
movsd  0x2ebe(%rip),%xmm2
movsd  0x2e96(%rip),%xmm1
mulsd  0x2ebe(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2dff(%rip)
movsd  0x2e5f(%rip),%xmm0
movsd  0x2e7f(%rip),%xmm2
movsd  0x2e57(%rip),%xmm1
mulsd  0x2e67(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2dc0(%rip)
movsd  0x2e40(%rip),%xmm0
movsd  0x2e60(%rip),%xmm2
movsd  0x2e38(%rip),%xmm1
mulsd  0x2e48(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2d89(%rip)
movsd  0x2e01(%rip),%xmm0
movsd  0x2e09(%rip),%xmm2
movsd  0x2de1(%rip),%xmm1
mulsd  0x2e09(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2d4a(%rip)
movsd  0x2daa(%rip),%xmm0
movsd  0x2dca(%rip),%xmm2
movsd  0x2da2(%rip),%xmm1
mulsd  0x2db2(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2d0b(%rip)
movsd  0x2d8b(%rip),%xmm0
movsd  0x2d4b(%rip),%xmm2
movsd  0x2d83(%rip),%xmm1
mulsd  0x2d33(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2cd4(%rip)
movsd  0x2d4c(%rip),%xmm0
movsd  0x2cf4(%rip),%xmm2
movsd  0x2d2c(%rip),%xmm1
mulsd  0x2cf4(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2c95(%rip)
movsd  0x2cf5(%rip),%xmm0
movsd  0x2cb5(%rip),%xmm2
movsd  0x2ced(%rip),%xmm1
mulsd  0x2c9d(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2c56(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2bdb(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2be0(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2bcd(%rip)
movl   $0x1,0x2b9b(%rip)
cmpl   $0x3,0x2b94(%rip)
jg     159e <areas_+0x47e>
mov    0x2b88(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2bbb(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    0x2b70(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2ba3(%rip),%rax
movsd  (%rax,%rcx,8),%xmm2
movsd  0x2b76(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2b66(%rip)
mov    0x2b40(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2b93(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    0x2b28(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2b7b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm2
movsd  0x2b3e(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2b2e(%rip)
mov    0x2af8(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2b6b(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    0x2ae0(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x2b53(%rip),%rax
movsd  (%rax,%rcx,8),%xmm2
movsd  0x2aee(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2ade(%rip)
mov    0x2ab0(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2aa7(%rip)
jmp    14a5 <areas_+0x385>
movsd  0x2aba(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15be <areas_+0x49e>
jp     15be <areas_+0x49e>
jmp    15f9 <areas_+0x4d9>
movsd  0x2aaa(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15de <areas_+0x4be>
jp     15de <areas_+0x4be>
jmp    15f9 <areas_+0x4d9>
movsd  0x2a82(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1610 <areas_+0x4f0>
jp     1610 <areas_+0x4f0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1a38 <areas_+0x918>
movsd  0x2a48(%rip),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,0x2a3b(%rip)
movsd  0x2a43(%rip),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,0x2a36(%rip)
movsd  0x2a26(%rip),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,0x2a19(%rip)
movl   $0x1,0x29e7(%rip)
cmpl   $0x3,0x29e0(%rip)
jg     170a <areas_+0x5ea>
movsd  0x29f2(%rip),%xmm1
mov    0x29cc(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x29ff(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
lea    0x29ef(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x29d2(%rip),%xmm1
mov    0x299c(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x29ef(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
lea    0x29df(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x299a(%rip),%xmm1
mov    0x296c(%rip),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x29df(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
lea    0x29cf(%rip),%rax
movsd  %xmm0,(%rax,%rcx,8)
mov    0x2944(%rip),%eax
add    $0x1,%eax
mov    %eax,0x293b(%rip)
jmp    1659 <areas_+0x539>
movsd  0x296e(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x298f(%rip),%xmm2
movsd  0x294f(%rip),%xmm0
mulsd  0x2987(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x2928(%rip),%xmm0
movsd  0x2960(%rip),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2941(%rip)
movsd  0x2901(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x28c2(%rip),%xmm2
movsd  0x28e2(%rip),%xmm0
mulsd  0x28ba(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x28bb(%rip),%xmm0
movsd  0x2893(%rip),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x28bc(%rip)
movsd  0x2894(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x2855(%rip),%xmm2
movsd  0x2875(%rip),%xmm0
mulsd  0x284d(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x284e(%rip),%xmm0
movsd  0x2826(%rip),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2837(%rip)
movsd  0x747(%rip),%xmm0
ucomisd 0x2817(%rip),%xmm0
jbe    18d7 <areas_+0x7b7>
movsd  0x731(%rip),%xmm0
movsd  %xmm0,0x2801(%rip)
movsd  0x27f9(%rip),%xmm0
movsd  0x721(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1901 <areas_+0x7e1>
movsd  0x70f(%rip),%xmm0
movsd  %xmm0,0x27d7(%rip)
movsd  0x6f7(%rip),%xmm0
ucomisd 0x27cf(%rip),%xmm0
jbe    1927 <areas_+0x807>
movsd  0x6e1(%rip),%xmm0
movsd  %xmm0,0x27b9(%rip)
movsd  0x27b1(%rip),%xmm0
movsd  0x6d1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1951 <areas_+0x831>
movsd  0x6bf(%rip),%xmm0
movsd  %xmm0,0x278f(%rip)
movsd  0x6a7(%rip),%xmm0
ucomisd 0x2787(%rip),%xmm0
jbe    1977 <areas_+0x857>
movsd  0x691(%rip),%xmm0
movsd  %xmm0,0x2771(%rip)
movsd  0x2769(%rip),%xmm0
movsd  0x681(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    19a1 <areas_+0x881>
movsd  0x66f(%rip),%xmm0
movsd  %xmm0,0x2747(%rip)
cvttsd2si 0x272f(%rip),%edi
call   1030 <acos@plt>
movsd  %xmm0,0x2692(%rip)
cvttsd2si 0x2722(%rip),%edi
call   1030 <acos@plt>
movsd  %xmm0,0x2685(%rip)
cvttsd2si 0x2715(%rip),%edi
call   1030 <acos@plt>
movsd  %xmm0,0x2678(%rip)
movsd  0x2660(%rip),%xmm0
addsd  0x2660(%rip),%xmm0
addsd  0x2660(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    $0xffffffff,%edi
call   1030 <acos@plt>
movaps %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1a2e <areas_+0x90e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<areas_>:
push   %rax
mov    0x10(%rdi),%rax
mov    %rax,0x2ff4(%rip)
movups (%rdi),%xmm0
movaps %xmm0,0x2fda(%rip)
mov    0x10(%rsi),%rax
mov    %rax,0x2fff(%rip)
movups (%rsi),%xmm0
movaps %xmm0,0x2fe5(%rip)
mov    0x10(%rdx),%rax
mov    %rax,0x300a(%rip)
movups (%rdx),%xmm0
movaps %xmm0,0x2ff0(%rip)
movsd  0x2faf(%rip),%xmm10
movsd  0x2fce(%rip),%xmm8
movsd  0x2fa5(%rip),%xmm11
movsd  0x2fb5(%rip),%xmm7
movapd %xmm10,%xmm2
movsd  0x2fa0(%rip),%xmm0
movsd  0x2f77(%rip),%xmm12
movapd %xmm11,%xmm3
mulsd  %xmm0,%xmm3
movsd  0x2fa5(%rip),%xmm9
movapd %xmm9,%xmm6
unpcklpd %xmm0,%xmm6
movapd %xmm0,%xmm4
mulsd  %xmm10,%xmm4
movapd %xmm12,%xmm0
mulsd  %xmm7,%xmm0
movsd  0x2f8a(%rip),%xmm5
unpcklpd %xmm5,%xmm10
unpcklpd %xmm7,%xmm5
mulsd  %xmm11,%xmm7
mulsd  %xmm8,%xmm2
subsd  %xmm7,%xmm2
movsd  %xmm2,0x2e83(%rip)
movsd  0x2f6b(%rip),%xmm7
unpcklpd %xmm7,%xmm11
unpcklpd %xmm8,%xmm7
mulsd  %xmm12,%xmm8
subsd  %xmm8,%xmm3
movsd  %xmm3,0x2e6f(%rip)
subsd  %xmm4,%xmm0
movsd  %xmm0,0x2e73(%rip)
movapd %xmm5,%xmm1
mulpd  %xmm11,%xmm1
mulpd  %xmm6,%xmm11
mulpd  %xmm10,%xmm6
mulpd  %xmm7,%xmm10
subpd  %xmm10,%xmm1
movhpd %xmm1,0x2e5e(%rip)
unpcklpd %xmm9,%xmm12
mulpd  %xmm12,%xmm7
subpd  %xmm11,%xmm7
movhpd %xmm7,0x2e57(%rip)
mulpd  %xmm5,%xmm12
subpd  %xmm12,%xmm6
movhpd %xmm6,0x2e55(%rip)
movlpd %xmm1,0x2e5d(%rip)
movlpd %xmm7,0x2e65(%rip)
movlpd %xmm6,0x2e6d(%rip)
mulsd  %xmm2,%xmm2
xorpd  %xmm5,%xmm5
addsd  %xmm5,%xmm2
mulpd  %xmm1,%xmm1
xorpd  %xmm4,%xmm4
addpd  %xmm4,%xmm1
mulsd  %xmm3,%xmm3
addsd  %xmm2,%xmm3
mulpd  %xmm7,%xmm7
addpd  %xmm1,%xmm7
mulsd  %xmm0,%xmm0
addsd  %xmm3,%xmm0
mulpd  %xmm6,%xmm6
addpd  %xmm7,%xmm6
movsd  %xmm0,0x2d8d(%rip)
movhpd %xmm6,0x2d95(%rip)
movlpd %xmm6,0x2d85(%rip)
ucomisd %xmm5,%xmm0
jne    12df <areas_+0x1bf>
jnp    157c <areas_+0x45c>
cmpeqpd %xmm4,%xmm6
movmskpd %xmm6,%eax
mov    %eax,%ecx
shr    %cl
jne    157c <areas_+0x45c>
test   $0x1,%al
jne    157c <areas_+0x45c>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     130a <areas_+0x1ea>
sqrtsd %xmm0,%xmm0
jmp    1313 <areas_+0x1f3>
call   1040 <sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  %xmm0,0x2d35(%rip)
movsd  0x2d3d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     132f <areas_+0x20f>
sqrtsd %xmm0,%xmm0
jmp    1334 <areas_+0x214>
call   1040 <sqrt@plt>
movsd  %xmm0,0x2d24(%rip)
movsd  0x2d14(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1354 <areas_+0x234>
sqrtsd %xmm0,%xmm0
jmp    1359 <areas_+0x239>
call   1040 <sqrt@plt>
movsd  %xmm0,0x2cf7(%rip)
movsd  0x2ce7(%rip),%xmm6
movsd  0x2cef(%rip),%xmm3
movsd  0x2cf6(%rip),%xmm9
divsd  %xmm6,%xmm9
movsd  %xmm9,0x2ce8(%rip)
movsd  0x2d0f(%rip),%xmm8
divsd  %xmm3,%xmm8
movsd  %xmm8,0x2d01(%rip)
movsd  0x2d29(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x2d1d(%rip)
movsd  0x2cc5(%rip),%xmm4
divsd  %xmm6,%xmm4
movsd  %xmm4,0x2cb9(%rip)
movsd  0x2ce0(%rip),%xmm10
divsd  %xmm3,%xmm10
movsd  %xmm10,0x2cd2(%rip)
movsd  0x2cfa(%rip),%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x2cee(%rip)
movsd  0x2c96(%rip),%xmm5
divsd  %xmm6,%xmm5
movsd  %xmm5,0x2c8a(%rip)
movsd  0x2cb1(%rip),%xmm12
divsd  %xmm3,%xmm12
movsd  %xmm12,0x2ca3(%rip)
movsd  0x2ccb(%rip),%xmm3
divsd  %xmm0,%xmm3
movsd  %xmm3,0x2cbf(%rip)
movapd 0xbc6(%rip),%xmm11
movapd %xmm8,%xmm7
xorpd  %xmm11,%xmm7
mulsd  %xmm9,%xmm7
movapd %xmm9,%xmm0
xorpd  %xmm11,%xmm0
movapd %xmm2,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm1,%xmm0
subsd  %xmm6,%xmm0
movapd %xmm12,%xmm6
mulsd  %xmm5,%xmm6
mulsd  %xmm3,%xmm5
subsd  %xmm5,%xmm0
mulsd  %xmm10,%xmm4
subsd  %xmm4,%xmm7
subsd  %xmm6,%xmm7
movsd  %xmm7,0x2c6f(%rip)
xorpd  %xmm11,%xmm1
mulsd  %xmm10,%xmm2
mulsd  %xmm8,%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm12,%xmm3
subsd  %xmm3,%xmm1
movsd  %xmm1,0x2c53(%rip)
movsd  0xb5b(%rip),%xmm2
ucomisd %xmm0,%xmm2
ja     14c9 <areas_+0x3a9>
movsd  0xb55(%rip),%xmm2
ucomisd %xmm2,%xmm0
jbe    14cd <areas_+0x3ad>
movapd %xmm2,%xmm0
movsd  0xb3b(%rip),%xmm2
ucomisd %xmm7,%xmm2
ja     14e9 <areas_+0x3c9>
movsd  0xb35(%rip),%xmm2
ucomisd %xmm2,%xmm7
jbe    14f1 <areas_+0x3d1>
movsd  %xmm2,0x2c07(%rip)
movsd  0xb17(%rip),%xmm2
ucomisd %xmm1,%xmm2
ja     150d <areas_+0x3ed>
movsd  0xb11(%rip),%xmm2
ucomisd %xmm2,%xmm1
jbe    1515 <areas_+0x3f5>
movsd  %xmm2,0x2beb(%rip)
cvttsd2si %xmm0,%edi
call   1030 <acos@plt>
movsd  %xmm0,0x2b1a(%rip)
cvttsd2si 0x2bca(%rip),%edi
call   1030 <acos@plt>
movsd  %xmm0,0x2b0d(%rip)
cvttsd2si 0x2bbd(%rip),%edi
call   1030 <acos@plt>
movsd  0x2af0(%rip),%xmm1
addsd  0x2af0(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
mov    $0xffffffff,%edi
call   1030 <acos@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
xorpd  %xmm5,%xmm5
maxsd  %xmm1,%xmm5
movapd %xmm5,%xmm0
pop    %rax
ret

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

LLVM IR (-O2):
@areas_.a1 = internal unnamed_addr global double 0.000000e+00
@areas_.a2 = internal unnamed_addr global double 0.000000e+00
@areas_.s12 = internal unnamed_addr global double 0.000000e+00
@areas_.s31 = internal unnamed_addr global double 0.000000e+00
@areas_.s23 = internal unnamed_addr global double 0.000000e+00
@areas_.u12.0 = internal unnamed_addr global double 0.000000e+00
@areas_.u12.1 = internal unnamed_addr global double 0.000000e+00
@areas_.u12.2 = internal unnamed_addr global double 0.000000e+00
@areas_.u23.0 = internal unnamed_addr global double 0.000000e+00
@areas_.u23.1 = internal unnamed_addr global double 0.000000e+00
@areas_.u23.2 = internal unnamed_addr global double 0.000000e+00
@areas_.u31.0 = internal unnamed_addr global double 0.000000e+00
@areas_.u31.1 = internal unnamed_addr global double 0.000000e+00
@areas_.u31.2 = internal unnamed_addr global double 0.000000e+00
@areas_.ca2 = internal unnamed_addr global double 0.000000e+00
@areas_.ca3 = internal unnamed_addr global double 0.000000e+00
@areas_.dv1 = internal unnamed_addr global [3 x double] zeroinitializer
@areas_.dv2 = internal unnamed_addr global [3 x double] zeroinitializer
@areas_.dv3 = internal unnamed_addr global [3 x double] zeroinitializer
define double @areas_(double* nocapture %0, double* nocapture %1, double* nocapture %2) {
%4 = bitcast double* %0 to i8*
%5 = bitcast double* %1 to i8*
%6 = bitcast double* %2 to i8*
%7 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv1, i64 0, i64 1)
%8 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv2, i64 0, i64 2)
%9 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv1, i64 0, i64 2)
%10 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv2, i64 0, i64 1)
%11 = fneg double %9
%12 = fmul double %10, %11
%13 = tail call double @llvm.fmuladd.f64(double %7, double %8, double %12)
store double %13, double* @areas_.u12.0
%14 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv2, i64 0, i64 0)
%15 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv1, i64 0, i64 0)
%16 = fneg double %15
%17 = fmul double %8, %16
%18 = tail call double @llvm.fmuladd.f64(double %9, double %14, double %17)
store double %18, double* @areas_.u12.1
%19 = fneg double %7
%20 = fmul double %14, %19
%21 = tail call double @llvm.fmuladd.f64(double %15, double %10, double %20)
store double %21, double* @areas_.u12.2
%22 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv3, i64 0, i64 2)
%23 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv3, i64 0, i64 1)
%24 = insertelement <2 x double> poison, double %22, i64 0
%25 = insertelement <2 x double> %24, double %8, i64 1
%26 = fneg <2 x double> %25
%27 = insertelement <2 x double> poison, double %7, i64 0
%28 = insertelement <2 x double> %27, double %23, i64 1
%29 = fmul <2 x double> %28, %26
%30 = insertelement <2 x double> poison, double %23, i64 0
%31 = insertelement <2 x double> %30, double %10, i64 1
%32 = insertelement <2 x double> poison, double %9, i64 0
%33 = insertelement <2 x double> %32, double %22, i64 1
%34 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %31, <2 x double> %33, <2 x double> %29)
%35 = extractelement <2 x double> %34, i64 1
store double %35, double* @areas_.u23.0
%36 = load double, double* getelementptr inbounds ([3 x double], [3 x double]* @areas_.dv3, i64 0, i64 0)
%37 = insertelement <2 x double> poison, double %36, i64 0
%38 = insertelement <2 x double> %37, double %14, i64 1
%39 = fneg <2 x double> %38
%40 = fmul <2 x double> %33, %39
%41 = insertelement <2 x double> poison, double %15, i64 0
%42 = insertelement <2 x double> %41, double %36, i64 1
%43 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> %42, <2 x double> %40)
%44 = extractelement <2 x double> %43, i64 1
store double %44, double* @areas_.u23.1
%45 = fneg <2 x double> %31
%46 = fmul <2 x double> %42, %45
%47 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %38, <2 x double> %28, <2 x double> %46)
%48 = extractelement <2 x double> %47, i64 1
store double %48, double* @areas_.u23.2
%49 = extractelement <2 x double> %34, i64 0
store double %49, double* @areas_.u31.0
%50 = extractelement <2 x double> %43, i64 0
store double %50, double* @areas_.u31.1
%51 = extractelement <2 x double> %47, i64 0
store double %51, double* @areas_.u31.2
%52 = tail call double @llvm.fmuladd.f64(double %13, double %13, double 0.000000e+00)
%53 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> %34, <2 x double> zeroinitializer)
%54 = tail call double @llvm.fmuladd.f64(double %18, double %18, double %52)
%55 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %43, <2 x double> %43, <2 x double> %53)
%56 = tail call double @llvm.fmuladd.f64(double %21, double %21, double %54)
%57 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %47, <2 x double> %47, <2 x double> %55)
store double %56, double* @areas_.s12
%58 = extractelement <2 x double> %57, i64 1
store double %58, double* @areas_.s23
%59 = extractelement <2 x double> %57, i64 0
store double %59, double* @areas_.s31
%60 = fcmp oeq double %56, 0.000000e+00
%61 = fcmp oeq <2 x double> %57, zeroinitializer
%62 = extractelement <2 x i1> %61, i64 1
%63 = select i1 %60, i1 true, i1 %62
%64 = extractelement <2 x i1> %61, i64 0
%65 = select i1 %63, i1 true, i1 %64
br i1 %65, label %145, label %66
66: ; preds = %3
%67 = tail call double @sqrt(double %56)
store double %67, double* @areas_.s12
%68 = load double, double* @areas_.s23
%69 = tail call double @sqrt(double %68)
store double %69, double* @areas_.s23
%70 = load double, double* @areas_.s31
%71 = tail call double @sqrt(double %70)
store double %71, double* @areas_.s31
%72 = load double, double* @areas_.s12
%73 = load double, double* @areas_.s23
%74 = load double, double* @areas_.u12.0
%75 = fdiv double %74, %72
store double %75, double* @areas_.u12.0
%76 = load double, double* @areas_.u23.0
%77 = fdiv double %76, %73
store double %77, double* @areas_.u23.0
%78 = load double, double* @areas_.u31.0
%79 = fdiv double %78, %71
store double %79, double* @areas_.u31.0
%80 = load double, double* @areas_.u12.1
%81 = fdiv double %80, %72
store double %81, double* @areas_.u12.1
%82 = load double, double* @areas_.u23.1
%83 = fdiv double %82, %73
store double %83, double* @areas_.u23.1
%84 = load double, double* @areas_.u31.1
%85 = fdiv double %84, %71
store double %85, double* @areas_.u31.1
%86 = load double, double* @areas_.u12.2
%87 = fdiv double %86, %72
store double %87, double* @areas_.u12.2
%88 = load double, double* @areas_.u23.2
%89 = fdiv double %88, %73
store double %89, double* @areas_.u23.2
%90 = load double, double* @areas_.u31.2
%91 = fdiv double %90, %71
store double %91, double* @areas_.u31.2
%92 = fneg double %75
%93 = fneg double %81
%94 = fmul double %85, %93
%95 = tail call double @llvm.fmuladd.f64(double %92, double %79, double %94)
%96 = fneg double %87
%97 = tail call double @llvm.fmuladd.f64(double %96, double %91, double %95)
%98 = fneg double %77
%99 = fneg double %83
%100 = fmul double %81, %99
%101 = tail call double @llvm.fmuladd.f64(double %98, double %75, double %100)
%102 = fneg double %89
%103 = tail call double @llvm.fmuladd.f64(double %102, double %87, double %101)
store double %103, double* @areas_.ca2
%104 = fneg double %79
%105 = fneg double %85
%106 = fmul double %83, %105
%107 = tail call double @llvm.fmuladd.f64(double %104, double %77, double %106)
%108 = fneg double %91
%109 = tail call double @llvm.fmuladd.f64(double %108, double %89, double %107)
store double %109, double* @areas_.ca3
%110 = fcmp olt double %97, -1.000000e+00
br i1 %110, label %113, label %111
111: ; preds = %66
%112 = fcmp ogt double %97, 1.000000e+00
br i1 %112, label %113, label %115
113: ; preds = %111, %66
%114 = phi double [ -1.000000e+00, %66 ], [ 1.000000e+00, %111 ]
br label %115
115: ; preds = %113, %111
%116 = phi double [ %97, %111 ], [ %114, %113 ]
%117 = fcmp olt double %103, -1.000000e+00
br i1 %117, label %120, label %118
118: ; preds = %115
%119 = fcmp ogt double %103, 1.000000e+00
br i1 %119, label %120, label %122
120: ; preds = %118, %115
%121 = phi double [ -1.000000e+00, %115 ], [ 1.000000e+00, %118 ]
store double %121, double* @areas_.ca2
br label %122
122: ; preds = %120, %118
%123 = fcmp olt double %109, -1.000000e+00
br i1 %123, label %126, label %124
124: ; preds = %122
%125 = fcmp ogt double %109, 1.000000e+00
br i1 %125, label %126, label %128
126: ; preds = %124, %122
%127 = phi double [ -1.000000e+00, %122 ], [ 1.000000e+00, %124 ]
store double %127, double* @areas_.ca3
br label %128
128: ; preds = %126, %124
%129 = fptosi double %116 to i32
%130 = tail call double @acos(i32 %129)
store double %130, double* @areas_.a1
%131 = load double, double* @areas_.ca2
%132 = fptosi double %131 to i32
%133 = tail call double @acos(i32 %132)
store double %133, double* @areas_.a2
%134 = load double, double* @areas_.ca3
%135 = fptosi double %134 to i32
%136 = tail call double @acos(i32 %135)
%137 = load double, double* @areas_.a1
%138 = load double, double* @areas_.a2
%139 = fadd double %137, %138
%140 = fadd double %136, %139
%141 = tail call double @acos(i32 -1)
%142 = fsub double %140, %141
%143 = fcmp olt double %142, 0.000000e+00
%144 = select i1 %143, double 0.000000e+00, double %142
br label %145
145: ; preds = %3, %128
%146 = phi double [ %144, %128 ], [ 0.000000e+00, %3 ]
ret double %146
}