float midsql(float (*funk)(float), float aa, float bb, int n) {
  float x, tnm, sum, del, ddel, a, b;
  static float s;
  int it, j;
  b = sqrt(bb - aa);
  a = 0.0;
  if (n == 1) {
    return (s = (b - a) * (2.0 * (0.5 * (a + b)) *
                           (*funk)(aa + (0.5 * (a + b)) * (0.5 * (a + b)))));
  } else {
    for (it = 1, j = 1; j < n - 1; j++)
      it *= 3;
    tnm = it;
    del = (b - a) / (3.0 * tnm);
    ddel = del + del;
    x = a + 0.5 * del;
    sum = 0.0;
    for (j = 1; j <= it; j++) {
      sum += (2.0 * (x) * (*funk)(aa + (x) * (x)));
      x += ddel;
      sum += (2.0 * (x) * (*funk)(aa + (x) * (x)));
      x += del;
    }
    s = (s + (b - a) * sum / tnm) / 3.0;
    return s;
  }
}


x86 assembly (clang, -O0):
<midsql>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
movss  %xmm1,-0x18(%rbp)
mov    %esi,-0x1c(%rbp)
movss  -0x18(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
cmpl   $0x1,-0x1c(%rbp)
jne    1213 <midsql+0x103>
movss  -0x38(%rbp),%xmm0
subss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x34(%rbp),%xmm0
addss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe80(%rip),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xe84(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
addss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xe48(%rip),%xmm0
mulsd  %xmm2,%xmm0
movss  -0x34(%rbp),%xmm2
addss  -0x38(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xe2e(%rip),%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   *%rax
movsd  -0x50(%rbp),%xmm1
movaps %xmm0,%xmm2
movsd  -0x48(%rbp),%xmm0
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2e23(%rip)
movss  %xmm0,-0x4(%rbp)
jmp    1405 <midsql+0x2f5>
movl   $0x1,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1247 <midsql+0x137>
imul   $0x3,-0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1221 <midsql+0x111>
cvtsi2ssl -0x3c(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x38(%rbp),%xmm0
subss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x24(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd98(%rip),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd56(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     13bc <midsql+0x2ac>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd29(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movss  -0x14(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  -0x20(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   *%rax
movaps %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
cvtss2sd %xmm1,%xmm2
movss  -0x28(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x30(%rbp),%xmm0
addss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcbd(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  -0x14(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  -0x20(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
call   *%rax
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
cvtss2sd %xmm1,%xmm2
movss  -0x28(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    12ca <midsql+0x1ba>
movss  0x2c68(%rip),%xmm0
movss  -0x38(%rbp),%xmm1
subss  -0x34(%rbp),%xmm1
mulss  -0x28(%rbp),%xmm1
divss  -0x24(%rbp),%xmm1
addss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc20(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2c34(%rip)
movss  0x2c2c(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<midsql>:
push   %rbp
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %esi,%r14d
movaps %xmm0,%xmm4
mov    %rdi,%rbx
subss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm1
movss  %xmm4,0xc(%rsp)
jb     119a <midsql+0x8a>
xorps  %xmm0,%xmm0
sqrtss %xmm1,%xmm0
cmp    $0x1,%r14d
je     11ae <midsql+0x9e>
mov    $0x1,%ebp
mov    $0x1,%edx
cmp    $0x3,%r14d
jl     12d8 <midsql+0x1c8>
lea    -0x2(%r14),%ecx
mov    $0x1,%eax
mov    $0x1,%edx
cmp    $0x8,%ecx
jb     12c0 <midsql+0x1b0>
mov    %ecx,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%edi
mov    %edi,%esi
shr    $0x3,%esi
add    $0x1,%esi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x38,%edi
jae    120b <midsql+0xfb>
movdqa 0xe6f(%rip),%xmm5
movdqa %xmm5,%xmm1
jmp    126b <midsql+0x15b>
movaps %xmm1,%xmm0
call   1030 <sqrtf@plt>
movss  0xc(%rsp),%xmm4
cmp    $0x1,%r14d
jne    1140 <midsql+0x30>
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
movsd  %xmm1,(%rsp)
xorps  %xmm1,%xmm1
addss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mulsd  0xe58(%rip),%xmm0
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   *%rbx
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  (%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
jmp    1427 <midsql+0x317>
and    $0xfffffff8,%esi
movdqa 0xdea(%rip),%xmm5
movdqa 0xdf2(%rip),%xmm2
movdqa %xmm5,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
pshufd $0xf5,%xmm5,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm5
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm1
add    $0xfffffff8,%esi
jne    1230 <midsql+0x120>
test   %edx,%edx
je     128d <midsql+0x17d>
nop
movdqa %xmm5,%xmm2
paddd  %xmm5,%xmm2
paddd  %xmm2,%xmm5
movdqa %xmm1,%xmm2
paddd  %xmm1,%xmm2
paddd  %xmm2,%xmm1
add    $0xffffffff,%edx
jne    1270 <midsql+0x160>
pshufd $0xf5,%xmm5,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm2,%xmm3
pmuludq %xmm5,%xmm1
pshufd $0xee,%xmm1,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xaa,%xmm3,%xmm1
pmuludq %xmm3,%xmm1
pmuludq %xmm2,%xmm1
movd   %xmm1,%edx
cmp    %eax,%ecx
je     12d8 <midsql+0x1c8>
or     $0x1,%eax
not    %eax
add    %r14d,%eax
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rdx,%rdx,2),%edx
add    $0xffffffff,%eax
jne    12d0 <midsql+0x1c0>
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
movss  %xmm1,0x20(%rsp)
xorps  %xmm2,%xmm2
cvtss2sd %xmm1,%xmm2
mulsd  0xd2c(%rip),%xmm2
movss  %xmm0,0x24(%rsp)
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
divsd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movaps %xmm0,%xmm1
addss  %xmm0,%xmm1
movss  %xmm1,0x28(%rsp)
movss  %xmm0,0x2c(%rsp)
cvtss2sd %xmm0,%xmm0
mulsd  0xcfd(%rip),%xmm0
xorps  %xmm1,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
cmp    $0x2,%edx
cmovae %edx,%ebp
xorps  %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  %xmm1,0x18(%rsp)
movss  %xmm0,(%rsp)
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x10(%rsp)
movss  (%rsp),%xmm0
mulss  %xmm0,%xmm0
addss  %xmm4,%xmm0
call   *%rbx
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
movss  0x18(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x10(%rsp)
movss  (%rsp),%xmm0
addss  0x28(%rsp),%xmm0
movss  %xmm0,(%rsp)
movss  (%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
movss  (%rsp),%xmm0
mulss  %xmm0,%xmm0
addss  0xc(%rsp),%xmm0
call   *%rbx
movss  0xc(%rsp),%xmm4
cvtss2sd %xmm0,%xmm0
mulsd  0x18(%rsp),%xmm0
movss  0x10(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm0,%xmm1
movss  (%rsp),%xmm0
cvtsd2ss %xmm1,%xmm1
addss  0x2c(%rsp),%xmm0
add    $0xffffffff,%ebp
jne    1350 <midsql+0x240>
movss  0x24(%rsp),%xmm0
mulss  %xmm1,%xmm0
divss  0x20(%rsp),%xmm0
addss  0x2c0d(%rip),%xmm0
divss  0xc09(%rip),%xmm0
movss  %xmm0,0x2bfd(%rip)
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
@midsql.s = internal unnamed_addr global float 0.000000e+00
define float @midsql(float (float)* nocapture %0, float %1, float %2, i32 %3) {
%5 = fsub float %2, %1
%6 = tail call float @sqrtf(float %5)
%7 = icmp eq i32 %3, 1
br i1 %7, label %55, label %8
8: ; preds = %4
%9 = add i32 %3, -1
%10 = icmp sgt i32 %3, 2
br i1 %10, label %11, label %75
11: ; preds = %8
%12 = add i32 %3, -2
%13 = icmp ult i32 %12, 8
br i1 %13, label %52, label %14
14: ; preds = %11
%15 = and i32 %12, -8
%16 = or i32 %15, 1
%17 = add i32 %15, -8
%18 = lshr exact i32 %17, 3
%19 = add nuw nsw i32 %18, 1
%20 = and i32 %19, 7
%21 = icmp ult i32 %17, 56
br i1 %21, label %32, label %22
22: ; preds = %14
%23 = and i32 %19, 1073741816
br label %24
24: ; preds = %24, %22
%25 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %22 ], [ %28, %24 ]
%26 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %22 ], [ %29, %24 ]
%27 = phi i32 [ 0, %22 ], [ %30, %24 ]
%28 = mul <4 x i32> %25, <i32 6561, i32 6561, i32 6561, i32 6561>
%29 = mul <4 x i32> %26, <i32 6561, i32 6561, i32 6561, i32 6561>
%30 = add nuw i32 %27, 8
%31 = icmp eq i32 %30, %23
br i1 %31, label %32, label %24
32: ; preds = %24, %14
%33 = phi <4 x i32> [ undef, %14 ], [ %28, %24 ]
%34 = phi <4 x i32> [ undef, %14 ], [ %29, %24 ]
%35 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %14 ], [ %28, %24 ]
%36 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %14 ], [ %29, %24 ]
%37 = icmp eq i32 %20, 0
br i1 %37, label %46, label %38
38: ; preds = %32, %38
%39 = phi <4 x i32> [ %42, %38 ], [ %35, %32 ]
%40 = phi <4 x i32> [ %43, %38 ], [ %36, %32 ]
%41 = phi i32 [ %44, %38 ], [ 0, %32 ]
%42 = mul <4 x i32> %39, <i32 3, i32 3, i32 3, i32 3>
%43 = mul <4 x i32> %40, <i32 3, i32 3, i32 3, i32 3>
%44 = add i32 %41, 1
%45 = icmp eq i32 %44, %20
br i1 %45, label %46, label %38
46: ; preds = %38, %32
%47 = phi <4 x i32> [ %33, %32 ], [ %42, %38 ]
%48 = phi <4 x i32> [ %34, %32 ], [ %43, %38 ]
%49 = mul <4 x i32> %48, %47
%50 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %49)
%51 = icmp eq i32 %12, %15
br i1 %51, label %75, label %52
52: ; preds = %11, %46
%53 = phi i32 [ 1, %11 ], [ %16, %46 ]
%54 = phi i32 [ 1, %11 ], [ %50, %46 ]
br label %69
55: ; preds = %4
%56 = fpext float %6 to double
%57 = fadd float %6, 0.000000e+00
%58 = fpext float %57 to double
%59 = fmul double %58, 5.000000e-01
%60 = fmul double %59, 2.000000e+00
%61 = fpext float %1 to double
%62 = tail call double @llvm.fmuladd.f64(double %59, double %59, double %61)
%63 = fptrunc double %62 to float
%64 = tail call float %0(float %63)
%65 = fpext float %64 to double
%66 = fmul double %60, %65
%67 = fmul double %66, %56
%68 = fptrunc double %67 to float
br label %118
69: ; preds = %52, %69
%70 = phi i32 [ %73, %69 ], [ %53, %52 ]
%71 = phi i32 [ %72, %69 ], [ %54, %52 ]
%72 = mul nsw i32 %71, 3
%73 = add nuw nsw i32 %70, 1
%74 = icmp eq i32 %73, %9
br i1 %74, label %75, label %69
75: ; preds = %69, %46, %8
%76 = phi i32 [ 1, %8 ], [ %50, %46 ], [ %72, %69 ]
%77 = sitofp i32 %76 to float
%78 = fpext float %6 to double
%79 = fpext float %77 to double
%80 = fmul double %79, 3.000000e+00
%81 = fdiv double %78, %80
%82 = fptrunc double %81 to float
%83 = fadd float %82, %82
%84 = fpext float %82 to double
%85 = tail call double @llvm.fmuladd.f64(double %84, double 5.000000e-01, double 0.000000e+00)
%86 = fptrunc double %85 to float
%87 = call i32 @llvm.umax.i32(i32 %76, i32 1)
br label %88
88: ; preds = %75, %88
%89 = phi i32 [ %110, %88 ], [ 1, %75 ]
%90 = phi float [ %109, %88 ], [ %86, %75 ]
%91 = phi float [ %108, %88 ], [ 0.000000e+00, %75 ]
%92 = fpext float %90 to double
%93 = fmul double %92, 2.000000e+00
%94 = tail call float @llvm.fmuladd.f32(float %90, float %90, float %1)
%95 = tail call float %0(float %94)
%96 = fpext float %95 to double
%97 = fpext float %91 to double
%98 = tail call double @llvm.fmuladd.f64(double %93, double %96, double %97)
%99 = fptrunc double %98 to float
%100 = fadd float %83, %90
%101 = fpext float %100 to double
%102 = fmul double %101, 2.000000e+00
%103 = tail call float @llvm.fmuladd.f32(float %100, float %100, float %1)
%104 = tail call float %0(float %103)
%105 = fpext float %104 to double
%106 = fpext float %99 to double
%107 = tail call double @llvm.fmuladd.f64(double %102, double %105, double %106)
%108 = fptrunc double %107 to float
%109 = fadd float %100, %82
%110 = add nuw i32 %89, 1
%111 = icmp eq i32 %89, %87
br i1 %111, label %112, label %88
112: ; preds = %88
%113 = load float, float* @midsql.s
%114 = fmul float %6, %108
%115 = fdiv float %114, %77
%116 = fadd float %115, %113
%117 = fdiv float %116, 3.000000e+00
br label %118
118: ; preds = %112, %55
%119 = phi float [ %117, %112 ], [ %68, %55 ]
store float %119, float* @midsql.s
ret float %119
}