我正在为类似于JavaScript的语言编写优化器,并且需要选择一个中间代码表示形式。如今,显而易见的/典型的选择是静态单一分配(SSA)。
但是,C语言中的Modern Compiler Implementation也讨论了功能中间形式,这基本上意味着对中间表示使用纯功能(仅在局部变量方面是纯函数,堆数据仍然是可变的,而在CPS方面则是可变的,只是简单的let块和尾调用)。在易于推理方面具有一些优势。
大概这不是理所当然的,或者每个人都已经在使用这种表示形式了,所以我的问题是,功能性中间形式与SSA相比有哪些缺点?
                
                3
              
                  您将对这种中间形式进行哪种分析?SSA非常适合消除死代码,恒定传播,部分专业化等。如果菜单上没有此类内容,则可以跳过SSA并使用更宽松的表示形式来简化分析过程。但是,生成SSA表单是一项微不足道的任务,并且您可以轻松地将SSA转换为CPS(反之亦然),这将使收益翻倍。
                
                
                  
                    —
                    SK-logic 
                    
                  
                
              
                  是的,我的目标是全力以赴,输入语言和输出格式(最初为C ++)都是命令性语言。
                
                
                  
                    —
                    rwallace13年
                    
                  
                
              
                  生成SSA表单是一项微不足道的任务,您可以轻松地将SSA转换为CPS,也可以将CPS转换为SSA,这将带来双倍的收益。
                
                
                  
                    —
                    莱昂·阿里克西斯·红衣主教