#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 fabs(double);
int circumcircle(double xp, double yp, double x1, double y1, double x2,
                 double y2, double x3, double y3, double *xc, double *yc,
                 double *rsqr) {
  double m1, m2, mx1, mx2, my1, my2;
  double dx, dy, drsqr;
  double fabsy1y2 = fabs(y1 - y2);
  double fabsy2y3 = fabs(y2 - y3);
  if (fabsy1y2 < 0.000001 && fabsy2y3 < 0.000001)
    return (0);
  if (fabsy1y2 < 0.000001) {
    m2 = -(x3 - x2) / (y3 - y2);
    mx2 = (x2 + x3) / 2.0;
    my2 = (y2 + y3) / 2.0;
    *xc = (x2 + x1) / 2.0;
    *yc = m2 * (*xc - mx2) + my2;
  } else if (fabsy2y3 < 0.000001) {
    m1 = -(x2 - x1) / (y2 - y1);
    mx1 = (x1 + x2) / 2.0;
    my1 = (y1 + y2) / 2.0;
    *xc = (x3 + x2) / 2.0;
    *yc = m1 * (*xc - mx1) + my1;
  } else {
    m1 = -(x2 - x1) / (y2 - y1);
    m2 = -(x3 - x2) / (y3 - y2);
    mx1 = (x1 + x2) / 2.0;
    mx2 = (x2 + x3) / 2.0;
    my1 = (y1 + y2) / 2.0;
    my2 = (y2 + y3) / 2.0;
    *xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2);
    if (fabsy1y2 > fabsy2y3) {
      *yc = m1 * (*xc - mx1) + my1;
    } else {
      *yc = m2 * (*xc - mx2) + my2;
    }
  }
  dx = x2 - *xc;
  dy = y2 - *yc;
  *rsqr = dx * dx + dy * dy;
  dx = xp - *xc;
  dy = yp - *yc;
  drsqr = dx * dx + dy * dy;
  return ((drsqr - *rsqr) <= 0.000001 ? 1 : 0);
}


