void schreier_sims_step(int *base, int bl, int *GS, int m, int n, int i, int *T,
                        int mm, int *newbase, int *nbl, int **newGS, int *nm,
                        int *num) {
  int c, j, jj, level;
  int *p = (int *)malloc(n * sizeof(int));
  int *ip = (int *)malloc(n * sizeof(int));
  int *pp = (int *)malloc(n * sizeof(int));
  int *ppp = (int *)malloc(n * sizeof(int));
  int *Si = (int *)malloc(m * n * sizeof(int)), Sil;
  int *oldSi = (int *)malloc(m * n * sizeof(int)), oldSil;
  int *Deltai = (int *)malloc(n * sizeof(int)), Deltail;
  int *w = (int *)malloc(n * sizeof(int));
  int *nu = (int *)malloc(n * n * sizeof(int));
  int *oldDeltai = (int *)malloc(n * sizeof(int)), oldDeltail;
  int *oldw = (int *)malloc(n * sizeof(int));
  int *oldnu = (int *)malloc(n * n * sizeof(int));
  int *genset = (int *)malloc(m * n * sizeof(int)), gensetl;
  int gamma, gn, sn;
  int *s = (int *)malloc(n * sizeof(int));
  int *g = (int *)malloc(n * sizeof(int));
  int *stab = (int *)malloc(m * n * sizeof(int)), stabl;
  int *stabps = (int *)malloc(n * sizeof(int)), stabpsl;
  copy_list(base, newbase, bl);
  *nbl = bl;
  copy_list(GS, *newGS, m * n);
  *nm = m;
  stabilizer(base, i - 1, GS, m, n, Si, &Sil);
  complement(Si, Sil, T, mm, n, oldSi, &oldSil);
  one_schreier_orbit(base[i - 1], Si, Sil, n, Deltai, &Deltail, nu, w, 1);
  one_schreier_orbit(base[i - 1], oldSi, oldSil, n, oldDeltai, &oldDeltail,
                     oldnu, oldw, 1);
  for (c = 0; c < n; c++) {
    if (w[c] != oldw[c] && oldw[c] != 0) {
      copy_list(oldnu + c * n, nu + c * n, n);
      w[c] = oldw[c];
    }
  }
  for (gn = 0; gn < Deltail; gn++) {
    gamma = Deltai[gn];
    if (position(gamma, oldDeltai, oldDeltail)) {
      copy_list(T, genset, mm * n);
      gensetl = mm;
    } else {
      copy_list(Si, genset, Sil * n);
      gensetl = Sil;
    }
    for (sn = 0; sn < gensetl; sn++) {
      copy_list(genset + sn * n, s, n);
      (*num)++;
      trace_schreier(gamma, nu, w, p, n);
      trace_schreier(onpoints(gamma, s, n), nu, w, pp, n);
      inverse(pp, ip, n);
      product(p, s, ppp, n);
      product(ppp, ip, g, n);
      stab = (int *)realloc(stab, (*nm) * n * sizeof(int));
      stabilizer(newbase, i, *newGS, *nm, n, stab, &stabl);
      if (!isid(g, n)) {
        if ((stabl == 0) ||
            (!perm_member(g, newbase + i, *nbl - i, stab, stabl, n))) {
          *newGS = (int *)realloc(*newGS, ((*nm) + 1) * n * sizeof(int));
          copy_list(g, (*newGS) + (*nm) * n, n);
          (*nm)++;
          stable_points(g, n, stabps, &stabpsl);
          for (jj = 0; jj < *nbl; jj++) {
            if (!position(newbase[jj], stabps, stabpsl)) {
              j = jj + 1;
              break;
            }
            j = *nbl + 1;
          }
          if (j == *nbl + 1) {
            for (jj = 1; jj <= n; jj++) {
              if (!position(jj, stabps, stabpsl) &&
                  !position(jj, newbase, *nbl)) {
                newbase[*nbl] = jj;
                (*nbl)++;
                break;
              }
            }
          }
          for (level = j; level > i; level--) {
            schreier_sims_step(newbase, *nbl, *newGS, *nm, n, level, g, 1,
                               newbase, nbl, newGS, nm, num);
          }
        }
      }
    }
  }
  free(p);
  free(ip);
  free(pp);
  free(ppp);
  free(Si);
  free(oldSi);
  free(Deltai);
  free(w);
  free(nu);
  free(oldDeltai);
  free(oldw);
  free(oldnu);
  free(genset);
  free(s);
  free(g);
  free(stab);
  free(stabps);
}


