我可以通过更改目标来插入新边缘,并按源和目标移除另一条边。换句话说,我可以用另一个替换边的基本块目的地,在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));
答案 0 :(得分:1)
基本块具有单个终结符指令。但是,这个终止符可以是one of several instructions,它们完全不同。有些可以有多个边缘。所以它并不像你想象的那么简单。
可以做的是查看块的终结符并修改指令以分支到不同的目标。这取决于指令,并且(当然)取决于您的具体需求。