#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(float);
double sin(float);
int /*<<< orphan*/ zapit(float *, int);
int gen_ucsbT_stf(float *slip, float *t0, float *stf, int nt, float *dt,
                  float *beta) {
  int it, nstf;
  float tau, tau1, tau2, tau1x2, arg1, arg2;
  float sum, t, alpha;
  float pi = 3.141592654;
  zapit(stf, nt);
  tau = (*beta) * (*t0);
  tau1 = 0.13 * tau / (*beta);
  tau2 = tau - tau1;
  tau1x2 = 2.0 * tau1;
  nstf = (int)((tau) / (*dt) + 0.5);
  if (nstf > nt)
    nstf = nt;
  if (nstf == 0)
    return (0);
  for (it = 0; it < nstf; it++) {
    t = it * (*dt);
    alpha = 0.0;
    if (t < tau1) {
      arg1 = pi * t / tau1;
      arg2 = 0.5 * arg1;
      alpha = 0.7 - 0.7 * cos(arg1) + 0.6 * sin(arg2);
    } else if (t < tau1x2) {
      arg1 = pi * t / tau1;
      arg2 = pi * (t - tau1) / tau2;
      alpha = 1.0 - 0.7 * cos(arg1) + 0.3 * cos(arg2);
    } else if (t < tau) {
      arg1 = pi * (t - tau1) / tau2;
      alpha = 0.3 + 0.3 * cos(arg1);
    }
    stf[it] = alpha;
  }
  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_ucsbT_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  0xee6(%rip),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
call   1040 <zapit@plt>
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x18(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe7f(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movss  (%rax),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe3a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x44(%rbp),%xmm0
mov    -0x30(%rbp),%rax
divss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe0c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    1211 <gen_ucsbT_stf+0xe1>
mov    -0x24(%rbp),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jne    1227 <gen_ucsbT_stf+0xf7>
movl   $0x0,-0x4(%rbp)
jmp    14cc <gen_ucsbT_stf+0x39c>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1402 <gen_ucsbT_stf+0x2d2>
cvtsi2ssl -0x3c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x60(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12ed <gen_ucsbT_stf+0x1bd>
movss  -0x68(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
divss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd74(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x54(%rbp),%xmm0
call   1050 <cos@plt>
movsd  0xd75(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd81(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movss  -0x58(%rbp),%xmm0
call   1030 <sin@plt>
movsd  -0x70(%rbp),%xmm1
movsd  0xd59(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    13e2 <gen_ucsbT_stf+0x2b2>
movss  -0x60(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1385 <gen_ucsbT_stf+0x255>
movss  -0x68(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
divss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x68(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x48(%rbp),%xmm1
mulss  %xmm1,%xmm0
divss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x54(%rbp),%xmm0
call   1050 <cos@plt>
movsd  0xcdd(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcd9(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movss  -0x58(%rbp),%xmm0
call   1050 <cos@plt>
movsd  -0x78(%rbp),%xmm1
movsd  0xca9(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    13dd <gen_ucsbT_stf+0x2ad>
movss  -0x60(%rbp),%xmm1
movss  -0x44(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    13d8 <gen_ucsbT_stf+0x2a8>
movss  -0x68(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x48(%rbp),%xmm1
mulss  %xmm1,%xmm0
divss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
call   1050 <cos@plt>
movsd  0xc51(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    13dd <gen_ucsbT_stf+0x2ad>
jmp    13e2 <gen_ucsbT_stf+0x2b2>
movss  -0x64(%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    122e <gen_ucsbT_stf+0xfe>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1452 <gen_ucsbT_stf+0x322>
movss  -0x5c(%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,-0x5c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1411 <gen_ucsbT_stf+0x2e1>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1474 <gen_ucsbT_stf+0x344>
movl   $0x0,-0x4(%rbp)
jmp    14cc <gen_ucsbT_stf+0x39c>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
divss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    14c6 <gen_ucsbT_stf+0x396>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x5c(%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    148d <gen_ucsbT_stf+0x35d>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gen_ucsbT_stf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,%r12
mov    %r8,%r15
mov    %ecx,%ebp
mov    %rdx,%rbx
mov    %rsi,%r13
mov    %rdi,%r14
mov    %rdx,%rdi
mov    %ecx,%esi
call   1040 <zapit@plt>
movss  (%r12),%xmm1
movss  0x0(%r13),%xmm2
mulss  %xmm1,%xmm2
movss  (%r15),%xmm0
movss  %xmm2,0x4(%rsp)
divss  %xmm0,%xmm2
cvtss2sd %xmm2,%xmm2
addsd  0xe84(%rip),%xmm2
cvttsd2si %xmm2,%r12d
cmp    %ebp,%r12d
cmovg  %ebp,%r12d
xor    %eax,%eax
test   %r12d,%r12d
je     14ca <gen_ucsbT_stf+0x39a>
jle    14ca <gen_ucsbT_stf+0x39a>
mov    %r14,0x20(%rsp)
movss  0x4(%rsp),%xmm3
xorps  %xmm2,%xmm2
cvtss2sd %xmm3,%xmm2
mulsd  0xe45(%rip),%xmm2
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
subss  %xmm1,%xmm3
movss  %xmm3,0x8(%rsp)
movaps %xmm1,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,0x1c(%rsp)
mov    %r12d,%r13d
lea    -0x1(%r13),%rbp
xor    %r14d,%r14d
movss  %xmm1,0xc(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm2,%xmm2
cvtsi2ss %r14d,%xmm2
mulss  %xmm0,%xmm2
ucomiss %xmm2,%xmm1
jbe    1270 <gen_ucsbT_stf+0x140>
mulss  0xe1f(%rip),%xmm2
divss  %xmm1,%xmm2
movaps %xmm2,%xmm0
mulss  0xe14(%rip),%xmm0
movss  %xmm0,(%rsp)
movaps %xmm2,%xmm0
call   1050 <cos@plt>
mulsd  0xddb(%rip),%xmm0
addsd  0xde3(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movss  (%rsp),%xmm0
call   1030 <sin@plt>
mulsd  0xdd3(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
jmp    1320 <gen_ucsbT_stf+0x1f0>
nopl   0x0(%rax,%rax,1)
movss  0x1c(%rsp),%xmm0
ucomiss %xmm2,%xmm0
jbe    12e0 <gen_ucsbT_stf+0x1b0>
movaps %xmm2,%xmm0
movaps %xmm2,%xmm3
movss  0xdaf(%rip),%xmm2
mulss  %xmm2,%xmm0
divss  %xmm1,%xmm0
subss  %xmm1,%xmm3
mulss  %xmm2,%xmm3
divss  0x8(%rsp),%xmm3
movss  %xmm3,(%rsp)
call   1050 <cos@plt>
mulsd  0xd67(%rip),%xmm0
addsd  0xd67(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movss  (%rsp),%xmm0
call   1050 <cos@plt>
mulsd  0xd3f(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
jmp    1320 <gen_ucsbT_stf+0x1f0>
nopl   0x0(%rax)
xorps  %xmm0,%xmm0
movss  0x4(%rsp),%xmm1
ucomiss %xmm2,%xmm1
jbe    1324 <gen_ucsbT_stf+0x1f4>
subss  0xc(%rsp),%xmm2
mulss  0xd3c(%rip),%xmm2
divss  0x8(%rsp),%xmm2
movaps %xmm2,%xmm0
call   1050 <cos@plt>
movsd  0xcfe(%rip),%xmm1
mulsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
nopw   0x0(%rax,%rax,1)
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rbx,%r14,4)
cmp    %r14,%rbp
je     1343 <gen_ucsbT_stf+0x213>
movss  (%r15),%xmm0
add    $0x1,%r14
movss  0xc(%rsp),%xmm1
jmp    1200 <gen_ucsbT_stf+0xd0>
test   %r12d,%r12d
jle    1365 <gen_ucsbT_stf+0x235>
movss  (%r15),%xmm0
mov    %r13d,%eax
and    $0x3,%eax
cmp    $0x3,%rbp
jae    136c <gen_ucsbT_stf+0x23c>
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
mov    0x20(%rsp),%rsi
jmp    13c0 <gen_ucsbT_stf+0x290>
xor    %eax,%eax
jmp    14ca <gen_ucsbT_stf+0x39a>
mov    %r13d,%edx
and    $0xfffffffc,%edx
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
mov    0x20(%rsp),%rsi
nopl   0x0(%rax)
movss  (%rbx,%rcx,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  0x4(%rbx,%rcx,4),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  0x8(%rbx,%rcx,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  0xc(%rbx,%rcx,4),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm1
add    $0x4,%rcx
cmp    %rcx,%rdx
jne    1380 <gen_ucsbT_stf+0x250>
test   %rax,%rax
je     13e6 <gen_ucsbT_stf+0x2b6>
lea    (%rbx,%rcx,4),%rcx
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movss  (%rcx,%rdx,4),%xmm2
mulss  %xmm0,%xmm2
addss  %xmm2,%xmm1
add    $0x1,%rdx
cmp    %rdx,%rax
jne    13d0 <gen_ucsbT_stf+0x2a0>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jae    14ca <gen_ucsbT_stf+0x39a>
test   %r12d,%r12d
jle    14c7 <gen_ucsbT_stf+0x397>
movss  (%rsi),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%r12d
jae    1412 <gen_ucsbT_stf+0x2e2>
xor    %eax,%eax
jmp    14b0 <gen_ucsbT_stf+0x380>
mov    %r13d,%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     147e <gen_ucsbT_stf+0x34e>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
nopl   0x0(%rax)
movups (%rbx,%rcx,4),%xmm2
movups 0x10(%rbx,%rcx,4),%xmm3
movups 0x20(%rbx,%rcx,4),%xmm4
movups 0x30(%rbx,%rcx,4),%xmm5
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%rbx,%rcx,4)
movups %xmm3,0x10(%rbx,%rcx,4)
mulps  %xmm1,%xmm4
mulps  %xmm1,%xmm5
movups %xmm4,0x20(%rbx,%rcx,4)
movups %xmm5,0x30(%rbx,%rcx,4)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rsi
jne    1440 <gen_ucsbT_stf+0x310>
jmp    1480 <gen_ucsbT_stf+0x350>
xor    %ecx,%ecx
test   $0x1,%dl
je     149d <gen_ucsbT_stf+0x36d>
movups (%rbx,%rcx,4),%xmm2
movups 0x10(%rbx,%rcx,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%rbx,%rcx,4)
movups %xmm3,0x10(%rbx,%rcx,4)
cmp    %r13,%rax
je     14c7 <gen_ucsbT_stf+0x397>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  (%rbx,%rax,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%rbx,%rax,4)
add    $0x1,%rax
cmp    %rax,%r13
jne    14b0 <gen_ucsbT_stf+0x380>
mov    %r12d,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @gen_ucsbT_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 float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = 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 0x400921FB60000000, float* %25
%26 = load float*, float** %10
%27 = load i32, i32* %11
%28 = call i32 @zapit(float* %26, i32 %27)
%29 = load float*, float** %13
%30 = load float, float* %29
%31 = load float*, float** %9
%32 = load float, float* %31
%33 = fmul float %30, %32
store float %33, float* %16
%34 = load float, float* %16
%35 = fpext float %34 to double
%36 = fmul double 1.300000e-01, %35
%37 = load float*, float** %13
%38 = load float, float* %37
%39 = fpext float %38 to double
%40 = fdiv double %36, %39
%41 = fptrunc double %40 to float
store float %41, float* %17
%42 = load float, float* %16
%43 = load float, float* %17
%44 = fsub float %42, %43
store float %44, float* %18
%45 = load float, float* %17
%46 = fpext float %45 to double
%47 = fmul double 2.000000e+00, %46
%48 = fptrunc double %47 to float
store float %48, float* %19
%49 = load float, float* %16
%50 = load float*, float** %12
%51 = load float, float* %50
%52 = fdiv float %49, %51
%53 = fpext float %52 to double
%54 = fadd double %53, 5.000000e-01
%55 = fptosi double %54 to i32
store i32 %55, i32* %15
%56 = load i32, i32* %15
%57 = load i32, i32* %11
%58 = icmp sgt i32 %56, %57
br i1 %58, label %59, label %61
59: ; preds = %6
%60 = load i32, i32* %11
store i32 %60, i32* %15
br label %61
61: ; preds = %59, %6
%62 = load i32, i32* %15
%63 = icmp eq i32 %62, 0
br i1 %63, label %64, label %65
64: ; preds = %61
store i32 0, i32* %7
br label %196
65: ; preds = %61
store i32 0, i32* %14
br label %66
66: ; preds = %144, %65
%67 = load i32, i32* %14
%68 = load i32, i32* %15
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %147
70: ; preds = %66
%71 = load i32, i32* %14
%72 = sitofp i32 %71 to float
%73 = load float*, float** %12
%74 = load float, float* %73
%75 = fmul float %72, %74
store float %75, float* %23
store float 0.000000e+00, float* %24
%76 = load float, float* %23
%77 = load float, float* %17
%78 = fcmp olt float %76, %77
br i1 %78, label %79, label %96
79: ; preds = %70
%80 = load float, float* %25
%81 = load float, float* %23
%82 = fmul float %80, %81
%83 = load float, float* %17
%84 = fdiv float %82, %83
store float %84, float* %20
%85 = load float, float* %20
%86 = fpext float %85 to double
%87 = fmul double 5.000000e-01, %86
%88 = fptrunc double %87 to float
store float %88, float* %21
%89 = load float, float* %20
%90 = call double @cos(float %89)
%91 = call double @llvm.fmuladd.f64(double 0xBFE6666666666666, double %90, double 0x3FE6666666666666)
%92 = load float, float* %21
%93 = call double @sin(float %92)
%94 = call double @llvm.fmuladd.f64(double 6.000000e-01, double %93, double %91)
%95 = fptrunc double %94 to float
store float %95, float* %24
br label %138
96: ; preds = %70
%97 = load float, float* %23
%98 = load float, float* %19
%99 = fcmp olt float %97, %98
br i1 %99, label %100, label %120
100: ; preds = %96
%101 = load float, float* %25
%102 = load float, float* %23
%103 = fmul float %101, %102
%104 = load float, float* %17
%105 = fdiv float %103, %104
store float %105, float* %20
%106 = load float, float* %25
%107 = load float, float* %23
%108 = load float, float* %17
%109 = fsub float %107, %108
%110 = fmul float %106, %109
%111 = load float, float* %18
%112 = fdiv float %110, %111
store float %112, float* %21
%113 = load float, float* %20
%114 = call double @cos(float %113)
%115 = call double @llvm.fmuladd.f64(double 0xBFE6666666666666, double %114, double 1.000000e+00)
%116 = load float, float* %21
%117 = call double @cos(float %116)
%118 = call double @llvm.fmuladd.f64(double 3.000000e-01, double %117, double %115)
%119 = fptrunc double %118 to float
store float %119, float* %24
br label %137
120: ; preds = %96
%121 = load float, float* %23
%122 = load float, float* %16
%123 = fcmp olt float %121, %122
br i1 %123, label %124, label %136
124: ; preds = %120
%125 = load float, float* %25
%126 = load float, float* %23
%127 = load float, float* %17
%128 = fsub float %126, %127
%129 = fmul float %125, %128
%130 = load float, float* %18
%131 = fdiv float %129, %130
store float %131, float* %20
%132 = load float, float* %20
%133 = call double @cos(float %132)
%134 = call double @llvm.fmuladd.f64(double 3.000000e-01, double %133, double 3.000000e-01)
%135 = fptrunc double %134 to float
store float %135, float* %24
br label %136
136: ; preds = %124, %120
br label %137
137: ; preds = %136, %100
br label %138
138: ; preds = %137, %79
%139 = load float, float* %24
%140 = load float*, float** %10
%141 = load i32, i32* %14
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds float, float* %140, i64 %142
store float %139, float* %143
br label %144
144: ; preds = %138
%145 = load i32, i32* %14
%146 = add nsw i32 %145, 1
store i32 %146, i32* %14
br label %66
147: ; preds = %66
store float 0.000000e+00, float* %22
store i32 0, i32* %14
br label %148
148: ; preds = %162, %147
%149 = load i32, i32* %14
%150 = load i32, i32* %15
%151 = icmp slt i32 %149, %150
br i1 %151, label %152, label %165
152: ; preds = %148
%153 = load float, float* %22
%154 = load float*, float** %12
%155 = load float, float* %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
%160 = load float, float* %159
%161 = call float @llvm.fmuladd.f32(float %155, float %160, float %153)
store float %161, float* %22
br label %162
162: ; preds = %152
%163 = load i32, i32* %14
%164 = add nsw i32 %163, 1
store i32 %164, i32* %14
br label %148
165: ; preds = %148
%166 = load float, float* %22
%167 = fpext float %166 to double
%168 = fcmp ole double %167, 0.000000e+00
br i1 %168, label %169, label %170
169: ; preds = %165
store i32 0, i32* %7
br label %196
170: ; preds = %165
%171 = load float*, float** %8
%172 = load float, float* %171
%173 = load float, float* %22
%174 = fdiv float %172, %173
store float %174, float* %22
store i32 0, i32* %14
br label %175
175: ; preds = %191, %170
%176 = load i32, i32* %14
%177 = load i32, i32* %15
%178 = icmp slt i32 %176, %177
br i1 %178, label %179, label %194
179: ; preds = %175
%180 = load float*, float** %10
%181 = load i32, i32* %14
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds float, float* %180, i64 %182
%184 = load float, float* %183
%185 = load float, float* %22
%186 = fmul float %184, %185
%187 = load float*, float** %10
%188 = load i32, i32* %14
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds float, float* %187, i64 %189
store float %186, float* %190
br label %191
191: ; preds = %179
%192 = load i32, i32* %14
%193 = add nsw i32 %192, 1
store i32 %193, i32* %14
br label %175
194: ; preds = %175
%195 = load i32, i32* %15
store i32 %195, i32* %7
br label %196
196: ; preds = %194, %169, %64
%197 = load i32, i32* %7
ret i32 %197
}

LLVM IR (-O2):
define i32 @gen_ucsbT_stf(float* nocapture %0, float* nocapture %1, float* %2, i32 %3, float* nocapture %4, float* nocapture %5) {
%7 = tail call i32 @zapit(float* %2, i32 %3)
%8 = load float, float* %5
%9 = load float, float* %1
%10 = fmul float %8, %9
%11 = fpext float %10 to double
%12 = fmul double %11, 1.300000e-01
%13 = fpext float %8 to double
%14 = fdiv double %12, %13
%15 = fptrunc double %14 to float
%16 = fsub float %10, %15
%17 = fmul float %15, 2.000000e+00
%18 = load float, float* %4
%19 = fdiv float %10, %18
%20 = fpext float %19 to double
%21 = fadd double %20, 5.000000e-01
%22 = fptosi double %21 to i32
%23 = icmp sgt i32 %22, %3
%24 = select i1 %23, i32 %3, i32 %22
%25 = icmp eq i32 %24, 0
br i1 %25, label %194, label %26
26: ; preds = %6
%27 = icmp sgt i32 %24, 0
br i1 %27, label %28, label %194
28: ; preds = %26
%29 = zext i32 %24 to i64
br label %38
30: ; preds = %76
br i1 %27, label %31, label %194
31: ; preds = %30
%32 = load float, float* %4
%33 = add nsw i64 %29, -1
%34 = and i64 %29, 3
%35 = icmp ult i64 %33, 3
br i1 %35, label %105, label %36
36: ; preds = %31
%37 = and i64 %29, 4294967292
br label %83
38: ; preds = %81, %28
%39 = phi float [ %18, %28 ], [ %82, %81 ]
%40 = phi i64 [ 0, %28 ], [ %79, %81 ]
%41 = trunc i64 %40 to i32
%42 = sitofp i32 %41 to float
%43 = fmul float %39, %42
%44 = fcmp olt float %43, %15
br i1 %44, label %45, label %54
45: ; preds = %38
%46 = fmul float %43, 0x400921FB60000000
%47 = fdiv float %46, %15
%48 = fmul float %47, 5.000000e-01
%49 = tail call double @cos(float %47)
%50 = tail call double @llvm.fmuladd.f64(double %49, double 0xBFE6666666666666, double 0x3FE6666666666666)
%51 = tail call double @sin(float %48)
%52 = tail call double @llvm.fmuladd.f64(double %51, double 6.000000e-01, double %50)
%53 = fptrunc double %52 to float
br label %76
54: ; preds = %38
%55 = fcmp olt float %43, %17
br i1 %55, label %56, label %67
56: ; preds = %54
%57 = fmul float %43, 0x400921FB60000000
%58 = fdiv float %57, %15
%59 = fsub float %43, %15
%60 = fmul float %59, 0x400921FB60000000
%61 = fdiv float %60, %16
%62 = tail call double @cos(float %58)
%63 = tail call double @llvm.fmuladd.f64(double %62, double 0xBFE6666666666666, double 1.000000e+00)
%64 = tail call double @cos(float %61)
%65 = tail call double @llvm.fmuladd.f64(double %64, double 3.000000e-01, double %63)
%66 = fptrunc double %65 to float
br label %76
67: ; preds = %54
%68 = fcmp olt float %43, %10
br i1 %68, label %69, label %76
69: ; preds = %67
%70 = fsub float %43, %15
%71 = fmul float %70, 0x400921FB60000000
%72 = fdiv float %71, %16
%73 = tail call double @cos(float %72)
%74 = tail call double @llvm.fmuladd.f64(double %73, double 3.000000e-01, double 3.000000e-01)
%75 = fptrunc double %74 to float
br label %76
76: ; preds = %56, %69, %67, %45
%77 = phi float [ %53, %45 ], [ %66, %56 ], [ %75, %69 ], [ 0.000000e+00, %67 ]
%78 = getelementptr inbounds float, float* %2, i64 %40
store float %77, float* %78
%79 = add nuw nsw i64 %40, 1
%80 = icmp eq i64 %79, %29
br i1 %80, label %30, label %81
81: ; preds = %76
%82 = load float, float* %4
br label %38
83: ; preds = %83, %36
%84 = phi i64 [ 0, %36 ], [ %102, %83 ]
%85 = phi float [ 0.000000e+00, %36 ], [ %101, %83 ]
%86 = phi i64 [ 0, %36 ], [ %103, %83 ]
%87 = getelementptr inbounds float, float* %2, i64 %84
%88 = load float, float* %87
%89 = tail call float @llvm.fmuladd.f32(float %32, float %88, float %85)
%90 = or i64 %84, 1
%91 = getelementptr inbounds float, float* %2, i64 %90
%92 = load float, float* %91
%93 = tail call float @llvm.fmuladd.f32(float %32, float %92, float %89)
%94 = or i64 %84, 2
%95 = getelementptr inbounds float, float* %2, i64 %94
%96 = load float, float* %95
%97 = tail call float @llvm.fmuladd.f32(float %32, float %96, float %93)
%98 = or i64 %84, 3
%99 = getelementptr inbounds float, float* %2, i64 %98
%100 = load float, float* %99
%101 = tail call float @llvm.fmuladd.f32(float %32, float %100, float %97)
%102 = add nuw nsw i64 %84, 4
%103 = add i64 %86, 4
%104 = icmp eq i64 %103, %37
br i1 %104, label %105, label %83
105: ; preds = %83, %31
%106 = phi float [ undef, %31 ], [ %101, %83 ]
%107 = phi i64 [ 0, %31 ], [ %102, %83 ]
%108 = phi float [ 0.000000e+00, %31 ], [ %101, %83 ]
%109 = icmp eq i64 %34, 0
br i1 %109, label %120, label %110
110: ; preds = %105, %110
%111 = phi i64 [ %117, %110 ], [ %107, %105 ]
%112 = phi float [ %116, %110 ], [ %108, %105 ]
%113 = phi i64 [ %118, %110 ], [ 0, %105 ]
%114 = getelementptr inbounds float, float* %2, i64 %111
%115 = load float, float* %114
%116 = tail call float @llvm.fmuladd.f32(float %32, float %115, float %112)
%117 = add nuw nsw i64 %111, 1
%118 = add i64 %113, 1
%119 = icmp eq i64 %118, %34
br i1 %119, label %120, label %110
120: ; preds = %110, %105
%121 = phi float [ %106, %105 ], [ %116, %110 ]
%122 = fcmp ugt float %121, 0.000000e+00
br i1 %122, label %123, label %194
123: ; preds = %120
%124 = load float, float* %0
%125 = fdiv float %124, %121
br i1 %27, label %126, label %194
126: ; preds = %123
%127 = zext i32 %24 to i64
%128 = icmp ult i32 %24, 8
br i1 %128, label %185, label %129
129: ; preds = %126
%130 = and i64 %29, 4294967288
%131 = insertelement <4 x float> poison, float %125, i64 0
%132 = shufflevector <4 x float> %131, <4 x float> poison, <4 x i32> zeroinitializer
%133 = insertelement <4 x float> poison, float %125, i64 0
%134 = shufflevector <4 x float> %133, <4 x float> poison, <4 x i32> zeroinitializer
%135 = add nsw i64 %130, -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 %169, label %140
140: ; preds = %129
%141 = and i64 %137, 4611686018427387902
br label %142
142: ; preds = %142, %140
%143 = phi i64 [ 0, %140 ], [ %166, %142 ]
%144 = phi i64 [ 0, %140 ], [ %167, %142 ]
%145 = getelementptr inbounds float, float* %2, i64 %143
%146 = bitcast float* %145 to <4 x float>*
%147 = load <4 x float>, <4 x float>* %146
%148 = getelementptr inbounds float, float* %145, i64 4
%149 = bitcast float* %148 to <4 x float>*
%150 = load <4 x float>, <4 x float>* %149
%151 = fmul <4 x float> %132, %147
%152 = fmul <4 x float> %134, %150
%153 = bitcast float* %145 to <4 x float>*
store <4 x float> %151, <4 x float>* %153
%154 = bitcast float* %148 to <4 x float>*
store <4 x float> %152, <4 x float>* %154
%155 = or i64 %143, 8
%156 = getelementptr inbounds float, float* %2, i64 %155
%157 = bitcast float* %156 to <4 x float>*
%158 = load <4 x float>, <4 x float>* %157
%159 = getelementptr inbounds float, float* %156, i64 4
%160 = bitcast float* %159 to <4 x float>*
%161 = load <4 x float>, <4 x float>* %160
%162 = fmul <4 x float> %132, %158
%163 = fmul <4 x float> %134, %161
%164 = bitcast float* %156 to <4 x float>*
store <4 x float> %162, <4 x float>* %164
%165 = bitcast float* %159 to <4 x float>*
store <4 x float> %163, <4 x float>* %165
%166 = add nuw i64 %143, 16
%167 = add i64 %144, 2
%168 = icmp eq i64 %167, %141
br i1 %168, label %169, label %142
169: ; preds = %142, %129
%170 = phi i64 [ 0, %129 ], [ %166, %142 ]
%171 = icmp eq i64 %138, 0
br i1 %171, label %183, label %172
172: ; preds = %169
%173 = getelementptr inbounds float, float* %2, i64 %170
%174 = bitcast float* %173 to <4 x float>*
%175 = load <4 x float>, <4 x float>* %174
%176 = getelementptr inbounds float, float* %173, i64 4
%177 = bitcast float* %176 to <4 x float>*
%178 = load <4 x float>, <4 x float>* %177
%179 = fmul <4 x float> %132, %175
%180 = fmul <4 x float> %134, %178
%181 = bitcast float* %173 to <4 x float>*
store <4 x float> %179, <4 x float>* %181
%182 = bitcast float* %176 to <4 x float>*
store <4 x float> %180, <4 x float>* %182
br label %183
183: ; preds = %169, %172
%184 = icmp eq i64 %130, %29
br i1 %184, label %194, label %185
185: ; preds = %126, %183
%186 = phi i64 [ 0, %126 ], [ %130, %183 ]
br label %187
187: ; preds = %185, %187
%188 = phi i64 [ %192, %187 ], [ %186, %185 ]
%189 = getelementptr inbounds float, float* %2, i64 %188
%190 = load float, float* %189
%191 = fmul float %125, %190
store float %191, float* %189
%192 = add nuw nsw i64 %188, 1
%193 = icmp eq i64 %192, %127
br i1 %193, label %194, label %187
194: ; preds = %187, %183, %26, %30, %123, %120, %6
%195 = phi i32 [ 0, %6 ], [ 0, %120 ], [ %24, %123 ], [ 0, %30 ], [ 0, %26 ], [ %24, %183 ], [ %24, %187 ]
ret i32 %195
}