float frame_var_max(float *x, int len) {
  int k, i;
  int hop;
  float *xp;
  float sum, avg;
  float diff;
  float var;
  float var_max;
  int level;
  int bands;
  level = 1;
  bands = (1 << level);
  hop = len >> level;
  var_max = 0.;
  for (k = 0; k < bands; k++) {
    xp = x + k * hop;
    sum = 0.;
    avg = 0.;
    var = 0.;
    for (i = 0; i < hop; i++) {
      float tmp;
      tmp = ((xp[i] / 32768.) > 0 ? (xp[i] / 32768.) : (-(xp[i] / 32768.)));
      sum += tmp;
    }
    avg = sum / hop;
    for (i = 0; i < hop; i++) {
      float tmp;
      tmp = ((xp[i] / 32768.) > 0 ? (xp[i] / 32768.) : (-(xp[i] / 32768.)));
      diff = tmp - avg;
      var += diff * diff;
    }
    var /= hop;
    var_max = ((var_max) > (var) ? (var_max) : (var));
  }
  return var_max;
}


x86 assembly (clang, -O0):
<frame_var_max>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,-0x3c(%rbp)
mov    -0xc(%rbp),%eax
mov    -0x38(%rbp),%ecx
sar    %cl,%eax
mov    %eax,-0x18(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1388 <frame_var_max+0x288>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
imul   -0x18(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    123e <frame_var_max+0x13e>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe5e(%rip),%xmm1
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    11da <frame_var_max+0xda>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe34(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1213 <frame_var_max+0x113>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe0d(%rip),%xmm1
divsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    117d <frame_var_max+0x7d>
movss  -0x24(%rbp),%xmm0
cvtsi2ssl -0x18(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1335 <frame_var_max+0x235>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd83(%rip),%xmm1
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12b5 <frame_var_max+0x1b5>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd59(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    12ee <frame_var_max+0x1ee>
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd32(%rip),%xmm1
divsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movss  -0x30(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1258 <frame_var_max+0x158>
cvtsi2ssl -0x18(%rbp),%xmm1
movss  -0x30(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x34(%rbp),%xmm0
ucomiss -0x30(%rbp),%xmm0
jbe    1366 <frame_var_max+0x266>
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
jmp    1370 <frame_var_max+0x270>
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1139 <frame_var_max+0x39>
movss  -0x34(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<frame_var_max>:
mov    %esi,%edx
sar    %edx
cvtsi2ss %edx,%xmm8
cmp    $0x2,%esi
jl     13d9 <frame_var_max+0x2d9>
cmp    $0x2,%edx
mov    $0x1,%r10d
cmovge %edx,%r10d
mov    %r10,%r9
add    $0xffffffffffffffff,%r9
je     13f6 <frame_var_max+0x2f6>
mov    %r10d,%eax
and    $0x7ffffffe,%eax
xorps  %xmm0,%xmm0
xor    %ecx,%ecx
movsd  0xebf(%rip),%xmm2
movapd 0xec7(%rip),%xmm3
nopl   0x0(%rax)
movss  (%rdi,%rcx,4),%xmm4
cvtss2sd %xmm4,%xmm4
mulsd  %xmm2,%xmm4
movapd %xmm4,%xmm5
xorpd  %xmm3,%xmm5
xorpd  %xmm6,%xmm6
cmpltsd %xmm4,%xmm6
andpd  %xmm6,%xmm4
andnpd %xmm5,%xmm6
orpd   %xmm4,%xmm6
xorps  %xmm4,%xmm4
cvtsd2ss %xmm6,%xmm4
movss  0x4(%rdi,%rcx,4),%xmm5
addss  %xmm0,%xmm4
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,%xmm5
xorpd  %xmm3,%xmm5
xorpd  %xmm6,%xmm6
cmpltsd %xmm0,%xmm6
andpd  %xmm6,%xmm0
andnpd %xmm5,%xmm6
orpd   %xmm0,%xmm6
xorps  %xmm0,%xmm0
cvtsd2ss %xmm6,%xmm0
addss  %xmm4,%xmm0
add    $0x2,%rcx
cmp    %rcx,%rax
jne    1150 <frame_var_max+0x50>
test   $0x1,%r10b
je     1209 <frame_var_max+0x109>
movss  (%rdi,%rcx,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  0xe22(%rip),%xmm2
movapd 0xe2a(%rip),%xmm3
xorpd  %xmm2,%xmm3
xorps  %xmm4,%xmm4
cmpltsd %xmm2,%xmm4
andpd  %xmm4,%xmm2
andnpd %xmm3,%xmm4
orpd   %xmm2,%xmm4
xorps  %xmm2,%xmm2
cvtsd2ss %xmm4,%xmm2
addss  %xmm2,%xmm0
cmp    $0x2,%esi
jl     13d9 <frame_var_max+0x2d9>
divss  %xmm8,%xmm0
test   %r9,%r9
je     140a <frame_var_max+0x30a>
mov    %r10d,%eax
and    $0x7ffffffe,%eax
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
movsd  0xdca(%rip),%xmm3
movapd 0xdd2(%rip),%xmm4
xchg   %ax,%ax
movss  (%rdi,%rcx,4),%xmm5
movss  0x4(%rdi,%rcx,4),%xmm6
cvtss2sd %xmm5,%xmm5
mulsd  %xmm3,%xmm5
movapd %xmm5,%xmm7
xorpd  %xmm4,%xmm7
xorpd  %xmm1,%xmm1
cmpltsd %xmm5,%xmm1
andpd  %xmm1,%xmm5
andnpd %xmm7,%xmm1
orpd   %xmm5,%xmm1
cvtsd2ss %xmm1,%xmm1
subss  %xmm0,%xmm1
mulss  %xmm1,%xmm1
addss  %xmm2,%xmm1
xorps  %xmm2,%xmm2
cvtss2sd %xmm6,%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm2,%xmm5
xorpd  %xmm4,%xmm5
xorps  %xmm6,%xmm6
cmpltsd %xmm2,%xmm6
andpd  %xmm6,%xmm2
andnpd %xmm5,%xmm6
orpd   %xmm2,%xmm6
xorps  %xmm2,%xmm2
cvtsd2ss %xmm6,%xmm2
subss  %xmm0,%xmm2
mulss  %xmm2,%xmm2
addss  %xmm1,%xmm2
add    $0x2,%rcx
cmp    %rcx,%rax
jne    1240 <frame_var_max+0x140>
test   $0x1,%r10b
je     1312 <frame_var_max+0x212>
movss  (%rdi,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  0xd22(%rip),%xmm1
movapd 0xd2a(%rip),%xmm3
xorpd  %xmm1,%xmm3
xorpd  %xmm4,%xmm4
cmpltsd %xmm1,%xmm4
andpd  %xmm4,%xmm1
andnpd %xmm3,%xmm4
orpd   %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
subss  %xmm0,%xmm1
mulss  %xmm1,%xmm1
addss  %xmm1,%xmm2
divss  %xmm8,%xmm2
xorpd  %xmm3,%xmm3
xorps  %xmm0,%xmm0
maxss  %xmm2,%xmm0
cmp    $0x2,%esi
jl     13ec <frame_var_max+0x2ec>
movslq %edx,%r11
test   %r9,%r9
je     141f <frame_var_max+0x31f>
mov    %r10d,%eax
and    $0x7ffffffe,%eax
lea    (%rdi,%r11,4),%rdx
add    $0x4,%rdx
xorps  %xmm2,%xmm2
xor    %ecx,%ecx
movsd  0xcac(%rip),%xmm3
movapd 0xcb4(%rip),%xmm4
nopl   0x0(%rax)
movss  -0x4(%rdx,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm3,%xmm1
movapd %xmm1,%xmm5
xorpd  %xmm4,%xmm5
xorpd  %xmm6,%xmm6
cmpltsd %xmm1,%xmm6
andpd  %xmm6,%xmm1
andnpd %xmm5,%xmm6
orpd   %xmm1,%xmm6
xorps  %xmm1,%xmm1
cvtsd2ss %xmm6,%xmm1
movss  (%rdx,%rcx,4),%xmm5
addss  %xmm2,%xmm1
xorps  %xmm2,%xmm2
cvtss2sd %xmm5,%xmm2
mulsd  %xmm3,%xmm2
movapd %xmm2,%xmm5
xorpd  %xmm4,%xmm5
xorpd  %xmm6,%xmm6
cmpltsd %xmm2,%xmm6
andpd  %xmm6,%xmm2
andnpd %xmm5,%xmm6
orpd   %xmm2,%xmm6
xorps  %xmm2,%xmm2
cvtsd2ss %xmm6,%xmm2
addss  %xmm1,%xmm2
add    $0x2,%rcx
cmp    %rcx,%rax
jne    1360 <frame_var_max+0x260>
jmp    1424 <frame_var_max+0x324>
xorpd  %xmm3,%xmm3
xorps  %xmm1,%xmm1
divss  %xmm8,%xmm1
xorps  %xmm0,%xmm0
maxss  %xmm1,%xmm0
divss  %xmm8,%xmm3
maxss  %xmm3,%xmm0
ret
xor    %ecx,%ecx
xorps  %xmm0,%xmm0
test   $0x1,%r10b
jne    11cd <frame_var_max+0xcd>
jmp    1209 <frame_var_max+0x109>
xorpd  %xmm2,%xmm2
xor    %ecx,%ecx
test   $0x1,%r10b
jne    12cd <frame_var_max+0x1cd>
jmp    1312 <frame_var_max+0x212>
xorps  %xmm2,%xmm2
xor    %ecx,%ecx
lea    (%rdi,%r11,4),%r8
test   $0x1,%r10b
je     146c <frame_var_max+0x36c>
movss  (%r8,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  0xbc0(%rip),%xmm1
movapd 0xbc8(%rip),%xmm3
xorpd  %xmm1,%xmm3
xorpd  %xmm4,%xmm4
cmpltsd %xmm1,%xmm4
andpd  %xmm4,%xmm1
andnpd %xmm3,%xmm4
orpd   %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
addss  %xmm1,%xmm2
xorpd  %xmm3,%xmm3
cmp    $0x2,%esi
jl     13ec <frame_var_max+0x2ec>
divss  %xmm8,%xmm2
test   %r9,%r9
je     1548 <frame_var_max+0x448>
mov    %r10d,%esi
and    $0x7ffffffe,%esi
lea    (%rdi,%r11,4),%rax
add    $0x4,%rax
xorpd  %xmm3,%xmm3
xor    %ecx,%ecx
movsd  0xb59(%rip),%xmm9
movapd 0xb61(%rip),%xmm5
nop
movss  -0x4(%rax,%rcx,4),%xmm1
movss  (%rax,%rcx,4),%xmm6
cvtss2sd %xmm1,%xmm1
mulsd  %xmm9,%xmm1
movapd %xmm1,%xmm7
xorpd  %xmm5,%xmm7
xorpd  %xmm4,%xmm4
cmpltsd %xmm1,%xmm4
andpd  %xmm4,%xmm1
andnpd %xmm7,%xmm4
orpd   %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
subss  %xmm2,%xmm1
mulss  %xmm1,%xmm1
addss  %xmm3,%xmm1
xorps  %xmm3,%xmm3
cvtss2sd %xmm6,%xmm3
mulsd  %xmm9,%xmm3
movapd %xmm3,%xmm4
xorpd  %xmm5,%xmm4
xorps  %xmm6,%xmm6
cmpltsd %xmm3,%xmm6
andpd  %xmm6,%xmm3
andnpd %xmm4,%xmm6
orpd   %xmm3,%xmm6
xorps  %xmm3,%xmm3
cvtsd2ss %xmm6,%xmm3
subss  %xmm2,%xmm3
mulss  %xmm3,%xmm3
addss  %xmm1,%xmm3
add    $0x2,%rcx
cmp    %rcx,%rsi
jne    14b0 <frame_var_max+0x3b0>
test   $0x1,%r10b
je     13ec <frame_var_max+0x2ec>
jmp    1558 <frame_var_max+0x458>
xorpd  %xmm3,%xmm3
xor    %ecx,%ecx
test   $0x1,%r10b
je     13ec <frame_var_max+0x2ec>
movss  (%r8,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  0xa96(%rip),%xmm1
movapd 0xa9e(%rip),%xmm4
xorpd  %xmm1,%xmm4
xorpd  %xmm5,%xmm5
cmpltsd %xmm1,%xmm5
andpd  %xmm5,%xmm1
andnpd %xmm4,%xmm5
orpd   %xmm1,%xmm5
xorps  %xmm1,%xmm1
cvtsd2ss %xmm5,%xmm1
subss  %xmm2,%xmm1
mulss  %xmm1,%xmm1
addss  %xmm1,%xmm3
jmp    13ec <frame_var_max+0x2ec>

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

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