int f_interpolation_quadratic(double f_a, double df_a, double f_b, double a,
                              double b, double a1, double b1, double *alpha) {
  double za1, zb1, root;
  double endptmin;
  za1 =
      f_a + df_a * (a1 - a) +
      (f_b - f_a - (b - a) * df_a) * (a1 - a) * (a1 - a) / ((b - a) * (b - a));
  zb1 =
      f_a + df_a * (b1 - a) +
      (f_b - f_a - (b - a) * df_a) * (b1 - a) * (b1 - a) / ((b - a) * (b - a));
  if (za1 < zb1)
    endptmin = a1;
  else
    endptmin = b1;
  root = a - (b - a) * (b - a) * df_a / (2 * (f_b - f_a - (b - a) * df_a));
  if (f_b - f_a - (b - a) * df_a < 0) {
    if (a1 < b1) {
      if (a1 <= root && root <= b1)
        *alpha = endptmin;
      if (root < a1)
        *alpha = b1;
      if (root > b1)
        *alpha = a1;
    } else {
      if (b1 <= root && root <= a1)
        *alpha = endptmin;
      if (root < b1)
        *alpha = a1;
      if (root > a1)
        *alpha = b1;
    }
  } else {
    if (a1 < b1) {
      if (a1 <= root && root <= b1)
        *alpha = root;
      if (root < a1)
        *alpha = a1;
      if (root > b1)
        *alpha = b1;
    } else {
      if (b1 <= root && root <= a1)
        *alpha = root;
      if (root < b1)
        *alpha = b1;
      if (root > a1)
        *alpha = a1;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<f_interpolation_quadratic>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  %xmm6,-0x38(%rbp)
mov    %rdi,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
subsd  -0x8(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x30(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x30(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
subsd  -0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
subsd  -0x8(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x38(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x38(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
subsd  -0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1278 <f_interpolation_quadratic+0x178>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1282 <f_interpolation_quadratic+0x182>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
subsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
subsd  -0x8(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
subsd  -0x20(%rbp),%xmm3
movsd  -0x10(%rbp),%xmm4
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  0xd1c(%rip),%xmm2
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x8(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x20(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1443 <f_interpolation_quadratic+0x343>
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13c6 <f_interpolation_quadratic+0x2c6>
movsd  -0x30(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1383 <f_interpolation_quadratic+0x283>
movsd  -0x58(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1383 <f_interpolation_quadratic+0x283>
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13a4 <f_interpolation_quadratic+0x2a4>
movsd  -0x38(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    13c1 <f_interpolation_quadratic+0x2c1>
movsd  -0x30(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    143e <f_interpolation_quadratic+0x33e>
movsd  -0x38(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     13fb <f_interpolation_quadratic+0x2fb>
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     13fb <f_interpolation_quadratic+0x2fb>
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    141c <f_interpolation_quadratic+0x31c>
movsd  -0x30(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    1439 <f_interpolation_quadratic+0x339>
movsd  -0x38(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    143e <f_interpolation_quadratic+0x33e>
jmp    154c <f_interpolation_quadratic+0x44c>
movsd  -0x30(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    14cf <f_interpolation_quadratic+0x3cf>
movsd  -0x30(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     148c <f_interpolation_quadratic+0x38c>
movsd  -0x58(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     148c <f_interpolation_quadratic+0x38c>
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    14ad <f_interpolation_quadratic+0x3ad>
movsd  -0x30(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    14ca <f_interpolation_quadratic+0x3ca>
movsd  -0x38(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1547 <f_interpolation_quadratic+0x447>
movsd  -0x38(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1504 <f_interpolation_quadratic+0x404>
movsd  -0x58(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1504 <f_interpolation_quadratic+0x404>
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1525 <f_interpolation_quadratic+0x425>
movsd  -0x38(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jbe    1542 <f_interpolation_quadratic+0x442>
movsd  -0x30(%rbp),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1547 <f_interpolation_quadratic+0x447>
jmp    154c <f_interpolation_quadratic+0x44c>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<f_interpolation_quadratic>:
subsd  %xmm0,%xmm2
subsd  %xmm3,%xmm4
movapd %xmm4,%xmm7
mulsd  %xmm1,%xmm7
subsd  %xmm7,%xmm2
mulsd  %xmm4,%xmm4
movapd %xmm4,%xmm9
mulsd  %xmm1,%xmm9
movapd %xmm2,%xmm7
addsd  %xmm2,%xmm7
divsd  %xmm7,%xmm9
movapd %xmm3,%xmm8
subsd  %xmm9,%xmm8
xorpd  %xmm7,%xmm7
ucomisd %xmm2,%xmm7
jbe    11d3 <f_interpolation_quadratic+0xd3>
movapd %xmm5,%xmm7
unpcklpd %xmm6,%xmm7
unpcklpd %xmm3,%xmm3
subpd  %xmm3,%xmm7
unpcklpd %xmm1,%xmm1
unpcklpd %xmm0,%xmm0
mulpd  %xmm7,%xmm1
addpd  %xmm0,%xmm1
unpcklpd %xmm2,%xmm2
mulpd  %xmm7,%xmm2
mulpd  %xmm7,%xmm2
unpcklpd %xmm4,%xmm4
divpd  %xmm4,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm2,%xmm0
unpckhpd %xmm2,%xmm0
cmpltsd %xmm0,%xmm2
movapd %xmm2,%xmm0
andpd  %xmm5,%xmm0
andnpd %xmm6,%xmm2
orpd   %xmm0,%xmm2
ucomisd %xmm5,%xmm6
jbe    121f <f_interpolation_quadratic+0x11f>
ucomisd %xmm5,%xmm8
setae  %al
ucomisd %xmm8,%xmm6
setae  %cl
ucomisd %xmm6,%xmm8
ja     12c2 <f_interpolation_quadratic+0x1c2>
ucomisd %xmm8,%xmm5
ja     12c2 <f_interpolation_quadratic+0x1c2>
and    %cl,%al
jne    12c2 <f_interpolation_quadratic+0x1c2>
xor    %eax,%eax
ret
ucomisd %xmm5,%xmm6
jbe    1277 <f_interpolation_quadratic+0x177>
ucomisd %xmm5,%xmm8
setae  %al
ucomisd %xmm8,%xmm6
setae  %cl
ucomisd %xmm6,%xmm8
ja     11ff <f_interpolation_quadratic+0xff>
ucomisd %xmm8,%xmm5
ja     11ff <f_interpolation_quadratic+0xff>
and    %cl,%al
je     11d0 <f_interpolation_quadratic+0xd0>
maxsd  %xmm8,%xmm5
movapd %xmm6,%xmm0
cmpltsd %xmm8,%xmm0
movapd %xmm0,%xmm1
andnpd %xmm5,%xmm1
andpd  %xmm6,%xmm0
jmp    12b8 <f_interpolation_quadratic+0x1b8>
ucomisd %xmm6,%xmm8
setae  %al
ucomisd %xmm8,%xmm5
setae  %cl
ucomisd %xmm5,%xmm8
ja     1241 <f_interpolation_quadratic+0x141>
ucomisd %xmm8,%xmm6
ja     1241 <f_interpolation_quadratic+0x141>
and    %cl,%al
je     11d0 <f_interpolation_quadratic+0xd0>
movapd %xmm8,%xmm0
cmpltsd %xmm6,%xmm0
movapd %xmm0,%xmm1
andpd  %xmm5,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
cmpltsd %xmm8,%xmm5
movapd %xmm5,%xmm1
andnpd %xmm0,%xmm1
andpd  %xmm6,%xmm5
orpd   %xmm1,%xmm5
movapd %xmm5,%xmm6
jmp    12f2 <f_interpolation_quadratic+0x1f2>
ucomisd %xmm6,%xmm8
setae  %al
ucomisd %xmm8,%xmm5
setae  %cl
ucomisd %xmm5,%xmm8
ja     129d <f_interpolation_quadratic+0x19d>
ucomisd %xmm8,%xmm6
ja     129d <f_interpolation_quadratic+0x19d>
and    %cl,%al
je     11d0 <f_interpolation_quadratic+0xd0>
maxsd  %xmm8,%xmm6
movapd %xmm5,%xmm0
cmpltsd %xmm8,%xmm0
movapd %xmm0,%xmm1
andnpd %xmm6,%xmm1
andpd  %xmm5,%xmm0
orpd   %xmm1,%xmm0
movapd %xmm0,%xmm6
jmp    12f2 <f_interpolation_quadratic+0x1f2>
movapd %xmm8,%xmm0
cmpltsd %xmm5,%xmm0
movapd %xmm0,%xmm1
andpd  %xmm6,%xmm1
andnpd %xmm2,%xmm0
orpd   %xmm1,%xmm0
cmpltsd %xmm8,%xmm6
movapd %xmm6,%xmm1
andnpd %xmm0,%xmm1
andpd  %xmm5,%xmm6
orpd   %xmm1,%xmm6
movsd  %xmm6,(%rdi)
xor    %eax,%eax
ret

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

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