void R_S_rlm(double *X, double *y, int *n, int *P, int *nres, int *max_it,
             double *SCale, double *beta_s, double *beta_m, int *converged_mm,
             int *seed_rand, double *C, double *Psi_c, int *Groups,
             int *N_group, int *K_fast_s) {
  void fast_s_large_n(double *X, double *y, int *nn, int *pp, int *NN, int *K,
                      int *ggroups, int *nn_group, int *bbest_r, double *bb,
                      double *rrhoc, double *bbeta, double *sscale);
  void fast_s(double *X, double *y, int *nn, int *pp, int *NN, int *K,
              int *bbest_r, double *bb, double *rrhoc, double *bbeta,
              double *sscale);
  int rwls(double **, int, int, double *, double *, double, double, int,
           double);
  int rwls_chi(double **, int, int, double *, double *, double *, double,
               double);
  void sample_n_outof_N(int, int, int *);
  int lu(double **, int *, double *);
  register int i, j;
  double best_s = 99999.99, **x_samp, *cand_beta, **x;
  double *resid;
  double *beta, *temp1, *temp2;
  int N, p, *b_i;
  int bbest_r = 2, ggroups = *Groups, nn_group = *N_group, k_fast_s = *K_fast_s;
  double b = 0.5, rrhoc = *C;
  N = *n;
  p = *P;
  srand((long)*seed_rand);
  x = (double **)malloc(N * sizeof(double *));
  for (i = 0; i < N; i++)
    x[i] = (double *)malloc((p + 1) * sizeof(double));
  b_i = (int *)malloc(p * sizeof(int));
  cand_beta = (double *)malloc(p * sizeof(double));
  beta = (double *)malloc(p * sizeof(double));
  resid = (double *)malloc(N * sizeof(double));
  x_samp = (double **)malloc(p * sizeof(double *));
  temp1 = (double *)malloc(N * sizeof(double));
  temp2 = (double *)malloc(N * sizeof(double));
  for (i = 0; i < p; i++)
    x_samp[i] = (double *)malloc((p + 1) * sizeof(double));
  for (i = 0; i < N; i++) {
    for (j = 0; j < p; j++)
      x[i][j] = X[j * N + i];
    x[i][p] = y[i];
  };
  *nres = 500;
  if (*n > 2000)
    fast_s_large_n(X, y, n, P, nres, &k_fast_s, &ggroups, &nn_group, &bbest_r,
                   &b, &rrhoc, beta_s, &best_s);
  else
    fast_s(X, y, n, P, nres, &k_fast_s, &bbest_r, &b, &rrhoc, beta_s, &best_s);
  if (fabs(best_s) < 1e-10) {
    *SCale = 0.0;
    for (i = 0; i < p; i++)
      beta_m[i] = beta_s[i];
    free(b_i);
    free(temp1);
    free(temp2);
    for (i = 0; i < p; i++)
      free(x_samp[i]);
    free(x_samp);
    free(resid);
    free(cand_beta);
    free(beta);
    for (i = 0; i < N; i++)
      free(x[i]);
    free(x);
    return;
  };
  *SCale = best_s;
  *converged_mm = 1;
  if (rwls(x, N, p, beta_m, beta_s, best_s, 1e-10, *max_it, *Psi_c) == 1) {
    for (i = 0; i < p; i++)
      beta_m[i] = beta_s[i];
    *converged_mm = 0;
  };
  for (i = 0; i < p; i++)
    free(x_samp[i]);
  free(x_samp);
  free(resid);
  free(cand_beta);
  free(beta);
  for (i = 0; i < N; i++)
    free(x[i]);
  free(x);
  free(temp1);
  free(temp2);
  free(b_i);
}


