マルチファイル IPO の概要

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

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

コンパイル・フェーズ

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

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

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

リンケージ・フェーズ

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

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

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