#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 */
int M_PI;
double *calloc(int /*<<< orphan*/, int);
double exp(double);
double gaussian(double, double);
double lanczos(double);
int /*<<< orphan*/ round(int);
double sqrt(double);
double *populate_kernel(double resolution, double angpix, double b,
                        int oversample, int gauss) {
  int oversample_2 = oversample * oversample;
  int oversample_3 = oversample * oversample_2;
  double inv_oversample = 1 / (double)oversample;
  double b_corr;
  double cutoff = 1 / (2 * angpix * resolution);
  double cutoff_2 =
      1 / ((2 * 2 * angpix * resolution) * (2 * 2 * angpix * resolution));
  if (b) {
    b_corr = exp((b / (8 * M_PI)) * resolution * resolution);
  } else {
    b_corr = 1;
  }
  double offset, offset_2;
  double support = (cutoff * 5 * 4.49340945790906) / M_PI;
  double support_2 = support * support;
  double *cube = calloc(round((2 * support + 3) * (2 * support + 3) *
                                  (2 * support + 3) * oversample_3 +
                              1),
                        sizeof(double));
  if (!cube) {
    return NULL;
  }
  cube[0] = support;
  int i, j, k;
  int x, y, z;
  int h;
  int i_0 = (int)(1000 - support);
  int i_1 = (int)(1000 + support + 2);
  int j_0 = (int)(1000 - support);
  int j_1 = (int)(1000 + support + 2);
  int k_0 = (int)(1000 - support);
  int k_1 = (int)(1000 + support + 2);
  double i_c, j_c, k_c;
  for (z = 0; z < oversample; z++) {
    for (y = 0; y < oversample; y++) {
      for (x = 0; x < oversample; x++) {
        double integral = 0;
        h = (x % oversample) + oversample * (y % oversample) +
            oversample_2 * (z % oversample) + 1;
        for (k = k_0; k < k_1; k++) {
          for (j = j_0; j < j_1; j++) {
            for (i = i_0; i < i_1; i++) {
              i_c = ((double)i) - (1000 + (((double)x) * inv_oversample));
              j_c = ((double)j) - (1000 + (((double)y) * inv_oversample));
              k_c = ((double)k) - (1000 + (((double)z) * inv_oversample));
              offset_2 = (i_c * i_c) + (j_c * j_c) + (k_c * k_c);
              if (offset_2 > support_2) {
                cube[h] = 0;
                h += oversample_3;
                continue;
              }
              if (gauss) {
                cube[h] = gaussian(offset_2, cutoff_2);
              } else {
                offset = sqrt(offset_2) / cutoff;
                cube[h] = lanczos(offset);
              }
              integral += cube[h];
              h += oversample_3;
            }
          }
        }
        integral = (b_corr * integral) / oversample_3;
        if (integral) {
          for (i = (x % oversample) + oversample * (y % oversample) +
                   oversample_2 * (z % oversample);
               i < h; i += oversample_3) {
            cube[i + 1] /= integral;
          }
        }
      }
    }
  }
  return cube;
}


