4

在以下代码中,我尝试替换 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;
    }
}
4

2 回答 2

5

您应该使用迭代器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;
    }
}
于 2012-11-22T06:31:16.473 回答
3

你所做的只是让一个本地指针指向别的东西,你实际上并没有改变它指向的东西。为此,您需要使用取消引用运算符*

*val = *((Value*) iter->second.PN);
于 2012-11-22T06:09:07.870 回答