// File: /workspace/github_c_makefile_star2_O0/vsee[P]openCLFeatureExtract/oclFeatureExt.cpp
// Function: evalInstruction(llvm::Instruction const&, FeatureStats&)
void evalInstruction(const Instruction &inst, FeatureStats &stats) {

    string opName = inst.getOpcodeName();
    if(BIN_OPS.find(opName) != BIN_OPS.end()) {
        stats.binOpsCount++;
    }
    else if(BITBIN_OPS.find(opName) != BITBIN_OPS.end()) {
        stats.bitbinOpsCount++;
    }
    else if(AGG_OPS.find(opName) != AGG_OPS.end()) {
        stats.aggOpsCount++;
    }
    else if(VEC_OPS.find(opName) != VEC_OPS.end()) {
        stats.vecOpsCount++;
    } else if(const LoadInst *li = dyn_cast<LoadInst>(&inst)) {
        stats.loadOpsCount++;
        if (!checkAddrSpace(li->getPointerAddressSpace(), stats))
            li->print(outs());
    } else if (const StoreInst *si = dyn_cast<StoreInst>(&inst)) {
        stats.storeOpsCount++;
        if (!checkAddrSpace(si->getPointerAddressSpace(), stats))
            li->print(outs());
    } else {
        stats.otherOpsCount++;
    }
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
callq 0x6a50
movq %rax, -0xa8(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
callq 0x31c0
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x5ab0
jmp 0x529c
leaq -0x31(%rbp), %rdi
callq 0x3030
leaq 0xdf9c(%rip), %rdi      # 0x13248
leaq -0x30(%rbp), %rsi
callq 0x6ab0
movq %rax, -0xb0(%rbp)
jmp 0x52be
movq -0xb0(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq 0xdf78(%rip), %rdi      # 0x13248
callq 0x6ae0
movq %rax, -0x58(%rbp)
leaq -0x50(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x6a80
testb $0x1, %al
jne 0x52ec
jmp 0x5332
movq -0x10(%rbp), %rax
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8(%rax)
jmp 0x55a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x3030
jmp 0x55b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x3438
jmp 0x55b7
leaq 0xdf47(%rip), %rdi      # 0x13280
leaq -0x30(%rbp), %rsi
callq 0x6ab0
movq %rax, -0xb8(%rbp)
jmp 0x534b
movq -0xb8(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq 0xdf23(%rip), %rdi      # 0x13280
callq 0x6ae0
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x6a80
testb $0x1, %al
jne 0x5379
jmp 0x538b
movq -0x10(%rbp), %rax
movl 0xc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0xc(%rax)
jmp 0x55a3
leaq 0xdf5e(%rip), %rdi      # 0x132f0
leaq -0x30(%rbp), %rsi
callq 0x6ab0
movq %rax, -0xc0(%rbp)
jmp 0x53a4
movq -0xc0(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq 0xdf3a(%rip), %rdi      # 0x132f0
callq 0x6ae0
movq %rax, -0x78(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x6a80
testb $0x1, %al
jne 0x53d2
jmp 0x53e4
movq -0x10(%rbp), %rax
movl 0x14(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x14(%rax)
jmp 0x55a1
leaq 0xdecd(%rip), %rdi      # 0x132b8
leaq -0x30(%rbp), %rsi
callq 0x6ab0
movq %rax, -0xc8(%rbp)
jmp 0x53fd
movq -0xc8(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq 0xdea9(%rip), %rdi      # 0x132b8
callq 0x6ae0
movq %rax, -0x88(%rbp)
leaq -0x80(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x6a80
testb $0x1, %al
jne 0x5431
jmp 0x5443
movq -0x10(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
jmp 0x559f
movq -0x8(%rbp), %rdi
callq 0x6b10
movq %rax, -0xd0(%rbp)
jmp 0x5455
movq -0xd0(%rbp), %rax
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
je 0x54ea
movq -0x10(%rbp), %rax
movl 0x18(%rax), %ecx
incl %ecx
movl %ecx, 0x18(%rax)
movq -0x90(%rbp), %rdi
callq 0x6b50
movl %eax, -0xd4(%rbp)
jmp 0x548d
movl -0xd4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x5990
movb %al, -0xd5(%rbp)
jmp 0x54a4
movb -0xd5(%rbp), %al
testb $0x1, %al
jne 0x54e5
jmp 0x54b0
movq -0x90(%rbp), %rax
movq %rax, -0xe8(%rbp)
callq 0x32c0
movq %rax, -0xe0(%rbp)
jmp 0x54cc
movq -0xe0(%rbp), %rsi
movq -0xe8(%rbp), %rdi
xorl %edx, %edx
callq 0x3110
jmp 0x54e3
jmp 0x54e5
jmp 0x559d
movq -0x8(%rbp), %rdi
callq 0x6b80
movq %rax, -0xf0(%rbp)
jmp 0x54fc
movq -0xf0(%rbp), %rax
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
je 0x558e
movq -0x10(%rbp), %rax
movl 0x1c(%rax), %ecx
incl %ecx
movl %ecx, 0x1c(%rax)
movq -0x98(%rbp), %rdi
callq 0x6bc0
movl %eax, -0xf4(%rbp)
jmp 0x5534
movl -0xf4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x5990
movb %al, -0xf5(%rbp)
jmp 0x554b
movb -0xf5(%rbp), %al
testb $0x1, %al
jne 0x558c
jmp 0x5557
movq -0x90(%rbp), %rax
movq %rax, -0x108(%rbp)
callq 0x32c0
movq %rax, -0x100(%rbp)
jmp 0x5573
movq -0x100(%rbp), %rsi
movq -0x108(%rbp), %rdi
xorl %edx, %edx
callq 0x3110
jmp 0x558a
jmp 0x558c
jmp 0x559b
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x20(%rax)
jmp 0x559d
jmp 0x559f
jmp 0x55a1
jmp 0x55a3
jmp 0x55a5
leaq -0x30(%rbp), %rdi
callq 0x3438
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x3130