// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/match/rdj-strgraph.c
// Function: gt_strgraph_reddepaths
GtUword gt_strgraph_reddepaths(GtStrgraph *strgraph,
    GtUword maxdepth, bool show_progressbar)
{
  GtStrgraphVnum i, from, to;
  GtStrgraphVEdgenum j, from_to;
  GtUword depth, d;
  GtUword counter = 0, nofdepaths = 0;
  GtUint64 progress = 0;
  bool i_branching;
  GtStrgraphEdgeID *edges;

  gt_assert(strgraph != NULL);

  edges = gt_malloc(sizeof (GtStrgraphEdgeID) * (maxdepth + 1));

  if (show_progressbar)
    gt_progressbar_start(&progress,
        (GtUint64)GT_STRGRAPH_NOFVERTICES(strgraph));

  for (i = 0; i < GT_STRGRAPH_NOFVERTICES(strgraph); i++)
  {
    if (GT_STRGRAPH_V_OUTDEG(strgraph, i) > 0)
    {
      if (GT_STRGRAPH_V_IS_INTERNAL(strgraph, i))
        continue;
      i_branching =
        (GT_STRGRAPH_V_OUTDEG(strgraph, i) > (GtStrgraphVEdgenum)1 &&
         GT_STRGRAPH_V_INDEG(strgraph, i) > 0) ||
        (GT_STRGRAPH_V_OUTDEG(strgraph, i) == (GtStrgraphVEdgenum)1 &&
         GT_STRGRAPH_V_INDEG(strgraph, i) > (GtStrgraphVEdgenum)1);
      for (j = 0; j < GT_STRGRAPH_V_NOFEDGES(strgraph, i); j++)
      {
        if (!GT_STRGRAPH_EDGE_IS_REDUCED(strgraph, i, j) &&
            !GT_STRGRAPH_EDGE_HAS_MARK(strgraph, i, j))
        {
          from = i;
          from_to = j;
          to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to);
          edges->vnum = from;
          edges->edgenum = from_to;
          depth = 1UL;
          while (GT_STRGRAPH_V_IS_INTERNAL(strgraph, to) &&
              depth <= maxdepth)
          {
            depth++;
            from = to;
            from_to = gt_strgraph_find_only_edge(strgraph, from);
            to = GT_STRGRAPH_EDGE_DEST(strgraph, from, from_to);
            gt_assert(depth >= 1UL);
            gt_assert(depth - 1UL <= maxdepth);
            edges[depth - 1UL].vnum = from;
            edges[depth - 1UL].edgenum = from_to;
          }
          if (depth <= maxdepth &&
              (!i_branching || GT_STRGRAPH_V_OUTDEG(strgraph, to) == 0))
          {
            nofdepaths++;
            for (d = 0; d < depth; d++)
            {
              GT_STRGRAPH_EDGE_SET_MARK(strgraph, edges[d].vnum,
                  edges[d].edgenum);
            }
          }
        }
      }
    }
    if (show_progressbar)
      progress++;
  }
  gt_free(edges);
  counter = gt_strgraph_reduce_marked_edges(strgraph);
  if (show_progressbar)
    gt_progressbar_stop();
  gt_log_log("dead-paths = "GT_WU"", nofdepaths);
  gt_log_log("dead-path edges = "GT_WU"", counter);
#ifndef NDEBUG
  gt_strgraph_check_outdegs(strgraph);
#endif
  return counter;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq $0x0, 0x40(%rsp)
