教学课件 编译原理(第四版)(胡元义).ppt

C_KILL[B] 程序中满足下述条件的所有复写s: A=D的集,其中s在基本块B外,但A或D在B外,且A或D在B中被重新定值。 这里,C_GEN[B]?和C_KILL[B]?均可从给定的程序流图中直接求出,为了求出IN[B]?和OUT[B],我们列出数据流方程如下: OUT[B]?=IN[B]?-C_KILL[B]∪C_GEN[B] IN[B]?= //B不是首结点 IN[B1]?=φ //B1是首结点 其中,P[B]?代表B的所有前驱基本块集。第二组方程中运算符是∩而不是∪,则是因为一个复写在某基本块入口之前是可用的,仅当它在该基本块所有前驱出口之后是可用的。 上述数据流方程也可用迭代法求解,并在每次迭代过程中按深度为主次序依次计算各结点的OUT和IN。假设已求出流图的深度为主次序,则求解数据流方程的迭代算法如下: IN[B1]?=φ; //首结点B1的IN和OUT其值始终不变 OUT[B1]?=C_GEN[B1]; for(?i=2;?i=n;?i++?) { IN[Bi]?=ξ; //置初值 OUT[Bi]?=ξ?-C_KILL[Bi]; } change=true; while(?chan

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档