x86 assembly (clang, -O0):
<populate_kernel>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
mov    %edi,-0x24(%rbp)
mov    %esi,-0x28(%rbp)
mov    -0x24(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
imul   -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
cvtsi2sdl -0x24(%rbp),%xmm1
movsd  0xe5f(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe5e(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xe3c(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe33(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xe21(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  %xmm0,%xmm1
movsd  0xe03(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1223 <populate_kernel+0xc3>
jp     1223 <populate_kernel+0xc3>
jmp    1255 <populate_kernel+0xf5>
movsd  -0x20(%rbp),%xmm0
mov    0x2db9(%rip),%rax
mov    (%rax),%eax
shl    $0x3,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,-0x40(%rbp)
jmp    1262 <populate_kernel+0x102>
movsd  0xda3(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xdbe(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0xda9(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x2d66(%rip),%rax
cvtsi2sdl (%rax),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  0xd69(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0xd54(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0xd3b(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x30(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd0a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1060 <round@plt>
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
mov    %rax,-0x78(%rbp)
cmpq   $0x0,-0x78(%rbp)
jne    132b <populate_kernel+0x1cb>
movq   $0x0,-0x8(%rbp)
jmp    17e2 <populate_kernel+0x682>
movsd  -0x68(%rbp),%xmm0
mov    -0x78(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xcf0(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x98(%rbp)
movsd  0xcd9(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  0xcac(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x9c(%rbp)
movsd  0xcb6(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xa0(%rbp)
movsd  0xc9f(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  0xc72(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xa4(%rbp)
movsd  0xc7c(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xa8(%rbp)
movsd  0xc65(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  0xc38(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xac(%rbp)
movl   $0x0,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    17da <populate_kernel+0x67a>
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    17c1 <populate_kernel+0x661>
movl   $0x0,-0x88(%rbp)
mov    -0x88(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    17a8 <populate_kernel+0x648>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x88(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    %edx,-0xd8(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0xdc(%rbp)
mov    -0x8c(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    -0xdc(%rbp),%eax
mov    %edx,%ecx
mov    -0xd8(%rbp),%edx
imul   %ecx,%eax
add    %eax,%edx
mov    %edx,-0xd4(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x90(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    -0xd4(%rbp),%eax
imul   %edx,%ecx
add    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
mov    -0xa8(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
cmp    -0xac(%rbp),%eax
jge    16b5 <populate_kernel+0x555>
mov    -0xa0(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
cmp    -0xa4(%rbp),%eax
jge    169c <populate_kernel+0x53c>
mov    -0x98(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    1689 <populate_kernel+0x529>
cvtsi2sdl -0x7c(%rbp),%xmm0
cvtsi2sdl -0x88(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xb2b(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
cvtsi2sdl -0x80(%rbp),%xmm0
cvtsi2sdl -0x8c(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xafd(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
cvtsi2sdl -0x84(%rbp),%xmm0
ff
cvtsi2sdl -0x90(%rbp),%xmm1
ff
movsd  -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xacc(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    15f0 <populate_kernel+0x490>
mov    -0x78(%rbp),%rax
movslq -0x94(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    -0x94(%rbp),%eax
mov    %eax,-0x94(%rbp)
jmp    167b <populate_kernel+0x51b>
cmpl   $0x0,-0x28(%rbp)
je     161e <populate_kernel+0x4be>
movsd  -0x60(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
call   1040 <gaussian@plt>
mov    -0x78(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    164c <populate_kernel+0x4ec>
movsd  -0x60(%rbp),%xmm0
call   1080 <sqrt@plt>
divsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1070 <lanczos@plt>
mov    -0x78(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x78(%rbp),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x30(%rbp),%eax
add    -0x94(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    14d8 <populate_kernel+0x378>
jmp    168e <populate_kernel+0x52e>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    14c0 <populate_kernel+0x360>
jmp    16a1 <populate_kernel+0x541>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    14a5 <populate_kernel+0x345>
movsd  -0x40(%rbp),%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
cvtsi2sdl -0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    16f3 <populate_kernel+0x593>
jp     16f3 <populate_kernel+0x593>
jmp    178f <populate_kernel+0x62f>
mov    -0x88(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    %edx,-0xe4(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0xe8(%rbp)
mov    -0x8c(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    -0xe8(%rbp),%eax
mov    %edx,%ecx
mov    -0xe4(%rbp),%edx
imul   %ecx,%eax
add    %eax,%edx
mov    %edx,-0xe0(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x90(%rbp),%eax
cltd
idivl  -0x24(%rbp)
mov    -0xe0(%rbp),%eax
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x94(%rbp),%eax
jge    178a <populate_kernel+0x62a>
movsd  -0xd0(%rbp),%xmm1
ff
mov    -0x78(%rbp),%rax
mov    -0x7c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    -0x7c(%rbp),%eax
mov    %eax,-0x7c(%rbp)
jmp    174a <populate_kernel+0x5ea>
jmp    178f <populate_kernel+0x62f>
jmp    1794 <populate_kernel+0x634>
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    1422 <populate_kernel+0x2c2>
jmp    17ad <populate_kernel+0x64d>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    1409 <populate_kernel+0x2a9>
jmp    17c6 <populate_kernel+0x666>
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    13f0 <populate_kernel+0x290>
mov    -0x78(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<populate_kernel>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd8,%rsp
mov    %esi,0x44(%rsp)
movapd %xmm0,%xmm5
mov    %edi,%ebp
imul   %edi,%ebp
mov    %ebp,0x34(%rsp)
mov    %edi,0xc(%rsp)
imul   %edi,%ebp
movsd  0xe6f(%rip),%xmm4
movsd  %xmm1,0x20(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm5,%xmm0
movapd %xmm4,%xmm3
divsd  %xmm0,%xmm3
movsd  %xmm3,0x58(%rsp)
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
movsd  %xmm4,0x48(%rsp)
movsd  %xmm5,0x18(%rsp)
jne    11c9 <populate_kernel+0x69>
jnp    11f7 <populate_kernel+0x97>
mov    0x2e18(%rip),%rax
mov    (%rax),%eax
shl    $0x3,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  %xmm0,%xmm2
mulsd  %xmm5,%xmm2
mulsd  %xmm5,%xmm2
movapd %xmm2,%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%rsp)
movsd  0xe11(%rip),%xmm1
mulsd  0x58(%rsp),%xmm1
mulsd  0xe0b(%rip),%xmm1
mov    0x2dd4(%rip),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax),%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rsp)
movapd %xmm1,%xmm0
addsd  %xmm1,%xmm0
addsd  0xdeb(%rip),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  %xmm0,0x90(%rsp)
mulsd  %xmm0,%xmm1
addsd  0xda3(%rip),%xmm1
cvttsd2si %xmm1,%edi
call   1060 <round@plt>
mov    %eax,%edi
mov    $0x8,%esi
call   1030 <calloc@plt>
test   %rax,%rax
je     161d <populate_kernel+0x4bd>
movsd  0x10(%rsp),%xmm0
movsd  %xmm0,(%rax)
cmpl   $0x0,0xc(%rsp)
jle    161d <populate_kernel+0x4bd>
movsd  0x20(%rsp),%xmm3
mulsd  0xd6a(%rip),%xmm3
mulsd  0x18(%rsp),%xmm3
mov    0xc(%rsp),%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  %xmm3,%xmm3
movsd  0xd45(%rip),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
divsd  %xmm3,%xmm1
movsd  %xmm1,0xd0(%rsp)
movsd  0x10(%rsp),%xmm3
movapd %xmm3,%xmm2
movsd  0xd40(%rip),%xmm1
movapd %xmm1,%xmm0
subsd  %xmm3,%xmm0
cvttsd2si %xmm0,%r13d
addsd  %xmm1,%xmm3
addsd  0xd2f(%rip),%xmm3
cvttsd2si %xmm3,%r15d
mulsd  %xmm2,%xmm2
movslq %ebp,%rdx
mov    %rdx,0x88(%rsp)
mov    %ecx,%ecx
lea    0x0(,%rdx,8),%r14
xor    %edx,%edx
xorpd  %xmm0,%xmm0
movsd  %xmm2,0x60(%rsp)
mov    %rcx,0x80(%rsp)
mov    %rax,0xc0(%rsp)
mov    %r13d,0x3c(%rsp)
jmp    136a <populate_kernel+0x20a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addsd  0xca8(%rip),%xmm0
mov    0x70(%rsp),%rdx
add    $0x1,%edx
cmp    0xc(%rsp),%edx
je     161d <populate_kernel+0x4bd>
movsd  %xmm0,0x98(%rsp)
mulsd  0x28(%rsp),%xmm0
addsd  0xca7(%rip),%xmm0
movsd  %xmm0,0xb8(%rsp)
mov    %rdx,0x70(%rsp)
imul   0x34(%rsp),%edx
mov    %rdx,0x50(%rsp)
xor    %edx,%edx
jmp    13ae <populate_kernel+0x24e>
nopl   (%rax)
mov    0x78(%rsp),%rdx
add    $0x1,%rdx
cmp    %rcx,%rdx
je     1350 <populate_kernel+0x1f0>
mov    %rdx,%rsi
mov    %rdx,0x78(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
imul   %rcx,%rsi
mov    %rsi,0xa0(%rsp)
mulsd  0x28(%rsp),%xmm0
addsd  0xc51(%rip),%xmm0
movsd  %xmm0,0xc8(%rsp)
xor    %edx,%edx
jmp    1412 <populate_kernel+0x2b2>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0xb0(%rsp),%rdx
add    $0x1,%rdx
mov    0x80(%rsp),%rcx
cmp    %rcx,%rdx
movsd  0x98(%rsp),%xmm0
je     13a0 <populate_kernel+0x240>
mov    0xa0(%rsp),%rcx
lea    (%rcx,%rdx,1),%esi
mov    0x50(%rsp),%rcx
lea    (%rcx,%rsi,1),%r12d
add    $0x1,%r12d
xorpd  %xmm3,%xmm3
cmp    %r15d,%r13d
mov    %rdx,0xb0(%rsp)
mov    %rsi,0xa8(%rsp)
jge    15b0 <populate_kernel+0x450>
xorps  %xmm4,%xmm4
cvtsi2sd %edx,%xmm4
mulsd  0x28(%rsp),%xmm4
addsd  0xbcc(%rip),%xmm4
xorpd  %xmm3,%xmm3
mov    %r13d,%ecx
movsd  %xmm4,0x68(%rsp)
jmp    1480 <populate_kernel+0x320>
nopl   0x0(%rax,%rax,1)
mov    0x38(%rsp),%ecx
add    $0x1,%ecx
cmp    %r15d,%ecx
je     15b0 <populate_kernel+0x450>
mov    %ecx,0x38(%rsp)
xorps  %xmm5,%xmm5
cvtsi2sd %ecx,%xmm5
subsd  0xb8(%rsp),%xmm5
mov    %r13d,%ecx
movsd  %xmm5,0x18(%rsp)
jmp    14b9 <populate_kernel+0x359>
nop
mov    0x40(%rsp),%ecx
add    $0x1,%ecx
cmp    %r15d,%ecx
mov    0xc0(%rsp),%rax
mov    0x3c(%rsp),%r13d
je     1470 <populate_kernel+0x310>
mov    %ecx,0x40(%rsp)
xorps  %xmm6,%xmm6
cvtsi2sd %ecx,%xmm6
subsd  0xc8(%rsp),%xmm6
mulsd  %xmm6,%xmm6
movslq %r12d,%rcx
lea    (%rax,%rcx,8),%rbx
movsd  %xmm6,0x20(%rsp)
jmp    14f6 <populate_kernel+0x396>
movq   $0x0,(%rbx)
add    $0x1,%r13d
add    %r14,%rbx
add    %ebp,%r12d
cmp    %r13d,%r15d
je     14a0 <populate_kernel+0x340>
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
subsd  %xmm4,%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm6,%xmm1
movapd %xmm5,%xmm0
mulsd  %xmm5,%xmm0
addsd  %xmm1,%xmm0
ucomisd %xmm2,%xmm0
ja     14e0 <populate_kernel+0x380>
cmpl   $0x0,0x44(%rsp)
movsd  %xmm3,0x10(%rsp)
je     1557 <populate_kernel+0x3f7>
movsd  0xd0(%rsp),%xmm1
call   1040 <gaussian@plt>
movsd  0x20(%rsp),%xmm6
movsd  0x18(%rsp),%xmm5
movsd  0x68(%rsp),%xmm4
movsd  0x10(%rsp),%xmm3
movsd  0x60(%rsp),%xmm2
jmp    1595 <populate_kernel+0x435>
ucomisd 0xad9(%rip),%xmm0
jb     1567 <populate_kernel+0x407>
sqrtsd %xmm0,%xmm0
jmp    156c <populate_kernel+0x40c>
call   1080 <sqrt@plt>
divsd  0x58(%rsp),%xmm0
call   1070 <lanczos@plt>
movsd  0x60(%rsp),%xmm2
movsd  0x10(%rsp),%xmm3
movsd  0x68(%rsp),%xmm4
movsd  0x18(%rsp),%xmm5
movsd  0x20(%rsp),%xmm6
movsd  %xmm0,(%rbx)
addsd  %xmm0,%xmm3
jmp    14e7 <populate_kernel+0x387>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulsd  0x48(%rsp),%xmm3
divsd  0x90(%rsp),%xmm3
ucomisd 0xa71(%rip),%xmm3
mov    0x88(%rsp),%rsi
mov    0xa8(%rsp),%rcx
jne    15df <populate_kernel+0x47f>
jnp    13f0 <populate_kernel+0x290>
add    0x50(%rsp),%ecx
cmp    %r12d,%ecx
jge    13f0 <populate_kernel+0x290>
movslq %ecx,%rdx
movslq %r12d,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x8(%rax,%rdx,8),%xmm0
divsd  %xmm3,%xmm0
movsd  %xmm0,0x8(%rax,%rdx,8)
add    %rsi,%rdx
cmp    %rcx,%rdx
jl     1600 <populate_kernel+0x4a0>
jmp    13f0 <populate_kernel+0x290>
add    $0xd8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@M_PI = global i32 0
define noalias double* @populate_kernel(double %0, double %1, double %2, i32 %3, i32 %4) {
%6 = mul nsw i32 %3, %3
%7 = mul i32 %6, %3
%8 = sitofp i32 %3 to double
%9 = fdiv double 1.000000e+00, %8
%10 = fmul double %1, 2.000000e+00
%11 = fmul double %10, %0
%12 = fdiv double 1.000000e+00, %11
%13 = fmul double %1, 4.000000e+00
%14 = fmul double %13, %0
%15 = fmul double %14, %14
%16 = fdiv double 1.000000e+00, %15
%17 = fcmp une double %2, 0.000000e+00
br i1 %17, label %18, label %26
18: ; preds = %5
%19 = load i32, i32* @M_PI
%20 = shl nsw i32 %19, 3
%21 = sitofp i32 %20 to double
%22 = fdiv double %2, %21
%23 = fmul double %22, %0
%24 = fmul double %23, %0
%25 = tail call double @exp(double %24)
br label %26
26: ; preds = %5, %18
%27 = phi double [ %25, %18 ], [ 1.000000e+00, %5 ]
%28 = fmul double %12, 5.000000e+00
%29 = fmul double %28, 0x4011F940543506A8
%30 = load i32, i32* @M_PI
%31 = sitofp i32 %30 to double
%32 = fdiv double %29, %31
%33 = fmul double %32, %32
%34 = tail call double @llvm.fmuladd.f64(double %32, double 2.000000e+00, double 3.000000e+00)
%35 = fmul double %34, %34
%36 = fmul double %34, %35
%37 = sitofp i32 %7 to double
%38 = tail call double @llvm.fmuladd.f64(double %36, double %37, double 1.000000e+00)
%39 = fptosi double %38 to i32
%40 = tail call i32 @round(i32 %39)
%41 = tail call double* @calloc(i32 %40, i32 8)
%42 = icmp eq double* %41, null
br i1 %42, label %156, label %43
43: ; preds = %26
store double %32, double* %41
%44 = fsub double 1.000000e+03, %32
%45 = fptosi double %44 to i32
%46 = fadd double %32, 1.000000e+03
%47 = fadd double %46, 2.000000e+00
%48 = fptosi double %47 to i32
%49 = icmp sgt i32 %3, 0
br i1 %49, label %50, label %156
50: ; preds = %43
%51 = icmp slt i32 %45, %48
%52 = icmp eq i32 %4, 0
%53 = sext i32 %7 to i64
%54 = zext i32 %3 to i64
%55 = zext i32 %3 to i64
br label %56
56: ; preds = %153, %50
%57 = phi i32 [ 0, %50 ], [ %154, %153 ]
%58 = sitofp i32 %57 to double
%59 = tail call double @llvm.fmuladd.f64(double %58, double %9, double 1.000000e+03)
%60 = mul nsw i32 %57, %6
br label %61
61: ; preds = %150, %56
%62 = phi i64 [ 0, %56 ], [ %151, %150 ]
%63 = mul i64 %62, %54
%64 = trunc i64 %62 to i32
%65 = sitofp i32 %64 to double
%66 = tail call double @llvm.fmuladd.f64(double %65, double %9, double 1.000000e+03)
br label %67
67: ; preds = %61, %147
%68 = phi i64 [ 0, %61 ], [ %148, %147 ]
%69 = add i64 %63, %68
%70 = trunc i64 %69 to i32
%71 = add i32 %60, %70
%72 = add nsw i32 %71, 1
br i1 %51, label %73, label %128
73: ; preds = %67
%74 = trunc i64 %68 to i32
%75 = sitofp i32 %74 to double
%76 = tail call double @llvm.fmuladd.f64(double %75, double %9, double 1.000000e+03)
br label %77
77: ; preds = %122, %73
%78 = phi double [ 0.000000e+00, %73 ], [ %114, %122 ]
%79 = phi i32 [ %45, %73 ], [ %124, %122 ]
%80 = phi i32 [ %72, %73 ], [ %123, %122 ]
%81 = sitofp i32 %79 to double
%82 = fsub double %81, %59
br label %83
83: ; preds = %118, %77
%84 = phi double [ %78, %77 ], [ %114, %118 ]
%85 = phi i32 [ %45, %77 ], [ %120, %118 ]
%86 = phi i32 [ %80, %77 ], [ %119, %118 ]
%87 = sitofp i32 %85 to double
%88 = fsub double %87, %66
%89 = fmul double %88, %88
%90 = sext i32 %86 to i64
br label %91
91: ; preds = %83, %113
%92 = phi i64 [ %90, %83 ], [ %115, %113 ]
%93 = phi double [ %84, %83 ], [ %114, %113 ]
%94 = phi i32 [ %45, %83 ], [ %116, %113 ]
%95 = sitofp i32 %94 to double
%96 = fsub double %95, %76
%97 = tail call double @llvm.fmuladd.f64(double %96, double %96, double %89)
%98 = tail call double @llvm.fmuladd.f64(double %82, double %82, double %97)
%99 = fcmp ogt double %98, %33
br i1 %99, label %100, label %102
100: ; preds = %91
%101 = getelementptr inbounds double, double* %41, i64 %92
store double 0.000000e+00, double* %101
br label %113
102: ; preds = %91
br i1 %52, label %105, label %103
103: ; preds = %102
%104 = tail call double @gaussian(double %98, double %16)
br label %109
105: ; preds = %102
%106 = tail call double @sqrt(double %98)
%107 = fdiv double %106, %12
%108 = tail call double @lanczos(double %107)
br label %109
109: ; preds = %105, %103
%110 = phi double [ %108, %105 ], [ %104, %103 ]
%111 = getelementptr inbounds double, double* %41, i64 %92
store double %110, double* %111
%112 = fadd double %93, %110
br label %113
113: ; preds = %109, %100
%114 = phi double [ %93, %100 ], [ %112, %109 ]
%115 = add i64 %92, %53
%116 = add i32 %94, 1
%117 = icmp eq i32 %116, %48
br i1 %117, label %118, label %91
118: ; preds = %113
%119 = trunc i64 %115 to i32
%120 = add i32 %85, 1
%121 = icmp eq i32 %120, %48
br i1 %121, label %122, label %83
122: ; preds = %118
%123 = trunc i64 %115 to i32
%124 = add i32 %79, 1
%125 = icmp eq i32 %124, %48
br i1 %125, label %126, label %77
126: ; preds = %122
%127 = trunc i64 %115 to i32
br label %128
128: ; preds = %126, %67
%129 = phi i32 [ %72, %67 ], [ %127, %126 ]
%130 = phi double [ 0.000000e+00, %67 ], [ %114, %126 ]
%131 = fmul double %27, %130
%132 = fdiv double %131, %37
%133 = fcmp une double %132, 0.000000e+00
%134 = icmp slt i32 %71, %129
%135 = select i1 %133, i1 %134, i1 false
br i1 %135, label %136, label %147
136: ; preds = %128
%137 = sext i32 %71 to i64
%138 = sext i32 %129 to i64
br label %139
139: ; preds = %136, %139
%140 = phi i64 [ %137, %136 ], [ %145, %139 ]
%141 = add nsw i64 %140, 1
%142 = getelementptr inbounds double, double* %41, i64 %141
%143 = load double, double* %142
%144 = fdiv double %143, %132
store double %144, double* %142
%145 = add i64 %140, %53
%146 = icmp slt i64 %145, %138
br i1 %146, label %139, label %147
147: ; preds = %139, %128
%148 = add nuw nsw i64 %68, 1
%149 = icmp eq i64 %148, %55
br i1 %149, label %150, label %67
150: ; preds = %147
%151 = add nuw nsw i64 %62, 1
%152 = icmp eq i64 %151, %55
br i1 %152, label %153, label %61
153: ; preds = %150
%154 = add nuw nsw i32 %57, 1
%155 = icmp eq i32 %154, %3
br i1 %155, label %156, label %56
156: ; preds = %153, %43, %26
ret double* %41
}