// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/type_node.c
// Function: create_transitive_part_of_edges
static void create_transitive_part_of_edges(GtTypeNode *node,
                                            GtBoolMatrix *part_of_out_edges,
                                            GtBoolMatrix *part_of_in_edges,
                                            GtArray *node_stack)
{
  GtUword i, j;
  /* For every incoming part_of edge of the current node add a corresponding
     part_of edge to all nodes in the stack. Note that the current node is not
     part of the stack yet, therefore this is skipped on the first invocation.
   */
  if (gt_array_size(node_stack)) {
    for (i  = gt_bool_matrix_get_first_column(part_of_in_edges, node->num);
         i != gt_bool_matrix_get_last_column(part_of_in_edges, node->num);
         i  = gt_bool_matrix_get_next_column(part_of_in_edges, node->num, i)) {
      for (j = 0; j < gt_array_size(node_stack); j++) {
        GtTypeNode *child = *(GtTypeNode**) gt_array_get(node_stack, j);
        gt_bool_matrix_set(part_of_out_edges, i, child->num, true);
        gt_bool_matrix_set(part_of_in_edges, child->num, i, true);
      }
    }
  }
  /* add node to stack */
  gt_array_add(node_stack, node);
  /* call method recursively for all is_a edges of the current node */
  for (i = 0; i < gt_array_size(node->is_a_out_edges); i++) {
    GtTypeNode *parent = *(GtTypeNode**) gt_array_get(node->is_a_out_edges, i);
    create_transitive_part_of_edges(parent, part_of_out_edges, part_of_in_edges,
                                    node_stack);
  }
  /* pop node from stack */
  gt_array_pop(node_stack);
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movq %rdx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq 0x38(%rsp), %rdi
callq 0x81370
cmpq $0x0, %rax
je 0x49ac1e
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rax
movq (%rax), %rsi
callq 0x50ade0
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rax
movq (%rax), %rsi
callq 0x50aea0
movq %rax, %rcx
movq 0x10(%rsp), %rax
cmpq %rcx, %rax
je 0x49ac1c
movq $0x0, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x38(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
jae 0x49abf9
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x48(%rsp), %rdi
movq 0x30(%rsp), %rsi
movq 0x20(%rsp), %rax
movq (%rax), %rdx
movl $0x1, %ecx
callq 0x50ac00
movq 0x40(%rsp), %rdi
movq 0x20(%rsp), %rax
movq (%rax), %rsi
movq 0x30(%rsp), %rdx
movl $0x1, %ecx
callq 0x50ac00
movq 0x28(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x28(%rsp)
jmp 0x49ab79
jmp 0x49abfb
movq 0x40(%rsp), %rdi
movq 0x50(%rsp), %rax
movq (%rax), %rsi
movq 0x30(%rsp), %rdx
callq 0x50af60
movq %rax, 0x30(%rsp)
jmp 0x49ab43
jmp 0x49ac1e
movq 0x38(%rsp), %rdi
leaq 0x50(%rsp), %rsi
movl $0x8, %edx
callq 0x81100
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, (%rsp)
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x81370
movq %rax, %rcx
movq (%rsp), %rax
cmpq %rcx, %rax
jae 0x49aca2
movq 0x50(%rsp), %rax
movq 0x20(%rax), %rdi
movq 0x30(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x40(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x49ab00
movq 0x30(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x30(%rsp)
jmp 0x49ac3b
movq 0x38(%rsp), %rdi
callq 0x80c70
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)