#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 DBL_EPSILON;
double sqrt(double);
void Positive2C(double u, double v, double a, double height, double *xc,
                double *p0, double *q0) {
  double x1, y0, y1, m0, m1, xcap, ycap;
  double d, p, q, r;
  d = 1.0 - a * a;
  if (d < DBL_EPSILON)
    d = DBL_EPSILON;
  x1 = v / a;
  y1 = x1 * (-u - 0.5 * x1);
  m1 = -u - x1;
  y0 = 0.5 * v * v;
  m0 = -(u + a * v);
  if (m0 <= 0.0) {
    xcap = 0.0;
    ycap = height + 0.5 * v * v;
    p = 0.0;
    r = (ycap - y1) + m1 * x1;
    if (r <= 0.0)
      q = m0 - sqrt(2.0 * d * height);
    else
      q = (v - u) + 2.0 * height / (v - sqrt(2.0 * ycap));
  } else {
    xcap = m0 / d;
    ycap = height + 0.5 * (d * xcap * xcap + v * v);
    r = (ycap - y0) - m0 * xcap;
    if (r <= 0.0)
      p = sqrt(2.0 * d * height);
    else
      p = (ycap - y0) / xcap;
    r = (ycap - y1) - m1 * (xcap - x1);
    if (r <= 0.0)
      q = -sqrt(2.0 * d * height);
    else
      q = (a * (u - v) + (1.0 + a) * v) * a / d -
          sqrt(2.0 * r + (xcap - x1) * (xcap - x1));
  }
  *xc = xcap;
  *p0 = p;
  *q0 = q;
}


