#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 */
typedef double nPOP;

/* Variables and functions */
double *calloc(int, int);
double Fst_geno(double *Geno, int *POPs, int *PopSizes, int nIND, int nPOP) {
  double n_bar = 0, n_c = 0;
  double *PopFreqs = calloc(nPOP, sizeof(double));
  double *PopHet = calloc(nPOP, sizeof(double));
  double p_bar = 0;
  double h_bar = 0;
  double s2 = 0;
  int i, p;
  for (p = 0; p < nPOP; p++) {
    n_bar += PopSizes[p] / nPOP;
    for (i = 0; i < nIND; i++) {
      if (POPs[i] == p + 1)
        PopFreqs[p] += Geno[i] / 2.0;
      if (POPs[i] == p + 1 && Geno[i] == 1)
        PopHet[p]++;
    }
    PopFreqs[p] /= PopSizes[p];
    PopHet[p] /= PopSizes[p];
  }
  for (p = 0; p < nPOP; p++) {
    p_bar += PopSizes[p] * PopFreqs[p] / (n_bar * nPOP);
    h_bar += PopSizes[p] * PopHet[p] / (n_bar * nPOP);
  }
  n_c = nPOP * n_bar;
  for (p = 0; p < nPOP; p++)
    n_c -= (PopSizes[p] * PopSizes[p] / (nPOP * n_bar));
  n_c /= nPOP - 1;
  for (p = 0; p < nPOP; p++) {
    s2 += PopSizes[p] * (PopFreqs[p] - p_bar) * (PopFreqs[p] - p_bar) /
          ((nPOP - 1) * n_bar);
  }
  h_bar = 0;
  double a =
      (n_bar / n_c) *
      (s2 - 1.0 / (n_bar - 1.0) *
                (p_bar * (1.0 - p_bar) - s2 * (nPOP - 1) / (nPOP)-h_bar / 4.0));
  double b = (n_bar / (n_bar - 1.0)) *
             (p_bar * (1.0 - p_bar) - ((nPOP - 1.0) / nPOP) * s2 -
              h_bar * (2 * n_bar - 1) / (4 * n_bar));
  double c = h_bar / 2.0;
  return a / (a + b + c);
}


