-ip と -ipo を使用してプロシージャ間の最適化(IPO)を有効にすれば、コンパイラにコードを分析させて、次の表に示す最適化がどの部分に適用するかを調べられます。
最適化項目 | 影響を受ける部分 |
---|---|
関数のインライン展開 | 呼び出し、ジャンプ、分岐、ループ |
プロシージャ間での定数伝播 | 引数、グローバル変数、戻り値 |
モジュール・レベルでの静的変数の監視 | 現状以上の最適化、ループ不変コード |
不要コードの排除 | コードのサイズ |
関数特性の伝播 | 呼び出し命令の削除と呼び出し命令の移動 |
マルチファイルの最適化 | -ip と同じ部分に影響を与えますが、複数のファイル全体にわたって最適化を行います。 |
最適化項目 | 影響を受ける部分 |
---|---|
レジスタ内での引数の受け渡し | 呼び出し、レジスタの使用 |
ループ不変コードの移動 | 現状以上の最適化、ループ不変コード |
関数のインライン展開は、プロシージャ間の最適化機構によって実行する主な最適化機能のうちの1つです。コンパイラは、頻繁に実行する関数呼び出しが存在していると判断した場合、その呼び出し命令を、当該関数自体のコードに置き換えるがあります。(呼出しのインライン展開)
-ipオプションを指定すると、現在のソースファイル内で定義している関数内での呼び出し命令について関数のインライン展開を実行します。ただし、-ipoオプションを使用してマルチファイルIPOを指定すると、別々のファイル内で定義している関数内での呼び出し命令について関数のインライン展開が実行されます。このため、ipoを指定する場合、アプリケーション全体または複数の関連するソースファイルを一緒にコンパイルすることは重要です。
IPOによる最適化は、デフォルトでは実行されません。