compiler-construction - 编译器设计:是否值得简化表达式?
问题描述
我对表达式的编译器优化有了一个想法:
如果我有以下表达式y = x + x + x
,我可以将其简化为y = 3*x
然而,在做了一些研究之后,我发现了这篇关于运营商成本的博客文章,指出:
最便宜中最便宜的,按此顺序:加法、减法、比较 (1) abs (2) 乘法 (4)
其中数字是每个运营商的权重成本。
话虽如此,使用通用代数技术简化编译器中的表达式是一种常见的做法吗?根据博客文章,在我给出的示例中,如果有超过 4 个加法运算符,那么只有使用乘法运算符才值得简化。
解决方案
它很有用,因为例如 x86 可以通过使用 lea ( ) 有效地执行*3lea eax,[edi+edi*2]
。如果*3不能被有效地编码,编译器可以很容易地在以后的阶段决定*3应该被两个加法运算或移位和加法替换。
推荐阅读
- r - 在R中的增长曲线中绘制渐近线
- ios - 如何使用 Detox 测试 iOS 推送通知
- python - 在每个子文件夹中创建一个包含特定名称的空文件的文件夹
- javascript - jQuery 以对象或数组的形式获取数据
- puppet - 木偶输出到代理而不通知
- ruby-on-rails - Rails - 带有 heredoc 的 find_by_sql 引发错误
- java - 软键盘不会在焦点从 AutoCompleteTextView 更改为 EditText 时持续存在
- python - 检查另一个熊猫数据框中存在哪些日期的最快方法
- c++ - C++代码在window gcc上工作,但不在linux gcc上工作
- airflow - 如何在 Airflow 中的被调用 DAG 中捕获传递的 --conf 参数