2

宛先を変更して新しいエッジを挿入し、ソースと宛先で別のエッジを削除できますか? 言い換えれば、エッジの基本ブロック宛先を別のものに置き換えて、CFG を変更することはできますか?

getEdge()で関数を試しましProfileInfoたが、うまくいきませんでした:

// to replace the basic block
Bb->getTerminator()->replaceUsesOfWith((*SI), (*rit));

// trying to set the new basic block as a new destination
xx = ProfileInfo::getEdge(Bb,(*rit));
4

1 に答える 1

1

基本ブロックには 1 つのターミネータ命令があります。ただし、このターミネータは、まったく異なるいくつかの命令の 1 つにすることができます。複数のエッジを持つものもあります。したがって、あなたが想定しているように単純ではありません。

できることは、ブロックのターミネータを見て、命令を変更して別の宛先に分岐することです。これは、指示と (もちろん) 特定のニーズによって異なります。

于 2013-05-26T16:16:02.260 に答える