#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 */
float exp(float);
int /*<<< orphan*/ zapit(float *, int);
int gen_seki_stf(float *slip, float *t0, float *stf, int nt, float *dt,
                 float *z0) {
  int it, nstf;
  float tfac, sum, t, htan, ep, em, arg;
  zapit(stf, nt);
  nstf = (int)(1.5 * (*t0) / (*dt));
  if (nstf > nt)
    nstf = nt;
  if (nstf == 0)
    return (0);
  tfac = 2.0 / (*t0);
  for (it = 0; it < nstf; it++) {
    t = it * (*dt);
    arg = 2.0 * (t * tfac - 1.0);
    ep = exp(arg);
    em = exp(-arg);
    htan = (ep - em) / (ep + em);
    stf[it] = (*slip) * tfac * (1.0 - htan * htan);
  }
  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_seki_stf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%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)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
call   1040 <zapit@plt>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xea1(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    118c <gen_seki_stf+0x6c>
mov    -0x24(%rbp),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jne    11a2 <gen_seki_stf+0x82>
movl   $0x0,-0x4(%rbp)
jmp    1377 <gen_seki_stf+0x257>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe52(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    12ad <gen_seki_stf+0x18d>
cvtsi2ssl -0x3c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
mulss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe12(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xdfe(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
call   1030 <exp@plt>
movss  %xmm0,-0x54(%rbp)
movss  -0x5c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
call   1030 <exp@plt>
movss  %xmm0,-0x58(%rbp)
movss  -0x54(%rbp),%xmm0
subss  -0x58(%rbp),%xmm0
movss  -0x54(%rbp),%xmm1
addss  -0x58(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
mulss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x50(%rbp),%xmm1
mulss  -0x50(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xd8a(%rip),%xmm1
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%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    11ca <gen_seki_stf+0xaa>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    12fd <gen_seki_stf+0x1dd>
movss  -0x48(%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,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12bc <gen_seki_stf+0x19c>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     131f <gen_seki_stf+0x1ff>
movl   $0x0,-0x4(%rbp)
jmp    1377 <gen_seki_stf+0x257>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
divss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1371 <gen_seki_stf+0x251>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x48(%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    1338 <gen_seki_stf+0x218>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gen_seki_stf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r8,%r15
mov    %ecx,%ebp
mov    %rdx,%rbx
mov    %rsi,%r12
mov    %rdi,%r14
mov    %rdx,%rdi
mov    %ecx,%esi
call   1040 <zapit@plt>
movss  (%r12),%xmm1
cvtss2sd %xmm1,%xmm2
mulsd  0xea8(%rip),%xmm2
movss  (%r15),%xmm0
cvtss2sd %xmm0,%xmm3
divsd  %xmm3,%xmm2
cvttsd2si %xmm2,%r12d
cmp    %ebp,%r12d
cmovg  %ebp,%r12d
xor    %eax,%eax
test   %r12d,%r12d
je     13da <gen_seki_stf+0x2ba>
jle    13da <gen_seki_stf+0x2ba>
movss  0xe8e(%rip),%xmm2
divss  %xmm1,%xmm2
movss  %xmm2,(%rsp)
mov    %r12d,%eax
mov    %rax,0x8(%rsp)
lea    -0x1(%rax),%rbp
xor    %r13d,%r13d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorps  %xmm1,%xmm1
cvtsi2ss %r13d,%xmm1
mulss  %xmm0,%xmm1
mulss  (%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  0xe38(%rip),%xmm0
addsd  %xmm0,%xmm0
cvtsd2ss %xmm0,%xmm0
movaps %xmm0,0x10(%rsp)
call   1030 <exp@plt>
movss  %xmm0,0x4(%rsp)
movaps 0x10(%rsp),%xmm0
xorps  0xe2c(%rip),%xmm0
call   1030 <exp@plt>
movss  0x4(%rsp),%xmm2
movaps %xmm2,%xmm1
subss  %xmm0,%xmm1
addss  %xmm0,%xmm2
divss  %xmm2,%xmm1
movss  (%r14),%xmm0
mulss  (%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mulss  %xmm1,%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xde4(%rip),%xmm2
subsd  %xmm1,%xmm2
mulsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,(%rbx,%r13,4)
cmp    %r13,%rbp
je     1254 <gen_seki_stf+0x134>
movss  (%r15),%xmm0
add    $0x1,%r13
jmp    11b0 <gen_seki_stf+0x90>
test   %r12d,%r12d
jle    1275 <gen_seki_stf+0x155>
movss  (%r15),%xmm0
mov    0x8(%rsp),%rdi
mov    %edi,%eax
and    $0x3,%eax
cmp    $0x3,%rbp
jae    127c <gen_seki_stf+0x15c>
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
jmp    12d0 <gen_seki_stf+0x1b0>
xor    %eax,%eax
jmp    13da <gen_seki_stf+0x2ba>
mov    %edi,%edx
and    $0xfffffffc,%edx
xorps  %xmm1,%xmm1
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
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    1290 <gen_seki_stf+0x170>
test   %rax,%rax
je     12f6 <gen_seki_stf+0x1d6>
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    12e0 <gen_seki_stf+0x1c0>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jae    13da <gen_seki_stf+0x2ba>
test   %r12d,%r12d
jle    13d7 <gen_seki_stf+0x2b7>
movss  (%r14),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%r12d
jae    1323 <gen_seki_stf+0x203>
xor    %eax,%eax
jmp    13c0 <gen_seki_stf+0x2a0>
mov    %edi,%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     138e <gen_seki_stf+0x26e>
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    1350 <gen_seki_stf+0x230>
jmp    1390 <gen_seki_stf+0x270>
xor    %ecx,%ecx
test   $0x1,%dl
je     13ad <gen_seki_stf+0x28d>
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    %rdi,%rax
je     13d7 <gen_seki_stf+0x2b7>
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,%rdi
jne    13c0 <gen_seki_stf+0x2a0>
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_seki_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
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
%23 = load float*, float** %10
%24 = load i32, i32* %11
%25 = call i32 @zapit(float* %23, i32 %24)
%26 = load float*, float** %9
%27 = load float, float* %26
%28 = fpext float %27 to double
%29 = fmul double 1.500000e+00, %28
%30 = load float*, float** %12
%31 = load float, float* %30
%32 = fpext float %31 to double
%33 = fdiv double %29, %32
%34 = fptosi double %33 to i32
store i32 %34, i32* %15
%35 = load i32, i32* %15
%36 = load i32, i32* %11
%37 = icmp sgt i32 %35, %36
br i1 %37, label %38, label %40
38: ; preds = %6
%39 = load i32, i32* %11
store i32 %39, i32* %15
br label %40
40: ; preds = %38, %6
%41 = load i32, i32* %15
%42 = icmp eq i32 %41, 0
br i1 %42, label %43, label %44
43: ; preds = %40
store i32 0, i32* %7
br label %147
44: ; preds = %40
%45 = load float*, float** %9
%46 = load float, float* %45
%47 = fpext float %46 to double
%48 = fdiv double 2.000000e+00, %47
%49 = fptrunc double %48 to float
store float %49, float* %16
store i32 0, i32* %14
br label %50
50: ; preds = %95, %44
%51 = load i32, i32* %14
%52 = load i32, i32* %15
%53 = icmp slt i32 %51, %52
br i1 %53, label %54, label %98
54: ; preds = %50
%55 = load i32, i32* %14
%56 = sitofp i32 %55 to float
%57 = load float*, float** %12
%58 = load float, float* %57
%59 = fmul float %56, %58
store float %59, float* %18
%60 = load float, float* %18
%61 = load float, float* %16
%62 = fmul float %60, %61
%63 = fpext float %62 to double
%64 = fsub double %63, 1.000000e+00
%65 = fmul double 2.000000e+00, %64
%66 = fptrunc double %65 to float
store float %66, float* %22
%67 = load float, float* %22
%68 = call float @exp(float %67)
store float %68, float* %20
%69 = load float, float* %22
%70 = fneg float %69
%71 = call float @exp(float %70)
store float %71, float* %21
%72 = load float, float* %20
%73 = load float, float* %21
%74 = fsub float %72, %73
%75 = load float, float* %20
%76 = load float, float* %21
%77 = fadd float %75, %76
%78 = fdiv float %74, %77
store float %78, float* %19
%79 = load float*, float** %8
%80 = load float, float* %79
%81 = load float, float* %16
%82 = fmul float %80, %81
%83 = fpext float %82 to double
%84 = load float, float* %19
%85 = load float, float* %19
%86 = fmul float %84, %85
%87 = fpext float %86 to double
%88 = fsub double 1.000000e+00, %87
%89 = fmul double %83, %88
%90 = fptrunc double %89 to float
%91 = load float*, float** %10
%92 = load i32, i32* %14
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds float, float* %91, i64 %93
store float %90, float* %94
br label %95
95: ; preds = %54
%96 = load i32, i32* %14
%97 = add nsw i32 %96, 1
store i32 %97, i32* %14
br label %50
98: ; preds = %50
store float 0.000000e+00, float* %17
store i32 0, i32* %14
br label %99
99: ; preds = %113, %98
%100 = load i32, i32* %14
%101 = load i32, i32* %15
%102 = icmp slt i32 %100, %101
br i1 %102, label %103, label %116
103: ; preds = %99
%104 = load float, float* %17
%105 = load float*, float** %12
%106 = load float, float* %105
%107 = load float*, float** %10
%108 = load i32, i32* %14
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds float, float* %107, i64 %109
%111 = load float, float* %110
%112 = call float @llvm.fmuladd.f32(float %106, float %111, float %104)
store float %112, float* %17
br label %113
113: ; preds = %103
%114 = load i32, i32* %14
%115 = add nsw i32 %114, 1
store i32 %115, i32* %14
br label %99
116: ; preds = %99
%117 = load float, float* %17
%118 = fpext float %117 to double
%119 = fcmp ole double %118, 0.000000e+00
br i1 %119, label %120, label %121
120: ; preds = %116
store i32 0, i32* %7
br label %147
121: ; preds = %116
%122 = load float*, float** %8
%123 = load float, float* %122
%124 = load float, float* %17
%125 = fdiv float %123, %124
store float %125, float* %17
store i32 0, i32* %14
br label %126
126: ; preds = %142, %121
%127 = load i32, i32* %14
%128 = load i32, i32* %15
%129 = icmp slt i32 %127, %128
br i1 %129, label %130, label %145
130: ; preds = %126
%131 = load float*, float** %10
%132 = load i32, i32* %14
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds float, float* %131, i64 %133
%135 = load float, float* %134
%136 = load float, float* %17
%137 = fmul float %135, %136
%138 = load float*, float** %10
%139 = load i32, i32* %14
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds float, float* %138, i64 %140
store float %137, float* %141
br label %142
142: ; preds = %130
%143 = load i32, i32* %14
%144 = add nsw i32 %143, 1
store i32 %144, i32* %14
br label %126
145: ; preds = %126
%146 = load i32, i32* %15
store i32 %146, i32* %7
br label %147
147: ; preds = %145, %120, %43
%148 = load i32, i32* %7
ret i32 %148
}

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