#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ follow_slice_link(int *, int *, int *);
int /*<<< orphan*/ vis5d_get_ctx_numvars(int, int *);
int /*<<< orphan*/ vis5d_get_slice_link(int, int, int, int **, int **, int **);
int vis5d_link_slices(int vindex1, int type1, int number1, int vindex2,
                      int type2, int number2) {
  int numvar, numh, numv, nmax;
  int cur_type, cur_num, end1_type, end1_num, end2_type, end2_num;
  int *p_type, *p_num, *p_vindex, cur_vindex, end1_vindex, end2_vindex;
  if ((vindex1 == vindex2) && (type1 == type2) && (number1 == number2))
    return -4;
  vis5d_get_ctx_numvars(vindex1, &numvar);
  numh = numv = 0;
  switch (type1) {
  case 1:
  case 3:
    nmax = numvar;
    numh++;
    break;
  case 2:
  case 4:
    nmax = numvar;
    numv++;
    break;
  case 6:
  case 8:
    nmax = 2;
    numh++;
    break;
  case 7:
  case 9:
    nmax = 2;
    numv++;
    break;
  default:
    return -2;
  }
  if ((number1 < 0) || (number1 >= nmax))
    return -5;
  vis5d_get_ctx_numvars(vindex2, &numvar);
  switch (type2) {
  case 1:
  case 3:
    nmax = numvar;
    numh++;
    break;
  case 2:
  case 4:
    nmax = numvar;
    numv++;
    break;
  case 6:
  case 8:
    nmax = 2;
    numh++;
    break;
  case 7:
  case 9:
    nmax = 2;
    numv++;
    break;
  default:
    return -2;
  }
  if ((number2 < 0) || (number2 >= nmax))
    return -5;
  if ((numh != 2) && (numv != 2))
    return -4;
  end1_type = type1;
  end1_num = number1;
  end1_vindex = vindex1;
  cur_type = type1;
  cur_num = number1;
  cur_vindex = vindex1;
  while (follow_slice_link(&cur_vindex, &cur_type, &cur_num)) {
    if ((cur_type == type1) && (cur_num == number1) &&
        (cur_vindex == vindex1)) {
      break;
    }
    if ((cur_type == type2) && (cur_num == number2) && (cur_vindex = vindex2)) {
      return 1;
    }
    end1_type = cur_type;
    end1_num = cur_num;
    end1_vindex = cur_vindex;
  }
  end2_type = type2;
  end2_num = number2;
  end2_vindex = vindex2;
  cur_type = type2;
  cur_num = number2;
  cur_vindex = vindex2;
  while (follow_slice_link(&cur_vindex, &cur_type, &cur_num)) {
    if ((cur_type == type2) && (cur_num == number2) &&
        (cur_vindex == vindex2)) {
      break;
    }
    if ((cur_type == type1) && (cur_num == number1) && (cur_vindex = vindex1)) {
      return 1;
    }
    end2_type = cur_type;
    end2_num = cur_num;
    end2_vindex = cur_vindex;
  }
  vis5d_get_slice_link(end1_vindex, end1_type, end1_num, &p_vindex, &p_type,
                       &p_num);
  *p_type = type2;
  *p_num = number2;
  *p_vindex = vindex2;
  vis5d_get_slice_link(end2_vindex, end2_type, end2_num, &p_vindex, &p_type,
                       &p_num);
  *p_type = type1;
  *p_num = number1;
  *p_vindex = vindex1;
  return 0;
}


