#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 cos(double);
int sin(double);
void makewindows(float *H, float *A, float *S, int Nw, int N, int I) {
  int i;
  float sum;
  for (i = 0; i < Nw; i++)
    H[i] = A[i] = S[i] =
        0.54 - 0.46 * cos(6.28318530717958623199592693708837032318115234375 *
                          i / (Nw - 1));
  if (Nw > N) {
    float x;
    x = -(Nw - 1) / 2.;
    for (i = 0; i < Nw; i++, x += 1.)
      if (x != 0.) {
        A[i] *=
            N *
            sin(3.141592653589793115997963468544185161590576171875 * x / N) /
            (3.141592653589793115997963468544185161590576171875 * x);
        if (I)
          S[i] *=
              I *
              sin(3.141592653589793115997963468544185161590576171875 * x / I) /
              (3.141592653589793115997963468544185161590576171875 * x);
      }
  }
  for (sum = i = 0; i < Nw; i++)
    sum += A[i];
  for (i = 0; i < Nw; i++) {
    float afac = 2. / sum;
    float sfac = Nw > N ? 1. / afac : afac;
    A[i] *= afac;
    S[i] *= sfac;
  }
  if (Nw <= N && I) {
    for (sum = i = 0; i < Nw; i += I)
      sum += S[i] * S[i];
    for (sum = 1. / sum, i = 0; i < Nw; i++)
      S[i] *= sum;
  }
}


