我正在开发一个自动将自定义语言转换为Java的项目,并且已经要求在转换过程中对代码进行一些基本的优化。例如,自定义代码可能包含以下内容:
if someFunction(a, b) > x:
do something
else:
return someFunction(a, b) + y
在这个实例中,someFunction被多次调用并具有相同的输入,因此可以通过缓存someFunction()的值并仅调用一次来获得额外的性能。因此,上述代码的“优化”版本可能类似于:
var1 = someFunction(a, b)
if var1 > x:
do something
else:
return var1 + y
目前,这是在转换过程中手动完成的。我运行一个程序将自定义语言中的代码转换为Java,然后手动检查转换后的代码以查看可以优化的内容。我想自动化优化过程,因为这些问题一次又一次地蔓延。用自定义语言编写代码的人不想担心这些事情,所以我不能要求他们确保他们给我的代码已经优化。
有哪些教程,论文等......详细介绍了如何在现代编译器中完成这些工作?我不想过多地重新发明轮子。提前谢谢。
编辑1:
可以假设该功能是纯粹的。
答案 0 :(得分:2)
这称为Common subexpression elimination。
通常,这需要您几乎实现完整的编译器才能进行数据流分析。在Dragon Book,“6.1.2用于构造DAG的值数字方法”中给出了一种算法(至少对于本地CSE)。