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 に答える