x86 assembly (clang, -O0):
<schreier_sims_step>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %rbx
sub    $0x138,%rsp
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x20(%rbp)
mov    %esi,-0x24(%rbp)
mov    %rdx,-0x30(%rbp)
mov    %ecx,-0x34(%rbp)
mov    %r8d,-0x38(%rbp)
mov    %r9d,-0x3c(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x58(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x60(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x68(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x70(%rbp)
mov    -0x34(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x78(%rbp)
mov    -0x34(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x88(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x98(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xa8(%rbp)
mov    -0x38(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xb0(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xb8(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xc8(%rbp)
mov    -0x38(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xd0(%rbp)
mov    -0x34(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xd8(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xf0(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0xf8(%rbp)
mov    -0x34(%rbp),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x100(%rbp)
movslq -0x38(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x110(%rbp)
mov    -0x20(%rbp),%rdi
mov    0x20(%rbp),%rsi
mov    -0x24(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    -0x24(%rbp),%ecx
mov    0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rdi
mov    0x30(%rbp),%rax
mov    (%rax),%rsi
mov    -0x34(%rbp),%edx
imul   -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    -0x34(%rbp),%ecx
mov    0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rdi
mov    -0x3c(%rbp),%esi
sub    $0x1,%esi
mov    -0x30(%rbp),%rdx
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%r8d
mov    -0x78(%rbp),%r9
lea    -0x7c(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   10c0 <stabilizer@plt>
mov    -0x78(%rbp),%rdi
mov    -0x7c(%rbp),%esi
mov    0x10(%rbp),%rdx
mov    0x18(%rbp),%ecx
mov    -0x38(%rbp),%r8d
mov    -0x88(%rbp),%r9
lea    -0x8c(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   1040 <complement@plt>
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edi
mov    -0x78(%rbp),%rsi
mov    -0x7c(%rbp),%edx
mov    -0x38(%rbp),%ecx
mov    -0x98(%rbp),%r8
mov    -0xb0(%rbp),%r10
mov    -0xa8(%rbp),%rax
lea    -0x9c(%rbp),%r9
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
movl   $0x1,0x10(%rsp)
mov    $0x0,%al
call   10d0 <one_schreier_orbit@plt>
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edi
mov    -0x88(%rbp),%rsi
mov    -0x8c(%rbp),%edx
mov    -0x38(%rbp),%ecx
mov    -0xb8(%rbp),%r8
mov    -0xd0(%rbp),%r10
mov    -0xc8(%rbp),%rax
lea    -0xbc(%rbp),%r9
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
movl   $0x1,0x10(%rsp)
mov    $0x0,%al
call   10d0 <one_schreier_orbit@plt>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    158d <schreier_sims_step+0x38d>
mov    -0xa8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0xc8(%rbp),%rcx
movslq -0x40(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     157a <schreier_sims_step+0x37a>
mov    -0xc8(%rbp),%rax
movslq -0x40(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     157a <schreier_sims_step+0x37a>
mov    -0xd0(%rbp),%rdi
mov    -0x40(%rbp),%eax
imul   -0x38(%rbp),%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
mov    -0xb0(%rbp),%rsi
mov    -0x40(%rbp),%eax
imul   -0x38(%rbp),%eax
cltq
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    -0xc8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0xa8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    157f <schreier_sims_step+0x37f>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14e3 <schreier_sims_step+0x2e3>
movl   $0x0,-0xe4(%rbp)
mov    -0xe4(%rbp),%eax
cmp    -0x9c(%rbp),%eax
jge    1a1a <schreier_sims_step+0x81a>
mov    -0x98(%rbp),%rax
movslq -0xe4(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xe0(%rbp)
mov    -0xe0(%rbp),%edi
mov    -0xb8(%rbp),%rsi
mov    -0xbc(%rbp),%edx
mov    $0x0,%al
call   1050 <position@plt>
cmp    $0x0,%eax
je     160a <schreier_sims_step+0x40a>
mov    0x10(%rbp),%rdi
mov    -0xd8(%rbp),%rsi
mov    0x18(%rbp),%edx
imul   -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    0x18(%rbp),%eax
mov    %eax,-0xdc(%rbp)
jmp    162c <schreier_sims_step+0x42c>
mov    -0x78(%rbp),%rdi
mov    -0xd8(%rbp),%rsi
mov    -0x7c(%rbp),%edx
imul   -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    -0x7c(%rbp),%eax
mov    %eax,-0xdc(%rbp)
movl   $0x0,-0xe8(%rbp)
mov    -0xe8(%rbp),%eax
cmp    -0xdc(%rbp),%eax
jge    1a01 <schreier_sims_step+0x801>
mov    -0xd8(%rbp),%rdi
mov    -0xe8(%rbp),%eax
imul   -0x38(%rbp),%eax
cltq
shl    $0x2,%rax
add    %rax,%rdi
mov    -0xf0(%rbp),%rsi
mov    -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    0x40(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0xe0(%rbp),%edi
mov    -0xb0(%rbp),%rsi
mov    -0xa8(%rbp),%rdx
mov    -0x58(%rbp),%rcx
mov    -0x38(%rbp),%r8d
mov    $0x0,%al
call   1060 <trace_schreier@plt>
mov    -0xe0(%rbp),%edi
mov    -0xf0(%rbp),%rsi
mov    -0x38(%rbp),%edx
mov    $0x0,%al
call   1120 <onpoints@plt>
mov    %eax,%edi
mov    -0xb0(%rbp),%rsi
mov    -0xa8(%rbp),%rdx
mov    -0x68(%rbp),%rcx
mov    -0x38(%rbp),%r8d
mov    $0x0,%al
call   1060 <trace_schreier@plt>
mov    -0x68(%rbp),%rdi
mov    -0x60(%rbp),%rsi
mov    -0x38(%rbp),%edx
mov    $0x0,%al
call   1090 <inverse@plt>
mov    -0x58(%rbp),%rdi
mov    -0xf0(%rbp),%rsi
mov    -0x70(%rbp),%rdx
mov    -0x38(%rbp),%ecx
mov    $0x0,%al
call   1080 <product@plt>
mov    -0x70(%rbp),%rdi
mov    -0x60(%rbp),%rsi
mov    -0xf8(%rbp),%rdx
mov    -0x38(%rbp),%ecx
mov    $0x0,%al
call   1080 <product@plt>
mov    -0x100(%rbp),%rdi
mov    0x38(%rbp),%rax
mov    (%rax),%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rsi
shl    $0x2,%rsi
call   10a0 <realloc@plt>
mov    %rax,-0x100(%rbp)
mov    0x20(%rbp),%rdi
mov    -0x3c(%rbp),%esi
mov    0x30(%rbp),%rax
mov    (%rax),%rdx
mov    0x38(%rbp),%rax
mov    (%rax),%ecx
mov    -0x38(%rbp),%r8d
mov    -0x100(%rbp),%r9
lea    -0x104(%rbp),%rax
mov    %rax,(%rsp)
mov    $0x0,%al
call   10c0 <stabilizer@plt>
mov    -0xf8(%rbp),%rdi
mov    -0x38(%rbp),%esi
mov    $0x0,%al
call   10f0 <isid@plt>
cmp    $0x0,%eax
jne    19e8 <schreier_sims_step+0x7e8>
cmpl   $0x0,-0x104(%rbp)
je     17d8 <schreier_sims_step+0x5d8>
mov    -0xf8(%rbp),%rdi
mov    0x20(%rbp),%rsi
movslq -0x3c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rsi
mov    0x28(%rbp),%rax
mov    (%rax),%edx
sub    -0x3c(%rbp),%edx
mov    -0x100(%rbp),%rcx
mov    -0x104(%rbp),%r8d
mov    -0x38(%rbp),%r9d
mov    $0x0,%al
call   10b0 <perm_member@plt>
cmp    $0x0,%eax
jne    19e3 <schreier_sims_step+0x7e3>
mov    0x30(%rbp),%rax
mov    (%rax),%rdi
mov    0x38(%rbp),%rax
mov    (%rax),%eax
add    $0x1,%eax
imul   -0x38(%rbp),%eax
movslq %eax,%rsi
shl    $0x2,%rsi
call   10a0 <realloc@plt>
mov    %rax,%rcx
mov    0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0xf8(%rbp),%rdi
mov    0x30(%rbp),%rax
mov    (%rax),%rsi
mov    0x38(%rbp),%rax
mov    (%rax),%eax
imul   -0x38(%rbp),%eax
cltq
shl    $0x2,%rax
add    %rax,%rsi
mov    -0x38(%rbp),%edx
mov    $0x0,%al
call   10e0 <copy_list@plt>
mov    0x38(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0xf8(%rbp),%rdi
mov    -0x38(%rbp),%esi
mov    -0x110(%rbp),%rdx
lea    -0x114(%rbp),%rcx
mov    $0x0,%al
call   1100 <stable_points@plt>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    0x28(%rbp),%rcx
cmp    (%rcx),%eax
jge    18bd <schreier_sims_step+0x6bd>
mov    0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%edi
mov    -0x110(%rbp),%rsi
mov    -0x114(%rbp),%edx
mov    $0x0,%al
call   1050 <position@plt>
cmp    $0x0,%eax
jne    18a3 <schreier_sims_step+0x6a3>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    18bd <schreier_sims_step+0x6bd>
mov    0x28(%rbp),%rax
mov    (%rax),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    185e <schreier_sims_step+0x65e>
mov    -0x44(%rbp),%eax
mov    0x28(%rbp),%rcx
mov    (%rcx),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    195a <schreier_sims_step+0x75a>
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x38(%rbp),%eax
jg     1955 <schreier_sims_step+0x755>
mov    -0x48(%rbp),%edi
mov    -0x110(%rbp),%rsi
mov    -0x114(%rbp),%edx
mov    $0x0,%al
call   1050 <position@plt>
cmp    $0x0,%eax
jne    1942 <schreier_sims_step+0x742>
mov    -0x48(%rbp),%edi
mov    0x20(%rbp),%rsi
mov    0x28(%rbp),%rax
mov    (%rax),%edx
mov    $0x0,%al
call   1050 <position@plt>
cmp    $0x0,%eax
jne    1942 <schreier_sims_step+0x742>
mov    -0x48(%rbp),%edx
mov    0x20(%rbp),%rax
mov    0x28(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    1955 <schreier_sims_step+0x755>
jmp    1947 <schreier_sims_step+0x747>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    18d8 <schreier_sims_step+0x6d8>
jmp    195a <schreier_sims_step+0x75a>
mov    -0x44(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jle    19de <schreier_sims_step+0x7de>
mov    0x20(%rbp),%rdi
mov    0x28(%rbp),%rax
mov    (%rax),%esi
mov    0x30(%rbp),%rax
mov    (%rax),%rdx
mov    0x38(%rbp),%rax
mov    (%rax),%ecx
mov    -0x38(%rbp),%r8d
mov    -0x4c(%rbp),%r9d
mov    -0xf8(%rbp),%r15
mov    0x20(%rbp),%r14
mov    0x28(%rbp),%rbx
mov    0x30(%rbp),%r11
mov    0x38(%rbp),%r10
mov    0x40(%rbp),%rax
mov    %r15,(%rsp)
movl   $0x1,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %rax,0x30(%rsp)
call   1110 <schreier_sims_step@plt>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
jmp    1960 <schreier_sims_step+0x760>
jmp    19e3 <schreier_sims_step+0x7e3>
jmp    19e8 <schreier_sims_step+0x7e8>
jmp    19ed <schreier_sims_step+0x7ed>
mov    -0xe8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe8(%rbp)
jmp    1636 <schreier_sims_step+0x436>
jmp    1a06 <schreier_sims_step+0x806>
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    1597 <schreier_sims_step+0x397>
mov    -0x58(%rbp),%rdi
call   1030 <free@plt>
mov    -0x60(%rbp),%rdi
call   1030 <free@plt>
mov    -0x68(%rbp),%rdi
call   1030 <free@plt>
mov    -0x70(%rbp),%rdi
call   1030 <free@plt>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
mov    -0x88(%rbp),%rdi
call   1030 <free@plt>
mov    -0x98(%rbp),%rdi
call   1030 <free@plt>
mov    -0xa8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xb0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xb8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xc8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xd0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xd8(%rbp),%rdi
call   1030 <free@plt>
mov    -0xf0(%rbp),%rdi
call   1030 <free@plt>
mov    -0xf8(%rbp),%rdi
call   1030 <free@plt>
mov    -0x100(%rbp),%rdi
call   1030 <free@plt>
mov    -0x110(%rbp),%rdi
call   1030 <free@plt>
add    $0x138,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<schreier_sims_step>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xf8,%rsp
mov    %r9,0x60(%rsp)
mov    %r8d,%ebx
mov    %ecx,%ebp
mov    %ecx,0x10(%rsp)
mov    %rdx,0x30(%rsp)
mov    %esi,0x24(%rsp)
mov    %rdi,0x18(%rsp)
movslq %r8d,%rax
lea    0x0(,%rax,4),%r14
mov    %rax,%r13
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xd8(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xd0(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xc8(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xc0(%rsp)
mov    %ebx,0x8(%rsp)
imul   %ebp,%ebx
movslq %ebx,%r12
lea    0x0(,%r12,4),%r15
mov    %r15,%rdi
call   1070 <malloc@plt>
mov    %rax,0x78(%rsp)
mov    %r15,%rdi
call   1070 <malloc@plt>
mov    %rax,0x70(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0x88(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0x28(%rsp)
mov    %r13d,%ebx
imul   %ebx,%ebx
shl    $0x2,%rbx
mov    %rbx,%rdi
call   1070 <malloc@plt>
mov    %rax,0x48(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0x80(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xa8(%rsp)
mov    %rbx,%rdi
call   1070 <malloc@plt>
mov    %rax,0x68(%rsp)
mov    %r15,%rdi
call   1070 <malloc@plt>
mov    %rax,0x58(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xb8(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0x38(%rsp)
mov    %r15,%rdi
call   1070 <malloc@plt>
mov    %rax,0x90(%rsp)
mov    %r14,%rdi
call   1070 <malloc@plt>
mov    %rax,0xb0(%rsp)
mov    0x18(%rsp),%rbx
mov    %rbx,%rdi
mov    0x140(%rsp),%rsi
mov    0x24(%rsp),%ebp
mov    %ebp,%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
mov    0x148(%rsp),%rax
mov    %ebp,(%rax)
mov    0x150(%rsp),%rax
mov    (%rax),%rsi
mov    0x30(%rsp),%rbp
mov    %rbp,%rdi
mov    %r12d,%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
mov    0x10(%rsp),%ecx
mov    0x158(%rsp),%rax
mov    %ecx,(%rax)
mov    0x60(%rsp),%r12
lea    -0x1(%r12),%esi
sub    $0x8,%rsp
lea    0x14(%rsp),%r10
mov    %rbx,%rdi
mov    %rbp,%rdx
mov    %r13,%r15
mov    %r15d,%r8d
mov    0x80(%rsp),%r13
mov    %r13,%r9
xor    %eax,%eax
push   %r10
call   10c0 <stabilizer@plt>
add    $0x10,%rsp
mov    0xc(%rsp),%esi
sub    $0x8,%rsp
lea    0xac(%rsp),%r10
mov    %r13,%rdi
mov    0x138(%rsp),%rdx
mov    0x140(%rsp),%ecx
mov    %r15d,%r8d
mov    0x78(%rsp),%r9
xor    %eax,%eax
push   %r10
call   1040 <complement@plt>
add    $0x10,%rsp
movslq %r12d,%rbp
mov    -0x4(%rbx,%rbp,4),%edi
mov    0xc(%rsp),%edx
sub    $0x8,%rsp
lea    0x4c(%rsp),%r9
mov    %r13,%rsi
mov    %r15d,%ecx
mov    0x90(%rsp),%r8
xor    %eax,%eax
push   $0x1
push   0x38(%rsp)
push   0x60(%rsp)
call   10d0 <one_schreier_orbit@plt>
add    $0x20,%rsp
mov    %rbp,0x10(%rsp)
mov    -0x4(%rbx,%rbp,4),%edi
mov    0xa4(%rsp),%edx
sub    $0x8,%rsp
lea    0xa8(%rsp),%r9
mov    0x78(%rsp),%rsi
mov    %r15d,%ecx
mov    0x88(%rsp),%r8
xor    %eax,%eax
push   $0x1
mov    0xb8(%rsp),%rbx
push   %rbx
push   0x80(%rsp)
call   10d0 <one_schreier_orbit@plt>
add    $0x20,%rsp
mov    %r15,0x30(%rsp)
test   %r15d,%r15d
jle    1500 <schreier_sims_step+0x300>
mov    %r14,%rbp
mov    %rbx,%r14
mov    0x8(%rsp),%r12d
mov    0x48(%rsp),%r13
mov    0x68(%rsp),%r15
xor    %ebx,%ebx
jmp    14cf <schreier_sims_step+0x2cf>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rbx
add    %rbp,%r15
add    %rbp,%r13
cmp    %rbx,%r12
je     1500 <schreier_sims_step+0x300>
mov    (%r14,%rbx,4),%eax
mov    0x28(%rsp),%rcx
cmp    %eax,(%rcx,%rbx,4)
je     14c0 <schreier_sims_step+0x2c0>
test   %eax,%eax
je     14c0 <schreier_sims_step+0x2c0>
mov    %r15,%rdi
mov    %r13,%rsi
mov    0x8(%rsp),%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
mov    (%r14,%rbx,4),%eax
mov    0x28(%rsp),%rcx
mov    %eax,(%rcx,%rbx,4)
jmp    14c0 <schreier_sims_step+0x2c0>
cmpl   $0x0,0x44(%rsp)
jle    19a6 <schreier_sims_step+0x7a6>
mov    0x160(%rsp),%rbx
mov    0x138(%rsp),%eax
mov    0x8(%rsp),%ecx
imul   %ecx,%eax
mov    %eax,0x98(%rsp)
mov    0x140(%rsp),%rax
mov    0x10(%rsp),%rsi
lea    (%rax,%rsi,4),%rsi
mov    %rsi,0xe8(%rsp)
mov    %ecx,%eax
neg    %eax
mov    %rax,0xe0(%rsp)
xor    %r15d,%r15d
mov    0x38(%rsp),%r12
jmp    1572 <schreier_sims_step+0x372>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r15
movslq 0x44(%rsp),%rax
cmp    %rax,%r15
jge    19ab <schreier_sims_step+0x7ab>
mov    0x88(%rsp),%rax
mov    (%rax,%r15,4),%edi
mov    0xa0(%rsp),%edx
mov    %edi,0x24(%rsp)
mov    0x80(%rsp),%rsi
xor    %eax,%eax
call   1050 <position@plt>
test   %eax,%eax
je     15d0 <schreier_sims_step+0x3d0>
mov    0x130(%rsp),%rdi
mov    0x58(%rsp),%rsi
mov    0x98(%rsp),%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
mov    0x138(%rsp),%eax
test   %eax,%eax
jg     15f6 <schreier_sims_step+0x3f6>
jmp    1560 <schreier_sims_step+0x360>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0xc(%rsp),%edx
imul   0x8(%rsp),%edx
mov    0x78(%rsp),%rdi
mov    0x58(%rsp),%rsi
xor    %eax,%eax
call   10e0 <copy_list@plt>
mov    0xc(%rsp),%eax
test   %eax,%eax
jle    1560 <schreier_sims_step+0x360>
mov    %eax,%eax
mov    %rax,0xf0(%rsp)
xor    %eax,%eax
mov    %r15,0x50(%rsp)
jmp    1639 <schreier_sims_step+0x439>
nopl   0x0(%rax)
mov    0x160(%rsp),%rbx
mov    0x50(%rsp),%r15
mov    0x18(%rsp),%rbp
mov    0x10(%rsp),%rax
add    $0x1,%rax
cmp    0xf0(%rsp),%rax
je     1560 <schreier_sims_step+0x360>
mov    %rbp,0x18(%rsp)
mov    %rax,0x10(%rsp)
imul   0x30(%rsp),%rax
mov    0x58(%rsp),%rcx
lea    (%rcx,%rax,4),%rdi
mov    0xb8(%rsp),%r15
mov    %r15,%rsi
mov    0x8(%rsp),%r13d
mov    %r13d,%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
addl   $0x1,(%rbx)
mov    0x24(%rsp),%ebx
mov    %ebx,%edi
mov    0x48(%rsp),%rbp
mov    %rbp,%rsi
mov    0x28(%rsp),%r12
mov    %r12,%rdx
mov    0xd8(%rsp),%r14
mov    %r14,%rcx
mov    %r13d,%r8d
xor    %eax,%eax
call   1060 <trace_schreier@plt>
mov    %ebx,%edi
mov    %r15,%rsi
mov    %r13d,%edx
xor    %eax,%eax
call   1120 <onpoints@plt>
mov    %eax,%edi
mov    %rbp,%rsi
mov    %r12,%rdx
mov    0xc8(%rsp),%rbx
mov    %rbx,%rcx
mov    %r13d,%r8d
xor    %eax,%eax
call   1060 <trace_schreier@plt>
mov    %rbx,%rdi
mov    0xd0(%rsp),%r12
mov    %r12,%rsi
mov    %r13d,%edx
xor    %eax,%eax
call   1090 <inverse@plt>
mov    %r14,%rdi
mov    %r15,%rsi
mov    0xc0(%rsp),%rbx
mov    %rbx,%rdx
mov    %r13d,%ecx
xor    %eax,%eax
call   1080 <product@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
mov    0x38(%rsp),%r12
mov    %r12,%rdx
mov    %r13d,%ecx
xor    %eax,%eax
call   1080 <product@plt>
mov    0x158(%rsp),%rbp
movslq 0x0(%rbp),%rsi
imul   0x30(%rsp),%rsi
shl    $0x2,%rsi
mov    0x90(%rsp),%rdi
call   10a0 <realloc@plt>
mov    %rax,%rbx
mov    0x150(%rsp),%rax
mov    (%rax),%rdx
mov    0x0(%rbp),%ecx
sub    $0x8,%rsp
mov    0x148(%rsp),%r14
mov    %r14,%rdi
mov    0x68(%rsp),%rsi
mov    %r13d,%r8d
mov    %rbx,%r9
xor    %eax,%eax
lea    0xa4(%rsp),%rbp
push   %rbp
call   10c0 <stabilizer@plt>
add    $0x10,%rsp
mov    %r12,%rdi
mov    %r13d,%esi
xor    %eax,%eax
call   10f0 <isid@plt>
test   %eax,%eax
mov    %rbx,0x90(%rsp)
jne    1610 <schreier_sims_step+0x410>
mov    0x9c(%rsp),%r8d
test   %r8d,%r8d
mov    0x148(%rsp),%r15
je     17ce <schreier_sims_step+0x5ce>
mov    (%r15),%edx
sub    0x60(%rsp),%edx
mov    %r12,%rdi
mov    0xe8(%rsp),%rsi
mov    %rbx,%rcx
mov    0x8(%rsp),%r9d
xor    %eax,%eax
call   10b0 <perm_member@plt>
test   %eax,%eax
jne    1610 <schreier_sims_step+0x410>
mov    0x150(%rsp),%r13
mov    0x0(%r13),%rdi
mov    0x158(%rsp),%rbp
movslq 0x0(%rbp),%rsi
add    $0x1,%rsi
mov    0x30(%rsp),%rbx
imul   %rbx,%rsi
shl    $0x2,%rsi
call   10a0 <realloc@plt>
mov    %rax,0x0(%r13)
movslq 0x0(%rbp),%rcx
imul   %rbx,%rcx
lea    (%rax,%rcx,4),%rsi
mov    %r12,%rdi
mov    0x8(%rsp),%ebx
mov    %ebx,%edx
xor    %eax,%eax
call   10e0 <copy_list@plt>
addl   $0x1,0x0(%rbp)
mov    %r12,%rdi
mov    %ebx,%esi
mov    0xb0(%rsp),%rbx
mov    %rbx,%rdx
lea    0x40(%rsp),%rcx
xor    %eax,%eax
call   1100 <stable_points@plt>
mov    (%r15),%eax
test   %eax,%eax
mov    0xe0(%rsp),%r13
mov    0x18(%rsp),%rbp
jle    188d <schreier_sims_step+0x68d>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%r14,%rbp,4),%edi
mov    0x40(%rsp),%edx
mov    %rbx,%rsi
xor    %eax,%eax
call   1050 <position@plt>
test   %eax,%eax
je     1887 <schreier_sims_step+0x687>
movslq (%r15),%rax
add    $0x1,%rbp
cmp    %rax,%rbp
jl     1860 <schreier_sims_step+0x660>
lea    0x1(%rax),%ebp
jmp    188d <schreier_sims_step+0x68d>
add    $0x1,%ebp
mov    (%r15),%eax
add    $0x1,%eax
cmp    %eax,%ebp
jne    1910 <schreier_sims_step+0x710>
cmpl   $0x0,0x8(%rsp)
jle    1910 <schreier_sims_step+0x710>
mov    $0x1,%r15d
jmp    18c5 <schreier_sims_step+0x6c5>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    (%r15,%r13,1),%eax
add    $0x1,%eax
mov    %r15d,%ecx
add    $0x1,%ecx
mov    %ecx,%r15d
cmp    $0x1,%eax
je     1910 <schreier_sims_step+0x710>
mov    0x40(%rsp),%edx
mov    %r15d,%edi
mov    %rbx,%rsi
xor    %eax,%eax
call   1050 <position@plt>
test   %eax,%eax
jne    18b0 <schreier_sims_step+0x6b0>
mov    0x148(%rsp),%rax
mov    (%rax),%edx
mov    %r15d,%edi
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <position@plt>
test   %eax,%eax
jne    18b0 <schreier_sims_step+0x6b0>
mov    0x148(%rsp),%rcx
movslq (%rcx),%rax
mov    %r15d,(%r14,%rax,4)
addl   $0x1,(%rcx)
nopw   0x0(%rax,%rax,1)
mov    %r12,%rcx
mov    0x60(%rsp),%r12
cmp    %r12d,%ebp
jle    198c <schreier_sims_step+0x78c>
mov    0x150(%rsp),%r15
mov    0x158(%rsp),%r13
mov    %rbp,0x18(%rsp)
mov    %ebp,%ebx
mov    0x160(%rsp),%rbp
nopl   0x0(%rax)
mov    0x148(%rsp),%rax
mov    (%rax),%esi
mov    (%r15),%rdx
mov    0x0(%r13),%ecx
sub    $0x8,%rsp
mov    %r14,%rdi
mov    0x10(%rsp),%r8d
mov    %ebx,%r9d
push   %rbp
push   %r13
push   %r15
push   %rax
push   %r14
push   $0x1
push   0x70(%rsp)
call   1110 <schreier_sims_step@plt>
add    $0x40,%rsp
add    $0xffffffff,%ebx
cmp    %r12d,%ebx
jg     1940 <schreier_sims_step+0x740>
mov    0x38(%rsp),%r12
mov    %rbp,%rbx
jmp    1618 <schreier_sims_step+0x418>
mov    0x160(%rsp),%rbx
mov    0x50(%rsp),%r15
mov    0x10(%rsp),%rax
mov    %rcx,%r12
jmp    1627 <schreier_sims_step+0x427>
mov    0x38(%rsp),%r12
mov    0xd8(%rsp),%rdi
call   1030 <free@plt>
mov    0xd0(%rsp),%rdi
call   1030 <free@plt>
mov    0xc8(%rsp),%rdi
call   1030 <free@plt>
mov    0xc0(%rsp),%rdi
call   1030 <free@plt>
mov    0x78(%rsp),%rdi
call   1030 <free@plt>
mov    0x70(%rsp),%rdi
call   1030 <free@plt>
mov    0x88(%rsp),%rdi
call   1030 <free@plt>
mov    0x28(%rsp),%rdi
call   1030 <free@plt>
mov    0x48(%rsp),%rdi
call   1030 <free@plt>
mov    0x80(%rsp),%rdi
call   1030 <free@plt>
mov    0xa8(%rsp),%rdi
call   1030 <free@plt>
mov    0x68(%rsp),%rdi
call   1030 <free@plt>
mov    0x58(%rsp),%rdi
call   1030 <free@plt>
mov    0xb8(%rsp),%rdi
call   1030 <free@plt>
mov    %r12,%rdi
call   1030 <free@plt>
mov    0x90(%rsp),%rdi
call   1030 <free@plt>
mov    0xb0(%rsp),%rdi
call   1030 <free@plt>
add    $0xf8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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