double tm_world_recur_(int *isudirript, int *iaxis, int *where_in_box,
                       int *max_lines, double line_mem[], int line_parent[],
                       int line_class[], int line_dim[], double line_start[],
                       double line_delta[], int line_sudir1[],
                       int line_modulo[], double line_modulo_len[],
                       int line_regular[]) {
  double tempwld, tm_world;
  int isub, rmod;
  int axis = *iaxis;
  int line_len = line_dim[axis];
  int is_subspan;
  int recursive = axis > *max_lines;
  if (recursive) {
    recursive = line_parent[axis] != 0;
    if (recursive) {
      int new_ss, lo_ss, hi_ss, parent_len;
      int new_where;
      switch (line_class[axis]) {
      case 1:
        new_ss =
            (int)line_start[axis] + (*isudirript - 1) * (int)line_delta[axis];
        if (line_regular[axis] || *where_in_box == 2) {
          tm_world = tm_world_recur_(
              &new_ss, &(line_parent[axis]), where_in_box, max_lines, line_mem,
              line_parent, line_class, line_dim, line_start, line_delta,
              line_sudir1, line_modulo, line_modulo_len, line_regular);
        } else {
          if (*where_in_box == 1) {
            lo_ss = (int)line_start[axis] +
                    (*isudirript - 2) * (int)line_delta[axis];
            hi_ss = new_ss;
          } else {
            lo_ss = new_ss;
            hi_ss = (int)line_start[axis] +
                    (*isudirript - 0) * (int)line_delta[axis];
          }
          parent_len = line_dim[line_parent[axis]];
          is_subspan = (tm_its_subspan_modulo_int_(&line_parent[axis]));
          if (line_modulo[line_parent[axis]] && is_subspan) {
            if (lo_ss == 0 || lo_ss == -1) {
              new_where = 1;
              lo_ss = 1;
              tm_world = (tm_world_recur_(
                  &lo_ss, &(line_parent[axis]), &new_where, max_lines, line_mem,
                  line_parent, line_class, line_dim, line_start, line_delta,
                  line_sudir1, line_modulo, line_modulo_len, line_regular));
              return (tm_world);
            }
            if (hi_ss == parent_len + 1) {
              new_where = 3;
              hi_ss = parent_len;
              tm_world = (tm_world_recur_(
                  &hi_ss, &(line_parent[axis]), &new_where, max_lines, line_mem,
                  line_parent, line_class, line_dim, line_start, line_delta,
                  line_sudir1, line_modulo, line_modulo_len, line_regular));
              return (tm_world);
            }
          }
          if (line_modulo[line_parent[axis]] ||
              (lo_ss >= 1 && hi_ss <= parent_len)) {
            new_where = 2;
            tm_world =
                0.5 *
                (tm_world_recur_(&lo_ss, &(line_parent[axis]), &new_where,
                                 max_lines, line_mem, line_parent, line_class,
                                 line_dim, line_start, line_delta, line_sudir1,
                                 line_modulo, line_modulo_len, line_regular) +
                 tm_world_recur_(&hi_ss, &(line_parent[axis]), &new_where,
                                 max_lines, line_mem, line_parent, line_class,
                                 line_dim, line_start, line_delta, line_sudir1,
                                 line_modulo, line_modulo_len, line_regular));
          } else if (*where_in_box == 1) {
            new_ss = 1;
            tm_world =
                tm_world_recur_(&new_ss, &(line_parent[axis]), where_in_box,
                                max_lines, line_mem, line_parent, line_class,
                                line_dim, line_start, line_delta, line_sudir1,
                                line_modulo, line_modulo_len, line_regular);
          } else {
            new_ss = parent_len;
            tm_world =
                tm_world_recur_(&new_ss, &(line_parent[axis]), where_in_box,
                                max_lines, line_mem, line_parent, line_class,
                                line_dim, line_start, line_delta, line_sudir1,
                                line_modulo, line_modulo_len, line_regular);
          }
        }
        break;
      case 2:
        tm_world = tm_world_recur_(isudirript, iaxis, where_in_box, max_lines,
                                   line_mem, line_parent, line_class, line_dim,
                                   line_start, line_delta, line_sudir1,
                                   line_modulo, line_modulo_len, line_regular);
        break;
      default:
        tm_world = -999.;
      }
      return (tm_world);
    }
  }
  if (tm_its_subspan_modulo_int_(&axis))
    line_len++;
  if (line_modulo[axis]) {
    isub = ((*isudirript - 1) % line_len) + 1;
    if (isub <= 0)
      isub += line_len;
  } else
    isub = (((line_len) < ((((1) < (*isudirript)) ? (*isudirript) : (1))))
                ? (line_len)
                : ((((1) < (*isudirript)) ? (*isudirript) : (1))));
  if (tm_its_subspan_modulo_int_(&axis) && isub == line_len) {
    double lo, hi;
    tm_ww_axlims_(&axis, &lo, &hi);
    if (*where_in_box == 1)
      tempwld = hi;
    else if (*where_in_box == 2)
      tempwld = (hi + (lo + line_modulo_len[axis])) / 2.;
    else
      tempwld = lo + line_modulo_len[axis];
    if (*isudirript <= 0)
      rmod = *isudirript / line_len - 1;
    else
      rmod = (*isudirript - 1) / line_len;
    tm_world = tempwld + rmod * line_modulo_len[axis];
  } else if (line_regular[axis]) {
    double midpoint = line_start[axis] + (isub - 1) * line_delta[axis];
    double box_size = line_delta[axis];
    if (*where_in_box == 1)
      tempwld = midpoint - (box_size / 2.);
    else if (*where_in_box == 2)
      tempwld = midpoint;
    else
      tempwld = midpoint + (box_size / 2.);
    if (line_modulo[axis]) {
      if (*isudirript <= 0)
        rmod = (*isudirript / line_len - 1);
      else
        rmod = ((*isudirript - 1) / line_len);
      tm_world = tempwld + rmod * tm_modulo_axlen_(&axis);
    } else
      tm_world = tempwld;
  } else {
    isub += line_sudir1[axis] - 1;
    isub--;
    if (*where_in_box == 1)
      tempwld = line_mem[isub + line_dim[axis]];
    else if (*where_in_box == 2)
      tempwld = line_mem[isub];
    else
      tempwld = line_mem[isub + line_dim[axis] + 1];
    if (line_modulo[axis]) {
      if (*isudirript <= 0)
        rmod = *isudirript / line_len - 1;
      else
        rmod = (*isudirript - 1) / line_len;
      tm_world = tempwld + rmod * tm_modulo_axlen_(&axis);
    } else
      tm_world = tempwld;
  }
  return (tm_world);
}