x86 assembly (clang, -O0):
<R_S_rlm>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0xe0,%rsp
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
movsd  0xe4e(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x2,-0xac(%rbp)
mov    0x48(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xb0(%rbp)
mov    0x50(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xb4(%rbp)
mov    0x58(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xb8(%rbp)
movsd  0xe0b(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xa0(%rbp)
mov    0x30(%rbp),%rax
movslq (%rax),%rdi
mov    $0x0,%al
call   1050 <srand@plt>
movslq -0x9c(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x78(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    128f <R_S_rlm+0x12f>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x78(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    124e <R_S_rlm+0xee>
movslq -0xa0(%rbp),%rdi
shl    $0x2,%rdi
call   1060 <malloc@plt>
mov    %rax,-0xa8(%rbp)
movslq -0xa0(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x70(%rbp)
movslq -0xa0(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x88(%rbp)
movslq -0x9c(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x80(%rbp)
movslq -0xa0(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x68(%rbp)
movslq -0x9c(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x90(%rbp)
movslq -0x9c(%rbp),%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,-0x98(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    136f <R_S_rlm+0x20f>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdi
shl    $0x3,%rdi
call   1060 <malloc@plt>
mov    %rax,%rdx
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    132e <R_S_rlm+0x1ce>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    140a <R_S_rlm+0x2aa>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    13d7 <R_S_rlm+0x277>
mov    -0x28(%rbp),%rax
mov    -0x58(%rbp),%ecx
imul   -0x9c(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x78(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x58(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    138c <R_S_rlm+0x22c>
mov    -0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x78(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xa0(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1376 <R_S_rlm+0x216>
mov    -0x48(%rbp),%rax
movl   $0x1f4,(%rax)
mov    -0x38(%rbp),%rax
cmpl   $0x7d0,(%rax)
jle    1496 <R_S_rlm+0x336>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x38(%rbp),%rdx
mov    -0x40(%rbp),%rcx
mov    -0x48(%rbp),%r8
mov    0x18(%rbp),%r10
lea    -0xb8(%rbp),%r9
lea    -0xb0(%rbp),%r12
lea    -0xb4(%rbp),%r15
lea    -0xac(%rbp),%r14
lea    -0xc0(%rbp),%rbx
lea    -0xc8(%rbp),%r11
lea    -0x60(%rbp),%rax
mov    %r12,(%rsp)
mov    %r15,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %rax,0x30(%rsp)
call   1040 <fast_s_large_n@plt>
jmp    14eb <R_S_rlm+0x38b>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x38(%rbp),%rdx
mov    -0x40(%rbp),%rcx
mov    -0x48(%rbp),%r8
mov    0x18(%rbp),%r10
lea    -0xb8(%rbp),%r9
lea    -0xac(%rbp),%r14
lea    -0xc0(%rbp),%rbx
lea    -0xc8(%rbp),%r11
lea    -0x60(%rbp),%rax
mov    %r14,(%rsp)
mov    %rbx,0x8(%rsp)
mov    %r11,0x10(%rsp)
mov    %r10,0x18(%rsp)
mov    %rax,0x20(%rsp)
call   1070 <fast_s@plt>
movsd  -0x60(%rbp),%xmm1
movaps 0xb29(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xb0d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1619 <R_S_rlm+0x4b9>
mov    0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    1556 <R_S_rlm+0x3f6>
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    151f <R_S_rlm+0x3bf>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
mov    -0x90(%rbp),%rdi
call   1030 <free@plt>
mov    -0x98(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    15af <R_S_rlm+0x44f>
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1581 <R_S_rlm+0x421>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
mov    -0x70(%rbp),%rdi
call   1030 <free@plt>
mov    -0x88(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    160b <R_S_rlm+0x4ab>
mov    -0x78(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    15dd <R_S_rlm+0x47d>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
jmp    1778 <R_S_rlm+0x618>
movsd  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x28(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x78(%rbp),%rdi
mov    -0x9c(%rbp),%esi
mov    -0xa0(%rbp),%edx
mov    0x20(%rbp),%rcx
mov    0x18(%rbp),%r8
movsd  -0x60(%rbp),%xmm0
mov    -0x50(%rbp),%rax
mov    (%rax),%r9d
mov    0x40(%rbp),%rax
movsd  (%rax),%xmm2
movsd  0x9ac(%rip),%xmm1
call   1080 <rwls@plt>
cmp    $0x1,%eax
jne    16ba <R_S_rlm+0x55a>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    16b0 <R_S_rlm+0x550>
mov    0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1679 <R_S_rlm+0x519>
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xa0(%rbp),%eax
jge    16ef <R_S_rlm+0x58f>
mov    -0x68(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    16c1 <R_S_rlm+0x561>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
mov    -0x70(%rbp),%rdi
call   1030 <free@plt>
mov    -0x88(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    174b <R_S_rlm+0x5eb>
mov    -0x78(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    171d <R_S_rlm+0x5bd>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
mov    -0x90(%rbp),%rdi
call   1030 <free@plt>
mov    -0x98(%rbp),%rdi
call   1030 <free@plt>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
add    $0xe0,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<R_S_rlm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r9,0x68(%rsp)
mov    %r8,0x78(%rsp)
mov    %rsi,0x30(%rsp)
mov    %rdi,0x18(%rsp)
mov    0xe0(%rsp),%r8
mov    0xe8(%rsp),%rbx
mov    0x108(%rsp),%rax
mov    0x100(%rsp),%rsi
mov    0xf8(%rsp),%rdi
movabs $0x40f869ffd70a3d71,%rbp
69 f8 40
mov    %rbp,0x40(%rsp)
movl   $0x2,0x14(%rsp)
mov    (%rdi),%edi
mov    %edi,0x4c(%rsp)
mov    (%rsi),%esi
mov    %esi,0x48(%rsp)
mov    (%rax),%eax
mov    %eax,0x10(%rsp)
movabs $0x3fe0000000000000,%rax
mov    %rax,0x60(%rsp)
movsd  (%rbx),%xmm0
movsd  %xmm0,0x58(%rsp)
mov    %rdx,0x70(%rsp)
movslq (%rdx),%r15
mov    %rcx,0x50(%rsp)
movslq (%rcx),%rbx
movslq (%r8),%rdi
xor    %eax,%eax
call   1050 <srand@plt>
lea    0x0(,%r15,8),%r13
mov    %r13,%rdi
call   1060 <malloc@plt>
mov    %rax,%r12
mov    %r15d,%r14d
mov    %rbx,%rax
mov    %rbx,0x8(%rsp)
mov    %ebx,%eax
mov    %rax,0x80(%rsp)
test   %r15,%r15
jle    1265 <R_S_rlm+0x105>
mov    0x8(%rsp),%rax
lea    0x8(,%rax,8),%rbx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rbx,%rdi
call   1060 <malloc@plt>
mov    %rax,(%r12,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1250 <R_S_rlm+0xf0>
mov    %r14,0x20(%rsp)
mov    %r12,0x38(%rsp)
mov    0x8(%rsp),%rax
lea    0x0(,%rax,8),%rdi
call   1060 <malloc@plt>
mov    %rax,%rbp
mov    0x80(%rsp),%r14
test   %r14d,%r14d
jle    12b6 <R_S_rlm+0x156>
lea    0x8(,%r14,8),%r12
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
mov    %r12,%rdi
call   1060 <malloc@plt>
mov    %rax,0x0(%rbp,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r14
jne    12a0 <R_S_rlm+0x140>
mov    %rbp,0x28(%rsp)
cmpl   $0x0,0x20(%rsp)
jle    13da <R_S_rlm+0x27a>
lea    -0x1(%r14),%r8
mov    %r14d,%ecx
and    $0x3,%ecx
mov    %r14d,%r11d
and    $0xfffffffc,%r11d
mov    %r15,%r12
shl    $0x4,%r12
mov    %r15,%rdi
shl    $0x5,%rdi
lea    0x0(,%r13,2),%rbx
add    %r13,%rbx
xor    %r10d,%r10d
mov    0x18(%rsp),%r9
jmp    1329 <R_S_rlm+0x1c9>
nopw   0x0(%rax,%rax,1)
mov    0x30(%rsp),%rax
movsd  (%rax,%r10,8),%xmm0
mov    0x8(%rsp),%rax
movsd  %xmm0,0x0(%rbp,%rax,8)
add    $0x1,%r10
add    $0x8,%r9
cmp    0x20(%rsp),%r10
je     13da <R_S_rlm+0x27a>
mov    0x38(%rsp),%rax
mov    (%rax,%r10,8),%rbp
test   %r14d,%r14d
jle    1300 <R_S_rlm+0x1a0>
cmp    $0x3,%r8
jae    1350 <R_S_rlm+0x1f0>
xor    %eax,%eax
jmp    1399 <R_S_rlm+0x239>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r9,%rdx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rdx),%xmm0
movsd  %xmm0,0x0(%rbp,%rax,8)
movsd  (%rdx,%r15,8),%xmm0
movsd  %xmm0,0x8(%rbp,%rax,8)
movsd  (%rdx,%r12,1),%xmm0
movsd  %xmm0,0x10(%rbp,%rax,8)
movsd  (%rdx,%rbx,1),%xmm0
movsd  %xmm0,0x18(%rbp,%rax,8)
add    $0x4,%rax
add    %rdi,%rdx
cmp    %rax,%r11
jne    1360 <R_S_rlm+0x200>
test   %rcx,%rcx
je     1300 <R_S_rlm+0x1a0>
lea    0x0(,%rax,8),%rdx
add    %rbp,%rdx
imul   %r15,%rax
add    %r10,%rax
mov    0x18(%rsp),%rsi
lea    (%rsi,%rax,8),%rax
xor    %esi,%esi
nop
movsd  (%rax),%xmm0
movsd  %xmm0,(%rdx,%rsi,8)
add    $0x1,%rsi
add    %r13,%rax
cmp    %rsi,%rcx
jne    13c0 <R_S_rlm+0x260>
jmp    1300 <R_S_rlm+0x1a0>
mov    0xc8(%rsp),%r13
mov    0x78(%rsp),%r8
movl   $0x1f4,(%r8)
mov    0x70(%rsp),%rdx
cmpl   $0x7d1,(%rdx)
jl     1447 <R_S_rlm+0x2e7>
sub    $0x8,%rsp
lea    0x48(%rsp),%rax
lea    0x60(%rsp),%rbp
lea    0x68(%rsp),%rbx
lea    0x1c(%rsp),%r10
lea    0x50(%rsp),%r11
lea    0x54(%rsp),%r12
lea    0x18(%rsp),%r9
mov    0x20(%rsp),%rdi
mov    0x38(%rsp),%rsi
mov    0x58(%rsp),%rcx
push   %rax
push   %r13
push   %rbp
push   %rbx
push   %r10
push   %r11
push   %r12
call   1040 <fast_s_large_n@plt>
add    $0x40,%rsp
jmp    1483 <R_S_rlm+0x323>
sub    $0x8,%rsp
lea    0x48(%rsp),%rax
lea    0x60(%rsp),%rbp
lea    0x68(%rsp),%rbx
lea    0x1c(%rsp),%r10
lea    0x18(%rsp),%r9
mov    0x20(%rsp),%rdi
mov    0x38(%rsp),%rsi
mov    0x58(%rsp),%rcx
push   %rax
push   %r13
push   %rbp
push   %rbx
push   %r10
call   1070 <fast_s@plt>
add    $0x30,%rsp
mov    0x38(%rsp),%r12
mov    0xd0(%rsp),%rbx
mov    0xc0(%rsp),%rax
movsd  0x40(%rsp),%xmm0
movapd 0xb5a(%rip),%xmm1
andpd  %xmm0,%xmm1
movsd  0xb5e(%rip),%xmm2
ucomisd %xmm1,%xmm2
jbe    1571 <R_S_rlm+0x411>
movq   $0x0,(%rax)
test   %r14d,%r14d
mov    0x28(%rsp),%rbp
jle    17b3 <R_S_rlm+0x653>
cmpl   $0x4,0x8(%rsp)
jb     14f9 <R_S_rlm+0x399>
lea    0x0(,%r14,8),%rax
add    %r13,%rax
cmp    %rbx,%rax
jbe    1671 <R_S_rlm+0x511>
lea    (%rbx,%r14,8),%rax
cmp    %r13,%rax
jbe    1671 <R_S_rlm+0x511>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %r14,%rcx
mov    %r14,%rdx
and    $0x3,%rdx
je     1526 <R_S_rlm+0x3c6>
nopl   (%rax)
movsd  0x0(%r13,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    1510 <R_S_rlm+0x3b0>
cmp    $0x3,%rcx
jb     1788 <R_S_rlm+0x628>
movsd  0x0(%r13,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
movsd  0x8(%r13,%rax,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rax,8)
movsd  0x10(%r13,%rax,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rax,8)
movsd  0x18(%r13,%rax,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rax,8)
add    $0x4,%rax
cmp    %rax,%r14
jne    1530 <R_S_rlm+0x3d0>
jmp    1788 <R_S_rlm+0x628>
mov    0xf0(%rsp),%rcx
mov    0xd8(%rsp),%rbp
movsd  %xmm0,(%rax)
movl   $0x1,0x0(%rbp)
mov    0x68(%rsp),%rax
mov    (%rax),%r9d
movsd  (%rcx),%xmm2
movsd  0xa70(%rip),%xmm1
mov    %r12,%rdi
mov    0x20(%rsp),%r15
mov    %r15d,%esi
mov    %r14d,%edx
mov    %rbx,%rcx
mov    %r13,%r8
call   1080 <rwls@plt>
cmp    $0x1,%eax
jne    18af <R_S_rlm+0x74f>
test   %r14d,%r14d
jle    18a8 <R_S_rlm+0x748>
cmpl   $0x4,0x8(%rsp)
jb     15f3 <R_S_rlm+0x493>
lea    0x0(,%r14,8),%rax
add    %r13,%rax
cmp    %rbx,%rax
jbe    1698 <R_S_rlm+0x538>
lea    (%rbx,%r14,8),%rax
cmp    %r13,%rax
jbe    1698 <R_S_rlm+0x538>
xor    %eax,%eax
mov    %rax,%rcx
not    %rcx
add    %r14,%rcx
mov    %r14,%rdx
and    $0x3,%rdx
je     1626 <R_S_rlm+0x4c6>
nopw   0x0(%rax,%rax,1)
movsd  0x0(%r13,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    1610 <R_S_rlm+0x4b0>
cmp    $0x3,%rcx
jb     18a8 <R_S_rlm+0x748>
movsd  0x0(%r13,%rax,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
movsd  0x8(%r13,%rax,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rax,8)
movsd  0x10(%r13,%rax,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rax,8)
movsd  0x18(%r13,%rax,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rax,8)
add    $0x4,%rax
cmp    %rax,%r14
jne    1630 <R_S_rlm+0x4d0>
jmp    18a8 <R_S_rlm+0x748>
mov    %r14d,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0xc,%rsi
jae    16c3 <R_S_rlm+0x563>
xor    %esi,%esi
jmp    1735 <R_S_rlm+0x5d5>
mov    %r14d,%eax
and    $0xfffffffc,%eax
lea    -0x4(%rax),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%ecx
and    $0x3,%ecx
cmp    $0xc,%rsi
jae    17e7 <R_S_rlm+0x687>
xor    %esi,%esi
jmp    1855 <R_S_rlm+0x6f5>
and    $0xfffffffffffffffc,%rdx
xor    %esi,%esi
nopl   0x0(%rax)
movups 0x0(%r13,%rsi,8),%xmm0
movups 0x10(%r13,%rsi,8),%xmm1
movups %xmm0,(%rbx,%rsi,8)
movups %xmm1,0x10(%rbx,%rsi,8)
movups 0x20(%r13,%rsi,8),%xmm0
movups 0x30(%r13,%rsi,8),%xmm1
movups %xmm0,0x20(%rbx,%rsi,8)
movups %xmm1,0x30(%rbx,%rsi,8)
movups 0x40(%r13,%rsi,8),%xmm0
movups 0x50(%r13,%rsi,8),%xmm1
movups %xmm0,0x40(%rbx,%rsi,8)
movups %xmm1,0x50(%rbx,%rsi,8)
movupd 0x60(%r13,%rsi,8),%xmm0
movupd 0x70(%r13,%rsi,8),%xmm1
movupd %xmm0,0x60(%rbx,%rsi,8)
movupd %xmm1,0x70(%rbx,%rsi,8)
add    $0x10,%rsi
add    $0xfffffffffffffffc,%rdx
jne    16d0 <R_S_rlm+0x570>
test   %rcx,%rcx
je     177f <R_S_rlm+0x61f>
lea    (%rbx,%rsi,8),%rdx
add    $0x10,%rdx
lea    0x10(,%rsi,8),%rsi
add    %r13,%rsi
shl    $0x5,%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%rsi,%rdi,1),%xmm0
movupd (%rsi,%rdi,1),%xmm1
movupd %xmm0,-0x10(%rdx,%rdi,1)
movupd %xmm1,(%rdx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rcx
jne    1760 <R_S_rlm+0x600>
cmp    %r14,%rax
jne    14fb <R_S_rlm+0x39b>
test   %r14d,%r14d
mov    0x28(%rsp),%rbp
jle    17b3 <R_S_rlm+0x653>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x0(%rbp,%rbx,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbx
cmp    %rbx,%r14
jne    17a0 <R_S_rlm+0x640>
mov    %rbp,%rdi
call   1030 <free@plt>
cmpl   $0x0,0x20(%rsp)
jle    1902 <R_S_rlm+0x7a2>
mov    %r15d,%ebx
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
mov    (%r12,%rbp,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    17d0 <R_S_rlm+0x670>
jmp    1902 <R_S_rlm+0x7a2>
and    $0xfffffffffffffffc,%rdx
xor    %esi,%esi
nopl   (%rax)
movups 0x0(%r13,%rsi,8),%xmm0
movups 0x10(%r13,%rsi,8),%xmm1
movups %xmm0,(%rbx,%rsi,8)
movups %xmm1,0x10(%rbx,%rsi,8)
movups 0x20(%r13,%rsi,8),%xmm0
movups 0x30(%r13,%rsi,8),%xmm1
movups %xmm0,0x20(%rbx,%rsi,8)
movups %xmm1,0x30(%rbx,%rsi,8)
movups 0x40(%r13,%rsi,8),%xmm0
movups 0x50(%r13,%rsi,8),%xmm1
movups %xmm0,0x40(%rbx,%rsi,8)
movups %xmm1,0x50(%rbx,%rsi,8)
movupd 0x60(%r13,%rsi,8),%xmm0
movupd 0x70(%r13,%rsi,8),%xmm1
movupd %xmm0,0x60(%rbx,%rsi,8)
movupd %xmm1,0x70(%rbx,%rsi,8)
add    $0x10,%rsi
add    $0xfffffffffffffffc,%rdx
jne    17f0 <R_S_rlm+0x690>
test   %rcx,%rcx
je     189f <R_S_rlm+0x73f>
lea    (%rbx,%rsi,8),%rdx
add    $0x10,%rdx
lea    0x10(,%rsi,8),%rsi
add    %r13,%rsi
shl    $0x5,%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%rsi,%rdi,1),%xmm0
movupd (%rsi,%rdi,1),%xmm1
movupd %xmm0,-0x10(%rdx,%rdi,1)
movupd %xmm1,(%rdx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rcx
jne    1880 <R_S_rlm+0x720>
cmp    %r14,%rax
jne    15f5 <R_S_rlm+0x495>
movl   $0x0,0x0(%rbp)
test   %r14d,%r14d
mov    0x28(%rsp),%rbp
jle    18d3 <R_S_rlm+0x773>
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
mov    0x0(%rbp,%rbx,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbx
cmp    %rbx,%r14
jne    18c0 <R_S_rlm+0x760>
mov    %rbp,%rdi
call   1030 <free@plt>
test   %r15d,%r15d
jle    1902 <R_S_rlm+0x7a2>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%r12,%rbx,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbx
cmp    %rbx,%r15
jne    18f0 <R_S_rlm+0x790>
mov    %r12,%rdi
call   1030 <free@plt>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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