如果一个基本快中的指令跳转到另外一个基本快之中(那么这两个基本快就形成了一条边)就形成了控制流图。
注:一个函数里面如果包含多个基本快就可以表示成一个cfg(多个基本快意味着有很多跳转代码)
用于可用表达式分析优化:程序中的指令都会被添加到一个集合中,新添加进来的指令会和之前的指令比对是否优化。
比如还是上面数据流的例子,假设最终d是被返回或者被后面变量引用的。那么d=c会把c也加入活跃集合;dcab都是活跃变量。如果之前是e=c但是e没有被用到那么e就是死的需要删除。
基本快2的活跃性变量集合输出是什么,基本快3的活跃性变量集合输出是什么?
首先基本快5的输出是x,基本快四的输出就是x等于a+b的a,b变量集合。根据基本快四的分支情况推到出基本快二三的输出。
基本快三很简单都用的是ab已经在集合中了因此输出还是ab。
基本快2的输出由于4中y可以确定一定是没用的(声明后没人用它),而d是在y声明之前只用过一次,因此也可以确定d这个变量也是死的。但是在2中不能够因为d变量是死的就认定c也是死的,判断条件不足,因此c是作为可能是活的存放在集合中的。c可能是在前面用到了而且会影响结果。
活跃度分析和可用表达式分析都是基于集合存储的
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。