如何从LLVM IR的指令元数据中提取操作数?

问题描述 投票:3回答:1

我正在尝试提取LLVM IR中的if指令中正在使用的操作数。例如:对于if(x==10)这样的指令,我希望x10作为输出。

这不是应该怎么做:

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的文字,我必须扫描`我认为的存储指令...

llvm llvm-ir
1个回答
0
投票

如果您只想获取操作数,也许可以尝试,

Value* opl = iCmpInst -> getOperand(0);
Value* opr = iCmpInst -> getOperand(1);
© www.soinside.com 2019 - 2024. All rights reserved.