在下面的代码中,我尝试替换LLVM指令的操作数。但它不起作用,没有任何改变。知道如何解决这个问题吗?
for (OI = insn->op_begin(), OE = insn->op_end(); OI != OE; ++OI)
{
Value *val = *OI;
iter = mapClonedAndOrg.find( val );
if( iter != mapClonedAndOrg.end( ) )
{
// Here I try to replace the operand, to no effect!
val = (Value*)iter->second.PN;
}
}
答案 0 :(得分:4)
您应该使用迭代器OI
来替换它,而不是使用本地指针val
。所以它应该是这样的。
for (OI = insn->op_begin(), OE = insn->op_end(); OI != OE; ++OI)
{
Value *val = *OI;
iter = mapClonedAndOrg.find( val );
if( iter != mapClonedAndOrg.end( ) )
{
*OI = (Value*)iter->second.PN;
}
}
答案 1 :(得分:3)
你正在做的只是让一个本地指针指向别的东西,你实际上并没有改变它指向的。为此,您需要使用解除引用运算符*
:
*val = *((Value*) iter->second.PN);