x86 assembly (clang, -O0):
<Fst_geno>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
mov    %rax,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    12be <Fst_geno+0x1ae>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cltd
idivl  -0x20(%rbp)
cvtsi2sd %eax,%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    126a <Fst_geno+0x15a>
mov    -0x10(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    11ff <Fst_geno+0xef>
mov    -0x8(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe17(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    1257 <Fst_geno+0x147>
mov    -0x8(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xdeb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1257 <Fst_geno+0x147>
jp     1257 <Fst_geno+0x147>
mov    -0x40(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  0xdcb(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    125c <Fst_geno+0x14c>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    11af <Fst_geno+0x9f>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
mov    -0x40(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    117f <Fst_geno+0x6f>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    134b <Fst_geno+0x23b>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x60(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  -0x28(%rbp),%xmm1
cvtsi2sdl -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    12c5 <Fst_geno+0x1b5>
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    13b2 <Fst_geno+0x2a2>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x60(%rbp),%rdx
imul   (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm1
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1361 <Fst_geno+0x251>
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  -0x30(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1441 <Fst_geno+0x331>
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
subsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
subsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    13d1 <Fst_geno+0x2c1>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
movsd  0xbb3(%rip),%xmm1
subsd  %xmm1,%xmm3
movsd  0xba7(%rip),%xmm1
divsd  %xmm3,%xmm1
movsd  -0x48(%rbp),%xmm3
movsd  0xb96(%rip),%xmm5
subsd  -0x48(%rbp),%xmm5
movsd  -0x58(%rbp),%xmm4
mov    -0x20(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm6
mulsd  %xmm6,%xmm4
cvtsi2sdl -0x20(%rbp),%xmm6
divsd  %xmm6,%xmm4
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
movsd  -0x50(%rbp),%xmm4
movsd  0xb39(%rip),%xmm5
divsd  %xmm5,%xmm4
subsd  %xmm4,%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xb07(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xaf2(%rip),%xmm3
subsd  -0x48(%rbp),%xmm3
cvtsi2sdl -0x20(%rbp),%xmm2
movsd  0xae0(%rip),%xmm4
subsd  %xmm4,%xmm2
cvtsi2sdl -0x20(%rbp),%xmm4
divsd  %xmm4,%xmm2
mulsd  -0x58(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
addsd  %xmm3,%xmm3
movsd  0xa91(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
movsd  0xa79(%rip),%xmm3
mulsd  -0x28(%rbp),%xmm3
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  0xa4e(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
divsd  %xmm1,%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Fst_geno>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r8d,%ebx
mov    %ecx,%r12d
mov    %rdx,%r14
mov    %rsi,%rbp
mov    %rdi,%r15
mov    %r8d,%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
mov    %rax,%r13
mov    %ebx,%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
mov    %rbx,%r11
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
test   %r11d,%r11d
jle    13bd <Fst_geno+0x2ad>
mov    %rax,%r10
mov    %r11d,%r8d
mov    %r12d,%edi
xorpd  %xmm1,%xmm1
xor    %esi,%esi
movsd  0xe8f(%rip),%xmm2
movsd  0xe8f(%rip),%xmm3
jmp    11bd <Fst_geno+0xad>
nopl   0x0(%rax,%rax,1)
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
xorps  %xmm5,%xmm5
cvtsi2sd %r9d,%xmm5
addsd  %xmm4,%xmm1
movsd  0x0(%r13,%rsi,8),%xmm4
divsd  %xmm5,%xmm4
movsd  %xmm4,0x0(%r13,%rsi,8)
movsd  (%r10,%rsi,8),%xmm4
divsd  %xmm5,%xmm4
movsd  %xmm4,(%r10,%rsi,8)
mov    %rdx,%rsi
cmp    %r8,%rdx
je     1224 <Fst_geno+0x114>
mov    (%r14,%rsi,4),%r9d
mov    %r9d,%eax
cltd
idiv   %r11d
lea    0x1(%rsi),%rdx
test   %r12d,%r12d
jle    1180 <Fst_geno+0x70>
xor    %ebx,%ebx
jmp    11e9 <Fst_geno+0xd9>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rbx
cmp    %rbx,%rdi
je     1180 <Fst_geno+0x70>
mov    0x0(%rbp,%rbx,4),%ecx
cmp    %rcx,%rdx
jne    11e0 <Fst_geno+0xd0>
movsd  (%r15,%rbx,8),%xmm4
ucomisd %xmm3,%xmm4
mulsd  %xmm2,%xmm4
addsd  0x0(%r13,%rsi,8),%xmm4
movsd  %xmm4,0x0(%r13,%rsi,8)
jne    11e0 <Fst_geno+0xd0>
jp     11e0 <Fst_geno+0xd0>
movsd  (%r10,%rsi,8),%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,(%r10,%rsi,8)
jmp    11e0 <Fst_geno+0xd0>
test   %r11d,%r11d
jle    13bd <Fst_geno+0x2ad>
cvtsi2sd %r11d,%xmm8
movapd %xmm1,%xmm4
mulsd  %xmm8,%xmm4
mov    %r8,%rax
add    $0xffffffffffffffff,%rax
je     149c <Fst_geno+0x38c>
mov    %r8d,%edx
and    $0xfffffffe,%edx
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xorps  %xmm3,%xmm3
cvtsi2sdl (%r14,%rcx,4),%xmm3
mulsd  0x0(%r13,%rcx,8),%xmm3
divsd  %xmm4,%xmm3
addsd  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sdl 0x4(%r14,%rcx,4),%xmm0
mulsd  0x8(%r13,%rcx,8),%xmm0
divsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
add    $0x2,%rcx
cmp    %rcx,%rdx
jne    1260 <Fst_geno+0x150>
test   $0x1,%r8b
je     12b8 <Fst_geno+0x1a8>
xorps  %xmm3,%xmm3
cvtsi2sdl (%r14,%rcx,4),%xmm3
mulsd  0x0(%r13,%rcx,8),%xmm3
divsd  %xmm4,%xmm3
addsd  %xmm3,%xmm0
test   %r11d,%r11d
jle    13cb <Fst_geno+0x2bb>
test   %rax,%rax
je     14b1 <Fst_geno+0x3a1>
mov    %r8d,%edx
and    $0xfffffffe,%edx
xor    %ecx,%ecx
movapd %xmm4,%xmm3
cs nopw 0x0(%rax,%rax,1)
mov    (%r14,%rcx,4),%esi
mov    0x4(%r14,%rcx,4),%edi
imul   %esi,%esi
xorps  %xmm5,%xmm5
cvtsi2sd %esi,%xmm5
divsd  %xmm4,%xmm5
subsd  %xmm5,%xmm3
imul   %edi,%edi
xorps  %xmm5,%xmm5
cvtsi2sd %edi,%xmm5
divsd  %xmm4,%xmm5
subsd  %xmm5,%xmm3
add    $0x2,%rcx
cmp    %rcx,%rdx
jne    12e0 <Fst_geno+0x1d0>
test   $0x1,%r8b
je     1332 <Fst_geno+0x222>
mov    (%r14,%rcx,4),%ecx
imul   %ecx,%ecx
xorps  %xmm5,%xmm5
cvtsi2sd %ecx,%xmm5
divsd  %xmm4,%xmm5
subsd  %xmm5,%xmm3
lea    -0x1(%r11),%ecx
cvtsi2sd %ecx,%xmm6
test   %r11d,%r11d
jle    14c6 <Fst_geno+0x3b6>
movapd %xmm1,%xmm4
mulsd  %xmm6,%xmm4
test   %rax,%rax
je     14cf <Fst_geno+0x3bf>
mov    %r8d,%ecx
and    $0xfffffffe,%ecx
xorpd  %xmm5,%xmm5
xor    %eax,%eax
xorps  %xmm7,%xmm7
cvtsi2sdl (%r14,%rax,4),%xmm7
movsd  0x0(%r13,%rax,8),%xmm2
subsd  %xmm0,%xmm2
mulsd  %xmm2,%xmm7
mulsd  %xmm2,%xmm7
divsd  %xmm4,%xmm7
addsd  %xmm5,%xmm7
xorps  %xmm5,%xmm5
cvtsi2sdl 0x4(%r14,%rax,4),%xmm5
movsd  0x8(%r13,%rax,8),%xmm2
subsd  %xmm0,%xmm2
mulsd  %xmm2,%xmm5
mulsd  %xmm2,%xmm5
divsd  %xmm4,%xmm5
addsd  %xmm7,%xmm5
add    $0x2,%rax
cmp    %rax,%rcx
jne    1360 <Fst_geno+0x250>
test   $0x1,%r8b
je     13dc <Fst_geno+0x2cc>
jmp    14df <Fst_geno+0x3cf>
cvtsi2sd %r11d,%xmm8
movapd %xmm1,%xmm4
mulsd  %xmm8,%xmm4
add    $0xffffffff,%r11d
cvtsi2sd %r11d,%xmm6
xorpd  %xmm5,%xmm5
movapd %xmm4,%xmm3
divsd  %xmm6,%xmm3
movapd %xmm1,%xmm9
divsd  %xmm3,%xmm9
movsd  0xc16(%rip),%xmm3
subsd  %xmm0,%xmm3
mulsd  %xmm5,%xmm6
divsd  %xmm8,%xmm6
mulsd  %xmm0,%xmm3
movapd %xmm3,%xmm10
subsd  %xmm6,%xmm10
unpcklpd %xmm1,%xmm6
movsd  0xbf7(%rip),%xmm0
movapd %xmm1,%xmm7
addsd  %xmm0,%xmm7
mulpd  0xbf7(%rip),%xmm6
movsd  %xmm7,%xmm6
movapd %xmm8,%xmm4
addsd  %xmm0,%xmm4
movapd %xmm1,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm0,%xmm2
divsd  %xmm7,%xmm0
mulsd  %xmm10,%xmm0
addsd  %xmm5,%xmm0
mulsd  %xmm9,%xmm0
divsd  %xmm8,%xmm4
mulsd  %xmm5,%xmm4
subsd  %xmm4,%xmm3
xorpd  %xmm4,%xmm4
mulsd  %xmm4,%xmm2
unpcklpd %xmm2,%xmm1
divpd  %xmm6,%xmm1
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
subsd  %xmm2,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm0,%xmm3
addsd  %xmm4,%xmm3
divsd  %xmm3,%xmm0
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ecx,%ecx
xorpd  %xmm0,%xmm0
test   $0x1,%r8b
jne    12a0 <Fst_geno+0x190>
jmp    12b8 <Fst_geno+0x1a8>
xor    %ecx,%ecx
movapd %xmm4,%xmm3
test   $0x1,%r8b
jne    131c <Fst_geno+0x20c>
jmp    1332 <Fst_geno+0x222>
xorpd  %xmm5,%xmm5
jmp    13dc <Fst_geno+0x2cc>
xorpd  %xmm5,%xmm5
xor    %eax,%eax
test   $0x1,%r8b
je     13dc <Fst_geno+0x2cc>
xorps  %xmm2,%xmm2
cvtsi2sdl (%r14,%rax,4),%xmm2
movsd  0x0(%r13,%rax,8),%xmm7
subsd  %xmm0,%xmm7
mulsd  %xmm7,%xmm2
mulsd  %xmm7,%xmm2
divsd  %xmm4,%xmm2
addsd  %xmm2,%xmm5
jmp    13dc <Fst_geno+0x2cc>

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

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