x86 assembly (clang, -O0):
<circumcircle>:
push   %rbp
mov    %rsp,%rbp
sub    $0x38,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    %rdi,-0x50(%rbp)
mov    %rsi,-0x58(%rbp)
mov    %rdx,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movaps 0xec3(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movaps 0xea6(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xe82(%rip),%xmm0
ucomisd -0xb0(%rbp),%xmm0
ff
jbe    11ae <circumcircle+0xae>
movsd  0xe6c(%rip),%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
jbe    11ae <circumcircle+0xae>
movl   $0x0,-0x4(%rbp)
jmp    15d7 <circumcircle+0x4d7>
movsd  0xe4a(%rip),%xmm0
ucomisd -0xb0(%rbp),%xmm0
ff
jbe    127e <circumcircle+0x17e>
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x48(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  0xdfe(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xde3(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  0xdc5(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm2
subsd  -0x80(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    14fa <circumcircle+0x3fa>
movsd  0xd7a(%rip),%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
jbe    134e <circumcircle+0x24e>
movsd  -0x30(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x38(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xd2e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  0xd13(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xcf5(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm2
subsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    14f5 <circumcircle+0x3f5>
movsd  -0x30(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x38(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x48(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x20(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xc40(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  0xc25(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  0xc0a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xbec(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
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
addsd  -0x90(%rbp),%xmm0
ff
subsd  -0x88(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm1
subsd  -0x70(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd -0xb8(%rbp),%xmm0
ff
jbe    14c6 <circumcircle+0x3c6>
movsd  -0x68(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm2
subsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    14f0 <circumcircle+0x3f0>
movsd  -0x70(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  (%rax),%xmm2
subsd  -0x80(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    14f5 <circumcircle+0x3f5>
jmp    14fa <circumcircle+0x3fa>
movsd  -0x30(%rbp),%xmm0
mov    -0x50(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
mov    -0x58(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x60(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
mov    -0x50(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mov    -0x58(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
mov    -0x60(%rbp),%rax
subsd  (%rax),%xmm1
movsd  0xa3a(%rip),%xmm0
xor    %eax,%eax
mov    $0x1,%ecx
ucomisd %xmm1,%xmm0
cmovae %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x38,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<circumcircle>:
movapd %xmm3,%xmm10
subsd  %xmm5,%xmm10
movapd 0xeed(%rip),%xmm8
andpd  %xmm8,%xmm10
movapd %xmm5,%xmm11
subsd  %xmm7,%xmm11
andpd  %xmm8,%xmm11
movsd  0xf00(%rip),%xmm8
ucomisd %xmm10,%xmm8
jbe    1141 <circumcircle+0x41>
xor    %eax,%eax
ucomisd %xmm11,%xmm8
jbe    1141 <circumcircle+0x41>
ret
ucomisd %xmm10,%xmm8
jbe    119d <circumcircle+0x9d>
unpcklpd %xmm6,%xmm2
subsd  %xmm4,%xmm6
movapd %xmm5,%xmm9
addsd  %xmm7,%xmm9
subsd  %xmm5,%xmm7
divsd  %xmm7,%xmm6
mulsd  0xecd(%rip),%xmm9
movapd %xmm4,%xmm3
unpcklpd %xmm4,%xmm3
addpd  %xmm2,%xmm3
mulpd  0xea1(%rip),%xmm3
movlpd %xmm3,(%rdi)
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
subsd  %xmm2,%xmm3
mulsd  %xmm6,%xmm3
subsd  %xmm3,%xmm9
jmp    12b5 <circumcircle+0x1b5>
ucomisd %xmm11,%xmm8
movapd %xmm4,%xmm9
subsd  %xmm2,%xmm9
xorpd  0xe5b(%rip),%xmm9
movapd %xmm5,%xmm12
subsd  %xmm3,%xmm12
divsd  %xmm12,%xmm9
jbe    1209 <circumcircle+0x109>
addsd  %xmm5,%xmm3
mulsd  0xe66(%rip),%xmm3
unpcklpd %xmm2,%xmm6
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
addpd  %xmm6,%xmm2
mulpd  0xe36(%rip),%xmm2
movlpd %xmm2,(%rdi)
movapd %xmm2,%xmm6
unpckhpd %xmm2,%xmm6
subsd  %xmm6,%xmm2
mulsd  %xmm2,%xmm9
addsd  %xmm3,%xmm9
jmp    12b5 <circumcircle+0x1b5>
movapd %xmm4,%xmm12
addsd  %xmm6,%xmm12
subsd  %xmm4,%xmm6
xorpd  0xdf1(%rip),%xmm6
movapd %xmm5,%xmm13
addsd  %xmm7,%xmm13
subsd  %xmm5,%xmm7
divsd  %xmm7,%xmm6
addsd  %xmm4,%xmm2
movsd  0xdfb(%rip),%xmm7
mulsd  %xmm7,%xmm2
mulsd  %xmm7,%xmm12
addsd  %xmm5,%xmm3
mulsd  %xmm7,%xmm3
mulsd  %xmm7,%xmm13
movapd %xmm12,%xmm14
mulsd  %xmm6,%xmm14
movapd %xmm9,%xmm15
mulsd  %xmm2,%xmm15
subsd  %xmm14,%xmm15
addsd  %xmm13,%xmm15
subsd  %xmm3,%xmm15
movapd %xmm9,%xmm7
subsd  %xmm6,%xmm7
divsd  %xmm7,%xmm15
movsd  %xmm15,(%rdi)
ucomisd %xmm11,%xmm10
jbe    12a1 <circumcircle+0x1a1>
subsd  %xmm2,%xmm15
mulsd  %xmm15,%xmm9
addsd  %xmm3,%xmm9
jmp    12b5 <circumcircle+0x1b5>
subsd  %xmm12,%xmm15
mulsd  %xmm15,%xmm6
addsd  %xmm13,%xmm6
movapd %xmm6,%xmm9
movsd  %xmm9,(%rsi)
subsd  (%rdi),%xmm4
subsd  %xmm9,%xmm5
mulsd  %xmm5,%xmm5
mulsd  %xmm4,%xmm4
addsd  %xmm5,%xmm4
movsd  %xmm4,(%rdx)
subsd  (%rdi),%xmm0
subsd  (%rsi),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
subsd  %xmm4,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm8
setae  %al
ret

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

LLVM IR (-O2):
define i32 @circumcircle(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double* nocapture %8, double* nocapture %9, double* nocapture writeonly %10) {
%12 = fsub double %3, %5
%13 = tail call double @llvm.fabs.f64(double %12)
%14 = fsub double %5, %7
%15 = tail call double @llvm.fabs.f64(double %14)
%16 = fcmp olt double %13, 0x3EB0C6F7A0B5ED8D
%17 = fcmp olt double %15, 0x3EB0C6F7A0B5ED8D
%18 = select i1 %16, i1 %17, i1 false
br i1 %18, label %100, label %19
19: ; preds = %11
br i1 %16, label %20, label %38
20: ; preds = %19
%21 = fsub double %6, %4
%22 = fneg double %21
%23 = fsub double %7, %5
%24 = fdiv double %22, %23
%25 = fadd double %5, %7
%26 = fmul double %25, 5.000000e-01
%27 = insertelement <2 x double> poison, double %4, i64 0
%28 = shufflevector <2 x double> %27, <2 x double> poison, <2 x i32> zeroinitializer
%29 = insertelement <2 x double> poison, double %2, i64 0
%30 = insertelement <2 x double> %29, double %6, i64 1
%31 = fadd <2 x double> %28, %30
%32 = fmul <2 x double> %31, <double 5.000000e-01, double 5.000000e-01>
%33 = extractelement <2 x double> %32, i64 0
store double %33, double* %8
%34 = shufflevector <2 x double> %32, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%35 = fsub <2 x double> %32, %34
%36 = extractelement <2 x double> %35, i64 0
%37 = tail call double @llvm.fmuladd.f64(double %24, double %36, double %26)
br label %84
38: ; preds = %19
%39 = fsub double %4, %2
%40 = fneg double %39
%41 = fsub double %5, %3
%42 = fdiv double %40, %41
br i1 %17, label %43, label %57
43: ; preds = %38
%44 = fadd double %3, %5
%45 = fmul double %44, 5.000000e-01
%46 = insertelement <2 x double> poison, double %6, i64 0
%47 = insertelement <2 x double> %46, double %2, i64 1
%48 = insertelement <2 x double> poison, double %4, i64 0
%49 = shufflevector <2 x double> %48, <2 x double> poison, <2 x i32> zeroinitializer
%50 = fadd <2 x double> %47, %49
%51 = fmul <2 x double> %50, <double 5.000000e-01, double 5.000000e-01>
%52 = extractelement <2 x double> %51, i64 0
store double %52, double* %8
%53 = shufflevector <2 x double> %51, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%54 = fsub <2 x double> %51, %53
%55 = extractelement <2 x double> %54, i64 0
%56 = tail call double @llvm.fmuladd.f64(double %42, double %55, double %45)
br label %84
57: ; preds = %38
%58 = fsub double %6, %4
%59 = fneg double %58
%60 = fsub double %7, %5
%61 = fdiv double %59, %60
%62 = fadd double %2, %4
%63 = fmul double %62, 5.000000e-01
%64 = fadd double %4, %6
%65 = fmul double %64, 5.000000e-01
%66 = fadd double %3, %5
%67 = fmul double %66, 5.000000e-01
%68 = fadd double %5, %7
%69 = fmul double %68, 5.000000e-01
%70 = fneg double %61
%71 = fmul double %65, %70
%72 = tail call double @llvm.fmuladd.f64(double %42, double %63, double %71)
%73 = fadd double %69, %72
%74 = fsub double %73, %67
%75 = fsub double %42, %61
%76 = fdiv double %74, %75
store double %76, double* %8
%77 = fcmp ogt double %13, %15
br i1 %77, label %78, label %81
78: ; preds = %57
%79 = fsub double %76, %63
%80 = tail call double @llvm.fmuladd.f64(double %42, double %79, double %67)
br label %84
81: ; preds = %57
%82 = fsub double %76, %65
%83 = tail call double @llvm.fmuladd.f64(double %61, double %82, double %69)
br label %84
84: ; preds = %43, %81, %78, %20
%85 = phi double [ %56, %43 ], [ %83, %81 ], [ %80, %78 ], [ %37, %20 ]
store double %85, double* %9
%86 = load double, double* %8
%87 = fsub double %4, %86
%88 = fsub double %5, %85
%89 = fmul double %88, %88
%90 = tail call double @llvm.fmuladd.f64(double %87, double %87, double %89)
store double %90, double* %10
%91 = load double, double* %8
%92 = fsub double %0, %91
%93 = load double, double* %9
%94 = fsub double %1, %93
%95 = fmul double %94, %94
%96 = tail call double @llvm.fmuladd.f64(double %92, double %92, double %95)
%97 = fsub double %96, %90
%98 = fcmp ole double %97, 0x3EB0C6F7A0B5ED8D
%99 = zext i1 %98 to i32
br label %100
100: ; preds = %11, %84
%101 = phi i32 [ %99, %84 ], [ 0, %11 ]
ret i32 %101
}