Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动代码优化技术_Java_Optimization_Compilation_Compiler Construction_Compiler Optimization - Fatal编程技术网

Java 自动代码优化技术

Java 自动代码优化技术,java,optimization,compilation,compiler-construction,compiler-optimization,Java,Optimization,Compilation,Compiler Construction,Compiler Optimization,我正在从事一个将自定义语言自动转换为Java的项目,并被要求在转换过程中对代码进行一些基本优化。例如,自定义代码可能具有以下内容: if someFunction(a, b) > x: do something else: return someFunction(a, b) + y var1 = someFunction(a, b) if var1 > x: do something else: return var1 + y 在本例中,使用相同

我正在从事一个将自定义语言自动转换为Java的项目,并被要求在转换过程中对代码进行一些基本优化。例如,自定义代码可能具有以下内容:

if someFunction(a, b) > x:
    do something
else:
    return someFunction(a, b) + y
var1 = someFunction(a, b)

if var1 > x:
    do something
else:
    return var1 + y
在本例中,使用相同的输入多次调用someFunction,因此可以通过缓存someFunction()的值并只调用一次来获得额外的性能。因此,上述代码的“优化”版本可能类似于:

if someFunction(a, b) > x:
    do something
else:
    return someFunction(a, b) + y
var1 = someFunction(a, b)

if var1 > x:
    do something
else:
    return var1 + y
目前,这是在转换过程中手动完成的。我运行一个程序,将自定义语言中的代码转换为Java,然后手动检查转换后的代码,看看可以优化什么。我想自动化优化过程,因为这些问题一次又一次地出现。用自定义语言编写代码的人不想担心这些事情,所以我不能要求他们只确保他们给我的代码已经优化了

什么是教程、论文等。。。这详细说明了现代编译器是如何完成这些事情的?我不想太多地重新发明轮子。提前谢谢

编辑1:


可以假定函数是纯函数。

这称为


通常,为了进行数据流分析,这几乎需要实现一个完整的编译器。“6.1.2构造DAG的数值法”(至少适用于局部CSE)中给出了一个算法

只有在保证
someFunction
始终为相同的输入返回相同的值时,此优化才会起作用;你对此有任何保证吗?你必须推断出你的函数是纯函数(没有副作用)。做起来有多容易取决于你的语言。对于功能性语言来说,纯粹性推理是微不足道的,否则只能使用非常保守的推理规则。细节也取决于您的中间代表。如果它是一个SSA/ArraySSA(即,您已经消除了所有仅本地的内存传输),那么如果一个函数不进行任何加载和存储,并且只调用其他纯函数,您可以将其标记为纯函数。可以假定该函数是纯函数。您进行Java编译器将执行的优化没有任何意义。你真的知道它做了什么优化吗?在这种情况下,它只是一个普通的子表达式消除。这不是很普通的子表达式消除,因为函数调用可能有副作用,因此可能无法消除它。他说他要计算的函数是纯函数