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


x86 assembly (clang, -O0):
<CircumCircle>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%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),%xmm1
subsd  -0x38(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1194 <CircumCircle+0x84>
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    11a6 <CircumCircle+0x96>
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  0xe4a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    123d <CircumCircle+0x12d>
movsd  -0x38(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1205 <CircumCircle+0xf5>
movsd  -0x38(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1217 <CircumCircle+0x107>
movsd  -0x38(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0xdd9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    123d <CircumCircle+0x12d>
movl   $0x0,-0x4(%rbp)
jmp    16df <CircumCircle+0x5cf>
movsd  -0x38(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1282 <CircumCircle+0x172>
movsd  -0x38(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
jmp    1294 <CircumCircle+0x184>
movsd  -0x38(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  0xd5c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1368 <CircumCircle+0x258>
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  0xd14(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xcf9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  0xcdb(%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    15f5 <CircumCircle+0x4e5>
movsd  -0x48(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    13ad <CircumCircle+0x29d>
movsd  -0x48(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    13bf <CircumCircle+0x2af>
movsd  -0x48(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  0xc31(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1493 <CircumCircle+0x383>
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  0xbe9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  0xbce(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xbb0(%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    15f0 <CircumCircle+0x4e0>
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  0xafb(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  0xae0(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x28(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  0xac5(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xaa7(%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  -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    15f5 <CircumCircle+0x4e5>
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
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1030 <sqrt@plt>
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,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0xa8(%rbp),%xmm0
ff
xor    %eax,%eax
mov    $0x1,%ecx
ucomisd %xmm1,%xmm0
cmovae %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CircumCircle>:
push   %r15
push   %r14
push   %rbx
sub    $0x20,%rsp
mov    %rdx,%r15
mov    %rsi,%r14
mov    %rdi,%rbx
movapd %xmm0,%xmm13
movapd %xmm3,%xmm10
subsd  %xmm5,%xmm10
movapd 0xec6(%rip),%xmm8
xorpd  %xmm10,%xmm8
xorpd  %xmm9,%xmm9
movapd %xmm10,%xmm0
cmpltsd %xmm9,%xmm0
andpd  %xmm0,%xmm8
andnpd %xmm10,%xmm0
orpd   %xmm8,%xmm0
movsd  0xeb9(%rip),%xmm8
ucomisd %xmm0,%xmm8
jbe    11ad <CircumCircle+0x9d>
movapd %xmm5,%xmm11
subsd  %xmm7,%xmm11
movapd 0xe7f(%rip),%xmm10
xorpd  %xmm11,%xmm10
movapd %xmm11,%xmm0
cmpltsd %xmm9,%xmm0
andpd  %xmm0,%xmm10
andnpd %xmm11,%xmm0
orpd   %xmm10,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm8
ja     13de <CircumCircle+0x2ce>
movapd %xmm5,%xmm12
subsd  %xmm3,%xmm12
movapd 0xe40(%rip),%xmm10
xorpd  %xmm12,%xmm10
movapd %xmm12,%xmm0
cmpltsd %xmm9,%xmm0
andpd  %xmm0,%xmm10
andnpd %xmm12,%xmm0
orpd   %xmm10,%xmm0
ucomisd %xmm0,%xmm8
jbe    123b <CircumCircle+0x12b>
unpcklpd %xmm6,%xmm2
subsd  %xmm4,%xmm6
movapd %xmm5,%xmm10
addsd  %xmm7,%xmm10
subsd  %xmm5,%xmm7
divsd  %xmm7,%xmm6
mulsd  0xe1f(%rip),%xmm10
movapd %xmm4,%xmm3
unpcklpd %xmm4,%xmm3
addpd  %xmm2,%xmm3
mulpd  0xdf3(%rip),%xmm3
movlpd %xmm3,(%rbx)
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
subsd  %xmm2,%xmm3
mulsd  %xmm6,%xmm3
subsd  %xmm3,%xmm10
jmp    135d <CircumCircle+0x24d>
movapd %xmm7,%xmm11
subsd  %xmm5,%xmm11
movapd 0xdb2(%rip),%xmm9
movapd %xmm11,%xmm14
xorpd  %xmm9,%xmm14
xorpd  %xmm10,%xmm10
movapd %xmm11,%xmm0
cmpltsd %xmm10,%xmm0
andpd  %xmm0,%xmm14
andnpd %xmm11,%xmm0
orpd   %xmm14,%xmm0
ucomisd %xmm0,%xmm8
movapd %xmm4,%xmm10
subsd  %xmm2,%xmm10
xorpd  %xmm9,%xmm10
divsd  %xmm12,%xmm10
jbe    12d5 <CircumCircle+0x1c5>
addsd  %xmm5,%xmm3
mulsd  0xd8a(%rip),%xmm3
unpcklpd %xmm2,%xmm6
movapd %xmm4,%xmm7
unpcklpd %xmm4,%xmm7
addpd  %xmm6,%xmm7
mulpd  0xd5a(%rip),%xmm7
movlpd %xmm7,(%rbx)
movapd %xmm7,%xmm2
unpckhpd %xmm7,%xmm2
subsd  %xmm2,%xmm7
mulsd  %xmm7,%xmm10
addsd  %xmm3,%xmm10
jmp    135d <CircumCircle+0x24d>
movapd %xmm4,%xmm0
addsd  %xmm6,%xmm0
subsd  %xmm4,%xmm6
xorpd  0xd17(%rip),%xmm6
divsd  %xmm11,%xmm6
addsd  %xmm4,%xmm2
movsd  0xd2d(%rip),%xmm8
mulsd  %xmm8,%xmm2
mulsd  %xmm8,%xmm0
unpcklpd %xmm3,%xmm7
movapd %xmm5,%xmm3
unpcklpd %xmm5,%xmm3
addpd  %xmm7,%xmm3
mulpd  0xcf3(%rip),%xmm3
mulsd  %xmm6,%xmm0
movapd %xmm10,%xmm7
mulsd  %xmm2,%xmm7
subsd  %xmm0,%xmm7
addsd  %xmm3,%xmm7
unpckhpd %xmm3,%xmm3
subsd  %xmm3,%xmm7
movapd %xmm10,%xmm0
subsd  %xmm6,%xmm0
divsd  %xmm0,%xmm7
movsd  %xmm7,(%rbx)
subsd  %xmm2,%xmm7
mulsd  %xmm10,%xmm7
addsd  %xmm3,%xmm7
movapd %xmm7,%xmm10
movsd  %xmm10,(%r14)
subsd  (%rbx),%xmm4
subsd  %xmm10,%xmm5
mulsd  %xmm5,%xmm5
mulsd  %xmm4,%xmm4
addsd  %xmm5,%xmm4
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
jb     138a <CircumCircle+0x27a>
xorps  %xmm0,%xmm0
sqrtsd %xmm4,%xmm0
jmp    13b7 <CircumCircle+0x2a7>
movapd %xmm4,%xmm0
movapd %xmm4,0x10(%rsp)
movsd  %xmm13,0x8(%rsp)
movsd  %xmm1,(%rsp)
call   1030 <sqrt@plt>
movsd  (%rsp),%xmm1
movsd  0x8(%rsp),%xmm13
movapd 0x10(%rsp),%xmm4
movsd  %xmm0,(%r15)
subsd  (%rbx),%xmm13
subsd  (%r14),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm13,%xmm13
addsd  %xmm1,%xmm13
xor    %eax,%eax
ucomisd %xmm13,%xmm4
setae  %al
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %r15
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
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
%34 = load double, double* %16
%35 = load double, double* %18
%36 = fsub double %34, %35
%37 = fcmp olt double %36, 0.000000e+00
br i1 %37, label %38, label %43
38: ; preds = %11
%39 = load double, double* %16
%40 = load double, double* %18
%41 = fsub double %39, %40
%42 = fneg double %41
br label %47
43: ; preds = %11
%44 = load double, double* %16
%45 = load double, double* %18
%46 = fsub double %44, %45
br label %47
47: ; preds = %43, %38
%48 = phi double [ %42, %38 ], [ %46, %43 ]
%49 = fcmp olt double %48, 0x3EB0C6F7A0B5ED8D
br i1 %49, label %50, label %68
50: ; preds = %47
%51 = load double, double* %18
%52 = load double, double* %20
%53 = fsub double %51, %52
%54 = fcmp olt double %53, 0.000000e+00
br i1 %54, label %55, label %60
55: ; preds = %50
%56 = load double, double* %18
%57 = load double, double* %20
%58 = fsub double %56, %57
%59 = fneg double %58
br label %64
60: ; preds = %50
%61 = load double, double* %18
%62 = load double, double* %20
%63 = fsub double %61, %62
br label %64
64: ; preds = %60, %55
%65 = phi double [ %59, %55 ], [ %63, %60 ]
%66 = fcmp olt double %65, 0x3EB0C6F7A0B5ED8D
br i1 %66, label %67, label %68
67: ; preds = %64
store i32 0, i32* %12
br label %257
68: ; preds = %64, %47
%69 = load double, double* %18
%70 = load double, double* %16
%71 = fsub double %69, %70
%72 = fcmp olt double %71, 0.000000e+00
br i1 %72, label %73, label %78
73: ; preds = %68
%74 = load double, double* %18
%75 = load double, double* %16
%76 = fsub double %74, %75
%77 = fneg double %76
br label %82
78: ; preds = %68
%79 = load double, double* %18
%80 = load double, double* %16
%81 = fsub double %79, %80
br label %82
82: ; preds = %78, %73
%83 = phi double [ %77, %73 ], [ %81, %78 ]
%84 = fcmp olt double %83, 0x3EB0C6F7A0B5ED8D
br i1 %84, label %85, label %115
85: ; preds = %82
%86 = load double, double* %19
%87 = load double, double* %17
%88 = fsub double %86, %87
%89 = fneg double %88
%90 = load double, double* %20
%91 = load double, double* %18
%92 = fsub double %90, %91
%93 = fdiv double %89, %92
store double %93, double* %25
%94 = load double, double* %17
%95 = load double, double* %19
%96 = fadd double %94, %95
%97 = fdiv double %96, 2.000000e+00
store double %97, double* %27
%98 = load double, double* %18
%99 = load double, double* %20
%100 = fadd double %98, %99
%101 = fdiv double %100, 2.000000e+00
store double %101, double* %29
%102 = load double, double* %17
%103 = load double, double* %15
%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* %25
%108 = load double*, double** %21
%109 = load double, double* %108
%110 = load double, double* %27
%111 = fsub double %109, %110
%112 = load double, double* %29
%113 = call double @llvm.fmuladd.f64(double %107, double %111, double %112)
%114 = load double*, double** %22
store double %113, double* %114
br label %220
115: ; preds = %82
%116 = load double, double* %20
%117 = load double, double* %18
%118 = fsub double %116, %117
%119 = fcmp olt double %118, 0.000000e+00
br i1 %119, label %120, label %125
120: ; preds = %115
%121 = load double, double* %20
%122 = load double, double* %18
%123 = fsub double %121, %122
%124 = fneg double %123
br label %129
125: ; preds = %115
%126 = load double, double* %20
%127 = load double, double* %18
%128 = fsub double %126, %127
br label %129
129: ; preds = %125, %120
%130 = phi double [ %124, %120 ], [ %128, %125 ]
%131 = fcmp olt double %130, 0x3EB0C6F7A0B5ED8D
br i1 %131, label %132, label %162
132: ; preds = %129
%133 = load double, double* %17
%134 = load double, double* %15
%135 = fsub double %133, %134
%136 = fneg double %135
%137 = load double, double* %18
%138 = load double, double* %16
%139 = fsub double %137, %138
%140 = fdiv double %136, %139
store double %140, double* %24
%141 = load double, double* %15
%142 = load double, double* %17
%143 = fadd double %141, %142
%144 = fdiv double %143, 2.000000e+00
store double %144, double* %26
%145 = load double, double* %16
%146 = load double, double* %18
%147 = fadd double %145, %146
%148 = fdiv double %147, 2.000000e+00
store double %148, double* %28
%149 = load double, double* %19
%150 = load double, double* %17
%151 = fadd double %149, %150
%152 = fdiv double %151, 2.000000e+00
%153 = load double*, double** %21
store double %152, double* %153
%154 = load double, double* %24
%155 = load double*, double** %21
%156 = load double, double* %155
%157 = load double, double* %26
%158 = fsub double %156, %157
%159 = load double, double* %28
%160 = call double @llvm.fmuladd.f64(double %154, double %158, double %159)
%161 = load double*, double** %22
store double %160, double* %161
br label %219
162: ; preds = %129
%163 = load double, double* %17
%164 = load double, double* %15
%165 = fsub double %163, %164
%166 = fneg double %165
%167 = load double, double* %18
%168 = load double, double* %16
%169 = fsub double %167, %168
%170 = fdiv double %166, %169
store double %170, double* %24
%171 = load double, double* %19
%172 = load double, double* %17
%173 = fsub double %171, %172
%174 = fneg double %173
%175 = load double, double* %20
%176 = load double, double* %18
%177 = fsub double %175, %176
%178 = fdiv double %174, %177
store double %178, double* %25
%179 = load double, double* %15
%180 = load double, double* %17
%181 = fadd double %179, %180
%182 = fdiv double %181, 2.000000e+00
store double %182, double* %26
%183 = load double, double* %17
%184 = load double, double* %19
%185 = fadd double %183, %184
%186 = fdiv double %185, 2.000000e+00
store double %186, double* %27
%187 = load double, double* %16
%188 = load double, double* %18
%189 = fadd double %187, %188
%190 = fdiv double %189, 2.000000e+00
store double %190, double* %28
%191 = load double, double* %18
%192 = load double, double* %20
%193 = fadd double %191, %192
%194 = fdiv double %193, 2.000000e+00
store double %194, double* %29
%195 = load double, double* %24
%196 = load double, double* %26
%197 = load double, double* %25
%198 = load double, double* %27
%199 = fmul double %197, %198
%200 = fneg double %199
%201 = call double @llvm.fmuladd.f64(double %195, double %196, double %200)
%202 = load double, double* %29
%203 = fadd double %201, %202
%204 = load double, double* %28
%205 = fsub double %203, %204
%206 = load double, double* %24
%207 = load double, double* %25
%208 = fsub double %206, %207
%209 = fdiv double %205, %208
%210 = load double*, double** %21
store double %209, double* %210
%211 = load double, double* %24
%212 = load double*, double** %21
%213 = load double, double* %212
%214 = load double, double* %26
%215 = fsub double %213, %214
%216 = load double, double* %28
%217 = call double @llvm.fmuladd.f64(double %211, double %215, double %216)
%218 = load double*, double** %22
store double %217, double* %218
br label %219
219: ; preds = %162, %132
br label %220
220: ; preds = %219, %85
%221 = load double, double* %17
%222 = load double*, double** %21
%223 = load double, double* %222
%224 = fsub double %221, %223
store double %224, double* %30
%225 = load double, double* %18
%226 = load double*, double** %22
%227 = load double, double* %226
%228 = fsub double %225, %227
store double %228, double* %31
%229 = load double, double* %30
%230 = load double, double* %30
%231 = load double, double* %31
%232 = load double, double* %31
%233 = fmul double %231, %232
%234 = call double @llvm.fmuladd.f64(double %229, double %230, double %233)
store double %234, double* %32
%235 = load double, double* %32
%236 = call double @sqrt(double %235)
%237 = load double*, double** %23
store double %236, double* %237
%238 = load double, double* %13
%239 = load double*, double** %21
%240 = load double, double* %239
%241 = fsub double %238, %240
store double %241, double* %30
%242 = load double, double* %14
%243 = load double*, double** %22
%244 = load double, double* %243
%245 = fsub double %242, %244
store double %245, double* %31
%246 = load double, double* %30
%247 = load double, double* %30
%248 = load double, double* %31
%249 = load double, double* %31
%250 = fmul double %248, %249
%251 = call double @llvm.fmuladd.f64(double %246, double %247, double %250)
store double %251, double* %33
%252 = load double, double* %33
%253 = load double, double* %32
%254 = fcmp ole double %252, %253
%255 = zext i1 %254 to i64
%256 = select i1 %254, i32 1, i32 0
store i32 %256, i32* %12
br label %257
257: ; preds = %220, %67
%258 = load i32, i32* %12
ret i32 %258
}

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