#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 */
int /*<<< orphan*/ zapit(float *, int);
int gen_2tri_stfOLD(float *slip, float *trise, float *stf, int nt, float *dt,
                    float *z0) {
  int it, nstf;
  int ip, it0, it1, it2;
  float tr, amp, a0;
  float sum;
  float alpha = 0.1;
  float betadeep = 0.2;
  float betashal = 0.5;
  float beta, dbdd;
  float dmin = 4.0;
  float dmax = 8.0;
  float rtfac;
  float rtfac0 = 1.0;
  dbdd = (betadeep - betashal) / (dmax - dmin);
  if ((*z0) >= dmax)
    beta = betadeep;
  else if ((*z0) < dmax && (*z0) > dmin)
    beta = betadeep - (dmax - (*z0)) * dbdd;
  else
    beta = betashal;
  zapit(stf, nt);
  if ((*z0) >= dmax)
    rtfac = 1.0;
  else if ((*z0) < dmax && (*z0) > dmin)
    rtfac = 1.0 + rtfac0 * (dmax - (*z0)) / (dmax - dmin);
  else
    rtfac = 1.0 + rtfac0;
  tr = (*trise) * rtfac;
  alpha = alpha * tr;
  it0 = (int)((alpha) / (*dt) + 0.5);
  if (it0 < 2)
    it0 = 2;
  it1 = (int)((tr) / (*dt) + 0.5);
  if (it1 < 4)
    it1 = 4;
  it2 = (2 - beta) * it0;
  a0 = 1.0;
  amp = a0 / (float)(it0);
  for (it = 0; it < it0; it++)
    stf[it] = it * amp;
  for (it = it0; it < it2; it++)
    stf[it] = (2 * it0 - it) * amp;
  amp = beta * a0 / (float)(it1 - it2);
  for (it = it2; it < it1; it++)
    stf[it] = beta * a0 + (it2 - it) * amp;
  nstf = nt - 1;
  while (stf[nstf] == (float)(0.0) && nstf)
    nstf--;
  if (nstf == 0)
    return (0);
  if (nstf < nt - 1)
    nstf = nstf + 2;
  ;
  sum = 0.0;
  for (it = 0; it < nstf; it++)
    sum = sum + (*dt) * stf[it];
  if (sum <= 0.0)
    return (0);
  sum = (*slip) / sum;
  for (it = 0; it < nstf; it++)
    stf[it] = stf[it] * sum;
  return (nstf);
}


