void _reproject_slice_c(int startx, int endx, int starty, int endy, int nx_out,
                        int ny_out, double *xp_inout, double *yp_inout,
                        double *xw_in, double *yw_in, double *xw_out,
                        double *yw_out, double *array, double *array_new,
                        double *weights, double *overlap, double *area_ratio,
                        double *original, int col_in, int col_out,
                        int col_array, int col_new) {
  int i, j, ii, jj, xmin, xmax, ymin, ymax;
  double ilon[4], ilat[4], olon[4], olat[4], minmax_x[4], minmax_y[4];
  for (i = startx; i < endx; ++i) {
    for (j = starty; j < endy; ++j) {
      minmax_x[0] = *(xp_inout + (j) * (col_in) + (i));
      minmax_x[1] = *(xp_inout + (j) * (col_in) + (i + 1));
      minmax_x[2] = *(xp_inout + (j + 1) * (col_in) + (i + 1));
      minmax_x[3] = *(xp_inout + (j + 1) * (col_in) + (i));
      minmax_y[0] = *(yp_inout + (j) * (col_in) + (i));
      minmax_y[1] = *(yp_inout + (j) * (col_in) + (i + 1));
      minmax_y[2] = *(yp_inout + (j + 1) * (col_in) + (i + 1));
      minmax_y[3] = *(yp_inout + (j + 1) * (col_in) + (i));
      xmin = (int)(min_4(minmax_x) + .5);
      xmax = (int)(max_4(minmax_x) + .5);
      ymin = (int)(min_4(minmax_y) + .5);
      ymax = (int)(max_4(minmax_y) + .5);
      ilon[0] = to_rad(*(xw_in + (j + 1) * (col_in) + (i)));
      ilon[1] = to_rad(*(xw_in + (j + 1) * (col_in) + (i + 1)));
      ilon[2] = to_rad(*(xw_in + (j) * (col_in) + (i + 1)));
      ilon[3] = to_rad(*(xw_in + (j) * (col_in) + (i)));
      ilat[0] = to_rad(*(yw_in + (j + 1) * (col_in) + (i)));
      ilat[1] = to_rad(*(yw_in + (j + 1) * (col_in) + (i + 1)));
      ilat[2] = to_rad(*(yw_in + (j) * (col_in) + (i + 1)));
      ilat[3] = to_rad(*(yw_in + (j) * (col_in) + (i)));
      xmin = xmin > 0 ? xmin : 0;
      xmax = (nx_out - 1) < xmax ? (nx_out - 1) : xmax;
      ymin = ymin > 0 ? ymin : 0;
      ymax = (ny_out - 1) < ymax ? (ny_out - 1) : ymax;
      for (ii = xmin; ii < xmax + 1; ++ii) {
        for (jj = ymin; jj < ymax + 1; ++jj) {
          olon[0] = to_rad(*(xw_out + (jj + 1) * (col_out) + (ii)));
          olon[1] = to_rad(*(xw_out + (jj + 1) * (col_out) + (ii + 1)));
          olon[2] = to_rad(*(xw_out + (jj) * (col_out) + (ii + 1)));
          olon[3] = to_rad(*(xw_out + (jj) * (col_out) + (ii)));
          olat[0] = to_rad(*(yw_out + (jj + 1) * (col_out) + (ii)));
          olat[1] = to_rad(*(yw_out + (jj + 1) * (col_out) + (ii + 1)));
          olat[2] = to_rad(*(yw_out + (jj) * (col_out) + (ii + 1)));
          olat[3] = to_rad(*(yw_out + (jj) * (col_out) + (ii)));
          _compute_overlap(overlap, area_ratio, ilon, ilat, olon, olat);
          _compute_overlap(original, area_ratio, olon, olat, olon, olat);
          *(array_new + (jj) * (col_new) + (ii)) +=
              *(array + (j) * (col_array) + (i)) * (overlap[0] / original[0]);
          *(weights + (jj) * (col_new) + (ii)) += (overlap[0] / original[0]);
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<_reproject_slice_c>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    0x88(%rbp),%eax
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%eax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    18fb <_reproject_slice_c+0x7bb>
mov    -0xc(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    18e8 <_reproject_slice_c+0x7a8>
mov    0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
lea    -0xe0(%rbp),%rdi
mov    $0x0,%al
call   1030 <min_4@plt>
cvtsi2sd %eax,%xmm0
movsd  0xcd1(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x2c(%rbp)
lea    -0xe0(%rbp),%rdi
mov    $0x0,%al
call   1050 <max_4@plt>
cvtsi2sd %eax,%xmm0
movsd  0xcac(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x30(%rbp)
lea    -0x100(%rbp),%rdi
mov    $0x0,%al
call   1030 <min_4@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc87(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x34(%rbp)
lea    -0x100(%rbp),%rdi
mov    $0x0,%al
call   1050 <max_4@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc62(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x38(%rbp)
mov    0x20(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x20(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x20(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x20(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x70(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x68(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jle    1551 <_reproject_slice_c+0x411>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x104(%rbp)
jmp    155e <_reproject_slice_c+0x41e>
xor    %eax,%eax
mov    %eax,-0x104(%rbp)
jmp    155e <_reproject_slice_c+0x41e>
mov    -0x104(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cmp    -0x30(%rbp),%eax
jge    1587 <_reproject_slice_c+0x447>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x108(%rbp)
jmp    1590 <_reproject_slice_c+0x450>
mov    -0x30(%rbp),%eax
mov    %eax,-0x108(%rbp)
mov    -0x108(%rbp),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    15b1 <_reproject_slice_c+0x471>
mov    -0x34(%rbp),%eax
mov    %eax,-0x10c(%rbp)
jmp    15be <_reproject_slice_c+0x47e>
xor    %eax,%eax
mov    %eax,-0x10c(%rbp)
jmp    15be <_reproject_slice_c+0x47e>
mov    -0x10c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
cmp    -0x38(%rbp),%eax
jge    15e7 <_reproject_slice_c+0x4a7>
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x110(%rbp)
jmp    15f0 <_reproject_slice_c+0x4b0>
mov    -0x38(%rbp),%eax
mov    %eax,-0x110(%rbp)
mov    -0x110(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    18d5 <_reproject_slice_c+0x795>
mov    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    18c2 <_reproject_slice_c+0x782>
mov    0x30(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x30(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x30(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x30(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    0x38(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x78(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x58(%rbp),%rdi
mov    0x60(%rbp),%rsi
lea    -0x60(%rbp),%rdx
lea    -0x80(%rbp),%rcx
lea    -0xa0(%rbp),%r8
lea    -0xc0(%rbp),%r9
mov    $0x0,%al
call   1060 <_compute_overlap@plt>
mov    0x68(%rbp),%rdi
mov    0x60(%rbp),%rsi
lea    -0xa0(%rbp),%rdx
lea    -0xc0(%rbp),%rcx
lea    -0xa0(%rbp),%r8
lea    -0xc0(%rbp),%r9
mov    $0x0,%al
call   1060 <_compute_overlap@plt>
mov    0x40(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   0x80(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x58(%rbp),%rax
movsd  (%rax),%xmm2
mov    0x68(%rbp),%rax
divsd  (%rax),%xmm2
mov    0x48(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x88(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x58(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x68(%rbp),%rax
divsd  (%rax),%xmm0
mov    0x50(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   0x88(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1616 <_reproject_slice_c+0x4d6>
jmp    18c7 <_reproject_slice_c+0x787>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    15ff <_reproject_slice_c+0x4bf>
jmp    18da <_reproject_slice_c+0x79a>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11b9 <_reproject_slice_c+0x79>
jmp    18ed <_reproject_slice_c+0x7ad>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11a7 <_reproject_slice_c+0x67>
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_reproject_slice_c>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1e8,%rsp
mov    %r9d,0x1c(%rsp)
mov    %r8d,0x18(%rsp)
mov    %ecx,0x14(%rsp)
mov    %edx,0x10(%rsp)
cmp    %esi,%edi
jge    188d <_reproject_slice_c+0x74d>
mov    0x248(%rsp),%rax
mov    0x240(%rsp),%rcx
addl   $0xffffffff,0x18(%rsp)
addl   $0xffffffff,0x1c(%rsp)
movslq 0x288(%rsp),%rdx
movslq %edi,%r13
movslq %esi,%rsi
mov    %rsi,0x80(%rsp)
add    $0x8,%rcx
mov    %rcx,0xa0(%rsp)
add    $0x8,%rax
mov    %rax,0xa8(%rsp)
movslq 0x298(%rsp),%rax
movslq 0x10(%rsp),%rcx
mov    %rcx,0x78(%rsp)
movslq 0x280(%rsp),%rcx
mov    %rcx,0xb8(%rsp)
movslq 0x290(%rsp),%rcx
mov    %rcx,0x88(%rsp)
movslq 0x14(%rsp),%rcx
mov    %rcx,0xb0(%rsp)
mov    %rax,0x90(%rsp)
lea    0x0(,%rax,8),%rax
mov    %rax,0xf8(%rsp)
mov    %rdx,0x98(%rsp)
lea    0x0(,%rdx,8),%rax
mov    %rax,0xf0(%rsp)
jmp    1246 <_reproject_slice_c+0x106>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x40(%rsp),%rax
mov    %rax,%r13
cmp    0x80(%rsp),%rax
je     188d <_reproject_slice_c+0x74d>
lea    0x1(%r13),%rax
mov    %rax,0x40(%rsp)
mov    0x10(%rsp),%eax
cmp    0x14(%rsp),%eax
jge    1230 <_reproject_slice_c+0xf0>
mov    0x250(%rsp),%rax
lea    (%rax,%r13,8),%rax
mov    %rax,0x100(%rsp)
mov    0x220(%rsp),%rax
lea    (%rax,%r13,8),%rax
mov    %rax,0xc8(%rsp)
mov    0x228(%rsp),%rax
lea    (%rax,%r13,8),%rax
mov    %rax,0xc0(%rsp)
mov    0x78(%rsp),%rax
mov    %r13,0xd0(%rsp)
jmp    12ce <_reproject_slice_c+0x18e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0xd8(%rsp),%rax
cmp    0xb0(%rsp),%rax
mov    0xd0(%rsp),%r13
je     1230 <_reproject_slice_c+0xf0>
mov    %rax,%rdx
mov    %rax,%r15
mov    0xb8(%rsp),%rax
imul   %rax,%r15
mov    0xc8(%rsp),%rcx
movups (%rcx,%r15,8),%xmm0
movaps %xmm0,0x1c0(%rsp)
mov    %rdx,0x38(%rsp)
lea    0x1(%rdx),%rbx
mov    %rbx,0xd8(%rsp)
imul   %rax,%rbx
movups (%rcx,%rbx,8),%xmm0
shufps $0x4e,%xmm0,%xmm0
movaps %xmm0,0x1d0(%rsp)
mov    0xc0(%rsp),%rax
movups (%rax,%r15,8),%xmm0
movaps %xmm0,0x1a0(%rsp)
movups (%rax,%rbx,8),%xmm0
shufps $0x4e,%xmm0,%xmm0
movaps %xmm0,0x1b0(%rsp)
lea    0x1c0(%rsp),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1030 <min_4@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xca0(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,0x28(%rsp)
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <max_4@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xc7b(%rip),%xmm0
cvttsd2si %xmm0,%r14d
lea    0x1a0(%rsp),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1030 <min_4@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xc55(%rip),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,0xc(%rsp)
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <max_4@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
addsd  0xc34(%rip),%xmm0
cvttsd2si %xmm0,%eax
mov    %rax,0x20(%rsp)
mov    0x230(%rsp),%rax
lea    (%rax,%rbx,8),%rbp
movsd  0x0(%rbp,%r13,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x180(%rsp)
mov    0x40(%rsp),%r12
movsd  0x0(%rbp,%r12,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x188(%rsp)
mov    0x230(%rsp),%rax
lea    (%rax,%r15,8),%rbp
movsd  0x0(%rbp,%r12,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x190(%rsp)
movsd  0x0(%rbp,%r13,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x198(%rsp)
mov    0x238(%rsp),%rbp
lea    0x0(,%rbx,8),%rbx
add    %rbp,%rbx
movsd  (%rbx,%r13,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x160(%rsp)
movsd  (%rbx,%r12,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x168(%rsp)
lea    0x0(,%r15,8),%rbx
add    %rbp,%rbx
movsd  (%rbx,%r12,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x170(%rsp)
movsd  (%rbx,%r13,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
mov    0x28(%rsp),%edx
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
test   %edx,%edx
mov    $0x0,%ecx
cmovs  %ecx,%edx
mov    0x18(%rsp),%eax
cmp    %r14d,%eax
cmovl  %eax,%r14d
movsd  %xmm0,0x178(%rsp)
mov    0xc(%rsp),%eax
test   %eax,%eax
cmovs  %ecx,%eax
mov    %eax,0xc(%rsp)
mov    0x1c(%rsp),%eax
mov    0x20(%rsp),%rcx
cmp    %ecx,%eax
cmovl  %eax,%ecx
mov    %rcx,0x20(%rsp)
mov    %r14,0x30(%rsp)
cmp    %r14d,%edx
jg     12b0 <_reproject_slice_c+0x170>
mov    0x38(%rsp),%rax
imul   0x88(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    0xc(%rsp),%eax
mov    0x20(%rsp),%rcx
lea    0x1(%rcx),%ebp
mov    %edx,%r8d
mov    0x30(%rsp),%rcx
add    $0x1,%ecx
mov    %rcx,0x30(%rsp)
mov    0x90(%rsp),%rcx
imul   %rax,%rcx
mov    0x260(%rsp),%rdx
lea    (%rdx,%rcx,8),%rdx
mov    %rdx,0x70(%rsp)
mov    0x258(%rsp),%rdx
lea    (%rdx,%rcx,8),%rcx
mov    %rcx,0x68(%rsp)
mov    0x98(%rsp),%rdi
mov    %rdi,%rcx
imul   %rax,%rcx
mov    0xa0(%rsp),%rsi
lea    (%rsi,%rcx,8),%rdx
mov    %rdx,0x60(%rsp)
mov    0xa8(%rsp),%rdx
lea    (%rdx,%rcx,8),%rcx
mov    %rcx,0x58(%rsp)
sub    %rax,%rbp
mov    %rbp,0xe0(%rsp)
add    $0x1,%rax
imul   %rdi,%rax
lea    (%rsi,%rax,8),%rcx
mov    %rcx,0x50(%rsp)
lea    (%rdx,%rax,8),%rax
mov    %rax,0x48(%rsp)
mov    %r8,%rax
jmp    1637 <_reproject_slice_c+0x4f7>
nopl   0x0(%rax,%rax,1)
addq   $0x8,0x70(%rsp)
addq   $0x8,0x68(%rsp)
addq   $0x8,0x60(%rsp)
addq   $0x8,0x58(%rsp)
addq   $0x8,0x50(%rsp)
addq   $0x8,0x48(%rsp)
mov    0xe8(%rsp),%rax
cmp    0x30(%rsp),%rax
je     12b0 <_reproject_slice_c+0x170>
add    $0x1,%rax
mov    %rax,0xe8(%rsp)
mov    0x20(%rsp),%rax
cmp    %eax,0xc(%rsp)
jg     1600 <_reproject_slice_c+0x4c0>
mov    0x48(%rsp),%r13
mov    0x50(%rsp),%rbp
mov    0xe0(%rsp),%rax
mov    0x58(%rsp),%r15
mov    0x60(%rsp),%r14
mov    0x68(%rsp),%rbx
mov    0x70(%rsp),%rdi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rdi,0x108(%rsp)
mov    %rbx,0x110(%rsp)
mov    %rbp,0x28(%rsp)
mov    %rax,0x118(%rsp)
movsd  -0x8(%rbp,%r8,8),%xmm0
mov    $0x1,%al
mov    %r8,%rbx
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x140(%rsp)
mov    0x28(%rsp),%rax
movsd  (%rax,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x148(%rsp)
movsd  (%r14,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x150(%rsp)
movsd  -0x8(%r14,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x158(%rsp)
movsd  -0x8(%r13,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x120(%rsp)
movsd  0x0(%r13,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x128(%rsp)
movsd  (%r15,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x130(%rsp)
movsd  -0x8(%r15,%rbx,8),%xmm0
mov    $0x1,%al
call   1040 <to_rad@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x138(%rsp)
mov    0x268(%rsp),%rdi
mov    0x270(%rsp),%rsi
lea    0x180(%rsp),%rdx
lea    0x160(%rsp),%rcx
lea    0x120(%rsp),%rbp
lea    0x140(%rsp),%r12
mov    %r12,%r8
mov    %rbp,%r9
xor    %eax,%eax
call   1060 <_compute_overlap@plt>
mov    0x278(%rsp),%rdi
mov    0x270(%rsp),%rsi
mov    %r12,%rdx
mov    %rbp,%rcx
mov    %r12,%r8
mov    %rbp,%r9
xor    %eax,%eax
call   1060 <_compute_overlap@plt>
mov    0x108(%rsp),%rdi
mov    %rbx,%r8
mov    0x110(%rsp),%rbx
mov    0x28(%rsp),%rbp
mov    0x38(%rsp),%r9
mov    0x100(%rsp),%rsi
mov    0xf0(%rsp),%rdx
mov    0x268(%rsp),%rcx
mov    0x278(%rsp),%rax
movsd  (%rcx),%xmm0
divsd  (%rax),%xmm0
mulsd  (%rsi,%r9,8),%xmm0
addsd  (%rbx,%r8,8),%xmm0
movsd  %xmm0,(%rbx,%r8,8)
movsd  (%rcx),%xmm0
mov    0xf8(%rsp),%rcx
divsd  (%rax),%xmm0
mov    0x118(%rsp),%rax
addsd  (%rdi,%r8,8),%xmm0
movsd  %xmm0,(%rdi,%r8,8)
add    %rcx,%rdi
add    %rcx,%rbx
add    %rdx,%r14
add    %rdx,%r15
add    %rdx,%rbp
add    %rdx,%r13
add    $0xffffffffffffffff,%rax
jne    1680 <_reproject_slice_c+0x540>
jmp    1600 <_reproject_slice_c+0x4c0>
add    $0x1e8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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