#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 log(double);
double pow(double, double);
void typeI_migration(int *n, int type[], double *qg, double *C1, double *fg,
                     double Mp[], double a[], double *M, double *dt,
                     double a_0[], double Mr[], int gene[], double Mi[],
                     double Mg[], double Mc[], int *nd, double r[], double T[],
                     double Sigg[], double *L) {
  int i, j;
  double tau_mig;
  double dr, p, q, Omega, Cs;
  for (i = 1; i < *n; i++) {
    if (type[i] == 0 || type[i] == 1) {
      for (j = 0; j < *nd - 1; j++) {
        if (a[i] > r[j] && a[i] < r[j + 1]) {
          p = (log(Sigg[j + 1]) - log(Sigg[j])) / (log(r[j + 1]) - log(r[j]));
          q = (log(T[j + 1]) - log(T[j])) / (log(r[j + 1]) - log(r[j]));
          Omega =
              pow(6.6738480e-8 * (*M) / pow(a[i] * 1.495978707e13, 3.0), 0.5);
          Cs = 1.0e5 * pow(T[j] / 3.0e2, 0.5) / 1.495978707e13;
          dr =
              *C1 * 1.08 * (p + 0.80 * q - 2.52) * (Mp[i] / (*M)) *
              (Sigg[j] * 1.495978707e13 * 1.495978707e13 * a[i] * a[i] / (*M)) *
              pow(a[i] * Omega / Cs, 2.0) * a[i] * Omega;
        }
      }
      a[i] += (*dt * 3.1556926e7) * dr;
      if (a[i] < 0.5 * a_0[i] && gene[i] < 5) {
        a[*n] = a_0[i];
        a_0[*n] = a_0[i];
        Mr[*n] = 1.0e20 * pow(0.01, (double)gene[i] - 1.0);
        Mi[*n] = 0.0;
        Mg[*n] = 0.0;
        Mc[*n] = Mr[*n] + Mi[*n];
        Mp[*n] = Mc[*n] + Mg[*n];
        type[*n] = 0;
        gene[*n] = gene[i] + 1;
        (*n)++;
        a_0[i] = 0.0;
      }
      if (a[i] < 0.01) {
        a[i] = 0.0;
        type[i] = 4;
      }
    }
  }
}


