【发布时间】:2016-05-17 10:55:16
【问题描述】:
我正在尝试提取 LLVM IR 中 if 指令中使用的操作数。
例如:对于像if(x==10) 这样的指令,我想要x 和10 作为输出。
这不应该是这样吗:
if (ICmpInst* iCmpInst = dyn_cast<ICmpInst>(&*i))
{
errs() << "Conditional Instruction found: ";
errs() << iCmpInst->getOpcodeName() << '\t';
errs() << iCmpInst->getPredicate() << '\t';
MDNode* metadata = iCmpInst->getMetadata("dbg");
llvm::MDNode::op_iterator o_begin = metadata->op_begin();
llvm::MDNode::op_iterator o_end = metadata->op_end();
for(; o_begin != o_end; ++o_begin)
{
errs() << o_begin << "\n";
}
}
对于x之类的字面量,我必须扫描`我认为的存储指令...
【问题讨论】:
-
旁注:使用
isa<>而不是dyn_cast<>。