Hexagon LLVM编译架构介绍(14)

240 篇文章 11 订阅
本文介绍了Hexagon LLVM编译器的合并函数功能,通过示例展示如何合并相似函数以减小代码体积。同时,讲解了链接时间优化(LTO)的内涵、实现方式、使用场景及注意事项,包括优化器的调用、工作原理和限制条件。
摘要由CSDN通过智能技术生成

Hexagon LLVM编译架构介绍(14)

3.6.3 合并功能

LLVM 包括对函数合并的支持。 默认情况下,此优化是禁用的 - 要启用它,请使用 -fmerge-functions 选项(第 3.4.15 节)。
函数合并试图通过合并仅在少数指令中等效或不同的函数来改善代码大小。 优化使用许多启发式方法来确定是否值得合并一对函数。 例如,非常小的功能或具有显着差异的功能通常不会合并。

以下示例显示了函数合并的工作原理:

int f1(int a, int b) {          int f2(int a, int b) {
    int x;                                          int x;
    x = a + 4;                                   x = a + 10;
    return x * b;                            return x * b;
}                                                }

函数合并确定函数 f1 和 f2 相似,并替换为以下函数:

int f1__merged(int a, int b, int choice) {
    int x;
    if (choice)
        x = a + 10;
    else
        x = a + 4;
    return x * b;
}
int f1(int a, int b) {
        return f1__merged(a, b, 0);
}
int f2(int a, int b) {
    return f1__merged(a, b, 1);
}

此示例仅用于说明目的。 在实践中,优化器会确定函数 f1 和 f2 太小,不值得合并。

注意 
    因为函数合并可能会对程序性能产生负面影响,所以默认情况下它是禁用的,只有在明确指定时才启用。

3.6.4 链接时间优化

链接时优化 (LTO) 包括一组强大的互模块优化,这些优化在链接 LLVM 位码文件或存档时执行。
LTO 包含以下元素:

  • 链接时优化器,一种编译器特性(由选项-flto 控制),它在将文件链接在一起时执行模块间优化。
  • 一组控制链接时优化器的编译器选项(第 3.4.20 节)。
  • LTO 特定的属性 lto_preserve,当应用于 C 或 C++ 函数或变量时,可以防止它被链接时优化器丢弃。

链接时优化器
使用以下命令调用链接时优化器:
hexagon-clang -flto input_files…

优化器输入几个 LLVM 位码文件或档案。 然后将指定的文件链接在一起,作为一个整体对它们执行指定的模块间优化,最后生成包含优化结果的单个程序集文件。

优化器执行的一项重要优化是积极删除它认为不会使用的函数。 为了给优化器提供一个更大的上下文来确定是否使用了一个函数,文件名列表可能包括额外的非位代码对象和档案。 优化器将使用这些文件中的符号信息来确定是否应保留函数。 您还可以使用优化器选项 -lto-preserve 或 -lto-preserve-list 明确指示优化器保留符号。

优化器有以下限制:

  • 档案必须是同类的:给定档案的所有成员必须是位代码文件或目标文件。
  • 优化器对链接器信息的理解不如生产质量的链接器完整。 虽然优化器尝试使用选项-lto-preserve 或 -lto-preserve-list 消除显式保留符号的需要,但它可能无法在所有情况下都这样做。 此功能有望随着时间的推移而改进,因此如果您遇到优化器无法正确处理的情况,请向开发人员报告问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值