LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getMinDegree(unsigned int&) const
void Graph::getMinDegree(uint32_t &minDegree) const {
    minDegree = NONE;
    for (uint32_t i = 0 ; i < nodeIndex.size() ; i++) {
        if (!nodeIndex[i].removed && nodeIndex[i].edges && nodeIndex[i].edges < minDegree) {
            minDegree = nodeIndex[i].edges;
            if (minDegree < 3) {
                return;
            }
        }
    }
}

// Assembly:
movl $0xffffffff, (%rsi)     # imm = 0xFFFFFFFF
movq (%rdi), %rax
movq 0x8(%rdi), %rdx
subq %rax, %rdx
je 0x2b16
sarq $0x2, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
movl (%rsi), %edi
movl $0x1, %edx
xorl %r8d, %r8d
leaq (%r8,%r8,2), %r8
cmpb $0x0, 0x8(%rax,%r8,4)
jne 0x2b0c
leaq (%rax,%r8,4), %r8
movl 0x4(%r8), %r8d
testl %r8d, %r8d
je 0x2b0c
cmpl %edi, %r8d
jae 0x2b0c
movl %r8d, (%rsi)
movl %r8d, %edi
cmpl $0x3, %r8d
jb 0x2b16
movl %edx, %r8d
incl %edx
cmpq %r8, %rcx
ja 0x2ae2
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getTotalEdges() const
uint32_t Graph::getTotalEdges() const {
    uint32_t count = 0;
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed) {
            count += nodeIndex[pos].edges;
        }
    }
    return count;
}

