llvm 和安装时间优化

Posted

技术标签:

【中文标题】llvm 和安装时间优化【英文标题】:llvm and install time optimization 【发布时间】:2014-03-22 11:25:23 【问题描述】:

基于LLVM official page,可以进行安装时优化,根据我的理解,它首先在分发之前在构建机器上编译成字节码,然后在目标机器上编译,安装时将字节码转换为本机代码。

是否有关于此功能的真实示例?更具体地说,我想知道是否可以采用使用 autoconf 的任意开源 C/C++ 项目(即通常由 ./configure && make && make install 构建和安装),并且

    在构建机器上,通过运行./configure && make 在一个特殊的 方式(例如设置一些环境变量,甚至修改 configure.ac 或其他一些 autoconf 文件),以便它生成 可执行文件和库作为字节码; 我将构建树转移到目标机器,然后运行make install 以一种特殊的方式,使其像往常一样安装所有文件, 但将字节码转换为可执行文件和库的本机代码。

【问题讨论】:

这甚至无法开始工作,除非构建机器和目标机器是相同的操作系统、操作系统版本、ABI、库、头文件等,原因在其他问题以及一些 LLVMdev 中有详细说明邮件列表线程。 @delnan,我没有找到您提到的其他问题或 LLVMdev 邮件列表线程。您能否将链接粘贴到此处,以便我可以关注它?谢谢。 邮件列表:thread.gmane.org/gmane.comp.compilers.llvm.devel/43769 堆栈溢出:***.com/q/14258194/395760 PNaCl 怎么样? developers.google.com/native-client/pnacl-preview - 它发送llvm bitcode到用户的浏览器,它会将bitcode重新编译为当前CPU的机器码? 我不知道使用 C++ 和 LLVM 的例子,但这就是 android 的 ART 虚拟机的工作方式。当应用程序安装在手机上时,Java 字节码被编译为本机代码。相同的想法,但使用 Java / ART 而不是 C++ / LLVM。 【参考方案1】:

正如@delnan 所指出的,这通常是不可能的。 LLVM 是一个目标独立 IR,但它不是可移植

已经有一些尝试构建便携式 IR,其中包括 PNaCl,但这些与 LLVM 不同。

【讨论】:

【参考方案2】:

LLVM IR 是独立于目标的,这意味着它可以在一台机器上生成(编译时)并在另一台机器上转换为字节码(链接时),并且它仍然会生成与第一台机器上相同的字节码,前提是您正在使用具有相同选项的相同版本的 LLVM。这并不意味着生成的 IR 会在所有机器上生成有效的二进制文件。

问题在于 ABI 在不同系统之间的差异。

这篇文章更详细地解决了这些差异: LLVM bitcode cross-platform

【讨论】:

以上是关于llvm 和安装时间优化的主要内容,如果未能解决你的问题,请参考以下文章

使用 LLVM 构建和任何优化都会导致应用程序在启动时崩溃

如何禁用 LLVM 中的优化

如何告诉 LLVM 它可以优化离店?

LLVM 之 IR 篇:如何扩展 LLVM IR 优化器

LLVM 之 IR 篇:如何基于传统 Pass 框架扩展 LLVM IR 优化器

LLVM 的DSA与APA优化