double Quanto(int fCall, double Ep, double S, double X, double T, double r,
              double rf, double q, double vS, double vE, double Rho) {
  double d1, d2, result;
  assert(((S) == (S)) && (S) >= 0.000001 && (S) <= 1000000000000.0);
  assert(((X) == (X)) && (X) >= 0.000001 && (X) <= 1000000000000.0);
  assert(((T) == (T)) && (T) >= (1.0 / (253.0 * 24.0)) && (T) <= (20.0));
  assert(((r) == (r)) && (r) >= 0.0 && (r) <= 1000.0);
  d1 = (log(S / X) + (rf - q - Rho * vS * vE + ((vS) * (vS)) / 2.0) * T) /
       (vS * sqrt(T));
  d2 = d1 - vS * sqrt(T);
  if (fCall)
    result = Ep * (S * exp((rf - r - q - Rho * vS * vE) * T) * cnd(d1) -
                   X * exp(-r * T) * cnd(d2));
  else
    result = Ep * (X * exp(-r * T) * cnd(-d2) -
                   S * exp((rf - r - q - Rho * vS * vE) * T) * cnd(-d1));
  assert(((result) == (result)));
  return result;
}


x86 assembly (clang, -O0):
<Quanto>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %edi,-0x4(%rbp)
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)
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x18(%rbp),%xmm0
mov    %al,-0x61(%rbp)
jne    11dc <Quanto+0x8c>
jp     11dc <Quanto+0x8c>
movsd  -0x18(%rbp),%xmm0
xor    %eax,%eax
movsd  0xe44(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x61(%rbp)
jb     11dc <Quanto+0x8c>
movsd  0xe37(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
setae  %al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1030 <assert@plt>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x20(%rbp),%xmm0
mov    %al,-0x62(%rbp)
jne    1235 <Quanto+0xe5>
jp     1235 <Quanto+0xe5>
movsd  -0x20(%rbp),%xmm0
xor    %eax,%eax
movsd  0xdeb(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x62(%rbp)
jb     1235 <Quanto+0xe5>
movsd  0xdde(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
setae  %al
mov    %al,-0x62(%rbp)
mov    -0x62(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1030 <assert@plt>
movsd  -0x28(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x28(%rbp),%xmm0
mov    %al,-0x63(%rbp)
jne    128e <Quanto+0x13e>
jp     128e <Quanto+0x13e>
movsd  -0x28(%rbp),%xmm0
xor    %eax,%eax
movsd  0xda2(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x63(%rbp)
jb     128e <Quanto+0x13e>
movsd  0xd95(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
setae  %al
mov    %al,-0x63(%rbp)
mov    -0x63(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1030 <assert@plt>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x30(%rbp),%xmm0
mov    %al,-0x64(%rbp)
jne    12e2 <Quanto+0x192>
jp     12e2 <Quanto+0x192>
movsd  -0x30(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x64(%rbp)
jb     12e2 <Quanto+0x192>
movsd  0xd49(%rip),%xmm0
ucomisd -0x30(%rbp),%xmm0
setae  %al
mov    %al,-0x64(%rbp)
mov    -0x64(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1030 <assert@plt>
movsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1050 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm2
subsd  -0x40(%rbp),%xmm2
movsd  0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0x10(%rbp),%xmm3
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  -0x48(%rbp),%xmm2
movsd  0xcdb(%rip),%xmm3
divsd  %xmm3,%xmm2
addsd  %xmm2,%xmm0
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  -0x88(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x80(%rbp),%xmm0
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x28(%rbp),%xmm0
call   1070 <sqrt@plt>
movsd  -0x78(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cmpl   $0x0,-0x4(%rbp)
je     152f <Quanto+0x3df>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x38(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movsd  0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm4
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1693 <Quanto+0x543>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
subsd  -0x40(%rbp),%xmm1
movsd  0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0x10(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm3
ff
movsd  -0xc0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm4
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
sete   %al
setnp  %cl
and    %cl,%al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1030 <assert@plt>
movsd  -0x60(%rbp),%xmm0
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Quanto>:
push   %rbx
sub    $0x80,%rsp
movsd  %xmm7,(%rsp)
movsd  %xmm6,0x18(%rsp)
movsd  %xmm5,0x20(%rsp)
movaps %xmm4,0x40(%rsp)
movsd  %xmm3,0x8(%rsp)
movsd  %xmm2,0x10(%rsp)
movsd  %xmm0,0x68(%rsp)
mov    %edi,%ebx
movsd  %xmm1,0x28(%rsp)
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xe69(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xe64(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1030 <assert@plt>
movsd  0x10(%rsp),%xmm0
ucomisd %xmm0,%xmm0
setnp  %al
ucomisd 0xe34(%rip),%xmm0
setae  %cl
and    %al,%cl
movsd  0xe2f(%rip),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1030 <assert@plt>
movsd  0x8(%rsp),%xmm1
ucomisd %xmm1,%xmm1
setnp  %al
ucomisd 0xe0f(%rip),%xmm1
setae  %cl
and    %al,%cl
movsd  0xe0a(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    %cl,%al
movzbl %al,%edi
xor    %eax,%eax
call   1030 <assert@plt>
xorpd  %xmm0,%xmm0
movapd 0x40(%rsp),%xmm1
ucomisd %xmm0,%xmm1
setae  %al
movsd  0xde6(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %cl
and    %al,%cl
movzbl %cl,%edi
xor    %eax,%eax
call   1030 <assert@plt>
movsd  0x28(%rsp),%xmm0
divsd  0x10(%rsp),%xmm0
call   1050 <log@plt>
movsd  (%rsp),%xmm3
movsd  0x8(%rsp),%xmm2
movsd  0x20(%rsp),%xmm1
subsd  0x18(%rsp),%xmm1
movsd  0x98(%rsp),%xmm4
xorpd  0xdaa(%rip),%xmm4
mulsd  %xmm3,%xmm4
mulsd  0x90(%rsp),%xmm4
movapd %xmm4,0x70(%rsp)
addsd  %xmm4,%xmm1
movapd %xmm3,%xmm4
mulsd  %xmm3,%xmm4
mulsd  0xd7b(%rip),%xmm4
addsd  %xmm1,%xmm4
xorpd  %xmm1,%xmm1
mulsd  %xmm2,%xmm4
addsd  %xmm0,%xmm4
sqrtsd %xmm2,%xmm5
ucomisd %xmm1,%xmm2
movapd %xmm5,%xmm0
jae    12fb <Quanto+0x1ab>
movapd %xmm2,%xmm0
movapd %xmm4,0x30(%rsp)
movsd  %xmm5,0x50(%rsp)
call   1070 <sqrt@plt>
movsd  0x50(%rsp),%xmm5
xorpd  %xmm1,%xmm1
movapd 0x30(%rsp),%xmm4
movsd  (%rsp),%xmm3
movsd  0x8(%rsp),%xmm2
mulsd  %xmm3,%xmm0
divsd  %xmm0,%xmm4
ucomisd %xmm1,%xmm2
movapd %xmm4,0x30(%rsp)
jae    132d <Quanto+0x1dd>
movapd %xmm2,%xmm0
call   1070 <sqrt@plt>
movapd 0x30(%rsp),%xmm4
movsd  (%rsp),%xmm3
movsd  0x8(%rsp),%xmm2
movapd %xmm0,%xmm5
mulsd  %xmm5,%xmm3
subsd  %xmm3,%xmm4
movapd %xmm4,0x50(%rsp)
test   %ebx,%ebx
je     13d3 <Quanto+0x283>
movsd  0x20(%rsp),%xmm1
subsd  0x40(%rsp),%xmm1
subsd  0x18(%rsp),%xmm1
movapd 0x70(%rsp),%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm2,%xmm0
call   1040 <exp@plt>
mulsd  0x28(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movaps 0x30(%rsp),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  (%rsp),%xmm0
movsd  %xmm0,(%rsp)
movapd 0x40(%rsp),%xmm0
xorpd  0xc92(%rip),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movaps 0x50(%rsp),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
jmp    146e <Quanto+0x31e>
movapd 0x40(%rsp),%xmm0
xorpd  0xc4f(%rip),%xmm0
mulsd  %xmm2,%xmm0
call   1040 <exp@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x50(%rsp),%xmm0
xorps  0xc2e(%rip),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x20(%rsp),%xmm1
subsd  0x40(%rsp),%xmm1
subsd  0x18(%rsp),%xmm1
movapd 0x70(%rsp),%xmm0
addsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,0x8(%rsp)
movaps 0x30(%rsp),%xmm0
xorps  0xbdc(%rip),%xmm0
mov    $0x1,%al
call   1060 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  (%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0x68(%rsp),%xmm0
movsd  %xmm0,(%rsp)
xor    %edi,%edi
ucomisd %xmm0,%xmm0
setnp  %dil
xor    %eax,%eax
call   1030 <assert@plt>
movsd  (%rsp),%xmm0
add    $0x80,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
define double @Quanto(i32 %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %8, double %9, double %10) {
%12 = fcmp ord double %2, 0.000000e+00
%13 = fcmp oge double %2, 0x3EB0C6F7A0B5ED8D
%14 = and i1 %12, %13
%15 = fcmp ole double %2, 1.000000e+12
%16 = and i1 %15, %14
%17 = zext i1 %16 to i32
%18 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %17)
%19 = fcmp ord double %3, 0.000000e+00
%20 = fcmp oge double %3, 0x3EB0C6F7A0B5ED8D
%21 = and i1 %19, %20
%22 = fcmp ole double %3, 1.000000e+12
%23 = and i1 %22, %21
%24 = zext i1 %23 to i32
%25 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %24)
%26 = fcmp ord double %4, 0.000000e+00
%27 = fcmp oge double %4, 0x3F2596179C29D2CE
%28 = and i1 %26, %27
%29 = fcmp ole double %4, 2.000000e+01
%30 = and i1 %29, %28
%31 = zext i1 %30 to i32
%32 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %31)
%33 = fcmp oge double %5, 0.000000e+00
%34 = fcmp ole double %5, 1.000000e+03
%35 = and i1 %33, %34
%36 = zext i1 %35 to i32
%37 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %36)
%38 = fdiv double %2, %3
%39 = tail call double @log(double %38)
%40 = fsub double %6, %7
%41 = fneg double %10
%42 = fmul double %41, %8
%43 = tail call double @llvm.fmuladd.f64(double %42, double %9, double %40)
%44 = fmul double %8, %8
%45 = fmul double %44, 5.000000e-01
%46 = fadd double %45, %43
%47 = tail call double @llvm.fmuladd.f64(double %46, double %4, double %39)
%48 = tail call double @sqrt(double %4)
%49 = fmul double %48, %8
%50 = fdiv double %47, %49
%51 = tail call double @sqrt(double %4)
%52 = fneg double %8
%53 = tail call double @llvm.fmuladd.f64(double %52, double %51, double %50)
%54 = icmp eq i32 %0, 0
br i1 %54, label %73, label %55
55: ; preds = %11
%56 = fsub double %6, %5
%57 = fsub double %56, %7
%58 = tail call double @llvm.fmuladd.f64(double %42, double %9, double %57)
%59 = fmul double %58, %4
%60 = tail call double @exp(double %59)
%61 = fmul double %60, %2
%62 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %50)
%63 = sitofp i32 %62 to double
%64 = fneg double %5
%65 = fmul double %64, %4
%66 = tail call double @exp(double %65)
%67 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %53)
%68 = sitofp i32 %67 to double
%69 = fneg double %66
%70 = fmul double %69, %3
%71 = fmul double %70, %68
%72 = tail call double @llvm.fmuladd.f64(double %61, double %63, double %71)
br label %93
73: ; preds = %11
%74 = fneg double %5
%75 = fmul double %74, %4
%76 = tail call double @exp(double %75)
%77 = fmul double %76, %3
%78 = fneg double %53
%79 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %78)
%80 = sitofp i32 %79 to double
%81 = fsub double %6, %5
%82 = fsub double %81, %7
%83 = tail call double @llvm.fmuladd.f64(double %42, double %9, double %82)
%84 = fmul double %83, %4
%85 = tail call double @exp(double %84)
%86 = fneg double %50
%87 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %86)
%88 = sitofp i32 %87 to double
%89 = fneg double %85
%90 = fmul double %89, %2
%91 = fmul double %90, %88
%92 = tail call double @llvm.fmuladd.f64(double %77, double %80, double %91)
br label %93
93: ; preds = %73, %55
%94 = phi double [ %72, %55 ], [ %92, %73 ]
%95 = fmul double %94, %1
%96 = fcmp ord double %95, 0.000000e+00
%97 = zext i1 %96 to i32
%98 = tail call i32 (i32, ...) bitcast (i32 (...)* @assert to i32 (i32, ...)*)(i32 %97)
ret double %95
}