问题标签 [peephole-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 减少汇编指令数量
我想(手动)减少 Linux 汇编文件中的指令数量。这将基本上通过在抽象语法树中搜索预定义的缩减来完成。
例如:
将被删除,因为它没有任何意义。
或者:
会变成:
我正在寻找涉及固定数量指令的其他优化。我不想搜索指令的动态范围。
你能推荐其他可以用更少指令替换的类似模式吗?
后来编辑:感谢 Richard Pennington,我发现我想要的是窥视孔优化。
所以我把这个问题改写为:关于 Linux 汇编代码的窥孔优化建议。
java - java peephole optimization beginner compilers
As part of a group project I'm writing a compiler for a simplified language. As one of the optional features I thought I'd add a peephole optimizer to go over the codegen's output intel assembly code and optimize it.
Our compiler is done in java and it seems like it's going to be a lot of work to create this peephole optimizer using the java I've learned so far. Is there some sort of tool I should be using to make this possible, as pattern matching strings doesn't sound like a good approach in java.
thanks
design-patterns - 窥孔优化模式
我一直在阅读本地优化编译器技术,但一直不知道它们是如何实现的。这个想法是优化器每次都会查看代码的“窗口”,并以某种方式检测模式并用更优化的版本替换它们。
我的问题是,如何发现这些模式?(假设您的平台是一个为组装计算机输出汇编代码的 VM,例如 Schocken's Hack)。
人们是否真的手动检查代码(使用控制流图或 DAG 或其他),然后收集所有识别的模式并将它们编码到优化器中?或者有没有自动的方法。
例如,您在分析器中输入要优化的代码,它会喷出所说的模式。如果是这样,一个人如何开始写一个?
c++ - 是什么阻止了编译器对表达式模板进行窥视孔优化?
我有下面列出的代码:
其中va1
和va2
是两个valarray<int>
对象,k
是 和 的va1
大小va2
。我期待的是编译器优化如下printf
行:
但相反,英特尔编译器 (13.1) 和 CLang (3.4) 都没有进行此类优化。例如,英特尔编译器输出汇编代码:
其中r13
存储 的值k
,r14
和分别是和r12
的内存的开始。是迭代器变量。从代码来看,它的作用是:va1
va2
r15
i
为什么它没有优化(即使使用 -O3)
通过窥视孔优化?Gcc 4.8.2 在这种情况下进行了优化,但无法处理-(va1[i]+va2[i])+(va1[i]-va2[i])
.
看起来一个可能的原因是在前面显示的代码中使用了表达式模板。现在的问题是,为什么编译器在完美之前就停止了优化?表达式模板如何阻止向前迈出一步?
注意 嗯,答案总是“因为编译器不是为进行优化而设计的”。但是据我从龙书上了解到,编译器应该迭代地进行优化,直到它不能做任何更好的事情。
gcc - GCC 中窥视孔和窥视孔 2 的区别
我正在浏览 GCC 中 ARM 目标的机器描述文件。在研究它时,我发现它支持的窥视孔定义(define_peephole2)是窥视孔2,而不是窥视孔。
那么有人可以告诉我窥视孔和窥视孔2之间的区别吗?