// File: /workspace/github_cpp_makefile_star2_O3/vsklad[P]cgen/./bal/cnf/processor/cnfprocessor.hpp
// Function: bal::processor_result_t bal::CnfProcessor::process_clauses<bal::CnfSubsumptionOptimizer, &bal::CnfSubsumptionOptimizer::process_clause_subsumption(unsigned int*)>(bal::CnfSubsumptionOptimizer*)
inline processor_result_t process_clauses(CALLER_T* const p_caller) {
            clauses_index_.reset(0, 0);
            processor_result_t result = erUndetermined;
            
            uint32_t offset = 0;
            while (offset < cnf_.size_) {
                uint32_t* p_clause = _clauses_offset_clause(clauses_data_, offset);
                // p_clause size may change
                const clause_size_t clause_size = _clause_size(p_clause);
                
                // the clause may be excluded during processing of the preceding ones
                if (_clause_is_included(p_clause)) {
                    processed_offset_ = offset;
                    if ((p_caller->*p_process_clause)(p_clause) == erConflict) {
                        result = erConflict;
                        break;
                    } else {
                        // the pointer may become invalid
                        p_clause = _clauses_offset_clause(clauses_data_, offset);
                        if (_clause_is_included(p_clause)) {
                            // append processed clause to the index if included
                            for (auto i = 0; i < _clause_size(p_clause); i++) {
                                clauses_index_.append(literal_t__variable_id(_clause_literal(p_clause, i)), offset);
                            };
                        };
                    };
                };
                
                _clauses_offset_size_next(offset, clause_size);
            };
            
            return result;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, -0x30(%rbp)
movq %rdi, %rbx
leaq 0x30(%rdi), %r15
xorl %r12d, %r12d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x12c3c
movq 0x8(%rbx), %rax
cmpl $0x0, 0x88(%rax)
je 0x176e7
xorl %r12d, %r12d
movq %rbx, -0x38(%rbp)
movq 0x18(%rbx), %rax
movq (%rax), %rax
movl %r12d, %ebx
movl 0xc(%rax,%rbx,4), %r13d
testw %r13w, %r13w
js 0x176b9
leaq (%rax,%rbx,4), %rsi
addq $0xc, %rsi
movq -0x38(%rbp), %r14
movl %r12d, 0xb0(%r14)
movl (%rsi), %ecx
movl %ecx, %edx
andl $0x7fff, %edx           # imm = 0x7FFF
cmpl $0x4, %edx
je 0x17662
cmpl $0x3, %edx
je 0x17657
cmpl $0x2, %edx
jne 0x1767b
movq -0x30(%rbp), %rdi
callq 0x176fa
jmp 0x1766b
movq -0x30(%rbp), %rdi
callq 0x17b3c
jmp 0x1766b
movq -0x30(%rbp), %rdi
callq 0x17f20
cmpl $0x4, %eax
je 0x176e1
movq 0x18(%r14), %rax
movq (%rax), %rax
movl 0xc(%rax,%rbx,4), %ecx
testw %cx, %cx
sets %dl
testl $0x7fff, %ecx           # imm = 0x7FFF
sete %cl
orb %dl, %cl
jne 0x176b9
leaq (%rax,%rbx,4), %rbx
xorl %r14d, %r14d
movl 0x10(%rbx,%r14,4), %esi
shrl %esi
decl %esi
movq %r15, %rdi
movl %r12d, %edx
callq 0x13f3c
incq %r14
movl 0xc(%rbx), %eax
andl $0x7fff, %eax           # imm = 0x7FFF
cmpq %rax, %r14
jb 0x17695
andl $0x7fff, %r13d          # imm = 0x7FFF
addl %r13d, %r12d
addl $0x4, %r12d
movq -0x38(%rbp), %rbx
movq 0x8(%rbx), %rax
cmpl 0x88(%rax), %r12d
jb 0x17607
xorl %r12d, %r12d
jmp 0x176e7
movl $0x4, %r12d
movl %r12d, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop