概要: マルチファイル IPO

マルチファイル IPO とは、最適化の余地がないかどうかについての情報を、マルチファイル・プログラムの個々のプログラム・モジュールから得るものです。コンパイラはこの情報を使用して、複数のモジュール全体にわたって最適化を行います。

プログラムを構築する工程はコンパイルとリンケージに分かれています。マルチファイル IPO の処理内容は、実行するのがコンパイルかリンケージかによって違ってきます。

コンパイル・フェーズ

各ソースファイルがコンパイルされるたびに、マルチファイル IPO はソースコードの中間表現 (IR) を擬似オブジェクト・ファイルに格納します。このオブジェクト・ファイルには、最適化に使うサマリ情報が含まれています。

特に指定しない限り、コンパイラは、マルチファイル IPO のコンパイル・フェーズの最中に、擬似オブジェクト・ファイルをいくつか生成します。実際のオブジェクト・ファイルの代わりに擬似オブジェクト・ファイルを生成すると、マルチファイル IPO のコンパイル・フェーズに要する時間が短くなります。各擬似オブジェクト・ファイルは、対応するソースファイルの IR を含みますが、実コードもデータも含みません。この擬似オブジェクトは、-ipo オプションを使用するか xild ツールを使用してコンパイラにリンクする必要があります。

-ipoxild を使用して擬似オブジェクト・ファイルをリンクしないとリンケージ・エラーが発生します。場合によっては、擬似オブジェクト・ファイルを使用できない場合があります。詳細については、「実際のオブジェクト・ファイルの生成」を参照してください。

リンケージ・フェーズ

-ipo を指定すると、コンパイラはリンカの直前に起動されます。IR を含むオブジェクト・ファイルすべてを対象にしてマルチファイル IPO が実行されます。

スタティック・ライブラリ (.a ファイル) についてはマルチファイル IPO は利用できません。詳細については、「実際のオブジェクト・ファイルの生成」を参照してください。

-ipo を指定すると、ドライバとコンパイラで自動的にプログラム全体を検出できるようになります。プログラム全体を検出すれば、プロシージャ間の定数伝播、スタックフレームのアライメント、データ・レイアウト、共通ブロックのパディングといった最適化をもっと効率よく実行しますが、削除される不要な関数の数も増えます。このオプションは安全です。