#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);
float sqrt(float);
int /*<<< orphan*/ zapit(float *, int);
int gen_esg2006_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, tt;
  float sum, arg1;
  float alpha, beta, gamma;
  float pi = 3.14159265;
  zapit(stf, nt);
  tr = (*trise);
  alpha = 4.0 / tr;
  beta = 2.0 * tr;
  gamma = alpha / sqrt(pi);
  nstf = (int)((2.0 * beta) / (*dt) + 0.5);
  if (nstf > nt)
    nstf = nt;
  if (nstf == 0)
    return (0);
  for (it = 0; it < nstf; it++) {
    tt = it * (*dt);
    arg1 = alpha * (tt - beta);
    stf[it] = exp(-arg1 * arg1);
  }
  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):
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  0xebe(%rip),%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
call   1040 <zapit@plt>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe87(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe61(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x78(%rbp),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movss  -0x7c(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe1e(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xdfa(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    1223 <gen_esg2006_stf+0xf3>
mov    -0x24(%rbp),%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
jne    1239 <gen_esg2006_stf+0x109>
movl   $0x0,-0x4(%rbp)
jmp    136f <gen_esg2006_stf+0x23f>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    12ad <gen_esg2006_stf+0x17d>
cvtsi2ssl -0x3c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mulss  (%rax),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x70(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x68(%rbp),%xmm0
call   1030 <exp@plt>
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    1240 <gen_esg2006_stf+0x110>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    12f5 <gen_esg2006_stf+0x1c5>
movss  -0x64(%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,-0x64(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12b4 <gen_esg2006_stf+0x184>
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     1317 <gen_esg2006_stf+0x1e7>
movl   $0x0,-0x4(%rbp)
jmp    136f <gen_esg2006_stf+0x23f>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
divss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    1369 <gen_esg2006_stf+0x239>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -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    1330 <gen_esg2006_stf+0x200>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
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),%xmm0
movaps %xmm0,%xmm4
addss  %xmm0,%xmm4
cvtss2sd %xmm4,%xmm2
addsd  %xmm2,%xmm2
movss  (%r15),%xmm1
cvtss2sd %xmm1,%xmm3
divsd  %xmm3,%xmm2
addsd  0xe9b(%rip),%xmm2
cvttsd2si %xmm2,%r12d
cmp    %ebp,%r12d
cmovg  %ebp,%r12d
test   %r12d,%r12d
je     123a <gen_esg2006_stf+0x11a>
jle    1397 <gen_esg2006_stf+0x277>
movss  0xe70(%rip),%xmm2
divss  %xmm0,%xmm2
mov    %r12d,%r13d
xorps  %xmm0,%xmm0
mulss  %xmm0,%xmm1
subss  %xmm4,%xmm1
movss  %xmm2,0x4(%rsp)
mulss  %xmm2,%xmm1
movaps 0xe5d(%rip),%xmm0
xorps  %xmm1,%xmm0
mulss  %xmm1,%xmm0
movss  %xmm4,(%rsp)
call   1030 <exp@plt>
movss  %xmm0,(%rbx)
cmp    $0x1,%r12d
je     1218 <gen_esg2006_stf+0xf8>
mov    $0x1,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
mulss  (%r15),%xmm1
subss  (%rsp),%xmm1
mulss  0x4(%rsp),%xmm1
movaps %xmm1,%xmm0
xorps  0xe0f(%rip),%xmm0
mulss  %xmm1,%xmm0
call   1030 <exp@plt>
movss  %xmm0,(%rbx,%rbp,4)
add    $0x1,%rbp
cmp    %rbp,%r13
jne    11e0 <gen_esg2006_stf+0xc0>
test   %r12d,%r12d
jle    1397 <gen_esg2006_stf+0x277>
movss  (%r15),%xmm0
lea    -0x1(%r13),%rcx
mov    %r13d,%eax
and    $0x3,%eax
cmp    $0x3,%rcx
jae    1241 <gen_esg2006_stf+0x121>
xor    %ecx,%ecx
jmp    1290 <gen_esg2006_stf+0x170>
xor    %eax,%eax
jmp    139a <gen_esg2006_stf+0x27a>
mov    %r13d,%edx
and    $0xfffffffc,%edx
xor    %ecx,%ecx
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    1250 <gen_esg2006_stf+0x130>
test   %rax,%rax
je     12b6 <gen_esg2006_stf+0x196>
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    12a0 <gen_esg2006_stf+0x180>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jae    139a <gen_esg2006_stf+0x27a>
test   %r12d,%r12d
jle    1397 <gen_esg2006_stf+0x277>
movss  (%r14),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%r12d
jae    12e3 <gen_esg2006_stf+0x1c3>
xor    %eax,%eax
jmp    1380 <gen_esg2006_stf+0x260>
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     134e <gen_esg2006_stf+0x22e>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
nopl   (%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    1310 <gen_esg2006_stf+0x1f0>
jmp    1350 <gen_esg2006_stf+0x230>
xor    %ecx,%ecx
test   $0x1,%dl
je     136d <gen_esg2006_stf+0x24d>
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     1397 <gen_esg2006_stf+0x277>
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    1380 <gen_esg2006_stf+0x260>
mov    %r12d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @gen_esg2006_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
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* %29
%30 = load float*, float** %10
%31 = load i32, i32* %11
%32 = call i32 @zapit(float* %30, i32 %31)
%33 = load float*, float** %9
%34 = load float, float* %33
store float %34, float* %20
%35 = load float, float* %20
%36 = fpext float %35 to double
%37 = fdiv double 4.000000e+00, %36
%38 = fptrunc double %37 to float
store float %38, float* %26
%39 = load float, float* %20
%40 = fpext float %39 to double
%41 = fmul double 2.000000e+00, %40
%42 = fptrunc double %41 to float
store float %42, float* %27
%43 = load float, float* %26
%44 = load float, float* %29
%45 = call float @sqrt(float %44)
%46 = fdiv float %43, %45
store float %46, float* %28
%47 = load float, float* %27
%48 = fpext float %47 to double
%49 = fmul double 2.000000e+00, %48
%50 = load float*, float** %12
%51 = load float, float* %50
%52 = fpext float %51 to double
%53 = fdiv double %49, %52
%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 %142
65: ; preds = %61
store i32 0, i32* %14
br label %66
66: ; preds = %90, %65
%67 = load i32, i32* %14
%68 = load i32, i32* %15
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %93
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
%76 = load float, float* %26
%77 = load float, float* %23
%78 = load float, float* %27
%79 = fsub float %77, %78
%80 = fmul float %76, %79
store float %80, float* %25
%81 = load float, float* %25
%82 = fneg float %81
%83 = load float, float* %25
%84 = fmul float %82, %83
%85 = call float @exp(float %84)
%86 = load float*, float** %10
%87 = load i32, i32* %14
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds float, float* %86, i64 %88
store float %85, float* %89
br label %90
90: ; preds = %70
%91 = load i32, i32* %14
%92 = add nsw i32 %91, 1
store i32 %92, i32* %14
br label %66
93: ; preds = %66
store i32 0, i32* %14
br label %94
94: ; preds = %108, %93
%95 = load i32, i32* %14
%96 = load i32, i32* %15
%97 = icmp slt i32 %95, %96
br i1 %97, label %98, label %111
98: ; preds = %94
%99 = load float, float* %24
%100 = load float*, float** %12
%101 = load float, float* %100
%102 = load float*, float** %10
%103 = load i32, i32* %14
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds float, float* %102, i64 %104
%106 = load float, float* %105
%107 = call float @llvm.fmuladd.f32(float %101, float %106, float %99)
store float %107, float* %24
br label %108
108: ; preds = %98
%109 = load i32, i32* %14
%110 = add nsw i32 %109, 1
store i32 %110, i32* %14
br label %94
111: ; preds = %94
%112 = load float, float* %24
%113 = fpext float %112 to double
%114 = fcmp ole double %113, 0.000000e+00
br i1 %114, label %115, label %116
115: ; preds = %111
store i32 0, i32* %7
br label %142
116: ; preds = %111
%117 = load float*, float** %8
%118 = load float, float* %117
%119 = load float, float* %24
%120 = fdiv float %118, %119
store float %120, float* %24
store i32 0, i32* %14
br label %121
121: ; preds = %137, %116
%122 = load i32, i32* %14
%123 = load i32, i32* %15
%124 = icmp slt i32 %122, %123
br i1 %124, label %125, label %140
125: ; preds = %121
%126 = load float*, float** %10
%127 = load i32, i32* %14
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds float, float* %126, i64 %128
%130 = load float, float* %129
%131 = load float, float* %24
%132 = fmul float %130, %131
%133 = load float*, float** %10
%134 = load i32, i32* %14
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds float, float* %133, i64 %135
store float %132, float* %136
br label %137
137: ; preds = %125
%138 = load i32, i32* %14
%139 = add nsw i32 %138, 1
store i32 %139, i32* %14
br label %121
140: ; preds = %121
%141 = load i32, i32* %15
store i32 %141, i32* %7
br label %142
142: ; preds = %140, %115, %64
%143 = load i32, i32* %7
ret i32 %143
}

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