#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 Max(double, double);
double Min(double, double);
int fabs(double);
double sqrt(double);
double SolveQuadraticEq(double AA, double BB, double CC) {
  double X1 = 0.0, X2 = 0.0;
  double DD, TEMP;
  double Time = 0.0;
  if ((fabs(AA) * 1.0e12) <= fabs(BB) || (AA == 0.0)) {
    if (BB != 0.0) {
      X1 = -CC / BB;
      X2 = X1;
      goto ok15;
    } else {
      if (CC == 0.0) {
        X1 = 0.0;
        X2 = 0.0;
        goto ok15;
      }
      X1 = -1.0e4;
      X2 = X1;
      goto ok15;
    }
  }
  if (CC == 0) {
    X1 = -BB / AA;
    X2 = 0.0;
    goto ok15;
  }
  if (BB == 0.0) {
    TEMP = -CC / AA;
    if (TEMP < 0.0) {
      X1 = -1.0e4;
      X2 = -1.0e4;
      goto ok15;
    }
    X1 = sqrt(TEMP);
    X2 = -X1;
    goto ok15;
  }
  DD = BB * BB - 4.0 * AA * CC;
  if (DD < 0.0) {
    X1 = -1.0e4;
    X2 = -1.0e4;
    goto ok15;
  }
  DD = sqrt(DD);
  if (DD == 0.0) {
    X1 = -BB / (2.0 * AA);
    X2 = X1;
    goto ok15;
  }
  if (BB > 0.0) {
    X1 = (-BB - DD) / (2.0 * AA);
    X2 = (2.0 * CC) / (-BB - DD);
    goto ok15;
  }
  if (BB < 0.0) {
    X2 = (-BB + DD) / (2.0 * AA);
    X1 = (2.0 * CC) / (-BB + DD);
    goto ok15;
  }
ok15:
  if (fabs(X1) < 4e-10)
    X1 = 0.0;
  if (fabs(X2) < 4e-10)
    X2 = 0.0;
  if ((X1 > 0.0) && (X2 > 0.0)) {
    Time = Min(X1, X2);
  } else {
    Time = Max(X1, X2);
  }
  return Time;
}


