实验内容
pa4中我们将进行一定程度的基于数据流分析的中间代码优化。
框架中已经提供了三种优化的实现,即公共表达式提取,常量传播,复写传播,还有一项死代码消除没有实现,这是大家的实验任务。需要说明的是,目前我们只在很有限的测例上检测了优化的正确性,而且这个框架是第一次使用,所以有可能在已经实现的优化中存在bug,大家如果发现bug希望能及时汇报。接下来的文档中分别描述了这些数据流分析是怎样实现的,但是实际上主要只是起到科普的作用,如果不想看的话理论上可以跳过,认真阅读死代码消除的文档即可。
我们以tacvm输出的每个程序执行指令的条数(在.info
文件中)作为性能的评判标准,建议大家比较以下四种情况:
没有任何优化
只有死代码消除
有公共表达式提取,常量传播,复写传播
四种优化都有
其中情况3是框架中的现状(如果去掉相关的unimplemented!()
的话),不能保证它的性能一定强于情况1,这是因为优化过程中可能引入了很多无用的指令。通过分别比较1和2,3和4,可以更全面的展示你实现的优化的效果。
值得注意的是,对于tac语句%x = call F
,tacvm在会先将它拆分成两条指令来执行;其余语句,包括call F
,在tacvm中都对应于一条指令。
Last updated