x86 assembly (clang, -O0):
<tm_world_recur_>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x118,%rsp
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,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
mov    %rdx,-0x48(%rbp)
mov    %rcx,-0x50(%rbp)
mov    %r8,-0x58(%rbp)
mov    %r9,-0x60(%rbp)
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    0x18(%rbp),%rax
movslq -0x7c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x80(%rbp)
mov    -0x7c(%rbp),%eax
mov    -0x50(%rbp),%rcx
cmp    (%rcx),%eax
setg   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x88(%rbp)
cmpl   $0x0,-0x88(%rbp)
je     1849 <tm_world_recur_+0x709>
mov    -0x60(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
setne  %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x88(%rbp)
cmpl   $0x0,-0x88(%rbp)
je     1844 <tm_world_recur_+0x704>
mov    0x10(%rbp),%rax
movslq -0x7c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xc4(%rbp)
sub    $0x1,%eax
je     1221 <tm_world_recur_+0xe1>
jmp    120d <tm_world_recur_+0xcd>
mov    -0xc4(%rbp),%eax
sub    $0x2,%eax
je     17ba <tm_world_recur_+0x67a>
jmp    1828 <tm_world_recur_+0x6e8>
mov    0x20(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cvttsd2si (%rax,%rcx,8),%eax
mov    -0x38(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
mov    0x28(%rbp),%rdx
movslq -0x7c(%rbp),%rsi
cvttsd2si (%rdx,%rsi,8),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x8c(%rbp)
mov    0x48(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    126e <tm_world_recur_+0x12e>
mov    -0x48(%rbp),%rax
cmpl   $0x2,(%rax)
jne    12ea <tm_world_recur_+0x1aa>
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x48(%rbp),%rdx
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x8c(%rbp),%rdi
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
jmp    17b5 <tm_world_recur_+0x675>
mov    -0x48(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1336 <tm_world_recur_+0x1f6>
mov    0x20(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cvttsd2si (%rax,%rcx,8),%eax
mov    -0x38(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x2,%ecx
mov    0x28(%rbp),%rdx
movslq -0x7c(%rbp),%rsi
cvttsd2si (%rdx,%rsi,8),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x90(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0x94(%rbp)
jmp    1370 <tm_world_recur_+0x230>
mov    -0x8c(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    0x20(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cvttsd2si (%rax,%rcx,8),%eax
mov    -0x38(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x0,%ecx
mov    0x28(%rbp),%rdx
movslq -0x7c(%rbp),%rsi
cvttsd2si (%rdx,%rsi,8),%edx
imul   %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x94(%rbp)
mov    0x18(%rbp),%rax
mov    -0x60(%rbp),%rcx
movslq -0x7c(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x98(%rbp)
mov    -0x60(%rbp),%rdi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
mov    $0x0,%al
call   1060 <tm_its_subspan_modulo_int_@plt>
mov    %eax,-0x84(%rbp)
mov    0x38(%rbp),%rax
mov    -0x60(%rbp),%rcx
movslq -0x7c(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     153e <tm_world_recur_+0x3fe>
cmpl   $0x0,-0x84(%rbp)
je     153e <tm_world_recur_+0x3fe>
cmpl   $0x0,-0x90(%rbp)
je     13e6 <tm_world_recur_+0x2a6>
cmpl   $0xffffffff,-0x90(%rbp)
jne    1483 <tm_world_recur_+0x343>
movl   $0x1,-0x9c(%rbp)
movl   $0x1,-0x90(%rbp)
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x90(%rbp),%rdi
lea    -0x9c(%rbp),%rdx
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1d12 <tm_world_recur_+0xbd2>
mov    -0x94(%rbp),%eax
mov    -0x98(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    1539 <tm_world_recur_+0x3f9>
movl   $0x3,-0x9c(%rbp)
mov    -0x98(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x94(%rbp),%rdi
lea    -0x9c(%rbp),%rdx
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1d12 <tm_world_recur_+0xbd2>
jmp    153e <tm_world_recur_+0x3fe>
mov    0x38(%rbp),%rax
mov    -0x60(%rbp),%rcx
movslq -0x7c(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1577 <tm_world_recur_+0x437>
cmpl   $0x1,-0x90(%rbp)
jl     1695 <tm_world_recur_+0x555>
mov    -0x94(%rbp),%eax
cmp    -0x98(%rbp),%eax
jg     1695 <tm_world_recur_+0x555>
movl   $0x2,-0x9c(%rbp)
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x90(%rbp),%rdi
lea    -0x9c(%rbp),%rdx
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x94(%rbp),%rdi
lea    -0x9c(%rbp),%rdx
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  -0xd0(%rbp),%xmm1
ff
addsd  %xmm0,%xmm1
movsd  0x981(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    17b0 <tm_world_recur_+0x670>
mov    -0x48(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1728 <tm_world_recur_+0x5e8>
movl   $0x1,-0x8c(%rbp)
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x48(%rbp),%rdx
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x8c(%rbp),%rdi
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
jmp    17ab <tm_world_recur_+0x66b>
mov    -0x98(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x60(%rbp),%rsi
movslq -0x7c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x48(%rbp),%rdx
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
lea    -0x8c(%rbp),%rdi
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
jmp    17b0 <tm_world_recur_+0x670>
jmp    17b5 <tm_world_recur_+0x675>
jmp    1835 <tm_world_recur_+0x6f5>
mov    -0x38(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x48(%rbp),%rdx
mov    -0x50(%rbp),%rcx
mov    -0x58(%rbp),%r8
mov    -0x60(%rbp),%r9
mov    0x10(%rbp),%r13
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15
mov    0x28(%rbp),%r14
mov    0x30(%rbp),%rbx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10
mov    0x48(%rbp),%rax
mov    %r13,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %rbx,0x20(%rsp)
mov    %r11,0x28(%rsp)
mov    %r10,0x30(%rsp)
mov    %rax,0x38(%rsp)
call   1030 <tm_world_recur_@plt>
movsd  %xmm0,-0x70(%rbp)
jmp    1835 <tm_world_recur_+0x6f5>
movsd  0x7e0(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1d12 <tm_world_recur_+0xbd2>
jmp    1849 <tm_world_recur_+0x709>
lea    -0x7c(%rbp),%rdi
mov    $0x0,%al
call   1060 <tm_its_subspan_modulo_int_@plt>
cmp    $0x0,%eax
je     1866 <tm_world_recur_+0x726>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
mov    0x38(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     18a3 <tm_world_recur_+0x763>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cltd
idivl  -0x80(%rbp)
add    $0x1,%edx
mov    %edx,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jg     189e <tm_world_recur_+0x75e>
mov    -0x80(%rbp),%eax
add    -0x74(%rbp),%eax
mov    %eax,-0x74(%rbp)
jmp    1947 <tm_world_recur_+0x807>
mov    -0x80(%rbp),%eax
mov    %eax,-0xd4(%rbp)
mov    -0x38(%rbp),%rcx
mov    $0x1,%eax
cmp    (%rcx),%eax
jge    18ce <tm_world_recur_+0x78e>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xd8(%rbp)
jmp    18de <tm_world_recur_+0x79e>
mov    $0x1,%eax
mov    %eax,-0xd8(%rbp)
jmp    18de <tm_world_recur_+0x79e>
mov    -0xd4(%rbp),%eax
mov    -0xd8(%rbp),%ecx
cmp    %ecx,%eax
jge    1900 <tm_world_recur_+0x7c0>
mov    -0x80(%rbp),%eax
mov    %eax,-0xdc(%rbp)
jmp    193e <tm_world_recur_+0x7fe>
mov    -0x38(%rbp),%rcx
mov    $0x1,%eax
cmp    (%rcx),%eax
jge    1922 <tm_world_recur_+0x7e2>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xe0(%rbp)
jmp    1932 <tm_world_recur_+0x7f2>
mov    $0x1,%eax
mov    %eax,-0xe0(%rbp)
jmp    1932 <tm_world_recur_+0x7f2>
mov    -0xe0(%rbp),%eax
mov    %eax,-0xdc(%rbp)
mov    -0xdc(%rbp),%eax
mov    %eax,-0x74(%rbp)
lea    -0x7c(%rbp),%rdi
mov    $0x0,%al
call   1060 <tm_its_subspan_modulo_int_@plt>
cmp    $0x0,%eax
je     1a5d <tm_world_recur_+0x91d>
mov    -0x74(%rbp),%eax
cmp    -0x80(%rbp),%eax
jne    1a5d <tm_world_recur_+0x91d>
lea    -0x7c(%rbp),%rdi
lea    -0xa8(%rbp),%rsi
lea    -0xb0(%rbp),%rdx
mov    $0x0,%al
call   1050 <tm_ww_axlims_@plt>
mov    -0x48(%rbp),%rax
cmpl   $0x1,(%rax)
jne    199f <tm_world_recur_+0x85f>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
jmp    1a02 <tm_world_recur_+0x8c2>
mov    -0x48(%rbp),%rax
cmpl   $0x2,(%rax)
jne    19e3 <tm_world_recur_+0x8a3>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm1
ff
mov    0x40(%rbp),%rax
movslq -0x7c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
addsd  %xmm1,%xmm0
movsd  0x62b(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    19fd <tm_world_recur_+0x8bd>
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x40(%rbp),%rax
movslq -0x7c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1a02 <tm_world_recur_+0x8c2>
mov    -0x38(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1a24 <tm_world_recur_+0x8e4>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
cltd
idivl  -0x80(%rbp)
sub    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1a34 <tm_world_recur_+0x8f4>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cltd
idivl  -0x80(%rbp)
mov    %eax,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm1
cvtsi2sdl -0x78(%rbp),%xmm0
mov    0x40(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1d08 <tm_world_recur_+0xbc8>
mov    0x48(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1bd1 <tm_world_recur_+0xa91>
mov    0x20(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x74(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    0x28(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x7c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x48(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1aef <tm_world_recur_+0x9af>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0x523(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1b38 <tm_world_recur_+0x9f8>
mov    -0x48(%rbp),%rax
cmpl   $0x2,(%rax)
jne    1b0e <tm_world_recur_+0x9ce>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
jmp    1b33 <tm_world_recur_+0x9f3>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  0x4da(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1b38 <tm_world_recur_+0x9f8>
mov    0x38(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1bc2 <tm_world_recur_+0xa82>
mov    -0x38(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1b6c <tm_world_recur_+0xa2c>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
cltd
idivl  -0x80(%rbp)
sub    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1b7c <tm_world_recur_+0xa3c>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cltd
idivl  -0x80(%rbp)
mov    %eax,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x78(%rbp),%eax
mov    %eax,-0xe4(%rbp)
lea    -0x7c(%rbp),%rdi
mov    $0x0,%al
call   1040 <tm_modulo_axlen_@plt>
movsd  -0xf0(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    -0xe4(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1bcc <tm_world_recur_+0xa8c>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1d03 <tm_world_recur_+0xbc3>
mov    0x30(%rbp),%rax
movslq -0x7c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x1,%eax
add    -0x74(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x74(%rbp)
mov    -0x48(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1c1f <tm_world_recur_+0xadf>
mov    -0x58(%rbp),%rax
mov    -0x74(%rbp),%ecx
mov    0x18(%rbp),%rdx
movslq -0x7c(%rbp),%rsi
add    (%rdx,%rsi,4),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1c6a <tm_world_recur_+0xb2a>
mov    -0x48(%rbp),%rax
cmpl   $0x2,(%rax)
jne    1c43 <tm_world_recur_+0xb03>
mov    -0x58(%rbp),%rax
movslq -0x74(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1c65 <tm_world_recur_+0xb25>
mov    -0x58(%rbp),%rax
mov    -0x74(%rbp),%ecx
mov    0x18(%rbp),%rdx
movslq -0x7c(%rbp),%rsi
add    (%rdx,%rsi,4),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1c6a <tm_world_recur_+0xb2a>
mov    0x38(%rbp),%rax
movslq -0x7c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1cf4 <tm_world_recur_+0xbb4>
mov    -0x38(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1c9e <tm_world_recur_+0xb5e>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
cltd
idivl  -0x80(%rbp)
sub    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1cae <tm_world_recur_+0xb6e>
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cltd
idivl  -0x80(%rbp)
mov    %eax,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x78(%rbp),%eax
mov    %eax,-0xf4(%rbp)
lea    -0x7c(%rbp),%rdi
mov    $0x0,%al
call   1040 <tm_modulo_axlen_@plt>
movsd  -0x100(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    -0xf4(%rbp),%eax
imul   %ecx,%eax
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1cfe <tm_world_recur_+0xbbe>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    1d03 <tm_world_recur_+0xbc3>
jmp    1d08 <tm_world_recur_+0xbc8>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
add    $0x118,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<tm_world_recur_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %rdx,%r12
mov    %rdi,%r14
mov    0xc8(%rsp),%r15
mov    0xc0(%rsp),%r10
mov    0xb0(%rsp),%rbx
mov    0xa8(%rsp),%rdi
mov    0x98(%rsp),%r11
movslq (%rsi),%rdx
mov    %edx,0xc(%rsp)
mov    (%r11,%rdx,4),%ebp
cmp    (%rcx),%edx
jle    122e <tm_world_recur_+0xee>
movslq (%r9,%rdx,4),%rax
test   %rax,%rax
je     122e <tm_world_recur_+0xee>
mov    %rcx,%r13
mov    %r9,0x10(%rsp)
mov    %r12,0x48(%rsp)
mov    0x90(%rsp),%rcx
mov    (%rcx,%rdx,4),%ecx
cmp    $0x2,%ecx
je     13d2 <tm_world_recur_+0x292>
cmp    $0x1,%ecx
jne    1410 <tm_world_recur_+0x2d0>
mov    0xa0(%rsp),%rbp
cvttsd2si 0x0(%rbp,%rdx,8),%r12d
mov    0x10(%rsp),%r9
lea    (%r9,%rdx,4),%rsi
mov    (%r14),%ecx
mov    %rcx,0x28(%rsp)
lea    -0x1(%rcx),%r14d
cvttsd2si (%rdi,%rdx,8),%ecx
imul   %ecx,%r14d
mov    %r12d,0x54(%rsp)
add    %r12d,%r14d
mov    %r14d,0x20(%rsp)
cmpl   $0x0,(%r15,%rdx,4)
je     14a0 <tm_world_recur_+0x360>
mov    %rdi,%rax
lea    0x20(%rsp),%rdi
mov    0x48(%rsp),%rdx
mov    %r13,%rcx
push   %r15
push   %r10
push   0xc8(%rsp)
push   %rbx
push   %rax
push   %rbp
jmp    13f9 <tm_world_recur_+0x2b9>
mov    %r8,0x10(%rsp)
lea    0xc(%rsp),%rdi
xor    %eax,%eax
call   1060 <tm_its_subspan_modulo_int_@plt>
cmp    $0x1,%eax
sbb    $0xffffffff,%ebp
movslq 0xc(%rsp),%rax
mov    0xb8(%rsp),%r13
cmpl   $0x0,0x0(%r13,%rax,4)
mov    (%r14),%eax
je     1272 <tm_world_recur_+0x132>
add    $0xffffffff,%eax
cltd
idiv   %ebp
mov    %edx,%eax
sar    $0x1f,%eax
and    %ebp,%eax
lea    (%rdx,%rax,1),%ebx
add    $0x1,%ebx
jmp    1281 <tm_world_recur_+0x141>
test   %eax,%eax
mov    $0x1,%ebx
cmovg  %eax,%ebx
cmp    %ebx,%ebp
cmovl  %ebp,%ebx
lea    0xc(%rsp),%rdi
xor    %eax,%eax
call   1060 <tm_its_subspan_modulo_int_@plt>
test   %eax,%eax
je     12d4 <tm_world_recur_+0x194>
cmp    %ebp,%ebx
jne    12d4 <tm_world_recur_+0x194>
lea    0xc(%rsp),%rdi
lea    0x20(%rsp),%rsi
lea    0x38(%rsp),%rdx
xor    %eax,%eax
call   1050 <tm_ww_axlims_@plt>
mov    (%r12),%eax
cmp    $0x2,%eax
je     1367 <tm_world_recur_+0x227>
cmp    $0x1,%eax
jne    1390 <tm_world_recur_+0x250>
movsd  0x38(%rsp),%xmm1
mov    0xc0(%rsp),%r15
jmp    13a9 <tm_world_recur_+0x269>
movslq 0xc(%rsp),%rax
cmpl   $0x0,(%r15,%rax,4)
je     1328 <tm_world_recur_+0x1e8>
add    $0xffffffff,%ebx
cvtsi2sd %ebx,%xmm0
mov    0xa8(%rsp),%rcx
movsd  (%rcx,%rax,8),%xmm1
mulsd  %xmm1,%xmm0
mov    0xa0(%rsp),%rcx
addsd  (%rcx,%rax,8),%xmm0
mov    (%r12),%ecx
cmp    $0x2,%ecx
je     1426 <tm_world_recur_+0x2e6>
cmp    $0x1,%ecx
jne    141a <tm_world_recur_+0x2da>
mulsd  0xced(%rip),%xmm1
jmp    1422 <tm_world_recur_+0x2e2>
mov    0xb0(%rsp),%rcx
mov    (%rcx,%rax,4),%edx
lea    (%rbx,%rdx,1),%ecx
add    $0xfffffffe,%ecx
mov    (%r12),%esi
cmp    $0x1,%esi
je     1430 <tm_world_recur_+0x2f0>
cmp    $0x2,%esi
mov    0x98(%rsp),%r15
mov    0x10(%rsp),%r12
je     1441 <tm_world_recur_+0x301>
lea    (%rbx,%rdx,1),%ecx
add    $0xffffffff,%ecx
jmp    143d <tm_world_recur_+0x2fd>
movsd  0x20(%rsp),%xmm1
movslq 0xc(%rsp),%rax
mov    0xc0(%rsp),%r15
addsd  (%r15,%rax,8),%xmm1
addsd  0x38(%rsp),%xmm1
mulsd  0xc7a(%rip),%xmm1
jmp    13a9 <tm_world_recur_+0x269>
movsd  0x20(%rsp),%xmm1
movslq 0xc(%rsp),%rax
mov    0xc0(%rsp),%r15
addsd  (%r15,%rax,8),%xmm1
mov    (%r14),%eax
test   %eax,%eax
jle    13b8 <tm_world_recur_+0x278>
add    $0xffffffff,%eax
cltd
idiv   %ebp
jmp    13be <tm_world_recur_+0x27e>
cltd
idiv   %ebp
add    $0xffffffff,%eax
cvtsi2sd %eax,%xmm0
movslq 0xc(%rsp),%rax
mulsd  (%r15,%rax,8),%xmm0
jmp    148d <tm_world_recur_+0x34d>
mov    %rdi,%rax
mov    %r14,%rdi
mov    0x48(%rsp),%rdx
mov    %r13,%rcx
mov    0x10(%rsp),%r9
push   %r15
push   %r10
push   0xc8(%rsp)
push   %rbx
push   %rax
push   0xc8(%rsp)
push   %r11
push   0xc8(%rsp)
call   1030 <tm_world_recur_@plt>
add    $0x40,%rsp
jmp    1491 <tm_world_recur_+0x351>
movsd  0xbe8(%rip),%xmm0
jmp    1491 <tm_world_recur_+0x351>
mulsd  0xbe6(%rip),%xmm1
addsd  %xmm1,%xmm0
cmpl   $0x0,0x0(%r13,%rax,4)
jne    1452 <tm_world_recur_+0x312>
jmp    1491 <tm_world_recur_+0x351>
mov    0x98(%rsp),%r15
mov    0x10(%rsp),%r12
add    (%r15,%rax,4),%ecx
movslq %ecx,%rcx
movsd  (%r12,%rcx,8),%xmm0
cmpl   $0x0,0x0(%r13,%rax,4)
je     1491 <tm_world_recur_+0x351>
mov    (%r14),%eax
test   %eax,%eax
movsd  %xmm0,0x10(%rsp)
jle    1469 <tm_world_recur_+0x329>
add    $0xffffffff,%eax
cltd
idiv   %ebp
mov    %eax,%ebx
jmp    1471 <tm_world_recur_+0x331>
cltd
idiv   %ebp
mov    %eax,%ebx
add    $0xffffffff,%ebx
lea    0xc(%rsp),%rdi
xor    %eax,%eax
call   1040 <tm_modulo_axlen_@plt>
imul   %ebx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0x10(%rsp),%xmm0
addsd  %xmm1,%xmm0
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %rsi,0x30(%rsp)
mov    0x48(%rsp),%rdx
mov    (%rdx),%edx
cmp    $0x1,%edx
je     14e8 <tm_world_recur_+0x3a8>
cmp    $0x2,%edx
mov    0x10(%rsp),%r9
mov    0x30(%rsp),%rsi
mov    0xa0(%rsp),%rbp
je     120b <tm_world_recur_+0xcb>
mov    %r8,%rbx
mov    %r14d,0x38(%rsp)
mov    0x28(%rsp),%rdx
imul   %ecx,%edx
add    0x54(%rsp),%edx
mov    %r14d,%ebp
mov    %edx,%r14d
jmp    14fe <tm_world_recur_+0x3be>
mov    %r8,%rbx
mov    0x28(%rsp),%rbp
add    $0xfffffffe,%ebp
imul   %ecx,%ebp
add    0x54(%rsp),%ebp
mov    %ebp,0x38(%rsp)
mov    %r14d,0x44(%rsp)
mov    (%r11,%rax,4),%eax
mov    %rax,0x28(%rsp)
mov    0x30(%rsp),%r15
mov    %r15,%rdi
xor    %eax,%eax
call   1060 <tm_its_subspan_modulo_int_@plt>
movslq (%r15),%rcx
mov    0xb8(%rsp),%rdx
mov    (%rdx,%rcx,4),%ecx
test   %ecx,%ecx
je     1563 <tm_world_recur_+0x423>
test   %eax,%eax
je     1563 <tm_world_recur_+0x423>
add    $0x1,%ebp
cmp    $0x1,%ebp
mov    0xc0(%rsp),%r10
mov    0xa0(%rsp),%r11
mov    %rbx,%r15
ja     15ba <tm_world_recur_+0x47a>
movl   $0x1,0x1c(%rsp)
movl   $0x1,0x38(%rsp)
lea    0x38(%rsp),%rdi
jmp    15dd <tm_world_recur_+0x49d>
test   %ecx,%ecx
mov    0xc0(%rsp),%r10
mov    0xa0(%rsp),%r11
mov    %rbx,%r15
jne    161e <tm_world_recur_+0x4de>
test   %ebp,%ebp
jle    158d <tm_world_recur_+0x44d>
cmp    0x28(%rsp),%r14d
jle    161e <tm_world_recur_+0x4de>
mov    0x48(%rsp),%rdx
cmpl   $0x1,(%rdx)
mov    0x98(%rsp),%rax
mov    0x10(%rsp),%r9
mov    0x30(%rsp),%rsi
jne    16e6 <tm_world_recur_+0x5a6>
movl   $0x1,0x20(%rsp)
jmp    16ef <tm_world_recur_+0x5af>
mov    0x28(%rsp),%rax
add    $0x1,%eax
cmp    %eax,%r14d
jne    161e <tm_world_recur_+0x4de>
movl   $0x3,0x1c(%rsp)
mov    0x28(%rsp),%rax
mov    %eax,0x44(%rsp)
lea    0x44(%rsp),%rdi
lea    0x1c(%rsp),%rdx
mov    0x30(%rsp),%rsi
mov    %r13,%rcx
mov    %r15,%r8
mov    0x10(%rsp),%r9
push   0xc8(%rsp)
push   %r10
push   0xc8(%rsp)
push   0xc8(%rsp)
push   0xc8(%rsp)
push   %r11
push   0xc8(%rsp)
jmp    13fb <tm_world_recur_+0x2bb>
movl   $0x2,0x1c(%rsp)
lea    0x38(%rsp),%rdi
lea    0x1c(%rsp),%rdx
mov    0x30(%rsp),%rsi
mov    %r13,%rcx
mov    %r15,%r8
mov    0x10(%rsp),%r9
mov    0xc8(%rsp),%r14
push   %r14
push   %r10
mov    0xc8(%rsp),%rax
push   %rax
mov    0xc8(%rsp),%rbp
push   %rbp
mov    0xc8(%rsp),%r12
mov    0xb0(%rsp),%rbx
push   %r12
push   %r11
mov    0xc8(%rsp),%rax
push   %rax
push   %rbx
mov    %r10,%rbx
call   1030 <tm_world_recur_@plt>
add    $0x40,%rsp
movsd  %xmm0,0x48(%rsp)
lea    0x44(%rsp),%rdi
mov    0x30(%rsp),%rsi
lea    0x1c(%rsp),%rdx
mov    %r13,%rcx
mov    %r15,%r8
mov    0x10(%rsp),%r9
push   %r14
push   %rbx
push   0xc8(%rsp)
push   %rbp
push   %r12
push   0xc8(%rsp)
push   0xc8(%rsp)
push   0xc8(%rsp)
call   1030 <tm_world_recur_@plt>
add    $0x40,%rsp
addsd  0x48(%rsp),%xmm0
mulsd  0x927(%rip),%xmm0
jmp    1491 <tm_world_recur_+0x351>
mov    0x28(%rsp),%rcx
mov    %ecx,0x20(%rsp)
lea    0x20(%rsp),%rdi
mov    %r13,%rcx
mov    %r15,%r8
push   0xc8(%rsp)
push   %r10
push   0xc8(%rsp)
push   0xc8(%rsp)
push   0xc8(%rsp)
push   %r11
push   %rax
jmp    13fb <tm_world_recur_+0x2bb>

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

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