实验内容
注:目前Java和Scala版并没有自己的PA4的文档,这里是Rust版的文档,且不一定是最新的。因此现在建议直接这份文档,等Java和Scala版的文档准备好的时候再阅读它。
pa4中我们将进行一定程度的基于数据流分析的中间代码优化。
框架中已经提供了三种优化的实现,即公共表达式提取,常量传播,复写传播,还有一项死代码消除没有实现,这是大家的实验任务。需要说明的是,目前我们只在很有限的测例上检测了优化的正确性,而且这个框架是第一次使用,所以有可能在已经实现的优化中存在bug,大家如果发现bug希望能及时汇报。接下来的文档中分别描述了这些数据流分析是怎样实现的,但是实际上主要只是起到科普的作用,如果不想看的话理论上可以跳过,认真阅读死代码消除的文档即可。
我们默认的检查答案方式是直接对比tac的输出结果,但是也许输出的tac会因算法的细节不同而略有差异(尽管我个人并不太相信),所以假如测试结果为Fail
,仍然可以在pa4/out
文件夹下查看与decaf代码同名的.info
文件,这里输出了tacvm终止前执行的指令的条数,只要它小于等于ans
文件夹中对应的条数,你的实现仍然会被认为是正确的。
值得注意的是,对于tac语句%x = call F
,tacvm在运行前会先将它拆分成两条指令;其余语句,包括call F
,在tacvm中都对应于一条指令。
Last updated