3.4.129 –xinline_param=a[,a[,a]...]
使用该选项可手动更改编译器用来确定何时内联函数调用的试探式方法。
该选项仅在 -O3 或更高级别上起作用。当自动内联处于启用状态时,以下子选项仅在 -O4 或更高级别上起作用。
在以下子选项中,n 必须是正整数;a 可以是以下几项之一:
表 3-19 -xinline_param 子选项
|
|
default
|
将所有子选项的值设置为缺省值。
|
max_inst_hard[:n]
|
自动内联只将小于n个伪指令(在编译器的内部表示中计数)的函数视为可能的内联候选函数。
在任何情况下,都不会考虑对大于该值的函数进行内联。
|
max_inst_soft[:n]
|
将内联函数的大小限制设置为 n 个伪指令(在编译器的内部表示中计数)。
有时可能会对大小大于该值的函数进行内联。
与 max_inst_hard 交互时,max_inst_soft 的值应该等于或小于 max_inst_hard 的值,即 max_inst_soft <= max_inst_hard。
一般而言,编译器的自动内联程序仅内联所调用函数的大小小于 max_inst_soft 的值的调用。在某些情况下,当函数大小大于 max_inst_soft 的值但小于 max_inst_hard 的值时,可能会内联函数。例如,当传递到函数中的参数是常量时。
当确定是否为了将一个特定调用点内联到函数中而更改 max_inst_hard 或 max_inst_soft 的值时,请使用 -xinline_report=2 报告详细的内联消息,并遵循内联消息中的建议。
|
max_function_inst[:n]
|
允许函数因自动内联而最多增加 n 个伪指令(在编译器的内部表示中计数)。
|
max_growth[:n]
|
允许自动内联程序将程序大小最多增大 n%,其中大小以伪指令数度量。
|
min_counter[:n]
|
为了考虑要自动内联的函数而通过分析反馈 (-xprofile) 度量的最小调用点频率计数。
仅当使用分析反馈 (-xprofile=use) 编译应用程序时,该选项才有效。
|
level[:n]
|
使用该子选项可控制所应用自动内联的程度。-xinline_param=level 的设置越高,编译器内联的函数越多。
n 必须为 1、2 或 3 之一。
当未指定该选项时或者当指定不带 :n 的选项时,n 的缺省值为 2。
指定自动内联的 level:
level:1 基本内联
level:2 中等内联(缺省值)
level:3 主动内联
level 决定了为以下内联参数组合指定的值:
max_growth
+ max_function_inst
+ max_inst
+ max_inst_call
当 level = 1 时,所有参数都是缺省值的一半。
当 level = 2 时,所有参数都是缺省值。
当 level = 3 时,所有参数都是缺省值的两倍。
|
max_recursive_depth[:n]
|
当函数直接或间接调用自身时,我们说它进行递归调用。
该子选项可使递归调用自动内联到最高 n 级别。
|
max_recursive_inst[:n]
|
指定递归函数的调用方通过执行自动递归内联可增大到的最大伪指令数(在编译器的内部表示中计数)。
当 max_recursive_inst 与 max_recursive_depth 之间发生交互时,直到 max_recursive_depth 个递归调用或者直到内联到的函数的大小超过 max_recursive_inst,才会内联递归函数调用。这两个参数的设置控制小型递归函数的内联程度。
|
|
如果指定了 -xinline_param=default,编译器会将子选项的所有值设置为缺省值。
如果不指定该选项,则缺省值为 -xinline_param=default。
值和选项的列表从左至右进行累积。所以对于 -xinline_param=max_inst_hard:30,..,max_inst_hard:50 的规范,值 max_inst_hard:50 将传递给编译器。
如果在命令行上指定了多个 -xinline_param 选项,则子选项的列表同样从左至右进行累积。例如,
-xinline_param=max_inst_hard:50,min_counter:70 ...
-xinline_param=max_growth:100,max_inst_hard:100
的效果等同于
-xinline_param=max_inst_hard:100,min_counter:70,max_growth:100