图5.25 局部合并处理过程

  合并过程中应当注意输出变量的合并处理,以便于分配时寄存器的共享。
  操作合并时,输入变量(或者是外部输入或者是其他操作的输出)的合并在操作合并时会自然而然地加以考虑(外部输入变量不存在合并问题),所以这里只特别提出输出变量合并问题。
  一般说来,两个仅被条件分枝中操作引用的变量可以合并,而一个被条件分枝外操作引用的变量与一个条件分枝中 引用的变量不可合并。图5.24中操作12的输出变量是v1, 操作13的输出变量也是v1,当合并成操作{12,13}后(见图5.25(a)),他们的输出变量仍然是v1。如图5.24所示,操作2的输出变量仅被条件分枝中 的操作5和操作11引用(操作2的输出变量较为特殊,再此仅作为普通变量来引用),当合并成操作{2,3}后(见图5.25(b)),他们的输出变量也可以合并。如图5.24所示,操作5的输出变量为v2,被条件分枝外的操作所引用;操作9的输出变量为v4,仅被条件分枝中 的操作6和操作12所引用(操作9的输出变量也作为普通变量引用),因此当合并成操作{5,9}时(见图5.25(b)),变量v2和变量v4不能合并,在操作{5,9}与变量v2之间有一条数据相关边。
  分枝控制结构通常出现在处理器设计和通用数字系统设计的算法描述中。各分枝中的操作相对较少,局部合并法可以通过穷举或启发式策略进行。
  局部合并法的缺点在于:合并时无法考虑操作从条件分枝中移出或移入。有关操作的移动将在本章稍后的部分讨论。