#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 */
int pow(double, int);
double sqrt(double const);
void vbap_circumcircle(double const x1, double const y1, double const z1,
                       double const x2, double const y2, double const z2,
                       double const x3, double const y3, double const z3,
                       double *xr, double *yr, double *zr, double *l) {
  const double mx1 = (double)x2 - (double)x1, my1 = (double)y2 - (double)y1,
               mz1 = (double)z2 - (double)z1;
  const double mx2 = (double)x3 - (double)x1, my2 = (double)y3 - (double)y1,
               mz2 = (double)z3 - (double)z1;
  const double crx1 = my1 * mz2 - mz1 * my2, cry1 = mz1 * mx2 - mx1 * mz2,
               crz1 = mx1 * my2 - my1 * mx2;
  const double l1 = pow(sqrt(crx1 * crx1 + cry1 * cry1 + crz1 * crz1), 2.) * 2.;
  const double l2 = pow(sqrt(mx1 * mx1 + my1 * my1 + mz1 * mz1), 2.);
  const double l3 = pow(sqrt(mx2 * mx2 + my2 * my2 + mz2 * mz2), 2.);
  const double crx2 = (cry1 * mz1 - crz1 * my1) * l3,
               cry2 = (crz1 * mx1 - crx1 * mz1) * l3,
               crz2 = (crx1 * my1 - cry1 * mx1) * l3;
  const double crx3 = (my2 * crz1 - mz2 * cry1) * l2,
               cry3 = (mz2 * crx1 - mx2 * crz1) * l2,
               crz3 = (mx2 * cry1 - my2 * crx1) * l2;
  *xr = (double)((crx2 + crx3) / l1);
  *yr = (double)((cry2 + cry3) / l1);
  *zr = (double)((crz2 + crz3) / l1);
  *l = sqrt(*xr * *xr + *yr * *yr + *zr * *zr);
  *xr += x1;
  *yr += y1;
  *zr += z1;
}


