2
我可以通過更改其目標來插入新的邊緣,並通過其源和目標刪除另一條邊。換句話說,我是否可以用另一個替換邊緣的基本塊目標,以便在CFG中進行一些修改?如何在LLVM中插入/刪除邊緣?
我ProfileInfo
試圖getEdge()
功能,但它沒有工作:
// 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));
因此,根據每種類型的終止符指令,都有添加新的基本塊來改變邊緣的功能。我該如何檢測終止符的類型並在LLVM中設置新的基本塊 –
@ R.Omar:'BasicBlock :: getTerminator'爲您提供了終止符指令,並且可以使用通常的LLVM RTTI來測試它的子類型技術。請參閱圖表以查看「TerminatorInst」的可用子類:http://llvm.org/docs/doxygen/html/classllvm_1_1TerminatorInst.html –
這真的幫助了我,謝謝 –