gpt4 book ai didi

llvm - LLVM 做了哪些类型的优化以及它的前端必须自行实现哪些类型的优化?

转载 作者:行者123 更新时间:2023-12-04 11:43:22 28 4
gpt4 key购买 nike

注意:我注意到 this question与这个问题有很大关系,所以如果您对我的问题感兴趣,那么您一定要阅读另一个问题及其答案。

我可以想到一些 OOP 语言前端可以做的优化,例如创建临时变量来保存来自按顺序调用的 const 方法调用的值,而不需要对相关对象进行中间非常量调用,以切断函数调用,但我可以想多了。我想请人们创建更长的示例列表。

我问这个是因为我想创建一个小语言作为一个宠物项目,我不知道如何很好地研究这个主题。也许这是社区维基的一个案例? LLVM 后端所做的优化以及前端应该自己做的优化的完整列表,您怎么看?

哦,我知道不同的前端可能有很大不同的需求,但我的重点是过程/OOP 语言。

最佳答案

这可能因语言而异……clang (C/C++) 在前端优化方面做得很少。我能想到的唯一优化是针对生成的代码的性能进行的,clang 在前端对 C++ 方法进行了一些去虚拟化。 clang 还做了一些其他优化,比如常量折叠和死代码消除,但这主要是为了加快编译时间,而不是为了生成代码的性能。

编辑:实际上,再仔细想想,我只记得 clang 对 C++ 所做的一个更重要的优化:clang 知道一些在 C++ 中省略复制构造函数的技巧(谷歌为 NRVO)。

在某些情况下,特定于语言的 IR 优化传递可能很有用。有一个 SimplifyLibCalls channel ,它知道如何优化对 C 标准库的调用。对于新的 Objective-C ARC 语言功能,clang 将一些特定于 ARC 的传递放入管道;这些优化了对各种 Objective-C 运行时函数的调用。

一般来说,只有在代码具有无法编码到 IR 中的属性时(例如 C++ 对象具有常量 vtable 指针),在前端实现优化通常才有帮助。而在实践中,你很可能想先实现哑代码生成,看看是否有没有优化的重要案例。优化器可以执行一些令人惊讶的复杂转换。

另见 http://llvm.org/docs/tutorial/LangImpl7.html ;适本地使用 alloca 是一件事,可以极大地帮助优化器,尽管它本身并不是真正的优化。

关于llvm - LLVM 做了哪些类型的优化以及它的前端必须自行实现哪些类型的优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com