#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 fabs(double);
double avg_dist_interval(int set1_low, int set1_span, int set2_low,
                         int set2_span) {
  double set1_high;
  double set1_avg;
  double set2_high;
  double set2_avg;
  double val;
  val = 0;
  set1_high = set1_low + set1_span - 1;
  set1_avg = .5 * (set1_high + set1_low);
  set2_high = set2_low + set2_span - 1;
  set2_avg = .5 * (set2_high + set2_low);
  if (set1_low > set2_high || set2_low > set1_high) {
    val = fabs(set1_avg - set2_avg);
  } else {
    if (set1_high > set2_high) {
      val += .5 * (set2_high - set2_low + 1) * (set1_high - set2_high) *
             (set1_high - set2_low + 1);
      set1_high = set2_high;
    } else if (set2_high > set1_high) {
      val += .5 * (set1_high - set1_low + 1) * (set2_high - set1_high) *
             (set2_high - set1_low + 1);
      set2_high = set1_high;
    }
    if (set1_low < set2_low) {
      val += .5 * (set2_high - set2_low + 1) * (set2_low - set1_low) *
             (set2_high - set1_low + 1);
      set1_low = set2_low;
    } else if (set2_low < set1_low) {
      val += .5 * (set1_high - set1_low + 1) * (set1_low - set2_low) *
             (set1_high - set2_low + 1);
      set2_low = set1_low;
    }
    val += (set1_high - set1_low) * (set1_high - set1_low + 1) *
           (set1_high - set1_low + 2) / 3.0;
    val /= set1_span * set2_span;
  }
  return (val);
}


x86 assembly (clang, -O0):
<avg_dist_interval>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%eax
add    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm0
addsd  %xmm0,%xmm1
movsd  0xec0(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0xc(%rbp),%eax
add    -0x10(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0xc(%rbp),%xmm0
addsd  %xmm0,%xmm1
movsd  0xe8f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvtsi2sdl -0x4(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
ja     119a <avg_dist_interval+0x9a>
cvtsi2sdl -0xc(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    11b9 <avg_dist_interval+0xb9>
movsd  -0x20(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movaps 0xe75(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    141e <avg_dist_interval+0x31e>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1238 <avg_dist_interval+0x138>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0xc(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe29(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xe15(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
subsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
cvtsi2sdl -0xc(%rbp),%xmm1
subsd  %xmm1,%xmm2
movsd  0xdf5(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    12b7 <avg_dist_interval+0x1b7>
movsd  -0x28(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    12b2 <avg_dist_interval+0x1b2>
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xdaa(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xd96(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
cvtsi2sdl -0x4(%rbp),%xmm1
subsd  %xmm1,%xmm2
movsd  0xd76(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    12b7 <avg_dist_interval+0x1b7>
mov    -0x4(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    132e <avg_dist_interval+0x22e>
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0xc(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xd2f(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xd1b(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
cvtsi2sdl -0x4(%rbp),%xmm1
subsd  %xmm1,%xmm2
movsd  0xcfb(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    13a5 <avg_dist_interval+0x2a5>
mov    -0xc(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13a0 <avg_dist_interval+0x2a0>
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xcb8(%rip),%xmm0
addsd  %xmm0,%xmm1
movsd  0xca4(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
cvtsi2sdl -0xc(%rbp),%xmm1
subsd  %xmm1,%xmm2
movsd  0xc84(%rip),%xmm1
addsd  %xmm1,%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
jmp    13a5 <avg_dist_interval+0x2a5>
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm2
subsd  %xmm2,%xmm1
movsd  0xc3f(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x4(%rbp),%xmm2
subsd  %xmm2,%xmm1
movsd  0xc31(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc19(%rip),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%eax
imul   -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x38(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<avg_dist_interval>:
movd   %edx,%xmm0
movd   %edi,%xmm1
punpckldq %xmm0,%xmm1
movd   %ecx,%xmm0
movd   %esi,%xmm2
punpckldq %xmm0,%xmm2
paddd  %xmm1,%xmm2
pcmpeqd %xmm0,%xmm0
paddd  %xmm2,%xmm0
cvtdq2pd %xmm0,%xmm0
cvtdq2pd %xmm1,%xmm1
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
ucomisd %xmm3,%xmm1
ja     1190 <avg_dist_interval+0x90>
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
ucomisd %xmm0,%xmm2
ja     1190 <avg_dist_interval+0x90>
ucomisd %xmm3,%xmm0
jbe    11b5 <avg_dist_interval+0xb5>
movapd %xmm0,%xmm4
subsd  %xmm3,%xmm4
movapd %xmm3,%xmm5
subsd  %xmm2,%xmm5
movsd  0xe9a(%rip),%xmm6
addsd  %xmm6,%xmm5
mulsd  0xe96(%rip),%xmm5
mulsd  %xmm4,%xmm5
subsd  %xmm2,%xmm0
addsd  %xmm6,%xmm0
mulsd  %xmm5,%xmm0
xorpd  %xmm4,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm3,%xmm0
jmp    11ff <avg_dist_interval+0xff>
addpd  %xmm0,%xmm1
mulpd  0xe84(%rip),%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
subsd  %xmm0,%xmm1
andpd  0xe80(%rip),%xmm1
movapd %xmm1,%xmm0
ret
xorpd  %xmm4,%xmm4
ucomisd %xmm0,%xmm3
jbe    11ff <avg_dist_interval+0xff>
movapd %xmm0,%xmm4
subsd  %xmm1,%xmm4
movsd  0xe31(%rip),%xmm5
addsd  %xmm5,%xmm4
mulsd  0xe2d(%rip),%xmm4
movapd %xmm3,%xmm6
subsd  %xmm0,%xmm6
mulsd  %xmm4,%xmm6
subsd  %xmm1,%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm6,%xmm3
xorpd  %xmm4,%xmm4
addsd  %xmm3,%xmm4
movapd %xmm0,%xmm3
mov    %edi,%eax
sub    %edx,%eax
jge    1241 <avg_dist_interval+0x141>
movapd %xmm3,%xmm5
subsd  %xmm2,%xmm5
movsd  0xdeb(%rip),%xmm6
addsd  %xmm6,%xmm5
mulsd  0xde7(%rip),%xmm5
sub    %edi,%edx
cvtsi2sd %edx,%xmm7
mulsd  %xmm5,%xmm7
subsd  %xmm1,%xmm3
addsd  %xmm6,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm3,%xmm4
movapd %xmm2,%xmm1
jmp    127e <avg_dist_interval+0x17e>
jle    127e <avg_dist_interval+0x17e>
movapd %xmm0,%xmm3
subsd  %xmm1,%xmm3
movsd  0xdad(%rip),%xmm5
addsd  %xmm5,%xmm3
mulsd  0xda9(%rip),%xmm3
xorps  %xmm6,%xmm6
cvtsi2sd %eax,%xmm6
mulsd  %xmm3,%xmm6
movapd %xmm0,%xmm3
subsd  %xmm2,%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm6,%xmm3
addsd  %xmm3,%xmm4
subsd  %xmm1,%xmm0
movsd  0xd76(%rip),%xmm1
addsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  0xd76(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  0xd72(%rip),%xmm0
addsd  %xmm4,%xmm0
imul   %esi,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
divsd  %xmm1,%xmm0
ret

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

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