(2)操作的输出变量被其他操作引用
  如图5.42(a)所示,假设阴影部分的两个操作完全符合结合律的变换条件,但是由于操作1的输出不仅被操作2引用,而且还被其他操作(如操作3)引用,如果此时直接对操作1和操作2进行结合律变换,必将破坏原有的数据相关性,导致控制数据流图语义的变化。正确的变换方法应当是:先将操作1复制(图5.42(b))然后再作结合律变换(图5.42(c))。 
图5.42 输出变量被多次引用时的变换

  
显然,操作被复制后,控制数据流图中的操作个数将增加。同样,作分配律正变换时操作的个数也要增加。操作数目的增加固然有增大硬件资源需求的可能性,但并非一定导致硬件资源的实际增加,因为硬件资源需求取决于在同一控制步中同时执行的操作数目。如果新增加的操作不增大同一控制步中同时执行的操作数,则它带来的控制数据流图结构的变化可能带来潜在的优化机会。图5.43就是这样一个实例。
 
 操作复制的利弊分析
   利:操作复制使控制数据流图结构发生变化,为控制数据流图优化带来新的机会。
   弊:操作个数增加有可能使硬件资源需求增大。
  对于某一特定问题,操作复制带来的是利还是弊要作具体分析。

  假定图5.43中加法操作与乘法操作都是单周期操作,图5.43(a)中需要1个加法器和2个乘法器。我们对其中的加法操作(蓝色部分)进行操作复制和结合律变换,变换后的结果示于图5.43(b)。从图中看出,变换后仅需要1个加法器和1个乘法器,操作数增加而所需硬件资源却减少。

图5.43 操作个数增加而硬件资源需求减少