プロシージャ間の最適化の概要

プロシージャ間の最適化 (IPO) を有効にするには、-ip -ipo を使用します。 IPO を実行すると、コンパイラがコードを分析し、次の表に一覧表示されている最適化の中から、ユーザにメリットのある最適化を判断します。

IA-32 および Itanium® ベース・アプリケーション

最適化項目

影響を受ける部分

関数のインライン展開

呼び出し、ジャンプ、分岐、ループ

プロシージャ間での定数伝播

引数、グローバル変数、戻り値

モジュール・レベルでの静的変数の監視

現状以上の最適化、ループ不変コード

不要コードの排除

コードのサイズ

関数特性の伝播

呼び出し命令の削除と呼び出し命令の移動

マルチファイルの最適化

-ip と同じですが、複数のファイル全体にわたって最適化を行います。

IA-32 アプリケーションのみ

最適化項目

影響を受ける部分

レジスタ内での引数の受け渡し

呼び出し、レジスタの使用

ループ不変コードの移動

現状以上の最適化、ループ不変コード

関数のインライン展開は、プロシージャ間の最適化機構によって実行する主な最適化機能のうちの 1 つです。コンパイラは、頻繁に実行する関数呼び出しが存在していると判断した場合、その呼び出し命令を、当該関数自体のコードに置き換えることがあります。

-ip オプションを指定すると、現在のソースファイル内で定義しているプロシージャ内での呼び出し命令について関数のインライン展開を実行します。ただし、-ipo オプションを使用してマルチファイル IPO を指定すると、別々のファイル内で定義しているプロシージャ内での呼び出し命令について関数のインライン展開が実行されます。

IPO の最適化を無効にするには、-O0 オプションを使用します。

-ip-ipo のどちらのオプションを指定した場合も、条件によってはコンパイル時間とコードサイズが著しく増える場合があります。

Itanium ベース・システムの -auto_ilp32 オプション

Itanium ベース・システムで -auto_ilp32 オプションを使用するには、プログラム全体にわたるプロシージャ間の分析が必要です。32 ビットアドレス空間を超えることができない (32 ビットポインタを使用する) アプリケーションを指定します。32 ビットアドレス空間 (2^32) を超えることができるプログラムで -auto_ilp32 オプションを使用すると、プログラム実行中に予期しない問題が発生することがあります。

この最適化にはプログラム全体のプロシージャ間分析が必要なので、 -auto_ilp32 オプションと -ipo オプションの両方を使用しなければなりません。

インテル® エクステンデッド・メモリ 64 テクノロジ (インテル® EM64T) システムでは、-xP または -axP を指定しない限り、-auto_ilp32 は何の効果もありません。