どのユーザー作成ルーチンをオプティマイザによって -xO3 レベル以上でインライン化するかを指定します。
func_spec には次の値のいずれかを指定します。
表 A–33 -xinline の値
値 |
意味 |
---|---|
%auto |
最適化レベル -xO4 以上で自動インライン化を有効にします。この引数は、オプティマイザが選択した関数をインライン化できることをオプティマイザに知らせます。%auto の指定がないと、明示的インライン化が -xinline=[no%]func_name... によってコマンド行に指定されていると、自動インライン化は通常オフになります。 |
func_name |
オプティマイザに関数をインライン化するように強く要求します。関数が extern "C" で宣言されていない場合は、func_name の値を符号化する必要があります。実行可能ファイルに対し nm コマンドを使用して符号化された関数名を検索できます。extern "C" で宣言された関数の場合は、名前はコンパイラで符号化されません。 |
no%func_name |
リスト上のルーチン名の前に no% を付けると、そのルーチンのインライン化が禁止されます。func_name の符号化名に関する規則は、no%func_name にも適用されます。 |
-xipo [=1|2] を使用しないかぎり、コンパイルされているファイルのルーチンだけがインライン化の対象とみなされます。オプティマイザでは、どのルーチンがインライン化に適しているかを判断します。
-xinline オプションを指定しないと、コンパイラでは -xinline=%auto が使用されます。
-xinline= に引数を指定しないと、最適化のレベルにかかわらず関数がインライン化されます。
int foo() を宣言している関数のインライン化を無効にして自動インライン化を有効にするには次のコマンドを使用します。
example% CC -xO5 -xinline=%auto,no%__1cDfoo6F_i_ -c a.cc |
int foo() として宣言した関数のインライン化を強く要求し、ほかのすべての関数をインライン化の候補にするには次のコマンドを使用します。
example% CC -xO5 -xinline=%auto,__1cDfoo6F_i_ -c a.cc |
int foo() として宣言した関数のインライン化を強く要求し、そのほかの関数のインライン化を禁止するには次のコマンドを使用します。
example% CC -xO5 -xinline=__1cDfoo6F_i_ -c a.cc |
-xinline オプションは -xO3 未満の最適化レベルには影響を与えません。-xO4 以上では、-xinline オプションを指定しなくてもオプティマイザでどの関数をインライン化する必要があるかを判断します。-xO4 では、コンパイラはどの関数が、インライン化されたときにパフォーマンスを改善するかを判断しようとします。
ルーチンは、次のいずれかの条件が当てはまる場合はインライン化されます。
最適化は -xO3 以上
インライン化に効果があって安全
コンパイル中のファイルの中に関数がある、または-xipo[=1|2] を使用してコンパイルしたファイルの中に関数がある
-xinline を指定して関数のインライン化を強制すると、実際にパフォーマンスを低下させる可能性があります。