x86 assembly (clang, -O0):
<makewindows>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    11c7 <makewindows+0xa7>
cvtsi2sdl -0x28(%rbp),%xmm1
movsd  0xec9(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x1c(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
call   1040 <cos@plt>
movsd  0xe9a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe96(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1146 <makewindows+0x26>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jle    1347 <makewindows+0x227>
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe17(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1342 <makewindows+0x222>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    122a <makewindows+0x10a>
jp     122a <makewindows+0x10a>
jmp    1311 <makewindows+0x1f1>
mov    -0x20(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdcf(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <sin@plt>
mov    %eax,%ecx
mov    -0x3c(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xda0(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x0,-0x24(%rbp)
je     130c <makewindows+0x1ec>
mov    -0x24(%rbp),%eax
mov    %eax,-0x40(%rbp)
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd59(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1030 <sin@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xd2a(%rip),%xmm0
mulsd  %xmm2,%xmm0
divsd  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    1311 <makewindows+0x1f1>
jmp    1316 <makewindows+0x1f6>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcd8(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    11fd <makewindows+0xdd>
jmp    1347 <makewindows+0x227>
movl   $0x0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1387 <makewindows+0x267>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1356 <makewindows+0x236>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    143b <makewindows+0x31b>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc55(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jle    13e3 <makewindows+0x2c3>
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc33(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    13f1 <makewindows+0x2d1>
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    138e <makewindows+0x26e>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jg     1501 <makewindows+0x3e1>
cmpl   $0x0,-0x24(%rbp)
je     1501 <makewindows+0x3e1>
movl   $0x0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    14a6 <makewindows+0x386>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
movss  -0x2c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    1460 <makewindows+0x340>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb51(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    14fc <makewindows+0x3dc>
movss  -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    14cb <makewindows+0x3ab>
jmp    1501 <makewindows+0x3e1>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<makewindows>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9d,%r12d
mov    %r8d,0xc(%rsp)
mov    %ecx,%r14d
mov    %rdx,%r13
mov    %ecx,%r15d
test   %ecx,%ecx
jle    1570 <makewindows+0x450>
mov    %rsi,%rbp
mov    %rdi,%rbx
mov    %r14,0x20(%rsp)
lea    -0x1(%r14),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x10(%rsp)
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
mulsd  0xe80(%rip),%xmm0
divsd  0x10(%rsp),%xmm0
call   1040 <cos@plt>
mulsd  0xe75(%rip),%xmm0
addsd  0xe75(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x0(%r13,%r14,4)
movss  %xmm0,0x0(%rbp,%r14,4)
movss  %xmm0,(%rbx,%r14,4)
add    $0x1,%r14
cmp    %r14,%r15
jne    1170 <makewindows+0x50>
mov    0x20(%rsp),%r14
cmp    0xc(%rsp),%r14d
jle    12ec <makewindows+0x1cc>
test   %r14d,%r14d
jle    1570 <makewindows+0x450>
mov    $0x1,%eax
sub    %r14d,%eax
cvtsi2sd %eax,%xmm1
mulsd  0xe2f(%rip),%xmm1
xorps  %xmm0,%xmm0
cvtsi2sdl 0xc(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %r12d,%xmm0
movsd  %xmm0,0x28(%rsp)
xor    %ebx,%ebx
jmp    1225 <makewindows+0x105>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbx
addsd  0xe0c(%rip),%xmm1
cmp    %rbx,%r15
je     12ec <makewindows+0x1cc>
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomiss 0xdfe(%rip),%xmm0
jne    123e <makewindows+0x11e>
jnp    1210 <makewindows+0xf0>
movaps %xmm1,%xmm0
mulsd  0xdd7(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
divsd  0x30(%rsp),%xmm0
movsd  %xmm1,0x10(%rsp)
call   1030 <sin@plt>
imul   0xc(%rsp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x18(%rsp),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm1,%xmm0
movss  0x0(%rbp,%rbx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
movss  %xmm0,0x0(%rbp,%rbx,4)
test   %r12d,%r12d
je     1210 <makewindows+0xf0>
movapd %xmm2,%xmm0
divsd  0x28(%rsp),%xmm0
call   1030 <sin@plt>
imul   %r12d,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0x18(%rsp),%xmm0
movss  0x0(%r13,%rbx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
movss  %xmm0,0x0(%r13,%rbx,4)
jmp    1210 <makewindows+0xf0>
test   %r14d,%r14d
jle    1570 <makewindows+0x450>
lea    -0x1(%r15),%rcx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%rcx
jae    130c <makewindows+0x1ec>
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
jmp    1359 <makewindows+0x239>
mov    %r15d,%edx
and    $0xfffffff8,%edx
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
addss  0x0(%rbp,%rcx,4),%xmm1
addss  0x4(%rbp,%rcx,4),%xmm1
addss  0x8(%rbp,%rcx,4),%xmm1
addss  0xc(%rbp,%rcx,4),%xmm1
addss  0x10(%rbp,%rcx,4),%xmm1
addss  0x14(%rbp,%rcx,4),%xmm1
addss  0x18(%rbp,%rcx,4),%xmm1
addss  0x1c(%rbp,%rcx,4),%xmm1
add    $0x8,%rcx
cmp    %rcx,%rdx
jne    1320 <makewindows+0x200>
test   %rax,%rax
je     137e <makewindows+0x25e>
lea    0x0(,%rcx,4),%rcx
add    %rbp,%rcx
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
addss  (%rcx,%rdx,4),%xmm1
add    $0x1,%rdx
cmp    %rdx,%rax
jne    1370 <makewindows+0x250>
test   %r14d,%r14d
jle    1570 <makewindows+0x450>
movss  0xca1(%rip),%xmm0
divss  %xmm1,%xmm0
movaps %xmm0,%xmm1
cmp    0xc(%rsp),%r14d
jle    13a9 <makewindows+0x289>
movss  0xc8f(%rip),%xmm1
divss  %xmm0,%xmm1
cmp    $0x8,%r15d
jb     13d7 <makewindows+0x2b7>
lea    0x0(,%r15,4),%rax
add    %r13,%rax
cmp    %rbp,%rax
jbe    1472 <makewindows+0x352>
lea    0x0(,%r15,4),%rax
add    %rbp,%rax
cmp    %r13,%rax
jbe    1472 <makewindows+0x352>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
test   $0x1,%r15b
je     140b <makewindows+0x2eb>
movss  0x0(%rbp,%rax,4),%xmm2
mulss  %xmm0,%xmm2
movss  %xmm2,0x0(%rbp,%rax,4)
movss  0x0(%r13,%rax,4),%xmm2
mulss  %xmm1,%xmm2
movss  %xmm2,0x0(%r13,%rax,4)
or     $0x1,%rax
add    %r15,%rcx
je     1570 <makewindows+0x450>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  0x0(%rbp,%rax,4),%xmm2
mulss  %xmm0,%xmm2
movss  %xmm2,0x0(%rbp,%rax,4)
movss  0x0(%r13,%rax,4),%xmm2
mulss  %xmm1,%xmm2
movss  %xmm2,0x0(%r13,%rax,4)
movss  0x4(%rbp,%rax,4),%xmm2
mulss  %xmm0,%xmm2
movss  %xmm2,0x4(%rbp,%rax,4)
movss  0x4(%r13,%rax,4),%xmm2
mulss  %xmm1,%xmm2
movss  %xmm2,0x4(%r13,%rax,4)
add    $0x2,%rax
cmp    %rax,%r15
jne    1420 <makewindows+0x300>
jmp    1570 <makewindows+0x450>
mov    %r15d,%eax
and    $0xfffffff8,%eax
movaps %xmm0,%xmm3
shufps $0x0,%xmm0,%xmm3
movaps %xmm1,%xmm2
shufps $0x0,%xmm1,%xmm2
lea    -0x8(%rax),%rcx
mov    %rcx,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     16b3 <makewindows+0x593>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movups 0x0(%rbp,%rcx,4),%xmm4
movups 0x10(%rbp,%rcx,4),%xmm5
mulps  %xmm3,%xmm4
mulps  %xmm3,%xmm5
movups %xmm4,0x0(%rbp,%rcx,4)
movups %xmm5,0x10(%rbp,%rcx,4)
movups 0x0(%r13,%rcx,4),%xmm4
movups 0x10(%r13,%rcx,4),%xmm5
mulps  %xmm2,%xmm4
mulps  %xmm2,%xmm5
movups %xmm4,0x0(%r13,%rcx,4)
movups %xmm5,0x10(%r13,%rcx,4)
movups 0x20(%rbp,%rcx,4),%xmm4
movups 0x30(%rbp,%rcx,4),%xmm5
mulps  %xmm3,%xmm4
mulps  %xmm3,%xmm5
movups %xmm4,0x20(%rbp,%rcx,4)
movups %xmm5,0x30(%rbp,%rcx,4)
movups 0x20(%r13,%rcx,4),%xmm4
movups 0x30(%r13,%rcx,4),%xmm5
mulps  %xmm2,%xmm4
mulps  %xmm2,%xmm5
movups %xmm4,0x20(%r13,%rcx,4)
movups %xmm5,0x30(%r13,%rcx,4)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rsi
jne    14b0 <makewindows+0x390>
test   $0x1,%dl
je     1567 <makewindows+0x447>
movups 0x0(%rbp,%rcx,4),%xmm4
movups 0x10(%rbp,%rcx,4),%xmm5
mulps  %xmm3,%xmm4
mulps  %xmm3,%xmm5
movups %xmm4,0x0(%rbp,%rcx,4)
movups %xmm5,0x10(%rbp,%rcx,4)
movups 0x0(%r13,%rcx,4),%xmm3
movups 0x10(%r13,%rcx,4),%xmm4
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm4
movups %xmm3,0x0(%r13,%rcx,4)
movups %xmm4,0x10(%r13,%rcx,4)
cmp    %r15,%rax
jne    13d9 <makewindows+0x2b9>
cmp    0xc(%rsp),%r14d
jg     169b <makewindows+0x57b>
test   %r12d,%r12d
je     169b <makewindows+0x57b>
test   %r14d,%r14d
jle    169b <makewindows+0x57b>
movslq %r12d,%rax
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movss  0x0(%r13,%rcx,4),%xmm0
mulss  %xmm0,%xmm0
addss  %xmm0,%xmm1
add    %rax,%rcx
cmp    %r15,%rcx
jl     15a0 <makewindows+0x480>
test   %r14d,%r14d
jle    169b <makewindows+0x57b>
movss  0xa6c(%rip),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%r14d
jae    15d9 <makewindows+0x4b9>
xor    %eax,%eax
jmp    1680 <makewindows+0x560>
mov    %r15d,%eax
and    $0xfffffff8,%eax
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x8(%rax),%rcx
mov    %rcx,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     16aa <makewindows+0x58a>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
nopw   0x0(%rax,%rax,1)
movups 0x0(%r13,%rcx,4),%xmm2
movups 0x10(%r13,%rcx,4),%xmm3
movups 0x20(%r13,%rcx,4),%xmm4
movups 0x30(%r13,%rcx,4),%xmm5
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,0x0(%r13,%rcx,4)
movups %xmm3,0x10(%r13,%rcx,4)
mulps  %xmm1,%xmm4
mulps  %xmm1,%xmm5
movups %xmm4,0x20(%r13,%rcx,4)
movups %xmm5,0x30(%r13,%rcx,4)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rsi
jne    1610 <makewindows+0x4f0>
test   $0x1,%dl
je     1679 <makewindows+0x559>
movups 0x0(%r13,%rcx,4),%xmm2
movups 0x10(%r13,%rcx,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,0x0(%r13,%rcx,4)
movups %xmm3,0x10(%r13,%rcx,4)
cmp    %r15,%rax
je     169b <makewindows+0x57b>
xchg   %ax,%ax
movss  0x0(%r13,%rax,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x0(%r13,%rax,4)
add    $0x1,%rax
cmp    %rax,%r15
jne    1680 <makewindows+0x560>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ecx,%ecx
test   $0x1,%dl
jne    165b <makewindows+0x53b>
jmp    1679 <makewindows+0x559>
xor    %ecx,%ecx
test   $0x1,%dl
jne    152f <makewindows+0x40f>
jmp    1567 <makewindows+0x447>

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

LLVM IR (-O2):
define void @makewindows(float* nocapture writeonly %0, float* nocapture %1, float* nocapture %2, i32 %3, i32 %4, i32 %5) {
%7 = icmp sgt i32 %3, 0
br i1 %7, label %8, label %268
8: ; preds = %6
%9 = add nsw i32 %3, -1
%10 = sitofp i32 %9 to double
%11 = zext i32 %3 to i64
br label %12
12: ; preds = %8, %12
%13 = phi i64 [ 0, %8 ], [ %24, %12 ]
%14 = trunc i64 %13 to i32
%15 = sitofp i32 %14 to double
%16 = fmul double %15, 0x401921FB54442D18
%17 = fdiv double %16, %10
%18 = tail call double @cos(double %17)
%19 = tail call double @llvm.fmuladd.f64(double %18, double -4.600000e-01, double 5.400000e-01)
%20 = fptrunc double %19 to float
%21 = getelementptr inbounds float, float* %2, i64 %13
store float %20, float* %21
%22 = getelementptr inbounds float, float* %1, i64 %13
store float %20, float* %22
%23 = getelementptr inbounds float, float* %0, i64 %13
store float %20, float* %23
%24 = add nuw nsw i64 %13, 1
%25 = icmp eq i64 %24, %11
br i1 %25, label %26, label %12
26: ; preds = %12
%27 = icmp sgt i32 %3, %4
br i1 %27, label %28, label %70
28: ; preds = %26
br i1 %7, label %29, label %268
29: ; preds = %28
%30 = sub nsw i32 1, %3
%31 = sitofp i32 %30 to double
%32 = fmul double %31, 5.000000e-01
%33 = sitofp i32 %4 to double
%34 = icmp eq i32 %5, 0
%35 = sitofp i32 %5 to double
%36 = zext i32 %3 to i64
br label %37
37: ; preds = %29, %66
%38 = phi i64 [ 0, %29 ], [ %67, %66 ]
%39 = phi double [ %32, %29 ], [ %68, %66 ]
%40 = fptrunc double %39 to float
%41 = fpext float %40 to double
%42 = fcmp une float %40, 0.000000e+00
br i1 %42, label %43, label %66
43: ; preds = %37
%44 = fmul double %41, 0x400921FB54442D18
%45 = fdiv double %44, %33
%46 = tail call i32 @sin(double %45)
%47 = mul nsw i32 %46, %4
%48 = sitofp i32 %47 to double
%49 = fdiv double %48, %44
%50 = getelementptr inbounds float, float* %1, i64 %38
%51 = load float, float* %50
%52 = fpext float %51 to double
%53 = fmul double %49, %52
%54 = fptrunc double %53 to float
store float %54, float* %50
br i1 %34, label %66, label %55
55: ; preds = %43
%56 = fdiv double %44, %35
%57 = tail call i32 @sin(double %56)
%58 = mul nsw i32 %57, %5
%59 = sitofp i32 %58 to double
%60 = fdiv double %59, %44
%61 = getelementptr inbounds float, float* %2, i64 %38
%62 = load float, float* %61
%63 = fpext float %62 to double
%64 = fmul double %60, %63
%65 = fptrunc double %64 to float
store float %65, float* %61
br label %66
66: ; preds = %37, %55, %43
%67 = add nuw nsw i64 %38, 1
%68 = fadd double %41, 1.000000e+00
%69 = icmp eq i64 %67, %36
br i1 %69, label %70, label %37
70: ; preds = %66, %26
br i1 %7, label %71, label %268
71: ; preds = %70
%72 = add nsw i64 %11, -1
%73 = and i64 %11, 7
%74 = icmp ult i64 %72, 7
br i1 %74, label %77, label %75
75: ; preds = %71
%76 = and i64 %11, 4294967288
br label %213
77: ; preds = %213, %71
%78 = phi float [ undef, %71 ], [ %247, %213 ]
%79 = phi i64 [ 0, %71 ], [ %248, %213 ]
%80 = phi float [ 0.000000e+00, %71 ], [ %247, %213 ]
%81 = icmp eq i64 %73, 0
br i1 %81, label %92, label %82
82: ; preds = %77, %82
%83 = phi i64 [ %89, %82 ], [ %79, %77 ]
%84 = phi float [ %88, %82 ], [ %80, %77 ]
%85 = phi i64 [ %90, %82 ], [ 0, %77 ]
%86 = getelementptr inbounds float, float* %1, i64 %83
%87 = load float, float* %86
%88 = fadd float %84, %87
%89 = add nuw nsw i64 %83, 1
%90 = add i64 %85, 1
%91 = icmp eq i64 %90, %73
br i1 %91, label %92, label %82
92: ; preds = %82, %77
%93 = phi float [ %78, %77 ], [ %88, %82 ]
br i1 %7, label %94, label %268
94: ; preds = %92
%95 = fdiv float 2.000000e+00, %93
%96 = zext i32 %3 to i64
%97 = fdiv float 1.000000e+00, %95
%98 = select i1 %27, float %97, float %95
%99 = icmp ult i32 %3, 8
br i1 %99, label %196, label %100
100: ; preds = %94
%101 = getelementptr float, float* %1, i64 %11
%102 = getelementptr float, float* %2, i64 %11
%103 = icmp ugt float* %102, %1
%104 = icmp ugt float* %101, %2
%105 = and i1 %103, %104
br i1 %105, label %196, label %106
106: ; preds = %100
%107 = and i64 %11, 4294967288
%108 = insertelement <4 x float> poison, float %95, i64 0
%109 = shufflevector <4 x float> %108, <4 x float> poison, <4 x i32> zeroinitializer
%110 = insertelement <4 x float> poison, float %95, i64 0
%111 = shufflevector <4 x float> %110, <4 x float> poison, <4 x i32> zeroinitializer
%112 = insertelement <4 x float> poison, float %98, i64 0
%113 = shufflevector <4 x float> %112, <4 x float> poison, <4 x i32> zeroinitializer
%114 = insertelement <4 x float> poison, float %98, i64 0
%115 = shufflevector <4 x float> %114, <4 x float> poison, <4 x i32> zeroinitializer
%116 = add nsw i64 %107, -8
%117 = lshr exact i64 %116, 3
%118 = add nuw nsw i64 %117, 1
%119 = and i64 %118, 1
%120 = icmp eq i64 %116, 0
br i1 %120, label %170, label %121
121: ; preds = %106
%122 = and i64 %118, 4611686018427387902
br label %123
123: ; preds = %123, %121
%124 = phi i64 [ 0, %121 ], [ %167, %123 ]
%125 = phi i64 [ 0, %121 ], [ %168, %123 ]
%126 = getelementptr inbounds float, float* %1, i64 %124
%127 = bitcast float* %126 to <4 x float>*
%128 = load <4 x float>, <4 x float>* %127
%129 = getelementptr inbounds float, float* %126, i64 4
%130 = bitcast float* %129 to <4 x float>*
%131 = load <4 x float>, <4 x float>* %130
%132 = fmul <4 x float> %109, %128
%133 = fmul <4 x float> %111, %131
%134 = bitcast float* %126 to <4 x float>*
store <4 x float> %132, <4 x float>* %134
%135 = bitcast float* %129 to <4 x float>*
store <4 x float> %133, <4 x float>* %135
%136 = getelementptr inbounds float, float* %2, i64 %124
%137 = bitcast float* %136 to <4 x float>*
%138 = load <4 x float>, <4 x float>* %137
%139 = getelementptr inbounds float, float* %136, i64 4
%140 = bitcast float* %139 to <4 x float>*
%141 = load <4 x float>, <4 x float>* %140
%142 = fmul <4 x float> %113, %138
%143 = fmul <4 x float> %115, %141
%144 = bitcast float* %136 to <4 x float>*
store <4 x float> %142, <4 x float>* %144
%145 = bitcast float* %139 to <4 x float>*
store <4 x float> %143, <4 x float>* %145
%146 = or i64 %124, 8
%147 = getelementptr inbounds float, float* %1, i64 %146
%148 = bitcast float* %147 to <4 x float>*
%149 = load <4 x float>, <4 x float>* %148
%150 = getelementptr inbounds float, float* %147, i64 4
%151 = bitcast float* %150 to <4 x float>*
%152 = load <4 x float>, <4 x float>* %151
%153 = fmul <4 x float> %109, %149
%154 = fmul <4 x float> %111, %152
%155 = bitcast float* %147 to <4 x float>*
store <4 x float> %153, <4 x float>* %155
%156 = bitcast float* %150 to <4 x float>*
store <4 x float> %154, <4 x float>* %156
%157 = getelementptr inbounds float, float* %2, i64 %146
%158 = bitcast float* %157 to <4 x float>*
%159 = load <4 x float>, <4 x float>* %158
%160 = getelementptr inbounds float, float* %157, i64 4
%161 = bitcast float* %160 to <4 x float>*
%162 = load <4 x float>, <4 x float>* %161
%163 = fmul <4 x float> %113, %159
%164 = fmul <4 x float> %115, %162
%165 = bitcast float* %157 to <4 x float>*
store <4 x float> %163, <4 x float>* %165
%166 = bitcast float* %160 to <4 x float>*
store <4 x float> %164, <4 x float>* %166
%167 = add nuw i64 %124, 16
%168 = add i64 %125, 2
%169 = icmp eq i64 %168, %122
br i1 %169, label %170, label %123
170: ; preds = %123, %106
%171 = phi i64 [ 0, %106 ], [ %167, %123 ]
%172 = icmp eq i64 %119, 0
br i1 %172, label %194, label %173
173: ; preds = %170
%174 = getelementptr inbounds float, float* %1, i64 %171
%175 = bitcast float* %174 to <4 x float>*
%176 = load <4 x float>, <4 x float>* %175
%177 = getelementptr inbounds float, float* %174, i64 4
%178 = bitcast float* %177 to <4 x float>*
%179 = load <4 x float>, <4 x float>* %178
%180 = fmul <4 x float> %109, %176
%181 = fmul <4 x float> %111, %179
%182 = bitcast float* %174 to <4 x float>*
store <4 x float> %180, <4 x float>* %182
%183 = bitcast float* %177 to <4 x float>*
store <4 x float> %181, <4 x float>* %183
%184 = getelementptr inbounds float, float* %2, i64 %171
%185 = bitcast float* %184 to <4 x float>*
%186 = load <4 x float>, <4 x float>* %185
%187 = getelementptr inbounds float, float* %184, i64 4
%188 = bitcast float* %187 to <4 x float>*
%189 = load <4 x float>, <4 x float>* %188
%190 = fmul <4 x float> %113, %186
%191 = fmul <4 x float> %115, %189
%192 = bitcast float* %184 to <4 x float>*
store <4 x float> %190, <4 x float>* %192
%193 = bitcast float* %187 to <4 x float>*
store <4 x float> %191, <4 x float>* %193
br label %194
194: ; preds = %170, %173
%195 = icmp eq i64 %107, %11
br i1 %195, label %268, label %196
196: ; preds = %100, %94, %194
%197 = phi i64 [ 0, %100 ], [ 0, %94 ], [ %107, %194 ]
%198 = xor i64 %197, -1
%199 = and i64 %11, 1
%200 = icmp eq i64 %199, 0
br i1 %200, label %209, label %201
201: ; preds = %196
%202 = getelementptr inbounds float, float* %1, i64 %197
%203 = load float, float* %202
%204 = fmul float %95, %203
store float %204, float* %202
%205 = getelementptr inbounds float, float* %2, i64 %197
%206 = load float, float* %205
%207 = fmul float %98, %206
store float %207, float* %205
%208 = or i64 %197, 1
br label %209
209: ; preds = %201, %196
%210 = phi i64 [ %197, %196 ], [ %208, %201 ]
%211 = sub nsw i64 0, %11
%212 = icmp eq i64 %198, %211
br i1 %212, label %268, label %251
213: ; preds = %213, %75
%214 = phi i64 [ 0, %75 ], [ %248, %213 ]
%215 = phi float [ 0.000000e+00, %75 ], [ %247, %213 ]
%216 = phi i64 [ 0, %75 ], [ %249, %213 ]
%217 = getelementptr inbounds float, float* %1, i64 %214
%218 = load float, float* %217
%219 = fadd float %215, %218
%220 = or i64 %214, 1
%221 = getelementptr inbounds float, float* %1, i64 %220
%222 = load float, float* %221
%223 = fadd float %219, %222
%224 = or i64 %214, 2
%225 = getelementptr inbounds float, float* %1, i64 %224
%226 = load float, float* %225
%227 = fadd float %223, %226
%228 = or i64 %214, 3
%229 = getelementptr inbounds float, float* %1, i64 %228
%230 = load float, float* %229
%231 = fadd float %227, %230
%232 = or i64 %214, 4
%233 = getelementptr inbounds float, float* %1, i64 %232
%234 = load float, float* %233
%235 = fadd float %231, %234
%236 = or i64 %214, 5
%237 = getelementptr inbounds float, float* %1, i64 %236
%238 = load float, float* %237
%239 = fadd float %235, %238
%240 = or i64 %214, 6
%241 = getelementptr inbounds float, float* %1, i64 %240
%242 = load float, float* %241
%243 = fadd float %239, %242
%244 = or i64 %214, 7
%245 = getelementptr inbounds float, float* %1, i64 %244
%246 = load float, float* %245
%247 = fadd float %243, %246
%248 = add nuw nsw i64 %214, 8
%249 = add i64 %216, 8
%250 = icmp eq i64 %249, %76
br i1 %250, label %77, label %213
251: ; preds = %209, %251
%252 = phi i64 [ %266, %251 ], [ %210, %209 ]
%253 = getelementptr inbounds float, float* %1, i64 %252
%254 = load float, float* %253
%255 = fmul float %95, %254
store float %255, float* %253
%256 = getelementptr inbounds float, float* %2, i64 %252
%257 = load float, float* %256
%258 = fmul float %98, %257
store float %258, float* %256
%259 = add nuw nsw i64 %252, 1
%260 = getelementptr inbounds float, float* %1, i64 %259
%261 = load float, float* %260
%262 = fmul float %95, %261
store float %262, float* %260
%263 = getelementptr inbounds float, float* %2, i64 %259
%264 = load float, float* %263
%265 = fmul float %98, %264
store float %265, float* %263
%266 = add nuw nsw i64 %252, 2
%267 = icmp eq i64 %266, %96
br i1 %267, label %268, label %251
268: ; preds = %209, %251, %194, %6, %28, %70, %92
%269 = icmp sgt i32 %3, %4
%270 = icmp eq i32 %5, 0
%271 = or i1 %269, %270
%272 = xor i1 %7, true
%273 = or i1 %271, %272
br i1 %273, label %355, label %274
274: ; preds = %268
%275 = sext i32 %5 to i64
%276 = zext i32 %3 to i64
br label %277
277: ; preds = %274, %277
%278 = phi i64 [ 0, %274 ], [ %283, %277 ]
%279 = phi float [ 0.000000e+00, %274 ], [ %282, %277 ]
%280 = getelementptr inbounds float, float* %2, i64 %278
%281 = load float, float* %280
%282 = tail call float @llvm.fmuladd.f32(float %281, float %281, float %279)
%283 = add i64 %278, %275
%284 = icmp slt i64 %283, %276
br i1 %284, label %277, label %285
285: ; preds = %277
%286 = fdiv float 1.000000e+00, %282
br i1 %7, label %287, label %355
287: ; preds = %285
%288 = zext i32 %3 to i64
%289 = icmp ult i32 %3, 8
br i1 %289, label %346, label %290
290: ; preds = %287
%291 = and i64 %276, 4294967288
%292 = insertelement <4 x float> poison, float %286, i64 0
%293 = shufflevector <4 x float> %292, <4 x float> poison, <4 x i32> zeroinitializer
%294 = insertelement <4 x float> poison, float %286, i64 0
%295 = shufflevector <4 x float> %294, <4 x float> poison, <4 x i32> zeroinitializer
%296 = add nsw i64 %291, -8
%297 = lshr exact i64 %296, 3
%298 = add nuw nsw i64 %297, 1
%299 = and i64 %298, 1
%300 = icmp eq i64 %296, 0
br i1 %300, label %330, label %301
301: ; preds = %290
%302 = and i64 %298, 4611686018427387902
br label %303
303: ; preds = %303, %301
%304 = phi i64 [ 0, %301 ], [ %327, %303 ]
%305 = phi i64 [ 0, %301 ], [ %328, %303 ]
%306 = getelementptr inbounds float, float* %2, i64 %304
%307 = bitcast float* %306 to <4 x float>*
%308 = load <4 x float>, <4 x float>* %307
%309 = getelementptr inbounds float, float* %306, i64 4
%310 = bitcast float* %309 to <4 x float>*
%311 = load <4 x float>, <4 x float>* %310
%312 = fmul <4 x float> %293, %308
%313 = fmul <4 x float> %295, %311
%314 = bitcast float* %306 to <4 x float>*
store <4 x float> %312, <4 x float>* %314
%315 = bitcast float* %309 to <4 x float>*
store <4 x float> %313, <4 x float>* %315
%316 = or i64 %304, 8
%317 = getelementptr inbounds float, float* %2, i64 %316
%318 = bitcast float* %317 to <4 x float>*
%319 = load <4 x float>, <4 x float>* %318
%320 = getelementptr inbounds float, float* %317, i64 4
%321 = bitcast float* %320 to <4 x float>*
%322 = load <4 x float>, <4 x float>* %321
%323 = fmul <4 x float> %293, %319
%324 = fmul <4 x float> %295, %322
%325 = bitcast float* %317 to <4 x float>*
store <4 x float> %323, <4 x float>* %325
%326 = bitcast float* %320 to <4 x float>*
store <4 x float> %324, <4 x float>* %326
%327 = add nuw i64 %304, 16
%328 = add i64 %305, 2
%329 = icmp eq i64 %328, %302
br i1 %329, label %330, label %303
330: ; preds = %303, %290
%331 = phi i64 [ 0, %290 ], [ %327, %303 ]
%332 = icmp eq i64 %299, 0
br i1 %332, label %344, label %333
333: ; preds = %330
%334 = getelementptr inbounds float, float* %2, i64 %331
%335 = bitcast float* %334 to <4 x float>*
%336 = load <4 x float>, <4 x float>* %335
%337 = getelementptr inbounds float, float* %334, i64 4
%338 = bitcast float* %337 to <4 x float>*
%339 = load <4 x float>, <4 x float>* %338
%340 = fmul <4 x float> %293, %336
%341 = fmul <4 x float> %295, %339
%342 = bitcast float* %334 to <4 x float>*
store <4 x float> %340, <4 x float>* %342
%343 = bitcast float* %337 to <4 x float>*
store <4 x float> %341, <4 x float>* %343
br label %344
344: ; preds = %330, %333
%345 = icmp eq i64 %291, %276
br i1 %345, label %355, label %346
346: ; preds = %287, %344
%347 = phi i64 [ 0, %287 ], [ %291, %344 ]
br label %348
348: ; preds = %346, %348
%349 = phi i64 [ %353, %348 ], [ %347, %346 ]
%350 = getelementptr inbounds float, float* %2, i64 %349
%351 = load float, float* %350
%352 = fmul float %286, %351
store float %352, float* %350
%353 = add nuw nsw i64 %349, 1
%354 = icmp eq i64 %353, %288
br i1 %354, label %355, label %348
355: ; preds = %348, %344, %268, %285
ret void
}