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 代码优化,并执行其他优化以减少代码大小。 |