void cu_convolve_image_psf(int profile_type, int nx, int ny, int dx, int dy,
                           int dp, int ds, int n_coeff, int nkernel,
                           int kernel_radius, int *kxindex, int *kyindex,
                           int *ext_basis, double *psf_parameters,
                           double *psf_0, double *psf_xd, double *psf_yd,
                           double *coeff, double *cim1, double *cim2,
                           double *tex0, double *tex1) {
  int id, txa, tyb, txag, tybg, imax, jmax, idxmin, idxmax, idymin, idymax;
  int np, ns, i, j, ii, ip, jp, ic, ki, a, b;
  int d1, sidx, l, m, l1, m1, ig, jg;
  int psf_size, ix, jx;
  double x, y, p0, p1, p1g, cpsf_pixel;
  int xpos, ypos;
  double psf_height, psf_sigma_x, psf_sigma_y, psf_sigma_xy, psf_xpos, psf_ypos;
  double gain, psf_rad, psf_rad2, px, py;
  double sx2, sy2, sxy2, sx2msy2, sx2psy2;
  double psf_norm, dd;
  double pi = 3.14159265, fwtosig = 0.8493218;
  double psf_sum;
  double cpsf[256];
  int idx, idy, blockIdx, blockIdy, blockDimx = 16, blockDimy = 16, gridDimx,
                                    gridDimy;
  gridDimx = (nx - 1) / dx + 1;
  gridDimy = (ny - 1) / dy + 1;
  np = (dp + 1) * (dp + 2) / 2;
  ns = (ds + 1) * (ds + 2) / 2;
  psf_size = (int)psf_parameters[0];
  psf_height = psf_parameters[1];
  psf_sigma_x = psf_parameters[2];
  psf_sigma_y = psf_parameters[3];
  psf_ypos = psf_parameters[4];
  psf_xpos = psf_parameters[5];
  psf_rad = psf_parameters[6];
  gain = psf_parameters[7];
  if (psf_rad > 6.0) {
    psf_rad = 6.0;
  }
  psf_rad2 = psf_rad * psf_rad;
  psf_sum = 0.0;
  for (i = 1; i < psf_size - 1; i++) {
    for (j = 1; j < psf_size - 1; j++) {
      psf_sum += psf_0[i + j * psf_size];
    }
  }
  if (profile_type == 0) {
    psf_norm = 0.25 * psf_sum + psf_height * 2 * pi * fwtosig * fwtosig;
  } else if (profile_type == 1) {
    psf_sigma_xy = psf_parameters[8];
    sx2 = psf_sigma_x * psf_sigma_x;
    sy2 = psf_sigma_y * psf_sigma_y;
    sxy2 = psf_sigma_xy * psf_sigma_xy;
    sx2msy2 = 1.0 / sx2 - 1.0 / sy2;
    sx2psy2 = 1.0 / sx2 + 1.0 / sy2;
    px = 1.0 / sqrt(sx2psy2 + sqrt(sx2msy2 * sx2msy2 + sxy2));
    py = 1.0 / sqrt(sx2psy2 - sqrt(sx2msy2 * sx2msy2 + sxy2));
    psf_norm = 0.25 * psf_sum +
               psf_height * pi * (px * py) / (psf_sigma_x * psf_sigma_y);
  }
  for (blockIdx = 0; blockIdx < gridDimx; blockIdx += 1) {
    for (blockIdy = 0; blockIdy < gridDimy; blockIdy += 1) {
      xpos = blockIdx * dx + dx / 2;
      ypos = blockIdy * dy + dy / 2;
      x = (xpos - 0.5 * (nx - 1)) / (nx - 1);
      y = (ypos - 0.5 * (ny - 1)) / (ny - 1);
      for (idx = 0; idx < blockDimx; idx++) {
        for (idy = 0; idy < blockDimy; idy++) {
          id = idx + idy * blockDimx;
          cpsf[id] = 0.0;
          p0 = integrated_profile(profile_type, idx, idy, xpos, ypos,
                                  psf_parameters, psf_0, psf_xd, psf_yd);
          cpsf_pixel = 0.0;
          for (ic = 0; ic < n_coeff; ic++) {
            ki = ic < np ? 0 : (ic - np) / ns + 1;
            if (ki < nkernel) {
              a = kxindex[ki];
              b = kyindex[ki];
              if (ki == 0) {
                d1 = dp;
                sidx = ic;
              } else {
                d1 = ds;
                sidx = ic - np - (ki - 1) * ns;
              }
              l1 = m1 = 0;
              if (d1 > 0) {
                i = 0;
                for (l = 0; l <= d1; l++) {
                  for (m = 0; m <= d1 - l; m++) {
                    if (i == sidx) {
                      l1 = l;
                      m1 = m;
                    }
                    i++;
                  }
                }
              }
              if (ki > 0) {
                txa = idx + a;
                tyb = idy + b;
                p1 = integrated_profile(profile_type, txa, tyb, xpos, ypos,
                                        psf_parameters, psf_0, psf_xd, psf_yd);
                if (ext_basis[ki]) {
                  p1 = 0.0;
                  for (ig = -1; ig < 2; ig++) {
                    for (jg = -1; jg < 2; jg++) {
                      txag = txa + ig;
                      tybg = tyb + jg;
                      p1g = integrated_profile(profile_type, txag, tybg, xpos,
                                               ypos, psf_parameters, psf_0,
                                               psf_xd, psf_yd);
                      p1 += p1g;
                    }
                  }
                  p1 /= 9.0;
                }
                cpsf_pixel += coeff[ic] * (p1 - p0) * pow(x, l1) * pow(y, m1);
              } else {
                cpsf_pixel += coeff[ic] * p0 * pow(x, l1) * pow(y, m1);
              }
            }
          }
          cpsf[id] = cpsf_pixel / psf_norm;
        }
      }
      imax = (xpos + dx / 2) < nx ? xpos + dx / 2 : nx;
      jmax = (ypos + dy / 2) < ny ? ypos + dy / 2 : ny;
      for (i = xpos - dx / 2; i < imax; i++) {
        for (j = ypos - dy / 2; j < jmax; j++) {
          cim1[i + j * nx] = 0.0;
          cim2[i + j * nx] = 0.0;
          idxmin = ((i - 8) >= 0) ? 0 : 8 - i;
          idxmax = (blockDimx < (nx + 8 - i)) ? blockDimx : nx + 8 - i;
          idymin = ((j - 8) >= 0) ? 0 : 8 - j;
          idymax = (blockDimy < (ny + 8 - j)) ? blockDimx : ny + 8 - j;
          for (idx = idxmin; idx < idxmax; idx++) {
            for (idy = idymin; idy < idymax; idy++) {
              id = idx + idy * blockDimx;
              ix = i + idx - 8;
              jx = j + idy - 8;
              if ((ix < nx) && (jx < ny)) {
                cim1[i + j * nx] += cpsf[id] * tex0[ix + nx * jx];
                cim2[i + j * nx] += cpsf[id] * tex1[ix + nx * jx];
              }
            }
          }
        }
      }
    }
  }
  return;
}


