如何从 LLVM IR 的指令元数据中提取操作数?
Posted
技术标签:
【中文标题】如何从 LLVM IR 的指令元数据中提取操作数?【英文标题】:How do I extract operands from an instruction's metadata from LLVM IR? 【发布时间】: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<>
。
@arrowd 我参考this 和this 来解决我的问题,你能告诉我为什么DDI->getAddress() == V
行不起作用吗??
【参考方案1】:
如果你只是想得到操作数,也许你可以试试,
Value* opl = iCmpInst -> getOperand(0);
Value* opr = iCmpInst -> getOperand(1);
【讨论】:
以上是关于如何从 LLVM IR 的指令元数据中提取操作数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LLVM IR 的 switch 指令中使用 char*?
LLVM IR:具有可变 BasicBlock 目标的分支指令?