x86 assembly (clang, -O0):
<vbap_circumcircle>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  %xmm6,-0x38(%rbp)
movsd  %xmm7,-0x40(%rbp)
mov    %rdi,-0x48(%rbp)
mov    %rsi,-0x50(%rbp)
mov    %rdx,-0x58(%rbp)
mov    %rcx,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  -0x90(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x70(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
mov    $0x2,%edi
call   1030 <pow@plt>
cvtsi2sd %eax,%xmm0
movsd  0xd1f(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
mov    $0x2,%edi
call   1030 <pow@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
mov    $0x2,%edi
call   1030 <pow@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  -0x98(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
divsd  -0xb0(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
divsd  -0xb0(%rbp),%xmm0
ff
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
divsd  -0xb0(%rbp),%xmm0
ff
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x58(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x58(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
mov    -0x60(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mov    -0x48(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
mov    -0x50(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    -0x58(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vbap_circumcircle>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rcx,%r12
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
movsd  0xa0(%rsp),%xmm8
subsd  %xmm0,%xmm3
subsd  %xmm1,%xmm4
subsd  %xmm2,%xmm5
movsd  %xmm0,0x60(%rsp)
subsd  %xmm0,%xmm6
movsd  %xmm1,0x68(%rsp)
subsd  %xmm1,%xmm7
movsd  %xmm2,0x70(%rsp)
subsd  %xmm2,%xmm8
movapd %xmm7,%xmm0
mulsd  %xmm5,%xmm0
movapd %xmm4,%xmm1
mulsd  %xmm8,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm8,0x30(%rsp)
movapd %xmm8,%xmm0
mulsd  %xmm3,%xmm0
movsd  %xmm5,0x18(%rsp)
movapd %xmm5,%xmm2
mulsd  %xmm6,%xmm2
subsd  %xmm0,%xmm2
movapd %xmm6,%xmm0
movsd  %xmm4,0x10(%rsp)
mulsd  %xmm4,%xmm0
movsd  %xmm3,0x20(%rsp)
movsd  %xmm7,0x28(%rsp)
mulsd  %xmm7,%xmm3
subsd  %xmm0,%xmm3
movsd  %xmm2,0x50(%rsp)
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm1,0x58(%rsp)
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm3,0x48(%rsp)
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
movsd  %xmm6,0x38(%rsp)
jb     1209 <vbap_circumcircle+0xe9>
sqrtsd %xmm0,%xmm0
jmp    120e <vbap_circumcircle+0xee>
call   1040 <sqrt@plt>
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
ucomisd 0xdb3(%rip),%xmm0
jb     1255 <vbap_circumcircle+0x135>
sqrtsd %xmm0,%xmm0
jmp    1266 <vbap_circumcircle+0x146>
movsd  %xmm2,0x8(%rsp)
call   1040 <sqrt@plt>
movsd  0x8(%rsp),%xmm2
addsd  %xmm2,%xmm2
movsd  %xmm2,0x8(%rsp)
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x28(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  0x38(%rsp),%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
movsd  0x30(%rsp),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12bd <vbap_circumcircle+0x19d>
sqrtsd %xmm0,%xmm0
jmp    12c2 <vbap_circumcircle+0x1a2>
call   1040 <sqrt@plt>
mov    $0x2,%edi
call   1030 <pow@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x58(%rsp),%xmm10
movapd %xmm10,%xmm5
movsd  0x10(%rsp),%xmm0
mulsd  %xmm0,%xmm5
movsd  0x48(%rsp),%xmm7
mulsd  %xmm7,%xmm0
movsd  0x50(%rsp),%xmm9
movapd %xmm9,%xmm2
movsd  0x18(%rsp),%xmm4
mulsd  %xmm4,%xmm2
subsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm10,%xmm4
movapd %xmm7,%xmm3
movsd  0x20(%rsp),%xmm0
mulsd  %xmm0,%xmm3
subsd  %xmm4,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm9,%xmm0
subsd  %xmm0,%xmm5
mulsd  %xmm1,%xmm5
movapd %xmm9,%xmm1
movsd  0x30(%rsp),%xmm6
mulsd  %xmm6,%xmm1
movsd  0x28(%rsp),%xmm8
movapd %xmm8,%xmm4
mulsd  %xmm7,%xmm4
subsd  %xmm1,%xmm4
movsd  0x40(%rsp),%xmm1
mulsd  %xmm1,%xmm4
addsd  %xmm2,%xmm4
movsd  0x38(%rsp),%xmm0
mulsd  %xmm0,%xmm7
mulsd  %xmm10,%xmm6
subsd  %xmm7,%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm3,%xmm6
mulsd  %xmm8,%xmm10
mulsd  %xmm9,%xmm0
subsd  %xmm10,%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm5,%xmm0
movsd  0x8(%rsp),%xmm1
divsd  %xmm1,%xmm4
movsd  %xmm4,(%rbx)
divsd  %xmm1,%xmm6
movsd  %xmm6,(%r15)
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm2
movsd  (%r15),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm0
addsd  %xmm2,%xmm0
ucomisd 0xc1f(%rip),%xmm0
jb     13e9 <vbap_circumcircle+0x2c9>
sqrtsd %xmm0,%xmm0
jmp    13ee <vbap_circumcircle+0x2ce>
call   1040 <sqrt@plt>
movsd  %xmm0,(%r12)
movsd  0x60(%rsp),%xmm0
addsd  (%rbx),%xmm0
movsd  %xmm0,(%rbx)
movsd  0x68(%rsp),%xmm0
addsd  (%r15),%xmm0
movsd  %xmm0,(%r15)
movsd  0x70(%rsp),%xmm0
addsd  (%r14),%xmm0
movsd  %xmm0,(%r14)
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @vbap_circumcircle(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double* %9, double* %10, double* %11, double* %12) {
%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
store double %0, double* %14
store double %1, double* %15
store double %2, double* %16
store double %3, double* %17
store double %4, double* %18
store double %5, double* %19
store double %6, double* %20
store double %7, double* %21
store double %8, double* %22
store double* %9, double** %23
store double* %10, double** %24
store double* %11, double** %25
store double* %12, double** %26
%45 = load double, double* %17
%46 = load double, double* %14
%47 = fsub double %45, %46
store double %47, double* %27
%48 = load double, double* %18
%49 = load double, double* %15
%50 = fsub double %48, %49
store double %50, double* %28
%51 = load double, double* %19
%52 = load double, double* %16
%53 = fsub double %51, %52
store double %53, double* %29
%54 = load double, double* %20
%55 = load double, double* %14
%56 = fsub double %54, %55
store double %56, double* %30
%57 = load double, double* %21
%58 = load double, double* %15
%59 = fsub double %57, %58
store double %59, double* %31
%60 = load double, double* %22
%61 = load double, double* %16
%62 = fsub double %60, %61
store double %62, double* %32
%63 = load double, double* %28
%64 = load double, double* %32
%65 = load double, double* %29
%66 = load double, double* %31
%67 = fmul double %65, %66
%68 = fneg double %67
%69 = call double @llvm.fmuladd.f64(double %63, double %64, double %68)
store double %69, double* %33
%70 = load double, double* %29
%71 = load double, double* %30
%72 = load double, double* %27
%73 = load double, double* %32
%74 = fmul double %72, %73
%75 = fneg double %74
%76 = call double @llvm.fmuladd.f64(double %70, double %71, double %75)
store double %76, double* %34
%77 = load double, double* %27
%78 = load double, double* %31
%79 = load double, double* %28
%80 = load double, double* %30
%81 = fmul double %79, %80
%82 = fneg double %81
%83 = call double @llvm.fmuladd.f64(double %77, double %78, double %82)
store double %83, double* %35
%84 = load double, double* %33
%85 = load double, double* %33
%86 = load double, double* %34
%87 = load double, double* %34
%88 = fmul double %86, %87
%89 = call double @llvm.fmuladd.f64(double %84, double %85, double %88)
%90 = load double, double* %35
%91 = load double, double* %35
%92 = call double @llvm.fmuladd.f64(double %90, double %91, double %89)
%93 = call double @sqrt(double %92)
%94 = call i32 @pow(double %93, i32 2)
%95 = sitofp i32 %94 to double
%96 = fmul double %95, 2.000000e+00
store double %96, double* %36
%97 = load double, double* %27
%98 = load double, double* %27
%99 = load double, double* %28
%100 = load double, double* %28
%101 = fmul double %99, %100
%102 = call double @llvm.fmuladd.f64(double %97, double %98, double %101)
%103 = load double, double* %29
%104 = load double, double* %29
%105 = call double @llvm.fmuladd.f64(double %103, double %104, double %102)
%106 = call double @sqrt(double %105)
%107 = call i32 @pow(double %106, i32 2)
%108 = sitofp i32 %107 to double
store double %108, double* %37
%109 = load double, double* %30
%110 = load double, double* %30
%111 = load double, double* %31
%112 = load double, double* %31
%113 = fmul double %111, %112
%114 = call double @llvm.fmuladd.f64(double %109, double %110, double %113)
%115 = load double, double* %32
%116 = load double, double* %32
%117 = call double @llvm.fmuladd.f64(double %115, double %116, double %114)
%118 = call double @sqrt(double %117)
%119 = call i32 @pow(double %118, i32 2)
%120 = sitofp i32 %119 to double
store double %120, double* %38
%121 = load double, double* %34
%122 = load double, double* %29
%123 = load double, double* %35
%124 = load double, double* %28
%125 = fmul double %123, %124
%126 = fneg double %125
%127 = call double @llvm.fmuladd.f64(double %121, double %122, double %126)
%128 = load double, double* %38
%129 = fmul double %127, %128
store double %129, double* %39
%130 = load double, double* %35
%131 = load double, double* %27
%132 = load double, double* %33
%133 = load double, double* %29
%134 = fmul double %132, %133
%135 = fneg double %134
%136 = call double @llvm.fmuladd.f64(double %130, double %131, double %135)
%137 = load double, double* %38
%138 = fmul double %136, %137
store double %138, double* %40
%139 = load double, double* %33
%140 = load double, double* %28
%141 = load double, double* %34
%142 = load double, double* %27
%143 = fmul double %141, %142
%144 = fneg double %143
%145 = call double @llvm.fmuladd.f64(double %139, double %140, double %144)
%146 = load double, double* %38
%147 = fmul double %145, %146
store double %147, double* %41
%148 = load double, double* %31
%149 = load double, double* %35
%150 = load double, double* %32
%151 = load double, double* %34
%152 = fmul double %150, %151
%153 = fneg double %152
%154 = call double @llvm.fmuladd.f64(double %148, double %149, double %153)
%155 = load double, double* %37
%156 = fmul double %154, %155
store double %156, double* %42
%157 = load double, double* %32
%158 = load double, double* %33
%159 = load double, double* %30
%160 = load double, double* %35
%161 = fmul double %159, %160
%162 = fneg double %161
%163 = call double @llvm.fmuladd.f64(double %157, double %158, double %162)
%164 = load double, double* %37
%165 = fmul double %163, %164
store double %165, double* %43
%166 = load double, double* %30
%167 = load double, double* %34
%168 = load double, double* %31
%169 = load double, double* %33
%170 = fmul double %168, %169
%171 = fneg double %170
%172 = call double @llvm.fmuladd.f64(double %166, double %167, double %171)
%173 = load double, double* %37
%174 = fmul double %172, %173
store double %174, double* %44
%175 = load double, double* %39
%176 = load double, double* %42
%177 = fadd double %175, %176
%178 = load double, double* %36
%179 = fdiv double %177, %178
%180 = load double*, double** %23
store double %179, double* %180
%181 = load double, double* %40
%182 = load double, double* %43
%183 = fadd double %181, %182
%184 = load double, double* %36
%185 = fdiv double %183, %184
%186 = load double*, double** %24
store double %185, double* %186
%187 = load double, double* %41
%188 = load double, double* %44
%189 = fadd double %187, %188
%190 = load double, double* %36
%191 = fdiv double %189, %190
%192 = load double*, double** %25
store double %191, double* %192
%193 = load double*, double** %23
%194 = load double, double* %193
%195 = load double*, double** %23
%196 = load double, double* %195
%197 = load double*, double** %24
%198 = load double, double* %197
%199 = load double*, double** %24
%200 = load double, double* %199
%201 = fmul double %198, %200
%202 = call double @llvm.fmuladd.f64(double %194, double %196, double %201)
%203 = load double*, double** %25
%204 = load double, double* %203
%205 = load double*, double** %25
%206 = load double, double* %205
%207 = call double @llvm.fmuladd.f64(double %204, double %206, double %202)
%208 = call double @sqrt(double %207)
%209 = load double*, double** %26
store double %208, double* %209
%210 = load double, double* %14
%211 = load double*, double** %23
%212 = load double, double* %211
%213 = fadd double %212, %210
store double %213, double* %211
%214 = load double, double* %15
%215 = load double*, double** %24
%216 = load double, double* %215
%217 = fadd double %216, %214
store double %217, double* %215
%218 = load double, double* %16
%219 = load double*, double** %25
%220 = load double, double* %219
%221 = fadd double %220, %218
store double %221, double* %219
ret void
}

LLVM IR (-O2):
define void @vbap_circumcircle(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double* nocapture %9, double* nocapture %10, double* nocapture %11, double* nocapture writeonly %12) {
%14 = fsub double %3, %0
%15 = fsub double %4, %1
%16 = fsub double %5, %2
%17 = fsub double %6, %0
%18 = fsub double %7, %1
%19 = fsub double %8, %2
%20 = fneg double %16
%21 = fmul double %18, %20
%22 = tail call double @llvm.fmuladd.f64(double %15, double %19, double %21)
%23 = fneg double %14
%24 = fmul double %19, %23
%25 = tail call double @llvm.fmuladd.f64(double %16, double %17, double %24)
%26 = fneg double %15
%27 = fmul double %17, %26
%28 = tail call double @llvm.fmuladd.f64(double %14, double %18, double %27)
%29 = fmul double %25, %25
%30 = tail call double @llvm.fmuladd.f64(double %22, double %22, double %29)
%31 = tail call double @llvm.fmuladd.f64(double %28, double %28, double %30)
%32 = tail call double @sqrt(double %31)
%33 = tail call i32 @pow(double %32, i32 2)
%34 = sitofp i32 %33 to double
%35 = fmul double %34, 2.000000e+00
%36 = fmul double %15, %15
%37 = tail call double @llvm.fmuladd.f64(double %14, double %14, double %36)
%38 = tail call double @llvm.fmuladd.f64(double %16, double %16, double %37)
%39 = tail call double @sqrt(double %38)
%40 = tail call i32 @pow(double %39, i32 2)
%41 = sitofp i32 %40 to double
%42 = fmul double %18, %18
%43 = tail call double @llvm.fmuladd.f64(double %17, double %17, double %42)
%44 = tail call double @llvm.fmuladd.f64(double %19, double %19, double %43)
%45 = tail call double @sqrt(double %44)
%46 = tail call i32 @pow(double %45, i32 2)
%47 = sitofp i32 %46 to double
%48 = fneg double %28
%49 = fmul double %15, %48
%50 = tail call double @llvm.fmuladd.f64(double %25, double %16, double %49)
%51 = fmul double %50, %47
%52 = fneg double %22
%53 = fmul double %16, %52
%54 = tail call double @llvm.fmuladd.f64(double %28, double %14, double %53)
%55 = fmul double %54, %47
%56 = fneg double %25
%57 = fmul double %14, %56
%58 = tail call double @llvm.fmuladd.f64(double %22, double %15, double %57)
%59 = fmul double %58, %47
%60 = fneg double %19
%61 = fmul double %25, %60
%62 = tail call double @llvm.fmuladd.f64(double %18, double %28, double %61)
%63 = fmul double %62, %41
%64 = fneg double %17
%65 = fmul double %28, %64
%66 = tail call double @llvm.fmuladd.f64(double %19, double %22, double %65)
%67 = fmul double %66, %41
%68 = fneg double %18
%69 = fmul double %22, %68
%70 = tail call double @llvm.fmuladd.f64(double %17, double %25, double %69)
%71 = fmul double %70, %41
%72 = fadd double %63, %51
%73 = fdiv double %72, %35
store double %73, double* %9
%74 = fadd double %67, %55
%75 = fdiv double %74, %35
store double %75, double* %10
%76 = fadd double %71, %59
%77 = fdiv double %76, %35
store double %77, double* %11
%78 = load double, double* %9
%79 = load double, double* %10
%80 = fmul double %79, %79
%81 = tail call double @llvm.fmuladd.f64(double %78, double %78, double %80)
%82 = tail call double @llvm.fmuladd.f64(double %77, double %77, double %81)
%83 = tail call double @sqrt(double %82)
store double %83, double* %12
%84 = load double, double* %9
%85 = fadd double %84, %0
store double %85, double* %9
%86 = load double, double* %10
%87 = fadd double %86, %1
store double %87, double* %10
%88 = load double, double* %11
%89 = fadd double %88, %2
store double %89, double* %11
ret void
}