LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O3/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 0x4095
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 0xc21c
testq %rbx, %rbx
je 0x4055
cmpl $-0x1, 0x10(%rsp)
je 0x4092
cmpb $0x1, 0xf(%rsp)
jne 0x407b
movq %r15, 0x20(%rsp)
movq %r15, %rdi
movq %r14, %rsi
leaq 0x20(%rsp), %rdx
callq 0xd538
movq 0x18(%rsp), %rax
cmpb $0x1, (%rax)
je 0x4095
movq %r13, %rdi
movq %r12, %rsi
callq 0xbe2e
movl 0x4(%r12), %eax
cmpl $-0x1, %eax
jne 0x4023
jmp 0x4095
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_O3/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 0x4164
movq %rdi, %rbx
movq %rsp, %rsi
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0xba5a
cmpl $-0x1, (%r14)
je 0x4161
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 0x2cca
movq 0x28(%rsp), %rax
movl %ebp, %ecx
cmpq %rcx, %rax
jbe 0x4147
movl 0x8(%rsp), %ecx
movl %ecx, (%rsp)
movl %eax, %ebp
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb94a
movq %r15, %rdi
callq 0xc950
cmpl $-0x1, 0x8(%rsp)
jne 0x40f3
movl (%rsp), %esi
movl %esi, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4177
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0xc950
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O3/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 0x41e2
cmpl $-0x1, %eax
jne 0x41d8
movq %rbx, %rdi
callq 0x43b2
cmpl $-0x1, %eax
jne 0x41d8
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 0x4594
movl (%r14), %eax
cmpl %ebp, %eax
jne 0x41d8
movl 0x8(%rsp), %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O3/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 $0x48, %rsp
movq %rdi, %rbx
movq %rsp, %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xb94a
cmpl $-0x1, (%r14)
je 0x4369
movq %rsp, %r14
leaq 0xc(%rsp), %r13
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc2d2
cmpl $0x4, %eax
jne 0x4354
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
movl $0xffffffff, 0x10(%rsp) # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x30(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x10(%rsp), %r8
callq 0xc092
movq 0x30(%rsp), %r14
movq 0x38(%rsp), %r15
cmpq %r15, %r14
je 0x4332
movl (%r14), %eax
movl %eax, 0xc(%rsp)
movq %rbx, %rdi
movq %r13, %rsi
callq 0xc2d2
cmpl $0x3, %eax
jne 0x4319
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movl $0xffffffff, 0x8(%rsp)  # imm = 0xFFFFFFFF
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x10(%rsp), %rdx
xorl %ecx, %ecx
leaq 0x8(%rsp), %r8
callq 0xc092
movq 0x10(%rsp), %rsi
leaq 0x4(%rsi), %rdx
movq %rbx, %rdi
callq 0xbf3a
cmpl $-0x1, %eax
jne 0x42ff
movq 0x10(%rsp), %rsi
leaq 0x8(%rsi), %rdx
movq %rbx, %rdi
callq 0xbf3a
cmpl $-0x1, %eax
jne 0x42ff
movq 0x10(%rsp), %rdx
leaq 0x4(%rdx), %rsi
addq $0x8, %rdx
movq %rbx, %rdi
callq 0xbf3a
cmpl $-0x1, %eax
je 0x4328
movl (%rsp), %ebp
xorl %r12d, %r12d
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4314
callq 0x21a0
testb %r12b, %r12b
je 0x4337
addq $0x4, %r14
cmpq %r15, %r14
jne 0x426e
jmp 0x432d
movb $0x1, %r12b
jmp 0x4305
movb $0x1, %r15b
jmp 0x433a
movb $0x1, %r15b
jmp 0x433f
xorl %r15d, %r15d
movq 0x30(%rsp), %r14
testq %r14, %r14
je 0x434c
movq %r14, %rdi
callq 0x21a0
testb %r15b, %r15b
movq %rsp, %r14
je 0x436e
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb94a
cmpl $-0x1, (%rsp)
jne 0x4217
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movl %ebp, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x4397
jmp 0x4383
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x439a
callq 0x21a0
jmp 0x439a
movq %rax, %rbx
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x43a9
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O3/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
movb 0x3c(%rdi), %cl
movq %rsi, %rax
cmpb $0x1, %cl
jne 0x4c8a
movq 0x40(%r12), %rdi
movq %r13, %rsi
callq 0xd37a
testq %rax, %rax
je 0x4da0
addq $0xc, %rax
movb 0x3c(%r12), %cl
movl (%rax), %ebx
movq %r15, %rax
testb $0x1, %cl
je 0x4cae
movq 0x40(%r12), %rdi
movq %r15, %rsi
callq 0xd37a
testq %rax, %rax
je 0x4da0
addq $0xc, %rax
movq (%r12), %rcx
leaq (%rbx,%rbx,2), %rdx
cmpb $0x0, 0x8(%rcx,%rdx,4)
jne 0x4d81
movl (%rax), %eax
leaq (%rax,%rax,2), %rax
cmpb $0x1, 0x8(%rcx,%rax,4)
je 0x4d81
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 0xc092
movq 0x10(%rsp), %r13
movq 0x18(%rsp), %rbp
cmpq %rbp, %r13
je 0x4d65
xorl %ebx, %ebx
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0xbf3a
cmpl $-0x1, %eax
je 0x4d57
movq 0x8(%r14), %rsi
cmpq 0x10(%r14), %rsi
je 0x4d3c
movl (%r13), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r14)
jmp 0x4d47
movq %r14, %rdi
movq %r13, %rdx
callq 0xd7b4
movq (%rsp), %rax
movl (%rax), %eax
testl %eax, %eax
je 0x4d57
incl %ebx
cmpl %eax, %ebx
je 0x4d60
addq $0x4, %r13
cmpq %rbp, %r13
jne 0x4d0f
movq 0x10(%rsp), %r13
testq %r13, %r13
je 0x4d72
movq %r13, %rdi
callq 0x21a0
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x14406(%rip), %rdi     # 0x1918e
leaq 0x142b3(%rip), %rsi     # 0x19042
leaq 0x1442d(%rip), %rcx     # 0x191c3
movl $0x463, %edx            # imm = 0x463
callq 0x2110
leaq 0x14a29(%rip), %rdi     # 0x197d0
callq 0x2280
jmp 0x4dae
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x4dc0
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O3/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 0xb94a
cmpl $-0x1, (%r15)
je 0x52ed
xorl %r12d, %r12d
movq %rsp, %r15
xorl %ebp, %ebp
movl %ebp, %r13d
movq %r14, %rdi
movq %r15, %rsi
callq 0xc2d2
movl %eax, %ebp
subl $0x2, %ebp
cmovbl %r12d, %ebp
addl %r13d, %ebp
movl (%rbx), %eax
cmpl $-0x1, %eax
setne %cl
cmpl %eax, %ebp
seta %al
testb %al, %cl
jne 0x52ef
movq %r14, %rdi
movq %r15, %rsi
callq 0xb94a
cmpl $-0x1, (%rsp)
jne 0x52af
jmp 0x52ef
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_O3/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 %rbx
pushq %rax
movq %rdi, %rbx
movq %rsp, %r14
movq $-0x1, (%r14)
movq %r14, %rsi
callq 0xb94a
cmpl $-0x1, (%r14)
je 0x5cc1
xorl %r15d, %r15d
movq %rsp, %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc2d2
movb $0x1, %bpl
cmpl $0x3, %eax
ja 0x5cab
movl %r15d, %ebp
cmpl $0x1, %eax
je 0x5cc1
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb94a
cmpl $-0x1, (%rsp)
movl %ebp, %r15d
jne 0x5c90
jmp 0x5cc3
xorl %ebp, %ebp
andb $0x1, %bpl
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O3/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, %r14
movq %rsi, %r12
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 0x557e
testb %al, %al
je 0x5d1e
movq 0x8(%rsp), %rbx
movl -0x14(%rbx), %eax
movl %eax, (%r12)
addq $-0x4, %rbx
jmp 0x5d9d
movq %r12, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movb $0x1, %r12b
xorl %r13d, %r13d
movq (%rsp), %rbx
movq 0x8(%rsp), %r14
cmpq %r14, %rbx
je 0x5d78
leaq 0x4(%rbx), %rsi
movq %r15, %rdi
callq 0xc2d2
movl %eax, %ebp
leaq 0x8(%rbx), %rsi
movq %r15, %rdi
callq 0xc2d2
cmpl $0x4, %ebp
sete %cl
movl %r12d, %edx
andb %cl, %dl
cmpl $0x4, %eax
sete %al
testb %al, %dl
jne 0x5d8b
orb %al, %cl
andb %r13b, %cl
jne 0x5d8b
addq $0x14, %rbx
jmp 0x5d37
movb $0x1, %r13b
xorl %ebp, %ebp
testb $0x1, %r12b
movl $0x0, %r12d
jne 0x5d2e
jmp 0x5da5
movl (%rbx), %eax
movq 0x18(%rsp), %rcx
movl %eax, (%rcx)
addq $0x10, %rbx
movq 0x20(%rsp), %r14
movl (%rbx), %eax
movl %eax, (%r14)
movb $0x1, %bpl
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x5db3
callq 0x21a0
movl %ebp, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5dc8
jmp 0x5dc8
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x5dd9
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O3/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
movq 0x8(%rdi), %rcx
cmpq %rax, %rcx
je 0x7068
movq %rdi, %rbx
leaq 0x20(%rdi), %r14
xorl %esi, %esi
movabsq $-0x5555555555555555, %r15 # imm = 0xAAAAAAAAAAAAAAAB
leaq 0x4(%rsp), %r12
leaq (%rsi,%rsi,2), %rdx
cmpb $0x0, 0x8(%rax,%rdx,4)
jne 0x704b
leaq (%rax,%rdx,4), %rdx
cmpl $0x0, 0x4(%rdx)
jne 0x704b
cmpb $0x1, 0x3c(%rbx)
movq %r12, %rdx
jne 0x7017
movq 0x48(%rbx), %rdx
movq (%rdx), %rdi
movq 0x8(%rdx), %rdx
subq %rdi, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0x7074
leaq (%rdi,%rsi,4), %rdx
movq 0x28(%rbx), %rsi
cmpq 0x30(%rbx), %rsi
je 0x702f
movl (%rdx), %edx
movl %edx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x28(%rbx)
jmp 0x703e
movq %r14, %rdi
callq 0xd7b4
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
movl 0x4(%rsp), %esi
leaq (%rsi,%rsi,2), %rdx
movb $0x1, 0x8(%rax,%rdx,4)
incl %esi
movl %esi, 0x4(%rsp)
movq %rcx, %rdx
subq %rax, %rdx
sarq $0x2, %rdx
imulq %r15, %rdx
cmpq %rsi, %rdx
ja 0x6fde
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
leaq 0x12763(%rip), %rdi     # 0x197de
xorl %eax, %eax
callq 0x22a0
// File: /workspace/github_cpp_makefile_star2_O3/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 %rbx
subq $0x40, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
callq 0xe88e
testq %rax, %rax
je 0x8123
movq 0x18(%rax), %rsi
cmpq 0x20(%rax), %rsi
je 0x8185
movl (%r14), %ecx
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x18(%rax)
jmp 0x817b
xorps %xmm0, %xmm0
movq %rsp, %rdi
movaps %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
xorl %esi, %esi
movq %r14, %rdx
callq 0xd7b4
movl (%r15), %eax
leaq 0x28(%rsp), %rdi
movl %eax, -0x8(%rdi)
movq %rsp, %rsi
callq 0xb8ca
leaq 0x20(%rsp), %rsi
movq %rbx, %rdi
callq 0xe8ea
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x816d
callq 0x21a0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x817b
callq 0x21a0
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
retq
addq $0x10, %rax
movq %rax, %rdi
movq %r14, %rdx
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
jmp 0xd7b4
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x81b6
callq 0x21a0
jmp 0x81b6
jmp 0x81b3
movq %rax, %rbx
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x81c4
callq 0x21a0
movq %rbx, %rdi
callq 0x2320
// File: /workspace/github_cpp_makefile_star2_O3/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 0xb94a
cmpl $-0x1, (%r14)
je 0xac45
movq %rsp, %r14
leaq 0xe9b9(%rip), %r12      # 0x19571
leaq 0xe9c7(%rip), %r13      # 0x19586
movl 0x4(%rsp), %eax
cmpl $-0x1, %eax
je 0xac30
movl (%rsp), %esi
testb %bpl, %bpl
jne 0xabde
movq 0x18(%rbx), %rcx
movl %eax, %eax
movq (%rcx), %rcx
cmpl (%rcx,%rax,4), %esi
jae 0xac23
movq 0x173eb(%rip), %rdi     # 0x21fd0
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 0xbe2e
jmp 0xabbf
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb94a
cmpl $-0x1, (%rsp)
jne 0xabbf
movq 0x17384(%rip), %rdi     # 0x21fd0
leaq 0xe920(%rip), %rsi      # 0x19573
movl $0x14, %edx
callq 0x2200
movq 0x20(%rbx), %rax
cmpq %rax, 0x28(%rbx)
je 0xacaf
movl $0x1, %ebp
xorl %ecx, %ecx
movq 0x1735b(%rip), %r14     # 0x21fd0
leaq 0xe90a(%rip), %r15      # 0x19586
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 0xac7c
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O3/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:
movb $0x1, %cl
movabsq $0x100000601, %rax      # imm = 0x100000601
xorl %r8d, %r8d
movzbl (%rdi), %r9d
cmpq $0x20, %r9
ja 0xb577
btq %r9, %rax
jb 0xb58c
movsbl %r9b, %r9d
leal (%r8,%r8,4), %r8d
leal (%r9,%r8,2), %r8d
addl $-0x30, %r8d
incq %rdi
jmp 0xb567
movl %r8d, (%rsi)
movzbl (%rdi), %esi
cmpl $0x20, %esi
je 0xb59c
cmpl $0x9, %esi
jne 0xb5a1
incq %rdi
jmp 0xb58f
movq %rdx, %rsi
testb $0x1, %cl
movl $0x0, %ecx
jne 0xb564
retq
nop
// File: /workspace/github_cpp_makefile_star2_O3/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 0xb6bd
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 0xb63b
movl 0x14(%rsp), %eax
movl %eax, 0x8(%rsi)
movq 0xc(%rsp), %rax
movq %rax, (%rsi)
movq 0x8(%r15), %rsi
addq $0xc, %rsi
movq %rsi, 0x8(%r15)
jmp 0xb64a
movq %r15, %rdi
movq %r13, %rdx
callq 0xdb48
movq 0x8(%r15), %rsi
movq (%r15), %rdx
cmpb $0x1, (%rbx)
jne 0xb65a
movq %rsi, %rcx
subq %rdx, %rcx
jmp 0xb6a9
movq %rsi, %rcx
subq %rdx, %rcx
movq %rcx, %rax
shrq $0x2, %rax
imull $0xaaaaaaab, %eax, %edi # imm = 0xAAAAAAAB
decl %edi
movl %edi, 0xc(%rsp)
movq 0x28(%r15), %rax
cmpq 0x30(%r15), %rax
je 0xb689
movl %edi, (%rax)
addq $0x4, %rax
movq %rax, 0x28(%r15)
jmp 0xb6a4
movq %r12, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0xf5ac
movq (%r15), %rdx
movq 0x8(%r15), %rsi
movq %rsi, %rcx
subq %rdx, %rcx
movb $0x1, -0x4(%rdx,%rcx)
sarq $0x2, %rcx
imulq %rbp, %rcx
movl (%r14), %eax
cmpq %rax, %rcx
jb 0xb5f8
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O3/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 %r12
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movl (%rsi), %eax
cmpl $-0x1, %eax
je 0xb984
cmpb $0x1, 0x3c(%r14)
jne 0xb989
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xd37a
testq %rax, %rax
je 0xba4d
movl 0xc(%rax), %eax
jmp 0xb989
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
leaq 0xc(%rsp), %r15
movl %eax, (%r15)
movb $0x1, %bpl
movabsq $-0x5555555555555555, %r12 # imm = 0xAAAAAAAAAAAAAAAB
movq (%r14), %rcx
movq 0x8(%r14), %rdx
incl %eax
movq %rdx, %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
imulq %r12, %rsi
decq %rsi
movl %eax, %edi
subl $0x1, %edi
setb %r8b
orb %bpl, %r8b
testb $0x1, %r8b
je 0xb9d2
testl %eax, %eax
je 0xb9fb
movl %edi, %edi
jmp 0xb9e0
movl %edi, %edi
leaq (%rdi,%rdi,2), %r8
cmpl $0x0, 0x4(%rcx,%r8,4)
jne 0xba40
cmpq %rdi, %rsi
jbe 0xba39
movl %eax, 0xc(%rsp)
movl %eax, %edi
leaq (%rdi,%rdi,2), %r8
incl %eax
cmpb $0x0, 0x8(%rcx,%r8,4)
jne 0xb9b8
jmp 0xba02
cmpq %rcx, %rdx
jne 0xb9e5
jmp 0xba39
cmpb $0x1, 0x3c(%r14)
jne 0xba15
movq 0x48(%r14), %rax
movq (%rax), %rax
movl (%rax,%rdi,4), %eax
jmp 0xba17
decl %eax
movl %eax, (%rbx)
movq %r14, %rdi
movq %r15, %rsi
callq 0xc83a
movl %eax, 0x4(%rbx)
cmpl $-0x1, %eax
sete %al
andb %al, %bpl
movl 0xc(%rsp), %eax
jmp 0xb99e
movq $-0x1, (%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0xdd7c(%rip), %rdi      # 0x197d0
callq 0x2280
nop
// File: /workspace/github_cpp_makefile_star2_O3/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 %r15
pushq %r14
pushq %rbx
movl (%rsi), %eax
cmpl $-0x1, %eax
je 0xbf1b
movq %rsi, %rbx
cmpl $-0x1, 0x4(%rsi)
je 0xbf1b
movq %rdi, %r14
cmpb $0x1, 0x3c(%rdi)
jne 0xbe6c
movq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0xd37a
testq %rax, %rax
je 0xbf0f
movl 0xc(%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 0xbea3
movq 0x18(%r14), %rax
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
jmp 0xbead
incl %eax
leaq (%rax,%rax,2), %rax
movl (%rcx,%rax,4), %r15d
movl 0x4(%rbx), %eax
incl %eax
movl %eax, 0x4(%rbx)
cmpl %r15d, %eax
jae 0xbf02
cmpb $0x0, 0x3c(%r14)
movl %eax, %eax
je 0xbee8
movq 0x18(%r14), %rcx
movq 0x40(%r14), %rdi
shlq $0x2, %rax
addq (%rcx), %rax
movq %rax, %rsi
callq 0xd37a
testq %rax, %rax
je 0xbf0f
addq $0xc, %rax
movq (%r14), %rcx
jmp 0xbef3
movq 0x18(%r14), %rdx
shlq $0x2, %rax
addq (%rdx), %rax
movl (%rax), %eax
leaq (%rax,%rax,2), %rax
cmpb $0x0, 0x8(%rcx,%rax,4)
jne 0xbead
jmp 0xbf09
movl $0xffffffff, 0x4(%rbx)  # imm = 0xFFFFFFFF
popq %rbx
popq %r14
popq %r15
retq
leaq 0xd8ba(%rip), %rdi      # 0x197d0
callq 0x2280
leaq 0xd75e(%rip), %rdi      # 0x19680
leaq 0xd79e(%rip), %rsi      # 0x196c7
leaq 0xd7a5(%rip), %rcx      # 0x196d5
movl $0x136, %edx            # imm = 0x136
callq 0x2110
// File: /workspace/github_cpp_makefile_star2_O3/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 $0x18, %rsp
movq %r8, %rbx
movq %rcx, %r14
movq %rsi, %r15
movq %rdi, %r12
movl $0xffffffff, (%rcx)     # imm = 0xFFFFFFFF
movb $0x0, (%r8)
leaq 0x8(%rsp), %r13
movq %rdx, %rsi
movq %r13, %rdx
callq 0xba5a
movl 0x4(%r13), %eax
cmpl $-0x1, %eax
je 0xc2c2
movq %rbx, 0x10(%rsp)
xorl %ebx, %ebx
leaq 0x8(%rsp), %r13
leaq 0x4(%rsp), %rbp
movq 0x18(%r12), %rcx
movl %eax, %eax
movq (%rcx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0x4(%rsp)
cmpl (%r15), %eax
je 0xc2a1
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0xbf3a
cmpl $-0x1, %eax
jne 0xc2a1
testb $0x1, %bl
jne 0xc2c2
movl 0x4(%rsp), %eax
movl %eax, (%r14)
movb $0x1, %bl
movq %r12, %rdi
movq %r13, %rsi
callq 0xbe2e
movl 0xc(%rsp), %eax
cmpl $-0x1, %eax
jne 0xc26a
testb $0x1, %bl
movq 0x10(%rsp), %rax
je 0xc2c2
movb $0x1, (%rax)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O3/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 0xc408
movq 0x18(%r12), %r13
movl 0x30(%r12), %ebp
testq %rbp, %rbp
je 0xc3cd
movq %r13, %rdi
callq 0x2210
movq %rax, %r13
decq %rbp
jne 0xc3bd
addq $0x8, %r12
movq %r13, %rdi
callq 0x2210
cmpq %r12, %rax
je 0xc3f2
movq %rax, %r13
movq %rax, %rsi
addq $0x20, %rsi
movq %rbx, %rdi
callq 0xd4c0
jmp 0xc3d1
movq %rbx, %rdi
movq %r14, %rsi
callq 0xcb50
movq %rbx, %rdi
movq %rax, %rsi
callq 0xcbce
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 0xc9b2
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 0xc446
jmp 0xc446
movq %rax, %r14
movq %rbx, %rdi
callq 0xc906
movq %r14, %rdi
callq 0x2320
nop
// File: /workspace/github_cpp_makefile_star2_O3/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, %rbx
movq %rsi, %r14
movq %rdi, %r15
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movq 0x8(%r15), %rax
movq -0x8(%rax), %rax
movq %rax, (%r14)
movl 0x30(%rax), %ecx
incl %ecx
cmpq %rcx, 0x28(%rax)
cmovel %ebp, %ecx
movl %ecx, 0x30(%rax)
movq (%r14), %rsi
movl 0x30(%rsi), %r13d
cmpl $-0x1, %r13d
jne 0xc4d2
addq $0x34, %rsi
movq %rbx, %rdi
callq 0xd3d6
movq (%r14), %r12
testq %r12, %r12
je 0xc4b6
movq %r12, %rdi
callq 0xc906
movq %r12, %rdi
callq 0x21a0
movq (%r15), %rax
movq 0x8(%r15), %rcx
addq $-0x8, %rcx
movq %rcx, 0x8(%r15)
cmpq %rcx, %rax
jne 0xc473
cmpl $-0x1, %r13d
setne %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: bool Graph::gatherNeighborsWithRemoved<std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int>>, std::vector<unsigned int, std::allocator<unsigned int>>>(unsigned int const&, std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int>>&, std::vector<unsigned int, std::allocator<unsigned int>>&) const
bool gatherNeighborsWithRemoved(const uint32_t &node, Container &neighbors, ContainerRemoved &removedNeighbors) const {
        uint32_t pos = (!mapping ? node : idToPos->at(node));
        uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
        for (uint32_t offset = nodeIndex[pos].offset ; offset < nextNodeOffset ; offset++) {
            uint32_t nPos = (!mapping ? (*edgeBuffer)[offset] : idToPos->at((*edgeBuffer)[offset]));
            if (!nodeIndex[nPos].removed) {
                neighbors.insert(neighbors.end(), (*edgeBuffer)[offset]);
            } else {
                removedNeighbors.insert(removedNeighbors.end(), (*edgeBuffer)[offset]);
            }
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rdi, %r15
cmpb $0x1, 0x3c(%rdi)
jne 0xc523
movq 0x40(%r15), %rdi
callq 0xd37a
testq %rax, %rax
jne 0xc51c
leaq 0xd2b9(%rip), %rdi      # 0x197d0
callq 0x2280
movq %rax, %rsi
addq $0xc, %rsi
movl (%rsi), %eax
movq (%r15), %rcx
leaq (%rax,%rax,2), %rax
movl (%rcx,%rax,4), %ebp
leaq 0x8(%r14), %r12
shlq $0x2, %rbp
movq %rsp, %r13
cmpb $0x0, 0x3c(%r15)
je 0xc55f
movq 0x18(%r15), %rax
movq 0x40(%r15), %rdi
movq (%rax), %rsi
addq %rbp, %rsi
callq 0xd37a
testq %rax, %rax
je 0xc510
addq $0xc, %rax
jmp 0xc569
movq 0x18(%r15), %rax
movq (%rax), %rax
addq %rbp, %rax
movl (%rax), %eax
movq (%r15), %rcx
leaq (%rax,%rax,2), %rax
cmpb $0x0, 0x8(%rcx,%rax,4)
je 0xc591
movq 0x8(%rbx), %rsi
movq 0x18(%r15), %rax
movq (%rax), %rdx
addq %rbp, %rdx
movq %rbx, %rdi
callq 0xddfa
jmp 0xc5ad
movq 0x18(%r15), %rax
movq (%rax), %rdx
addq %rbp, %rdx
movq %r14, (%rsp)
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rcx
callq 0xcc6e
addq $0x4, %rbp
jmp 0xc53a
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Graph.hpp
// Function: Graph::getFirstValidNeighborOffset(unsigned int const&) const
uint32_t getFirstValidNeighborOffset(const uint32_t &pos) const {
        bool validNeighbor = false;
        uint32_t offset = nodeIndex[pos].offset;
        uint32_t nextNodeOffset = (pos == nodeIndex.size()-1 ? edgeBuffer->size() : nodeIndex[pos+1].offset);
        for ( ; offset < nextNodeOffset ; offset++) {
            uint32_t nPos = (!mapping ? (*edgeBuffer)[offset] : idToPos->at((*edgeBuffer)[offset]));
            if (!nodeIndex[nPos].removed) {
                validNeighbor = true;
                break;
            }
        }
        return (validNeighbor ? offset : NONE);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
movl (%rsi), %eax
movq (%rdi), %rcx
movq 0x8(%rdi), %rdx
leaq (%rax,%rax,2), %rsi
movl (%rcx,%rsi,4), %r14d
subq %rcx, %rdx
sarq $0x2, %rdx
movabsq $-0x5555555555555555, %rsi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rsi
decq %rsi
cmpq %rax, %rsi
jne 0xc884
movq 0x18(%rbx), %rax
movq 0x8(%rax), %r15
subq (%rax), %r15
shrq $0x2, %r15
jmp 0xc88e
incl %eax
leaq (%rax,%rax,2), %rax
movl (%rcx,%rax,4), %r15d
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
cmpl %r15d, %r14d
jae 0xc8ef
leaq (,%r14,4), %r12
cmpb $0x0, 0x3c(%rbx)
je 0xc8c7
movq 0x18(%rbx), %rax
movq 0x40(%rbx), %rdi
movq (%rax), %rsi
addq %r12, %rsi
callq 0xd37a
testq %rax, %rax
je 0xc8fa
addq $0xc, %rax
movq (%rbx), %rcx
jmp 0xc8d1
movq 0x18(%rbx), %rax
movq (%rax), %rax
addq %r12, %rax
movl (%rax), %eax
leaq (%rax,%rax,2), %rax
cmpb $0x1, 0x8(%rcx,%rax,4)
jne 0xc8ec
incl %r14d
addq $0x4, %r12
cmpl %r14d, %r15d
jne 0xc8a0
jmp 0xc8ef
movl %r14d, %ebp
movl %ebp, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0xcecf(%rip), %rdi      # 0x197d0
callq 0x2280
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::run(unsigned int const&)
void Reductions::run(const uint32_t &theta) {
    if (!graph.nodeIndex.size()) {
        return;
    }
    switch(theta) {
        case 8:
        case 7:
        case 6:
            reduce6(theta);
            break;
        case 5:
            reduce5(theta);
            break;
        case 4:
            reduce4(theta);
            break;
        case 3:
            reduce3(theta);
            break;
        default:
            assert(false);
    }
}

// Assembly:
pushq %rax
movq (%rdi), %rax
movq 0x8(%rax), %rcx
cmpq (%rax), %rcx
je 0xf69d
movl (%rsi), %eax
leal -0x6(%rax), %ecx
cmpl $0x3, %ecx
jae 0xf69f
popq %rax
jmp 0xf6de
popq %rax
retq
cmpl $0x5, %eax
jne 0xf6aa
popq %rax
jmp 0xf7ea
cmpl $0x3, %eax
je 0xf6b9
cmpl $0x4, %eax
jne 0xf6be
callq 0xf910
callq 0xf9ae
leaq 0xa206(%rip), %rdi      # 0x198cb
leaq 0xa205(%rip), %rsi      # 0x198d1
leaq 0xa211(%rip), %rcx      # 0x198e4
movl $0x21, %edx
callq 0x2110
nop
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::reduce6(unsigned int const&)
void Reductions::reduce6(const uint32_t &theta) {
    bool firstTime = true;
    unordered_set<uint32_t> *oldCandidateNodes = new unordered_set<uint32_t>();
    unordered_set<uint32_t> *newCandidateNodes = new unordered_set<uint32_t>();
    do {
        removeUnconfinedNodes();
    } while (foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes));
    delete oldCandidateNodes;
    delete newCandidateNodes;
    buildCC();
    removeLineGraphs(theta);
    graph.rebuild(reduceInfo);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movl $0x1, %r12d
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl $0x3f800000, %ebp       # imm = 0x3F800000
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x10(%rsp), %r15
movq %rax, (%r15)
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x8(%rsp), %r12
movq %rax, (%r12)
leaq 0x7(%rsp), %r13
movq %rbx, %rdi
callq 0xfa20
movb $0x0, 0x7(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
movq %r13, %r8
callq 0xfa62
testb %al, %al
jne 0xf761
movq 0x10(%rsp), %r15
testq %r15, %r15
je 0xf798
movq %r15, %rdi
callq 0xc950
movq %r15, %rdi
callq 0x21a0
movq 0x8(%rsp), %r15
testq %r15, %r15
je 0xf7b2
movq %r15, %rdi
callq 0xc950
movq %r15, %rdi
callq 0x21a0
movq %rbx, %rdi
callq 0xfb12
movq %rbx, %rdi
movq %r14, %rsi
callq 0xfe1a
movq (%rbx), %rdi
addq $0x10, %rbx
movq %rbx, %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ffe
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::reduce5(unsigned int const&)
void Reductions::reduce5(const uint32_t &theta) {
    unordered_set<uint32_t> *oldCandidateNodes = new unordered_set<uint32_t>();
    unordered_set<uint32_t> *newCandidateNodes = new unordered_set<uint32_t>();
    do {
        do {
            removeUnconfinedNodes();
        } while (foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes));
    } while (removeShortFunnels(theta));
    delete oldCandidateNodes;
    delete newCandidateNodes;
    buildCC();
    removeEasyInstances(theta);
    removeLineGraphs(theta);
    graph.rebuild(reduceInfo);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %r14
movq %rdi, %rbx
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movl $0x1, %r12d
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl $0x3f800000, %ebp       # imm = 0x3F800000
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x10(%rsp), %r15
movq %rax, (%r15)
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x8(%rsp), %r12
movq %rax, (%r12)
leaq 0x7(%rsp), %r13
movq %rbx, %rdi
callq 0xfa20
movb $0x0, 0x7(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %r12, %rcx
movq %r13, %r8
callq 0xfa62
testb %al, %al
jne 0xf86d
movq %rbx, %rdi
movq %r14, %rsi
callq 0x101ce
testb %al, %al
jne 0xf86d
movq 0x10(%rsp), %r15
testq %r15, %r15
je 0xf8b3
movq %r15, %rdi
callq 0xc950
movq %r15, %rdi
callq 0x21a0
movq 0x8(%rsp), %r15
testq %r15, %r15
je 0xf8cd
movq %r15, %rdi
callq 0xc950
movq %r15, %rdi
callq 0x21a0
movq %rbx, %rdi
callq 0xfb12
movq %rbx, %rdi
movq %r14, %rsi
callq 0x10864
movq %rbx, %rdi
movq %r14, %rsi
callq 0xfe1a
movq (%rbx), %rdi
addq $0x10, %rbx
movq %rbx, %rsi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ffe
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::reduce4(unsigned int const&)
void Reductions::reduce4(const uint32_t &theta) {
    unordered_set<uint32_t> *oldCandidateNodes = new unordered_set<uint32_t>();
    unordered_set<uint32_t> *newCandidateNodes = new unordered_set<uint32_t>();
    do {
        do {
            do {
                do {
                    foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes);
                } while (removeDominatedNodes(theta));
            } while (removeUnconfinedNodes());
        } while (foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes, true));
    } while (removeShortFunnels(theta));
    delete oldCandidateNodes;
    delete newCandidateNodes;
    buildCC();
    removeEasyInstances(theta);
    removeLineGraphs(theta);
    graph.rebuild(reduceInfo);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rsi, %rbx
movq %rdi, %r14
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movl $0x1, %r12d
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl $0x3f800000, %ebp       # imm = 0x3F800000
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x18(%rsp), %r15
movq %rax, (%r15)
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
leaq 0x10(%rsp), %rcx
movq %rax, (%rcx)
leaq 0xf(%rsp), %r8
movb $0x0, (%r8)
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0xfa62
movq %r14, %rdi
movq %rbx, %rsi
callq 0x11068
nop
// File: /workspace/github_cpp_makefile_star2_O3/iPapatsoris[P]Maximum-Independent-Set/src/Reductions.cpp
// Function: Reductions::reduce3(unsigned int const&)
void Reductions::reduce3(const uint32_t &theta) {
    unordered_set<uint32_t> *oldCandidateNodes = new unordered_set<uint32_t>();
    unordered_set<uint32_t> *newCandidateNodes = new unordered_set<uint32_t>();
    do {
        do {
            do {
                do {
                    do {
                        removeDominatedNodes(theta);
                    } while (foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes));
                } while (removeUnconfinedNodes());
            } while (foldCompleteKIndependentSets(theta, &oldCandidateNodes, &newCandidateNodes, true));
        } while (removeShortFunnels(theta));
    } while (removeDesks());
    delete oldCandidateNodes;
    delete newCandidateNodes;
    buildCC();
    removeEasyInstances(theta);
    removeLineGraphs(theta);
    graph.rebuild(reduceInfo);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movl $0x1, %r15d
movq %r15, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl $0x3f800000, %ebp       # imm = 0x3F800000
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
movl $0x38, %edi
callq 0x21e0
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rax)
leaq 0x30(%rax), %rcx
movq %rcx, (%rax)
movq %r15, 0x8(%rax)
movups %xmm0, 0x10(%rax)
movl %ebp, 0x20(%rax)
movups %xmm0, 0x28(%rax)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x11068
nop