関数への呼び出しを生成する代わりに、それらの関数のインライン化を試行する。 インライン化は可能な場合に実行されますが、どの最適化が行われるに応じて、インライン化されない関数もあります。
.-noinline-----------------------. >>- -q--+-inline--+--------------------+-+--------------------->< +-=threshold=num-----+ | .-:-----. | | V | | '-+- + -+----names-+-' '- - -'
C 言語では、以下の -qinline オプションが適用されます。
-qinline | コンパイラーは、-qinline オプションのサブオプションの他のすべての設定に従って、実行可能ソース・ステートメントが 20 以下のすべての適切な関数のインライン化を試行します。 -qinline が最後に指定された場合は、すべての関数がインライン化されます。 |
-qinline=threshold=num | インライン化する関数に対してサイズ制限を設定します。実行可能ステートメントの数は、
インライン化する関数の num 以下でなければなりません。
num は正の整数でなければなりません。
デフォルト値は 20 です。
しきい値 0 を指定すると、inline 関数指定子のサポートされる形式でマークされた関数を除き、関数はインライン化されません。
num 値は、論理 C ステートメントに適用されます。 以下の例で分かるように、宣言はカウントされません。 increment() { int a, b, i; for (i=0; i<10; i++) /* statement 1 */ { a=i; /* statement 2 */ b=i; /* statement 3 */ } } |
-qinline-names | コンパイラーは、names にリストされた関数をインライン化しません。
それぞれの name はコロン (:) で分離します。
他のすべての適切な関数はインライン化されます。このオプションは、-qinline を暗黙指定します。
例を以下に示します。 -qinline-salary:taxes:expenses:benefits これによって、salary、taxes、expenses、または benefits という名前の関数以外のすべての関数が、可能であればインライン化されます。 ソース・ファイルに定義されていない関数については、警告メッセージが出されます。 |
-qinline+names | names にリストされた関数および他のすべての適切な関数をインライン化しようとします。
それぞれの name は、コロン (:) で分離しなければなりません。
このオプションは、-qinline を暗黙指定します。
例を以下に示します。 -qinline+food:clothes:vacation これによって、インライン化に適格な他の関数とともに、可能な場合、food、clothes、または vacation という名前の関数がすべてインライン化されます。 ソース・ファイルに定義されていない関数、または定義はされているがインライン化できない関数については、警告メッセージが出されます。 このサブオプションは、threshold 値の設定をすべてオーバーライドします。 -qinline+names と一緒に、ゼロのしきい値を使用して、特定の関数をインライン化することができます。例を以下に示します。 -qinline=threshold=0 これに以下を続けて指定します。 -qinline+salary:taxes:benefits これによって、salary、taxes、または benefits という名前の関数のみ が、可能な場合にインライン化され、それ以外はインライン化されません。 |
-qnoinline | 関数を一切インライン化しません。 -qnoinline が最後に指定されている場合、関数は一切インライン化されません。 |
C++ 言語では、以下の -qinline オプションが適用されます。
-qinline | コンパイラーは可能な関数をすべてインライン化します。 |
-qnoinline | コンパイラーは関数を一切インライン化しません。 |
デフォルトでは、インラインの指定はコンパイラーに対するヒントとして扱われ、選択された他のオプションに応じて結果は以下のようになります。
-qinline オプションは、-Q オプションと機能的に同等です。
(デバッグ情報を生成するために) -g オプションを指定すると、インライン化に影響する可能性があります。-gコンパイラー・オプションの情報を参照してください。
インライン化は必ずしもランタイム・パフォーマンスを改善するわけではないので、ユーザー自身のコードでこのオプションの効果をテストしてください。再帰的関数または相互に再帰的な関数はインライン化しないでください。
通常、最適化を要求する (-O オプション) とアプリケーションのパフォーマンスが最適化され、最適化を要求しないとコンパイラーのパフォーマンスが最適化されます。
インライン化を最大化する場合は、最適化 (-O) に加え、 適切な -qinline オプションを指定します。
XL C/C++ のキーワード inline、__inline__、_inline、_Inline、および __inline は、-qnoinline を除き、すべての -qinline オプションをオーバーライドします。コンパイラーは、他の -qinline オプション設定に関係なく、これらのキーワードでマークされた関数のインライン化を試行します。
詳しくは、『インライン関数指定子』を参照してください。
関数を一切インライン化しないように myprogram.C をコンパイルするには、以下のように入力します。
xlc++ myprogram.C -O -qnoinline
コンパイラーが 12 行未満の関数のインライン化を試行するように myprogram.c をコンパイルするには、以下のように入力します。
xlc myprogram.c -O -qinline=12
関連情報