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 の値より小さい場合は、関数がインライン化されることがあります。この場合の例は、関数に渡されたパラメータが定数である場合です。
関数の特定の 1 つの呼び出しサイトをインライン化するために 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 の場合、すべてのパラメータはデフォルト値の 2 倍になります。
|
max_recursive_depth[:n]
|
関数がそれ自体を直接または間接に呼び出している場合は、再帰呼び出しが発生していると言います。
このサブオプションは、再帰呼び出しを最大 n レベルまで自動的にインライン化することを許可します。
|
max_recursive_inst[:n]
|
自動再帰インライン化を実行することによって、再帰呼び出しの呼び出し元で増やすことができる疑似命令 (コンパイラの内部表現でカウントされます) の最大数を指定します。
max_recursive_inst および max_recursive_depth の間で相互作用が発生した場合、再帰関数呼び出しは、再帰呼び出しの max_recursive_depth の数まで、またはインライン化される関数のサイズが max_recursive_inst を超えるまでインライン化されます。これらの 2 つのパラメータの設定は、小さい再帰関数のインライン化の度合いを制御します。
|
|
-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