testq %rdi, %rdi
je 0x1dcfa5
movl %edx, %ebx
movq %rsi, %rbp
movq %rdi, %r15
movq %rsi, %rdi
shlq $0x4, %rdi
addq $0x10, %rdi
leaq 0x1dc299(%rip), %rsi    # 0x3b892d
movl $0x479, %edx            # imm = 0x479
callq 0x1092b2
movq %rax, 0x28(%rsp)
testb %bl, %bl
je 0x1dc6b8
movq 0x80(%r15), %rsi
leaq 0x40(%rsp), %rdi
callq 0x110c6c
cmpq $0x0, 0x80(%r15)
je 0x1dceb7
movq 0x28(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x48(%rsp)
addq $0x18, %rax
movq %rax, 0x50(%rsp)
movq $0x0, (%rsp)
movq $0x0, 0x20(%rsp)
movl %ebx, 0x34(%rsp)
movq %rbp, 0x58(%rsp)
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf7d
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf7d
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf7d
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
testq %rax, %rax
je 0x1dce94
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf87
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf87
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf87
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1dc7c3
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf96
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcf96
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf96
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
je 0x1dce9d
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf8c
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf8c
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf8c
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
cmpq $0x2, %rax
jb 0x1dc853
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf9b
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcf9b
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf9b
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
movb $0x1, %cl
movl %ecx, 0xc(%rsp)
testq %rax, %rax
jne 0x1dc8e9
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf91
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf91
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf91
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1dc8e1
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcfa0
movq (%rsp), %rcx
movl %ecx, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %rcx, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcfa0
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcfa0
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
cmpq $0x2, %rax
setae %al
movl %eax, 0xc(%rsp)
jmp 0x1dc8e9
movl $0x0, 0xc(%rsp)
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf55
movq (%rsp), %rcx
incq %rcx
movq %rcx, 0x38(%rsp)
xorl %r12d, %r12d
movq 0x38(%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf55
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf55
movq %r12, 0x10(%rsp)
movq (%rax), %rdi
movq %rdx, %rsi
imulq 0x38(%rsp), %rsi
callq 0x2fcc2c
movq %rax, %r12
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf5a
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf5a
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf5a
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
subq %rax, %r12
movq 0x10(%rsp), %rax
cmpq %r12, %rax
jae 0x1dce90
movq %rax, %r12
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf64
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf64
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf64
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
testq %rbx, %rbx
je 0x1dcf5f
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1dcf5f
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1dcf5f
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2fcc2c
movq %rax, %r14
movq 0x90(%r15), %rdi
callq 0x2f9d41
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %eax, %ecx
shll %cl, %edx
notl %edx
addl %edx, %edx
movslq %edx, %rax
andq %r14, %rax
shrq %rax
cmpq 0x90(%r15), %rax
je 0x1dce7b
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf69
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf69
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf69
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
testq %rbx, %rbx
je 0x1dcf6e
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1dcf6e
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1dcf6e
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2fcc2c
testb $0x1, %al
jne 0x1dce7b
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf78
movq (%rsp), %rcx
cmpq %rcx, 0x8(%rax)
jbe 0x1dcf78
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf78
movq 0x88(%r15), %rbx
movq (%rax), %rdi
movq %rdx, %rsi
imulq (%rsp), %rsi
callq 0x2fcc2c
testq %rbx, %rbx
je 0x1dcf73
addq %r12, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x1dcf73
movl 0x10(%rbx), %edx
cmpq $0x41, %rdx
jae 0x1dcf73
movq (%rbx), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2fcc2c
movq %r12, %rbx
movq %rax, %r12
movq 0x80(%r15), %rdi
callq 0x2f9d41
movl %eax, %r13d
movq 0x90(%r15), %rdi
callq 0x2f9d41
movl %eax, %ebp
movq 0x90(%r15), %rdi
callq 0x2f9d41
movq 0x28(%rsp), %rcx
movq (%rsp), %rdx
movq %rdx, (%rcx)
movq %rbx, 0x8(%rcx)
movq 0x70(%r15), %rsi
testq %rsi, %rsi
je 0x1dcf28
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %r13d, %ecx
shll %cl, %edx
notl %edx
incb %bpl
movl %ebp, %ecx
shll %cl, %edx
movslq %edx, %rcx
andq %rcx, %r12
incb %al
movl %eax, %ecx
shrq %cl, %r12
movl $0x1, %eax
movq %rax, 0x18(%rsp)
movq 0x50(%rsp), %rbx
cmpq %r12, 0x8(%rsi)
jbe 0x1dcf28
movl 0x10(%rsi), %edx
cmpq $0x41, %rdx
jae 0x1dcf28
movq (%rsi), %rdi
movq %rdx, %rsi
imulq %r12, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
movq 0x58(%rsp), %rbp
jne 0x1dcd23
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf2d
movl %r12d, %esi
andl $0x1, %esi
negq %rsi
orq $0x1, %rsi
addq %r12, %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcf2d
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf2d
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
cmpq $0x1, %rax
jne 0x1dcd23
cmpq %rbp, 0x18(%rsp)
ja 0x1dcd23
movq %r15, %rdi
movq %r12, %rsi
callq 0x1dcfaa
movq %rax, %r13
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf37
cmpq %r12, 0x8(%rax)
jbe 0x1dcf37
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf37
movq %rbx, %rbp
movq 0x88(%r15), %r14
movq (%rax), %rdi
movq %rdx, %rsi
imulq %r12, %rsi
callq 0x2fcc2c
testq %r14, %r14
je 0x1dcf32
addq %r13, %rax
cmpq %rax, 0x8(%r14)
jbe 0x1dcf32
movl 0x10(%r14), %edx
cmpq $0x41, %rdx
jae 0x1dcf32
movq %r13, 0x60(%rsp)
movq (%r14), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2fcc2c
movq %rax, %r13
movq 0x80(%r15), %rdi
callq 0x2f9d41
movl %eax, %r14d
movq 0x90(%r15), %rdi
callq 0x2f9d41
movq %r15, %rbx
movl %eax, %r15d
movq 0x90(%rbx), %rdi
callq 0x2f9d41
incq 0x18(%rsp)
je 0x1dcf50
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movl %r14d, %ecx
shll %cl, %edx
notl %edx
incb %r15b
movl %r15d, %ecx
shll %cl, %edx
movslq %edx, %rcx
andq %rcx, %r13
incb %al
movl %eax, %ecx
shrq %cl, %r13
movq %r12, -0x8(%rbp)
movq 0x60(%rsp), %rax
movq %rax, (%rbp)
movq 0x70(%rbx), %rsi
addq $0x10, %rbp
movq %r13, %r12
testq %rsi, %rsi
movq %rbx, %r15
movq %rbp, %rbx
jne 0x1dcb8e
jmp 0x1dcf28
cmpq %rbp, 0x18(%rsp)
ja 0x1dce76
cmpb $0x0, 0xc(%rsp)
je 0x1dcd71
movq 0x70(%r15), %rax
testq %rax, %rax
je 0x1dcf82
cmpq %r12, 0x8(%rax)
jbe 0x1dcf82
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf82
movq (%rax), %rdi
imulq %rdx, %r12
movq %r12, %rsi
callq 0x2fcc2c
testq %rax, %rax
jne 0x1dce76
incq 0x20(%rsp)
movq 0x48(%rsp), %rbx
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf41
movq -0x8(%rbx), %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcf41
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf41
movq 0x88(%r15), %r14
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
movq %rax, %r13
movq 0x60(%r15), %rax
testq %rax, %rax
je 0x1dcf3c
movq -0x8(%rbx), %rsi
cmpq %rsi, 0x8(%rax)
jbe 0x1dcf3c
movl 0x10(%rax), %edx
cmpq $0x41, %rdx
jae 0x1dcf3c
addq (%rbx), %r13
movq %r15, %r12
movq 0x88(%r15), %r15
movq (%rax), %rdi
imulq %rdx, %rsi
callq 0x2fcc2c
testq %r15, %r15
je 0x1dcf4b
addq (%rbx), %rax
cmpq %rax, 0x8(%r15)
jbe 0x1dcf4b
movl 0x10(%r15), %edx
cmpq $0x41, %rdx
jae 0x1dcf4b
movq (%r15), %rdi
imulq %rdx, %rax
movq %rax, %rsi
callq 0x2fcc2c
testq %r14, %r14
je 0x1dcf46
cmpq %r13, 0x8(%r14)
jbe 0x1dcf46
movl 0x10(%r14), %edx
cmpq $0x41, %rdx
jae 0x1dcf46
orq $0x1, %rax
movq (%r14), %rdi
imulq %rdx, %r13
movq %r13, %rsi
movq %rax, %rcx
callq 0x2fcd13
addq $0x10, %rbx
decq 0x18(%rsp)
movq %r12, %r15
jne 0x1dcd7b
movq 0x10(%rsp), %r12
incq %r12
movq 0x60(%r15), %rax
testq %rax, %rax
jne 0x1dc905
jmp 0x1dcf55
movl 0x34(%rsp), %ebx
testb %bl, %bl
je 0x1dce9d
incq 0x40(%rsp)
movq (%rsp), %rcx
incq %rcx
movq %rcx, (%rsp)
cmpq 0x80(%r15), %rcx
jb 0x1dc6f7
jmp 0x1dcec0
movq $0x0, 0x20(%rsp)
leaq 0x1dba66(%rip), %rsi    # 0x3b892d
movq 0x28(%rsp), %rdi
movl $0x4b1, %edx            # imm = 0x4B1
callq 0x109670
movq %r15, %rdi
callq 0x1dbb3b
movq %rax, %r14
testb %bl, %bl
je 0x1dceea
callq 0x111189
leaq 0x1dc03f(%rip), %rdi    # 0x3b8f30
movq 0x20(%rsp), %rsi
xorl %eax, %eax
callq 0x108e02
leaq 0x1dc03d(%rip), %rdi    # 0x3b8f41
movq %r14, %rsi
xorl %eax, %eax
callq 0x108e02
movq %r15, %rdi
callq 0x1da5e8
movq %r14, %rax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x70cab
callq 0x70c72
callq 0x70ae3
callq 0x70b1c
callq 0x70bc7
callq 0x70c00
callq 0x70b55
callq 0x70b8e
callq 0x70aaa
callq 0x70e73
callq 0x70e3a
callq 0x70dc8
callq 0x70e01
callq 0x70d8f
callq 0x70d56
callq 0x70ce4
callq 0x70d1d
callq 0x71002
callq 0x70c39
callq 0x70fc9
callq 0x70f57
callq 0x70ee5
callq 0x70f90
callq 0x70f1e
callq 0x70eac
callq 0x7103b