首页 > 解决方案 > 编译器设计:是否值得简化表达式?

问题描述

我对表达式的编译器优化有了一个想法:

如果我有以下表达式y = x + x + x ,我可以将其简化为y = 3*x

然而,在做了一些研究之后,我发现了这篇关于运营商成本的博客文章,指出:

最便宜中最便宜的,按此顺序:加法、减法、比较 (1) abs (2) 乘法 (4)

其中数字是每个运营商的权重成本。

话虽如此,使用通用代数技术简化编译器中的表达式是一种常见的做法吗?根据博客文章,在我给出的示例中,如果有超过 4 个加法运算符,那么只有使用乘法运算符才值得简化。

标签: compiler-constructionoperatorscompiler-optimization

解决方案


它很有用,因为例如 x86 可以通过使用 lea ( ) 有效地执行*3lea eax,[edi+edi*2]。如果*3不能被有效地编码,编译器可以很容易地在以后的阶段决定*3应该被两个加法运算或移位和加法替换。


推荐阅读