float midsqu(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)(bb - (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)(bb - (x) * (x)));
      x += ddel;
      sum += (2.0 * (x) * (*funk)(bb - (x) * (x)));
      x += del;
    }
    s = (s + (b - a) * sum / tnm) / 3.0;
    return s;
  }
}


x86 assembly (clang, -O0):
<midsqu>:
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    122a <midsqu+0x11a>
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  -0x18(%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
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
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,0x2e0c(%rip)
movss  %xmm0,-0x4(%rbp)
jmp    1438 <midsqu+0x328>
movl   $0x1,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    125e <midsqu+0x14e>
imul   $0x3,-0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1238 <midsqu+0x128>
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  0xd81(%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  0xd3f(%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     13ef <midsqu+0x2df>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd12(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movss  -0x18(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  -0x20(%rbp),%xmm2
movd   %xmm0,%ecx
xor    $0x80000000,%ecx
movd   %ecx,%xmm0
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  0xc98(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  -0x18(%rbp),%xmm1
movss  -0x20(%rbp),%xmm0
movss  -0x20(%rbp),%xmm2
movd   %xmm0,%ecx
xor    $0x80000000,%ecx
movd   %ecx,%xmm0
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    12e1 <midsqu+0x1d1>
movss  0x2c35(%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  0xbed(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2c01(%rip)
movss  0x2bf9(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<midsqu>:
push   %rbp
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %esi,%r14d
movaps %xmm0,%xmm2
mov    %rdi,%rbx
movss  %xmm1,0xc(%rsp)
movaps %xmm1,%xmm0
subss  %xmm2,%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     113c <midsqu+0x2c>
sqrtss %xmm0,%xmm0
jmp    1141 <midsqu+0x31>
call   1030 <sqrtf@plt>
cmp    $0x1,%r14d
movd   0xc(%rsp),%xmm1
jne    11aa <midsqu+0x9a>
xorps  %xmm2,%xmm2
cvtss2sd %xmm0,%xmm2
movsd  %xmm2,(%rsp)
xorps  %xmm2,%xmm2
addss  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
mulsd  0xeb9(%rip),%xmm0
movapd %xmm0,%xmm2
addsd  %xmm0,%xmm2
movsd  %xmm2,0x10(%rsp)
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm0
subsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
call   *%rbx
cvtss2sd %xmm0,%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  (%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
jmp    140b <midsqu+0x2fb>
mov    $0x1,%ebp
mov    $0x1,%edx
cmp    $0x3,%r14d
jl     12c8 <midsqu+0x1b8>
lea    -0x2(%r14),%ecx
mov    $0x1,%eax
mov    $0x1,%edx
cmp    $0x8,%ecx
jb     12b0 <midsqu+0x1a0>
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    11fd <midsqu+0xed>
movdqa 0xe09(%rip),%xmm4
movdqa %xmm4,%xmm1
jmp    125b <midsqu+0x14b>
and    $0xfffffff8,%esi
movdqa 0xdf8(%rip),%xmm4
movdqa 0xe00(%rip),%xmm2
movdqa %xmm4,%xmm1
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
pshufd $0xf5,%xmm4,%xmm3
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm4
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    1220 <midsqu+0x110>
test   %edx,%edx
je     127d <midsqu+0x16d>
nop
movdqa %xmm4,%xmm2
paddd  %xmm4,%xmm2
paddd  %xmm2,%xmm4
movdqa %xmm1,%xmm2
paddd  %xmm1,%xmm2
paddd  %xmm2,%xmm1
add    $0xffffffff,%edx
jne    1260 <midsqu+0x150>
pshufd $0xf5,%xmm4,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm2,%xmm3
pmuludq %xmm4,%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     12c8 <midsqu+0x1b8>
or     $0x1,%eax
not    %eax
add    %r14d,%eax
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rdx,%rdx,2),%edx
add    $0xffffffff,%eax
jne    12c0 <midsqu+0x1b0>
xorps  %xmm2,%xmm2
cvtsi2ss %edx,%xmm2
movss  %xmm2,0x20(%rsp)
cvtss2sd %xmm2,%xmm2
mulsd  0xd3f(%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  0xd10(%rip),%xmm0
xorps  %xmm1,%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
cmp    $0x2,%edx
cmovae %edx,%ebp
xorps  %xmm1,%xmm1
nop
movss  %xmm1,0x10(%rsp)
movss  %xmm0,(%rsp)
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
movss  (%rsp),%xmm1
mulss  %xmm1,%xmm1
movss  0xc(%rsp),%xmm0
subss  %xmm1,%xmm0
call   *%rbx
cvtss2sd %xmm0,%xmm0
mulsd  0x18(%rsp),%xmm0
movss  0x10(%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),%xmm1
mulss  %xmm1,%xmm1
movss  0xc(%rsp),%xmm0
subss  %xmm1,%xmm0
call   *%rbx
cvtss2sd %xmm0,%xmm0
mulsd  0x18(%rsp),%xmm0
movss  0x10(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm0,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  (%rsp),%xmm0
addss  0x2c(%rsp),%xmm0
add    $0xffffffff,%ebp
jne    1330 <midsqu+0x220>
movss  0x24(%rsp),%xmm0
mulss  %xmm1,%xmm0
divss  0x20(%rsp),%xmm0
addss  0x2c29(%rip),%xmm0
divss  0xc25(%rip),%xmm0
movss  %xmm0,0x2c19(%rip)
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
@midsqu.s = internal unnamed_addr global float 0.000000e+00
define float @midsqu(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 %76
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 %76, label %52
52: ; preds = %11, %46
%53 = phi i32 [ 1, %11 ], [ %16, %46 ]
%54 = phi i32 [ 1, %11 ], [ %50, %46 ]
br label %70
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 %2 to double
%62 = fneg double %59
%63 = tail call double @llvm.fmuladd.f64(double %62, double %59, double %61)
%64 = fptrunc double %63 to float
%65 = tail call float %0(float %64)
%66 = fpext float %65 to double
%67 = fmul double %60, %66
%68 = fmul double %67, %56
%69 = fptrunc double %68 to float
br label %121
70: ; preds = %52, %70
%71 = phi i32 [ %74, %70 ], [ %53, %52 ]
%72 = phi i32 [ %73, %70 ], [ %54, %52 ]
%73 = mul nsw i32 %72, 3
%74 = add nuw nsw i32 %71, 1
%75 = icmp eq i32 %74, %9
br i1 %75, label %76, label %70
76: ; preds = %70, %46, %8
%77 = phi i32 [ 1, %8 ], [ %50, %46 ], [ %73, %70 ]
%78 = sitofp i32 %77 to float
%79 = fpext float %6 to double
%80 = fpext float %78 to double
%81 = fmul double %80, 3.000000e+00
%82 = fdiv double %79, %81
%83 = fptrunc double %82 to float
%84 = fadd float %83, %83
%85 = fpext float %83 to double
%86 = tail call double @llvm.fmuladd.f64(double %85, double 5.000000e-01, double 0.000000e+00)
%87 = fptrunc double %86 to float
%88 = call i32 @llvm.umax.i32(i32 %77, i32 1)
br label %89
89: ; preds = %76, %89
%90 = phi i32 [ %113, %89 ], [ 1, %76 ]
%91 = phi float [ %112, %89 ], [ %87, %76 ]
%92 = phi float [ %111, %89 ], [ 0.000000e+00, %76 ]
%93 = fpext float %91 to double
%94 = fmul double %93, 2.000000e+00
%95 = fneg float %91
%96 = tail call float @llvm.fmuladd.f32(float %95, float %91, float %2)
%97 = tail call float %0(float %96)
%98 = fpext float %97 to double
%99 = fpext float %92 to double
%100 = tail call double @llvm.fmuladd.f64(double %94, double %98, double %99)
%101 = fptrunc double %100 to float
%102 = fadd float %84, %91
%103 = fpext float %102 to double
%104 = fmul double %103, 2.000000e+00
%105 = fneg float %102
%106 = tail call float @llvm.fmuladd.f32(float %105, float %102, float %2)
%107 = tail call float %0(float %106)
%108 = fpext float %107 to double
%109 = fpext float %101 to double
%110 = tail call double @llvm.fmuladd.f64(double %104, double %108, double %109)
%111 = fptrunc double %110 to float
%112 = fadd float %102, %83
%113 = add nuw i32 %90, 1
%114 = icmp eq i32 %90, %88
br i1 %114, label %115, label %89
115: ; preds = %89
%116 = load float, float* @midsqu.s
%117 = fmul float %6, %111
%118 = fdiv float %117, %78
%119 = fadd float %118, %116
%120 = fdiv float %119, 3.000000e+00
br label %121
121: ; preds = %115, %55
%122 = phi float [ %120, %115 ], [ %69, %55 ]
store float %122, float* @midsqu.s
ret float %122
}