#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_stf(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 = 6.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);
  tr = (*trise);
  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_stf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%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  0xed6(%rip),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  0xec5(%rip),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  0xeb4(%rip),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  0xea3(%rip),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  0xe92(%rip),%xmm0
movss  %xmm0,-0x7c(%rbp)
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     11b1 <gen_2tri_stf+0xa1>
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
jmp    121e <gen_2tri_stf+0x10e>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm1
movss  -0x7c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    120f <gen_2tri_stf+0xff>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
ucomiss -0x78(%rbp),%xmm0
jbe    120f <gen_2tri_stf+0xff>
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    1219 <gen_2tri_stf+0x109>
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
jmp    121e <gen_2tri_stf+0x10e>
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
call   1030 <zapit@plt>
mov    -0x18(%rbp),%rax
movss  (%rax),%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  0xdc1(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x2,-0x48(%rbp)
jge    127b <gen_2tri_stf+0x16b>
movl   $0x2,-0x48(%rbp)
movss  -0x54(%rbp),%xmm0
mov    -0x30(%rbp),%rax
divss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd8c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x4,-0x4c(%rbp)
jge    12b0 <gen_2tri_stf+0x1a0>
movl   $0x4,-0x4c(%rbp)
movss  0xd60(%rip),%xmm0
subss  -0x70(%rbp),%xmm0
cvtsi2ssl -0x48(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
movss  0xd3f(%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    1325 <gen_2tri_stf+0x215>
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    12f4 <gen_2tri_stf+0x1e4>
mov    -0x48(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x50(%rbp),%eax
jge    1364 <gen_2tri_stf+0x254>
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    132b <gen_2tri_stf+0x21b>
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    13cf <gen_2tri_stf+0x2bf>
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    1387 <gen_2tri_stf+0x277>
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,-0x7d(%rbp)
jne    1406 <gen_2tri_stf+0x2f6>
jp     1406 <gen_2tri_stf+0x2f6>
cmpl   $0x0,-0x40(%rbp)
setne  %al
mov    %al,-0x7d(%rbp)
mov    -0x7d(%rbp),%al
test   $0x1,%al
jne    1416 <gen_2tri_stf+0x306>
jmp    1424 <gen_2tri_stf+0x314>
mov    -0x40(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x40(%rbp)
jmp    13d8 <gen_2tri_stf+0x2c8>
cmpl   $0x0,-0x40(%rbp)
jne    143a <gen_2tri_stf+0x32a>
movl   $0x0,-0x4(%rbp)
jmp    151e <gen_2tri_stf+0x40e>
mov    -0x40(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1454 <gen_2tri_stf+0x344>
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    14a4 <gen_2tri_stf+0x394>
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    1463 <gen_2tri_stf+0x353>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     14c6 <gen_2tri_stf+0x3b6>
movl   $0x0,-0x4(%rbp)
jmp    151e <gen_2tri_stf+0x40e>
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    1518 <gen_2tri_stf+0x408>
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    14df <gen_2tri_stf+0x3cf>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gen_2tri_stf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r8,%r15
mov    %ecx,%ebx
mov    %rdx,%r12
mov    %rsi,%r13
mov    %rdi,%r14
movss  (%r9),%xmm1
ucomiss 0xecc(%rip),%xmm1
jae    1171 <gen_2tri_stf+0x61>
movss  0xec2(%rip),%xmm0
ucomiss %xmm1,%xmm0
movss  0xebb(%rip),%xmm2
jbe    1179 <gen_2tri_stf+0x69>
ucomiss 0xeb6(%rip),%xmm1
jbe    1179 <gen_2tri_stf+0x69>
subss  %xmm1,%xmm0
mulss  0xeac(%rip),%xmm0
addss  0xe94(%rip),%xmm0
movaps %xmm0,%xmm2
jmp    1179 <gen_2tri_stf+0x69>
movss  0xe87(%rip),%xmm2
movaps %xmm2,(%rsp)
mov    %r12,%rdi
mov    %ebx,%esi
call   1030 <zapit@plt>
movss  0x0(%r13),%xmm0
movss  0xe7f(%rip),%xmm1
mulss  %xmm0,%xmm1
movss  (%r15),%xmm2
divss  %xmm2,%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xe72(%rip),%xmm3
addsd  %xmm3,%xmm1
cvttsd2si %xmm1,%ecx
cmp    $0x3,%ecx
mov    $0x2,%eax
cmovge %ecx,%eax
divss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm3,%xmm0
cvttsd2si %xmm0,%ecx
movss  0xe3e(%rip),%xmm8
movaps (%rsp),%xmm11
subss  %xmm11,%xmm8
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
mulss  %xmm2,%xmm8
movss  0xe24(%rip),%xmm0
divss  %xmm2,%xmm0
cmp    $0x8,%eax
jae    1208 <gen_2tri_stf+0xf8>
xor    %edx,%edx
jmp    12f0 <gen_2tri_stf+0x1e0>
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     1641 <gen_2tri_stf+0x531>
mov    %rbp,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xdf2(%rip),%xmm1
xor    %esi,%esi
movdqa 0xdf7(%rip),%xmm9
movdqa 0xdff(%rip),%xmm5
movdqa 0xe07(%rip),%xmm6
movdqa 0xe0f(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nopl   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    1270 <gen_2tri_stf+0x160>
test   $0x1,%bpl
je     12eb <gen_2tri_stf+0x1db>
cvtdq2ps %xmm1,%xmm3
paddd  0xd69(%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     130a <gen_2tri_stf+0x1fa>
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    12f0 <gen_2tri_stf+0x1e0>
cmp    $0x5,%ecx
mov    $0x4,%r10d
cmovge %ecx,%r10d
cvttss2si %xmm8,%ecx
cmp    %ecx,%eax
jge    145d <gen_2tri_stf+0x34d>
lea    (%rax,%rax,1),%esi
mov    %ecx,%r13d
mov    %r13,%r8
sub    %rax,%r8
cmp    $0x8,%r8
jb     143d <gen_2tri_stf+0x32d>
mov    %r8,%r9
movd   %eax,%xmm1
pshufd $0x0,%xmm1,%xmm3
paddd  0xce2(%rip),%xmm3
and    $0xfffffffffffffff8,%r9
movd   %esi,%xmm1
pshufd $0x0,%xmm1,%xmm4
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x8(%r9),%rdx
mov    %rdx,%r11
shr    $0x3,%r11
add    $0x1,%r11
test   %rdx,%rdx
je     165a <gen_2tri_stf+0x54a>
mov    %r11,%rdi
and    $0xfffffffffffffffe,%rdi
lea    (%r12,%rax,4),%rbp
add    $0x30,%rbp
xor    %edx,%edx
movdqa 0xcac(%rip),%xmm8
movdqa 0xcb3(%rip),%xmm9
movdqa 0xcba(%rip),%xmm10
movdqa 0xcc2(%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(%rbp,%rdx,4)
movups %xmm5,-0x20(%rbp,%rdx,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(%rbp,%rdx,4)
movups %xmm2,0x0(%rbp,%rdx,4)
add    $0x10,%rdx
paddd  %xmm7,%xmm3
add    $0xfffffffffffffffe,%rdi
jne    13b0 <gen_2tri_stf+0x2a0>
test   $0x1,%r11b
je     1435 <gen_2tri_stf+0x325>
add    %rax,%rdx
psubd  %xmm3,%xmm4
cvtdq2ps %xmm4,%xmm2
psubd  0xc1f(%rip),%xmm4
cvtdq2ps %xmm4,%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%r12,%rdx,4)
movups %xmm3,0x10(%r12,%rdx,4)
cmp    %r9,%r8
je     145d <gen_2tri_stf+0x34d>
add    %r9,%rax
sub    %eax,%esi
nop
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%r12,%rax,4)
add    $0x1,%rax
add    $0xffffffff,%esi
cmp    %rax,%r13
jne    1440 <gen_2tri_stf+0x330>
mov    %r10d,%eax
sub    %ecx,%eax
jle    1542 <gen_2tri_stf+0x432>
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movaps %xmm11,%xmm0
divss  %xmm1,%xmm0
movslq %ecx,%rsi
mov    %r10d,%eax
mov    %rax,%r8
sub    %rsi,%r8
cmp    $0x8,%r8
jae    1491 <gen_2tri_stf+0x381>
mov    %rsi,%rdx
jmp    151b <gen_2tri_stf+0x40b>
mov    %r8,%rdi
and    $0xfffffffffffffff8,%rdi
lea    (%rdi,%rsi,1),%rdx
movd   %ecx,%xmm1
pshufd $0x0,%xmm1,%xmm1
movdqa 0xb83(%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 0xb6c(%rip),%xmm8
movdqa 0xb74(%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    14e0 <gen_2tri_stf+0x3d0>
cmp    %rdi,%r8
je     1542 <gen_2tri_stf+0x432>
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    1520 <gen_2tri_stf+0x410>
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    156b <gen_2tri_stf+0x45b>
jp     156b <gen_2tri_stf+0x45b>
test   %cl,%cl
jne    1550 <gen_2tri_stf+0x440>
xor    %eax,%eax
test   %ebx,%ebx
je     172b <gen_2tri_stf+0x61b>
lea    0x2(%rbx),%ecx
cmp    %ebx,%edx
cmovle %ebx,%ecx
test   %ecx,%ecx
jle    172b <gen_2tri_stf+0x61b>
movss  (%r15),%xmm0
mov    %ecx,%edx
lea    -0x1(%rdx),%rsi
mov    %edx,%eax
and    $0x3,%eax
cmp    $0x3,%rsi
jae    15a2 <gen_2tri_stf+0x492>
xorps  %xmm1,%xmm1
xor    %esi,%esi
jmp    15f4 <gen_2tri_stf+0x4e4>
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    15b0 <gen_2tri_stf+0x4a0>
test   %rax,%rax
je     1616 <gen_2tri_stf+0x506>
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    1600 <gen_2tri_stf+0x4f0>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jae    172b <gen_2tri_stf+0x61b>
test   %ecx,%ecx
jle    1729 <gen_2tri_stf+0x619>
movss  (%r14),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%ecx
jae    166b <gen_2tri_stf+0x55b>
xor    %eax,%eax
jmp    1710 <gen_2tri_stf+0x600>
movdqa 0x9e7(%rip),%xmm1
xor    %esi,%esi
test   $0x1,%bpl
jne    12cc <gen_2tri_stf+0x1bc>
jmp    12eb <gen_2tri_stf+0x1db>
xor    %edx,%edx
test   $0x1,%r11b
jne    140f <gen_2tri_stf+0x2ff>
jmp    1435 <gen_2tri_stf+0x325>
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     173a <gen_2tri_stf+0x62a>
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    16a0 <gen_2tri_stf+0x590>
test   $0x1,%bpl
je     1706 <gen_2tri_stf+0x5f6>
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     1729 <gen_2tri_stf+0x619>
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    1710 <gen_2tri_stf+0x600>
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    16ea <gen_2tri_stf+0x5da>
jmp    1706 <gen_2tri_stf+0x5f6>

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

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