2

我可以通过更改其目标来插入一条新边,并通过其源和目标删除另一条边。换句话说,我可以用另一条边替换一条边的基本块目标,以在 CFG 中进行一些修改吗?

我尝试getEdge()了函数 in 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

一个基本块有一个终止符指令。然而,这个终止符可以是几个完全不同的指令之一。有些可以有多个边缘。所以它并不像你想象的那么简单。

可以做的是查看块的终止符并修改指令以分支到不同的目的地。这取决于说明,并且(当然)取决于您的特定需求。

于 2013-05-26T16:16:02.260 回答