x86 assembly (clang, -O0):
<SolveQuadraticEq>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe7b(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1050 <fabs@plt>
movsd  -0x48(%rbp),%xmm1
cvtsi2sd %eax,%xmm0
ucomisd %xmm1,%xmm0
jae    11c3 <SolveQuadraticEq+0x83>
movsd  -0x8(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    125e <SolveQuadraticEq+0x11e>
jp     125e <SolveQuadraticEq+0x11e>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11e0 <SolveQuadraticEq+0xa0>
jp     11e0 <SolveQuadraticEq+0xa0>
jmp    1215 <SolveQuadraticEq+0xd5>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1242 <SolveQuadraticEq+0x102>
jp     1242 <SolveQuadraticEq+0x102>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  0xdce(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12a9 <SolveQuadraticEq+0x169>
jp     12a9 <SolveQuadraticEq+0x169>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1349 <SolveQuadraticEq+0x209>
jp     1349 <SolveQuadraticEq+0x209>
movsd  -0x18(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
divsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1314 <SolveQuadraticEq+0x1d4>
movsd  0xd1b(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xd0e(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x38(%rbp),%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0xcad(%rip),%xmm1
mulsd  -0x8(%rbp),%xmm1
mulsd  -0x18(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    13b6 <SolveQuadraticEq+0x276>
movsd  0xc79(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xc6c(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x30(%rbp),%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    141e <SolveQuadraticEq+0x2de>
jp     141e <SolveQuadraticEq+0x2de>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xc0f(%rip),%xmm1
mulsd  -0x8(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14a3 <SolveQuadraticEq+0x363>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0xbb7(%rip),%xmm1
mulsd  -0x8(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xba1(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
subsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1524 <SolveQuadraticEq+0x3e4>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xb36(%rip),%xmm1
mulsd  -0x8(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xb20(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
addsd  -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1529 <SolveQuadraticEq+0x3e9>
jmp    1529 <SolveQuadraticEq+0x3e9>
movsd  -0x20(%rbp),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xae1(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1551 <SolveQuadraticEq+0x411>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0xab9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1579 <SolveQuadraticEq+0x439>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    15b6 <SolveQuadraticEq+0x476>
movsd  -0x28(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    15b6 <SolveQuadraticEq+0x476>
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
call   1030 <Min@plt>
movsd  %xmm0,-0x40(%rbp)
jmp    15ca <SolveQuadraticEq+0x48a>
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
call   1040 <Max@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SolveQuadraticEq>:
push   %rbx
sub    $0x30,%rsp
movapd %xmm2,0x20(%rsp)
movapd %xmm1,(%rsp)
movsd  %xmm0,0x10(%rsp)
call   1050 <fabs@plt>
mov    %eax,%ebx
movapd (%rsp),%xmm0
call   1050 <fabs@plt>
movsd  0x10(%rsp),%xmm4
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
jne    1179 <SolveQuadraticEq+0x39>
jnp    11c1 <SolveQuadraticEq+0x81>
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
mulsd  0xe78(%rip),%xmm1
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
ucomisd %xmm1,%xmm2
jae    11c1 <SolveQuadraticEq+0x81>
xorpd  %xmm5,%xmm5
movapd 0x20(%rsp),%xmm2
ucomisd %xmm5,%xmm2
jne    11ed <SolveQuadraticEq+0xad>
jp     11ed <SolveQuadraticEq+0xad>
movapd (%rsp),%xmm0
xorpd  0xe6c(%rip),%xmm0
divsd  %xmm4,%xmm0
movapd %xmm0,%xmm1
jmp    1336 <SolveQuadraticEq+0x1f6>
movapd (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jne    11ce <SolveQuadraticEq+0x8e>
jnp    121f <SolveQuadraticEq+0xdf>
movapd 0x20(%rsp),%xmm0
xorpd  0xe44(%rip),%xmm0
divsd  %xmm1,%xmm0
movapd %xmm0,%xmm5
movapd %xmm0,%xmm1
jmp    1336 <SolveQuadraticEq+0x1f6>
movapd (%rsp),%xmm3
ucomisd %xmm5,%xmm3
jne    1243 <SolveQuadraticEq+0x103>
jp     1243 <SolveQuadraticEq+0x103>
xorpd  0xe1e(%rip),%xmm2
divsd  %xmm4,%xmm2
xorpd  %xmm0,%xmm0
ucomisd %xmm2,%xmm0
ja     1269 <SolveQuadraticEq+0x129>
ucomisd %xmm0,%xmm2
jb     1286 <SolveQuadraticEq+0x146>
xorps  %xmm1,%xmm1
sqrtsd %xmm2,%xmm1
jmp    1293 <SolveQuadraticEq+0x153>
xorpd  %xmm0,%xmm0
movapd 0x20(%rsp),%xmm1
cmpeqsd %xmm0,%xmm1
movsd  0xdda(%rip),%xmm0
andnpd %xmm0,%xmm1
movapd %xmm1,%xmm5
jmp    1336 <SolveQuadraticEq+0x1f6>
movsd  0xdbd(%rip),%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    127a <SolveQuadraticEq+0x13a>
movsd  0xd9f(%rip),%xmm5
movapd %xmm5,%xmm1
jmp    1336 <SolveQuadraticEq+0x1f6>
ucomisd %xmm1,%xmm0
jb     12a4 <SolveQuadraticEq+0x164>
sqrtsd %xmm0,%xmm0
jmp    12ba <SolveQuadraticEq+0x17a>
movapd %xmm2,%xmm0
call   1060 <sqrt@plt>
movapd %xmm0,%xmm1
movapd 0xd85(%rip),%xmm5
xorpd  %xmm1,%xmm5
jmp    1336 <SolveQuadraticEq+0x1f6>
call   1060 <sqrt@plt>
movsd  0x10(%rsp),%xmm4
movapd (%rsp),%xmm3
movapd 0x20(%rsp),%xmm2
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12e0 <SolveQuadraticEq+0x1a0>
jp     12e0 <SolveQuadraticEq+0x1a0>
xorpd  0xd52(%rip),%xmm3
addsd  %xmm4,%xmm4
divsd  %xmm4,%xmm3
movapd %xmm3,%xmm5
movapd %xmm3,%xmm1
jmp    1336 <SolveQuadraticEq+0x1f6>
ucomisd %xmm1,%xmm3
jbe    130c <SolveQuadraticEq+0x1cc>
xorpd  0xd32(%rip),%xmm3
subsd  %xmm0,%xmm3
addsd  %xmm4,%xmm4
addsd  %xmm2,%xmm2
divsd  %xmm3,%xmm2
divsd  %xmm4,%xmm3
movapd %xmm2,%xmm5
movapd %xmm3,%xmm1
jmp    1336 <SolveQuadraticEq+0x1f6>
xorpd  %xmm5,%xmm5
ucomisd %xmm3,%xmm5
xorpd  %xmm1,%xmm1
jbe    1336 <SolveQuadraticEq+0x1f6>
subsd  %xmm3,%xmm0
addsd  %xmm4,%xmm4
addsd  %xmm2,%xmm2
divsd  %xmm0,%xmm2
divsd  %xmm4,%xmm0
movapd %xmm0,%xmm5
movapd %xmm2,%xmm1
movapd %xmm5,(%rsp)
movapd %xmm1,0x10(%rsp)
movapd %xmm1,%xmm0
call   1050 <fabs@plt>
xorpd  %xmm0,%xmm0
test   %eax,%eax
jle    1358 <SolveQuadraticEq+0x218>
movapd 0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps (%rsp),%xmm0
call   1050 <fabs@plt>
xorpd  %xmm1,%xmm1
test   %eax,%eax
jle    1374 <SolveQuadraticEq+0x234>
movapd (%rsp),%xmm1
movsd  0x10(%rsp),%xmm0
ucomisd 0xc96(%rip),%xmm0
jbe    1398 <SolveQuadraticEq+0x258>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jbe    1398 <SolveQuadraticEq+0x258>
add    $0x30,%rsp
pop    %rbx
jmp    1030 <Min@plt>
add    $0x30,%rsp
pop    %rbx
jmp    1040 <Max@plt>

LLVM IR (-O0):
define double @SolveQuadraticEq(double %0, double %1, double %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
store double %0, double* %4
store double %1, double* %5
store double %2, double* %6
store double 0.000000e+00, double* %7
store double 0.000000e+00, double* %8
store double 0.000000e+00, double* %11
%12 = load double, double* %4
%13 = call i32 @fabs(double %12)
%14 = sitofp i32 %13 to double
%15 = fmul double %14, 1.000000e+12
%16 = load double, double* %5
%17 = call i32 @fabs(double %16)
%18 = sitofp i32 %17 to double
%19 = fcmp ole double %15, %18
br i1 %19, label %23, label %20
20: ; preds = %3
%21 = load double, double* %4
%22 = fcmp oeq double %21, 0.000000e+00
br i1 %22, label %23, label %38
23: ; preds = %20, %3
%24 = load double, double* %5
%25 = fcmp une double %24, 0.000000e+00
br i1 %25, label %26, label %32
26: ; preds = %23
%27 = load double, double* %6
%28 = fneg double %27
%29 = load double, double* %5
%30 = fdiv double %28, %29
store double %30, double* %7
%31 = load double, double* %7
store double %31, double* %8
br label %123
32: ; preds = %23
%33 = load double, double* %6
%34 = fcmp oeq double %33, 0.000000e+00
br i1 %34, label %35, label %36
35: ; preds = %32
store double 0.000000e+00, double* %7
store double 0.000000e+00, double* %8
br label %123
36: ; preds = %32
store double -1.000000e+04, double* %7
%37 = load double, double* %7
store double %37, double* %8
br label %123
38: ; preds = %20
%39 = load double, double* %6
%40 = fcmp oeq double %39, 0.000000e+00
br i1 %40, label %41, label %46
41: ; preds = %38
%42 = load double, double* %5
%43 = fneg double %42
%44 = load double, double* %4
%45 = fdiv double %43, %44
store double %45, double* %7
store double 0.000000e+00, double* %8
br label %123
46: ; preds = %38
%47 = load double, double* %5
%48 = fcmp oeq double %47, 0.000000e+00
br i1 %48, label %49, label %62
49: ; preds = %46
%50 = load double, double* %6
%51 = fneg double %50
%52 = load double, double* %4
%53 = fdiv double %51, %52
store double %53, double* %10
%54 = load double, double* %10
%55 = fcmp olt double %54, 0.000000e+00
br i1 %55, label %56, label %57
56: ; preds = %49
store double -1.000000e+04, double* %7
store double -1.000000e+04, double* %8
br label %123
57: ; preds = %49
%58 = load double, double* %10
%59 = call double @sqrt(double %58)
store double %59, double* %7
%60 = load double, double* %7
%61 = fneg double %60
store double %61, double* %8
br label %123
62: ; preds = %46
%63 = load double, double* %5
%64 = load double, double* %5
%65 = load double, double* %4
%66 = fmul double 4.000000e+00, %65
%67 = load double, double* %6
%68 = fmul double %66, %67
%69 = fneg double %68
%70 = call double @llvm.fmuladd.f64(double %63, double %64, double %69)
store double %70, double* %9
%71 = load double, double* %9
%72 = fcmp olt double %71, 0.000000e+00
br i1 %72, label %73, label %74
73: ; preds = %62
store double -1.000000e+04, double* %7
store double -1.000000e+04, double* %8
br label %123
74: ; preds = %62
%75 = load double, double* %9
%76 = call double @sqrt(double %75)
store double %76, double* %9
%77 = load double, double* %9
%78 = fcmp oeq double %77, 0.000000e+00
br i1 %78, label %79, label %86
79: ; preds = %74
%80 = load double, double* %5
%81 = fneg double %80
%82 = load double, double* %4
%83 = fmul double 2.000000e+00, %82
%84 = fdiv double %81, %83
store double %84, double* %7
%85 = load double, double* %7
store double %85, double* %8
br label %123
86: ; preds = %74
%87 = load double, double* %5
%88 = fcmp ogt double %87, 0.000000e+00
br i1 %88, label %89, label %104
89: ; preds = %86
%90 = load double, double* %5
%91 = fneg double %90
%92 = load double, double* %9
%93 = fsub double %91, %92
%94 = load double, double* %4
%95 = fmul double 2.000000e+00, %94
%96 = fdiv double %93, %95
store double %96, double* %7
%97 = load double, double* %6
%98 = fmul double 2.000000e+00, %97
%99 = load double, double* %5
%100 = fneg double %99
%101 = load double, double* %9
%102 = fsub double %100, %101
%103 = fdiv double %98, %102
store double %103, double* %8
br label %123
104: ; preds = %86
%105 = load double, double* %5
%106 = fcmp olt double %105, 0.000000e+00
br i1 %106, label %107, label %122
107: ; preds = %104
%108 = load double, double* %5
%109 = fneg double %108
%110 = load double, double* %9
%111 = fadd double %109, %110
%112 = load double, double* %4
%113 = fmul double 2.000000e+00, %112
%114 = fdiv double %111, %113
store double %114, double* %8
%115 = load double, double* %6
%116 = fmul double 2.000000e+00, %115
%117 = load double, double* %5
%118 = fneg double %117
%119 = load double, double* %9
%120 = fadd double %118, %119
%121 = fdiv double %116, %120
store double %121, double* %7
br label %123
122: ; preds = %104
br label %123
123: ; preds = %122, %107, %89, %79, %73, %57, %56, %41, %36, %35, %26
%124 = load double, double* %7
%125 = call i32 @fabs(double %124)
%126 = sitofp i32 %125 to double
%127 = fcmp olt double %126, 4.000000e-10
br i1 %127, label %128, label %129
128: ; preds = %123
store double 0.000000e+00, double* %7
br label %129
129: ; preds = %128, %123
%130 = load double, double* %8
%131 = call i32 @fabs(double %130)
%132 = sitofp i32 %131 to double
%133 = fcmp olt double %132, 4.000000e-10
br i1 %133, label %134, label %135
134: ; preds = %129
store double 0.000000e+00, double* %8
br label %135
135: ; preds = %134, %129
%136 = load double, double* %7
%137 = fcmp ogt double %136, 0.000000e+00
br i1 %137, label %138, label %145
138: ; preds = %135
%139 = load double, double* %8
%140 = fcmp ogt double %139, 0.000000e+00
br i1 %140, label %141, label %145
141: ; preds = %138
%142 = load double, double* %7
%143 = load double, double* %8
%144 = call double @Min(double %142, double %143)
store double %144, double* %11
br label %149
145: ; preds = %138, %135
%146 = load double, double* %7
%147 = load double, double* %8
%148 = call double @Max(double %146, double %147)
store double %148, double* %11
br label %149
149: ; preds = %145, %141
%150 = load double, double* %11
ret double %150
}

LLVM IR (-O2):
define double @SolveQuadraticEq(double %0, double %1, double %2) {
%4 = tail call i32 @fabs(double %0)
%5 = sitofp i32 %4 to double
%6 = fmul double %5, 1.000000e+12
%7 = tail call i32 @fabs(double %1)
%8 = sitofp i32 %7 to double
%9 = fcmp ole double %6, %8
%10 = fcmp oeq double %0, 0.000000e+00
%11 = or i1 %10, %9
br i1 %11, label %12, label %20
12: ; preds = %3
%13 = fcmp une double %1, 0.000000e+00
br i1 %13, label %14, label %17
14: ; preds = %12
%15 = fneg double %2
%16 = fdiv double %15, %1
br label %63
17: ; preds = %12
%18 = fcmp oeq double %2, 0.000000e+00
%19 = select i1 %18, double 0.000000e+00, double -1.000000e+04
br label %63
20: ; preds = %3
%21 = fcmp oeq double %2, 0.000000e+00
br i1 %21, label %22, label %25
22: ; preds = %20
%23 = fneg double %1
%24 = fdiv double %23, %0
br label %63
25: ; preds = %20
%26 = fcmp oeq double %1, 0.000000e+00
br i1 %26, label %27, label %34
27: ; preds = %25
%28 = fneg double %2
%29 = fdiv double %28, %0
%30 = fcmp olt double %29, 0.000000e+00
br i1 %30, label %63, label %31
31: ; preds = %27
%32 = tail call double @sqrt(double %29)
%33 = fneg double %32
br label %63
34: ; preds = %25
%35 = fmul double %0, -4.000000e+00
%36 = fmul double %35, %2
%37 = tail call double @llvm.fmuladd.f64(double %1, double %1, double %36)
%38 = fcmp olt double %37, 0.000000e+00
br i1 %38, label %63, label %39
39: ; preds = %34
%40 = tail call double @sqrt(double %37)
%41 = fcmp oeq double %40, 0.000000e+00
br i1 %41, label %42, label %46
42: ; preds = %39
%43 = fneg double %1
%44 = fmul double %0, 2.000000e+00
%45 = fdiv double %43, %44
br label %63
46: ; preds = %39
%47 = fcmp ogt double %1, 0.000000e+00
br i1 %47, label %48, label %55
48: ; preds = %46
%49 = fneg double %1
%50 = fsub double %49, %40
%51 = fmul double %0, 2.000000e+00
%52 = fdiv double %50, %51
%53 = fmul double %2, 2.000000e+00
%54 = fdiv double %53, %50
br label %63
55: ; preds = %46
%56 = fcmp olt double %1, 0.000000e+00
br i1 %56, label %57, label %63
57: ; preds = %55
%58 = fsub double %40, %1
%59 = fmul double %0, 2.000000e+00
%60 = fdiv double %58, %59
%61 = fmul double %2, 2.000000e+00
%62 = fdiv double %61, %58
br label %63
63: ; preds = %34, %27, %17, %55, %57, %48, %42, %31, %22, %14
%64 = phi double [ %16, %14 ], [ 0.000000e+00, %22 ], [ %33, %31 ], [ %45, %42 ], [ %54, %48 ], [ %60, %57 ], [ 0.000000e+00, %55 ], [ %19, %17 ], [ -1.000000e+04, %27 ], [ -1.000000e+04, %34 ]
%65 = phi double [ %16, %14 ], [ %24, %22 ], [ %32, %31 ], [ %45, %42 ], [ %52, %48 ], [ %62, %57 ], [ 0.000000e+00, %55 ], [ %19, %17 ], [ -1.000000e+04, %27 ], [ -1.000000e+04, %34 ]
%66 = tail call i32 @fabs(double %65)
%67 = icmp slt i32 %66, 1
%68 = select i1 %67, double 0.000000e+00, double %65
%69 = tail call i32 @fabs(double %64)
%70 = icmp slt i32 %69, 1
%71 = select i1 %70, double 0.000000e+00, double %64
%72 = fcmp ogt double %68, 0.000000e+00
%73 = fcmp ogt double %71, 0.000000e+00
%74 = select i1 %72, i1 %73, i1 false
br i1 %74, label %75, label %77
75: ; preds = %63
%76 = tail call double @Min(double %68, double %71)
br label %79
77: ; preds = %63
%78 = tail call double @Max(double %68, double %71)
br label %79
79: ; preds = %77, %75
%80 = phi double [ %76, %75 ], [ %78, %77 ]
ret double %80
}