int spread_function(float power, float *psd_bark, int masker_bin, int low_bin,
                    int high_bin, float *spread_effect) {
  int i;
  float masker_bark;
  float maskee_bark;
  float delta_bark;
  masker_bark = psd_bark[masker_bin];
  for (i = low_bin; i <= high_bin; i++) {
    maskee_bark = psd_bark[i];
    delta_bark = maskee_bark - masker_bark;
    if (delta_bark >= -3.5 && delta_bark < -1)
      spread_effect[i] = 17 * delta_bark - 0.4 * power + 11;
    else if (delta_bark >= -1 && delta_bark < 0)
      spread_effect[i] = (0.4 * power + 6.) * delta_bark;
    else if (delta_bark >= 0 && delta_bark < 1)
      spread_effect[i] = -17 * delta_bark;
    else if (delta_bark >= 1 && delta_bark < 8.5)
      spread_effect[i] = (0.15 * power - 17) * delta_bark - 0.15 * power;
    else
      ;
  }
  return 0;
}


x86 assembly (clang, -O0):
<spread_function>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     134d <spread_function+0x24d>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
subss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe90(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11d8 <spread_function+0xd8>
movss  0xebe(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    11d8 <spread_function+0xd8>
movss  0xeb8(%rip),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe8a(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe72(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    133a <spread_function+0x23a>
movss  -0x38(%rbp),%xmm0
movss  0xe5b(%rip),%xmm1
ucomiss %xmm1,%xmm0
jb     123f <spread_function+0x13f>
xorps  %xmm0,%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    123f <spread_function+0x13f>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe14(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe10(%rip),%xmm1
addsd  %xmm1,%xmm0
movss  -0x38(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1335 <spread_function+0x235>
movss  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     1281 <spread_function+0x181>
movss  0xdec(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    1281 <spread_function+0x181>
movss  0xdde(%rip),%xmm0
mulss  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1330 <spread_function+0x230>
movss  -0x38(%rbp),%xmm0
movss  0xdb6(%rip),%xmm1
ucomiss %xmm1,%xmm0
jb     1326 <spread_function+0x226>
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd60(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1326 <spread_function+0x226>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd4d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd49(%rip),%xmm1
addsd  %xmm1,%xmm0
movss  -0x38(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movss  -0x4(%rbp),%xmm1
cvtss2sd %xmm1,%xmm3
movsd  0xd23(%rip),%xmm1
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    132b <spread_function+0x22b>
jmp    132b <spread_function+0x22b>
jmp    1330 <spread_function+0x230>
jmp    1335 <spread_function+0x235>
jmp    133a <spread_function+0x23a>
jmp    133f <spread_function+0x23f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1132 <spread_function+0x32>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<spread_function>:
push   %rbx
sub    $0x20,%rsp
mov    %ecx,%r9d
sub    %edx,%r9d
jl     1299 <spread_function+0x199>
movslq %esi,%rax
movss  (%rdi,%rax,4),%xmm4
cvtss2sd %xmm0,%xmm6
movsd  0xedb(%rip),%xmm0
mulsd  %xmm6,%xmm0
addsd  0xed7(%rip),%xmm0
movapd %xmm0,-0x70(%rsp)
movsd  0xed1(%rip),%xmm0
mulsd  %xmm6,%xmm0
movapd %xmm0,-0x80(%rsp)
movsd  0xec7(%rip),%xmm0
mulsd  %xmm6,%xmm0
addsd  0xec3(%rip),%xmm0
movapd %xmm0,-0x60(%rsp)
movslq %edx,%rdx
cmp    $0x3,%r9d
jb     119a <spread_function+0x9a>
lea    (%r8,%rdx,4),%r11
lea    (%r9,%rdx,1),%rax
lea    (%rdi,%rdx,4),%r10
lea    (%rdi,%rax,4),%rsi
add    $0x4,%rsi
cmp    %rsi,%r11
jae    12a1 <spread_function+0x1a1>
lea    (%r8,%rax,4),%rax
add    $0x4,%rax
cmp    %rax,%r10
jae    12a1 <spread_function+0x1a1>
mov    %rdx,%rax
add    $0x1,%ecx
mov    %ecx,%ecx
movss  0xf36(%rip),%xmm0
movss  0xf32(%rip),%xmm3
movss  0xf39(%rip),%xmm11
mulsd  0xe65(%rip),%xmm6
movsd  0xe64(%rip),%xmm12
xorps  %xmm5,%xmm5
movss  0xf10(%rip),%xmm10
movss  0xf0f(%rip),%xmm8
movss  0xf02(%rip),%xmm9
nopw   0x0(%rax,%rax,1)
movss  (%rdi,%rax,4),%xmm2
subss  %xmm4,%xmm2
ucomiss %xmm0,%xmm2
jb     1230 <spread_function+0x130>
ucomiss %xmm2,%xmm3
jbe    1230 <spread_function+0x130>
mulss  %xmm11,%xmm2
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
addsd  %xmm6,%xmm1
addsd  %xmm12,%xmm1
xorps  %xmm2,%xmm2
cvtsd2ss %xmm1,%xmm2
jmp    1287 <spread_function+0x187>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm7,%xmm7
cvtss2sd %xmm2,%xmm7
ucomiss %xmm3,%xmm2
jb     1250 <spread_function+0x150>
ucomiss %xmm2,%xmm5
jbe    1250 <spread_function+0x150>
mulsd  -0x60(%rsp),%xmm7
jmp    1280 <spread_function+0x180>
nopl   0x0(%rax)
ucomiss %xmm5,%xmm2
jb     1262 <spread_function+0x162>
ucomiss %xmm2,%xmm10
jbe    1262 <spread_function+0x162>
mulss  %xmm8,%xmm2
jmp    1287 <spread_function+0x187>
ucomiss %xmm10,%xmm2
jb     128d <spread_function+0x18d>
ucomiss %xmm2,%xmm9
jbe    128d <spread_function+0x18d>
mulsd  -0x70(%rsp),%xmm7
addsd  -0x80(%rsp),%xmm7
nopw   0x0(%rax,%rax,1)
xorps  %xmm2,%xmm2
cvtsd2ss %xmm7,%xmm2
movss  %xmm2,(%r8,%rax,4)
add    $0x1,%rax
cmp    %eax,%ecx
jne    11f0 <spread_function+0xf0>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbx
ret
add    $0x1,%r9
mov    %r9,%r11
and    $0xfffffffffffffffc,%r11
lea    (%r11,%rdx,1),%rax
movaps %xmm4,%xmm0
shufps $0x0,%xmm4,%xmm0
movaps %xmm0,(%rsp)
movaps -0x70(%rsp),%xmm0
movlhps %xmm0,%xmm0
movaps %xmm0,-0x10(%rsp)
movaps -0x80(%rsp),%xmm0
movlhps %xmm0,%xmm0
movaps %xmm0,-0x20(%rsp)
movaps -0x60(%rsp),%xmm0
movlhps %xmm0,%xmm0
movaps %xmm0,-0x40(%rsp)
movapd %xmm6,%xmm0
unpcklpd %xmm6,%xmm0
lea    (%r8,%rdx,4),%rdx
add    $0xc,%rdx
xor    %esi,%esi
mulpd  0xda4(%rip),%xmm0
movapd %xmm0,-0x50(%rsp)
movaps %xmm6,0x10(%rsp)
movaps %xmm4,-0x30(%rsp)
jmp    131d <spread_function+0x21d>
xchg   %ax,%ax
add    $0x4,%rsi
cmp    %rsi,%r11
je     151a <spread_function+0x41a>
movups (%r10,%rsi,4),%xmm5
subps  (%rsp),%xmm5
cvtps2pd %xmm5,%xmm6
movaps %xmm5,%xmm2
unpckhpd %xmm5,%xmm2
cvtps2pd %xmm2,%xmm7
movaps 0xd06(%rip),%xmm2
cmpleps %xmm5,%xmm2
movaps %xmm5,%xmm12
movaps 0xd07(%rip),%xmm0
cmpltps %xmm0,%xmm12
andps  %xmm2,%xmm12
movaps %xmm0,%xmm2
cmpleps %xmm5,%xmm2
movaps %xmm5,%xmm15
cmpltps 0xd6a(%rip),%xmm15
andps  %xmm2,%xmm15
xorps  %xmm3,%xmm3
cmpleps %xmm5,%xmm3
movaps %xmm5,%xmm2
movaps 0xce5(%rip),%xmm4
cmpltps %xmm4,%xmm2
andps  %xmm3,%xmm2
cmpleps %xmm5,%xmm4
movaps %xmm5,%xmm3
cmpltps 0xcdf(%rip),%xmm3
01
andps  %xmm4,%xmm3
movapd -0x10(%rsp),%xmm1
movapd %xmm1,%xmm4
mulpd  %xmm7,%xmm4
movapd -0x20(%rsp),%xmm0
addpd  %xmm0,%xmm4
mulpd  %xmm6,%xmm1
addpd  %xmm0,%xmm1
cvtpd2ps %xmm1,%xmm14
cvtpd2ps %xmm4,%xmm1
unpcklpd %xmm1,%xmm14
movaps %xmm5,%xmm11
movapd -0x40(%rsp),%xmm0
mulpd  %xmm0,%xmm6
cvtpd2ps %xmm6,%xmm8
mulpd  %xmm0,%xmm7
cvtpd2ps %xmm7,%xmm1
unpcklpd %xmm1,%xmm8
mulps  0xca7(%rip),%xmm5
cvtps2pd %xmm5,%xmm1
movhlps %xmm5,%xmm5
cvtps2pd %xmm5,%xmm4
movapd -0x50(%rsp),%xmm0
addpd  %xmm0,%xmm1
addpd  %xmm0,%xmm4
movapd 0xca8(%rip),%xmm0
addpd  %xmm0,%xmm4
addpd  %xmm0,%xmm1
cvtpd2ps %xmm1,%xmm9
cvtpd2ps %xmm4,%xmm1
unpcklpd %xmm1,%xmm9
movaps %xmm12,%xmm13
orps   %xmm15,%xmm13
movaps %xmm13,%xmm6
movaps 0xc8f(%rip),%xmm0
xorps  %xmm0,%xmm6
andps  %xmm2,%xmm6
orps   %xmm2,%xmm13
mulps  0xc3d(%rip),%xmm11
xorps  %xmm0,%xmm13
andps  %xmm3,%xmm13
movaps %xmm12,%xmm10
xorps  %xmm0,%xmm10
andps  %xmm15,%xmm10
movaps %xmm10,%xmm5
orps   %xmm6,%xmm10
pslld  $0x1f,%xmm6
psrad  $0x1f,%xmm6
andps  %xmm6,%xmm11
andnps %xmm9,%xmm6
orps   %xmm11,%xmm6
orps   %xmm13,%xmm10
pslld  $0x1f,%xmm13
psrad  $0x1f,%xmm13
andpd  %xmm13,%xmm14
andnpd %xmm6,%xmm13
orpd   %xmm14,%xmm13
pslld  $0x1f,%xmm5
psrad  $0x1f,%xmm5
andpd  %xmm5,%xmm8
andnpd %xmm13,%xmm5
orpd   %xmm8,%xmm5
orps   %xmm12,%xmm10
movd   %xmm10,%ebx
test   $0x1,%bl
je     14c1 <spread_function+0x3c1>
movss  %xmm5,-0xc(%rdx,%rsi,4)
pextrw $0x2,%xmm10,%ebx
test   $0x1,%bl
je     14da <spread_function+0x3da>
movapd %xmm5,%xmm1
shufps $0x55,%xmm5,%xmm1
movss  %xmm1,-0x8(%rdx,%rsi,4)
pextrw $0x4,%xmm10,%ebx
test   $0x1,%bl
movaps -0x30(%rsp),%xmm4
movaps 0x10(%rsp),%xmm6
je     14fd <spread_function+0x3fd>
movapd %xmm5,%xmm1
unpckhpd %xmm5,%xmm1
movss  %xmm1,-0x4(%rdx,%rsi,4)
pextrw $0x6,%xmm10,%ebx
test   $0x1,%bl
je     1310 <spread_function+0x210>
shufps $0xff,%xmm5,%xmm5
movss  %xmm5,(%rdx,%rsi,4)
jmp    1310 <spread_function+0x210>
cmp    %r11,%r9
je     1299 <spread_function+0x199>
jmp    119d <spread_function+0x9d>

LLVM IR (-O0):
define i32 @spread_function(float %0, float* %1, i32 %2, i32 %3, i32 %4, float* %5) {
%7 = alloca float
%8 = alloca float*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca float*
%13 = alloca i32
%14 = alloca float
%15 = alloca float
%16 = alloca float
store float %0, float* %7
store float* %1, float** %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store float* %5, float** %12
%17 = load float*, float** %8
%18 = load i32, i32* %9
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds float, float* %17, i64 %19
%21 = load float, float* %20
store float %21, float* %14
%22 = load i32, i32* %10
store i32 %22, i32* %13
br label %23
23: ; preds = %114, %6
%24 = load i32, i32* %13
%25 = load i32, i32* %11
%26 = icmp sle i32 %24, %25
br i1 %26, label %27, label %117
27: ; preds = %23
%28 = load float*, float** %8
%29 = load i32, i32* %13
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds float, float* %28, i64 %30
%32 = load float, float* %31
store float %32, float* %15
%33 = load float, float* %15
%34 = load float, float* %14
%35 = fsub float %33, %34
store float %35, float* %16
%36 = load float, float* %16
%37 = fpext float %36 to double
%38 = fcmp oge double %37, -3.500000e+00
br i1 %38, label %39, label %55
39: ; preds = %27
%40 = load float, float* %16
%41 = fcmp olt float %40, -1.000000e+00
br i1 %41, label %42, label %55
42: ; preds = %39
%43 = load float, float* %16
%44 = fmul float 1.700000e+01, %43
%45 = fpext float %44 to double
%46 = load float, float* %7
%47 = fpext float %46 to double
%48 = call double @llvm.fmuladd.f64(double -4.000000e-01, double %47, double %45)
%49 = fadd double %48, 1.100000e+01
%50 = fptrunc double %49 to float
%51 = load float*, float** %12
%52 = load i32, i32* %13
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds float, float* %51, i64 %53
store float %50, float* %54
br label %113
55: ; preds = %39, %27
%56 = load float, float* %16
%57 = fcmp oge float %56, -1.000000e+00
br i1 %57, label %58, label %73
58: ; preds = %55
%59 = load float, float* %16
%60 = fcmp olt float %59, 0.000000e+00
br i1 %60, label %61, label %73
61: ; preds = %58
%62 = load float, float* %7
%63 = fpext float %62 to double
%64 = call double @llvm.fmuladd.f64(double 4.000000e-01, double %63, double 6.000000e+00)
%65 = load float, float* %16
%66 = fpext float %65 to double
%67 = fmul double %64, %66
%68 = fptrunc double %67 to float
%69 = load float*, float** %12
%70 = load i32, i32* %13
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds float, float* %69, i64 %71
store float %68, float* %72
br label %112
73: ; preds = %58, %55
%74 = load float, float* %16
%75 = fcmp oge float %74, 0.000000e+00
br i1 %75, label %76, label %86
76: ; preds = %73
%77 = load float, float* %16
%78 = fcmp olt float %77, 1.000000e+00
br i1 %78, label %79, label %86
79: ; preds = %76
%80 = load float, float* %16
%81 = fmul float -1.700000e+01, %80
%82 = load float*, float** %12
%83 = load i32, i32* %13
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds float, float* %82, i64 %84
store float %81, float* %85
br label %111
86: ; preds = %76, %73
%87 = load float, float* %16
%88 = fcmp oge float %87, 1.000000e+00
br i1 %88, label %89, label %109
89: ; preds = %86
%90 = load float, float* %16
%91 = fpext float %90 to double
%92 = fcmp olt double %91, 8.500000e+00
br i1 %92, label %93, label %109
93: ; preds = %89
%94 = load float, float* %7
%95 = fpext float %94 to double
%96 = call double @llvm.fmuladd.f64(double 1.500000e-01, double %95, double -1.700000e+01)
%97 = load float, float* %16
%98 = fpext float %97 to double
%99 = load float, float* %7
%100 = fpext float %99 to double
%101 = fmul double 1.500000e-01, %100
%102 = fneg double %101
%103 = call double @llvm.fmuladd.f64(double %96, double %98, double %102)
%104 = fptrunc double %103 to float
%105 = load float*, float** %12
%106 = load i32, i32* %13
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds float, float* %105, i64 %107
store float %104, float* %108
br label %110
109: ; preds = %89, %86
br label %110
110: ; preds = %109, %93
br label %111
111: ; preds = %110, %79
br label %112
112: ; preds = %111, %61
br label %113
113: ; preds = %112, %42
br label %114
114: ; preds = %113
%115 = load i32, i32* %13
%116 = add nsw i32 %115, 1
store i32 %116, i32* %13
br label %23
117: ; preds = %23
ret i32 0
}

LLVM IR (-O2):
define i32 @spread_function(float %0, float* nocapture %1, i32 %2, i32 %3, i32 %4, float* nocapture writeonly %5) {
%7 = sext i32 %2 to i64
%8 = getelementptr inbounds float, float* %1, i64 %7
%9 = load float, float* %8
%10 = icmp slt i32 %4, %3
br i1 %10, label %165, label %11
11: ; preds = %6
%12 = fpext float %0 to double
%13 = tail call double @llvm.fmuladd.f64(double %12, double 1.500000e-01, double -1.700000e+01)
%14 = fmul double %12, -1.500000e-01
%15 = tail call double @llvm.fmuladd.f64(double %12, double 4.000000e-01, double 6.000000e+00)
%16 = sext i32 %3 to i64
%17 = add i32 %4, 1
%18 = sub i32 %4, %3
%19 = zext i32 %18 to i64
%20 = add nuw nsw i64 %19, 1
%21 = icmp ult i32 %18, 3
br i1 %21, label %121, label %22
22: ; preds = %11
%23 = getelementptr float, float* %5, i64 %16
%24 = sub i32 %4, %3
%25 = zext i32 %24 to i64
%26 = add nsw i64 %16, %25
%27 = add nsw i64 %26, 1
%28 = getelementptr float, float* %5, i64 %27
%29 = getelementptr float, float* %1, i64 %16
%30 = getelementptr float, float* %1, i64 %27
%31 = icmp ult float* %23, %30
%32 = icmp ult float* %29, %28
%33 = and i1 %31, %32
br i1 %33, label %121, label %34
34: ; preds = %22
%35 = and i64 %20, 8589934588
%36 = add nsw i64 %35, %16
%37 = insertelement <4 x float> poison, float %9, i64 0
%38 = shufflevector <4 x float> %37, <4 x float> poison, <4 x i32> zeroinitializer
%39 = insertelement <4 x double> poison, double %13, i64 0
%40 = shufflevector <4 x double> %39, <4 x double> poison, <4 x i32> zeroinitializer
%41 = insertelement <4 x double> poison, double %14, i64 0
%42 = shufflevector <4 x double> %41, <4 x double> poison, <4 x i32> zeroinitializer
%43 = insertelement <4 x double> poison, double %15, i64 0
%44 = shufflevector <4 x double> %43, <4 x double> poison, <4 x i32> zeroinitializer
%45 = insertelement <4 x double> poison, double %12, i64 0
%46 = shufflevector <4 x double> %45, <4 x double> poison, <4 x i32> zeroinitializer
br label %47
47: ; preds = %116, %34
%48 = phi i64 [ 0, %34 ], [ %117, %116 ]
%49 = add i64 %48, %16
%50 = getelementptr inbounds float, float* %1, i64 %49
%51 = bitcast float* %50 to <4 x float>*
%52 = load <4 x float>, <4 x float>* %51
%53 = fsub <4 x float> %52, %38
%54 = fpext <4 x float> %53 to <4 x double>
%55 = fcmp oge <4 x float> %53, <float -3.500000e+00, float -3.500000e+00, float -3.500000e+00, float -3.500000e+00>
%56 = fcmp olt <4 x float> %53, <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
%57 = and <4 x i1> %55, %56
%58 = fcmp oge <4 x float> %53, <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>
%59 = fcmp olt <4 x float> %53, zeroinitializer
%60 = and <4 x i1> %58, %59
%61 = fcmp oge <4 x float> %53, zeroinitializer
%62 = fcmp olt <4 x float> %53, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
%63 = and <4 x i1> %61, %62
%64 = fcmp oge <4 x float> %53, <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
%65 = fcmp olt <4 x float> %53, <float 8.500000e+00, float 8.500000e+00, float 8.500000e+00, float 8.500000e+00>
%66 = and <4 x i1> %64, %65
%67 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %40, <4 x double> %54, <4 x double> %42)
%68 = fptrunc <4 x double> %67 to <4 x float>
%69 = fmul <4 x float> %53, <float -1.700000e+01, float -1.700000e+01, float -1.700000e+01, float -1.700000e+01>
%70 = fmul <4 x double> %44, %54
%71 = fptrunc <4 x double> %70 to <4 x float>
%72 = fmul <4 x float> %53, <float 1.700000e+01, float 1.700000e+01, float 1.700000e+01, float 1.700000e+01>
%73 = fpext <4 x float> %72 to <4 x double>
%74 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %46, <4 x double> <double -4.000000e-01, double -4.000000e-01, double -4.000000e-01, double -4.000000e-01>, <4 x double> %73)
%75 = fadd <4 x double> %74, <double 1.100000e+01, double 1.100000e+01, double 1.100000e+01, double 1.100000e+01>
%76 = fptrunc <4 x double> %75 to <4 x float>
%77 = and <4 x i1> %55, %56
%78 = xor <4 x i1> %77, <i1 true, i1 true, i1 true, i1 true>
%79 = and <4 x i1> %58, %59
%80 = or <4 x i1> %77, %79
%81 = xor <4 x i1> %80, <i1 true, i1 true, i1 true, i1 true>
%82 = select <4 x i1> %81, <4 x i1> %63, <4 x i1> zeroinitializer
%83 = and <4 x i1> %61, %62
%84 = select <4 x i1> %80, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %83
%85 = xor <4 x i1> %84, <i1 true, i1 true, i1 true, i1 true>
%86 = select <4 x i1> %85, <4 x i1> %66, <4 x i1> zeroinitializer
%87 = select <4 x i1> %78, <4 x i1> %60, <4 x i1> zeroinitializer
%88 = select <4 x i1> %82, <4 x float> %69, <4 x float> %76
%89 = select <4 x i1> %86, <4 x float> %68, <4 x float> %88
%90 = select <4 x i1> %87, <4 x float> %71, <4 x float> %89
%91 = or <4 x i1> %87, %86
%92 = or <4 x i1> %91, %82
%93 = or <4 x i1> %92, %57
%94 = extractelement <4 x i1> %93, i64 0
br i1 %94, label %95, label %98
95: ; preds = %47
%96 = getelementptr inbounds float, float* %5, i64 %49
%97 = extractelement <4 x float> %90, i64 0
store float %97, float* %96
br label %98
98: ; preds = %95, %47
%99 = extractelement <4 x i1> %93, i64 1
br i1 %99, label %100, label %104
100: ; preds = %98
%101 = add i64 %49, 1
%102 = getelementptr inbounds float, float* %5, i64 %101
%103 = extractelement <4 x float> %90, i64 1
store float %103, float* %102
br label %104
104: ; preds = %100, %98
%105 = extractelement <4 x i1> %93, i64 2
br i1 %105, label %106, label %110
106: ; preds = %104
%107 = add i64 %49, 2
%108 = getelementptr inbounds float, float* %5, i64 %107
%109 = extractelement <4 x float> %90, i64 2
store float %109, float* %108
br label %110
110: ; preds = %106, %104
%111 = extractelement <4 x i1> %93, i64 3
br i1 %111, label %112, label %116
112: ; preds = %110
%113 = add i64 %49, 3
%114 = getelementptr inbounds float, float* %5, i64 %113
%115 = extractelement <4 x float> %90, i64 3
store float %115, float* %114
br label %116
116: ; preds = %112, %110
%117 = add nuw i64 %48, 4
%118 = icmp eq i64 %117, %35
br i1 %118, label %119, label %47
119: ; preds = %116
%120 = icmp eq i64 %20, %35
br i1 %120, label %165, label %121
121: ; preds = %22, %11, %119
%122 = phi i64 [ %16, %22 ], [ %16, %11 ], [ %36, %119 ]
br label %123
123: ; preds = %121, %161
%124 = phi i64 [ %162, %161 ], [ %122, %121 ]
%125 = getelementptr inbounds float, float* %1, i64 %124
%126 = load float, float* %125
%127 = fsub float %126, %9
%128 = fpext float %127 to double
%129 = fcmp oge float %127, -3.500000e+00
%130 = fcmp olt float %127, -1.000000e+00
%131 = and i1 %129, %130
br i1 %131, label %132, label %138
132: ; preds = %123
%133 = fmul float %127, 1.700000e+01
%134 = fpext float %133 to double
%135 = tail call double @llvm.fmuladd.f64(double %12, double -4.000000e-01, double %134)
%136 = fadd double %135, 1.100000e+01
%137 = fptrunc double %136 to float
br label %158
138: ; preds = %123
%139 = fcmp oge float %127, -1.000000e+00
%140 = fcmp olt float %127, 0.000000e+00
%141 = and i1 %139, %140
br i1 %141, label %142, label %145
142: ; preds = %138
%143 = fmul double %15, %128
%144 = fptrunc double %143 to float
br label %158
145: ; preds = %138
%146 = fcmp oge float %127, 0.000000e+00
%147 = fcmp olt float %127, 1.000000e+00
%148 = and i1 %146, %147
br i1 %148, label %149, label %151
149: ; preds = %145
%150 = fmul float %127, -1.700000e+01
br label %158
151: ; preds = %145
%152 = fcmp oge float %127, 1.000000e+00
%153 = fcmp olt float %127, 8.500000e+00
%154 = and i1 %152, %153
br i1 %154, label %155, label %161
155: ; preds = %151
%156 = tail call double @llvm.fmuladd.f64(double %13, double %128, double %14)
%157 = fptrunc double %156 to float
br label %158
158: ; preds = %142, %155, %149, %132
%159 = phi float [ %137, %132 ], [ %150, %149 ], [ %157, %155 ], [ %144, %142 ]
%160 = getelementptr inbounds float, float* %5, i64 %124
store float %159, float* %160
br label %161
161: ; preds = %158, %151
%162 = add nsw i64 %124, 1
%163 = trunc i64 %162 to i32
%164 = icmp eq i32 %17, %163
br i1 %164, label %165, label %123
165: ; preds = %161, %119, %6
ret i32 0
}