clang、opt、llc和llvm链接器之间的关系

clang、opt、llc和llvm链接器之间的关系,llvm,llvm-clang,Llvm,Llvm Clang,不久前,我查看了clang,llc和opt的源代码,以了解它们中的每一个如何向管道添加优化。我的理解是,clang通过调用opt和llc调用的相同方法,添加了opt和llc在其管道中具有的相同优化。此外,clang未单独呼叫opt和/或llc 这几乎没什么问题,只是存在这样一种风险:在某个时刻,opt可能会在其管道中进行不同的优化(与clang相比),这是由于在其中一个管道中进行了源代码更改,而在另一个管道中没有进行源代码更改。llc和clang的比较也是如此。这种看法正确吗 我还看到了显示以下

不久前,我查看了clang,llc和opt的源代码,以了解它们中的每一个如何向管道添加优化。我的理解是,clang通过调用opt和llc调用的相同方法,添加了opt和llc在其管道中具有的相同优化。此外,clang未单独呼叫opt和/或llc

这几乎没什么问题,只是存在这样一种风险:在某个时刻,opt可能会在其管道中进行不同的优化(与clang相比),这是由于在其中一个管道中进行了源代码更改,而在另一个管道中没有进行源代码更改。llc和clang的比较也是如此。这种看法正确吗

我还看到了显示以下工作流的图表:clang、opt、llvm linker、opt-reach(用于IPA?)然后是llc。我无法将此工作流连接到我在clang中看到的内容。就连我对LTO的理解都是,链接器(比如gold)将调用优化。我无法理解llvm链接器在这里的角色


非常感谢您的任何见解。

opt、llc和llvm linker是开发人员端工具,可用于运行llvm库中实现的某些方法。最终用户通常不应使用它们


“图表”可能只是一些人定制的快速、肮脏的LTO管道。

谢谢。你能就llvm链接器的意义给出更多的评论吗?我最大的问题是,它相当于系统链接器?另一个问题:您是否认为opt和clang中的优化存在不同步的风险,因为对其中一个进行的代码更改没有反映在另一个中?这取决于。llvm链接用于将位代码文件链接在一起,lld尝试替换系统链接器,类似于clang替换系统编译器的方式。不,这通常不是因为opt中的优化通常是O1/O2/O3框架的一部分,因此没有显式调用。同样,实现这些通行证的人也会确保他们是从clang内部被调用的。