如何在LLVM中插入/删除边缘?

时间:2013-05-26 14:42:59

标签: llvm llvm-3.0 llvm-c++-api

我可以通过更改目标来插入新边缘,并按源和目标移除另一条边。换句话说,我可以用另一个替换边的基本块目的地,在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));

1 个答案:

答案 0 :(得分:1)

基本块具有单个终结符指令。但是,这个终止符可以是one of several instructions,它们完全不同。有些可以有多个边缘。所以它并不像你想象的那么简单。

可以做的是查看块的终结符并修改指令以分支到不同的目标。这取决于指令,并且(当然)取决于您的具体需求。