// Assembly:
movq (%rdi), %rcx
movq 0x8(%rdi), %rax
subq %rcx, %rax
je 0x2b57
sarq $0x2, %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rdx
addq $0x8, %rcx
xorl %eax, %eax
movl $0x1, %esi
cmpb $0x0, (%rcx)
jne 0x2b49
addl -0x4(%rcx), %eax
movl %esi, %edi
addq $0xc, %rcx
incl %esi
cmpq %rdi, %rdx
ja 0x2b41
retq
xorl %eax, %eax
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getNumberOfDegreeNeighbors(unsigned int const&, unsigned int const&, unsigned int const&) const
uint32_t Graph::getNumberOfDegreeNeighbors(const uint32_t &node, const uint32_t &degree, const uint32_t &atLeast) const {
    uint32_t count = 0;
    uint32_t pos = (!mapping ? node : idToPos->at(node));
    uint32_t neighborCount = nodeIndex[pos].edges;
    uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
    for (uint32_t i = nodeIndex[pos].offset ; i < nextNodeOffset && neighborCount ; i++) {
        uint32_t nPos = (!mapping ? (*edgeBuffer)[i] : idToPos->at((*edgeBuffer)[i]));
        if (!nodeIndex[nPos].removed) {
            neighborCount--;
            if (nodeIndex[nPos].edges == degree) {
                count++;
                if (atLeast && count == atLeast) {
                    break;
                }
            }
        }
    }
    return count;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rcx, 0x8(%rsp)
movq %rdx, 0x10(%rsp)
movq %rdi, %r15
cmpb $0x1, 0x3c(%rdi)
jne 0x2b87
movq 0x40(%r15), %rdi
callq 0xda16
movq %rax, %rsi
movl (%rsi), %ecx
movq (%r15), %rdx
movq 0x8(%r15), %rsi
leaq (%rcx,%rcx,2), %rax
leaq (%rdx,%rax,4), %rax
movl 0x4(%rax), %r12d
subq %rdx, %rsi
sarq $0x2, %rsi
movabsq $-0x5555555555555555, %rdi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rsi, %rdi
decq %rdi
cmpq %rcx, %rdi
jne 0x2bca
movq 0x18(%r15), %rdx
movq 0x8(%rdx), %rcx
subq (%rdx), %rcx
shrq $0x2, %rcx
jmp 0x2bd3
incl %ecx
leaq (%rcx,%rcx,2), %rcx
movl (%rdx,%rcx,4), %ecx
movl (%rax), %r13d
cmpl %ecx, %r13d
setb %al
testl %r12d, %r12d
setne %dl
andb %al, %dl
xorl %ebp, %ebp
cmpb $0x1, %dl
jne 0x2c73
movl %ecx, %ebx
leaq (,%r13,4), %r14
incq %r13
xorl %ebp, %ebp
cmpb $0x0, 0x3c(%r15)
je 0x2c1a
movq 0x18(%r15), %rax
movq 0x40(%r15), %rdi
movq (%rax), %rsi
addq %r14, %rsi
callq 0xda16
jmp 0x2c24
movq 0x18(%r15), %rax
movq (%rax), %rax
addq %r14, %rax
movl (%rax), %eax
movq (%r15), %rcx
leaq (%rax,%rax,2), %rdx
movb $0x1, %al
cmpb $0x0, 0x8(%rcx,%rdx,4)
jne 0x2c5e
leaq (%rcx,%rdx,4), %rcx
decl %r12d
movl 0x4(%rcx), %ecx
movq 0x10(%rsp), %rdx
cmpl (%rdx), %ecx
jne 0x2c5e
incl %ebp
movq 0x8(%rsp), %rax
movl (%rax), %eax
testl %eax, %eax
sete %cl
cmpl %eax, %ebp
setne %al
orb %cl, %al
testb %al, %al
je 0x2c73
cmpq %rbx, %r13
jae 0x2c73
addq $0x4, %r14
incq %r13
testl %r12d, %r12d
jne 0x2bfe
movl %ebp, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::replaceNeighbor(unsigned int const&, unsigned int const&, unsigned int const&)
void Graph::replaceNeighbor(const uint32_t &node, const uint32_t &oldNeighbor, const uint32_t &newNeighbor) {
    uint32_t offset;
    offset = findEdgeOffset(node, oldNeighbor);
    assert(offset != NONE);
    uint32_t pos = (!mapping ? node : idToPos->at(node));
    uint32_t endOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
    auto it = edgeBuffer->begin();
    move(it + offset + 1, it + endOffset, it + offset);
    (*edgeBuffer)[endOffset-1] = newNeighbor;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rsi, %r15
movq %rdi, %r14
callq 0xc5e2
cmpl $-0x1, %eax
je 0x3c05
movl %eax, %ebp
cmpb $0x1, 0x3c(%r14)
jne 0x3b82
movq 0x40(%r14), %rdi
movq %r15, %rsi
callq 0xda16
movq %rax, %r15
movl (%r15), %eax
movq (%r14), %rcx
movq 0x8(%r14), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
movabsq $-0x5555555555555555, %rsi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rsi
decq %rsi
cmpq %rax, %rsi
jne 0x3bba
movq 0x18(%r14), %rax
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
jmp 0x3bc4
incl %eax
leaq (%rax,%rax,2), %rax
movl (%rcx,%rax,4), %r15d
movq 0x18(%r14), %rax
movq (%rax), %rax
movl %ebp, %ecx
leaq (%rax,%rcx,4), %rsi
addq $0x4, %rsi
movl %r15d, %edx
leaq (%rax,%rdx,4), %rdx
subq %rsi, %rdx
je 0x3bea
leaq (%rax,%rcx,4), %rdi
callq 0x22f0
movl (%rbx), %eax
movq 0x18(%r14), %rcx
decl %r15d
movq (%rcx), %rcx
movl %eax, (%rcx,%r15,4)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x16521(%rip), %rdi     # 0x1a12d
leaq 0x1642f(%rip), %rsi     # 0x1a042
leaq 0x16522(%rip), %rcx     # 0x1a13c
movl $0x139, %edx            # imm = 0x139
callq 0x2110
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getNodeWithOneUncommonNeighbor(std::vector<unsigned int, std::allocator<unsigned int>> const&, unsigned int&) const
uint32_t Graph::getNodeWithOneUncommonNeighbor(const vector<uint32_t> &neighbors, uint32_t &uncommonNeighbor) const {
    uncommonNeighbor = NONE;
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed && nodeIndex[pos].edges == 3 || nodeIndex[pos].edges == 4) { // Optimization for 3-4 structures reduction
            uint32_t node = (!mapping ? pos : posToId->at(pos));
            vector<uint32_t> newNeighbors;
            gatherNeighbors(node, newNeighbors);
            if (setsHaveKUncommonElements(neighbors, newNeighbors, 1, uncommonNeighbor)) {
                return node;
            }
        }
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rsi, 0x18(%rsp)
movl $0xffffffff, (%rdx)     # imm = 0xFFFFFFFF
movq (%rdi), %rax
cmpq %rax, 0x8(%rdi)
je 0x3f1a
movq %rdx, %rbx
movq %rdi, %r15
movl $0x1, %r14d
xorl %esi, %esi
leaq 0x20(%rsp), %r13
leaq 0x10(%rsp), %rbp
leaq (%rsi,%rsi,2), %rcx
leaq (%rax,%rcx,4), %rax
cmpb $0x0, 0x8(%rax)
jne 0x3e4a
cmpl $0x3, 0x4(%rax)
je 0x3e54
cmpl $0x4, 0x4(%rax)
jne 0x3eef
cmpb $0x1, 0x3c(%r15)
jne 0x3e7b
movq 0x48(%r15), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x3f35
movl (%rax,%rsi,4), %eax
jmp 0x3e7f
leal -0x1(%r14), %eax
movl %eax, 0x14(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
movl $0xffffffff, 0x10(%rsp) # imm = 0xFFFFFFFF
movq %r15, %rdi
leaq 0x14(%rsp), %rsi
movq %r13, %rdx
xorl %ecx, %ecx
movq %rbp, %r8
callq 0xc714
movl $0x1, 0x10(%rsp)
movq 0x18(%rsp), %rdi
movq %r13, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x1937a
movl %eax, %r12d
testb %al, %al
je 0x3edb
movl 0x14(%rsp), %eax
movl %eax, 0xc(%rsp)
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x3eea
callq 0x21a0
testb %r12b, %r12b
jne 0x3f22
movl %r14d, %esi
movq (%r15), %rax
movq 0x8(%r15), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
incl %r14d
cmpq %rsi, %rcx
ja 0x3e36
movl $0xffffffff, 0xc(%rsp)  # imm = 0xFFFFFFFF
movl 0xc(%rsp), %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x168a2(%rip), %rdi     # 0x1a7de
xorl %eax, %eax
callq 0x22a0
jmp 0x3f45
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x3f57
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getExtendedGrandchildren(Graph::GraphTraversal&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>&, bool*, bool const&) const
void Graph::getExtendedGrandchildren(Graph::GraphTraversal &graphTraversal, unordered_set<uint32_t> &extendedGrandchildren, bool *isUnconfined, const bool &stopAtFirst) const {
    while (graphTraversal.curEdgeOffset != NONE) {
        uint32_t neighbor = (*edgeBuffer)[graphTraversal.curEdgeOffset];
        uint32_t outerNeighbor;
        bool exactlyOne;
        getOuterNeighbor(graphTraversal.curNode, neighbor, outerNeighbor, exactlyOne);
        if (isUnconfined != NULL && outerNeighbor == NONE) {
            *isUnconfined = true;
            break;
        } else if (exactlyOne) {
            extendedGrandchildren.insert(outerNeighbor);
            if (stopAtFirst) {
                return;
            }
        }
        getNextEdge(graphTraversal);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, 0x18(%rsp)
movl 0x4(%rsi), %eax
cmpl $-0x1, %eax
je 0x4007
movq %rcx, %rbx
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %r13
leaq 0x10(%rsp), %r14
leaq 0xf(%rsp), %rbp
movq 0x18(%r13), %rcx
movl %eax, %eax
movq (%rcx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x14(%rsp)
movq %r13, %rdi
movq %r12, %rsi
leaq 0x14(%rsp), %rdx
movq %r14, %rcx
movq %rbp, %r8
callq 0xc8d4
testq %rbx, %rbx
je 0x3fc7
cmpl $-0x1, 0x10(%rsp)
je 0x4004
cmpb $0x1, 0xf(%rsp)
jne 0x3fed
movq %r15, 0x20(%rsp)
movq %r15, %rdi
movq %r14, %rsi
leaq 0x20(%rsp), %rdx
callq 0xdc3e
movq 0x18(%rsp), %rax
cmpb $0x0, (%rax)
jne 0x4007
movq %r13, %rdi
movq %r12, %rsi
callq 0xc4d8
movl 0x4(%r12), %eax
cmpl $-0x1, %eax
jne 0x3f95
jmp 0x4007
movb $0x1, (%rbx)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalNodeTheta3(unsigned int, unsigned int const&) const
uint32_t Graph::getOptimalNodeTheta3(const uint32_t initialMaxDegreeNode, const uint32_t &initialMaxDegree) const {
    uint32_t maxDegree = initialMaxDegree;
    uint32_t maxDegreeNode = initialMaxDegreeNode;
    if (maxDegree >= 4) {
        uint32_t maxNeighborsAtDistance2 = 0;
        GraphTraversal graphTraversal(*this, maxDegreeNode);
        while (graphTraversal.curNode != NONE) {
            unordered_set<uint32_t> neighborsAtDistance2;
            getNeighborsAtDistance2(graphTraversal.curNode, neighborsAtDistance2);
            if (neighborsAtDistance2.size() > maxNeighborsAtDistance2) {
                maxDegreeNode = graphTraversal.curNode;
                maxNeighborsAtDistance2 = neighborsAtDistance2.size();
            }
            getNextNode(graphTraversal);
        }
    }
    return maxDegreeNode;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movl (%rdx), %eax
movl %esi, (%rsp)
cmpl $0x4, %eax
jb 0x40d3
movq %rdi, %rbx
movq %rsp, %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0xc132
cmpl $-0x1, (%r14)
je 0x40d3
leaq 0x40(%rsp), %r13
xorl %ebp, %ebp
leaq 0x8(%rsp), %r14
leaq 0x10(%rsp), %r15
leaq 0x4(%rsp), %r12
movq %r13, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%r13)
movl $0x3f800000, 0x30(%rsp) # imm = 0x3F800000
movups %xmm0, -0x8(%r13)
movl $0xffffffff, 0x4(%rsp)  # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
xorl %r8d, %r8d
callq 0x2c84
movq 0x28(%rsp), %rax
movl %ebp, %ecx
cmpq %rcx, %rax
jbe 0x40b9
movl 0x8(%rsp), %ecx
movl %ecx, (%rsp)
movl %eax, %ebp
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc034
movq %r15, %rdi
callq 0xcff8
cmpl $-0x1, 0x8(%rsp)
jne 0x4065
movl (%rsp), %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x40e7
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0xcff8
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node() const
uint32_t Graph::getOptimalDegree4Node() const {
    uint32_t node = getOptimalDegree4Node1();
    if (node == NONE) {
        node = getOptimalDegree4Node2();
        if (node == NONE) {
            uint32_t maxNodeWithCond = NONE;
            uint32_t maxNode = NONE;
            getOptimalDegree4Node3(maxNodeWithCond, maxNode);
            if (maxNodeWithCond != NONE) {
                node = maxNodeWithCond;
            } else {
                node = maxNode;
            }
        }
    }
    //cout << "branching on optimal degree 4 node " << node << "\n";
    return node;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
callq 0x4152
cmpl $-0x1, %eax
jne 0x4148
movq %rbx, %rdi
callq 0x4324
cmpl $-0x1, %eax
jne 0x4148
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
leaq 0xc(%rsp), %r14
movl %ebp, (%r14)
leaq 0x8(%rsp), %rdx
movl %ebp, (%rdx)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x450e
movl (%r14), %eax
cmpl %ebp, %eax
jne 0x4148
movl 0x8(%rsp), %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node1() const
uint32_t Graph::getOptimalDegree4Node1() const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        if (getNodeDegree(graphTraversal.curNode) == 4) {
            vector<uint32_t> neighborsV;
            gatherNeighbors(graphTraversal.curNode, neighborsV);
            for (uint32_t neighborV: neighborsV) {
                if (getNodeDegree(neighborV) == 3) {
                    vector<uint32_t> neighborsN;
                    gatherNeighbors(neighborV, neighborsN);
                    if (edgeExists(neighborsN[0], neighborsN[1]) || edgeExists(neighborsN[0], neighborsN[2]) || edgeExists(neighborsN[1], neighborsN[2])) {
                        return graphTraversal.curNode;
                    }
                }
            }
        }
        getNextNode(graphTraversal);
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
leaq 0x10(%rsp), %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, (%r14)
je 0x42d6
leaq 0x10(%rsp), %r14
leaq 0x1c(%rsp), %r13
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc98e
cmpl $0x4, %eax
jne 0x42c0
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
movq $0x0, 0x50(%rsp)
movl $0xffffffff, 0x20(%rsp) # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x40(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x20(%rsp), %r8
callq 0xc714
movq 0x40(%rsp), %r15
movq 0x48(%rsp), %r12
cmpq %r12, %r15
sete %r14b
je 0x42a6
movl (%r15), %eax
movl %eax, 0x1c(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xc98e
movb $0x1, %bpl
cmpl $0x3, %eax
jne 0x4293
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
movl $0xffffffff, 0x18(%rsp) # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x20(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x18(%rsp), %r8
callq 0xc714
movq 0x20(%rsp), %rsi
leaq 0x4(%rsi), %rdx
movq %rbx, %rdi
callq 0xc5e2
cmpl $-0x1, %eax
jne 0x427a
movq 0x20(%rsp), %rsi
leaq 0x8(%rsi), %rdx
movq %rbx, %rdi
callq 0xc5e2
cmpl $-0x1, %eax
jne 0x427a
movq 0x20(%rsp), %rdx
leaq 0x4(%rdx), %rsi
addq $0x8, %rdx
movq %rbx, %rdi
callq 0xc5e2
cmpl $-0x1, %eax
je 0x42a1
movl 0x10(%rsp), %eax
movl %eax, 0xc(%rsp)
xorl %ebp, %ebp
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x4293
callq 0x21a0
testb %bpl, %bpl
je 0x42a6
addq $0x4, %r15
jmp 0x41d9
movb $0x1, %bpl
jmp 0x4284
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x42b5
callq 0x21a0
testb $0x1, %r14b
leaq 0x10(%rsp), %r14
je 0x42de
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, 0x10(%rsp)
jne 0x418b
movl $0xffffffff, 0xc(%rsp)  # imm = 0xFFFFFFFF
movl 0xc(%rsp), %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4309
jmp 0x42f5
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x430c
callq 0x21a0
jmp 0x430c
movq %rax, %rbx
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x431b
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getOptimalDegree4Node2() const
uint32_t Graph::getOptimalDegree4Node2() const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        if (getNodeDegree(graphTraversal.curNode) == 4) {
            vector<uint32_t> neighborsV;
            gatherNeighbors(graphTraversal.curNode, neighborsV);
            for (uint32_t neighborV: neighborsV) {
                if (getNodeDegree(neighborV) == 3) {
                    vector<uint32_t> neighborsN;
                    gatherNeighbors(neighborV, neighborsN);
                    for (uint32_t neighborN: neighborsN) {
                        if (neighborN != graphTraversal.curNode && getNodeDegree(neighborN) == 4) {
                            return graphTraversal.curNode;
                        }
                    }
                }
            }
        }
        getNextNode(graphTraversal);
    }
    return NONE;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rdi, %rbx
leaq 0x14(%rsp), %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, (%r14)
je 0x44c0
leaq 0x14(%rsp), %r14
leaq 0x1c(%rsp), %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc98e
cmpl $0x4, %eax
jne 0x44aa
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
movq $0x0, 0x50(%rsp)
movl $0xffffffff, 0x20(%rsp) # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x40(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x20(%rsp), %r8
callq 0xc714
movq 0x40(%rsp), %r12
movq 0x48(%rsp), %r13
cmpq %r13, %r12
sete %r14b
movq %r13, 0x60(%rsp)
je 0x4490
movl (%r12), %eax
movl %eax, 0x1c(%rsp)
movq %rbx, %rdi
movq %r15, %rsi
callq 0xc98e
movb $0x1, %bpl
cmpl $0x3, %eax
jne 0x4479
movb %r14b, 0xb(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
movq $0x0, 0x30(%rsp)
movl $0xffffffff, 0x10(%rsp) # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r15, %r14
movq %r15, %rsi
leaq 0x20(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x10(%rsp), %r8
callq 0xc714
movq 0x20(%rsp), %r15
movq 0x28(%rsp), %r13
cmpq %r13, %r15
sete %bpl
je 0x445d
movl (%r15), %ecx
movl %ecx, 0x10(%rsp)
movb $0x1, %al
cmpl 0x14(%rsp), %ecx
je 0x4453
movq %rbx, %rdi
leaq 0x10(%rsp), %rsi
callq 0xc98e
cmpl $0x4, %eax
setne %al
jne 0x4453
movl 0x14(%rsp), %ecx
movl %ecx, 0xc(%rsp)
testb %al, %al
je 0x445d
addq $0x4, %r15
jmp 0x441e
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x446c
callq 0x21a0
movq %r14, %r15
movb 0xb(%rsp), %r14b
movq 0x60(%rsp), %r13
testb $0x1, %bpl
je 0x4490
addq $0x4, %r12
cmpq %r13, %r12
sete %r14b
jne 0x43bd
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x449f
callq 0x21a0
testb $0x1, %r14b
leaq 0x14(%rsp), %r14
je 0x44c8
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, 0x14(%rsp)
jne 0x435d
movl $0xffffffff, 0xc(%rsp)  # imm = 0xFFFFFFFF
movl 0xc(%rsp), %eax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x44df
jmp 0x44e4
movq %rax, %rbx
jmp 0x44f6
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x44f6
callq 0x21a0
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x4505
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getCommonNeighbors(unsigned int const&, unsigned int const&, std::vector<unsigned int, std::allocator<unsigned int>>&, unsigned int const&) const
void Graph::getCommonNeighbors(const uint32_t &node1, const uint32_t &node2, vector<uint32_t> &commonNeighbors, const uint32_t &atLeast) const {
    uint32_t pos1 = (!mapping ? node1 : idToPos->at(node1));
    uint32_t pos2 = (!mapping ? node2 : idToPos->at(node2));
    assert(!nodeIndex[pos1].removed && !nodeIndex[pos2].removed);
    uint32_t count = 0;
    vector<uint32_t> neighbors1;
    gatherNeighbors(node1, neighbors1);
    for (auto &neighbor: neighbors1) {
        if (edgeExists(neighbor, node2)) {
            commonNeighbors.push_back(neighbor);
            if (atLeast && ++count == atLeast) {
                return;
            }
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, (%rsp)
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %r13
movq %rdi, %r12
cmpb $0x1, 0x3c(%rdi)
movq %rsi, %rax
jne 0x4be2
movq 0x40(%r12), %rdi
movq %r13, %rsi
callq 0xda16
movl (%rax), %ebx
cmpb $0x1, 0x3c(%r12)
movq %r15, %rax
jne 0x4bfc
movq 0x40(%r12), %rdi
movq %r15, %rsi
callq 0xda16
movq (%r12), %rcx
leaq (%rbx,%rbx,2), %rdx
cmpb $0x0, 0x8(%rcx,%rdx,4)
jne 0x4cd5
movl (%rax), %eax
leaq (%rax,%rax,2), %rax
cmpb $0x1, 0x8(%rcx,%rax,4)
je 0x4cd5
xorps %xmm0, %xmm0
leaq 0x10(%rsp), %rdx
movaps %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0xc(%rsp), %r8
movl $0xffffffff, (%r8)      # imm = 0xFFFFFFFF
movq %r12, %rdi
movq %r13, %rsi
xorl %ecx, %ecx
callq 0xc714
movq 0x10(%rsp), %r13
movq 0x18(%rsp), %rbp
cmpq %rbp, %r13
je 0x4cb7
xorl %ebx, %ebx
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0xc5e2
cmpl $-0x1, %eax
je 0x4ca8
movq 0x8(%r14), %rsi
cmpq 0x10(%r14), %rsi
je 0x4c8a
movl (%r13), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r14)
jmp 0x4c95
movq %r14, %rdi
movq %r13, %rdx
callq 0xdeac
movq (%rsp), %rax
movl (%rax), %eax
testl %eax, %eax
je 0x4ca8
incl %ebx
cmpl %eax, %ebx
sete %al
jmp 0x4caa
xorl %eax, %eax
testb %al, %al
jne 0x4cb7
addq $0x4, %r13
cmpq %rbp, %r13
jne 0x4c5d
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4cc6
callq 0x21a0
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x154b2(%rip), %rdi     # 0x1a18e
leaq 0x1535f(%rip), %rsi     # 0x1a042
leaq 0x154d9(%rip), %rcx     # 0x1a1c3
movl $0x463, %edx            # imm = 0x463
callq 0x2110
jmp 0x4cf6
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4d08
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getEffectiveNodeMeasure(unsigned int const&) const
uint32_t Graph::getEffectiveNodeMeasure(const uint32_t &bound) const {
    uint32_t measure = 0;
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        uint32_t degree = getNodeDegree(graphTraversal.curNode);
        if (degree > 2) {
            measure += (degree - 2);
        }
        if (bound != NONE && measure > bound) {
            break;
        }
        getNextNode(graphTraversal);
    }
    return measure;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq %rsp, %r15
movq $-0x1, (%r15)
movq %r15, %rsi
callq 0xc034
cmpl $-0x1, (%r15)
je 0x5209
xorl %r12d, %r12d
movq %rsp, %r15
xorl %ebp, %ebp
movl %ebp, %r13d
movq %r14, %rdi
movq %r15, %rsi
callq 0xc98e
movl %eax, %ebp
subl $0x2, %ebp
cmovbl %r12d, %ebp
addl %r13d, %ebp
movl (%rbx), %eax
cmpl $-0x1, %eax
sete %cl
cmpl %eax, %ebp
setbe %al
orb %cl, %al
cmpb $0x1, %al
jne 0x520b
movq %r14, %rdi
movq %r15, %rsi
callq 0xc034
cmpl $-0x1, (%rsp)
jne 0x51c9
jmp 0x520b
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::isFineInstance() const
bool Graph::isFineInstance() const {
    GraphTraversal graphTraversal(*this);
    bool fineInstance = false;
    while (graphTraversal.curNode != NONE) {
        uint32_t degree = getNodeDegree(graphTraversal.curNode);
        if (degree >= 4) {
            fineInstance = true;
        } else if (degree == 1) {
            return false;
        }
        getNextNode(graphTraversal);
    }
    return fineInstance;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
leaq 0x8(%rsp), %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xc034
xorl %ebp, %ebp
cmpl $-0x1, 0x8(%rsp)
je 0x5c14
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc98e
movb $0x1, %r15b
movb $0x1, %r12b
cmpl $0x3, %eax
ja 0x5bff
cmpl $0x1, %eax
jne 0x5bfc
xorl %r15d, %r15d
jmp 0x5c0d
movl %ebp, %r12d
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc034
movl %r12d, %ebp
testb %r15b, %r15b
jne 0x5bd5
xorl %ebp, %ebp
andb $0x1, %bpl
movl %ebp, %eax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::getGoodFunnel(unsigned int&, unsigned int&) const
bool Graph::getGoodFunnel(uint32_t &node1, uint32_t &node2) const {
    vector<Funnel> funnels;
    if (getFunnels(funnels)) {
        Funnel &funnel = funnels.back();
        node1 = funnel.a;
        node2 = funnel.v;
        //cout << "branching on good funnel ";
        //funnel.print();
        return true;
    } else {
        for (uint32_t i = 0 ; i < 2 ; i++) {
            for (auto &funnel: funnels) {
                uint32_t bDegree = getNodeDegree(funnel.b);
                uint32_t cDegree = getNodeDegree(funnel.c);
                if (!i && bDegree == 4 && cDegree == 4 || i && (bDegree == 4 || cDegree == 4)) {
                    node1 = funnel.a;
                    node2 = funnel.v;
                    //cout << "branching on good funnel ";
                    //funnel.print();
                    return true;
                }
            }
        }
    }
    return false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
xorps %xmm0, %xmm0
movq %rsp, %rsi
movaps %xmm0, (%rsi)
movq $0x0, 0x10(%rsi)
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x54d2
testb %al, %al
je 0x5c78
movq 0x8(%rsp), %r13
movl -0x14(%r13), %eax
movl %eax, (%r14)
addq $-0x4, %r13
movb $0x1, %bpl
jmp 0x5cfd
movq %r14, 0x18(%rsp)
movq %rbx, 0x20(%rsp)
xorl %ebx, %ebx
movb $0x1, %bpl
movq (%rsp), %r13
movq 0x8(%rsp), %r14
cmpq %r14, %r13
je 0x5cda
leaq 0x4(%r13), %rsi
movq %r15, %rdi
callq 0xc98e
movl %eax, %r12d
leaq 0x8(%r13), %rsi
movq %r15, %rdi
callq 0xc98e
testl %ebx, %ebx
setne %cl
sete %sil
cmpl $0x4, %r12d
sete %dl
andb %dl, %sil
cmpl $0x4, %eax
sete %al
testb %al, %sil
jne 0x5ce9
orb %al, %dl
andb %dl, %cl
jne 0x5ce9
addq $0x14, %r13
jmp 0x5c90
leal 0x1(%rbx), %eax
testl %ebx, %ebx
sete %bpl
movl %eax, %ebx
je 0x5c87
jmp 0x5d03
movl (%r13), %eax
movq 0x18(%rsp), %rcx
movl %eax, (%rcx)
addq $0x10, %r13
movq 0x20(%rsp), %rbx
movl (%r13), %eax
movl %eax, (%rbx)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x5d11
callq 0x21a0
andb $0x1, %bpl
movl %ebp, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5d2a
jmp 0x5d2a
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x5d3b
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::collectZeroDegreeNodes()
void Graph::collectZeroDegreeNodes() {
    for (uint32_t pos = 0 ; pos < nodeIndex.size() ; pos++) {
        if (!nodeIndex[pos].removed && !nodeIndex[pos].edges) {
            zeroDegreeNodes.push_back((!mapping ? pos : posToId->at(pos)));
            nodeIndex[pos].removed = true;
        }
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movl $0x0, 0x4(%rsp)
movq (%rdi), %rax
cmpq %rax, 0x8(%rdi)
je 0x708d
movq %rdi, %rbx
leaq 0x20(%rdi), %r14
xorl %esi, %esi
movabsq $-0x5555555555555555, %r15 # imm = 0xAAAAAAAAAAAAAAAB
leaq 0x4(%rsp), %r12
leaq (%rsi,%rsi,2), %rcx
cmpb $0x0, 0x8(%rax,%rcx,4)
jne 0x7068
leaq (%rax,%rcx,4), %rax
cmpl $0x0, 0x4(%rax)
jne 0x7068
cmpb $0x1, 0x3c(%rbx)
movq %r12, %rdx
jne 0x7038
movq 0x48(%rbx), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x7099
leaq (%rax,%rsi,4), %rdx
movq 0x28(%rbx), %rsi
cmpq 0x30(%rbx), %rsi
je 0x7050
movl (%rdx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x28(%rbx)
jmp 0x7058
movq %r14, %rdi
callq 0xdeac
movl 0x4(%rsp), %eax
movq (%rbx), %rcx
leaq (%rax,%rax,2), %rax
movb $0x1, 0x8(%rcx,%rax,4)
movl 0x4(%rsp), %esi
incl %esi
movl %esi, 0x4(%rsp)
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
imulq %r15, %rcx
cmpq %rsi, %rcx
ja 0x6fff
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x1373e(%rip), %rdi     # 0x1a7de
xorl %eax, %eax
callq 0x22a0
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::addPalmTreeArc(std::unordered_map<unsigned int, std::vector<unsigned int, std::allocator<unsigned int>>, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, std::vector<unsigned int, std::allocator<unsigned int>>>>>&, unsigned int const&, unsigned int const&)
void Graph::addPalmTreeArc(unordered_map<uint32_t, vector<uint32_t> > &palmTree, const uint32_t &node, const uint32_t &neighbor) {
    auto res = palmTree.find(node);
    if (res == palmTree.end()) {
        vector<uint32_t> tmp;
        tmp.push_back(neighbor);
        palmTree.insert({node, tmp});
    } else {
        res->second.push_back(neighbor);
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
movl (%rsi), %ecx
xorl %r12d, %r12d
movq %rcx, %rax
xorl %edx, %edx
divq 0x8(%rdi)
movq %rdx, %rsi
movq %r15, %rdx
callq 0xef5e
testq %rax, %rax
je 0x825b
movq (%rax), %r12
testq %r12, %r12
je 0x827f
movq 0x18(%r12), %rsi
cmpq 0x20(%r12), %rsi
je 0x82a9
movl (%r14), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x18(%r12)
jmp 0x830b
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
movq 0x8(%rsp), %rsi
testq %rsi, %rsi
je 0x82c3
movl (%r14), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rsp)
jmp 0x82ce
addq $0x10, %r12
movq %r12, %rdi
movq %r14, %rdx
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0xdeac
movq %rsp, %rdi
movq %r14, %rdx
callq 0xdeac
movl (%r15), %eax
leaq 0x20(%rsp), %rdi
movl %eax, -0x8(%rdi)
movq %rsp, %rsi
callq 0xbfb4
leaq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0xefa4
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x82fd
callq 0x21a0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x830b
callq 0x21a0
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
jmp 0x832d
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x8330
callq 0x21a0
jmp 0x8330
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x833e
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::printWithGraphTraversal(bool) const
void Graph::printWithGraphTraversal(bool direction) const {
    GraphTraversal graphTraversal(*this);
    while (graphTraversal.curNode != NONE) {
        while (graphTraversal.curEdgeOffset != NONE) {
            if (direction || !direction && graphTraversal.curNode < (*edgeBuffer)[graphTraversal.curEdgeOffset]) {
                cout << graphTraversal.curNode << "\t" << (*edgeBuffer)[graphTraversal.curEdgeOffset] << "\n";
            }
            getNextEdge(graphTraversal);
        }
        getNextNode(graphTraversal);
    }
    cout << "Zero degree nodes: \n";
    for (uint32_t i = 0 ; i < zeroDegreeNodes.size() ; i++) {
        cout << zeroDegreeNodes[i] << "\n";
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %esi, %ebp
movq %rdi, %rbx
movq %rsp, %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, (%r14)
je 0xb2c8
movq %rsp, %r14
leaq 0xf339(%rip), %r12      # 0x1a571
leaq 0xf347(%rip), %r13      # 0x1a586
movl 0x4(%rsp), %eax
cmpl $-0x1, %eax
je 0xb2b3
testb %bpl, %bpl
jne 0xb25e
movl (%rsp), %ecx
movq 0x18(%rbx), %rdx
movl %eax, %eax
movq (%rdx), %rdx
cmpl (%rdx,%rax,4), %ecx
jae 0xb2a6
movl (%rsp), %esi
movq 0x17d68(%rip), %rdi     # 0x22fd0
callq 0x2120
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x2200
movq 0x18(%rbx), %rax
movl 0x4(%rsp), %ecx
movq (%rax), %rax
movl (%rax,%rcx,4), %esi
movq %r15, %rdi
callq 0x2120
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x2200
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc4d8
jmp 0xb23f
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc034
cmpl $-0x1, (%rsp)
jne 0xb23f
movq 0x17d01(%rip), %rdi     # 0x22fd0
leaq 0xf29d(%rip), %rsi      # 0x1a573
movl $0x14, %edx
callq 0x2200
movq 0x20(%rbx), %rax
cmpq %rax, 0x28(%rbx)
je 0xb332
movl $0x1, %ebp
xorl %ecx, %ecx
movq 0x17cd8(%rip), %r14     # 0x22fd0
leaq 0xf287(%rip), %r15      # 0x1a586
movl (%rax,%rcx,4), %esi
movq %r14, %rdi
callq 0x2120
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x2200
movl %ebp, %ecx
movq 0x20(%rbx), %rax
movq 0x28(%rbx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
incl %ebp
cmpq %rcx, %rdx
ja 0xb2ff
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::parseNodeIDs(char*, unsigned int*, unsigned int*)
void Graph::parseNodeIDs(char *buf, uint32_t *sourceNode, uint32_t *targetNode) {
    uint32_t *node = sourceNode;
    for (int i = 0 ; i < 2 ; i++) {
        uint32_t id = 0;
        for (; *buf != ' ' && *buf != '\t' && *buf != '\n' && *buf != '\0' ; buf++) {
            id = id * 10 + (*buf - '0');
        }
        *node = id;
        node = targetNode;
        for (; *buf == ' ' || *buf == '\t' ; buf++);
    }
}

// Assembly:
xorl %ecx, %ecx
movabsq $0x100000601, %rax      # imm = 0x100000601
xorl %r8d, %r8d
movzbl (%rdi), %r9d
cmpq $0x20, %r9
ja 0xbbdf
btq %r9, %rax
jb 0xbbf4
movsbl %r9b, %r9d
leal (%r8,%r8,4), %r8d
leal (%r9,%r8,2), %r8d
addl $-0x30, %r8d
incq %rdi
jmp 0xbbcf
movl %r8d, (%rsi)
movzbl (%rdi), %esi
cmpl $0x20, %esi
je 0xbc04
cmpl $0x9, %esi
jne 0xbc09
incq %rdi
jmp 0xbbf7
leal 0x1(%rcx), %r8d
movq %rdx, %rsi
testl %ecx, %ecx
movl %r8d, %ecx
je 0xbbcc
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.cpp
// Function: Graph::fill(unsigned int const&, bool const&)
void Graph::fill(const uint32_t &size, const bool &checkIndependentSet) {
    //cout << "start missing nodes from " << nodeIndex.size() << " to " << size << endl;
    while (nodeIndex.size() < size) {
        nodeIndex.push_back(NodeInfo(edgeBuffer->size(), 0));
        if (!checkIndependentSet) {
            zeroDegreeNodes.push_back(nodeIndex.size()-1);
            nodeIndex[nodeIndex.size()-1].removed = true;
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movq 0x8(%rdi), %rsi
movq %rsi, %rax
subq (%rdi), %rax
sarq $0x2, %rax
movabsq $-0x5555555555555555, %rbp # imm = 0xAAAAAAAAAAAAAAAB
imulq %rbp, %rax
movl (%r14), %ecx
cmpq %rcx, %rax
jae 0xbd0a
movq %rdx, %rbx
movq %rdi, %r15
leaq 0x20(%rdi), %r12
leaq 0xc(%rsp), %r13
movq 0x18(%r15), %rax
movq 0x8(%rax), %rcx
subq (%rax), %rcx
shrq $0x2, %rcx
movl %ecx, 0xc(%rsp)
movl $0x0, 0x10(%rsp)
movb $0x0, 0x14(%rsp)
cmpq 0x10(%r15), %rsi
je 0xbc9c
movl 0x14(%rsp), %eax
movl %eax, 0x8(%rsi)
movq 0xc(%rsp), %rax
movq %rax, (%rsi)
addq $0xc, 0x8(%r15)
jmp 0xbca7
movq %r15, %rdi
movq %r13, %rdx
callq 0xe250
cmpb $0x0, (%rbx)
jne 0xbcec
movq 0x8(%r15), %rax
subq (%r15), %rax
shrq $0x2, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
decl %eax
movl %eax, 0xc(%rsp)
movq 0x28(%r15), %rsi
cmpq 0x30(%r15), %rsi
je 0xbcd9
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x28(%r15)
jmp 0xbce4
movq %r12, %rdi
movq %r13, %rdx
callq 0xfbfa
movq 0x8(%r15), %rax
movb $0x1, -0x4(%rax)
movq 0x8(%r15), %rsi
movq %rsi, %rax
subq (%r15), %rax
sarq $0x2, %rax
imulq %rbp, %rax
movl (%r14), %ecx
cmpq %rcx, %rax
jb 0xbc60
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getNextNode(Graph::GraphTraversal&) const
void getNextNode(GraphTraversal &graphTraversal) const {
        bool firstTime = true;
        uint32_t pos;
        if (graphTraversal.curNode == NONE) {
            pos = NONE;
        } else {
            pos = (!mapping ? graphTraversal.curNode : idToPos->at(graphTraversal.curNode));
        }
        while (firstTime || pos == NONE || !nodeIndex[pos].edges) {
            if (pos == NONE && nodeIndex.size() || pos != NONE && pos < nodeIndex.size() - 1) {
                pos = (pos == NONE ? 0 : pos+1);
                if (nodeIndex[pos].removed) {
                    continue;
                }
                graphTraversal.curNode = (!mapping ? pos : (*posToId)[pos]);
                uint32_t offset = getFirstValidNeighborOffset(pos);
                if ((graphTraversal.curEdgeOffset = offset) != NONE) {
                    firstTime = false;
                }
            }
            else {
                graphTraversal.curNode = NONE;
                graphTraversal.curEdgeOffset = NONE;
                break;
            }
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movl (%rsi), %eax
cmpl $-0x1, %eax
je 0xc063
cmpb $0x1, 0x3c(%r14)
jne 0xc068
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xda16
movl (%rax), %eax
jmp 0xc068
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
leaq 0x4(%rsp), %r15
movl %eax, (%r15)
movb $0x1, %bpl
movabsq $-0x5555555555555555, %r12 # imm = 0xAAAAAAAAAAAAAAAB
xorl %r13d, %r13d
movl 0x4(%rsp), %eax
movq (%r14), %rcx
movq 0x8(%r14), %rdx
movq %rdx, %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
imulq %r12, %rsi
decq %rsi
incl %eax
movl %eax, %edi
subl $0x1, %edi
setb %r8b
orb %bpl, %r8b
movl %edi, %edi
testb $0x1, %r8b
jne 0xc0be
leaq (%rdi,%rdi,2), %r8
cmpl $0x0, 0x4(%rcx,%r8,4)
jne 0xc123
testl %eax, %eax
je 0xc0c9
cmpq %rdi, %rsi
ja 0xc0ce
jmp 0xc11c
cmpq %rcx, %rdx
je 0xc11c
movl %eax, 0x4(%rsp)
movl %eax, %edi
leaq (%rdi,%rdi,2), %r8
incl %eax
cmpb $0x0, 0x8(%rcx,%r8,4)
jne 0xc09e
cmpb $0x1, 0x3c(%r14)
movq %r15, %rax
jne 0xc0fa
movq 0x48(%r14), %rax
shlq $0x2, %rdi
addq (%rax), %rdi
movq %rdi, %rax
movl (%rax), %eax
movl %eax, (%rbx)
movq %r14, %rdi
movq %r15, %rsi
callq 0xceda
movl %eax, 0x4(%rbx)
cmpl $-0x1, %eax
movzbl %bpl, %ebp
cmovnel %r13d, %ebp
jmp 0xc080
movq $-0x1, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getNextEdge(Graph::GraphTraversal&) const
void getNextEdge(GraphTraversal &graphTraversal) const {
        assert(graphTraversal.curNode != NONE && graphTraversal.curEdgeOffset != NONE);
        uint32_t pos = (!mapping ? graphTraversal.curNode : idToPos->at(graphTraversal.curNode));
        uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
        graphTraversal.curEdgeOffset++;
        bool validNeighbor = false;
        for ( ; graphTraversal.curEdgeOffset  < nextNodeOffset ; graphTraversal.curEdgeOffset++) {
            uint32_t nPos = (!mapping ? (*edgeBuffer)[graphTraversal.curEdgeOffset] : idToPos->at((*edgeBuffer)[graphTraversal.curEdgeOffset]));
            if (!nodeIndex[nPos].removed) {
                validNeighbor = true;
                break;
            }
        }
        if (!validNeighbor) {
            graphTraversal.curEdgeOffset = NONE;
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl (%rsi), %eax
cmpl $-0x1, %eax
je 0xc5c2
movq %rsi, %rbx
cmpl $-0x1, 0x4(%rsi)
je 0xc5c2
movq %rdi, %r14
cmpb $0x1, 0x3c(%rdi)
jne 0xc50e
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xda16
movl (%rax), %eax
movl %eax, %edx
movq (%r14), %rcx
movq 0x8(%r14), %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
movabsq $-0x5555555555555555, %rdi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rsi, %rdi
decq %rdi
cmpq %rdx, %rdi
jne 0xc545
movq 0x18(%r14), %rax
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
jmp 0xc54f
incl %eax
leaq (%rax,%rax,2), %rax
movl (%rcx,%rax,4), %r15d
xorl %ebp, %ebp
movl 0x4(%rbx), %eax
incl %eax
movl %eax, 0x4(%rbx)
cmpl %r15d, %eax
jae 0xc5aa
cmpb $0x0, 0x3c(%r14)
movl %eax, %eax
je 0xc580
movq 0x18(%r14), %rcx
movq 0x40(%r14), %rdi
shlq $0x2, %rax
addq (%rcx), %rax
movq %rax, %rsi
callq 0xda16
jmp 0xc58b
movq 0x18(%r14), %rcx
shlq $0x2, %rax
addq (%rcx), %rax
movl (%rax), %eax
movq (%r14), %rcx
leaq (%rax,%rax,2), %rax
cmpb $0x0, 0x8(%rcx,%rax,4)
jne 0xc5a4
movl $0x1, %ebp
jne 0xc551
jmp 0xc5aa
movzbl %bpl, %ebp
jne 0xc551
testb $0x1, %bpl
jne 0xc5b7
movl $0xffffffff, 0x4(%rbx)  # imm = 0xFFFFFFFF
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0xe0b7(%rip), %rdi      # 0x1a680
leaq 0xe0f7(%rip), %rsi      # 0x1a6c7
leaq 0xe0fe(%rip), %rcx      # 0x1a6d5
movl $0x136, %edx            # imm = 0x136
callq 0x2110
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getOuterNeighbor(unsigned int const&, unsigned int const&, unsigned int&, bool&) const
void getOuterNeighbor(const uint32_t &node, const uint32_t &neighbor, uint32_t &outerNeighbor, bool &exactlyOne) const {
        outerNeighbor = NONE;
        exactlyOne = false;
        bool found = false;
        GraphTraversal graphTraversal(*this, neighbor);
        while (graphTraversal.curEdgeOffset != NONE) {
            uint32_t extendedGrandchild = (*edgeBuffer)[graphTraversal.curEdgeOffset];
            if (extendedGrandchild != node && !edgeExists(extendedGrandchild, node)) {
                if (!found) {
                    found = true;
                    outerNeighbor = extendedGrandchild;
                } else {
                    return;
                }
            }
            getNextEdge(graphTraversal);
        }
        if (found) {
            exactlyOne = true;
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %r15
movq %rdi, %r12
movq %rcx, 0x18(%rsp)
movl $0xffffffff, (%rcx)     # imm = 0xFFFFFFFF
movq %r8, 0x10(%rsp)
movb $0x0, (%r8)
leaq 0x20(%rsp), %r13
movq %rdx, %rsi
movq %r13, %rdx
callq 0xc132
xorl %ebx, %ebx
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
leaq 0xc(%rsp), %rbp
movl 0x24(%rsp), %eax
cmpq %r14, %rax
je 0xc972
movq 0x18(%r12), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0xc(%rsp)
cmpl (%r15), %eax
je 0xc95f
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0xc5e2
cmpl $-0x1, %eax
jne 0xc95f
testb $0x1, %bl
je 0xc952
xorl %eax, %eax
jmp 0xc96c
movl 0xc(%rsp), %eax
movq 0x18(%rsp), %rcx
movl %eax, (%rcx)
movb $0x1, %bl
movq %r12, %rdi
movq %r13, %rsi
callq 0xc4d8
movb $0x1, %al
testb %al, %al
jne 0xc919
jmp 0xc97f
testb $0x1, %bl
je 0xc97f
movq 0x10(%rsp), %rax
movb $0x1, (%rax)
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::Traversal::Traversal(unsigned int const&, Graph const&, Graph::Traversal*)
Traversal(const uint32_t &node, const Graph &graph, Traversal *previous = NULL) {
            sourceNode = node;
            if (previous != NULL) {
                auto it = previous->set.begin();
                std::advance(it, previous->index);
                while (++it != previous->set.end()) {
                    set.insert(*it);
                }
                set.erase(node);
            }
            graph.gatherNeighbors(node, set);
            if (!set.size()) {
                index = NONE;
            } else {
                index = 0;
            }
        }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r12
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x8(%rdi), %rax
movl $0x0, 0x8(%rdi)
xorl %ecx, %ecx
movq %rcx, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movq %rax, 0x20(%rdi)
movq %rcx, 0x28(%rdi)
movl (%rsi), %eax
movl %eax, 0x34(%rdi)
testq %r12, %r12
je 0xcaae
movq 0x18(%r12), %r13
movl 0x30(%r12), %ebp
testq %rbp, %rbp
je 0xca73
movq %r13, %rdi
callq 0x2210
movq %rax, %r13
decq %rbp
jne 0xca63
addq $0x8, %r12
movq %r13, %rdi
callq 0x2210
cmpq %r12, %rax
je 0xca98
movq %rax, %r13
movq %rax, %rsi
addq $0x20, %rsi
movq %rbx, %rdi
callq 0xdbc6
jmp 0xca77
movq %rbx, %rdi
movq %r14, %rsi
callq 0xd216
movq %rbx, %rdi
movq %rax, %rsi
callq 0xd28e
leaq 0x4(%rsp), %r8
movl $0xffffffff, (%r8)      # imm = 0xFFFFFFFF
xorl %r12d, %r12d
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0xd05a
cmpq $0x1, 0x28(%rbx)
sbbl %r12d, %r12d
movl %r12d, 0x30(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xcaec
jmp 0xcaec
movq %rax, %r14
movq %rbx, %rdi
callq 0xcfae
movq %r14, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O1/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::advance(std::vector<Graph::Traversal*, std::allocator<Graph::Traversal*>>&, Graph::Traversal**, Graph const&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int>>&)
static bool advance(std::vector<Traversal *> &frontier, Traversal **traversal, const Graph &graph, std::unordered_set<uint32_t> &set) {
        bool validNeighbor = false;
        while(!validNeighbor) {
            *traversal = frontier.back();
            (*traversal)->next();
            if ((*traversal)->index != NONE) {
                validNeighbor = true;
            } else {
                set.erase((*traversal)->sourceNode);
                delete *traversal;
                frontier.pop_back();
                if (frontier.empty()) {
                    return false;
                }
            }
        }
        return true;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, (%rsp)
movq %rsi, %r14
movq %rdi, %r15
xorl %ebp, %ebp
movl $0xffffffff, %r13d      # imm = 0xFFFFFFFF
xorl %ebx, %ebx
movq 0x8(%r15), %rax
movq -0x8(%rax), %rax
movq %rax, (%r14)
movl 0x30(%rax), %ecx
incl %ecx
cmpq %rcx, 0x28(%rax)
cmovel %r13d, %ecx
movl %ecx, 0x30(%rax)
movq (%r14), %rsi
movb $0x1, %al
cmpl $-0x1, 0x30(%rsi)
jne 0xcb80
addq $0x34, %rsi
movq (%rsp), %rdi
callq 0xda9e
movq (%r14), %r12
testq %r12, %r12
je 0xcb6a
movq %r12, %rdi
callq 0xcfae
movq %r12, %rdi
callq 0x21a0
movq (%r15), %rcx
movq 0x8(%r15), %rdx
addq $-0x8, %rdx
movq %rdx, 0x8(%r15)
movl %ebx, %eax
cmpq %rdx, %rcx
je 0xcb88
movl %eax, %ebp
movl %eax, %ebx
testb $0x1, %al
je 0xcb1f
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop