void resample_z(int D, int **M, int *N, double alpha, double eta, double psi,
                double **post_beta, double **post_theta,
                double **post_theta_train, int *entity_map, int ***w, int ***z,
                int ***s, int **labels, int K, int V) {
  int d_10;
  int n_16;
  int m_22;
  double *tmp_post_z_3;
  int tmp_idx_z_3;
  int dvv_loop_var_1;
  double *theta_counts;
  int *labelIdx = (int *)malloc(K * sizeof(int));
  double *post_z = (double *)malloc((K + 1) * sizeof(double));
  for (d_10 = 1; d_10 <= D; d_10++) {
    if (entity_map[d_10 - 1] == -1) {
      theta_counts = post_theta[d_10 - 1];
    } else {
      theta_counts = post_theta_train[entity_map[d_10 - 1]];
    }
    for (n_16 = 1; n_16 <= N[d_10 - 1]; n_16++) {
      for (m_22 = 1; m_22 <= M[d_10 - 1][n_16 - 1]; m_22++) {
        if (s[d_10 - 1][n_16 - 1][m_22 - 1] == 1) {
          post_beta[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1][(V) + (1) - 1] +=
              (0.0) - ((1.0) * ((((z[d_10 - 1][n_16 - 1][m_22 - 1]) ==
                                  (z[d_10 - 1][n_16 - 1][m_22 - 1]))
                                     ? 1
                                     : 0)));
          post_beta[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1]
                   [w[d_10 - 1][n_16 - 1][m_22 - 1] - 1] +=
              (0.0) - ((1.0) * ((((z[d_10 - 1][n_16 - 1][m_22 - 1]) ==
                                  (z[d_10 - 1][n_16 - 1][m_22 - 1]))
                                     ? 1
                                     : 0)));
        }
        theta_counts[(K) + (1) - 1] -= 1.0;
        theta_counts[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1] -= 1.0;
        assert(theta_counts[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1] >= 0);
        z[d_10 - 1][n_16 - 1][m_22 - 1] = sample_Mult_labeled_stop(
            w[d_10 - 1][n_16 - 1][m_22 - 1], s[d_10 - 1][n_16 - 1][m_22 - 1],
            post_beta, theta_counts, V, K, alpha, eta, labels[d_10 - 1],
            labelIdx, post_z);
        if (s[d_10 - 1][n_16 - 1][m_22 - 1] == 1) {
          post_beta[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1][(V) + (1) - 1] +=
              (1.0) * ((((z[d_10 - 1][n_16 - 1][m_22 - 1]) ==
                         (z[d_10 - 1][n_16 - 1][m_22 - 1]))
                            ? 1
                            : 0));
          post_beta[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1]
                   [w[d_10 - 1][n_16 - 1][m_22 - 1] - 1] +=
              (1.0) * ((((z[d_10 - 1][n_16 - 1][m_22 - 1]) ==
                         (z[d_10 - 1][n_16 - 1][m_22 - 1]))
                            ? 1
                            : 0));
        }
        theta_counts[(K) + (1) - 1] += 1.0;
        theta_counts[z[d_10 - 1][n_16 - 1][m_22 - 1] - 1] += 1.0;
      }
    }
  }
  free(labelIdx);
  free(post_z);
}


x86 assembly (clang, -O0):
<resample_z>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
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    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
movsd  %xmm1,-0x28(%rbp)
movsd  %xmm2,-0x30(%rbp)
mov    %rcx,-0x38(%rbp)
mov    %r8,-0x40(%rbp)
mov    %r9,-0x48(%rbp)
movslq 0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x78(%rbp)
mov    0x38(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x80(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     180d <resample_z+0x6cd>
mov    0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
jne    11f6 <resample_z+0xb6>
mov    -0x40(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x70(%rbp)
jmp    1213 <resample_z+0xd3>
mov    -0x48(%rbp),%rax
mov    0x10(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x70(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jg     17fa <resample_z+0x6ba>
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jg     17e7 <resample_z+0x6a7>
mov    0x28(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1427 <resample_z+0x2e7>
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
xor    %eax,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
cvtsi2sd %eax,%xmm1
xorps  %xmm0,%xmm0
subsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    0x40(%rbp),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
xor    %eax,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
cvtsi2sd %eax,%xmm1
xorps  %xmm0,%xmm0
subsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    0x18(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
mov    0x38(%rbp),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xbbc(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xb72(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%edi
mov    $0x0,%al
call   1040 <assert@plt>
mov    0x18(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edi
mov    0x28(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
mov    -0x38(%rbp),%rdx
mov    -0x70(%rbp),%rcx
mov    0x40(%rbp),%r8d
mov    0x38(%rbp),%r9d
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
mov    0x30(%rbp),%rax
mov    -0x4c(%rbp),%r10d
sub    $0x1,%r10d
movslq %r10d,%r10
mov    (%rax,%r10,8),%r11
mov    -0x78(%rbp),%r10
mov    -0x80(%rbp),%rax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %rax,0x10(%rsp)
mov    $0x2,%al
call   1050 <sample_Mult_labeled_stop@plt>
mov    %eax,%edx
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x28(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1771 <resample_z+0x631>
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
xor    %eax,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x38(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    0x40(%rbp),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
xor    %eax,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmove  %ecx,%eax
cvtsi2sd %eax,%xmm0
mov    -0x38(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    0x18(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
mov    0x38(%rbp),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  0x877(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%rax
mov    0x20(%rbp),%rcx
mov    -0x4c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x50(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,8),%rcx
mov    -0x54(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  0x831(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    123a <resample_z+0xfa>
jmp    17ec <resample_z+0x6ac>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    121a <resample_z+0xda>
jmp    17ff <resample_z+0x6bf>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    11b9 <resample_z+0x79>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<resample_z>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %r9,0x60(%rsp)
mov    %r8,0x58(%rsp)
mov    %rcx,0x18(%rsp)
movsd  %xmm1,0x90(%rsp)
movsd  %xmm0,0x88(%rsp)
mov    %rdx,0x20(%rsp)
mov    %rsi,0x40(%rsp)
mov    %edi,%ebx
mov    0x100(%rsp),%eax
mov    %eax,0xc(%rsp)
mov    0xf8(%rsp),%eax
mov    0xf0(%rsp),%rcx
mov    %rcx,0x80(%rsp)
mov    0xe8(%rsp),%rcx
mov    %rcx,0x48(%rsp)
mov    0xe0(%rsp),%r14
mov    0xd8(%rsp),%r13
mov    0xd0(%rsp),%rcx
mov    %rcx,0x50(%rsp)
movslq %eax,%rbp
lea    0x0(,%rbp,4),%rdi
call   1060 <malloc@plt>
mov    %rax,0x38(%rsp)
lea    0x8(,%rbp,8),%rdi
call   1060 <malloc@plt>
mov    %rax,0x30(%rsp)
mov    %rbx,0x10(%rsp)
test   %ebx,%ebx
jle    1499 <resample_z+0x359>
mov    %r14,%rdi
movslq 0xc(%rsp),%rax
mov    %rax,0x28(%rsp)
mov    0x10(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x10(%rsp)
mov    $0x1,%r12d
mov    %r13,0x78(%rsp)
mov    %r14,0x70(%rsp)
mov    %rbp,0x68(%rsp)
jmp    123f <resample_z+0xff>
nop
add    $0x1,%r12
cmp    0x10(%rsp),%r12
je     1499 <resample_z+0x359>
mov    0x50(%rsp),%rax
movslq -0x4(%rax,%r12,4),%rax
cmp    $0xffffffffffffffff,%rax
mov    0x58(%rsp),%rcx
lea    -0x8(%rcx,%r12,8),%rcx
mov    0x60(%rsp),%rdx
lea    (%rdx,%rax,8),%rax
cmove  %rcx,%rax
mov    0x20(%rsp),%rcx
mov    -0x4(%rcx,%r12,4),%ecx
test   %ecx,%ecx
jle    1230 <resample_z+0xf0>
mov    (%rax),%r15
mov    0x40(%rsp),%rax
mov    -0x8(%rax,%r12,8),%rax
mov    $0x1,%ebx
jmp    12a9 <resample_z+0x169>
cs nopw 0x0(%rax,%rax,1)
mov    0x20(%rsp),%rcx
mov    -0x4(%rcx,%r12,4),%ecx
lea    0x1(%rbx),%rdx
movslq %ecx,%rsi
cmp    %rsi,%rbx
mov    %rdx,%rbx
jge    1230 <resample_z+0xf0>
cmpl   $0x0,-0x4(%rax,%rbx,4)
jle    129a <resample_z+0x15a>
mov    0x48(%rsp),%rax
mov    -0x8(%rax,%r12,8),%rax
mov    -0x8(%rax,%rbx,8),%rcx
xor    %r14d,%r14d
jmp    1319 <resample_z+0x1d9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x68(%rsp),%rbp
movsd  (%r15,%rbp,8),%xmm0
movsd  0xd25(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rbp,8)
movsd  (%r15,%rax,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rax,8)
mov    0x40(%rsp),%rax
mov    -0x8(%rax,%r12,8),%rax
movslq -0x4(%rax,%rbx,4),%rdx
add    $0x1,%r14
cmp    %rdx,%r14
jge    1290 <resample_z+0x150>
cmpl   $0x1,(%rcx,%r14,4)
mov    -0x8(%rdi,%r12,8),%rax
mov    -0x8(%rax,%rbx,8),%rax
movslq (%rax,%r14,4),%rax
jne    1371 <resample_z+0x231>
mov    0x18(%rsp),%rcx
mov    -0x8(%rcx,%rax,8),%rcx
mov    0x28(%rsp),%rdx
movsd  (%rcx,%rdx,8),%xmm0
movsd  0xcb6(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rcx,%rdx,8)
mov    -0x8(%r13,%r12,8),%rdx
mov    -0x8(%rdx,%rbx,8),%rdx
movslq (%rdx,%r14,4),%rdx
movsd  -0x8(%rcx,%rdx,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rcx,%rdx,8)
movsd  (%r15,%rbp,8),%xmm0
movsd  0xc81(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%r15,%rbp,8)
movsd  -0x8(%r15,%rax,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%r15,%rax,8)
xor    %edi,%edi
ucomisd 0xc6b(%rip),%xmm0
setae  %dil
xor    %eax,%eax
call   1040 <assert@plt>
mov    -0x8(%r13,%r12,8),%rax
mov    -0x8(%rax,%rbx,8),%rax
mov    (%rax,%r14,4),%edi
mov    %rbp,%r9
mov    %rbx,%r13
mov    0x48(%rsp),%rbp
mov    -0x8(%rbp,%r12,8),%rax
mov    -0x8(%rax,%rbx,8),%rax
mov    (%rax,%r14,4),%esi
sub    $0x8,%rsp
mov    0x20(%rsp),%rdx
mov    %r15,%rcx
mov    0x14(%rsp),%r8d
movsd  0x90(%rsp),%xmm0
movsd  0x98(%rsp),%xmm1
mov    $0x2,%al
push   0x38(%rsp)
push   0x48(%rsp)
mov    0x98(%rsp),%rbx
push   -0x8(%rbx,%r12,8)
call   1050 <sample_Mult_labeled_stop@plt>
add    $0x20,%rsp
mov    0x70(%rsp),%rdx
mov    -0x8(%rdx,%r12,8),%rcx
mov    -0x8(%rcx,%r13,8),%rcx
mov    %eax,(%rcx,%r14,4)
mov    -0x8(%rbp,%r12,8),%rcx
mov    %r13,%rbx
mov    0x78(%rsp),%r13
mov    -0x8(%rcx,%rbx,8),%rcx
add    $0xffffffff,%eax
cmpl   $0x1,(%rcx,%r14,4)
cltq
mov    %rdx,%rdi
jne    12d0 <resample_z+0x190>
mov    0x18(%rsp),%rdx
mov    (%rdx,%rax,8),%rdx
mov    0x28(%rsp),%rsi
movsd  (%rdx,%rsi,8),%xmm0
movsd  0xb9b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rdx,%rsi,8)
mov    -0x8(%r13,%r12,8),%rsi
mov    -0x8(%rsi,%rbx,8),%rsi
movslq (%rsi,%r14,4),%rsi
movsd  -0x8(%rdx,%rsi,8),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rdx,%rsi,8)
jmp    12d0 <resample_z+0x190>
mov    0x38(%rsp),%rdi
call   1030 <free@plt>
mov    0x30(%rsp),%rdi
add    $0x98,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>

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

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