IPO レポートはインライン展開された関数についての情報を提供し、問題のあるループの特定に役立ちます。また、コンパイラーがソースコードに適用した IPO の場所と方法を特定するのにも役立ちます。
次の例では、最小限の出力で IPO レポートを実行するコマンドを示します。
プラットフォーム |
構文例 |
---|---|
Linux および Mac OS |
icc -opt-report 1 -opt-report-phase ipo a.cpp b.cpp |
Windows |
icl /Qopt-report 1 /Qopt-report-phase:ipo a.cpp b.cpp |
-opt-report (Linux および Mac OS) または /Qopt-report (Windows) は、レポート・ジェネレーターを起動し、-opt-report-phase ipo (Linux および Mac OS) または /Qopt-report-phase:ipo (Windows) は、レポートを生成するフェーズ (ipo) を示します。
-opt-report-file (Linux および Mac OS) または /Qopt-report-file (Windows) を使用して、レポート結果をキャプチャーする出力ファイルを指定します。結果をキャプチャーするファイルを指定することで、結果の解析に費やす時間を短縮でき、後に行うテスティングの基本ラインをつかむことができます。
IPO レポートの詳細情報には、プログラム全体の解析とインライン展開の 2 つのセクションがあります。デフォルトでは、中レベルの詳細が含まれるレポートが生成されます。レポート結果をキャプチャーする出力ファイルは指定することができます。詳細レベルを最大にして IPO レポートを実行すると、非常に広範囲で専門的な内容がレポート結果に出力されます。結果をキャプチャーするファイルを指定することで、解析時間を短くすることができます。次のサンプルレポートは、一般的なレイアウトを示しています。
サンプル IPO レポート |
---|
IP OPTIMIZATION REPORT: ... WHOLE PROGRAM (SAFE) [EITHER METHOD]: TRUE WHOLE PROGRAM (SEEN) [TABLE METHOD]: TRUE WHOLE PROGRAM (READ) [OBJECT READER METHOD]: TRUE INLINING OPTION VALUES: -inline-factor: 100 -inline-min-size: 7 -inline-max-size: 230 -inline-max-total-size: 2000 -inline-max-per-routine: disabled -inline-max-per-compile: disabled INLINING REPORT: (main) [1/5=20.0%] -> INLINE: _Z3bari(6) (isz = 12) (sz = 17 (5+12)) -> _ZNSolsEPFRSoS_E(EXTERN) ... |
次の表は、一般的なレポート要素と結果の解釈に役立つ説明をまとめたものです。
レポート要素 |
説明 |
---|---|
WHOLE PROGRAM (SAFE) [EITHER METHOD]: |
TRUE または FALSE。
プログラム全体の解析モデルについての詳細は、「プロシージャー間の最適化の概要」を参照してください。 |
WHOLE PROGRAM (SEEN) [TABLE METHOD]: |
TRUE または FALSE。
|
WHOLE PROGRAM (READ) [OBJECT READER METHOD]: |
TRUE または FALSE。
|
INLINING OPTION VALUES: |
次のデベロッパーが指示するインライン展開オプションで使用されるコンパイル値を示します。
1 つまはた複数のオプションを指定すると、レポートでは指定された値がリストされます。オプションと値を指定しない場合は、コンパイラーはリストされたオプションのデフォルト値を使用し、レポートにはデフォルト値が表示されます。 値は、各オプションの「コンパイラー・オプション」にリストされている同じ中間言語ユニットを示します。これらのオプションの使用については、「デベロッパーが指示するユーザー関数のインライン展開」を参照してください。 |
INLINING REPORT: |
次の形式で示されます。 (<name>) [<current number>/<total number>=<percent complete>] 各アイテムの意味は次のとおりです。
|
-> INLINE: |
関数がインライン展開されると、関数行にプリフィックス "-> INLINE: _" が付きます。 オプションレポートには、マングル化された 関数名が表示されます。 レポートでは、次の一般的な構文形式が使用されます。 -> INLINE: _<name>(#) (isz) (sz) 各アイテムの意味は次のとおりです。
|
DEAD STATIC FUNCTION ELIMINATION: |
レポートされた関数が不要なスタティック関数であることを示します。これらの関数のコードを作成する必要はありません。この動作により、全体のコードサイズを抑えることができます。 |