x86 assembly (clang, -O0):
<Positive2C>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm1,%xmm0
movsd  0xe98(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm1
mov    0x2e6b(%rip),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    119b <Positive2C+0x8b>
mov    0x2e56(%rip),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
movsd  -0x40(%rbp),%xmm1
movsd  0xe38(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x8(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xdf1(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
jb     138a <Positive2C+0x27a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xd8c(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jb     1310 <Positive2C+0x200>
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xd33(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1385 <Positive2C+0x275>
movsd  -0x10(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xcee(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xccc(%rip),%xmm0
mulsd  -0x70(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0xa0(%rbp),%xmm0
ff
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1565 <Positive2C+0x455>
movsd  -0x58(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm3
movsd  -0x10(%rbp),%xmm2
mulsd  -0x10(%rbp),%xmm2
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  0xc41(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jb     1441 <Positive2C+0x331>
movsd  0xbf0(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x80(%rbp)
jmp    1455 <Positive2C+0x345>
movsd  -0x70(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
subsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0x90(%rbp),%xmm0
ff
jb     14e1 <Positive2C+0x3d1>
movsd  0xb6a(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
call   1030 <sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1560 <Positive2C+0x450>
movsd  -0x18(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
subsd  -0x10(%rbp),%xmm2
movsd  0xb08(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x18(%rbp),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x68(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
subsd  -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
call   1030 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1565 <Positive2C+0x455>
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Positive2C>:
push   %r15
push   %r14
push   %rbx
sub    $0x80,%rsp
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
movapd %xmm0,%xmm9
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
movsd  0xec6(%rip),%xmm4
subsd  %xmm0,%xmm4
mov    0x2ea3(%rip),%rax
movsd  (%rax),%xmm11
maxsd  %xmm4,%xmm11
movapd %xmm1,%xmm13
divsd  %xmm2,%xmm13
movapd 0xebe(%rip),%xmm12
movapd %xmm9,%xmm7
xorpd  %xmm12,%xmm7
movsd  0xe94(%rip),%xmm6
mulsd  %xmm13,%xmm6
subsd  %xmm9,%xmm6
mulsd  %xmm13,%xmm6
subsd  %xmm13,%xmm7
movsd  0xe80(%rip),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm2,%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm9,%xmm5
xorpd  %xmm5,%xmm12
xorpd  %xmm8,%xmm8
mulsd  %xmm1,%xmm0
ucomisd %xmm8,%xmm5
jae    120a <Positive2C+0xfa>
divsd  %xmm11,%xmm12
movapd %xmm11,%xmm4
mulsd  %xmm12,%xmm4
movapd %xmm1,%xmm10
mulsd  %xmm1,%xmm10
mulsd  %xmm12,%xmm4
addsd  %xmm10,%xmm4
mulsd  0xe2f(%rip),%xmm4
addsd  %xmm3,%xmm4
movapd %xmm4,%xmm10
subsd  %xmm0,%xmm10
mulsd  %xmm12,%xmm5
addsd  %xmm10,%xmm5
ucomisd %xmm5,%xmm8
jae    1248 <Positive2C+0x138>
divsd  %xmm12,%xmm10
jmp    1364 <Positive2C+0x254>
addsd  %xmm3,%xmm0
movapd %xmm0,%xmm2
subsd  %xmm6,%xmm2
mulsd  %xmm13,%xmm7
addsd  %xmm2,%xmm7
ucomisd %xmm7,%xmm8
jae    126e <Positive2C+0x15e>
movapd %xmm1,%xmm12
subsd  %xmm9,%xmm12
addsd  %xmm3,%xmm3
addsd  %xmm0,%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jb     1294 <Positive2C+0x184>
sqrtsd %xmm0,%xmm0
jmp    12c3 <Positive2C+0x1b3>
movapd %xmm11,%xmm0
addsd  %xmm11,%xmm0
mulsd  %xmm3,%xmm0
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm0
jb     12da <Positive2C+0x1ca>
xorps  %xmm10,%xmm10
sqrtsd %xmm0,%xmm10
jmp    1364 <Positive2C+0x254>
addsd  %xmm11,%xmm11
mulsd  %xmm3,%xmm11
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm11
jb     13e6 <Positive2C+0x2d6>
xorps  %xmm0,%xmm0
sqrtsd %xmm11,%xmm0
jmp    1402 <Positive2C+0x2f2>
movapd %xmm12,0x10(%rsp)
movsd  %xmm3,0x8(%rsp)
movsd  %xmm1,0x28(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm2,%xmm2
movsd  0x28(%rsp),%xmm1
movsd  0x8(%rsp),%xmm3
movapd 0x10(%rsp),%xmm12
subsd  %xmm0,%xmm1
divsd  %xmm1,%xmm3
addsd  %xmm3,%xmm12
xorpd  %xmm10,%xmm10
jmp    148a <Positive2C+0x37a>
movapd %xmm12,0x10(%rsp)
movapd %xmm9,0x30(%rsp)
movsd  %xmm3,0x8(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  %xmm11,0x68(%rsp)
movsd  %xmm2,0x60(%rsp)
movapd %xmm7,0x70(%rsp)
movsd  %xmm13,0x58(%rsp)
movsd  %xmm4,0x50(%rsp)
movsd  %xmm6,0x48(%rsp)
call   1030 <sqrt@plt>
movsd  0x48(%rsp),%xmm6
movsd  0x50(%rsp),%xmm4
movsd  0x58(%rsp),%xmm13
movapd 0x70(%rsp),%xmm7
movsd  0x60(%rsp),%xmm2
movsd  0x68(%rsp),%xmm11
movsd  0x28(%rsp),%xmm1
movsd  0x8(%rsp),%xmm3
movapd 0x30(%rsp),%xmm9
movapd 0x10(%rsp),%xmm12
movapd %xmm0,%xmm10
subsd  %xmm6,%xmm4
movapd %xmm12,%xmm6
subsd  %xmm13,%xmm6
mulsd  %xmm6,%xmm7
subsd  %xmm7,%xmm4
xorpd  %xmm0,%xmm0
ucomisd %xmm4,%xmm0
jae    13c8 <Positive2C+0x2b8>
subsd  %xmm1,%xmm9
movsd  0xc6f(%rip),%xmm3
addsd  %xmm2,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm2,%xmm9
addsd  %xmm3,%xmm9
mulsd  %xmm2,%xmm9
divsd  %xmm11,%xmm9
mulsd  %xmm6,%xmm6
addsd  %xmm4,%xmm4
addsd  %xmm6,%xmm4
ucomisd %xmm0,%xmm4
jb     140e <Positive2C+0x2fe>
xorps  %xmm0,%xmm0
sqrtsd %xmm4,%xmm0
jmp    1441 <Positive2C+0x331>
addsd  %xmm11,%xmm11
mulsd  %xmm3,%xmm11
ucomisd %xmm0,%xmm11
jb     1452 <Positive2C+0x342>
xorps  %xmm0,%xmm0
sqrtsd %xmm11,%xmm0
jmp    1478 <Positive2C+0x368>
movapd %xmm11,%xmm0
movapd %xmm12,0x10(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd 0x10(%rsp),%xmm12
subsd  %xmm0,%xmm12
xorpd  %xmm10,%xmm10
jmp    148a <Positive2C+0x37a>
movapd %xmm4,%xmm0
movapd %xmm12,0x10(%rsp)
movapd %xmm9,0x30(%rsp)
movsd  %xmm10,0x8(%rsp)
call   1030 <sqrt@plt>
movsd  0x8(%rsp),%xmm10
movapd 0x30(%rsp),%xmm9
movapd 0x10(%rsp),%xmm12
subsd  %xmm0,%xmm9
movapd %xmm12,%xmm2
movapd %xmm9,%xmm12
jmp    148a <Positive2C+0x37a>
movapd %xmm11,%xmm0
movapd %xmm12,0x10(%rsp)
movsd  %xmm10,0x8(%rsp)
call   1030 <sqrt@plt>
movsd  0x8(%rsp),%xmm10
movapd 0x10(%rsp),%xmm12
xorpd  0xba0(%rip),%xmm0
movapd %xmm12,%xmm2
movapd %xmm0,%xmm12
movsd  %xmm2,(%rbx)
movsd  %xmm10,(%r15)
movsd  %xmm12,(%r14)
add    $0x80,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@DBL_EPSILON = global double 0.000000e+00
define void @Positive2C(double %0, double %1, double %2, double %3, double* %4, double* %5, double* %6) {
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double*
%13 = alloca double*
%14 = alloca double*
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
store double %0, double* %8
store double %1, double* %9
store double %2, double* %10
store double %3, double* %11
store double* %4, double** %12
store double* %5, double** %13
store double* %6, double** %14
%26 = load double, double* %10
%27 = load double, double* %10
%28 = fneg double %26
%29 = call double @llvm.fmuladd.f64(double %28, double %27, double 1.000000e+00)
store double %29, double* %22
%30 = load double, double* %22
%31 = load double, double* @DBL_EPSILON
%32 = fcmp olt double %30, %31
br i1 %32, label %33, label %35
33: ; preds = %7
%34 = load double, double* @DBL_EPSILON
store double %34, double* %22
br label %35
35: ; preds = %33, %7
%36 = load double, double* %9
%37 = load double, double* %10
%38 = fdiv double %36, %37
store double %38, double* %15
%39 = load double, double* %15
%40 = load double, double* %8
%41 = fneg double %40
%42 = load double, double* %15
%43 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %42, double %41)
%44 = fmul double %39, %43
store double %44, double* %17
%45 = load double, double* %8
%46 = fneg double %45
%47 = load double, double* %15
%48 = fsub double %46, %47
store double %48, double* %19
%49 = load double, double* %9
%50 = fmul double 5.000000e-01, %49
%51 = load double, double* %9
%52 = fmul double %50, %51
store double %52, double* %16
%53 = load double, double* %8
%54 = load double, double* %10
%55 = load double, double* %9
%56 = call double @llvm.fmuladd.f64(double %54, double %55, double %53)
%57 = fneg double %56
store double %57, double* %18
%58 = load double, double* %18
%59 = fcmp ole double %58, 0.000000e+00
br i1 %59, label %60, label %96
60: ; preds = %35
store double 0.000000e+00, double* %20
%61 = load double, double* %11
%62 = load double, double* %9
%63 = fmul double 5.000000e-01, %62
%64 = load double, double* %9
%65 = call double @llvm.fmuladd.f64(double %63, double %64, double %61)
store double %65, double* %21
store double 0.000000e+00, double* %23
%66 = load double, double* %21
%67 = load double, double* %17
%68 = fsub double %66, %67
%69 = load double, double* %19
%70 = load double, double* %15
%71 = call double @llvm.fmuladd.f64(double %69, double %70, double %68)
store double %71, double* %25
%72 = load double, double* %25
%73 = fcmp ole double %72, 0.000000e+00
br i1 %73, label %74, label %82
74: ; preds = %60
%75 = load double, double* %18
%76 = load double, double* %22
%77 = fmul double 2.000000e+00, %76
%78 = load double, double* %11
%79 = fmul double %77, %78
%80 = call double @sqrt(double %79)
%81 = fsub double %75, %80
store double %81, double* %24
br label %95
82: ; preds = %60
%83 = load double, double* %9
%84 = load double, double* %8
%85 = fsub double %83, %84
%86 = load double, double* %11
%87 = fmul double 2.000000e+00, %86
%88 = load double, double* %9
%89 = load double, double* %21
%90 = fmul double 2.000000e+00, %89
%91 = call double @sqrt(double %90)
%92 = fsub double %88, %91
%93 = fdiv double %87, %92
%94 = fadd double %85, %93
store double %94, double* %24
br label %95
95: ; preds = %82, %74
br label %176
96: ; preds = %35
%97 = load double, double* %18
%98 = load double, double* %22
%99 = fdiv double %97, %98
store double %99, double* %20
%100 = load double, double* %11
%101 = load double, double* %22
%102 = load double, double* %20
%103 = fmul double %101, %102
%104 = load double, double* %20
%105 = load double, double* %9
%106 = load double, double* %9
%107 = fmul double %105, %106
%108 = call double @llvm.fmuladd.f64(double %103, double %104, double %107)
%109 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %108, double %100)
store double %109, double* %21
%110 = load double, double* %21
%111 = load double, double* %16
%112 = fsub double %110, %111
%113 = load double, double* %18
%114 = load double, double* %20
%115 = fneg double %113
%116 = call double @llvm.fmuladd.f64(double %115, double %114, double %112)
store double %116, double* %25
%117 = load double, double* %25
%118 = fcmp ole double %117, 0.000000e+00
br i1 %118, label %119, label %125
119: ; preds = %96
%120 = load double, double* %22
%121 = fmul double 2.000000e+00, %120
%122 = load double, double* %11
%123 = fmul double %121, %122
%124 = call double @sqrt(double %123)
store double %124, double* %23
br label %131
125: ; preds = %96
%126 = load double, double* %21
%127 = load double, double* %16
%128 = fsub double %126, %127
%129 = load double, double* %20
%130 = fdiv double %128, %129
store double %130, double* %23
br label %131
131: ; preds = %125, %119
%132 = load double, double* %21
%133 = load double, double* %17
%134 = fsub double %132, %133
%135 = load double, double* %19
%136 = load double, double* %20
%137 = load double, double* %15
%138 = fsub double %136, %137
%139 = fneg double %135
%140 = call double @llvm.fmuladd.f64(double %139, double %138, double %134)
store double %140, double* %25
%141 = load double, double* %25
%142 = fcmp ole double %141, 0.000000e+00
br i1 %142, label %143, label %150
143: ; preds = %131
%144 = load double, double* %22
%145 = fmul double 2.000000e+00, %144
%146 = load double, double* %11
%147 = fmul double %145, %146
%148 = call double @sqrt(double %147)
%149 = fneg double %148
store double %149, double* %24
br label %175
150: ; preds = %131
%151 = load double, double* %10
%152 = load double, double* %8
%153 = load double, double* %9
%154 = fsub double %152, %153
%155 = load double, double* %10
%156 = fadd double 1.000000e+00, %155
%157 = load double, double* %9
%158 = fmul double %156, %157
%159 = call double @llvm.fmuladd.f64(double %151, double %154, double %158)
%160 = load double, double* %10
%161 = fmul double %159, %160
%162 = load double, double* %22
%163 = fdiv double %161, %162
%164 = load double, double* %25
%165 = load double, double* %20
%166 = load double, double* %15
%167 = fsub double %165, %166
%168 = load double, double* %20
%169 = load double, double* %15
%170 = fsub double %168, %169
%171 = fmul double %167, %170
%172 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %164, double %171)
%173 = call double @sqrt(double %172)
%174 = fsub double %163, %173
store double %174, double* %24
br label %175
175: ; preds = %150, %143
br label %176
176: ; preds = %175, %95
%177 = load double, double* %20
%178 = load double*, double** %12
store double %177, double* %178
%179 = load double, double* %23
%180 = load double*, double** %13
store double %179, double* %180
%181 = load double, double* %24
%182 = load double*, double** %14
store double %181, double* %182
ret void
}

LLVM IR (-O2):
@DBL_EPSILON = global double 0.000000e+00
define void @Positive2C(double %0, double %1, double %2, double %3, double* nocapture writeonly %4, double* nocapture writeonly %5, double* nocapture writeonly %6) {
%8 = fneg double %2
%9 = tail call double @llvm.fmuladd.f64(double %8, double %2, double 1.000000e+00)
%10 = load double, double* @DBL_EPSILON
%11 = fcmp olt double %9, %10
%12 = select i1 %11, double %10, double %9
%13 = fdiv double %1, %2
%14 = fneg double %0
%15 = tail call double @llvm.fmuladd.f64(double %13, double -5.000000e-01, double %14)
%16 = fmul double %13, %15
%17 = fsub double %14, %13
%18 = fmul double %1, 5.000000e-01
%19 = tail call double @llvm.fmuladd.f64(double %2, double %1, double %0)
%20 = fneg double %19
%21 = fcmp ult double %19, 0.000000e+00
br i1 %21, label %40, label %22
22: ; preds = %7
%23 = tail call double @llvm.fmuladd.f64(double %18, double %1, double %3)
%24 = fsub double %23, %16
%25 = tail call double @llvm.fmuladd.f64(double %17, double %13, double %24)
%26 = fcmp ugt double %25, 0.000000e+00
br i1 %26, label %32, label %27
27: ; preds = %22
%28 = fmul double %12, 2.000000e+00
%29 = fmul double %28, %3
%30 = tail call double @sqrt(double %29)
%31 = fsub double %20, %30
br label %79
32: ; preds = %22
%33 = fsub double %1, %0
%34 = fmul double %3, 2.000000e+00
%35 = fmul double %23, 2.000000e+00
%36 = tail call double @sqrt(double %35)
%37 = fsub double %1, %36
%38 = fdiv double %34, %37
%39 = fadd double %33, %38
br label %79
40: ; preds = %7
%41 = fmul double %18, %1
%42 = fdiv double %20, %12
%43 = fmul double %12, %42
%44 = fmul double %1, %1
%45 = tail call double @llvm.fmuladd.f64(double %43, double %42, double %44)
%46 = tail call double @llvm.fmuladd.f64(double %45, double 5.000000e-01, double %3)
%47 = fsub double %46, %41
%48 = tail call double @llvm.fmuladd.f64(double %19, double %42, double %47)
%49 = fcmp ugt double %48, 0.000000e+00
br i1 %49, label %54, label %50
50: ; preds = %40
%51 = fmul double %12, 2.000000e+00
%52 = fmul double %51, %3
%53 = tail call double @sqrt(double %52)
br label %56
54: ; preds = %40
%55 = fdiv double %47, %42
br label %56
56: ; preds = %54, %50
%57 = phi double [ %53, %50 ], [ %55, %54 ]
%58 = fsub double %46, %16
%59 = fsub double %42, %13
%60 = fneg double %17
%61 = tail call double @llvm.fmuladd.f64(double %60, double %59, double %58)
%62 = fcmp ugt double %61, 0.000000e+00
br i1 %62, label %68, label %63
63: ; preds = %56
%64 = fmul double %12, 2.000000e+00
%65 = fmul double %64, %3
%66 = tail call double @sqrt(double %65)
%67 = fneg double %66
br label %79
68: ; preds = %56
%69 = fsub double %0, %1
%70 = fadd double %2, 1.000000e+00
%71 = fmul double %70, %1
%72 = tail call double @llvm.fmuladd.f64(double %2, double %69, double %71)
%73 = fmul double %72, %2
%74 = fdiv double %73, %12
%75 = fmul double %59, %59
%76 = tail call double @llvm.fmuladd.f64(double %61, double 2.000000e+00, double %75)
%77 = tail call double @sqrt(double %76)
%78 = fsub double %74, %77
br label %79
79: ; preds = %63, %68, %27, %32
%80 = phi double [ 0.000000e+00, %27 ], [ 0.000000e+00, %32 ], [ %42, %63 ], [ %42, %68 ]
%81 = phi double [ 0.000000e+00, %27 ], [ 0.000000e+00, %32 ], [ %57, %63 ], [ %57, %68 ]
%82 = phi double [ %31, %27 ], [ %39, %32 ], [ %67, %63 ], [ %78, %68 ]
store double %80, double* %4
store double %81, double* %5
store double %82, double* %6
ret void
}