![]() |
1
4
(a) 是的。 (b) 恒定折叠就是一个例子;CSE是另一个;事实上几乎与表达式求值无关。IR阶段优化更多的是流分析的结果。 |
![]() |
2
4
IR是AST的一种形式(通常是“扁平化”的,但也有深树IR),可能不容易区分它们,特别是如果编译器被实现为一系列非常小的重写,从原始AST一直到适合指令选择的最终IR。 优化可能发生在这个链上的任何地方,但一些表示更适合于广泛的优化,最明显的是SSA形式,大多数现代编译器使用SSA形式来进行几乎所有的优化。 |
![]() |
3
2
优化(创造一个短语)永远不会太早。因此,在AST创建之前和创建过程中,对AST本身、IR(如果您有)和生成代码进行了优化。在类C语言和编译成机器代码的语言中,工作将进入后期阶段。在以VM为目标的编译器中,我认为在那个阶段改进的空间较小。 一些早期优化显然比其他优化效果更好。我对Decaf了解不多,但有一些显而易见的东西,比如常量折叠和常量表达式求值。如果在生成任何代码之前以树形形式获取整个程序,则可以找到常见的子表达式、执行代码迁移、消除死代码/死存储、提升不变量、消除尾部递归和某些强度降低。 这在很大程度上取决于你想工作的努力程度和你的目标是什么。 |
![]() |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
![]() |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
![]() |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
![]() |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
![]() |
Daniel · C#轻松存储快速访问的大型位矩阵 6 年前 |
|
halbe · 优化音频DSP程序的numpy计算 6 年前 |
![]() |
Afsara · 是否有任何方法不能优化我们的应用程序? 6 年前 |