注意:我注意到了这个问题 https://stackoverflow.com/questions/6672008/llvm-and-the-future-of-optimization与这个问题有很多相关性,所以如果您对我的问题感兴趣,您绝对应该阅读另一个问题及其答案。
我可以想到 OOP 语言前端可以做的一些优化,例如创建临时变量来保存按顺序调用的 const 方法调用的值,而不需要对相关对象进行中间非常量调用,以切断函数调用,但我可以想不到更多。我想请人们创建一个更长的示例列表。
我问这个问题是因为我想创建一种小语言作为宠物项目,并且我不确定如何很好地研究这个主题。也许这是社区维基的一个例子? LLVM 后端所做的优化以及前端应该自行进行的优化的综合列表,您认为如何?
哦,我知道不同的前端可能有截然不同的需求,但我的重点是过程/OOP 语言。
这可能因语言而异... clang (C/C++) 在前端优化方面做得很少。我能想到的针对生成代码性能的唯一优化是 clang 在前端对 C++ 方法进行了一些去虚拟化。 clang 还进行了一些其他优化,例如常量折叠和死代码消除,但这主要是为了加快编译时间,而不是为了提高生成代码的性能。
EDIT:实际上,再想一想,我只记得 clang 对 C++ 所做的一项更重要的优化:clang 知道一些在 C++ 中消除复制构造函数的技巧(google for NRVO)。
在某些情况下,特定于语言的 IR 优化过程可能很有用。有一个 SimplifyLibCalls 传递,它知道如何优化对 C 标准库的调用。对于新的 Objective-C ARC 语言功能,clang 将一些特定于 ARC 的通道放入管道中;这些优化了对各种 Objective-C 运行时函数的调用。
一般来说,只有当代码具有无法编码到 IR 中的属性时(例如 C++ 对象具有常量 vtable 指针),在前端实现优化通常才有用。在实践中,您很可能希望首先实现哑代码生成,然后看看是否存在未优化的重要情况。优化器可以执行一些令人惊讶的复杂转换。
也可以看看http://llvm.org/docs/tutorial/LangImpl7.html http://llvm.org/docs/tutorial/LangImpl7.html;适当地使用 alloca 是对优化器有很大帮助的一件事,尽管它本身并不是真正的优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)