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