x86 assembly (clang, -O0):
<cu_convolve_image_psf>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa30,%rsp
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
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),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
movsd  0xe77(%rip),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  0xe5f(%rip),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movl   $0x10,-0x994(%rbp)
movl   $0x10,-0x998(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cltd
idivl  -0x10(%rbp)
add    $0x1,%eax
mov    %eax,-0x99c(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
cltd
idivl  -0x14(%rbp)
add    $0x1,%eax
mov    %eax,-0x9a0(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    -0x18(%rbp),%ecx
add    $0x2,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x48(%rbp)
mov    0x10(%rbp),%eax
add    $0x1,%eax
mov    0x10(%rbp),%ecx
add    $0x2,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x4c(%rbp)
mov    0x48(%rbp),%rax
cvttsd2si (%rax),%eax
mov    %eax,-0x94(%rbp)
mov    0x48(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x48(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  0xd4c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12ce <cu_convolve_image_psf+0x19e>
movsd  0xd3a(%rip),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x118(%rbp),%xmm0
ff
mulsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1373 <cu_convolve_image_psf+0x243>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1360 <cu_convolve_image_psf+0x230>
mov    0x50(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%edx
imul   -0x94(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x180(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1313 <cu_convolve_image_psf+0x1e3>
jmp    1365 <cu_convolve_image_psf+0x235>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    12f8 <cu_convolve_image_psf+0x1c8>
cmpl   $0x0,-0x4(%rbp)
jne    13ca <cu_convolve_image_psf+0x29a>
movsd  -0x180(%rbp),%xmm0
ff
movsd  0xc9b(%rip),%xmm1
mulsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x170(%rbp),%xmm1
ff
mulsd  -0x178(%rbp),%xmm1
ff
mulsd  -0x178(%rbp),%xmm1
ff
movsd  0xc63(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
jmp    15a2 <cu_convolve_image_psf+0x472>
cmpl   $0x1,-0x4(%rbp)
jne    159d <cu_convolve_image_psf+0x46d>
mov    0x48(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
mulsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0xbeb(%rip),%xmm0
divsd  -0x138(%rbp),%xmm0
ff
movsd  0xbdb(%rip),%xmm1
divsd  -0x140(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  0xbbf(%rip),%xmm0
divsd  -0x138(%rbp),%xmm0
ff
movsd  0xbaf(%rip),%xmm1
divsd  -0x140(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x9b0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x148(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x9b0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xb47(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x9a8(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x148(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x9a8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xae7(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x170(%rbp),%xmm1
ff
movsd  -0x128(%rbp),%xmm2
ff
mulsd  -0x130(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  -0xe8(%rbp),%xmm2
ff
mulsd  -0xf0(%rbp),%xmm2
ff
divsd  %xmm2,%xmm1
movsd  0xa8b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
jmp    15a2 <cu_convolve_image_psf+0x472>
movl   $0x0,-0x98c(%rbp)
mov    -0x98c(%rbp),%eax
cmp    -0x99c(%rbp),%eax
jge    1f8a <cu_convolve_image_psf+0xe5a>
movl   $0x0,-0x990(%rbp)
mov    -0x990(%rbp),%eax
cmp    -0x9a0(%rbp),%eax
jge    1f71 <cu_convolve_image_psf+0xe41>
mov    -0x98c(%rbp),%eax
imul   -0x10(%rbp),%eax
mov    %eax,-0x9b8(%rbp)
mov    -0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9b8(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0xd4(%rbp)
mov    -0x990(%rbp),%eax
imul   -0x14(%rbp),%eax
mov    %eax,-0x9b4(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9b4(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0xd8(%rbp)
cvtsi2sdl -0xd4(%rbp),%xmm1
ff
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  0x9e6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
cvtsi2sdl -0xd8(%rbp),%xmm1
ff
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  0x9ae(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movl   $0x0,-0x984(%rbp)
mov    -0x984(%rbp),%eax
cmp    -0x994(%rbp),%eax
jge    1b84 <cu_convolve_image_psf+0xa54>
movl   $0x0,-0x988(%rbp)
mov    -0x988(%rbp),%eax
cmp    -0x998(%rbp),%eax
jge    1b6b <cu_convolve_image_psf+0xa3b>
mov    -0x984(%rbp),%eax
mov    -0x988(%rbp),%ecx
imul   -0x994(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
movslq -0x1c(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x980(%rbp,%rax,8)
ff ff
mov    -0x4(%rbp),%edi
mov    -0x984(%rbp),%esi
mov    -0x988(%rbp),%edx
mov    -0xd4(%rbp),%ecx
mov    -0xd8(%rbp),%r8d
mov    0x48(%rbp),%r9
mov    0x50(%rbp),%r11
mov    0x58(%rbp),%r10
mov    0x60(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   1030 <integrated_profile@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1b3a <cu_convolve_image_psf+0xa0a>
mov    -0x64(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1784 <cu_convolve_image_psf+0x654>
xor    %eax,%eax
mov    %eax,-0x9bc(%rbp)
jmp    1797 <cu_convolve_image_psf+0x667>
mov    -0x64(%rbp),%eax
sub    -0x48(%rbp),%eax
cltd
idivl  -0x4c(%rbp)
add    $0x1,%eax
mov    %eax,-0x9bc(%rbp)
mov    -0x9bc(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    1b27 <cu_convolve_image_psf+0x9f7>
mov    0x30(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x6c(%rbp)
mov    0x38(%rbp),%rax
movslq -0x68(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x70(%rbp)
cmpl   $0x0,-0x68(%rbp)
jne    17e3 <cu_convolve_image_psf+0x6b3>
mov    -0x18(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x78(%rbp)
jmp    17fe <cu_convolve_image_psf+0x6ce>
mov    0x10(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x64(%rbp),%eax
sub    -0x48(%rbp),%eax
mov    -0x68(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x4c(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x78(%rbp)
movl   $0x0,-0x88(%rbp)
movl   $0x0,-0x84(%rbp)
cmpl   $0x0,-0x74(%rbp)
jle    189b <cu_convolve_image_psf+0x76b>
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x74(%rbp),%eax
jg     1896 <cu_convolve_image_psf+0x766>
movl   $0x0,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    -0x74(%rbp),%ecx
sub    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
jg     1883 <cu_convolve_image_psf+0x753>
mov    -0x50(%rbp),%eax
cmp    -0x78(%rbp),%eax
jne    186c <cu_convolve_image_psf+0x73c>
mov    -0x7c(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    183d <cu_convolve_image_psf+0x70d>
jmp    1888 <cu_convolve_image_psf+0x758>
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    182a <cu_convolve_image_psf+0x6fa>
jmp    189b <cu_convolve_image_psf+0x76b>
cmpl   $0x0,-0x68(%rbp)
jle    1aa1 <cu_convolve_image_psf+0x971>
mov    -0x984(%rbp),%eax
add    -0x6c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x988(%rbp),%eax
add    -0x70(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x20(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    -0xd4(%rbp),%ecx
mov    -0xd8(%rbp),%r8d
mov    0x48(%rbp),%r9
mov    0x50(%rbp),%r11
mov    0x58(%rbp),%r10
mov    0x60(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   1030 <integrated_profile@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x40(%rbp),%rax
movslq -0x68(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1a0f <cu_convolve_image_psf+0x8df>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movl   $0xffffffff,-0x8c(%rbp)
ff ff ff
cmpl   $0x2,-0x8c(%rbp)
jge    19f3 <cu_convolve_image_psf+0x8c3>
movl   $0xffffffff,-0x90(%rbp)
ff ff ff
cmpl   $0x2,-0x90(%rbp)
jge    19da <cu_convolve_image_psf+0x8aa>
mov    -0x20(%rbp),%eax
add    -0x8c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
add    -0x90(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x28(%rbp),%esi
mov    -0x2c(%rbp),%edx
mov    -0xd4(%rbp),%ecx
mov    -0xd8(%rbp),%r8d
mov    0x48(%rbp),%r9
mov    0x50(%rbp),%r11
mov    0x58(%rbp),%r10
mov    0x60(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x0,%al
call   1030 <integrated_profile@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    1942 <cu_convolve_image_psf+0x812>
jmp    19df <cu_convolve_image_psf+0x8af>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    192b <cu_convolve_image_psf+0x7fb>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  0x635(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x68(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0xc0(%rbp),%xmm1
ff
subsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x9d0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
cvtsi2sdl -0x84(%rbp),%xmm1
ff
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x9d0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x9c8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sdl -0x88(%rbp),%xmm1
ff
call   1040 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x9c8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    1b22 <cu_convolve_image_psf+0x9f2>
mov    0x68(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x9e0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
cvtsi2sdl -0x84(%rbp),%xmm1
ff
call   1040 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0x9e0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x9d8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sdl -0x88(%rbp),%xmm1
ff
call   1040 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x9d8(%rbp),%xmm0
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
jmp    1b27 <cu_convolve_image_psf+0x9f7>
jmp    1b2c <cu_convolve_image_psf+0x9fc>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    175f <cu_convolve_image_psf+0x62f>
movsd  -0xd0(%rbp),%xmm0
ff
divsd  -0x160(%rbp),%xmm0
ff
movslq -0x1c(%rbp),%rax
movsd  %xmm0,-0x980(%rbp,%rax,8)
ff ff
mov    -0x988(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x988(%rbp)
jmp    16c6 <cu_convolve_image_psf+0x596>
jmp    1b70 <cu_convolve_image_psf+0xa40>
mov    -0x984(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x984(%rbp)
jmp    16aa <cu_convolve_image_psf+0x57a>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x9e4(%rbp)
mov    -0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9e4(%rbp),%eax
add    %ecx,%eax
cmp    -0x8(%rbp),%eax
jge    1bda <cu_convolve_image_psf+0xaaa>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x9ec(%rbp)
mov    -0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9ec(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x9e8(%rbp)
jmp    1be3 <cu_convolve_image_psf+0xab3>
mov    -0x8(%rbp),%eax
mov    %eax,-0x9e8(%rbp)
mov    -0x9e8(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0xd8(%rbp),%eax
mov    %eax,-0x9f0(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9f0(%rbp),%eax
add    %ecx,%eax
cmp    -0xc(%rbp),%eax
jge    1c42 <cu_convolve_image_psf+0xb12>
mov    -0xd8(%rbp),%eax
mov    %eax,-0x9f8(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9f8(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x9f4(%rbp)
jmp    1c4b <cu_convolve_image_psf+0xb1b>
mov    -0xc(%rbp),%eax
mov    %eax,-0x9f4(%rbp)
mov    -0x9f4(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0xd4(%rbp),%eax
mov    %eax,-0x9fc(%rbp)
mov    -0x10(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x9fc(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1f58 <cu_convolve_image_psf+0xe28>
mov    -0xd8(%rbp),%eax
mov    %eax,-0xa00(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0xa00(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1f45 <cu_convolve_image_psf+0xe15>
mov    0x70(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x78(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
sub    $0x8,%eax
cmp    $0x0,%eax
jl     1d06 <cu_convolve_image_psf+0xbd6>
xor    %eax,%eax
mov    %eax,-0xa04(%rbp)
jmp    1d14 <cu_convolve_image_psf+0xbe4>
mov    $0x8,%eax
sub    -0x50(%rbp),%eax
mov    %eax,-0xa04(%rbp)
mov    -0xa04(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x994(%rbp),%eax
mov    -0x8(%rbp),%ecx
add    $0x8,%ecx
sub    -0x50(%rbp),%ecx
cmp    %ecx,%eax
jge    1d45 <cu_convolve_image_psf+0xc15>
mov    -0x994(%rbp),%eax
mov    %eax,-0xa08(%rbp)
jmp    1d54 <cu_convolve_image_psf+0xc24>
mov    -0x8(%rbp),%eax
add    $0x8,%eax
sub    -0x50(%rbp),%eax
mov    %eax,-0xa08(%rbp)
mov    -0xa08(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x54(%rbp),%eax
sub    $0x8,%eax
cmp    $0x0,%eax
jl     1d79 <cu_convolve_image_psf+0xc49>
xor    %eax,%eax
mov    %eax,-0xa0c(%rbp)
jmp    1d87 <cu_convolve_image_psf+0xc57>
mov    $0x8,%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0xa0c(%rbp)
mov    -0xa0c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x998(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x8,%ecx
sub    -0x54(%rbp),%ecx
cmp    %ecx,%eax
jge    1db8 <cu_convolve_image_psf+0xc88>
mov    -0x994(%rbp),%eax
mov    %eax,-0xa10(%rbp)
jmp    1dc7 <cu_convolve_image_psf+0xc97>
mov    -0xc(%rbp),%eax
add    $0x8,%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0xa10(%rbp)
mov    -0xa10(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x984(%rbp)
mov    -0x984(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1f32 <cu_convolve_image_psf+0xe02>
mov    -0x40(%rbp),%eax
mov    %eax,-0x988(%rbp)
mov    -0x988(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1f19 <cu_convolve_image_psf+0xde9>
mov    -0x984(%rbp),%eax
mov    -0x988(%rbp),%ecx
imul   -0x994(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x50(%rbp),%eax
add    -0x984(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x98(%rbp)
mov    -0x54(%rbp),%eax
add    -0x988(%rbp),%eax
sub    $0x8,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1f00 <cu_convolve_image_psf+0xdd0>
mov    -0x9c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1f00 <cu_convolve_image_psf+0xdd0>
movslq -0x1c(%rbp),%rax
movsd  -0x980(%rbp,%rax,8),%xmm0
ff ff
mov    0x80(%rbp),%rax
mov    -0x98(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x9c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x70(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movslq -0x1c(%rbp),%rax
movsd  -0x980(%rbp,%rax,8),%xmm0
ff ff
mov    0x88(%rbp),%rax
mov    -0x98(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x9c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x78(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%edx
imul   -0x8(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1f05 <cu_convolve_image_psf+0xdd5>
mov    -0x988(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x988(%rbp)
jmp    1df1 <cu_convolve_image_psf+0xcc1>
jmp    1f1e <cu_convolve_image_psf+0xdee>
mov    -0x984(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x984(%rbp)
jmp    1dd9 <cu_convolve_image_psf+0xca9>
jmp    1f37 <cu_convolve_image_psf+0xe07>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1ca8 <cu_convolve_image_psf+0xb78>
jmp    1f4a <cu_convolve_image_psf+0xe1a>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1c78 <cu_convolve_image_psf+0xb48>
jmp    1f5d <cu_convolve_image_psf+0xe2d>
mov    -0x990(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x990(%rbp)
jmp    15c8 <cu_convolve_image_psf+0x498>
jmp    1f76 <cu_convolve_image_psf+0xe46>
mov    -0x98c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98c(%rbp)
jmp    15ac <cu_convolve_image_psf+0x47c>
add    $0xa30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cu_convolve_image_psf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x998,%rsp
mov    %edx,%ebp
mov    0xa08(%rsp),%r14
mov    %rsi,0xb8(%rsp)
lea    -0x1(%rsi),%eax
mov    %eax,0x8(%rsp)
cltd
mov    %ecx,0x44(%rsp)
idiv   %ecx
mov    %eax,0x80(%rsp)
mov    %rbp,%rax
mov    %rbp,0xe8(%rsp)
lea    -0x1(%rbp),%r15d
mov    %r15d,%eax
cltd
mov    %r8d,0x2c(%rsp)
idiv   %r8d
mov    %eax,0x90(%rsp)
cvttsd2si (%r14),%r10d
mov    %r9,0x118(%rsp)
mov    %edi,0x1c(%rsp)
mov    0xa10(%rsp),%r11
xorpd  %xmm2,%xmm2
cmp    $0x3,%r10d
jl     1292 <cu_convolve_image_psf+0x162>
mov    %r10d,%r13d
add    $0xffffffff,%r10d
lea    -0x1(%r10),%rdx
lea    -0x2(%r10),%r8
mov    %edx,%r9d
and    $0x3,%r9d
mov    %r13,%rcx
shl    $0x5,%rcx
lea    0x0(,%r13,8),%rbx
lea    (%rbx,%rbx,2),%rsi
mov    %r13,%rbp
shl    $0x4,%rbp
and    $0xfffffffffffffffc,%rdx
neg    %rdx
xorpd  %xmm2,%xmm2
mov    $0x1,%r12d
jmp    1215 <cu_convolve_image_psf+0xe5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r12
add    $0x8,%r11
cmp    %r10,%r12
mov    0xa08(%rsp),%r14
je     1292 <cu_convolve_image_psf+0x162>
mov    $0x1,%edi
cmp    $0x3,%r8
jb     125e <cu_convolve_image_psf+0x12e>
mov    %r11,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  0x8(%rax,%r13,8),%xmm2
addsd  0x8(%rax,%rbp,1),%xmm2
addsd  0x8(%rax,%rsi,1),%xmm2
addsd  0x8(%rax,%rcx,1),%xmm2
add    %rcx,%rax
lea    (%rdx,%rdi,1),%r14
add    $0x4,%r14
add    $0x4,%rdi
cmp    $0x1,%r14
jne    1230 <cu_convolve_image_psf+0x100>
test   %r9,%r9
je     1200 <cu_convolve_image_psf+0xd0>
imul   %r13,%rdi
add    %r12,%rdi
mov    0xa10(%rsp),%rax
lea    (%rax,%rdi,8),%rax
mov    %r9,%rdi
nopl   0x0(%rax)
addsd  (%rax),%xmm2
add    %rbx,%rax
add    $0xffffffffffffffff,%rdi
jne    1280 <cu_convolve_image_psf+0x150>
jmp    1200 <cu_convolve_image_psf+0xd0>
movsd  0x8(%r14),%xmm1
mov    0x1c(%rsp),%eax
cmp    $0x1,%eax
mov    %r14,%r12
je     12ef <cu_convolve_image_psf+0x1bf>
test   %eax,%eax
mov    0x2c(%rsp),%esi
mov    0xb8(%rsp),%rbx
jne    12dc <cu_convolve_image_psf+0x1ac>
addsd  %xmm1,%xmm1
mulsd  0x1d50(%rip),%xmm1
movsd  0x1d58(%rip),%xmm0
mulsd  %xmm0,%xmm1
mulsd  %xmm0,%xmm1
mulsd  0x1d40(%rip),%xmm2
addsd  %xmm1,%xmm2
cmpl   $0x0,0x80(%rsp)
jns    144f <cu_convolve_image_psf+0x31f>
jmp    20b0 <cu_convolve_image_psf+0xf80>
movsd  %xmm1,0x20(%rsp)
movsd  %xmm2,0x48(%rsp)
movupd 0x10(%r12),%xmm1
movsd  0x40(%r12),%xmm3
movapd %xmm1,0x100(%rsp)
mulpd  %xmm1,%xmm1
mulsd  %xmm3,%xmm3
movapd 0x1cde(%rip),%xmm2
divpd  %xmm1,%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
movapd %xmm2,%xmm0
subsd  %xmm1,%xmm0
addsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm3,%xmm0
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm1,0x50(%rsp)
movapd %xmm0,0xa0(%rsp)
jb     1361 <cu_convolve_image_psf+0x231>
sqrtsd %xmm0,%xmm0
jmp    1370 <cu_convolve_image_psf+0x240>
call   1050 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd 0x50(%rsp),%xmm1
addsd  %xmm1,%xmm0
ucomisd %xmm2,%xmm0
mov    0xb8(%rsp),%rbx
jb     138b <cu_convolve_image_psf+0x25b>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    1394 <cu_convolve_image_psf+0x264>
call   1050 <sqrt@plt>
movapd %xmm0,%xmm1
movapd 0xa0(%rsp),%xmm0
movapd %xmm1,0x60(%rsp)
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jb     13b3 <cu_convolve_image_psf+0x283>
sqrtsd %xmm0,%xmm0
jmp    13bc <cu_convolve_image_psf+0x28c>
call   1050 <sqrt@plt>
xorpd  %xmm2,%xmm2
movapd 0x50(%rsp),%xmm1
subsd  %xmm0,%xmm1
ucomisd %xmm2,%xmm1
jb     13d5 <cu_convolve_image_psf+0x2a5>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    13de <cu_convolve_image_psf+0x2ae>
movapd %xmm1,%xmm0
call   1050 <sqrt@plt>
mov    0x2c(%rsp),%esi
movsd  0x48(%rsp),%xmm2
movsd  0x20(%rsp),%xmm1
movapd 0x60(%rsp),%xmm4
unpcklpd %xmm0,%xmm4
movapd 0x1c00(%rip),%xmm3
divpd  %xmm4,%xmm3
mulsd  0x1c04(%rip),%xmm1
movapd %xmm3,%xmm0
unpckhpd %xmm3,%xmm0
mulsd  %xmm3,%xmm0
mulsd  %xmm1,%xmm0
movapd 0x100(%rsp),%xmm3
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
divsd  %xmm1,%xmm0
mulsd  0x1bdb(%rip),%xmm2
addsd  %xmm0,%xmm2
cmpl   $0x0,0x80(%rsp)
js     20b0 <cu_convolve_image_psf+0xf80>
mov    0x9d0(%rsp),%edx
mov    0x118(%rsp),%rcx
lea    0x1(%rcx),%eax
add    $0x2,%ecx
imul   %eax,%ecx
lea    0x1(%rdx),%eax
add    $0x2,%edx
imul   %eax,%edx
mov    %ecx,%edi
shr    $0x1f,%edi
mov    %edx,%eax
shr    $0x1f,%eax
add    %ecx,%edi
add    %edx,%eax
mov    0xa20(%rsp),%r14
sar    %edi
sar    %eax
mov    %eax,0x98(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x8(%rsp),%xmm0
mov    0x44(%rsp),%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %eax,%ecx
sar    %ecx
mov    %rcx,0x128(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r15d,%xmm1
mov    %esi,%eax
shr    $0x1f,%eax
add    %esi,%eax
sar    %eax
mov    %rax,0x110(%rsp)
movsd  0x1b58(%rip),%xmm3
movsd  %xmm0,0x130(%rsp)
mulsd  %xmm0,%xmm3
movsd  %xmm3,0x120(%rsp)
movsd  0x1b3a(%rip),%xmm0
movsd  %xmm1,0x150(%rsp)
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x148(%rsp)
lea    0x8(%rbx),%ecx
mov    0xe8(%rsp),%rax
lea    0x8(%rax),%eax
mov    %eax,0xfc(%rsp)
mov    %edi,0x9c(%rsp)
movslq %edi,%rax
mov    %rax,0x188(%rsp)
movslq %esi,%rax
mov    %rax,0x140(%rsp)
movslq %ebx,%rax
mov    %rax,0x178(%rsp)
movl   $0xfffffff8,0x8c(%rsp)
f8 ff ff ff
movl   $0x0,0x84(%rsp)
mov    %ecx,0xf8(%rsp)
mov    %ecx,0x88(%rsp)
xor    %eax,%eax
mov    %rax,0xc0(%rsp)
movsd  %xmm2,0x48(%rsp)
jmp    15b9 <cu_convolve_image_psf+0x489>
nopw   0x0(%rax,%rax,1)
mov    0xc0(%rsp),%rdx
lea    0x1(%rdx),%eax
mov    0x44(%rsp),%ecx
sub    %ecx,0x88(%rsp)
add    %ecx,0x84(%rsp)
add    %ecx,0x8c(%rsp)
cmp    0x80(%rsp),%edx
mov    %rax,0xc0(%rsp)
je     20b0 <cu_convolve_image_psf+0xf80>
cmpl   $0x0,0x90(%rsp)
js     1580 <cu_convolve_image_psf+0x450>
movslq 0x84(%rsp),%rax
mov    %rax,0x138(%rsp)
mov    0xc0(%rsp),%rax
mov    %eax,%ecx
imul   0x44(%rsp),%ecx
mov    0x128(%rsp),%rax
mov    %rcx,0x158(%rsp)
lea    (%rcx,%rax,1),%r15d
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
addsd  0x120(%rsp),%xmm0
divsd  0x130(%rsp),%xmm0
movsd  %xmm0,0x180(%rsp)
add    %r15d,%eax
cmp    %ebx,%eax
cmovge %ebx,%eax
mov    %eax,0xf4(%rsp)
cltq
mov    %rax,0x168(%rsp)
xor    %eax,%eax
mov    %rax,0xc8(%rsp)
movl   $0xfffffff8,0x94(%rsp)
f8 ff ff ff
xor    %eax,%eax
mov    %r15,0xa0(%rsp)
jmp    16b3 <cu_convolve_image_psf+0x583>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x160(%rsp),%rdx
lea    0x1(%rdx),%eax
mov    0xc8(%rsp),%rcx
add    0x140(%rsp),%rcx
mov    %rcx,0xc8(%rsp)
mov    0x2c(%rsp),%esi
add    %esi,0x94(%rsp)
cmp    0x90(%rsp),%edx
mov    0xa08(%rsp),%r12
mov    0xa20(%rsp),%r14
mov    0xa0(%rsp),%r15
je     1580 <cu_convolve_image_psf+0x450>
mov    %rax,0x160(%rsp)
mov    %eax,%ecx
imul   %esi,%ecx
mov    0x110(%rsp),%rax
mov    %rcx,0x170(%rsp)
add    %ecx,%eax
mov    %eax,0x60(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x148(%rsp),%xmm0
divsd  0x150(%rsp),%xmm0
movsd  %xmm0,0xe0(%rsp)
xor    %eax,%eax
mov    %rax,0x30(%rsp)
jmp    172b <cu_convolve_image_psf+0x5fb>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x30(%rsp),%rcx
add    $0x1,%rcx
mov    %rcx,%rax
mov    %rcx,0x30(%rsp)
cmp    $0x10,%rcx
je     1e00 <cu_convolve_image_psf+0xcd0>
xor    %ebp,%ebp
jmp    1759 <cu_convolve_image_psf+0x629>
nop
xorpd  %xmm0,%xmm0
movsd  0x48(%rsp),%xmm2
divsd  %xmm2,%xmm0
mov    0xd0(%rsp),%rax
movsd  %xmm0,0x190(%rsp,%rax,8)
add    $0x1,%rbp
cmp    $0x10,%rbp
je     1710 <cu_convolve_image_psf+0x5e0>
mov    %rbp,%rax
shl    $0x4,%rax
mov    0x30(%rsp),%rsi
add    %rsi,%rax
mov    %rax,0xd0(%rsp)
sub    $0x8,%rsp
mov    0x24(%rsp),%edi
mov    %ebp,%edx
mov    %r15d,%ecx
mov    0x68(%rsp),%r8d
mov    %r12,%r9
xor    %eax,%eax
push   %r14
push   0xa28(%rsp)
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
cmpl   $0x0,0x9d8(%rsp)
jle    1730 <cu_convolve_image_psf+0x600>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0xb0(%rsp)
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
xor    %esi,%esi
movsd  0x48(%rsp),%xmm2
mov    %rbp,0x70(%rsp)
jmp    17ef <cu_convolve_image_psf+0x6bf>
nop
mov    0xa0(%rsp),%r15
add    $0x1,%rsi
add    $0xffffffff,%ecx
mov    0x9d8(%rsp),%eax
cmp    %rax,%rsi
je     173a <cu_convolve_image_psf+0x60a>
mov    $0x0,%eax
cmp    0x188(%rsp),%rsi
jl     1812 <cu_convolve_image_psf+0x6e2>
mov    %esi,%eax
sub    0x9c(%rsp),%eax
cltd
idivl  0x98(%rsp)
add    $0x1,%eax
cmp    0x9e0(%rsp),%eax
jge    17d0 <cu_convolve_image_psf+0x6a0>
mov    %rsi,0x20(%rsp)
mov    %rcx,0x100(%rsp)
mov    %eax,%r8d
sub    $0x1,%r8d
mov    0x9d0(%rsp),%r10d
cmovb  0x118(%rsp),%r10d
imul   0x98(%rsp),%r8d
add    0x9c(%rsp),%r8d
xor    %ebx,%ebx
mov    %eax,0x38(%rsp)
cmp    $0x1,%eax
cmovb  %ebx,%r8d
mov    $0x0,%r13d
test   %r10d,%r10d
jle    1970 <cu_convolve_image_psf+0x840>
mov    0x20(%rsp),%rax
mov    %eax,%r14d
sub    %r8d,%r14d
lea    0x1(%r10),%r11d
add    0x100(%rsp),%r8d
xor    %r15d,%r15d
xor    %ecx,%ecx
xor    %r13d,%r13d
xor    %ebx,%ebx
mov    %r8,0x50(%rsp)
jmp    18b2 <cu_convolve_image_psf+0x782>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x1(%rcx),%eax
add    $0xffffffff,%r11d
cmp    %ecx,%r10d
mov    %eax,%ecx
je     1970 <cu_convolve_image_psf+0x840>
mov    %r10d,%edx
sub    %ecx,%edx
jl     18a0 <cu_convolve_image_psf+0x770>
xor    %ebp,%ebp
cmp    $0x3,%edx
jb     1937 <cu_convolve_image_psf+0x807>
mov    %r11d,%edi
and    $0xfffffffc,%edi
lea    (%r8,%r15,1),%r9d
xor    %ebp,%ebp
mov    %r15,0x8(%rsp)
mov    %r15d,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x1(%rdx),%esi
lea    0x1(%rbp),%r15d
lea    0x2(%rdx),%r8d
mov    %r9d,%r12d
add    %ebp,%r12d
cmove  %ebp,%ebx
lea    0x2(%rbp),%eax
cmove  %ecx,%r13d
cmp    %r14d,%esi
cmove  %r15d,%ebx
cmove  %ecx,%r13d
lea    0x3(%rdx),%esi
cmp    %r14d,%r8d
cmove  %eax,%ebx
lea    0x3(%rbp),%eax
cmove  %ecx,%r13d
cmp    %r14d,%esi
cmove  %eax,%ebx
cmove  %ecx,%r13d
add    $0x4,%edx
add    $0x4,%ebp
cmp    %edi,%ebp
jne    18e0 <cu_convolve_image_psf+0x7b0>
mov    0x8(%rsp),%r15
add    %ebp,%r15d
mov    0x50(%rsp),%r8
test   $0x3,%r11b
je     18a0 <cu_convolve_image_psf+0x770>
mov    %r11d,%edx
and    $0x3,%edx
neg    %edx
lea    (%r8,%r15,1),%esi
xor    %edi,%edi
nop
cmp    %edi,%esi
cmove  %ebp,%ebx
cmove  %ecx,%r13d
add    $0x1,%ebp
add    $0xffffffff,%edi
cmp    %edi,%edx
jne    1950 <cu_convolve_image_psf+0x820>
sub    %edi,%r15d
jmp    18a0 <cu_convolve_image_psf+0x770>
nopl   0x0(%rax,%rax,1)
mov    0x38(%rsp),%eax
test   %eax,%eax
movsd  %xmm0,0x78(%rsp)
jle    1d17 <cu_convolve_image_psf+0xbe7>
movslq %eax,%r15
mov    0x9f0(%rsp),%rax
mov    (%rax,%r15,4),%r12d
add    0x30(%rsp),%r12d
mov    0x9f8(%rsp),%rax
mov    (%rax,%r15,4),%edx
add    0x70(%rsp),%edx
sub    $0x8,%rsp
mov    0x24(%rsp),%edi
mov    %r12d,%esi
mov    %rdx,0x10(%rsp)
mov    0xa8(%rsp),%rcx
mov    0x68(%rsp),%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
mov    0xa28(%rsp),%rbp
push   %rbp
mov    0xa28(%rsp),%rbp
push   %rbp
mov    0xa28(%rsp),%r14
push   %r14
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
mov    0xa00(%rsp),%rcx
cmpl   $0x0,(%rcx,%r15,4)
je     1d52 <cu_convolve_image_psf+0xc22>
mov    0x8(%rsp),%rax
lea    -0x1(%rax),%edx
mov    %edx,0x50(%rsp)
mov    %rbp,%r11
mov    %r14,%r10
lea    -0x1(%r12),%esi
mov    %esi,0x10(%rsp)
sub    $0x8,%rsp
mov    0x24(%rsp),%r15d
mov    %r15d,%edi
mov    0xa8(%rsp),%r14
mov    %r14d,%ecx
mov    0x68(%rsp),%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
mov    0xa28(%rsp),%rbp
push   %rbp
push   %r11
push   %r10
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x38(%rsp)
sub    $0x8,%rsp
mov    %r15d,%edi
mov    0x18(%rsp),%esi
mov    0x10(%rsp),%rbp
mov    %ebp,%edx
mov    %r14d,%ecx
mov    0x68(%rsp),%r14d
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
push   0xa28(%rsp)
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x38(%rsp),%xmm0
movsd  %xmm0,0xd8(%rsp)
lea    0x1(%rbp),%edx
mov    %edx,0x38(%rsp)
sub    $0x8,%rsp
mov    %r15d,%edi
mov    %r15d,%ebp
mov    0x18(%rsp),%esi
mov    0xa8(%rsp),%r15
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
mov    0xa28(%rsp),%r10
push   %r10
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
sub    $0x8,%rsp
mov    %ebp,%edi
mov    %r12d,%esi
mov    0x58(%rsp),%edx
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
mov    0xa28(%rsp),%rbp
push   %rbp
push   0xa28(%rsp)
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
sub    $0x8,%rsp
mov    0x24(%rsp),%ebp
mov    %ebp,%edi
mov    %r12d,%esi
mov    0x10(%rsp),%rdx
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
push   0xa28(%rsp)
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
sub    $0x8,%rsp
mov    %ebp,%edi
mov    %r12d,%esi
mov    0x40(%rsp),%edx
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
push   0xa28(%rsp)
push   0xa28(%rsp)
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
add    $0x1,%r12d
sub    $0x8,%rsp
mov    %ebp,%edi
mov    %ebp,%r14d
mov    %r12d,%esi
mov    0x58(%rsp),%edx
mov    %r15d,%ecx
mov    0x68(%rsp),%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
mov    0xa28(%rsp),%rbp
push   %rbp
mov    0xa28(%rsp),%r10
push   %r10
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
sub    $0x8,%rsp
mov    %r14d,%edi
mov    %r12d,%esi
mov    0x10(%rsp),%rdx
mov    %r15d,%ecx
mov    0x68(%rsp),%r14d
mov    %r14d,%r8d
mov    0xa10(%rsp),%r9
xor    %eax,%eax
push   0xa28(%rsp)
push   %rbp
mov    0xa28(%rsp),%rbp
push   %rbp
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
sub    $0x8,%rsp
mov    0x24(%rsp),%edi
mov    %r12d,%esi
mov    0x40(%rsp),%edx
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    0xa10(%rsp),%r12
mov    %r12,%r9
xor    %eax,%eax
mov    0xa28(%rsp),%r14
push   %r14
push   0xa28(%rsp)
push   %rbp
call   1030 <integrated_profile@plt>
add    $0x20,%rsp
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0x8(%rsp),%xmm0
divsd  0x131b(%rip),%xmm0
jmp    1d6e <cu_convolve_image_psf+0xc3e>
mov    0xa28(%rsp),%rax
mov    0x20(%rsp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  0xb0(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
mov    0xa08(%rsp),%r12
mov    0xa20(%rsp),%r14
mov    0xa0(%rsp),%r15
jmp    1d8f <cu_convolve_image_psf+0xc5f>
cvtsi2sd %eax,%xmm0
mov    0xa20(%rsp),%r14
mov    0xa0(%rsp),%r15
mov    0xa08(%rsp),%r12
mov    0x20(%rsp),%rcx
subsd  0xb0(%rsp),%xmm0
mov    0xa28(%rsp),%rax
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %r13d,%xmm1
movsd  0x180(%rsp),%xmm0
call   1040 <pow@plt>
mulsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
movsd  0xe0(%rsp),%xmm0
call   1040 <pow@plt>
mulsd  0x8(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
mov    0xb8(%rsp),%rbx
movsd  0x48(%rsp),%xmm2
mov    0x70(%rsp),%rbp
mov    0x100(%rsp),%rcx
mov    0x20(%rsp),%rsi
jmp    17d8 <cu_convolve_image_psf+0x6a8>
nop
mov    0x60(%rsp),%ecx
add    0x110(%rsp),%ecx
mov    0xe8(%rsp),%rax
cmp    %eax,%ecx
cmovge %eax,%ecx
mov    0xf4(%rsp),%eax
cmp    %eax,0x158(%rsp)
jge    1660 <cu_convolve_image_psf+0x530>
movslq %ecx,%rax
mov    %rax,0xe0(%rsp)
mov    0x8c(%rsp),%eax
mov    %rax,0x30(%rsp)
mov    0x138(%rsp),%rax
mov    %rax,0x10(%rsp)
mov    0x88(%rsp),%edx
mov    %ecx,0x60(%rsp)
jmp    1e97 <cu_convolve_image_psf+0xd67>
nopl   (%rax)
mov    0x10(%rsp),%rcx
add    $0x1,%rcx
mov    0xd0(%rsp),%edx
add    $0xffffffff,%edx
mov    0x30(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x30(%rsp)
mov    %rcx,0x10(%rsp)
cmp    0x168(%rsp),%rcx
mov    0x60(%rsp),%ecx
jge    1660 <cu_convolve_image_psf+0x530>
cmp    $0x10,%edx
mov    $0x10,%eax
mov    %edx,0xd0(%rsp)
cmovl  %edx,%eax
mov    %eax,0x8(%rsp)
cmp    %ecx,0x170(%rsp)
jge    1e60 <cu_convolve_image_psf+0xd30>
mov    $0x8,%edx
mov    0x10(%rsp),%rcx
sub    %ecx,%edx
cmp    $0x8,%rcx
mov    $0x0,%eax
cmovge %eax,%edx
mov    0xf8(%rsp),%esi
sub    %ecx,%esi
cmp    $0x10,%esi
mov    $0x10,%eax
cmovge %eax,%esi
mov    %esi,0xb0(%rsp)
lea    -0x8(%rcx),%eax
mov    %rax,0x100(%rsp)
mov    0x30(%rsp),%rax
mov    %rdx,0x70(%rsp)
add    %edx,%eax
mov    %eax,0xd8(%rsp)
mov    0x94(%rsp),%eax
mov    %rax,0x78(%rsp)
mov    0xc8(%rsp),%rsi
jmp    1f44 <cu_convolve_image_psf+0xe14>
nopl   (%rax)
mov    0x38(%rsp),%rsi
add    $0x1,%rsi
mov    0x78(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x78(%rsp)
cmp    0xe0(%rsp),%rsi
jge    1e60 <cu_convolve_image_psf+0xd30>
mov    %rsi,%rax
imul   0x178(%rsp),%rax
add    0x10(%rsp),%rax
mov    $0x8,%edx
sub    %esi,%edx
cmp    $0x8,%rsi
mov    $0x0,%ecx
cmovge %ecx,%edx
mov    0xfc(%rsp),%ebp
mov    %rsi,0x38(%rsp)
sub    %esi,%ebp
cmp    $0x10,%ebp
mov    $0x10,%ecx
cmovge %ecx,%ebp
mov    0xa30(%rsp),%rcx
movq   $0x0,(%rcx,%rax,8)
mov    0xa38(%rsp),%rcx
movq   $0x0,(%rcx,%rax,8)
mov    0xb0(%rsp),%ecx
cmp    %ecx,0x70(%rsp)
jge    1f20 <cu_convolve_image_psf+0xdf0>
movslq %edx,%rcx
movslq %ebp,%r8
mov    %rcx,0x50(%rsp)
shl    $0x4,%ecx
mov    0x70(%rsp),%r12
add    %r12d,%ecx
mov    0x78(%rsp),%rsi
add    %edx,%esi
mov    %ebx,%r14d
mov    %esi,0x20(%rsp)
imul   %esi,%r14d
add    0xd8(%rsp),%r14d
jmp    2006 <cu_convolve_image_psf+0xed6>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r12d
add    $0x1,%ecx
add    $0x1,%r14d
cmp    0x8(%rsp),%r12d
je     1f20 <cu_convolve_image_psf+0xdf0>
cmp    %ebp,%edx
jge    1ff0 <cu_convolve_image_psf+0xec0>
mov    0x100(%rsp),%rsi
lea    (%rsi,%r12,1),%r15d
mov    %r14d,%r11d
mov    0x20(%rsp),%r10d
mov    %ecx,%r9d
mov    0x50(%rsp),%rsi
jmp    2044 <cu_convolve_image_psf+0xf14>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rsi
add    $0x10,%r9d
add    $0x1,%r10d
add    %ebx,%r11d
cmp    %r8,%rsi
jge    1ff0 <cu_convolve_image_psf+0xec0>
cmp    %ebx,%r15d
jge    2030 <cu_convolve_image_psf+0xf00>
cmp    0xe8(%rsp),%r10d
jge    2030 <cu_convolve_image_psf+0xf00>
movslq %r9d,%rbx
movsd  0x190(%rsp,%rbx,8),%xmm0
movslq %r11d,%rbx
mov    0xa40(%rsp),%rdi
movsd  (%rdi,%rbx,8),%xmm1
mulsd  %xmm0,%xmm1
mov    0xa30(%rsp),%rdi
addsd  (%rdi,%rax,8),%xmm1
movsd  %xmm1,(%rdi,%rax,8)
mov    0xa48(%rsp),%r13
mulsd  0x0(%r13,%rbx,8),%xmm0
mov    0xb8(%rsp),%rbx
mov    0xa38(%rsp),%rdi
addsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rdi,%rax,8)
jmp    2030 <cu_convolve_image_psf+0xf00>
add    $0x998,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @cu_convolve_image_psf(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32* %10, i32* %11, i32* %12, double* %13, double* %14, double* %15, double* %16, double* %17, double* %18, double* %19, double* %20, double* %21) {
%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*
%40 = alloca double*
%41 = alloca double*
%42 = alloca double*
%43 = alloca double*
%44 = alloca double*
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca i32
%54 = alloca i32
%55 = alloca i32
%56 = alloca i32
%57 = alloca i32
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca i32
%62 = alloca i32
%63 = alloca i32
%64 = alloca i32
%65 = alloca i32
%66 = alloca i32
%67 = alloca i32
%68 = alloca i32
%69 = alloca i32
%70 = alloca i32
%71 = alloca i32
%72 = alloca i32
%73 = alloca i32
%74 = alloca i32
%75 = alloca i32
%76 = alloca i32
%77 = alloca i32
%78 = alloca double
%79 = alloca double
%80 = alloca double
%81 = alloca double
%82 = alloca double
%83 = alloca double
%84 = alloca i32
%85 = alloca i32
%86 = alloca double
%87 = alloca double
%88 = alloca double
%89 = alloca double
%90 = alloca double
%91 = alloca double
%92 = alloca double
%93 = alloca double
%94 = alloca double
%95 = alloca double
%96 = alloca double
%97 = alloca double
%98 = alloca double
%99 = alloca double
%100 = alloca double
%101 = alloca double
%102 = alloca double
%103 = alloca double
%104 = alloca double
%105 = alloca double
%106 = alloca double
%107 = alloca [256 x double]
%108 = alloca i32
%109 = alloca i32
%110 = alloca i32
%111 = alloca i32
%112 = alloca i32
%113 = alloca i32
%114 = alloca i32
%115 = alloca i32
store i32 %0, i32* %23
store i32 %1, i32* %24
store i32 %2, i32* %25
store i32 %3, i32* %26
store i32 %4, i32* %27
store i32 %5, i32* %28
store i32 %6, i32* %29
store i32 %7, i32* %30
store i32 %8, i32* %31
store i32 %9, i32* %32
store i32* %10, i32** %33
store i32* %11, i32** %34
store i32* %12, i32** %35
store double* %13, double** %36
store double* %14, double** %37
store double* %15, double** %38
store double* %16, double** %39
store double* %17, double** %40
store double* %18, double** %41
store double* %19, double** %42
store double* %20, double** %43
store double* %21, double** %44
store double 0x400921FB53C8D4F1, double* %104
store double 0x3FEB2DA4E958F48E, double* %105
store i32 16, i32* %112
store i32 16, i32* %113
%116 = load i32, i32* %24
%117 = sub nsw i32 %116, 1
%118 = load i32, i32* %26
%119 = sdiv i32 %117, %118
%120 = add nsw i32 %119, 1
store i32 %120, i32* %114
%121 = load i32, i32* %25
%122 = sub nsw i32 %121, 1
%123 = load i32, i32* %27
%124 = sdiv i32 %122, %123
%125 = add nsw i32 %124, 1
store i32 %125, i32* %115
%126 = load i32, i32* %28
%127 = add nsw i32 %126, 1
%128 = load i32, i32* %28
%129 = add nsw i32 %128, 2
%130 = mul nsw i32 %127, %129
%131 = sdiv i32 %130, 2
store i32 %131, i32* %56
%132 = load i32, i32* %29
%133 = add nsw i32 %132, 1
%134 = load i32, i32* %29
%135 = add nsw i32 %134, 2
%136 = mul nsw i32 %133, %135
%137 = sdiv i32 %136, 2
store i32 %137, i32* %57
%138 = load double*, double** %36
%139 = getelementptr inbounds double, double* %138, i64 0
%140 = load double, double* %139
%141 = fptosi double %140 to i32
store i32 %141, i32* %75
%142 = load double*, double** %36
%143 = getelementptr inbounds double, double* %142, i64 1
%144 = load double, double* %143
store double %144, double* %86
%145 = load double*, double** %36
%146 = getelementptr inbounds double, double* %145, i64 2
%147 = load double, double* %146
store double %147, double* %87
%148 = load double*, double** %36
%149 = getelementptr inbounds double, double* %148, i64 3
%150 = load double, double* %149
store double %150, double* %88
%151 = load double*, double** %36
%152 = getelementptr inbounds double, double* %151, i64 4
%153 = load double, double* %152
store double %153, double* %91
%154 = load double*, double** %36
%155 = getelementptr inbounds double, double* %154, i64 5
%156 = load double, double* %155
store double %156, double* %90
%157 = load double*, double** %36
%158 = getelementptr inbounds double, double* %157, i64 6
%159 = load double, double* %158
store double %159, double* %93
%160 = load double*, double** %36
%161 = getelementptr inbounds double, double* %160, i64 7
%162 = load double, double* %161
store double %162, double* %92
%163 = load double, double* %93
%164 = fcmp ogt double %163, 6.000000e+00
br i1 %164, label %165, label %166
165: ; preds = %22
store double 6.000000e+00, double* %93
br label %166
166: ; preds = %165, %22
%167 = load double, double* %93
%168 = load double, double* %93
%169 = fmul double %167, %168
store double %169, double* %94
store double 0.000000e+00, double* %106
store i32 1, i32* %58
br label %170
170: ; preds = %197, %166
%171 = load i32, i32* %58
%172 = load i32, i32* %75
%173 = sub nsw i32 %172, 1
%174 = icmp slt i32 %171, %173
br i1 %174, label %175, label %200
175: ; preds = %170
store i32 1, i32* %59
br label %176
176: ; preds = %193, %175
%177 = load i32, i32* %59
%178 = load i32, i32* %75
%179 = sub nsw i32 %178, 1
%180 = icmp slt i32 %177, %179
br i1 %180, label %181, label %196
181: ; preds = %176
%182 = load double*, double** %37
%183 = load i32, i32* %58
%184 = load i32, i32* %59
%185 = load i32, i32* %75
%186 = mul nsw i32 %184, %185
%187 = add nsw i32 %183, %186
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds double, double* %182, i64 %188
%190 = load double, double* %189
%191 = load double, double* %106
%192 = fadd double %191, %190
store double %192, double* %106
br label %193
193: ; preds = %181
%194 = load i32, i32* %59
%195 = add nsw i32 %194, 1
store i32 %195, i32* %59
br label %176
196: ; preds = %176
br label %197
197: ; preds = %196
%198 = load i32, i32* %58
%199 = add nsw i32 %198, 1
store i32 %199, i32* %58
br label %170
200: ; preds = %170
%201 = load i32, i32* %23
%202 = icmp eq i32 %201, 0
br i1 %202, label %203, label %214
203: ; preds = %200
%204 = load double, double* %106
%205 = load double, double* %86
%206 = fmul double %205, 2.000000e+00
%207 = load double, double* %104
%208 = fmul double %206, %207
%209 = load double, double* %105
%210 = fmul double %208, %209
%211 = load double, double* %105
%212 = fmul double %210, %211
%213 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %204, double %212)
store double %213, double* %102
br label %272
214: ; preds = %200
%215 = load i32, i32* %23
%216 = icmp eq i32 %215, 1
br i1 %216, label %217, label %271
217: ; preds = %214
%218 = load double*, double** %36
%219 = getelementptr inbounds double, double* %218, i64 8
%220 = load double, double* %219
store double %220, double* %89
%221 = load double, double* %87
%222 = load double, double* %87
%223 = fmul double %221, %222
store double %223, double* %97
%224 = load double, double* %88
%225 = load double, double* %88
%226 = fmul double %224, %225
store double %226, double* %98
%227 = load double, double* %89
%228 = load double, double* %89
%229 = fmul double %227, %228
store double %229, double* %99
%230 = load double, double* %97
%231 = fdiv double 1.000000e+00, %230
%232 = load double, double* %98
%233 = fdiv double 1.000000e+00, %232
%234 = fsub double %231, %233
store double %234, double* %100
%235 = load double, double* %97
%236 = fdiv double 1.000000e+00, %235
%237 = load double, double* %98
%238 = fdiv double 1.000000e+00, %237
%239 = fadd double %236, %238
store double %239, double* %101
%240 = load double, double* %101
%241 = load double, double* %100
%242 = load double, double* %100
%243 = load double, double* %99
%244 = call double @llvm.fmuladd.f64(double %241, double %242, double %243)
%245 = call double @sqrt(double %244)
%246 = fadd double %240, %245
%247 = call double @sqrt(double %246)
%248 = fdiv double 1.000000e+00, %247
store double %248, double* %95
%249 = load double, double* %101
%250 = load double, double* %100
%251 = load double, double* %100
%252 = load double, double* %99
%253 = call double @llvm.fmuladd.f64(double %250, double %251, double %252)
%254 = call double @sqrt(double %253)
%255 = fsub double %249, %254
%256 = call double @sqrt(double %255)
%257 = fdiv double 1.000000e+00, %256
store double %257, double* %96
%258 = load double, double* %106
%259 = load double, double* %86
%260 = load double, double* %104
%261 = fmul double %259, %260
%262 = load double, double* %95
%263 = load double, double* %96
%264 = fmul double %262, %263
%265 = fmul double %261, %264
%266 = load double, double* %87
%267 = load double, double* %88
%268 = fmul double %266, %267
%269 = fdiv double %265, %268
%270 = call double @llvm.fmuladd.f64(double 2.500000e-01, double %258, double %269)
store double %270, double* %102
br label %271
271: ; preds = %217, %214
br label %272
272: ; preds = %271, %203
store i32 0, i32* %110
br label %273
273: ; preds = %762, %272
%274 = load i32, i32* %110
%275 = load i32, i32* %114
%276 = icmp slt i32 %274, %275
br i1 %276, label %277, label %765
277: ; preds = %273
store i32 0, i32* %111
br label %278
278: ; preds = %758, %277
%279 = load i32, i32* %111
%280 = load i32, i32* %115
%281 = icmp slt i32 %279, %280
br i1 %281, label %282, label %761
282: ; preds = %278
%283 = load i32, i32* %110
%284 = load i32, i32* %26
%285 = mul nsw i32 %283, %284
%286 = load i32, i32* %26
%287 = sdiv i32 %286, 2
%288 = add nsw i32 %285, %287
store i32 %288, i32* %84
%289 = load i32, i32* %111
%290 = load i32, i32* %27
%291 = mul nsw i32 %289, %290
%292 = load i32, i32* %27
%293 = sdiv i32 %292, 2
%294 = add nsw i32 %291, %293
store i32 %294, i32* %85
%295 = load i32, i32* %84
%296 = sitofp i32 %295 to double
%297 = load i32, i32* %24
%298 = sub nsw i32 %297, 1
%299 = sitofp i32 %298 to double
%300 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %299, double %296)
%301 = load i32, i32* %24
%302 = sub nsw i32 %301, 1
%303 = sitofp i32 %302 to double
%304 = fdiv double %300, %303
store double %304, double* %78
%305 = load i32, i32* %85
%306 = sitofp i32 %305 to double
%307 = load i32, i32* %25
%308 = sub nsw i32 %307, 1
%309 = sitofp i32 %308 to double
%310 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %309, double %306)
%311 = load i32, i32* %25
%312 = sub nsw i32 %311, 1
%313 = sitofp i32 %312 to double
%314 = fdiv double %310, %313
store double %314, double* %79
store i32 0, i32* %108
br label %315
315: ; preds = %546, %282
%316 = load i32, i32* %108
%317 = load i32, i32* %112
%318 = icmp slt i32 %316, %317
br i1 %318, label %319, label %549
319: ; preds = %315
store i32 0, i32* %109
br label %320
320: ; preds = %542, %319
%321 = load i32, i32* %109
%322 = load i32, i32* %113
%323 = icmp slt i32 %321, %322
br i1 %323, label %324, label %545
324: ; preds = %320
%325 = load i32, i32* %108
%326 = load i32, i32* %109
%327 = load i32, i32* %112
%328 = mul nsw i32 %326, %327
%329 = add nsw i32 %325, %328
store i32 %329, i32* %45
%330 = load i32, i32* %45
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds [256 x double], [256 x double]* %107, i64 0, i64 %331
store double 0.000000e+00, double* %332
%333 = load i32, i32* %23
%334 = load i32, i32* %108
%335 = load i32, i32* %109
%336 = load i32, i32* %84
%337 = load i32, i32* %85
%338 = load double*, double** %36
%339 = load double*, double** %37
%340 = load double*, double** %38
%341 = load double*, double** %39
%342 = call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %333, i32 %334, i32 %335, i32 %336, i32 %337, double* %338, double* %339, double* %340, double* %341)
%343 = sitofp i32 %342 to double
store double %343, double* %80
store double 0.000000e+00, double* %83
store i32 0, i32* %63
br label %344
344: ; preds = %532, %324
%345 = load i32, i32* %63
%346 = load i32, i32* %30
%347 = icmp slt i32 %345, %346
br i1 %347, label %348, label %535
348: ; preds = %344
%349 = load i32, i32* %63
%350 = load i32, i32* %56
%351 = icmp slt i32 %349, %350
br i1 %351, label %352, label %353
352: ; preds = %348
br label %360
353: ; preds = %348
%354 = load i32, i32* %63
%355 = load i32, i32* %56
%356 = sub nsw i32 %354, %355
%357 = load i32, i32* %57
%358 = sdiv i32 %356, %357
%359 = add nsw i32 %358, 1
br label %360
360: ; preds = %353, %352
%361 = phi i32 [ 0, %352 ], [ %359, %353 ]
store i32 %361, i32* %64
%362 = load i32, i32* %64
%363 = load i32, i32* %31
%364 = icmp slt i32 %362, %363
br i1 %364, label %365, label %531
365: ; preds = %360
%366 = load i32*, i32** %33
%367 = load i32, i32* %64
%368 = sext i32 %367 to i64
%369 = getelementptr inbounds i32, i32* %366, i64 %368
%370 = load i32, i32* %369
store i32 %370, i32* %65
%371 = load i32*, i32** %34
%372 = load i32, i32* %64
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds i32, i32* %371, i64 %373
%375 = load i32, i32* %374
store i32 %375, i32* %66
%376 = load i32, i32* %64
%377 = icmp eq i32 %376, 0
br i1 %377, label %378, label %381
378: ; preds = %365
%379 = load i32, i32* %28
store i32 %379, i32* %67
%380 = load i32, i32* %63
store i32 %380, i32* %68
br label %391
381: ; preds = %365
%382 = load i32, i32* %29
store i32 %382, i32* %67
%383 = load i32, i32* %63
%384 = load i32, i32* %56
%385 = sub nsw i32 %383, %384
%386 = load i32, i32* %64
%387 = sub nsw i32 %386, 1
%388 = load i32, i32* %57
%389 = mul nsw i32 %387, %388
%390 = sub nsw i32 %385, %389
store i32 %390, i32* %68
br label %391
391: ; preds = %381, %378
store i32 0, i32* %72
store i32 0, i32* %71
%392 = load i32, i32* %67
%393 = icmp sgt i32 %392, 0
br i1 %393, label %394, label %424
394: ; preds = %391
store i32 0, i32* %58
store i32 0, i32* %69
br label %395
395: ; preds = %420, %394
%396 = load i32, i32* %69
%397 = load i32, i32* %67
%398 = icmp sle i32 %396, %397
br i1 %398, label %399, label %423
399: ; preds = %395
store i32 0, i32* %70
br label %400
400: ; preds = %416, %399
%401 = load i32, i32* %70
%402 = load i32, i32* %67
%403 = load i32, i32* %69
%404 = sub nsw i32 %402, %403
%405 = icmp sle i32 %401, %404
br i1 %405, label %406, label %419
406: ; preds = %400
%407 = load i32, i32* %58
%408 = load i32, i32* %68
%409 = icmp eq i32 %407, %408
br i1 %409, label %410, label %413
410: ; preds = %406
%411 = load i32, i32* %69
store i32 %411, i32* %71
%412 = load i32, i32* %70
store i32 %412, i32* %72
br label %413
413: ; preds = %410, %406
%414 = load i32, i32* %58
%415 = add nsw i32 %414, 1
store i32 %415, i32* %58
br label %416
416: ; preds = %413
%417 = load i32, i32* %70
%418 = add nsw i32 %417, 1
store i32 %418, i32* %70
br label %400
419: ; preds = %400
br label %420
420: ; preds = %419
%421 = load i32, i32* %69
%422 = add nsw i32 %421, 1
store i32 %422, i32* %69
br label %395
423: ; preds = %395
br label %424
424: ; preds = %423, %391
%425 = load i32, i32* %64
%426 = icmp sgt i32 %425, 0
br i1 %426, label %427, label %511
427: ; preds = %424
%428 = load i32, i32* %108
%429 = load i32, i32* %65
%430 = add nsw i32 %428, %429
store i32 %430, i32* %46
%431 = load i32, i32* %109
%432 = load i32, i32* %66
%433 = add nsw i32 %431, %432
store i32 %433, i32* %47
%434 = load i32, i32* %23
%435 = load i32, i32* %46
%436 = load i32, i32* %47
%437 = load i32, i32* %84
%438 = load i32, i32* %85
%439 = load double*, double** %36
%440 = load double*, double** %37
%441 = load double*, double** %38
%442 = load double*, double** %39
%443 = call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %434, i32 %435, i32 %436, i32 %437, i32 %438, double* %439, double* %440, double* %441, double* %442)
%444 = sitofp i32 %443 to double
store double %444, double* %81
%445 = load i32*, i32** %35
%446 = load i32, i32* %64
%447 = sext i32 %446 to i64
%448 = getelementptr inbounds i32, i32* %445, i64 %447
%449 = load i32, i32* %448
%450 = icmp ne i32 %449, 0
br i1 %450, label %451, label %490
451: ; preds = %427
store double 0.000000e+00, double* %81
store i32 -1, i32* %73
br label %452
452: ; preds = %484, %451
%453 = load i32, i32* %73
%454 = icmp slt i32 %453, 2
br i1 %454, label %455, label %487
455: ; preds = %452
store i32 -1, i32* %74
br label %456
456: ; preds = %480, %455
%457 = load i32, i32* %74
%458 = icmp slt i32 %457, 2
br i1 %458, label %459, label %483
459: ; preds = %456
%460 = load i32, i32* %46
%461 = load i32, i32* %73
%462 = add nsw i32 %460, %461
store i32 %462, i32* %48
%463 = load i32, i32* %47
%464 = load i32, i32* %74
%465 = add nsw i32 %463, %464
store i32 %465, i32* %49
%466 = load i32, i32* %23
%467 = load i32, i32* %48
%468 = load i32, i32* %49
%469 = load i32, i32* %84
%470 = load i32, i32* %85
%471 = load double*, double** %36
%472 = load double*, double** %37
%473 = load double*, double** %38
%474 = load double*, double** %39
%475 = call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %466, i32 %467, i32 %468, i32 %469, i32 %470, double* %471, double* %472, double* %473, double* %474)
%476 = sitofp i32 %475 to double
store double %476, double* %82
%477 = load double, double* %82
%478 = load double, double* %81
%479 = fadd double %478, %477
store double %479, double* %81
br label %480
480: ; preds = %459
%481 = load i32, i32* %74
%482 = add nsw i32 %481, 1
store i32 %482, i32* %74
br label %456
483: ; preds = %456
br label %484
484: ; preds = %483
%485 = load i32, i32* %73
%486 = add nsw i32 %485, 1
store i32 %486, i32* %73
br label %452
487: ; preds = %452
%488 = load double, double* %81
%489 = fdiv double %488, 9.000000e+00
store double %489, double* %81
br label %490
490: ; preds = %487, %427
%491 = load double*, double** %40
%492 = load i32, i32* %63
%493 = sext i32 %492 to i64
%494 = getelementptr inbounds double, double* %491, i64 %493
%495 = load double, double* %494
%496 = load double, double* %81
%497 = load double, double* %80
%498 = fsub double %496, %497
%499 = fmul double %495, %498
%500 = load double, double* %78
%501 = load i32, i32* %71
%502 = sitofp i32 %501 to double
%503 = call double @pow(double %500, double %502)
%504 = fmul double %499, %503
%505 = load double, double* %79
%506 = load i32, i32* %72
%507 = sitofp i32 %506 to double
%508 = call double @pow(double %505, double %507)
%509 = load double, double* %83
%510 = call double @llvm.fmuladd.f64(double %504, double %508, double %509)
store double %510, double* %83
br label %530
511: ; preds = %424
%512 = load double*, double** %40
%513 = load i32, i32* %63
%514 = sext i32 %513 to i64
%515 = getelementptr inbounds double, double* %512, i64 %514
%516 = load double, double* %515
%517 = load double, double* %80
%518 = fmul double %516, %517
%519 = load double, double* %78
%520 = load i32, i32* %71
%521 = sitofp i32 %520 to double
%522 = call double @pow(double %519, double %521)
%523 = fmul double %518, %522
%524 = load double, double* %79
%525 = load i32, i32* %72
%526 = sitofp i32 %525 to double
%527 = call double @pow(double %524, double %526)
%528 = load double, double* %83
%529 = call double @llvm.fmuladd.f64(double %523, double %527, double %528)
store double %529, double* %83
br label %530
530: ; preds = %511, %490
br label %531
531: ; preds = %530, %360
br label %532
532: ; preds = %531
%533 = load i32, i32* %63
%534 = add nsw i32 %533, 1
store i32 %534, i32* %63
br label %344
535: ; preds = %344
%536 = load double, double* %83
%537 = load double, double* %102
%538 = fdiv double %536, %537
%539 = load i32, i32* %45
%540 = sext i32 %539 to i64
%541 = getelementptr inbounds [256 x double], [256 x double]* %107, i64 0, i64 %540
store double %538, double* %541
br label %542
542: ; preds = %535
%543 = load i32, i32* %109
%544 = add nsw i32 %543, 1
store i32 %544, i32* %109
br label %320
545: ; preds = %320
br label %546
546: ; preds = %545
%547 = load i32, i32* %108
%548 = add nsw i32 %547, 1
store i32 %548, i32* %108
br label %315
549: ; preds = %315
%550 = load i32, i32* %84
%551 = load i32, i32* %26
%552 = sdiv i32 %551, 2
%553 = add nsw i32 %550, %552
%554 = load i32, i32* %24
%555 = icmp slt i32 %553, %554
br i1 %555, label %556, label %561
556: ; preds = %549
%557 = load i32, i32* %84
%558 = load i32, i32* %26
%559 = sdiv i32 %558, 2
%560 = add nsw i32 %557, %559
br label %563
561: ; preds = %549
%562 = load i32, i32* %24
br label %563
563: ; preds = %561, %556
%564 = phi i32 [ %560, %556 ], [ %562, %561 ]
store i32 %564, i32* %50
%565 = load i32, i32* %85
%566 = load i32, i32* %27
%567 = sdiv i32 %566, 2
%568 = add nsw i32 %565, %567
%569 = load i32, i32* %25
%570 = icmp slt i32 %568, %569
br i1 %570, label %571, label %576
571: ; preds = %563
%572 = load i32, i32* %85
%573 = load i32, i32* %27
%574 = sdiv i32 %573, 2
%575 = add nsw i32 %572, %574
br label %578
576: ; preds = %563
%577 = load i32, i32* %25
br label %578
578: ; preds = %576, %571
%579 = phi i32 [ %575, %571 ], [ %577, %576 ]
store i32 %579, i32* %51
%580 = load i32, i32* %84
%581 = load i32, i32* %26
%582 = sdiv i32 %581, 2
%583 = sub nsw i32 %580, %582
store i32 %583, i32* %58
br label %584
584: ; preds = %754, %578
%585 = load i32, i32* %58
%586 = load i32, i32* %50
%587 = icmp slt i32 %585, %586
br i1 %587, label %588, label %757
588: ; preds = %584
%589 = load i32, i32* %85
%590 = load i32, i32* %27
%591 = sdiv i32 %590, 2
%592 = sub nsw i32 %589, %591
store i32 %592, i32* %59
br label %593
593: ; preds = %750, %588
%594 = load i32, i32* %59
%595 = load i32, i32* %51
%596 = icmp slt i32 %594, %595
br i1 %596, label %597, label %753
597: ; preds = %593
%598 = load double*, double** %41
%599 = load i32, i32* %58
%600 = load i32, i32* %59
%601 = load i32, i32* %24
%602 = mul nsw i32 %600, %601
%603 = add nsw i32 %599, %602
%604 = sext i32 %603 to i64
%605 = getelementptr inbounds double, double* %598, i64 %604
store double 0.000000e+00, double* %605
%606 = load double*, double** %42
%607 = load i32, i32* %58
%608 = load i32, i32* %59
%609 = load i32, i32* %24
%610 = mul nsw i32 %608, %609
%611 = add nsw i32 %607, %610
%612 = sext i32 %611 to i64
%613 = getelementptr inbounds double, double* %606, i64 %612
store double 0.000000e+00, double* %613
%614 = load i32, i32* %58
%615 = sub nsw i32 %614, 8
%616 = icmp sge i32 %615, 0
br i1 %616, label %617, label %618
617: ; preds = %597
br label %621
618: ; preds = %597
%619 = load i32, i32* %58
%620 = sub nsw i32 8, %619
br label %621
621: ; preds = %618, %617
%622 = phi i32 [ 0, %617 ], [ %620, %618 ]
store i32 %622, i32* %52
%623 = load i32, i32* %112
%624 = load i32, i32* %24
%625 = add nsw i32 %624, 8
%626 = load i32, i32* %58
%627 = sub nsw i32 %625, %626
%628 = icmp slt i32 %623, %627
br i1 %628, label %629, label %631
629: ; preds = %621
%630 = load i32, i32* %112
br label %636
631: ; preds = %621
%632 = load i32, i32* %24
%633 = add nsw i32 %632, 8
%634 = load i32, i32* %58
%635 = sub nsw i32 %633, %634
br label %636
636: ; preds = %631, %629
%637 = phi i32 [ %630, %629 ], [ %635, %631 ]
store i32 %637, i32* %53
%638 = load i32, i32* %59
%639 = sub nsw i32 %638, 8
%640 = icmp sge i32 %639, 0
br i1 %640, label %641, label %642
641: ; preds = %636
br label %645
642: ; preds = %636
%643 = load i32, i32* %59
%644 = sub nsw i32 8, %643
br label %645
645: ; preds = %642, %641
%646 = phi i32 [ 0, %641 ], [ %644, %642 ]
store i32 %646, i32* %54
%647 = load i32, i32* %113
%648 = load i32, i32* %25
%649 = add nsw i32 %648, 8
%650 = load i32, i32* %59
%651 = sub nsw i32 %649, %650
%652 = icmp slt i32 %647, %651
br i1 %652, label %653, label %655
653: ; preds = %645
%654 = load i32, i32* %112
br label %660
655: ; preds = %645
%656 = load i32, i32* %25
%657 = add nsw i32 %656, 8
%658 = load i32, i32* %59
%659 = sub nsw i32 %657, %658
br label %660
660: ; preds = %655, %653
%661 = phi i32 [ %654, %653 ], [ %659, %655 ]
store i32 %661, i32* %55
%662 = load i32, i32* %52
store i32 %662, i32* %108
br label %663
663: ; preds = %746, %660
%664 = load i32, i32* %108
%665 = load i32, i32* %53
%666 = icmp slt i32 %664, %665
br i1 %666, label %667, label %749
667: ; preds = %663
%668 = load i32, i32* %54
store i32 %668, i32* %109
br label %669
669: ; preds = %742, %667
%670 = load i32, i32* %109
%671 = load i32, i32* %55
%672 = icmp slt i32 %670, %671
br i1 %672, label %673, label %745
673: ; preds = %669
%674 = load i32, i32* %108
%675 = load i32, i32* %109
%676 = load i32, i32* %112
%677 = mul nsw i32 %675, %676
%678 = add nsw i32 %674, %677
store i32 %678, i32* %45
%679 = load i32, i32* %58
%680 = load i32, i32* %108
%681 = add nsw i32 %679, %680
%682 = sub nsw i32 %681, 8
store i32 %682, i32* %76
%683 = load i32, i32* %59
%684 = load i32, i32* %109
%685 = add nsw i32 %683, %684
%686 = sub nsw i32 %685, 8
store i32 %686, i32* %77
%687 = load i32, i32* %76
%688 = load i32, i32* %24
%689 = icmp slt i32 %687, %688
br i1 %689, label %690, label %741
690: ; preds = %673
%691 = load i32, i32* %77
%692 = load i32, i32* %25
%693 = icmp slt i32 %691, %692
br i1 %693, label %694, label %741
694: ; preds = %690
%695 = load i32, i32* %45
%696 = sext i32 %695 to i64
%697 = getelementptr inbounds [256 x double], [256 x double]* %107, i64 0, i64 %696
%698 = load double, double* %697
%699 = load double*, double** %43
%700 = load i32, i32* %76
%701 = load i32, i32* %24
%702 = load i32, i32* %77
%703 = mul nsw i32 %701, %702
%704 = add nsw i32 %700, %703
%705 = sext i32 %704 to i64
%706 = getelementptr inbounds double, double* %699, i64 %705
%707 = load double, double* %706
%708 = load double*, double** %41
%709 = load i32, i32* %58
%710 = load i32, i32* %59
%711 = load i32, i32* %24
%712 = mul nsw i32 %710, %711
%713 = add nsw i32 %709, %712
%714 = sext i32 %713 to i64
%715 = getelementptr inbounds double, double* %708, i64 %714
%716 = load double, double* %715
%717 = call double @llvm.fmuladd.f64(double %698, double %707, double %716)
store double %717, double* %715
%718 = load i32, i32* %45
%719 = sext i32 %718 to i64
%720 = getelementptr inbounds [256 x double], [256 x double]* %107, i64 0, i64 %719
%721 = load double, double* %720
%722 = load double*, double** %44
%723 = load i32, i32* %76
%724 = load i32, i32* %24
%725 = load i32, i32* %77
%726 = mul nsw i32 %724, %725
%727 = add nsw i32 %723, %726
%728 = sext i32 %727 to i64
%729 = getelementptr inbounds double, double* %722, i64 %728
%730 = load double, double* %729
%731 = load double*, double** %42
%732 = load i32, i32* %58
%733 = load i32, i32* %59
%734 = load i32, i32* %24
%735 = mul nsw i32 %733, %734
%736 = add nsw i32 %732, %735
%737 = sext i32 %736 to i64
%738 = getelementptr inbounds double, double* %731, i64 %737
%739 = load double, double* %738
%740 = call double @llvm.fmuladd.f64(double %721, double %730, double %739)
store double %740, double* %738
br label %741
741: ; preds = %694, %690, %673
br label %742
742: ; preds = %741
%743 = load i32, i32* %109
%744 = add nsw i32 %743, 1
store i32 %744, i32* %109
br label %669
745: ; preds = %669
br label %746
746: ; preds = %745
%747 = load i32, i32* %108
%748 = add nsw i32 %747, 1
store i32 %748, i32* %108
br label %663
749: ; preds = %663
br label %750
750: ; preds = %749
%751 = load i32, i32* %59
%752 = add nsw i32 %751, 1
store i32 %752, i32* %59
br label %593
753: ; preds = %593
br label %754
754: ; preds = %753
%755 = load i32, i32* %58
%756 = add nsw i32 %755, 1
store i32 %756, i32* %58
br label %584
757: ; preds = %584
br label %758
758: ; preds = %757
%759 = load i32, i32* %111
%760 = add nsw i32 %759, 1
store i32 %760, i32* %111
br label %278
761: ; preds = %278
br label %762
762: ; preds = %761
%763 = load i32, i32* %110
%764 = add nsw i32 %763, 1
store i32 %764, i32* %110
br label %273
765: ; preds = %273
ret void
}

LLVM IR (-O2):
define void @cu_convolve_image_psf(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32* nocapture %10, i32* nocapture %11, i32* nocapture %12, double* %13, double* %14, double* %15, double* %16, double* nocapture %17, double* nocapture %18, double* nocapture %19, double* nocapture %20, double* nocapture %21) {
%23 = alloca [256 x double]
%24 = bitcast [256 x double]* %23 to i8*
%25 = add nsw i32 %1, -1
%26 = sdiv i32 %25, %3
%27 = add nsw i32 %2, -1
%28 = sdiv i32 %27, %4
%29 = add nsw i32 %5, 1
%30 = add nsw i32 %5, 2
%31 = mul nsw i32 %29, %30
%32 = sdiv i32 %31, 2
%33 = add nsw i32 %6, 1
%34 = add nsw i32 %6, 2
%35 = mul nsw i32 %33, %34
%36 = sdiv i32 %35, 2
%37 = load double, double* %13
%38 = fptosi double %37 to i32
%39 = getelementptr inbounds double, double* %13, i64 1
%40 = load double, double* %39
%41 = getelementptr inbounds double, double* %13, i64 2
%42 = bitcast double* %41 to <2 x double>*
%43 = load <2 x double>, <2 x double>* %42
%44 = icmp sgt i32 %38, 2
br i1 %44, label %45, label %108
45: ; preds = %22
%46 = add nsw i32 %38, -1
%47 = zext i32 %38 to i64
%48 = zext i32 %46 to i64
%49 = add nsw i64 %48, -1
%50 = add nsw i64 %48, -2
%51 = and i64 %49, 3
%52 = icmp ult i64 %50, 3
%53 = and i64 %49, -4
%54 = icmp eq i64 %51, 0
br label %55
55: ; preds = %104, %45
%56 = phi i64 [ 1, %45 ], [ %106, %104 ]
%57 = phi double [ 0.000000e+00, %45 ], [ %105, %104 ]
br i1 %52, label %88, label %58
58: ; preds = %55, %58
%59 = phi i64 [ %85, %58 ], [ 1, %55 ]
%60 = phi double [ %84, %58 ], [ %57, %55 ]
%61 = phi i64 [ %86, %58 ], [ 0, %55 ]
%62 = mul nsw i64 %59, %47
%63 = add nuw nsw i64 %62, %56
%64 = getelementptr inbounds double, double* %14, i64 %63
%65 = load double, double* %64
%66 = fadd double %60, %65
%67 = add nuw nsw i64 %59, 1
%68 = mul nsw i64 %67, %47
%69 = add nuw nsw i64 %68, %56
%70 = getelementptr inbounds double, double* %14, i64 %69
%71 = load double, double* %70
%72 = fadd double %66, %71
%73 = add nuw nsw i64 %59, 2
%74 = mul nsw i64 %73, %47
%75 = add nuw nsw i64 %74, %56
%76 = getelementptr inbounds double, double* %14, i64 %75
%77 = load double, double* %76
%78 = fadd double %72, %77
%79 = add nuw nsw i64 %59, 3
%80 = mul nsw i64 %79, %47
%81 = add nuw nsw i64 %80, %56
%82 = getelementptr inbounds double, double* %14, i64 %81
%83 = load double, double* %82
%84 = fadd double %78, %83
%85 = add nuw nsw i64 %59, 4
%86 = add nuw i64 %61, 4
%87 = icmp eq i64 %86, %53
br i1 %87, label %88, label %58
88: ; preds = %58, %55
%89 = phi double [ undef, %55 ], [ %84, %58 ]
%90 = phi i64 [ 1, %55 ], [ %85, %58 ]
%91 = phi double [ %57, %55 ], [ %84, %58 ]
br i1 %54, label %104, label %92
92: ; preds = %88, %92
%93 = phi i64 [ %101, %92 ], [ %90, %88 ]
%94 = phi double [ %100, %92 ], [ %91, %88 ]
%95 = phi i64 [ %102, %92 ], [ 0, %88 ]
%96 = mul nsw i64 %93, %47
%97 = add nuw nsw i64 %96, %56
%98 = getelementptr inbounds double, double* %14, i64 %97
%99 = load double, double* %98
%100 = fadd double %94, %99
%101 = add nuw nsw i64 %93, 1
%102 = add i64 %95, 1
%103 = icmp eq i64 %102, %51
br i1 %103, label %104, label %92
104: ; preds = %92, %88
%105 = phi double [ %89, %88 ], [ %100, %92 ]
%106 = add nuw nsw i64 %56, 1
%107 = icmp eq i64 %106, %48
br i1 %107, label %108, label %55
108: ; preds = %104, %22
%109 = phi double [ 0.000000e+00, %22 ], [ %105, %104 ]
switch i32 %0, label %146 [
i32 0, label %110
i32 1, label %116
]
110: ; preds = %108
%111 = fmul double %40, 2.000000e+00
%112 = fmul double %111, 0x400921FB53C8D4F1
%113 = fmul double %112, 0x3FEB2DA4E958F48E
%114 = fmul double %113, 0x3FEB2DA4E958F48E
%115 = tail call double @llvm.fmuladd.f64(double %109, double 2.500000e-01, double %114)
br label %146
116: ; preds = %108
%117 = getelementptr inbounds double, double* %13, i64 8
%118 = load double, double* %117
%119 = fmul <2 x double> %43, %43
%120 = fmul double %118, %118
%121 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %119
%122 = extractelement <2 x double> %121, i64 0
%123 = extractelement <2 x double> %121, i64 1
%124 = fsub double %122, %123
%125 = fadd double %122, %123
%126 = tail call double @llvm.fmuladd.f64(double %124, double %124, double %120)
%127 = tail call double @sqrt(double %126)
%128 = fadd double %125, %127
%129 = tail call double @sqrt(double %128)
%130 = tail call double @sqrt(double %126)
%131 = fsub double %125, %130
%132 = tail call double @sqrt(double %131)
%133 = insertelement <2 x double> poison, double %129, i64 0
%134 = insertelement <2 x double> %133, double %132, i64 1
%135 = fdiv <2 x double> <double 1.000000e+00, double 1.000000e+00>, %134
%136 = fmul double %40, 0x400921FB53C8D4F1
%137 = shufflevector <2 x double> %135, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%138 = fmul <2 x double> %135, %137
%139 = extractelement <2 x double> %138, i64 0
%140 = fmul double %136, %139
%141 = shufflevector <2 x double> %43, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%142 = fmul <2 x double> %43, %141
%143 = extractelement <2 x double> %142, i64 0
%144 = fdiv double %140, %143
%145 = tail call double @llvm.fmuladd.f64(double %109, double 2.500000e-01, double %144)
br label %146
146: ; preds = %108, %116, %110
%147 = phi double [ %115, %110 ], [ %145, %116 ], [ undef, %108 ]
%148 = icmp slt i32 %26, 0
br i1 %148, label %460, label %149
149: ; preds = %146
%150 = icmp slt i32 %28, 0
%151 = sdiv i32 %3, 2
%152 = sdiv i32 %4, 2
%153 = sitofp i32 %25 to double
%154 = sitofp i32 %27 to double
%155 = icmp sgt i32 %7, 0
%156 = add i32 %1, 8
%157 = add nsw i32 %2, 8
%158 = sext i32 %32 to i64
%159 = sext i32 %4 to i64
%160 = sext i32 %1 to i64
%161 = zext i32 %7 to i64
br label %162
162: ; preds = %149, %455
%163 = phi i32 [ 0, %149 ], [ %458, %455 ]
%164 = phi i32 [ %156, %149 ], [ %457, %455 ]
%165 = phi i32 [ 0, %149 ], [ %456, %455 ]
%166 = sext i32 %163 to i64
br i1 %150, label %455, label %167
167: ; preds = %162
%168 = mul nsw i32 %165, %3
%169 = add nsw i32 %168, %151
%170 = sitofp i32 %169 to double
%171 = tail call double @llvm.fmuladd.f64(double %153, double -5.000000e-01, double %170)
%172 = fdiv double %171, %153
%173 = add nsw i32 %169, %151
%174 = icmp slt i32 %173, %1
%175 = select i1 %174, i32 %173, i32 %1
%176 = icmp slt i32 %168, %175
%177 = sext i32 %175 to i64
br label %178
178: ; preds = %167, %451
%179 = phi i64 [ 0, %167 ], [ %453, %451 ]
%180 = phi i32 [ 0, %167 ], [ %452, %451 ]
%181 = mul nsw i32 %180, %4
%182 = add nsw i32 %181, %152
%183 = sitofp i32 %182 to double
%184 = tail call double @llvm.fmuladd.f64(double %154, double -5.000000e-01, double %183)
%185 = fdiv double %184, %154
br label %186
186: ; preds = %178, %366
%187 = phi i64 [ 0, %178 ], [ %367, %366 ]
%188 = trunc i64 %187 to i32
br label %189
189: ; preds = %186, %361
%190 = phi i64 [ 0, %186 ], [ %364, %361 ]
%191 = shl nuw nsw i64 %190, 4
%192 = add nuw nsw i64 %191, %187
%193 = getelementptr inbounds [256 x double], [256 x double]* %23, i64 0, i64 %192
%194 = trunc i64 %190 to i32
%195 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %188, i32 %194, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%196 = sitofp i32 %195 to double
br i1 %155, label %197, label %361
197: ; preds = %189, %357
%198 = phi i64 [ %359, %357 ], [ 0, %189 ]
%199 = phi double [ %358, %357 ], [ 0.000000e+00, %189 ]
%200 = trunc i64 %198 to i32
%201 = icmp slt i64 %198, %158
br i1 %201, label %206, label %202
202: ; preds = %197
%203 = sub nsw i32 %200, %32
%204 = sdiv i32 %203, %36
%205 = add nsw i32 %204, 1
br label %206
206: ; preds = %197, %202
%207 = phi i32 [ %205, %202 ], [ 0, %197 ]
%208 = icmp slt i32 %207, %8
br i1 %208, label %209, label %357
209: ; preds = %206
%210 = sext i32 %207 to i64
%211 = getelementptr inbounds i32, i32* %10, i64 %210
%212 = load i32, i32* %211
%213 = getelementptr inbounds i32, i32* %11, i64 %210
%214 = load i32, i32* %213
%215 = icmp eq i32 %207, 0
%216 = add nsw i32 %207, -1
%217 = mul nsw i32 %216, %36
%218 = add i32 %217, %32
%219 = select i1 %215, i32 0, i32 %218
%220 = sub i32 %200, %219
%221 = select i1 %215, i32 %5, i32 %6
%222 = icmp sgt i32 %221, 0
br i1 %222, label %223, label %295
223: ; preds = %209
%224 = add nuw i32 %221, 1
br label %225
225: ; preds = %223, %288
%226 = phi i32 [ %224, %223 ], [ %293, %288 ]
%227 = phi i32 [ 0, %223 ], [ %291, %288 ]
%228 = phi i32 [ 0, %223 ], [ %292, %288 ]
%229 = phi i32 [ 0, %223 ], [ %290, %288 ]
%230 = phi i32 [ 0, %223 ], [ %289, %288 ]
%231 = icmp slt i32 %221, %228
br i1 %231, label %288, label %232
232: ; preds = %225
%233 = sub i32 %221, %228
%234 = and i32 %226, 3
%235 = icmp ult i32 %233, 3
br i1 %235, label %266, label %236
236: ; preds = %232
%237 = and i32 %226, -4
br label %238
238: ; preds = %238, %236
%239 = phi i32 [ %227, %236 ], [ %262, %238 ]
%240 = phi i32 [ 0, %236 ], [ %263, %238 ]
%241 = phi i32 [ %229, %236 ], [ %261, %238 ]
%242 = phi i32 [ %230, %236 ], [ %258, %238 ]
%243 = phi i32 [ 0, %236 ], [ %264, %238 ]
%244 = icmp eq i32 %239, %220
%245 = select i1 %244, i32 %240, i32 %242
%246 = add nsw i32 %239, 1
%247 = or i32 %240, 1
%248 = icmp eq i32 %246, %220
%249 = select i1 %248, i32 %247, i32 %245
%250 = or i1 %248, %244
%251 = add nsw i32 %239, 2
%252 = or i32 %240, 2
%253 = icmp eq i32 %251, %220
%254 = select i1 %253, i32 %252, i32 %249
%255 = add nsw i32 %239, 3
%256 = or i32 %240, 3
%257 = icmp eq i32 %255, %220
%258 = select i1 %257, i32 %256, i32 %254
%259 = select i1 %257, i1 true, i1 %253
%260 = select i1 %259, i1 true, i1 %250
%261 = select i1 %260, i32 %228, i32 %241
%262 = add nsw i32 %239, 4
%263 = add nuw i32 %240, 4
%264 = add i32 %243, 4
%265 = icmp eq i32 %264, %237
br i1 %265, label %266, label %238
266: ; preds = %238, %232
%267 = phi i32 [ undef, %232 ], [ %258, %238 ]
%268 = phi i32 [ undef, %232 ], [ %261, %238 ]
%269 = phi i32 [ undef, %232 ], [ %262, %238 ]
%270 = phi i32 [ %227, %232 ], [ %262, %238 ]
%271 = phi i32 [ 0, %232 ], [ %263, %238 ]
%272 = phi i32 [ %229, %232 ], [ %261, %238 ]
%273 = phi i32 [ %230, %232 ], [ %258, %238 ]
%274 = icmp eq i32 %234, 0
br i1 %274, label %288, label %275
275: ; preds = %266, %275
%276 = phi i32 [ %284, %275 ], [ %270, %266 ]
%277 = phi i32 [ %285, %275 ], [ %271, %266 ]
%278 = phi i32 [ %283, %275 ], [ %272, %266 ]
%279 = phi i32 [ %282, %275 ], [ %273, %266 ]
%280 = phi i32 [ %286, %275 ], [ 0, %266 ]
%281 = icmp eq i32 %276, %220
%282 = select i1 %281, i32 %277, i32 %279
%283 = select i1 %281, i32 %228, i32 %278
%284 = add nsw i32 %276, 1
%285 = add nuw i32 %277, 1
%286 = add i32 %280, 1
%287 = icmp eq i32 %286, %234
br i1 %287, label %288, label %275
288: ; preds = %266, %275, %225
%289 = phi i32 [ %230, %225 ], [ %267, %266 ], [ %282, %275 ]
%290 = phi i32 [ %229, %225 ], [ %268, %266 ], [ %283, %275 ]
%291 = phi i32 [ %227, %225 ], [ %269, %266 ], [ %284, %275 ]
%292 = add nuw i32 %228, 1
%293 = add i32 %226, -1
%294 = icmp eq i32 %221, %228
br i1 %294, label %295, label %225
295: ; preds = %288, %209
%296 = phi i32 [ 0, %209 ], [ %289, %288 ]
%297 = phi i32 [ 0, %209 ], [ %290, %288 ]
%298 = icmp sgt i32 %207, 0
br i1 %298, label %299, label %345
299: ; preds = %295
%300 = add nsw i32 %212, %188
%301 = add nsw i32 %214, %194
%302 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %300, i32 %301, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%303 = sitofp i32 %302 to double
%304 = getelementptr inbounds i32, i32* %12, i64 %210
%305 = load i32, i32* %304
%306 = icmp eq i32 %305, 0
br i1 %306, label %339, label %307
307: ; preds = %299
%308 = add nsw i32 %301, -1
%309 = add nsw i32 %300, -1
%310 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %309, i32 %308, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%311 = sitofp i32 %310 to double
%312 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %309, i32 %301, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%313 = sitofp i32 %312 to double
%314 = fadd double %311, %313
%315 = add nsw i32 %301, 1
%316 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %309, i32 %315, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%317 = sitofp i32 %316 to double
%318 = fadd double %314, %317
%319 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %300, i32 %308, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%320 = sitofp i32 %319 to double
%321 = fadd double %318, %320
%322 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %300, i32 %301, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%323 = sitofp i32 %322 to double
%324 = fadd double %321, %323
%325 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %300, i32 %315, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%326 = sitofp i32 %325 to double
%327 = fadd double %324, %326
%328 = add nsw i32 %300, 1
%329 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %328, i32 %308, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%330 = sitofp i32 %329 to double
%331 = fadd double %327, %330
%332 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %328, i32 %301, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%333 = sitofp i32 %332 to double
%334 = fadd double %331, %333
%335 = tail call i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @integrated_profile to i32 (i32, i32, i32, i32, i32, double*, double*, double*, double*, ...)*)(i32 %0, i32 %328, i32 %315, i32 %169, i32 %182, double* %13, double* %14, double* %15, double* %16)
%336 = sitofp i32 %335 to double
%337 = fadd double %334, %336
%338 = fdiv double %337, 9.000000e+00
br label %339
339: ; preds = %307, %299
%340 = phi double [ %338, %307 ], [ %303, %299 ]
%341 = getelementptr inbounds double, double* %17, i64 %198
%342 = load double, double* %341
%343 = fsub double %340, %196
%344 = fmul double %342, %343
br label %349
345: ; preds = %295
%346 = getelementptr inbounds double, double* %17, i64 %198
%347 = load double, double* %346
%348 = fmul double %347, %196
br label %349
349: ; preds = %339, %345
%350 = phi double [ %348, %345 ], [ %344, %339 ]
%351 = sitofp i32 %297 to double
%352 = tail call double @pow(double %172, double %351)
%353 = fmul double %350, %352
%354 = sitofp i32 %296 to double
%355 = tail call double @pow(double %185, double %354)
%356 = tail call double @llvm.fmuladd.f64(double %353, double %355, double %199)
br label %357
357: ; preds = %349, %206
%358 = phi double [ %199, %206 ], [ %356, %349 ]
%359 = add nuw nsw i64 %198, 1
%360 = icmp eq i64 %359, %161
br i1 %360, label %361, label %197
361: ; preds = %357, %189
%362 = phi double [ 0.000000e+00, %189 ], [ %358, %357 ]
%363 = fdiv double %362, %147
store double %363, double* %193
%364 = add nuw nsw i64 %190, 1
%365 = icmp eq i64 %364, 16
br i1 %365, label %366, label %189
366: ; preds = %361
%367 = add nuw nsw i64 %187, 1
%368 = icmp eq i64 %367, 16
br i1 %368, label %369, label %186
369: ; preds = %366
%370 = add nsw i32 %182, %152
%371 = icmp slt i32 %370, %2
%372 = select i1 %371, i32 %370, i32 %2
br i1 %176, label %373, label %451
373: ; preds = %369
%374 = icmp slt i32 %181, %372
%375 = sext i32 %372 to i64
br label %376
376: ; preds = %373, %447
%377 = phi i64 [ %166, %373 ], [ %448, %447 ]
%378 = phi i32 [ %164, %373 ], [ %450, %447 ]
%379 = call i32 @llvm.smin.i32(i32 %378, i32 16)
br i1 %374, label %380, label %447
380: ; preds = %376
%381 = icmp sgt i64 %377, 7
%382 = trunc i64 %377 to i32
%383 = sub i32 8, %382
%384 = select i1 %381, i32 0, i32 %383
%385 = trunc i64 %377 to i32
%386 = sub i32 %156, %385
%387 = icmp slt i32 %386, 16
%388 = select i1 %387, i32 %386, i32 16
%389 = icmp slt i32 %384, %388
%390 = add i32 %385, -8
br label %391
391: ; preds = %380, %444
%392 = phi i64 [ %179, %380 ], [ %445, %444 ]
%393 = mul nsw i64 %392, %160
%394 = add nsw i64 %393, %377
%395 = getelementptr inbounds double, double* %18, i64 %394
store double 0.000000e+00, double* %395
%396 = getelementptr inbounds double, double* %19, i64 %394
store double 0.000000e+00, double* %396
%397 = icmp sgt i64 %392, 7
%398 = trunc i64 %392 to i32
%399 = sub i32 8, %398
%400 = select i1 %397, i32 0, i32 %399
%401 = trunc i64 %392 to i32
%402 = sub i32 %157, %401
%403 = icmp slt i32 %402, 16
%404 = select i1 %403, i32 %402, i32 16
br i1 %389, label %405, label %444
405: ; preds = %391
%406 = icmp slt i32 %400, %404
%407 = add i32 %401, -8
%408 = sext i32 %400 to i64
%409 = sext i32 %404 to i64
br label %410
410: ; preds = %405, %441
%411 = phi i32 [ %384, %405 ], [ %442, %441 ]
br i1 %406, label %412, label %441
412: ; preds = %410
%413 = add i32 %390, %411
%414 = icmp slt i32 %413, %1
br label %415
415: ; preds = %412, %438
%416 = phi i64 [ %408, %412 ], [ %439, %438 ]
%417 = trunc i64 %416 to i32
%418 = add i32 %407, %417
%419 = icmp slt i32 %418, %2
%420 = select i1 %414, i1 %419, i1 false
br i1 %420, label %421, label %438
421: ; preds = %415
%422 = shl nsw i32 %417, 4
%423 = add nsw i32 %422, %411
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds [256 x double], [256 x double]* %23, i64 0, i64 %424
%426 = load double, double* %425
%427 = mul nsw i32 %418, %1
%428 = add nsw i32 %427, %413
%429 = sext i32 %428 to i64
%430 = getelementptr inbounds double, double* %20, i64 %429
%431 = load double, double* %430
%432 = load double, double* %395
%433 = tail call double @llvm.fmuladd.f64(double %426, double %431, double %432)
store double %433, double* %395
%434 = getelementptr inbounds double, double* %21, i64 %429
%435 = load double, double* %434
%436 = load double, double* %396
%437 = tail call double @llvm.fmuladd.f64(double %426, double %435, double %436)
store double %437, double* %396
br label %438
438: ; preds = %415, %421
%439 = add nsw i64 %416, 1
%440 = icmp slt i64 %439, %409
br i1 %440, label %415, label %441
441: ; preds = %438, %410
%442 = add nsw i32 %411, 1
%443 = icmp eq i32 %442, %379
br i1 %443, label %444, label %410
444: ; preds = %441, %391
%445 = add nsw i64 %392, 1
%446 = icmp slt i64 %445, %375
br i1 %446, label %391, label %447
447: ; preds = %444, %376
%448 = add nsw i64 %377, 1
%449 = icmp slt i64 %448, %177
%450 = add i32 %378, -1
br i1 %449, label %376, label %451
451: ; preds = %447, %369
%452 = add nuw i32 %180, 1
%453 = add nsw i64 %179, %159
%454 = icmp eq i32 %180, %28
br i1 %454, label %455, label %178
455: ; preds = %451, %162
%456 = add nuw i32 %165, 1
%457 = sub i32 %164, %3
%458 = add i32 %163, %3
%459 = icmp eq i32 %165, %26
br i1 %459, label %460, label %162
460: ; preds = %455, %146
ret void
}