x86 assembly (clang, -O0):
<vis5d_link_slices>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    117f <vis5d_link_slices+0x4f>
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    117f <vis5d_link_slices+0x4f>
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    117f <vis5d_link_slices+0x4f>
movl   $0xfffffffc,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
mov    -0x8(%rbp),%edi
lea    -0x20(%rbp),%rsi
call   1030 <vis5d_get_ctx_numvars@plt>
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x78(%rbp)
sub    $0x8,%eax
ja     1214 <vis5d_link_slices+0xe4>
mov    -0x78(%rbp),%rax
lea    0xe47(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1220 <vis5d_link_slices+0xf0>
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1220 <vis5d_link_slices+0xf0>
movl   $0x2,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1220 <vis5d_link_slices+0xf0>
movl   $0x2,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1220 <vis5d_link_slices+0xf0>
movl   $0xfffffffe,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
cmpl   $0x0,-0x10(%rbp)
jl     1236 <vis5d_link_slices+0x106>
mov    -0x10(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jl     1242 <vis5d_link_slices+0x112>
movl   $0xfffffffb,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
mov    -0x14(%rbp),%edi
lea    -0x20(%rbp),%rsi
call   1030 <vis5d_get_ctx_numvars@plt>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x80(%rbp)
sub    $0x8,%eax
ja     12c9 <vis5d_link_slices+0x199>
mov    -0x80(%rbp),%rax
lea    0xdb6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12d5 <vis5d_link_slices+0x1a5>
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12d5 <vis5d_link_slices+0x1a5>
movl   $0x2,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12d5 <vis5d_link_slices+0x1a5>
movl   $0x2,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12d5 <vis5d_link_slices+0x1a5>
movl   $0xfffffffe,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
cmpl   $0x0,-0x1c(%rbp)
jl     12eb <vis5d_link_slices+0x1bb>
mov    -0x1c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jl     12f7 <vis5d_link_slices+0x1c7>
movl   $0xfffffffb,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
cmpl   $0x2,-0x24(%rbp)
je     1317 <vis5d_link_slices+0x1e7>
cmpl   $0x2,-0x28(%rbp)
je     1317 <vis5d_link_slices+0x1e7>
movl   $0xfffffffc,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
mov    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x64(%rbp)
lea    -0x64(%rbp),%rdi
lea    -0x30(%rbp),%rsi
lea    -0x34(%rbp),%rdx
call   1050 <follow_slice_link@plt>
cmp    $0x0,%rax
je     13c9 <vis5d_link_slices+0x299>
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    137f <vis5d_link_slices+0x24f>
mov    -0x34(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    137f <vis5d_link_slices+0x24f>
mov    -0x64(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    137f <vis5d_link_slices+0x24f>
jmp    13c9 <vis5d_link_slices+0x299>
mov    -0x30(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    13b2 <vis5d_link_slices+0x282>
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    13b2 <vis5d_link_slices+0x282>
mov    -0x14(%rbp),%eax
mov    %eax,-0x64(%rbp)
cmp    $0x0,%eax
je     13b2 <vis5d_link_slices+0x282>
movl   $0x1,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
mov    -0x30(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x68(%rbp)
jmp    133b <vis5d_link_slices+0x20b>
mov    -0x18(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x64(%rbp)
lea    -0x64(%rbp),%rdi
lea    -0x30(%rbp),%rsi
lea    -0x34(%rbp),%rdx
call   1050 <follow_slice_link@plt>
cmp    $0x0,%rax
je     147b <vis5d_link_slices+0x34b>
mov    -0x30(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    1431 <vis5d_link_slices+0x301>
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    1431 <vis5d_link_slices+0x301>
mov    -0x64(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1431 <vis5d_link_slices+0x301>
jmp    147b <vis5d_link_slices+0x34b>
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    1464 <vis5d_link_slices+0x334>
mov    -0x34(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    1464 <vis5d_link_slices+0x334>
mov    -0x8(%rbp),%eax
mov    %eax,-0x64(%rbp)
cmp    $0x0,%eax
je     1464 <vis5d_link_slices+0x334>
movl   $0x1,-0x4(%rbp)
jmp    14ec <vis5d_link_slices+0x3bc>
mov    -0x30(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x6c(%rbp)
jmp    13ed <vis5d_link_slices+0x2bd>
mov    -0x68(%rbp),%edi
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
lea    -0x60(%rbp),%rcx
lea    -0x50(%rbp),%r8
lea    -0x58(%rbp),%r9
call   1040 <vis5d_get_slice_link@plt>
mov    -0x18(%rbp),%ecx
mov    -0x50(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x1c(%rbp),%ecx
mov    -0x58(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x60(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x6c(%rbp),%edi
mov    -0x40(%rbp),%esi
mov    -0x44(%rbp),%edx
lea    -0x60(%rbp),%rcx
lea    -0x50(%rbp),%r8
lea    -0x58(%rbp),%r9
call   1040 <vis5d_get_slice_link@plt>
mov    -0xc(%rbp),%ecx
mov    -0x50(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%ecx
mov    -0x58(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%ecx
mov    -0x60(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<vis5d_link_slices>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9d,%r13d
mov    %ecx,%r15d
mov    %edx,%r14d
mov    %esi,%ebp
mov    %edi,%ebx
mov    $0xfffffffc,%r12d
cmp    %ecx,%edi
jne    1163 <vis5d_link_slices+0x33>
cmp    %r8d,%ebp
jne    1163 <vis5d_link_slices+0x33>
cmp    %r13d,%r14d
je     121b <vis5d_link_slices+0xeb>
mov    %r8,0x20(%rsp)
lea    0x1c(%rsp),%rsi
mov    %ebx,%edi
call   1030 <vis5d_get_ctx_numvars@plt>
mov    $0xfffffffe,%r12d
lea    -0x1(%rbp),%ecx
cmp    $0x8,%ecx
ja     121b <vis5d_link_slices+0xeb>
mov    %r13d,0x18(%rsp)
mov    %r15d,0x14(%rsp)
mov    $0x2,%eax
xor    %r13d,%r13d
mov    $0x1,%r15d
lea    0xe5b(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    0x1c(%rsp),%eax
test   %r14d,%r14d
jns    11db <vis5d_link_slices+0xab>
jmp    1215 <vis5d_link_slices+0xe5>
mov    $0x1,%r13d
xor    %r15d,%r15d
mov    0x1c(%rsp),%eax
test   %r14d,%r14d
jns    11db <vis5d_link_slices+0xab>
jmp    1215 <vis5d_link_slices+0xe5>
mov    $0x1,%r13d
xor    %r15d,%r15d
test   %r14d,%r14d
js     1215 <vis5d_link_slices+0xe5>
cmp    %r14d,%eax
jle    1215 <vis5d_link_slices+0xe5>
lea    0x1c(%rsp),%rsi
mov    0x14(%rsp),%edi
call   1030 <vis5d_get_ctx_numvars@plt>
mov    0x20(%rsp),%rax
add    $0xffffffff,%eax
cmp    $0x8,%eax
ja     121b <vis5d_link_slices+0xeb>
lea    0xe22(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    0x1c(%rsp),%eax
add    $0x1,%r15d
jmp    1246 <vis5d_link_slices+0x116>
mov    $0xfffffffb,%r12d
mov    %r12d,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x1c(%rsp),%eax
add    $0x1,%r13d
jmp    1246 <vis5d_link_slices+0x116>
add    $0x1,%r15d
jmp    1241 <vis5d_link_slices+0x111>
add    $0x1,%r13d
mov    $0x2,%eax
mov    0x18(%rsp),%ecx
mov    $0xfffffffb,%r12d
test   %ecx,%ecx
js     121b <vis5d_link_slices+0xeb>
cmp    %ecx,%eax
jle    121b <vis5d_link_slices+0xeb>
cmp    $0x2,%r15d
je     126a <vis5d_link_slices+0x13a>
mov    $0xfffffffc,%r12d
cmp    $0x2,%r13d
jne    121b <vis5d_link_slices+0xeb>
mov    %ebp,0x10(%rsp)
mov    %r14d,0xc(%rsp)
mov    %ebx,%r12d
mov    %ebx,0x8(%rsp)
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
lea    0xc(%rsp),%rdx
call   1050 <follow_slice_link@plt>
mov    %rbp,0x28(%rsp)
mov    %ebp,%ebx
mov    %r14d,%ebp
mov    %r12d,%r15d
test   %rax,%rax
mov    0x18(%rsp),%r13d
je     132e <vis5d_link_slices+0x1fe>
mov    0x10(%rsp),%ecx
mov    0xc(%rsp),%edx
mov    0x8(%rsp),%eax
cmp    0x28(%rsp),%ecx
jne    12d0 <vis5d_link_slices+0x1a0>
cmp    %r14d,%edx
jne    12d0 <vis5d_link_slices+0x1a0>
mov    0x28(%rsp),%rsi
mov    %esi,%ebx
mov    %r14d,%ebp
mov    %r12d,%r15d
jmp    1329 <vis5d_link_slices+0x1f9>
nop
mov    %ecx,%ebx
cmp    0x20(%rsp),%ecx
jne    12f4 <vis5d_link_slices+0x1c4>
mov    %eax,%r15d
cmp    %r13d,%edx
jne    12f7 <vis5d_link_slices+0x1c7>
xor    %r15d,%r15d
mov    0x14(%rsp),%eax
mov    %eax,0x8(%rsp)
test   %eax,%eax
je     12f7 <vis5d_link_slices+0x1c7>
jmp    1481 <vis5d_link_slices+0x351>
mov    %eax,%r15d
mov    %edx,%ebp
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
lea    0xc(%rsp),%rdx
call   1050 <follow_slice_link@plt>
test   %rax,%rax
je     132e <vis5d_link_slices+0x1fe>
mov    0x10(%rsp),%ecx
mov    0xc(%rsp),%edx
mov    0x8(%rsp),%eax
cmp    0x28(%rsp),%ecx
jne    12d0 <vis5d_link_slices+0x1a0>
cmp    %r14d,%edx
jne    12d0 <vis5d_link_slices+0x1a0>
cmp    %r12d,%eax
jne    12d0 <vis5d_link_slices+0x1a0>
mov    %ebx,0x44(%rsp)
mov    %r12d,0x34(%rsp)
mov    0x20(%rsp),%rbx
mov    %ebx,0x10(%rsp)
mov    %r13d,0xc(%rsp)
mov    0x14(%rsp),%r12d
mov    %r12d,0x8(%rsp)
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
lea    0xc(%rsp),%rdx
call   1050 <follow_slice_link@plt>
test   %rax,%rax
je     13fd <vis5d_link_slices+0x2cd>
mov    0x10(%rsp),%ecx
mov    0xc(%rsp),%edx
mov    0x8(%rsp),%eax
cmp    0x20(%rsp),%ecx
jne    13ba <vis5d_link_slices+0x28a>
mov    0x18(%rsp),%r13d
cmp    %r13d,%edx
jne    13ba <vis5d_link_slices+0x28a>
mov    0x20(%rsp),%rsi
mov    %esi,%ebx
mov    0x14(%rsp),%esi
mov    %esi,%r12d
cmp    %esi,%eax
je     13fd <vis5d_link_slices+0x2cd>
jmp    13ba <vis5d_link_slices+0x28a>
mov    0x10(%rsp),%ecx
mov    0xc(%rsp),%edx
mov    0x8(%rsp),%eax
cmp    0x20(%rsp),%ecx
jne    13ba <vis5d_link_slices+0x28a>
cmp    0x18(%rsp),%edx
jne    13ba <vis5d_link_slices+0x28a>
cmp    0x14(%rsp),%eax
je     13fd <vis5d_link_slices+0x2cd>
cmp    0x28(%rsp),%ecx
jne    13dc <vis5d_link_slices+0x2ac>
mov    %eax,%r12d
cmp    %r14d,%edx
jne    13df <vis5d_link_slices+0x2af>
xor    %r12d,%r12d
mov    0x34(%rsp),%eax
mov    %eax,0x8(%rsp)
test   %eax,%eax
je     13df <vis5d_link_slices+0x2af>
jmp    1481 <vis5d_link_slices+0x351>
mov    %eax,%r12d
mov    %edx,%r13d
mov    %ecx,%ebx
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
lea    0xc(%rsp),%rdx
call   1050 <follow_slice_link@plt>
test   %rax,%rax
jne    139c <vis5d_link_slices+0x26c>
lea    0x48(%rsp),%rcx
lea    0x50(%rsp),%r8
lea    0x38(%rsp),%r9
mov    %r15d,%edi
mov    0x44(%rsp),%esi
mov    %ebp,%edx
mov    %rcx,%rbp
mov    %r8,%r15
call   1040 <vis5d_get_slice_link@plt>
mov    0x50(%rsp),%rax
mov    0x20(%rsp),%rcx
mov    %ecx,(%rax)
mov    0x38(%rsp),%rax
mov    0x18(%rsp),%ecx
mov    %ecx,(%rax)
mov    0x48(%rsp),%rax
mov    0x14(%rsp),%ecx
mov    %ecx,(%rax)
mov    %r12d,%edi
mov    %ebx,%esi
mov    %r13d,%edx
mov    %rbp,%rcx
mov    %r15,%r8
lea    0x38(%rsp),%r9
call   1040 <vis5d_get_slice_link@plt>
mov    0x50(%rsp),%rax
mov    0x28(%rsp),%rcx
mov    %ecx,(%rax)
mov    0x38(%rsp),%rax
mov    %r14d,(%rax)
mov    0x48(%rsp),%rax
mov    0x34(%rsp),%ecx
mov    %ecx,(%rax)
xor    %r12d,%r12d
jmp    121b <vis5d_link_slices+0xeb>
mov    $0x1,%r12d
jmp    121b <vis5d_link_slices+0xeb>

LLVM IR (-O0):
define i32 @vis5d_link_slices(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%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
store i32 %0, i32* %8
store i32 %1, i32* %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
%30 = load i32, i32* %8
%31 = load i32, i32* %11
%32 = icmp eq i32 %30, %31
br i1 %32, label %33, label %42
33: ; preds = %6
%34 = load i32, i32* %9
%35 = load i32, i32* %12
%36 = icmp eq i32 %34, %35
br i1 %36, label %37, label %42
37: ; preds = %33
%38 = load i32, i32* %10
%39 = load i32, i32* %13
%40 = icmp eq i32 %38, %39
br i1 %40, label %41, label %42
41: ; preds = %37
store i32 -4, i32* %7
br label %202
42: ; preds = %37, %33, %6
%43 = load i32, i32* %8
%44 = call i32 @vis5d_get_ctx_numvars(i32 %43, i32* %14)
store i32 0, i32* %16
store i32 0, i32* %15
%45 = load i32, i32* %9
switch i32 %45, label %60 [
i32 1, label %46
i32 3, label %46
i32 2, label %50
i32 4, label %50
i32 6, label %54
i32 8, label %54
i32 7, label %57
i32 9, label %57
]
46: ; preds = %42, %42
%47 = load i32, i32* %14
store i32 %47, i32* %17
%48 = load i32, i32* %15
%49 = add nsw i32 %48, 1
store i32 %49, i32* %15
br label %61
50: ; preds = %42, %42
%51 = load i32, i32* %14
store i32 %51, i32* %17
%52 = load i32, i32* %16
%53 = add nsw i32 %52, 1
store i32 %53, i32* %16
br label %61
54: ; preds = %42, %42
store i32 2, i32* %17
%55 = load i32, i32* %15
%56 = add nsw i32 %55, 1
store i32 %56, i32* %15
br label %61
57: ; preds = %42, %42
store i32 2, i32* %17
%58 = load i32, i32* %16
%59 = add nsw i32 %58, 1
store i32 %59, i32* %16
br label %61
60: ; preds = %42
store i32 -2, i32* %7
br label %202
61: ; preds = %57, %54, %50, %46
%62 = load i32, i32* %10
%63 = icmp slt i32 %62, 0
br i1 %63, label %68, label %64
64: ; preds = %61
%65 = load i32, i32* %10
%66 = load i32, i32* %17
%67 = icmp sge i32 %65, %66
br i1 %67, label %68, label %69
68: ; preds = %64, %61
store i32 -5, i32* %7
br label %202
69: ; preds = %64
%70 = load i32, i32* %11
%71 = call i32 @vis5d_get_ctx_numvars(i32 %70, i32* %14)
%72 = load i32, i32* %12
switch i32 %72, label %87 [
i32 1, label %73
i32 3, label %73
i32 2, label %77
i32 4, label %77
i32 6, label %81
i32 8, label %81
i32 7, label %84
i32 9, label %84
]
73: ; preds = %69, %69
%74 = load i32, i32* %14
store i32 %74, i32* %17
%75 = load i32, i32* %15
%76 = add nsw i32 %75, 1
store i32 %76, i32* %15
br label %88
77: ; preds = %69, %69
%78 = load i32, i32* %14
store i32 %78, i32* %17
%79 = load i32, i32* %16
%80 = add nsw i32 %79, 1
store i32 %80, i32* %16
br label %88
81: ; preds = %69, %69
store i32 2, i32* %17
%82 = load i32, i32* %15
%83 = add nsw i32 %82, 1
store i32 %83, i32* %15
br label %88
84: ; preds = %69, %69
store i32 2, i32* %17
%85 = load i32, i32* %16
%86 = add nsw i32 %85, 1
store i32 %86, i32* %16
br label %88
87: ; preds = %69
store i32 -2, i32* %7
br label %202
88: ; preds = %84, %81, %77, %73
%89 = load i32, i32* %13
%90 = icmp slt i32 %89, 0
br i1 %90, label %95, label %91
91: ; preds = %88
%92 = load i32, i32* %13
%93 = load i32, i32* %17
%94 = icmp sge i32 %92, %93
br i1 %94, label %95, label %96
95: ; preds = %91, %88
store i32 -5, i32* %7
br label %202
96: ; preds = %91
%97 = load i32, i32* %15
%98 = icmp ne i32 %97, 2
br i1 %98, label %99, label %103
99: ; preds = %96
%100 = load i32, i32* %16
%101 = icmp ne i32 %100, 2
br i1 %101, label %102, label %103
102: ; preds = %99
store i32 -4, i32* %7
br label %202
103: ; preds = %99, %96
%104 = load i32, i32* %9
store i32 %104, i32* %20
%105 = load i32, i32* %10
store i32 %105, i32* %21
%106 = load i32, i32* %8
store i32 %106, i32* %28
%107 = load i32, i32* %9
store i32 %107, i32* %18
%108 = load i32, i32* %10
store i32 %108, i32* %19
%109 = load i32, i32* %8
store i32 %109, i32* %27
br label %110
110: ; preds = %138, %103
%111 = call i64 @follow_slice_link(i32* %27, i32* %18, i32* %19)
%112 = icmp ne i64 %111, 0
br i1 %112, label %113, label %142
113: ; preds = %110
%114 = load i32, i32* %18
%115 = load i32, i32* %9
%116 = icmp eq i32 %114, %115
br i1 %116, label %117, label %126
117: ; preds = %113
%118 = load i32, i32* %19
%119 = load i32, i32* %10
%120 = icmp eq i32 %118, %119
br i1 %120, label %121, label %126
121: ; preds = %117
%122 = load i32, i32* %27
%123 = load i32, i32* %8
%124 = icmp eq i32 %122, %123
br i1 %124, label %125, label %126
125: ; preds = %121
br label %142
126: ; preds = %121, %117, %113
%127 = load i32, i32* %18
%128 = load i32, i32* %12
%129 = icmp eq i32 %127, %128
br i1 %129, label %130, label %138
130: ; preds = %126
%131 = load i32, i32* %19
%132 = load i32, i32* %13
%133 = icmp eq i32 %131, %132
br i1 %133, label %134, label %138
134: ; preds = %130
%135 = load i32, i32* %11
store i32 %135, i32* %27
%136 = icmp ne i32 %135, 0
br i1 %136, label %137, label %138
137: ; preds = %134
store i32 1, i32* %7
br label %202
138: ; preds = %134, %130, %126
%139 = load i32, i32* %18
store i32 %139, i32* %20
%140 = load i32, i32* %19
store i32 %140, i32* %21
%141 = load i32, i32* %27
store i32 %141, i32* %28
br label %110
142: ; preds = %125, %110
%143 = load i32, i32* %12
store i32 %143, i32* %22
%144 = load i32, i32* %13
store i32 %144, i32* %23
%145 = load i32, i32* %11
store i32 %145, i32* %29
%146 = load i32, i32* %12
store i32 %146, i32* %18
%147 = load i32, i32* %13
store i32 %147, i32* %19
%148 = load i32, i32* %11
store i32 %148, i32* %27
br label %149
149: ; preds = %177, %142
%150 = call i64 @follow_slice_link(i32* %27, i32* %18, i32* %19)
%151 = icmp ne i64 %150, 0
br i1 %151, label %152, label %181
152: ; preds = %149
%153 = load i32, i32* %18
%154 = load i32, i32* %12
%155 = icmp eq i32 %153, %154
br i1 %155, label %156, label %165
156: ; preds = %152
%157 = load i32, i32* %19
%158 = load i32, i32* %13
%159 = icmp eq i32 %157, %158
br i1 %159, label %160, label %165
160: ; preds = %156
%161 = load i32, i32* %27
%162 = load i32, i32* %11
%163 = icmp eq i32 %161, %162
br i1 %163, label %164, label %165
164: ; preds = %160
br label %181
165: ; preds = %160, %156, %152
%166 = load i32, i32* %18
%167 = load i32, i32* %9
%168 = icmp eq i32 %166, %167
br i1 %168, label %169, label %177
169: ; preds = %165
%170 = load i32, i32* %19
%171 = load i32, i32* %10
%172 = icmp eq i32 %170, %171
br i1 %172, label %173, label %177
173: ; preds = %169
%174 = load i32, i32* %8
store i32 %174, i32* %27
%175 = icmp ne i32 %174, 0
br i1 %175, label %176, label %177
176: ; preds = %173
store i32 1, i32* %7
br label %202
177: ; preds = %173, %169, %165
%178 = load i32, i32* %18
store i32 %178, i32* %22
%179 = load i32, i32* %19
store i32 %179, i32* %23
%180 = load i32, i32* %27
store i32 %180, i32* %29
br label %149
181: ; preds = %164, %149
%182 = load i32, i32* %28
%183 = load i32, i32* %20
%184 = load i32, i32* %21
%185 = call i32 @vis5d_get_slice_link(i32 %182, i32 %183, i32 %184, i32** %26, i32** %24, i32** %25)
%186 = load i32, i32* %12
%187 = load i32*, i32** %24
store i32 %186, i32* %187
%188 = load i32, i32* %13
%189 = load i32*, i32** %25
store i32 %188, i32* %189
%190 = load i32, i32* %11
%191 = load i32*, i32** %26
store i32 %190, i32* %191
%192 = load i32, i32* %29
%193 = load i32, i32* %22
%194 = load i32, i32* %23
%195 = call i32 @vis5d_get_slice_link(i32 %192, i32 %193, i32 %194, i32** %26, i32** %24, i32** %25)
%196 = load i32, i32* %9
%197 = load i32*, i32** %24
store i32 %196, i32* %197
%198 = load i32, i32* %10
%199 = load i32*, i32** %25
store i32 %198, i32* %199
%200 = load i32, i32* %8
%201 = load i32*, i32** %26
store i32 %200, i32* %201
store i32 0, i32* %7
br label %202
202: ; preds = %181, %176, %137, %102, %95, %87, %68, %60, %41
%203 = load i32, i32* %7
ret i32 %203
}

LLVM IR (-O2):
define i32 @vis5d_link_slices(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i32
%14 = bitcast i32* %7 to i8*
%15 = bitcast i32* %8 to i8*
%16 = bitcast i32* %9 to i8*
%17 = bitcast i32** %10 to i8*
%18 = bitcast i32** %11 to i8*
%19 = bitcast i32** %12 to i8*
%20 = bitcast i32* %13 to i8*
%21 = icmp eq i32 %0, %3
%22 = icmp eq i32 %1, %4
%23 = and i1 %21, %22
%24 = icmp eq i32 %2, %5
%25 = and i1 %23, %24
br i1 %25, label %146, label %26
26: ; preds = %6
%27 = call i32 @vis5d_get_ctx_numvars(i32 %0, i32* %7)
switch i32 %1, label %146 [
i32 1, label %28
i32 3, label %28
i32 2, label %30
i32 4, label %30
i32 6, label %33
i32 8, label %33
i32 7, label %32
i32 9, label %32
]
28: ; preds = %26, %26
%29 = load i32, i32* %7
br label %33
30: ; preds = %26, %26
%31 = load i32, i32* %7
br label %33
32: ; preds = %26, %26
br label %33
33: ; preds = %26, %26, %32, %30, %28
%34 = phi i32 [ 0, %32 ], [ 0, %30 ], [ 1, %28 ], [ 1, %26 ], [ 1, %26 ]
%35 = phi i32 [ 1, %32 ], [ 1, %30 ], [ 0, %28 ], [ 0, %26 ], [ 0, %26 ]
%36 = phi i32 [ 2, %32 ], [ %31, %30 ], [ %29, %28 ], [ 2, %26 ], [ 2, %26 ]
%37 = icmp sgt i32 %2, -1
%38 = icmp sgt i32 %36, %2
%39 = select i1 %37, i1 %38, i1 false
br i1 %39, label %40, label %146
40: ; preds = %33
%41 = call i32 @vis5d_get_ctx_numvars(i32 %3, i32* %7)
switch i32 %4, label %146 [
i32 1, label %42
i32 3, label %42
i32 2, label %45
i32 4, label %45
i32 6, label %48
i32 8, label %48
i32 7, label %50
i32 9, label %50
]
42: ; preds = %40, %40
%43 = load i32, i32* %7
%44 = add nuw nsw i32 %34, 1
br label %52
45: ; preds = %40, %40
%46 = load i32, i32* %7
%47 = add nuw nsw i32 %35, 1
br label %52
48: ; preds = %40, %40
%49 = add nuw nsw i32 %34, 1
br label %52
50: ; preds = %40, %40
%51 = add nuw nsw i32 %35, 1
br label %52
52: ; preds = %50, %48, %45, %42
%53 = phi i32 [ %34, %50 ], [ %49, %48 ], [ %34, %45 ], [ %44, %42 ]
%54 = phi i32 [ %51, %50 ], [ %35, %48 ], [ %47, %45 ], [ %35, %42 ]
%55 = phi i32 [ 2, %50 ], [ 2, %48 ], [ %46, %45 ], [ %43, %42 ]
%56 = icmp sgt i32 %5, -1
%57 = icmp sgt i32 %55, %5
%58 = select i1 %56, i1 %57, i1 false
br i1 %58, label %59, label %146
59: ; preds = %52
%60 = icmp ne i32 %53, 2
%61 = icmp ne i32 %54, 2
%62 = select i1 %60, i1 %61, i1 false
br i1 %62, label %146, label %63
63: ; preds = %59
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %0, i32* %13
%64 = call i64 @follow_slice_link(i32* %13, i32* %8, i32* %9)
%65 = icmp eq i64 %64, 0
br i1 %65, label %97, label %66
66: ; preds = %63
%67 = icmp eq i32 %3, 0
%68 = load i32, i32* %8
%69 = icmp eq i32 %68, %1
%70 = load i32, i32* %9
%71 = icmp eq i32 %70, %2
%72 = select i1 %69, i1 %71, i1 false
%73 = load i32, i32* %13
%74 = icmp eq i32 %73, %0
%75 = select i1 %72, i1 %74, i1 false
br i1 %75, label %97, label %85
76: ; preds = %93
%77 = load i32, i32* %8
%78 = icmp eq i32 %77, %1
%79 = load i32, i32* %9
%80 = icmp eq i32 %79, %2
%81 = select i1 %78, i1 %80, i1 false
%82 = load i32, i32* %13
%83 = icmp eq i32 %82, %0
%84 = select i1 %81, i1 %83, i1 false
br i1 %84, label %97, label %85
85: ; preds = %66, %76
%86 = phi i32 [ %82, %76 ], [ %73, %66 ]
%87 = phi i32 [ %79, %76 ], [ %70, %66 ]
%88 = phi i32 [ %77, %76 ], [ %68, %66 ]
%89 = icmp eq i32 %88, %4
%90 = icmp eq i32 %87, %5
%91 = select i1 %89, i1 %90, i1 false
br i1 %91, label %92, label %93
92: ; preds = %85
store i32 %3, i32* %13
br i1 %67, label %93, label %146
93: ; preds = %92, %85
%94 = phi i32 [ 0, %92 ], [ %86, %85 ]
%95 = call i64 @follow_slice_link(i32* %13, i32* %8, i32* %9)
%96 = icmp eq i64 %95, 0
br i1 %96, label %97, label %76
97: ; preds = %76, %93, %66, %63
%98 = phi i32 [ %1, %63 ], [ %1, %66 ], [ %88, %93 ], [ %88, %76 ]
%99 = phi i32 [ %2, %63 ], [ %2, %66 ], [ %87, %93 ], [ %87, %76 ]
%100 = phi i32 [ %0, %63 ], [ %0, %66 ], [ %94, %93 ], [ %94, %76 ]
store i32 %4, i32* %8
store i32 %5, i32* %9
store i32 %3, i32* %13
%101 = call i64 @follow_slice_link(i32* %13, i32* %8, i32* %9)
%102 = icmp eq i64 %101, 0
br i1 %102, label %134, label %103
103: ; preds = %97
%104 = icmp eq i32 %0, 0
%105 = load i32, i32* %8
%106 = icmp eq i32 %105, %4
%107 = load i32, i32* %9
%108 = icmp eq i32 %107, %5
%109 = select i1 %106, i1 %108, i1 false
%110 = load i32, i32* %13
%111 = icmp eq i32 %110, %3
%112 = select i1 %109, i1 %111, i1 false
br i1 %112, label %134, label %122
113: ; preds = %130
%114 = load i32, i32* %8
%115 = icmp eq i32 %114, %4
%116 = load i32, i32* %9
%117 = icmp eq i32 %116, %5
%118 = select i1 %115, i1 %117, i1 false
%119 = load i32, i32* %13
%120 = icmp eq i32 %119, %3
%121 = select i1 %118, i1 %120, i1 false
br i1 %121, label %134, label %122
122: ; preds = %103, %113
%123 = phi i32 [ %119, %113 ], [ %110, %103 ]
%124 = phi i32 [ %116, %113 ], [ %107, %103 ]
%125 = phi i32 [ %114, %113 ], [ %105, %103 ]
%126 = icmp eq i32 %125, %1
%127 = icmp eq i32 %124, %2
%128 = select i1 %126, i1 %127, i1 false
br i1 %128, label %129, label %130
129: ; preds = %122
store i32 %0, i32* %13
br i1 %104, label %130, label %146
130: ; preds = %129, %122
%131 = phi i32 [ 0, %129 ], [ %123, %122 ]
%132 = call i64 @follow_slice_link(i32* %13, i32* %8, i32* %9)
%133 = icmp eq i64 %132, 0
br i1 %133, label %134, label %113
134: ; preds = %113, %130, %103, %97
%135 = phi i32 [ %4, %97 ], [ %4, %103 ], [ %125, %130 ], [ %125, %113 ]
%136 = phi i32 [ %5, %97 ], [ %5, %103 ], [ %124, %130 ], [ %124, %113 ]
%137 = phi i32 [ %3, %97 ], [ %3, %103 ], [ %131, %130 ], [ %131, %113 ]
%138 = call i32 @vis5d_get_slice_link(i32 %100, i32 %98, i32 %99, i32** %12, i32** %10, i32** %11)
%139 = load i32*, i32** %10
store i32 %4, i32* %139
%140 = load i32*, i32** %11
store i32 %5, i32* %140
%141 = load i32*, i32** %12
store i32 %3, i32* %141
%142 = call i32 @vis5d_get_slice_link(i32 %137, i32 %135, i32 %136, i32** %12, i32** %10, i32** %11)
%143 = load i32*, i32** %10
store i32 %1, i32* %143
%144 = load i32*, i32** %11
store i32 %2, i32* %144
%145 = load i32*, i32** %12
store i32 %0, i32* %145
br label %146
146: ; preds = %92, %129, %59, %52, %40, %33, %26, %6, %134
%147 = phi i32 [ 0, %134 ], [ -4, %6 ], [ -2, %26 ], [ -5, %33 ], [ -2, %40 ], [ -5, %52 ], [ -4, %59 ], [ 1, %129 ], [ 1, %92 ]
ret i32 %147
}