#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 brcomp(double *, double *, double *, double *);
double fabs(double);
double bfrac(double *a, double *b, double *x, double *y, double *lambda,
             double *eps) {
  static double bfrac, alpha, an, anp1, beta, bn, bnp1, c, c0, c1, e, n, p, r,
      r0, s, t, w, yp1;
  bfrac = brcomp(a, b, x, y);
  if (bfrac == 0.0e0)
    return bfrac;
  c = 1.0e0 + *lambda;
  c0 = *b / *a;
  c1 = 1.0e0 + 1.0e0 / *a;
  yp1 = *y + 1.0e0;
  n = 0.0e0;
  p = 1.0e0;
  s = *a + 1.0e0;
  an = 0.0e0;
  bn = anp1 = 1.0e0;
  bnp1 = c / c1;
  r = c1 / c;
S10:
  n += 1.0e0;
  t = n / *a;
  w = n * (*b - n) * *x;
  e = *a / s;
  alpha = p * (p + c0) * e * e * (w * *x);
  e = (1.0e0 + t) / (c1 + t + t);
  beta = n + w / s + e * (c + n * yp1);
  p = 1.0e0 + t;
  s += 2.0e0;
  t = alpha * an + beta * anp1;
  an = anp1;
  anp1 = t;
  t = alpha * bn + beta * bnp1;
  bn = bnp1;
  bnp1 = t;
  r0 = r;
  r = anp1 / bnp1;
  if (fabs(r - r0) <= *eps * r)
    goto S20;
  an /= bnp1;
  bn /= bnp1;
  anp1 = r;
  bnp1 = 1.0e0;
  goto S10;
S20:
  bfrac *= r;
  return bfrac;
}


