Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从指令';来自LLVM IR的元数据?_Llvm_Llvm Ir - Fatal编程技术网

如何从指令';来自LLVM IR的元数据?

如何从指令';来自LLVM IR的元数据?,llvm,llvm-ir,Llvm,Llvm Ir,我试图提取LLVM IR中if指令中使用的操作数。 例如:对于像if(x==10)这样的指令,我希望x和10作为输出 这不是应该怎么做的吗: if (ICmpInst* iCmpInst = dyn_cast<ICmpInst>(&*i)) { errs() << "Conditional Instruction found: "; errs() << iCmpInst->getOpcodeName() << '\t';

我试图提取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";
  }
}
if(ICmpInst*ICmpInst=dyn_cast(&*i))
{
错误()操作结束();
for(;o_begin!=o_end;++o_begin)
{

errs()如果您只想获取操作数,可能您可以尝试

Value* opl = iCmpInst -> getOperand(0);
Value* opr = iCmpInst -> getOperand(1);
旁注:使用
isa
而不是
dyn\u cast
@arrowd我指的是我的问题的解决方案,你能告诉我为什么行
DDI->getAddress()==V
不起作用吗??