x86 assembly (clang, -O0):
<typeI_migration>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x8(%rbp),%rcx
cmp    (%rcx),%eax
jge    16e6 <typeI_migration+0x5c6>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11b5 <typeI_migration+0x95>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    16d3 <typeI_migration+0x5b3>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    0x58(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    14d9 <typeI_migration+0x3b9>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    14c6 <typeI_migration+0x3a6>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    14c6 <typeI_migration+0x3a6>
mov    0x70(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x70(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  -0xa0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x68(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x60(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x60(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
call   1030 <log@plt>
movsd  -0x88(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x80(%rbp),%xmm0
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x18(%rbp),%rax
movsd  0xd17(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  0xcc6(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
movsd  0xce9(%rip),%xmm1
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  0xc70(%rip),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x60(%rbp)
mov    0x68(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xca9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xc45(%rip),%xmm1
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xc85(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xc59(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0xc5c(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
movsd  0xc3e(%rip),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0xc26(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x18(%rbp),%rax
divsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
mov    0x70(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  0xbed(%rip),%xmm1
mulsd  (%rax,%rcx,8),%xmm1
movsd  0xbe0(%rip),%xmm2
mulsd  %xmm2,%xmm1
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    0x18(%rbp),%rax
divsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  0xb8a(%rip),%xmm1
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    14cb <typeI_migration+0x3ab>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11bc <typeI_migration+0x9c>
mov    0x20(%rbp),%rax
movsd  0xb23(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  0xadb(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1694 <typeI_migration+0x574>
mov    0x38(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x5,(%rax,%rcx,4)
jge    1694 <typeI_migration+0x574>
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x38(%rbp),%rax
movslq -0x34(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
movsd  0xa8b(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xa77(%rip),%xmm0
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  0xa5f(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    0x30(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x40(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x48(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x30(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x40(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x50(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x50(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x48(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    0x38(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
mov    0x38(%rbp),%rax
mov    -0x8(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  0x974(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    16ce <typeI_migration+0x5ae>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x4,(%rax,%rcx,4)
jmp    16d3 <typeI_migration+0x5b3>
jmp    16d8 <typeI_migration+0x5b8>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1182 <typeI_migration+0x62>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<typeI_migration>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,0x38(%rsp)
mov    %rcx,0x40(%rsp)
cmpl   $0x2,(%rdi)
jl     1599 <typeI_migration+0x479>
mov    %rsi,%rbx
mov    %rdi,%rbp
mov    $0x1,%r12d
mov    %rsi,0x30(%rsp)
mov    %rdi,0x28(%rsp)
jmp    1171 <typeI_migration+0x51>
nopl   0x0(%rax)
add    $0x1,%r12
movslq 0x0(%rbp),%rax
cmp    %rax,%r12
jge    1599 <typeI_migration+0x479>
cmpl   $0x1,(%rbx,%r12,4)
ja     1160 <typeI_migration+0x40>
mov    0xc8(%rsp),%rax
mov    (%rax),%eax
cmp    $0x1,%eax
jle    1400 <typeI_migration+0x2e0>
mov    0x80(%rsp),%rcx
movsd  (%rcx,%r12,8),%xmm1
xor    %r14d,%r14d
mov    0xd0(%rsp),%rbx
jmp    11bf <typeI_migration+0x9f>
cs nopw 0x0(%rax,%rax,1)
lea    -0x1(%rax),%ecx
movslq %ecx,%rcx
cmp    %rcx,%r14
jge    140e <typeI_migration+0x2ee>
mov    %r14,%r13
add    $0x1,%r14
ucomisd (%rbx,%r13,8),%xmm1
jbe    11b0 <typeI_migration+0x90>
movsd  0x8(%rbx,%r13,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    11b0 <typeI_migration+0x90>
mov    0xe0(%rsp),%r15
movsd  0x8(%r15,%r13,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,(%rsp)
movsd  (%r15,%r13,8),%xmm0
call   1030 <log@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  0x8(%rbx,%r13,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,0x10(%rsp)
movsd  (%rbx,%r13,8),%xmm0
call   1030 <log@plt>
movsd  0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  (%rsp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rsp)
mov    0xd8(%rsp),%r15
movsd  0x8(%r15,%r13,8),%xmm0
call   1030 <log@plt>
movaps %xmm0,0x10(%rsp)
movsd  (%r15,%r13,8),%xmm0
call   1030 <log@plt>
movapd 0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
movsd  0x8(%rbx,%r13,8),%xmm0
call   1030 <log@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%rbx,%r13,8),%xmm0
call   1030 <log@plt>
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm0
divsd  %xmm1,%xmm0
movapd %xmm0,0x10(%rsp)
mov    0x88(%rsp),%rbx
movsd  (%rbx),%xmm0
mulsd  0xd3f(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    0x80(%rsp),%rbp
movsd  0x0(%rbp,%r12,8),%xmm0
movsd  0xd2a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd26(%rip),%xmm1
call   1040 <pow@plt>
movsd  0x8(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movsd  0xd13(%rip),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,0x8(%rsp)
movsd  (%r15,%r13,8),%xmm0
divsd  0xd02(%rip),%xmm0
movsd  0xcf2(%rip),%xmm1
call   1040 <pow@plt>
mulsd  0xcf5(%rip),%xmm0
movsd  0xccd(%rip),%xmm4
divsd  %xmm4,%xmm0
movapd 0x10(%rsp),%xmm1
mulsd  0xce3(%rip),%xmm1
addsd  (%rsp),%xmm1
addsd  0xcde(%rip),%xmm1
movapd %xmm1,%xmm5
mov    0x38(%rsp),%rax
movsd  (%rax,%r12,8),%xmm2
movsd  (%rbx),%xmm3
mov    0xd0(%rsp),%rbx
divsd  %xmm3,%xmm2
mov    0xe0(%rsp),%rax
movsd  (%rax,%r13,8),%xmm1
mulsd  %xmm4,%xmm1
mov    0x40(%rsp),%rax
movsd  (%rax),%xmm4
unpcklpd %xmm1,%xmm4
mulpd  0xcc0(%rip),%xmm4
movsd  0x0(%rbp,%r12,8),%xmm1
unpcklpd %xmm1,%xmm5
mulpd  %xmm4,%xmm5
unpcklpd %xmm1,%xmm2
mulpd  %xmm5,%xmm2
movapd %xmm2,%xmm4
unpckhpd %xmm2,%xmm4
divsd  %xmm3,%xmm4
mulsd  %xmm2,%xmm4
movsd  0x8(%rsp),%xmm2
movapd %xmm2,%xmm3
mulsd  %xmm1,%xmm3
divsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm3
mulsd  %xmm4,%xmm3
mulsd  %xmm1,%xmm3
mulsd  %xmm2,%xmm3
mov    0xc8(%rsp),%rax
mov    (%rax),%eax
jmp    11b0 <typeI_migration+0x90>
nopl   0x0(%rax,%rax,1)
mov    0x80(%rsp),%rax
movsd  (%rax,%r12,8),%xmm1
mov    0x90(%rsp),%rax
movsd  (%rax),%xmm0
mulsd  0xc1e(%rip),%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
mov    0x80(%rsp),%rax
movsd  %xmm0,(%rax,%r12,8)
mov    0x98(%rsp),%rax
movsd  (%rax,%r12,8),%xmm1
movapd %xmm1,%xmm2
mulsd  0xbc6(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    1560 <typeI_migration+0x440>
mov    0xa8(%rsp),%rax
mov    (%rax,%r12,4),%eax
cmp    $0x4,%eax
mov    0x30(%rsp),%rbx
mov    0x28(%rsp),%rbp
jg     156a <typeI_migration+0x44a>
movslq 0x0(%rbp),%rcx
mov    0x80(%rsp),%r13
movsd  %xmm1,0x0(%r13,%rcx,8)
mov    0x98(%rsp),%r14
movsd  (%r14,%r12,8),%xmm0
movsd  %xmm0,(%r14,%rcx,8)
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
addsd  0xb97(%rip),%xmm1
movsd  0xb97(%rip),%xmm0
movsd  %xmm3,(%rsp)
call   1040 <pow@plt>
movsd  (%rsp),%xmm3
mulsd  0xb88(%rip),%xmm0
movslq 0x0(%rbp),%rax
mov    0xa0(%rsp),%rdi
movsd  %xmm0,(%rdi,%rax,8)
mov    0xb0(%rsp),%rsi
movq   $0x0,(%rsi,%rax,8)
mov    0xb8(%rsp),%rdx
movq   $0x0,(%rdx,%rax,8)
movsd  (%rdi,%rax,8),%xmm0
addsd  (%rsi,%rax,8),%xmm0
mov    0xc0(%rsp),%rcx
movsd  %xmm0,(%rcx,%rax,8)
addsd  (%rdx,%rax,8),%xmm0
mov    0x38(%rsp),%rcx
movsd  %xmm0,(%rcx,%rax,8)
movl   $0x0,(%rbx,%rax,4)
mov    0xa8(%rsp),%rdx
mov    (%rdx,%r12,4),%eax
add    $0x1,%eax
movslq 0x0(%rbp),%rcx
mov    %eax,(%rdx,%rcx,4)
addl   $0x1,0x0(%rbp)
movq   $0x0,(%r14,%r12,8)
movsd  0x0(%r13,%r12,8),%xmm0
jmp    156a <typeI_migration+0x44a>
nopl   0x0(%rax)
mov    0x30(%rsp),%rbx
mov    0x28(%rsp),%rbp
movsd  0xade(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1160 <typeI_migration+0x40>
mov    0x80(%rsp),%rax
movq   $0x0,(%rax,%r12,8)
movl   $0x4,(%rbx,%r12,4)
jmp    1160 <typeI_migration+0x40>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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