x86 assembly (clang, -O0):
<bfrac>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
call   1030 <brcomp@plt>
movsd  %xmm0,0x2ee3(%rip)
movsd  0x2edb(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    117a <bfrac+0x6a>
jp     117a <bfrac+0x6a>
movsd  0x2ec0(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    156c <bfrac+0x45c>
mov    -0x30(%rbp),%rax
movsd  0xe7a(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,0x2ed6(%rip)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x2ec6(%rip)
mov    -0x10(%rbp),%rax
movsd  0xe4a(%rip),%xmm1
divsd  (%rax),%xmm1
movsd  0xe3e(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2eaa(%rip)
mov    -0x28(%rbp),%rax
movsd  0xe26(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,0x2eda(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2e97(%rip)
movsd  0xe07(%rip),%xmm0
movsd  %xmm0,0x2e8f(%rip)
mov    -0x10(%rbp),%rax
movsd  0xdf3(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,0x2e8f(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2e1c(%rip)
movsd  0xdd4(%rip),%xmm0
movsd  %xmm0,0x2e14(%rip)
movsd  0xdc4(%rip),%xmm0
movsd  %xmm0,0x2e14(%rip)
movsd  0x2e1c(%rip),%xmm0
divsd  0x2e24(%rip),%xmm0
movsd  %xmm0,0x2e04(%rip)
movsd  0x2e14(%rip),%xmm0
divsd  0x2dfc(%rip),%xmm0
movsd  %xmm0,0x2e24(%rip)
movsd  0xd84(%rip),%xmm0
addsd  0x2e04(%rip),%xmm0
movsd  %xmm0,0x2dfc(%rip)
movsd  0x2df4(%rip),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x2e0c(%rip)
movsd  0x2ddc(%rip),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
subsd  0x2dcc(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,0x2de8(%rip)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
divsd  0x2dc8(%rip),%xmm0
movsd  %xmm0,0x2d98(%rip)
movsd  0x2da0(%rip),%xmm0
movsd  0x2d98(%rip),%xmm1
addsd  0x2d70(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x2d74(%rip),%xmm0
mulsd  0x2d6c(%rip),%xmm0
movsd  0x2d9c(%rip),%xmm1
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x2d08(%rip)
movsd  0xcc8(%rip),%xmm0
addsd  0x2d70(%rip),%xmm0
movsd  0x2d30(%rip),%xmm1
addsd  0x2d60(%rip),%xmm1
addsd  0x2d58(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2d1c(%rip)
movsd  0x2d1c(%rip),%xmm1
movsd  0x2d44(%rip),%xmm0
divsd  0x2d2c(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0x2cf8(%rip),%xmm0
movsd  0x2cd8(%rip),%xmm3
movsd  0x2cf0(%rip),%xmm2
movsd  0x2d20(%rip),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2c98(%rip)
movsd  0xc40(%rip),%xmm0
addsd  0x2ce8(%rip),%xmm0
movsd  %xmm0,0x2cc0(%rip)
movsd  0xc30(%rip),%xmm0
addsd  0x2cc8(%rip),%xmm0
movsd  %xmm0,0x2cc0(%rip)
movsd  0x2c48(%rip),%xmm0
movsd  0x2c48(%rip),%xmm2
movsd  0x2c50(%rip),%xmm1
mulsd  0x2c40(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2c98(%rip)
movsd  0x2c28(%rip),%xmm0
movsd  %xmm0,0x2c18(%rip)
movsd  0x2c80(%rip),%xmm0
movsd  %xmm0,0x2c10(%rip)
movsd  0x2bf8(%rip),%xmm0
movsd  0x2c10(%rip),%xmm2
movsd  0x2c00(%rip),%xmm1
mulsd  0x2c08(%rip),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2c48(%rip)
movsd  0x2bf0(%rip),%xmm0
movsd  %xmm0,0x2be0(%rip)
movsd  0x2c30(%rip),%xmm0
movsd  %xmm0,0x2bd8(%rip)
movsd  0x2c08(%rip),%xmm0
movsd  %xmm0,0x2c08(%rip)
movsd  0x2ba8(%rip),%xmm0
divsd  0x2bb8(%rip),%xmm0
movsd  %xmm0,0x2be8(%rip)
movsd  0x2be0(%rip),%xmm1
subsd  0x2be0(%rip),%xmm1
movaps 0xb49(%rip),%xmm0
pand   %xmm0,%xmm1
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  0x2bbd(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     14ea <bfrac+0x3da>
jmp    1547 <bfrac+0x437>
movsd  0x2b6e(%rip),%xmm1
movsd  0x2b46(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2b3a(%rip)
movsd  0x2b52(%rip),%xmm1
movsd  0x2b42(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2b36(%rip)
movsd  0x2b6e(%rip),%xmm0
movsd  %xmm0,0x2b16(%rip)
movsd  0xac6(%rip),%xmm0
movsd  %xmm0,0x2b1e(%rip)
jmp    1274 <bfrac+0x164>
movsd  0x2b49(%rip),%xmm0
mulsd  0x2ad9(%rip),%xmm0
movsd  %xmm0,0x2ad1(%rip)
movsd  0x2ac9(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bfrac>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,%r14
mov    %r8,%rbp
mov    %rcx,%r12
mov    %rdx,%r15
mov    %rsi,%r13
mov    %rdi,%rbx
call   1030 <brcomp@plt>
xorpd  %xmm14,%xmm14
ucomisd %xmm14,%xmm0
jne    1147 <bfrac+0x37>
jnp    130a <bfrac+0x1fa>
movsd  %xmm0,0x8(%rsp)
movsd  0xeaa(%rip),%xmm8
movsd  0x0(%rbp),%xmm1
addsd  %xmm8,%xmm1
movsd  0x0(%r13),%xmm10
movsd  (%rbx),%xmm9
movapd %xmm10,%xmm0
divsd  %xmm9,%xmm0
movapd %xmm8,%xmm11
divsd  %xmm9,%xmm11
addsd  %xmm8,%xmm11
movsd  (%r12),%xmm2
addsd  %xmm8,%xmm2
movsd  %xmm2,0x18(%rsp)
movapd %xmm9,%xmm5
addsd  %xmm8,%xmm5
movapd %xmm1,%xmm3
divsd  %xmm11,%xmm3
movapd %xmm11,%xmm6
movsd  %xmm1,0x20(%rsp)
divsd  %xmm1,%xmm6
movsd  (%r14),%xmm1
movsd  %xmm1,0x10(%rsp)
shufpd $0x2,0xe45(%rip),%xmm3
movsd  (%r15),%xmm13
unpcklpd %xmm0,%xmm10
movsd  0xe23(%rip),%xmm0
movsd  0xe1b(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nop
addsd  %xmm7,%xmm14
movapd %xmm14,%xmm1
unpcklpd %xmm8,%xmm1
movapd %xmm14,%xmm8
divsd  %xmm9,%xmm8
movapd %xmm9,%xmm2
divsd  %xmm5,%xmm2
movapd %xmm13,%xmm15
unpcklpd %xmm2,%xmm15
movapd %xmm10,%xmm2
subpd  %xmm14,%xmm2
movapd %xmm10,%xmm4
addpd  %xmm1,%xmm4
movsd  %xmm2,%xmm4
mulpd  %xmm1,%xmm4
movapd %xmm11,%xmm1
addsd  %xmm8,%xmm1
addsd  %xmm8,%xmm1
addsd  %xmm7,%xmm8
movapd %xmm8,%xmm2
divsd  %xmm1,%xmm2
movapd %xmm14,%xmm1
mulsd  0x18(%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
mulsd  %xmm2,%xmm1
mulpd  %xmm15,%xmm4
mulpd  %xmm4,%xmm15
divsd  %xmm5,%xmm4
addsd  %xmm14,%xmm4
addsd  %xmm4,%xmm1
movapd %xmm15,%xmm12
unpckhpd %xmm15,%xmm12
mulsd  %xmm15,%xmm12
movapd %xmm6,%xmm2
unpcklpd %xmm1,%xmm1
mulpd  %xmm3,%xmm1
unpcklpd %xmm12,%xmm12
mulpd  %xmm0,%xmm12
addpd  %xmm1,%xmm12
movapd %xmm12,%xmm6
unpckhpd %xmm12,%xmm6
divsd  %xmm12,%xmm6
movapd %xmm6,%xmm0
subsd  %xmm2,%xmm0
andpd  0xd57(%rip),%xmm0
movapd %xmm6,%xmm1
mulsd  0x10(%rsp),%xmm1
ucomisd %xmm0,%xmm1
jae    1300 <bfrac+0x1f0>
addsd  0xd27(%rip),%xmm5
unpcklpd %xmm12,%xmm12
divpd  %xmm12,%xmm3
movapd %xmm3,%xmm0
movapd 0xd39(%rip),%xmm3
unpcklpd %xmm6,%xmm3
jmp    11f0 <bfrac+0xe0>
movsd  0x8(%rsp),%xmm0
mulsd  %xmm6,%xmm0
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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