Tag: llvm

具体来说,编译器如何积极优化生成的字节码?

我一直在阅读各种编译器的function,并且我遇到了许多编译器报告执行的“积极优化”一词。 例如,LLVM引用了以下编译时优化function: 内存/指针特定 循环变换 数据流 算术 死代码消除 内联 具体是什么意思? 假设您有以下代码片段,如何优化生成的字节代码以比编译器生成的更快地运行? 我特别感兴趣的是优化JIT驱动的运行时的字节码,例如C#,Java和Flash。 这很棘手,因为JIT只支持处理器通常执行的操作码的子集,这限制了您可以执行的优化量。 尽管如此,我仍然有兴趣看到什么是可能的,究竟是什么转换可以推动VM的极限。 虚构的代码块: for (i = 0; i > 16) – 10; }else{ out = ((in << 5) / 2) * 50 + 10; } dataOut[i] = out; } 编译器为基于堆栈的JIT VM(如Flash Player)生成的近似伪代码:(原谅我任何错误,这完全是手写的!) // i = 0 label: “forInit” push 0 writeTo “i” // while […]