天天看点

Hexagon LLVM编译架构介绍(10)

Hexagon LLVM编译架构介绍(10)

      • 3.4.15 代码生成
      • 3.4.16 矢量化
      • 3.4.17 优化

3.4.15 代码生成

参数 描述
-fasynchronous-unwind-tables 生成展开表。 该表以 DWARF2 格式存储。
-fno-common 在目标文件数据部分分配未初始化的全局变量(而不是在公共块中生成它们)。
-femit-all-data 发出所有数据,即使未使用。
-femit-all-decls 发出所有声明,即使未使用。
-fno-exceptions 不要生成用于传播异常的代码。
-finstrument-functions 在函数入口和出口中生成检测调用。
-fmerge-functions / -fno-merge-functions 尝试合并等效的函数,或者只有几个指令不同的函数(第 3.6.3 节)。 默认设置是禁用的。 此选项尝试通过合并类似函数来改善代码大小。 它使用许多启发式方法来确定合并一对函数是否值得。 例如,非常小的功能或具有显着差异的功能通常不会合并。
注意 
由于此选项可能会对程序性能产生负面影响,因此默认情况下它处于禁用状态,只有在明确指定时才会启用。

           
参数 描述
-fpack-struct / -fpack-struct=n 在内存中打包结构成员而无需填充。 如果指定了参数,则它表示最大压缩对齐,限制为 2 的小幂。
-fpic 生成位置无关代码 (PIC) 以在共享库中使用。
-fPIC 为动态链接生成与位置无关的代码,避免对全局偏移表的大小进行任何限制。
-fpie / -fPIE 生成位置无关代码 (PIC) 以链接到可执行文件。
-fshort-enum / -fno-short-enums 仅分配给枚举类型所声明的可能值范围所需的字节数。 默认是禁用的。
-fshort-wchar / -fno-short-wchar 强制 wchar_t 为 short unsigned int。 默认是禁用的。
-ftrap-function=name 发出对指定函数的调用而不是陷阱指令。
-ftrapv 整数溢出陷阱。
-ftrapv-handler=name 指定溢出时要调用的函数。
-funwind-tables 与 -fexceptions 类似,不同之处在于它只生成任何必要的静态数据,不会以任何其他方式影响生成的代码。
-fverbose-asm 为生成的汇编代码添加注释信息以提高代码可读性。
-fwrapv 将有符号整数溢出视为二进制补码。
-fvisibility=[default internal
-G size 将适合指定大小的数据对象分配给 .sdata/.sbss 部分。 大小以字节为单位。 默认值为 8。使用“-G 0”编译有以下要求:指定 -mG0lib;应用程序中的所有其他文件必须使用“-G 0”编译。应用程序编译时的 -G 值必须不大于编译其任何库时使用的最小 -G 值。
-mno-global-merge 禁用全局变量的合并。
-mlong-calls 产生long-call。
-pthread 在生成的代码中支持 POSIX 线程。

3.4.16 矢量化

参数 描述
-fvectorize-loops 执行循环代码的自动矢量化(第 3.6.2 节)。 矢量化受到以下限制: 在嵌套循环中,它仅在最里面的循环上执行; 只能与代码优化级别 -O3 一起使用。

3.4.17 优化

参数 描述
-O / -O1 启用以下代码优化: -fdefer-pop 、-fmerge-constants 、-fthread-jumps 、-floop-optimize 、-fif-conversion 、-fif-conversion2 、-fdelayed-branch 、-fguess-branch-probability 、-fcprop-registers
-O2 启用 -O 指定的代码优化,以及以下附加优化: -foptimize-sibling-calls 、-fstrength-reduce 、-fcse-follow-jumps -fcse-skip-blocks 、-frerun-cse-after-loop -frerun-loop-opt 、-fgcse -fgcse-lm -fgcse-sm -fgcse-las 、-fdelete-null-pointer-checks 、-fexpensive-optimizations 、-fregmove 、-fschedule-insns -fschedule-insns2 、-fsched-interblock -fsched-spec 、-fcaller-saves 、-fpeephole2 、-freorder-blocks -freorder-functions 、-fstrict-aliasing 、-funit-at-a-time 、-falign-functions -falign-jumps 、-falign-loops -falign-labels 、-fcrossjumping
-O3 启用 -O2 指定的代码优化,以及以下附加优化: -finline-functions、-fweb、-frename-registers
-O0 不优化。 这是默认的优化设置。
-Os 启用所有通常不会增加代码大小的 -O2 代码优化,并执行其他优化以减少代码大小。

继续阅读