// File: Myyura[P]MyyuraSat/./source/./solver_simplify.cpp
// Function: MyyuraSat::Solver::subsume1(unsigned int)
void Solver::subsume1(CRARef cr) {
    // TODO : flag to turn off
    Vector<CRARef> subs_queue;
    int q;
    for (q = 0, subs_queue.push(cr); q < subs_queue.size(); q++) {
        if (is_removed(subs_queue[q])) { q++; continue; }
        Clause& c = _ca[subs_queue[q]];

        int min_i = 0;
        for (int i = 0; i < c.size(); i++) {
            if (_occur_lit[c[i]].size() < _occur_lit[c[min_i]].size()) {
                min_i = i;
            }
        }

        Vector<CRARef>& crs = _occur_lit[c[min_i]];
        for (int i = 0; i < crs.size(); i++) {
            if (is_removed(crs[i])) { continue; }

            if (cr != crs[i]) {
                Clause& cp = _ca[crs[i]];
                Literal p = c.subsumes(cp);
                if (p != LITERAL_UNDEF && p != LITERAL_ERROR) {
                    // _selfsubsumption_removed++;
                    cp.strengthen(p);
                    subs_queue.push(crs[i]);
                }
            }
        }
    }

    check_garbage();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq -0x20(%rbp), %rdi
movq %rdi, -0x70(%rbp)
callq 0x8150
movq -0x70(%rbp), %rdi
movl $0x0, -0x24(%rbp)
leaq -0xc(%rbp), %rsi
callq 0x7a40
jmp 0x5a8d
jmp 0x5a8f
movl -0x24(%rbp), %eax
movl %eax, -0x80(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x7d70
movl %eax, -0x7c(%rbp)
jmp 0x5aa3
movl -0x80(%rbp), %eax
movl -0x7c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x5e7a
movl -0x24(%rbp), %esi
leaq -0x20(%rbp), %rdi
callq 0x7d90
movq %rax, -0x88(%rbp)
jmp 0x5ac6
movq -0x78(%rbp), %rdi
movq -0x88(%rbp), %rax
movl (%rax), %esi
callq 0x7f00
movb %al, -0x89(%rbp)
jmp 0x5ae0
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x5aec
jmp 0x5b14
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x5e6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x8670
jmp 0x5e97
movq -0x78(%rbp), %rax
addq $0xf8, %rax
movq %rax, -0xa0(%rbp)
movl -0x24(%rbp), %esi
leaq -0x20(%rbp), %rdi
callq 0x7d90
movq %rax, -0x98(%rbp)
jmp 0x5b3a
movq -0xa0(%rbp), %rdi
movq -0x98(%rbp), %rax
movl (%rax), %esi
callq 0x7aa0
movq %rax, -0xa8(%rbp)
jmp 0x5b58
movq -0xa8(%rbp), %rax
movq %rax, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
movl %eax, -0xb0(%rbp)
movq -0x40(%rbp), %rdi
callq 0x8b00
movl %eax, -0xac(%rbp)
jmp 0x5b8b
movl -0xb0(%rbp), %eax
movl -0xac(%rbp), %ecx
cmpl %ecx, %eax
jge 0x5c71
movq -0x78(%rbp), %rax
addq $0x1a0, %rax            # imm = 0x1A0
movq %rax, -0xc0(%rbp)
movq -0x40(%rbp), %rdi
movl -0x48(%rbp), %esi
callq 0x8ee0
movq %rax, -0xb8(%rbp)
jmp 0x5bc5
movq -0xb8(%rbp), %rsi
movq -0xc0(%rbp), %rdi
callq 0x7d40
movq %rax, -0xc8(%rbp)
jmp 0x5be1
movq -0xc8(%rbp), %rdi
callq 0x7d70
movl %eax, -0xcc(%rbp)
jmp 0x5bf5
movq -0x78(%rbp), %rax
addq $0x1a0, %rax            # imm = 0x1A0
movq %rax, -0xe0(%rbp)
movq -0x40(%rbp), %rdi
movl -0x44(%rbp), %esi
callq 0x8ee0
movq %rax, -0xd8(%rbp)
jmp 0x5c1b
movq -0xd8(%rbp), %rsi
movq -0xe0(%rbp), %rdi
callq 0x7d40
movq %rax, -0xe8(%rbp)
jmp 0x5c37
movq -0xe8(%rbp), %rdi
callq 0x7d70
movl %eax, -0xec(%rbp)
jmp 0x5c4b
movl -0xcc(%rbp), %eax
movl -0xec(%rbp), %ecx
cmpl %ecx, %eax
jge 0x5c61
movl -0x48(%rbp), %eax
movl %eax, -0x44(%rbp)
jmp 0x5c63
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x5b71
movq -0x78(%rbp), %rax
addq $0x1a0, %rax            # imm = 0x1A0
movq %rax, -0x100(%rbp)
movq -0x40(%rbp), %rdi
movl -0x44(%rbp), %esi
callq 0x8ee0
movq %rax, -0xf8(%rbp)
jmp 0x5c97
movq -0xf8(%rbp), %rsi
movq -0x100(%rbp), %rdi
callq 0x7d40
movq %rax, -0x108(%rbp)
jmp 0x5cb3
movq -0x108(%rbp), %rax
movq %rax, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl %eax, -0x110(%rbp)
movq -0x50(%rbp), %rdi
callq 0x7d70
movl %eax, -0x10c(%rbp)
jmp 0x5cdf
movl -0x110(%rbp), %eax
movl -0x10c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x5e6a
movq -0x50(%rbp), %rdi
movl -0x54(%rbp), %esi
callq 0x7d90
movq %rax, -0x118(%rbp)
jmp 0x5d08
movq -0x78(%rbp), %rdi
movq -0x118(%rbp), %rax
movl (%rax), %esi
callq 0x7f00
movb %al, -0x119(%rbp)
jmp 0x5d22
movb -0x119(%rbp), %al
testb $0x1, %al
jne 0x5d2e
jmp 0x5d33
jmp 0x5e5c
movl -0xc(%rbp), %eax
movl %eax, -0x12c(%rbp)
movq -0x50(%rbp), %rdi
movl -0x54(%rbp), %esi
callq 0x7d90
movq %rax, -0x128(%rbp)
jmp 0x5d51
movl -0x12c(%rbp), %eax
movq -0x128(%rbp), %rcx
cmpl (%rcx), %eax
je 0x5e5a
movq -0x78(%rbp), %rax
addq $0xf8, %rax
movq %rax, -0x140(%rbp)
movq -0x50(%rbp), %rdi
movl -0x54(%rbp), %esi
callq 0x7d90
movq %rax, -0x138(%rbp)
jmp 0x5d8c
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rax
movl (%rax), %esi
callq 0x7aa0
movq %rax, -0x148(%rbp)
jmp 0x5daa
movq -0x148(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x40(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x9220
movl %eax, -0x14c(%rbp)
jmp 0x5dca
movl -0x14c(%rbp), %eax
movl %eax, -0x64(%rbp)
leaq 0x10372(%rip), %rsi     # 0x1614c
leaq -0x64(%rbp), %rdi
callq 0x7870
movb %al, -0x14d(%rbp)
jmp 0x5deb
movb -0x14d(%rbp), %al
testb $0x1, %al
jne 0x5df7
jmp 0x5e58
leaq 0x10352(%rip), %rsi     # 0x16150
leaq -0x64(%rbp), %rdi
callq 0x7870
movb %al, -0x14e(%rbp)
jmp 0x5e0f
movb -0x14e(%rbp), %al
testb $0x1, %al
jne 0x5e1b
jmp 0x5e58
movq -0x60(%rbp), %rdi
movl -0x64(%rbp), %eax
movl %eax, -0x68(%rbp)
movl -0x68(%rbp), %esi
callq 0x94a0
jmp 0x5e2f
movq -0x50(%rbp), %rdi
movl -0x54(%rbp), %esi
callq 0x7d90
movq %rax, -0x158(%rbp)
jmp 0x5e44
movq -0x158(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x7a40
jmp 0x5e56
jmp 0x5e58
jmp 0x5e5a
jmp 0x5e5c
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x5cc5
jmp 0x5e6c
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x5a8f
movq -0x78(%rbp), %rdi
callq 0x9470
jmp 0x5e85
leaq -0x20(%rbp), %rdi
callq 0x8670
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x2230