Hexagon LLVM编译架构介绍(11)
3.4.18 具体优化
参数 | 描述 |
---|---|
-falign-functions [=n] | 控制功能对齐。设置 -falign-functions=1 和 -fno-align-functions 是等效的,导致禁用功能对齐。设置 -falign-functions=0 或 -falign-functions(没有值指定)使用目标的默认对齐值启用函数对齐。设置 -falign-functions=n 启用函数对齐,使用大于 n 的下一个 2 的幂作为对齐值,其中 n 是字节数。默认是不对齐函数。要在 Os 级别启用函数对齐,必须设置额外的 falign-os 选项。 |
-falign-jumps [=n] | 控制跳跃对齐。 设置 -falign-jumps=1 和 -fno-align-jumps 是等效的,导致禁用跳转对齐。 设置 -falign-jumps=n 启用使用下一个大于 n 的 2 的幂作为对齐值的跳转对齐,其中 n 是字节数。 默认是不对齐跳转。 要在 Os 级别启用跳转对齐,必须设置额外的 falign-os 选项。 |
-falign-labels [=n] | 控制标签(分支目标)对齐。 设置 -falign-labels=1 和 -fno-align-labels 是等效的,导致禁用标签对齐。 设置 -falign-labels =0 或 -falign-labels(未指定值)使用目标的默认对齐值启用标签对齐。 设置 -falign-labels=n 启用标签对齐,使用大于 n 的下一个 2 的幂作为对齐值,其中 n 是字节数。 默认是不对齐标签。 要控制应对齐的标签类型,请使用带有字符串“none”(不对齐分支目标)、“nocalls”(不对齐函数调用)、“allcalls”(对齐 在函数调用之后)。 要在 Os 级别启用标签对齐,还必须设置 -falign-os。 |
-falign-loops [=n] | 控制回路对齐。 设置 -falign-loops=1 和 -fno-align-loops 是等效的,导致禁用循环对齐。 设置 -falign-loops=0 或 -falign-loops(未指定值)使用目标的默认对齐值启用循环对齐。 设置 -falign-loops=n 启用循环对齐,使用大于 n 的下一个 2 的幂作为对齐值,其中 n 是字节数。 默认是不对齐循环。 要在 Os 级别启用循环对齐,必须设置额外的 falign-os 选项。 |
-fdata-sections | 将每个数据项分配给它自己的部分。 |
-ffunction-sections | 将每个功能项分配给输出文件中其自己的部分。 该部分以分配给它的功能命名。 |
-finline | 将 inline 关键字指定为 active。 |
-finline-functions | 执行启发式选择的函数内联。 |
-fnomerge-all-constants | 不要合并常量。 |
-fomit-frame-pointer | 如果函数中不需要堆栈帧指针,则不要将堆栈帧指针存储在寄存器中。 |
-foptimize-sibling-calls | 优化函数同级调用和尾递归调用。 |
-fstack-protector | 生成检查所选函数是否存在缓冲区溢出的代码。 |
-fstack-protector-all | 生成检查所有函数是否存在缓冲区溢出的代码。 |
-fstrict-aliasing | 对正在编译的语言执行尽可能严格的别名规则。 |
-funit-at-a-time | 在开始代码生成之前解析整个编译单元。 |
-funroll-all-loops | 展开所有循环。 |
-funroll-loops | 展开选定的循环。 |
-fno-zero-initialized-in-bss | 将所有初始化为零的变量分配给 BSS 部分。 |
3.4.19 数学优化
参数 | 描述 |
---|---|
-fassociative-math | 允许重新关联浮点运算序列中的操作数。 因为它可能对浮点比较重新排序,所以在需要有序比较的情况下不能使用此选项。 要使用此选项,必须同时启用 -fno-signed-zeros 和 -fno-trapping-math,而不得启用 -frounding-math。 |
-ffast-math | 在编译器前端启用“快速数学”模式。 这对优化没有影响,但定义了与 GCC -ffast-math 选项相同的预处理器宏 FAST_MATH。 |
-finite-math-only | 启用假设浮点参数和结果值永远不会是 NaN 或 ±Infs 的优化。 |
-fno-math-errno | 不要在使用单指令数学函数后设置 ERRNO。 |
-freciprocal-math | 启用假设可以使用值的倒数而不是除以值的优化。 |
-fno 有符号零 | 启用忽略浮点零值符号的优化。 |
-fno-trapping-math | 启用假定浮点运算无法生成用户可见陷阱的优化。 |
-funsafe-math-optimizations | 启用假定浮点参数和结果有效且可能违反 IEEE 或 ANSI 标准的代码优化。 此选项启用 -fno-signed-zeros 、 -fno-trapping-math 、-fassociative-math 和 -freciprocal-math 。 |
3.4.20 链接时间优化
参数 | 描述 |
---|---|
-S-lto | 运行 LLVM 编译器,直到并包括链接时优化器的程序集生成步骤(第 3.6.4 节)。 |
-c-lto | 运行 LLVM 编译器,直到并包括链接时优化器的对象生成步骤。 |
-Wlto arg, … | 将指定的参数传递给链接时优化器。 参数列表跟在选项后面,并以逗号分隔。 |
-flto-scope=(program|library) | 指定链接时优化的范围(第 3.6.4 节)。程序,跨所有位代码对象和档案应用模块间优化。库,仅在归档边界应用模块间优化。 |
-lto-no-inter-mod-inline | 在链接时优化期间禁用跨模块边界内联。 |
-lto-w-no-unknown-sym | 禁用有关保留未知符号的警告。 |
-lto-preserve symbol | 防止链接时优化丢弃符号。 |
-lto-preserve-list filename | 指定链接时优化器应保留的符号。 指定的文本文件包含一个符号列表,每个符号在文件中的单独一行中。 |
3.4.21 安全编程
参数 | 描述 |
---|---|
–analyze | 对指定的输入文件调用静态程序分析器(第 3.7.1 节)。 --compile-and-analyze dir 在运行静态分析器时编译输入文件(第 3.7.1 节)。 分析报告文件写入指定目录。 |
-analyzer-output type | 指定静态分析器输出报告的数据格式。 HTML 是唯一支持的格式 - type 必须设置为值 html 。 |
-analyzer-checker=checker | 在静态程序分析器中启用指定的检查器或检查器类别。 检查器类别是 alpha 、 core 、 cplusplus 、 debug 和 security 。 启用检查器类别会启用该类别中的所有检查器。 有关检查器名称的完整列表,请使用 -analyzer-checker-help 。 |
-analyzer-disable-checker=checker | 在静态程序分析器中禁用指定的检查器或检查器类别。 检查器类别是 alpha 、 core 、 cplusplus 、 debug 和 security 。 禁用检查器类别会禁用该类别中的所有检查器。 有关检查器名称的完整列表,请使用 -analyzer-checker-help 。 |
-analyzer-checker-help | 列出在 -analyzer-checker 和 -analyzer-checker-disable 中使用的完整检查器集及其类别。 |