x86 assembly (clang, -O0):
<gen_2tri_stfOLD>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
movss  0xeda(%rip),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  0xec9(%rip),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  0xeb8(%rip),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  0xea7(%rip),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  0xe96(%rip),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  0xe85(%rip),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x68(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
movss  -0x7c(%rbp),%xmm1
subss  -0x78(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x7c(%rbp),%xmm0
jb     11c1 <gen_2tri_stfOLD+0xb1>
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
jmp    122e <gen_2tri_stfOLD+0x11e>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm1
movss  -0x7c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    121f <gen_2tri_stfOLD+0x10f>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x78(%rbp),%xmm0
jbe    121f <gen_2tri_stfOLD+0x10f>
movss  -0x68(%rbp),%xmm1
movss  -0x7c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
subss  (%rax),%xmm0
movss  -0x74(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
jmp    1229 <gen_2tri_stfOLD+0x119>
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
jmp    122e <gen_2tri_stfOLD+0x11e>
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
call   1030 <zapit@plt>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x7c(%rbp),%xmm0
jb     125e <gen_2tri_stfOLD+0x14e>
movss  0xdac(%rip),%xmm0
movss  %xmm0,-0x80(%rbp)
jmp    12f1 <gen_2tri_stfOLD+0x1e1>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm1
movss  -0x7c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12cb <gen_2tri_stfOLD+0x1bb>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x78(%rbp),%xmm0
jbe    12cb <gen_2tri_stfOLD+0x1bb>
movss  -0x84(%rbp),%xmm0
ff
movss  -0x7c(%rbp),%xmm1
mov    -0x38(%rbp),%rax
subss  (%rax),%xmm1
mulss  %xmm1,%xmm0
movss  -0x7c(%rbp),%xmm1
subss  -0x78(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd67(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x80(%rbp)
jmp    12ec <gen_2tri_stfOLD+0x1dc>
movss  -0x84(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0xd41(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x80(%rbp)
jmp    12f1 <gen_2tri_stfOLD+0x1e1>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
mulss  -0x80(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x64(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x64(%rbp),%xmm0
mov    -0x30(%rbp),%rax
divss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcfd(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x2,-0x48(%rbp)
jge    1347 <gen_2tri_stfOLD+0x237>
movl   $0x2,-0x48(%rbp)
movss  -0x54(%rbp),%xmm0
mov    -0x30(%rbp),%rax
divss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcc8(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x4,-0x4c(%rbp)
jge    137c <gen_2tri_stfOLD+0x26c>
movl   $0x4,-0x4c(%rbp)
movss  0xc94(%rip),%xmm0
subss  -0x70(%rbp),%xmm0
cvtsi2ssl -0x48(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
movss  0xc5f(%rip),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
cvtsi2ssl -0x48(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    13f1 <gen_2tri_stfOLD+0x2e1>
cvtsi2ssl -0x3c(%rbp),%xmm0
mulss  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    13c0 <gen_2tri_stfOLD+0x2b0>
mov    -0x48(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    1430 <gen_2tri_stfOLD+0x320>
mov    -0x48(%rbp),%eax
shl    $0x1,%eax
sub    -0x3c(%rbp),%eax
cvtsi2ss %eax,%xmm0
mulss  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    13f7 <gen_2tri_stfOLD+0x2e7>
movss  -0x70(%rbp),%xmm0
mulss  -0x5c(%rbp),%xmm0
mov    -0x4c(%rbp),%eax
sub    -0x50(%rbp),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    149b <gen_2tri_stfOLD+0x38b>
movss  -0x70(%rbp),%xmm0
movss  -0x5c(%rbp),%xmm2
mov    -0x50(%rbp),%eax
sub    -0x3c(%rbp),%eax
cvtsi2ss %eax,%xmm1
mulss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1453 <gen_2tri_stfOLD+0x343>
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
mov    %al,-0x85(%rbp)
jne    14d8 <gen_2tri_stfOLD+0x3c8>
jp     14d8 <gen_2tri_stfOLD+0x3c8>
cmpl   $0x0,-0x40(%rbp)
setne  %al
mov    %al,-0x85(%rbp)
mov    -0x85(%rbp),%al
test   $0x1,%al
jne    14eb <gen_2tri_stfOLD+0x3db>
jmp    14f9 <gen_2tri_stfOLD+0x3e9>
mov    -0x40(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x40(%rbp)
jmp    14a4 <gen_2tri_stfOLD+0x394>
cmpl   $0x0,-0x40(%rbp)
jne    150f <gen_2tri_stfOLD+0x3ff>
movl   $0x0,-0x4(%rbp)
jmp    15f3 <gen_2tri_stfOLD+0x4e3>
mov    -0x40(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1529 <gen_2tri_stfOLD+0x419>
mov    -0x40(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x40(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1579 <gen_2tri_stfOLD+0x469>
movss  -0x60(%rbp),%xmm1
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1538 <gen_2tri_stfOLD+0x428>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     159b <gen_2tri_stfOLD+0x48b>
movl   $0x0,-0x4(%rbp)
jmp    15f3 <gen_2tri_stfOLD+0x4e3>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
divss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    15ed <gen_2tri_stfOLD+0x4dd>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    15b4 <gen_2tri_stfOLD+0x4a4>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gen_2tri_stfOLD>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r9,%rbp
mov    %r8,%r15
mov    %ecx,%ebx
mov    %rdx,%r12
mov    %rsi,%r13
mov    %rdi,%r14
movss  (%r9),%xmm1
ucomiss 0xec9(%rip),%xmm1
jae    1174 <gen_2tri_stfOLD+0x64>
movss  0xebf(%rip),%xmm0
ucomiss %xmm1,%xmm0
movss  0xeb8(%rip),%xmm2
jbe    117c <gen_2tri_stfOLD+0x6c>
ucomiss 0xeb3(%rip),%xmm1
jbe    117c <gen_2tri_stfOLD+0x6c>
subss  %xmm1,%xmm0
mulss  0xea9(%rip),%xmm0
addss  0xe91(%rip),%xmm0
movaps %xmm0,%xmm2
jmp    117c <gen_2tri_stfOLD+0x6c>
movss  0xe84(%rip),%xmm2
movaps %xmm2,(%rsp)
mov    %r12,%rdi
mov    %ebx,%esi
call   1030 <zapit@plt>
movaps (%rsp),%xmm11
movss  0x0(%rbp),%xmm2
movss  0xe78(%rip),%xmm0
ucomiss 0xe61(%rip),%xmm2
movaps %xmm0,%xmm1
jae    11dd <gen_2tri_stfOLD+0xcd>
movss  0xe54(%rip),%xmm3
ucomiss %xmm2,%xmm3
movss  0xe5d(%rip),%xmm1
jbe    11dd <gen_2tri_stfOLD+0xcd>
ucomiss 0xe48(%rip),%xmm2
jbe    11dd <gen_2tri_stfOLD+0xcd>
subss  %xmm2,%xmm3
mulss  0xe4a(%rip),%xmm3
addss  0xe3a(%rip),%xmm3
movaps %xmm3,%xmm1
mulss  0x0(%r13),%xmm1
movss  0xe35(%rip),%xmm2
mulss  %xmm1,%xmm2
movss  (%r15),%xmm3
divss  %xmm3,%xmm2
cvtss2sd %xmm2,%xmm2
movsd  0xe24(%rip),%xmm4
addsd  %xmm4,%xmm2
cvttsd2si %xmm2,%ecx
cmp    $0x3,%ecx
mov    $0x2,%eax
cmovge %ecx,%eax
divss  %xmm3,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm4,%xmm1
cvttsd2si %xmm1,%ecx
movss  0xde8(%rip),%xmm8
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
subss  %xmm11,%xmm8
mulss  %xmm2,%xmm8
divss  %xmm2,%xmm0
cmp    $0x8,%eax
jae    1251 <gen_2tri_stfOLD+0x141>
xor    %edx,%edx
jmp    1330 <gen_2tri_stfOLD+0x220>
mov    %eax,%edx
and    $0x7ffffff8,%edx
movaps %xmm0,%xmm2
shufps $0x0,%xmm0,%xmm2
lea    -0x8(%rdx),%rsi
mov    %rsi,%rbp
shr    $0x3,%rbp
add    $0x1,%rbp
test   %rsi,%rsi
je     1681 <gen_2tri_stfOLD+0x571>
mov    %rbp,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xda9(%rip),%xmm1
xor    %esi,%esi
movdqa 0xdae(%rip),%xmm9
movdqa 0xdb6(%rip),%xmm5
movdqa 0xdbe(%rip),%xmm6
movdqa 0xdc6(%rip),%xmm7
nopw   0x0(%rax,%rax,1)
movdqa %xmm1,%xmm3
paddd  %xmm9,%xmm3
cvtdq2ps %xmm1,%xmm4
cvtdq2ps %xmm3,%xmm3
mulps  %xmm2,%xmm4
mulps  %xmm2,%xmm3
movups %xmm4,(%r12,%rsi,4)
movups %xmm3,0x10(%r12,%rsi,4)
movdqa %xmm1,%xmm3
paddd  %xmm5,%xmm3
movdqa %xmm1,%xmm4
paddd  %xmm6,%xmm4
cvtdq2ps %xmm3,%xmm3
cvtdq2ps %xmm4,%xmm4
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm4
movups %xmm3,0x20(%r12,%rsi,4)
movups %xmm4,0x30(%r12,%rsi,4)
add    $0x10,%rsi
paddd  %xmm7,%xmm1
add    $0xfffffffffffffffe,%rdi
jne    12b0 <gen_2tri_stfOLD+0x1a0>
test   $0x1,%bpl
je     132b <gen_2tri_stfOLD+0x21b>
cvtdq2ps %xmm1,%xmm3
paddd  0xd29(%rip),%xmm1
cvtdq2ps %xmm1,%xmm1
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm1
movups %xmm3,(%r12,%rsi,4)
movups %xmm1,0x10(%r12,%rsi,4)
cmp    %rax,%rdx
je     134a <gen_2tri_stfOLD+0x23a>
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    1330 <gen_2tri_stfOLD+0x220>
cmp    $0x5,%ecx
mov    $0x4,%r11d
cmovge %ecx,%r11d
cvttss2si %xmm8,%ecx
cmp    %ecx,%eax
jge    149d <gen_2tri_stfOLD+0x38d>
lea    (%rax,%rax,1),%esi
mov    %ecx,%r13d
mov    %r13,%r9
sub    %rax,%r9
cmp    $0x8,%r9
jb     147c <gen_2tri_stfOLD+0x36c>
mov    %r9,%r8
movd   %eax,%xmm1
pshufd $0x0,%xmm1,%xmm3
paddd  0xca2(%rip),%xmm3
and    $0xfffffffffffffff8,%r8
movd   %esi,%xmm1
pshufd $0x0,%xmm1,%xmm4
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x8(%r8),%rdx
mov    %rdx,%r10
shr    $0x3,%r10
add    $0x1,%r10
test   %rdx,%rdx
je     169a <gen_2tri_stfOLD+0x58a>
mov    %r10,%rdx
and    $0xfffffffffffffffe,%rdx
lea    (%r12,%rax,4),%rdi
add    $0x30,%rdi
xor    %ebp,%ebp
movdqa 0xc6c(%rip),%xmm8
movdqa 0xc73(%rip),%xmm9
movdqa 0xc7a(%rip),%xmm10
movdqa 0xc82(%rip),%xmm7
xchg   %ax,%ax
movdqa %xmm4,%xmm2
psubd  %xmm3,%xmm2
movdqa %xmm2,%xmm5
psubd  %xmm8,%xmm5
cvtdq2ps %xmm2,%xmm6
cvtdq2ps %xmm5,%xmm5
mulps  %xmm1,%xmm6
mulps  %xmm1,%xmm5
movups %xmm6,-0x30(%rdi,%rbp,4)
movups %xmm5,-0x20(%rdi,%rbp,4)
movdqa %xmm2,%xmm5
psubd  %xmm9,%xmm5
psubd  %xmm10,%xmm2
cvtdq2ps %xmm5,%xmm5
cvtdq2ps %xmm2,%xmm2
mulps  %xmm1,%xmm5
mulps  %xmm1,%xmm2
movups %xmm5,-0x10(%rdi,%rbp,4)
movups %xmm2,(%rdi,%rbp,4)
add    $0x10,%rbp
paddd  %xmm7,%xmm3
add    $0xfffffffffffffffe,%rdx
jne    13f0 <gen_2tri_stfOLD+0x2e0>
test   $0x1,%r10b
je     1474 <gen_2tri_stfOLD+0x364>
add    %rax,%rbp
psubd  %xmm3,%xmm4
cvtdq2ps %xmm4,%xmm2
psubd  0xbe0(%rip),%xmm4
cvtdq2ps %xmm4,%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%r12,%rbp,4)
movups %xmm3,0x10(%r12,%rbp,4)
cmp    %r8,%r9
je     149d <gen_2tri_stfOLD+0x38d>
add    %r8,%rax
sub    %eax,%esi
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rax,4)
add    $0x1,%rax
add    $0xffffffff,%esi
cmp    %rax,%r13
jne    1480 <gen_2tri_stfOLD+0x370>
mov    %r11d,%eax
sub    %ecx,%eax
jle    1582 <gen_2tri_stfOLD+0x472>
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movaps %xmm11,%xmm0
divss  %xmm1,%xmm0
movslq %ecx,%rsi
mov    %r11d,%eax
mov    %rax,%r8
sub    %rsi,%r8
cmp    $0x8,%r8
jae    14d1 <gen_2tri_stfOLD+0x3c1>
mov    %rsi,%rdx
jmp    155b <gen_2tri_stfOLD+0x44b>
mov    %r8,%rdi
and    $0xfffffffffffffff8,%rdi
lea    (%rdi,%rsi,1),%rdx
movd   %ecx,%xmm1
pshufd $0x0,%xmm1,%xmm1
movdqa 0xb43(%rip),%xmm2
paddd  %xmm1,%xmm2
movaps %xmm0,%xmm3
shufps $0x0,%xmm0,%xmm3
movaps %xmm11,%xmm4
shufps $0x0,%xmm11,%xmm4
lea    (%r12,%rsi,4),%rbp
add    $0x10,%rbp
xor    %esi,%esi
movdqa 0xb2c(%rip),%xmm8
movdqa 0xb34(%rip),%xmm6
nopl   0x0(%rax)
movdqa %xmm1,%xmm7
psubd  %xmm2,%xmm7
cvtdq2ps %xmm7,%xmm5
psubd  %xmm8,%xmm7
cvtdq2ps %xmm7,%xmm7
mulps  %xmm3,%xmm5
mulps  %xmm3,%xmm7
addps  %xmm4,%xmm5
addps  %xmm4,%xmm7
movups %xmm5,-0x10(%rbp,%rsi,4)
movups %xmm7,0x0(%rbp,%rsi,4)
add    $0x8,%rsi
paddd  %xmm6,%xmm2
cmp    %rsi,%rdi
jne    1520 <gen_2tri_stfOLD+0x410>
cmp    %rdi,%r8
je     1582 <gen_2tri_stfOLD+0x472>
sub    %edx,%ecx
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
mulss  %xmm0,%xmm1
addss  %xmm11,%xmm1
movss  %xmm1,(%r12,%rdx,4)
add    $0x1,%rdx
add    $0xffffffff,%ecx
cmp    %rdx,%rax
jne    1560 <gen_2tri_stfOLD+0x450>
lea    -0x1(%rbx),%edx
movslq %edx,%rax
xorps  %xmm0,%xmm0
nopl   0x0(%rax,%rax,1)
movss  (%r12,%rax,4),%xmm1
add    $0xffffffffffffffff,%rax
setb   %cl
add    $0xffffffff,%ebx
ucomiss %xmm0,%xmm1
jne    15ab <gen_2tri_stfOLD+0x49b>
jp     15ab <gen_2tri_stfOLD+0x49b>
test   %cl,%cl
jne    1590 <gen_2tri_stfOLD+0x480>
xor    %eax,%eax
test   %ebx,%ebx
je     176b <gen_2tri_stfOLD+0x65b>
lea    0x2(%rbx),%ecx
cmp    %ebx,%edx
cmovle %ebx,%ecx
test   %ecx,%ecx
jle    176b <gen_2tri_stfOLD+0x65b>
movss  (%r15),%xmm0
mov    %ecx,%edx
lea    -0x1(%rdx),%rsi
mov    %edx,%eax
and    $0x3,%eax
cmp    $0x3,%rsi
jae    15e2 <gen_2tri_stfOLD+0x4d2>
xorps  %xmm1,%xmm1
xor    %esi,%esi
jmp    1634 <gen_2tri_stfOLD+0x524>
mov    %edx,%edi
and    $0xfffffffc,%edi
xorps  %xmm1,%xmm1
xor    %esi,%esi
nopl   0x0(%rax)
movss  (%r12,%rsi,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  0x4(%r12,%rsi,4),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  0x8(%r12,%rsi,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  0xc(%r12,%rsi,4),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm1
add    $0x4,%rsi
cmp    %rsi,%rdi
jne    15f0 <gen_2tri_stfOLD+0x4e0>
test   %rax,%rax
je     1656 <gen_2tri_stfOLD+0x546>
lea    (%r12,%rsi,4),%rsi
xor    %edi,%edi
nop
movss  (%rsi,%rdi,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm2,%xmm1
add    $0x1,%rdi
cmp    %rdi,%rax
jne    1640 <gen_2tri_stfOLD+0x530>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jae    176b <gen_2tri_stfOLD+0x65b>
test   %ecx,%ecx
jle    1769 <gen_2tri_stfOLD+0x659>
movss  (%r14),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%ecx
jae    16ab <gen_2tri_stfOLD+0x59b>
xor    %eax,%eax
jmp    1750 <gen_2tri_stfOLD+0x640>
movdqa 0x9a7(%rip),%xmm1
xor    %esi,%esi
test   $0x1,%bpl
jne    130c <gen_2tri_stfOLD+0x1fc>
jmp    132b <gen_2tri_stfOLD+0x21b>
xor    %ebp,%ebp
test   $0x1,%r10b
jne    144e <gen_2tri_stfOLD+0x33e>
jmp    1474 <gen_2tri_stfOLD+0x364>
mov    %edx,%eax
and    $0xfffffff8,%eax
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x8(%rax),%rsi
mov    %rsi,%rbp
shr    $0x3,%rbp
add    $0x1,%rbp
test   %rsi,%rsi
je     177a <gen_2tri_stfOLD+0x66a>
mov    %rbp,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movups (%r12,%rsi,4),%xmm2
movups 0x10(%r12,%rsi,4),%xmm3
movups 0x20(%r12,%rsi,4),%xmm4
movups 0x30(%r12,%rsi,4),%xmm5
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%r12,%rsi,4)
movups %xmm3,0x10(%r12,%rsi,4)
mulps  %xmm1,%xmm4
mulps  %xmm1,%xmm5
movups %xmm4,0x20(%r12,%rsi,4)
movups %xmm5,0x30(%r12,%rsi,4)
add    $0x10,%rsi
add    $0xfffffffffffffffe,%rdi
jne    16e0 <gen_2tri_stfOLD+0x5d0>
test   $0x1,%bpl
je     1746 <gen_2tri_stfOLD+0x636>
movups (%r12,%rsi,4),%xmm2
movups 0x10(%r12,%rsi,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%r12,%rsi,4)
movups %xmm3,0x10(%r12,%rsi,4)
cmp    %rdx,%rax
je     1769 <gen_2tri_stfOLD+0x659>
nopl   0x0(%rax,%rax,1)
movss  (%r12,%rax,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rax,4)
add    $0x1,%rax
cmp    %rax,%rdx
jne    1750 <gen_2tri_stfOLD+0x640>
mov    %ecx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %esi,%esi
test   $0x1,%bpl
jne    172a <gen_2tri_stfOLD+0x61a>
jmp    1746 <gen_2tri_stfOLD+0x636>

LLVM IR (-O0):
define i32 @gen_2tri_stfOLD(float* %0, float* %1, float* %2, i32 %3, float* %4, float* %5) {
%7 = alloca i32
%8 = alloca float*
%9 = alloca float*
%10 = alloca float*
%11 = alloca i32
%12 = alloca float*
%13 = alloca float*
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
store float* %0, float** %8
store float* %1, float** %9
store float* %2, float** %10
store i32 %3, i32* %11
store float* %4, float** %12
store float* %5, float** %13
store float 0x3FB99999A0000000, float* %24
store float 0x3FC99999A0000000, float* %25
store float 5.000000e-01, float* %26
store float 4.000000e+00, float* %29
store float 8.000000e+00, float* %30
store float 1.000000e+00, float* %32
%33 = load float, float* %25
%34 = load float, float* %26
%35 = fsub float %33, %34
%36 = load float, float* %30
%37 = load float, float* %29
%38 = fsub float %36, %37
%39 = fdiv float %35, %38
store float %39, float* %28
%40 = load float*, float** %13
%41 = load float, float* %40
%42 = load float, float* %30
%43 = fcmp oge float %41, %42
br i1 %43, label %44, label %46
44: ; preds = %6
%45 = load float, float* %25
store float %45, float* %27
br label %68
46: ; preds = %6
%47 = load float*, float** %13
%48 = load float, float* %47
%49 = load float, float* %30
%50 = fcmp olt float %48, %49
br i1 %50, label %51, label %65
51: ; preds = %46
%52 = load float*, float** %13
%53 = load float, float* %52
%54 = load float, float* %29
%55 = fcmp ogt float %53, %54
br i1 %55, label %56, label %65
56: ; preds = %51
%57 = load float, float* %25
%58 = load float, float* %30
%59 = load float*, float** %13
%60 = load float, float* %59
%61 = fsub float %58, %60
%62 = load float, float* %28
%63 = fneg float %61
%64 = call float @llvm.fmuladd.f32(float %63, float %62, float %57)
store float %64, float* %27
br label %67
65: ; preds = %51, %46
%66 = load float, float* %26
store float %66, float* %27
br label %67
67: ; preds = %65, %56
br label %68
68: ; preds = %67, %44
%69 = load float*, float** %10
%70 = load i32, i32* %11
%71 = call i32 @zapit(float* %69, i32 %70)
%72 = load float*, float** %13
%73 = load float, float* %72
%74 = load float, float* %30
%75 = fcmp oge float %73, %74
br i1 %75, label %76, label %77
76: ; preds = %68
store float 1.000000e+00, float* %31
br label %107
77: ; preds = %68
%78 = load float*, float** %13
%79 = load float, float* %78
%80 = load float, float* %30
%81 = fcmp olt float %79, %80
br i1 %81, label %82, label %101
82: ; preds = %77
%83 = load float*, float** %13
%84 = load float, float* %83
%85 = load float, float* %29
%86 = fcmp ogt float %84, %85
br i1 %86, label %87, label %101
87: ; preds = %82
%88 = load float, float* %32
%89 = load float, float* %30
%90 = load float*, float** %13
%91 = load float, float* %90
%92 = fsub float %89, %91
%93 = fmul float %88, %92
%94 = load float, float* %30
%95 = load float, float* %29
%96 = fsub float %94, %95
%97 = fdiv float %93, %96
%98 = fpext float %97 to double
%99 = fadd double 1.000000e+00, %98
%100 = fptrunc double %99 to float
store float %100, float* %31
br label %106
101: ; preds = %82, %77
%102 = load float, float* %32
%103 = fpext float %102 to double
%104 = fadd double 1.000000e+00, %103
%105 = fptrunc double %104 to float
store float %105, float* %31
br label %106
106: ; preds = %101, %87
br label %107
107: ; preds = %106, %76
%108 = load float*, float** %9
%109 = load float, float* %108
%110 = load float, float* %31
%111 = fmul float %109, %110
store float %111, float* %20
%112 = load float, float* %24
%113 = load float, float* %20
%114 = fmul float %112, %113
store float %114, float* %24
%115 = load float, float* %24
%116 = load float*, float** %12
%117 = load float, float* %116
%118 = fdiv float %115, %117
%119 = fpext float %118 to double
%120 = fadd double %119, 5.000000e-01
%121 = fptosi double %120 to i32
store i32 %121, i32* %17
%122 = load i32, i32* %17
%123 = icmp slt i32 %122, 2
br i1 %123, label %124, label %125
124: ; preds = %107
store i32 2, i32* %17
br label %125
125: ; preds = %124, %107
%126 = load float, float* %20
%127 = load float*, float** %12
%128 = load float, float* %127
%129 = fdiv float %126, %128
%130 = fpext float %129 to double
%131 = fadd double %130, 5.000000e-01
%132 = fptosi double %131 to i32
store i32 %132, i32* %18
%133 = load i32, i32* %18
%134 = icmp slt i32 %133, 4
br i1 %134, label %135, label %136
135: ; preds = %125
store i32 4, i32* %18
br label %136
136: ; preds = %135, %125
%137 = load float, float* %27
%138 = fsub float 2.000000e+00, %137
%139 = load i32, i32* %17
%140 = sitofp i32 %139 to float
%141 = fmul float %138, %140
%142 = fptosi float %141 to i32
store i32 %142, i32* %19
store float 1.000000e+00, float* %22
%143 = load float, float* %22
%144 = load i32, i32* %17
%145 = sitofp i32 %144 to float
%146 = fdiv float %143, %145
store float %146, float* %21
store i32 0, i32* %14
br label %147
147: ; preds = %160, %136
%148 = load i32, i32* %14
%149 = load i32, i32* %17
%150 = icmp slt i32 %148, %149
br i1 %150, label %151, label %163
151: ; preds = %147
%152 = load i32, i32* %14
%153 = sitofp i32 %152 to float
%154 = load float, float* %21
%155 = fmul float %153, %154
%156 = load float*, float** %10
%157 = load i32, i32* %14
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds float, float* %156, i64 %158
store float %155, float* %159
br label %160
160: ; preds = %151
%161 = load i32, i32* %14
%162 = add nsw i32 %161, 1
store i32 %162, i32* %14
br label %147
163: ; preds = %147
%164 = load i32, i32* %17
store i32 %164, i32* %14
br label %165
165: ; preds = %181, %163
%166 = load i32, i32* %14
%167 = load i32, i32* %19
%168 = icmp slt i32 %166, %167
br i1 %168, label %169, label %184
169: ; preds = %165
%170 = load i32, i32* %17
%171 = mul nsw i32 2, %170
%172 = load i32, i32* %14
%173 = sub nsw i32 %171, %172
%174 = sitofp i32 %173 to float
%175 = load float, float* %21
%176 = fmul float %174, %175
%177 = load float*, float** %10
%178 = load i32, i32* %14
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds float, float* %177, i64 %179
store float %176, float* %180
br label %181
181: ; preds = %169
%182 = load i32, i32* %14
%183 = add nsw i32 %182, 1
store i32 %183, i32* %14
br label %165
184: ; preds = %165
%185 = load float, float* %27
%186 = load float, float* %22
%187 = fmul float %185, %186
%188 = load i32, i32* %18
%189 = load i32, i32* %19
%190 = sub nsw i32 %188, %189
%191 = sitofp i32 %190 to float
%192 = fdiv float %187, %191
store float %192, float* %21
%193 = load i32, i32* %19
store i32 %193, i32* %14
br label %194
194: ; preds = %212, %184
%195 = load i32, i32* %14
%196 = load i32, i32* %18
%197 = icmp slt i32 %195, %196
br i1 %197, label %198, label %215
198: ; preds = %194
%199 = load float, float* %27
%200 = load float, float* %22
%201 = load i32, i32* %19
%202 = load i32, i32* %14
%203 = sub nsw i32 %201, %202
%204 = sitofp i32 %203 to float
%205 = load float, float* %21
%206 = fmul float %204, %205
%207 = call float @llvm.fmuladd.f32(float %199, float %200, float %206)
%208 = load float*, float** %10
%209 = load i32, i32* %14
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds float, float* %208, i64 %210
store float %207, float* %211
br label %212
212: ; preds = %198
%213 = load i32, i32* %14
%214 = add nsw i32 %213, 1
store i32 %214, i32* %14
br label %194
215: ; preds = %194
%216 = load i32, i32* %11
%217 = sub nsw i32 %216, 1
store i32 %217, i32* %15
br label %218
218: ; preds = %230, %215
%219 = load float*, float** %10
%220 = load i32, i32* %15
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds float, float* %219, i64 %221
%223 = load float, float* %222
%224 = fcmp oeq float %223, 0.000000e+00
br i1 %224, label %225, label %228
225: ; preds = %218
%226 = load i32, i32* %15
%227 = icmp ne i32 %226, 0
br label %228
228: ; preds = %225, %218
%229 = phi i1 [ false, %218 ], [ %227, %225 ]
br i1 %229, label %230, label %233
230: ; preds = %228
%231 = load i32, i32* %15
%232 = add nsw i32 %231, -1
store i32 %232, i32* %15
br label %218
233: ; preds = %228
%234 = load i32, i32* %15
%235 = icmp eq i32 %234, 0
br i1 %235, label %236, label %237
236: ; preds = %233
store i32 0, i32* %7
br label %294
237: ; preds = %233
%238 = load i32, i32* %15
%239 = load i32, i32* %11
%240 = sub nsw i32 %239, 1
%241 = icmp slt i32 %238, %240
br i1 %241, label %242, label %245
242: ; preds = %237
%243 = load i32, i32* %15
%244 = add nsw i32 %243, 2
store i32 %244, i32* %15
br label %245
245: ; preds = %242, %237
store float 0.000000e+00, float* %23
store i32 0, i32* %14
br label %246
246: ; preds = %260, %245
%247 = load i32, i32* %14
%248 = load i32, i32* %15
%249 = icmp slt i32 %247, %248
br i1 %249, label %250, label %263
250: ; preds = %246
%251 = load float, float* %23
%252 = load float*, float** %12
%253 = load float, float* %252
%254 = load float*, float** %10
%255 = load i32, i32* %14
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds float, float* %254, i64 %256
%258 = load float, float* %257
%259 = call float @llvm.fmuladd.f32(float %253, float %258, float %251)
store float %259, float* %23
br label %260
260: ; preds = %250
%261 = load i32, i32* %14
%262 = add nsw i32 %261, 1
store i32 %262, i32* %14
br label %246
263: ; preds = %246
%264 = load float, float* %23
%265 = fpext float %264 to double
%266 = fcmp ole double %265, 0.000000e+00
br i1 %266, label %267, label %268
267: ; preds = %263
store i32 0, i32* %7
br label %294
268: ; preds = %263
%269 = load float*, float** %8
%270 = load float, float* %269
%271 = load float, float* %23
%272 = fdiv float %270, %271
store float %272, float* %23
store i32 0, i32* %14
br label %273
273: ; preds = %289, %268
%274 = load i32, i32* %14
%275 = load i32, i32* %15
%276 = icmp slt i32 %274, %275
br i1 %276, label %277, label %292
277: ; preds = %273
%278 = load float*, float** %10
%279 = load i32, i32* %14
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds float, float* %278, i64 %280
%282 = load float, float* %281
%283 = load float, float* %23
%284 = fmul float %282, %283
%285 = load float*, float** %10
%286 = load i32, i32* %14
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds float, float* %285, i64 %287
store float %284, float* %288
br label %289
289: ; preds = %277
%290 = load i32, i32* %14
%291 = add nsw i32 %290, 1
store i32 %291, i32* %14
br label %273
292: ; preds = %273
%293 = load i32, i32* %15
store i32 %293, i32* %7
br label %294
294: ; preds = %292, %267, %236
%295 = load i32, i32* %7
ret i32 %295
}

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